diff options
Diffstat (limited to 'macros/luatex/generic')
127 files changed, 43649 insertions, 3428 deletions
diff --git a/macros/luatex/generic/addtoluatexpath/README.md b/macros/luatex/generic/addtoluatexpath/README.md index da97dfa4a3..722f626cbb 100644 --- a/macros/luatex/generic/addtoluatexpath/README.md +++ b/macros/luatex/generic/addtoluatexpath/README.md @@ -1,8 +1,8 @@ # addtoluatexpath -The `addtoluatexpath` package provides a convenient way to add input and Lua package paths in your document. -You may want this package, for example, if a `.cls` or `.sty` file is located on a network or cloud storage drive. +The `addtoluatexpath` package provides a convenient way to add input and Lua package paths to your document. +You may want this package if `.cls` or `.sty` files are located outside of your tex directories (like a network drive or cloud storage drive). ## Usage * You can either pass the comma-separated paths via package options like `\RequirePackage[path1,path2]{addtoluatexpath}` in pre-amble, @@ -11,24 +11,25 @@ You may want this package, for example, if a `.cls` or `.sty` file is located on eg. `\RequirePackage[C:/Users/me/Desktop/*]{addtoluatexpath}` adds your Desktop and all folders in the desktop to path. * If you wish to include all nested sub-directories of all levels, include a `/**` at the end of the path. * If you want to add to Lua path (`package.path`) only, include `notex=true` in the argument. -* If you want to add to tex input path only, include `nolua=true` in the argument. - eg. `\RequirePackage[nolua=true, C:/Users/me/Desktop/*, /**]{addtoluatexpath}` -* The lua functions below are globally defined: -* `atlp_main(paths_str)` is the main function that runs -* `atlp_paths = {}` is a table containing all paths added by this package -* `atlp_find_file(file_str)` is a function that returns the full path of a file, it searches through all paths that were input to this package and returns the first valid. If no paths are found, an error is issed +* If you want to add to tex input path only, include `nolua=true` in the argument, eg. `\RequirePackage[nolua=true, C:/Users/me/Desktop/*, /**]{addtoluatexpath}`. +* If you want to supress a package error that comes up if a directory you try to add does not exist, set `noerror=true`. +* The lua table `addtoluatexpath` is globally defined with the following attributes: +* `.main(paths_str)` is the main function that runs, `paths_str` is the argument to `\addtoluatexpath` or the package options. +* `.paths = {'.', ...}` is a table containing all paths added by this package +* `.find_file(file_str)` is a function that returns the full path of a file, it searches through all paths that were input to this package and returns the first valid. If no paths are found, an error is issued. +* `.prt_paths()` prints the paths to the log file. -## Note -This package appends to the `package.path` Lua variable and the `\input@path` command (it first uses `\providecommand` to intialize it). -Lua files in the added paths can then added via `require'fileinpath1'`; however `loadfile` and `dofile` still require the full path. +## Notes +This package appends to the `package.path` Lua variable and the `\input@path` command sequence (it first uses `\providecommand` to initialize it). +Lua files in the added paths can then be added via `require'fileinpath1'`; however `loadfile` and `dofile` still require the full path. Caveat: `graphicx` internally uses `\input@path` as a default list of the paths; -therefore, paths specified by this package will also include graphics if the `graphicx` package is loaded after paths are set. -However, if `\graphicspath{}` is used after paths are added by this package, graphics search paths will not use `\input@path`, omitting the paths you added with this package. +therefore, paths specified by this package will also include graphics if the `graphicx` package is loaded _after_ paths are set. +However, if `\graphicspath{}` is used after paths are added by this package, graphics search paths will not use `\input@path`, therefore not using the paths you added with this package. ## Dependencies -`luacode`, `luakeys`, `penlight` (only if using `*` in paths) +`luacode`, `luakeys`, `penlight` ## Repo & Contact @@ -39,7 +40,7 @@ However, if `\graphicspath{}` is used after paths are added by this package, gra ## License -Copyright (C) 2023-2024 Kale Ewasiuk +Copyright (C) 2023-2025 Kale Ewasiuk Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/macros/luatex/generic/addtoluatexpath/addtoluatexpath.sty b/macros/luatex/generic/addtoluatexpath/addtoluatexpath.sty index 140a3ac208..a6e525873f 100644 --- a/macros/luatex/generic/addtoluatexpath/addtoluatexpath.sty +++ b/macros/luatex/generic/addtoluatexpath/addtoluatexpath.sty @@ -1,15 +1,39 @@ -\ProvidesPackage{addtoluatexpath}[2024-03-14] +% Copyright (C) 2023-2025 Kale Ewasiuk +% +% Permission is hereby granted, free of charge, to any person obtaining a copy +% of this software and associated documentation files (the "Software"), to deal +% in the Software without restriction, including without limitation the rights +% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +% copies of the Software, and to permit persons to whom the Software is +% furnished to do so, subject to the following conditions: +% +% The above copyright notice and this permission notice shall be included in +% all copies or substantial portions of the Software. +% +% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +% ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +% TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +% PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +% SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +% ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +% ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +% OR OTHER DEALINGS IN THE SOFTWARE. + + +\ProvidesPackage{addtoluatexpath}[2025-01-11] \RequirePackage{luacode} \providecommand{\input@path}{} % initialize input@path if not defined yet \begin{luacode*} + addtoluatexpath = {} - atlp_paths = {"."} -- global table containing paths added by this package + addtoluatexpath.paths = {"."} -- table containing paths added by this package - function atlp_find_file(f) -- find a path in list of atlp_paths - for i, k in pairs(atlp_paths) do + function addtoluatexpath.find_file(f) -- find a path in list of addtoluatexpath.paths + for i, k in pairs(addtoluatexpath.paths) do local fp = kpse.find_file(k ..'/'.. f) if (fp) then return fp @@ -17,52 +41,54 @@ end -- if nothing returned, issue a package error texio.write_nl('addtoluatexpath searched for file: '..f) texio.write_nl('addtoluatexpath searched paths were: '..token.get_macro('input@path')) - tex.sprint('\\PackageError{addtoluatexpath}{a file was not found}{}') + tex.sprint('\\PackageError{addtoluatexpath}{a file was not found, see log.}{}') tex.sprint('\\stop') end - function atlp_main(atlp_raw) -- add to path from raw string - + function addtoluatexpath.main(atlp_raw) -- add to path from raw string + local penlight = require'penlight' + local atlp_tbl = require'luakeys'().parse(atlp_raw, {naked_as_value=true}) -- paths as table local atlp_no_lua = atlp_tbl['nolua'] or false -- check and set nolua=true local atlp_no_tex = atlp_tbl['notex'] or false -- check and set notex=true + local atlp_no_error = atlp_tbl['noerror'] or false -- check and set noerror=true - if atlp_raw:find('*') ~= nil then -- if *, must use penlight to expand subdirectories - penlight = require'penlight' - atlp_tbl = penlight.List(atlp_tbl) -- convert to pl.List for easy manipulation - end + atlp_tbl = penlight.List(atlp_tbl) -- convert to pl.List for easy manipulation for __, p in ipairs(atlp_tbl) do if p:find('*') == nil then -- add paths without *, and continue the loop after if not atlp_no_lua then package.path = package.path .. ';'..p..'/?.lua;' end if not atlp_no_tex then token.set_macro('input@path', token.get_macro('input@path')..'{'..p..'/}', 'global') end - atlp_paths[#atlp_paths + 1] = p -- append the added path to global list - goto continue - end - - local p, c = p:gsub('*','') -- if * added, include subdirectories - local atlp_subdirs = penlight.List(penlight.dir.getdirectories(p)) - -- troubleshooting --texio.write_nl(penlight.pretty.write(atlp_subdirs)) - if c == 2 then - atlp_subdirs = atlp_subdirs:map(function(s) return s ..'/**' end) -- add ** to subdirs for recursive inclusion + if (not atlp_no_error) and (not penlight.path.exists(p)) then + tex.sprint('\\PackageError{addtoluatexpath}{directory "'..p..'" was not found}{}') + end + addtoluatexpath.paths[#addtoluatexpath.paths + 1] = p -- append the added path to global list + else + local p, c = p:gsub('*','') -- if * added, include subdirectories + local atlp_subdirs = penlight.List(penlight.dir.getdirectories(p)) + -- troubleshooting --texio.write_nl(penlight.pretty.write(atlp_subdirs)) + if c == 2 then + atlp_subdirs = atlp_subdirs:map(function(s) return s ..'/**' end) -- add ** to subdirs for recursive inclusion + end + atlp_tbl:append(p) -- make sure p (current path without *) is still added! + atlp_tbl:extend(atlp_subdirs) -- extend path to include additional subdirs; the for loop is lengthened end - atlp_tbl:append(p) -- make sure p (current path without *) is still added! - atlp_tbl:extend(atlp_subdirs) -- extend path to include additional subdirs; the for loop is lengthened - - ::continue:: end - - -- -- troubleshooting: show all paths - --texio.write_nl('Lua Paths >>> \n'..package.path:gsub(';','\n')) - --texio.write_nl('TeX Paths >>> \n'..token.get_macro('input@path'):gsub('}{','\n')) - end - - atlp_main(token.get_macro('@raw@opt@addtoluatexpath.sty')) - + + + function addtoluatexpath.prt_paths() + texio.write_nl('Lua Paths >>> \n'..package.path:gsub(';','\n')) + texio.write_nl('\nTeX Paths >>> \n'..token.get_macro('input@path'):gsub('}{','\n')) + end + + ---- ---- ---- add paths passed as package options + addtoluatexpath.main(token.get_macro('@raw@opt@addtoluatexpath.sty')) + ---- ---- ---- + \end{luacode*} -\NewDocumentCommand{\addtoluatexpath}{m}{\luadirect{atlp_main(\luastring{#1})}} % a command +\NewDocumentCommand{\addtoluatexpath}{m}{\luadirect{addtoluatexpath.main(\luastring{#1})}} % a command \AtEndOfPackage{\let\@unprocessedoptions\relax} diff --git a/macros/luatex/generic/lua-tinyyaml/README.md b/macros/luatex/generic/lua-tinyyaml/README.md index a3eee15a9b..239ebea6c3 100644 --- a/macros/luatex/generic/lua-tinyyaml/README.md +++ b/macros/luatex/generic/lua-tinyyaml/README.md @@ -1,15 +1,24 @@ # lua-tinyyaml -<https://github.com/api7/lua-tinyyaml> +- Homepage: https://github.com/zepinglee/citeproc-lua +- Author: Zeping Lee +- Email: zepinglee AT gmail DOT com +- License: MIT -A tiny YAML (subset) parser for pure Lua. +The `lua-tinyyam` package is a lightweight YAML parser +written in pure Lua. It supports a subset of the YAML 1.2 +specifications. This package is a dependency for several other LuaTeX +packages, including `markdown` and +`citeproc-lua`. ## Usage +To parse a YAML string into a Lua table, use the `parse` function: + ```lua -require('tinyyaml').parse(str) +contents = require("tinyyaml").parse(str) ``` ## License -MIT License +`lua-tinyyaml` is distributed under the MIT License. diff --git a/macros/luatex/generic/lua-tinyyaml/lua-tinyyaml.pdf b/macros/luatex/generic/lua-tinyyaml/lua-tinyyaml.pdf Binary files differnew file mode 100644 index 0000000000..40e9f40fe2 --- /dev/null +++ b/macros/luatex/generic/lua-tinyyaml/lua-tinyyaml.pdf diff --git a/macros/luatex/generic/lua-tinyyaml/lua-tinyyaml.tex b/macros/luatex/generic/lua-tinyyaml/lua-tinyyaml.tex new file mode 100644 index 0000000000..23b231db10 --- /dev/null +++ b/macros/luatex/generic/lua-tinyyaml/lua-tinyyaml.tex @@ -0,0 +1,48 @@ +\documentclass{l3doc} + +\usepackage{listings} + + +\begin{document} + +\title{The tiny YAML Library} + +\author{% + Zeping Lee% + \thanks{% + E-mail: + \href{mailto:zepinglee@gmail.com} + {zepinglee@gmail.com}% + }% +} + +\date{2025-02-01 v0.4.4} + +\maketitle + +\begin{documentation} + +\section{Introduction} + +The \textsf{lua-tinyyaml} package is a lightweight YAML parser written in pure Lua. +It supports a subset of the YAML 1.2 specifications. +This package is a dependency for several other LuaTeX packages, including \textsf{markdown} and \textsf{citeproc-lua}. + + +\section{Usage} + +To parse a YAML string into a Lua table, use the \texttt{parse} function: + +\begin{lstlisting}[language={[5.3]Lua}, basicstyle=\ttfamily] +contents = require("tinyyaml").parse(str) +\end{lstlisting} + + +\section{License} + +\texttt{lua-tinyyaml} is distributed under the MIT License. + + +\end{documentation} + +\end{document} diff --git a/macros/luatex/generic/lua-tinyyaml/tinyyaml.lua b/macros/luatex/generic/lua-tinyyaml/tinyyaml.lua index ad4c2df550..3dfd0aed08 100644 --- a/macros/luatex/generic/lua-tinyyaml/tinyyaml.lua +++ b/macros/luatex/generic/lua-tinyyaml/tinyyaml.lua @@ -164,7 +164,6 @@ function Parser:parsestring(line, stopper) return nil, line end -- Unescape repeated single quotes. - -- (https://yaml.org/spec/1.2.2/#single-quoted-style) while i < #line and ssub(line, i+1, i+1) == "'" do i = sfind(line, "'", i + 2, true) if not i then @@ -232,7 +231,9 @@ function Parser:parsestring(line, stopper) end line = ssub(line, 2) end - return rtrim(buf), line + buf = rtrim(buf) + local val = tonumber(buf) or buf + return val, line end local function isemptyline(line) @@ -612,8 +613,10 @@ function Parser:parseseq(line, lines, indent) error("did not find expected alphabetic or numeric character") elseif rest then -- Array entry with a value + local nextline = lines[1] + local indent2 = countindent(nextline) tremove(lines, 1) - tinsert(seq, self:parsescalar(rest, lines)) + tinsert(seq, self:parsescalar(rest, lines, indent2)) end end return seq diff --git a/macros/luatex/generic/luaaddplot/README.md b/macros/luatex/generic/luaaddplot/README.md index ce4f4448e3..f89acae2ae 100644 --- a/macros/luatex/generic/luaaddplot/README.md +++ b/macros/luatex/generic/luaaddplot/README.md @@ -3,7 +3,7 @@ luaaddeplot Version ------- -1.0 +1.0a Author ------ diff --git a/macros/luatex/generic/luaaddplot/luaaddplot.dtx b/macros/luatex/generic/luaaddplot/luaaddplot.dtx index 7d3e4bf8c2..d6387dfbef 100644 --- a/macros/luatex/generic/luaaddplot/luaaddplot.dtx +++ b/macros/luatex/generic/luaaddplot/luaaddplot.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% $Id: luaaddplot.dtx 3 2022-03-19 23:12:51Z reinhard $ +% $Id: luaaddplot.dtx 6 2024-09-22 00:02:45Z reinhard $ % %<*driver> \documentclass[a4paper,11pt]{ltxdoc} @@ -17,6 +17,7 @@ \author{Reinhard Kotucha} \title{\textsf{luaaddplot}} +\date{Version 1.0a\\[.5ex]\today} \begin{document} \maketitle \vspace*{1cm} @@ -70,8 +71,8 @@ ignored. Different devices use different column delimiters. Therefore tabs, colons, semicolons, and commas are replaced by a space. With other -words, various datafile formats are converted to a format specified by -\textsc{Matlab}. +words, various datafile formats are converted to a to a \textsc{Matlab} +compatible format. \subsection{\texorpdfstring{$\lambda$}{lambda}-Expressions} @@ -118,7 +119,7 @@ Frequencies are in \si{\hertz} but for the plot we prefer \si{\mega\hertz}. The solution is \begin{verbatim} \luaaddplot[blue] file "spectrum.data", function (col) - return col[1]/1e6, col2 + return col[1]/1e6, col[2] end; \end{verbatim} @@ -203,7 +204,7 @@ The solution is % \end{macrocode} % \subsection{luaaddplot.sty} % \begin{macrocode} -%<*sty> \ProvidesPackage{luaaddplot}[2022/03/18/ v1.0] +%<*sty> \ProvidesPackage{luaaddplot}[2024/09/22 v1.0a] \input luaaddplot.tex %</sty> % \end{macrocode} diff --git a/macros/luatex/generic/luaaddplot/luaaddplot.pdf b/macros/luatex/generic/luaaddplot/luaaddplot.pdf Binary files differindex 875fac1157..732135e6d8 100644 --- a/macros/luatex/generic/luaaddplot/luaaddplot.pdf +++ b/macros/luatex/generic/luaaddplot/luaaddplot.pdf diff --git a/macros/luatex/generic/luakeys/luakeys-debug.sty b/macros/luatex/generic/luakeys/luakeys-debug.sty index 57e1bae7f8..c52171cbe8 100644 --- a/macros/luatex/generic/luakeys/luakeys-debug.sty +++ b/macros/luatex/generic/luakeys/luakeys-debug.sty @@ -17,6 +17,6 @@ % luakeys-debug.sty and luakeys-debug.tex. \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{luakeys-debug}[2024/04/09 v0.14.0 Debug package for luakeys.] +\ProvidesPackage{luakeys-debug}[2024/09/29 v0.15.0 Debug package for luakeys.] \input luakeys-debug.tex diff --git a/macros/luatex/generic/luakeys/luakeys-doc.tex b/macros/luatex/generic/luakeys/luakeys-doc.tex index e14569b459..0d5bba1aad 100644 --- a/macros/luatex/generic/luakeys/luakeys-doc.tex +++ b/macros/luatex/generic/luakeys/luakeys-doc.tex @@ -64,7 +64,7 @@ The default value of the option “\texttt{#1}” is: \href{https://github.com/Josef-Friedrich/luakeys} {github.com/Josef-Friedrich/luakeys}% } -\date{v0.14.0 from 2024/04/09} +\date{v0.15.0 from 2024/09/29} \maketitle diff --git a/macros/luatex/generic/luakeys/luakeys.lua b/macros/luatex/generic/luakeys/luakeys.lua index 224c77ed72..b47d2d47f2 100644 --- a/macros/luatex/generic/luakeys/luakeys.lua +++ b/macros/luatex/generic/luakeys/luakeys.lua @@ -1621,6 +1621,8 @@ local function main() local picked_value = nil if is[pick_type](v) then picked_value = v + elseif pick_type == 'string' and is.number(v) then + picked_value = tostring(v) end if picked_value ~= nil then @@ -2061,7 +2063,7 @@ local function main() return { new = main, - version = { 0, 14, 0 }, + version = { 0, 15, 0 }, parse = parse, diff --git a/macros/luatex/generic/luakeys/luakeys.pdf b/macros/luatex/generic/luakeys/luakeys.pdf Binary files differindex 2ab59e561c..7f10f1f50d 100644 --- a/macros/luatex/generic/luakeys/luakeys.pdf +++ b/macros/luatex/generic/luakeys/luakeys.pdf diff --git a/macros/luatex/generic/luakeys/luakeys.sty b/macros/luatex/generic/luakeys/luakeys.sty index 6369cff49f..69a44f1261 100644 --- a/macros/luatex/generic/luakeys/luakeys.sty +++ b/macros/luatex/generic/luakeys/luakeys.sty @@ -17,7 +17,7 @@ % luakeys-debug.sty and luakeys-debug.tex. \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{luakeys}[2024/04/09 v0.14.0 Parsing key-value options using Lua.] +\ProvidesPackage{luakeys}[2024/09/29 v0.15.0 Parsing key-value options using Lua.] \directlua{ if luakeys == nil then luakeys = require('luakeys')() diff --git a/macros/luatex/generic/luamplib/Makefile b/macros/luatex/generic/luamplib/Makefile index 87f04f727e..a0a2282675 100644 --- a/macros/luatex/generic/luamplib/Makefile +++ b/macros/luatex/generic/luamplib/Makefile @@ -40,6 +40,7 @@ world: all ctan %.pdf: %.dtx @$(DOLATEX) @if( grep rerunfilecheck $(NAME).log |grep 'has changed' > /dev/null ); then $(DOLATEX); fi + @if( grep 'Rerun to get' $(NAME).log > /dev/null ); then $(DOLATEX); fi $(UNPACKED): $(DTX) luatex -interaction=batchmode $< >/dev/null diff --git a/macros/luatex/generic/luamplib/NEWS b/macros/luatex/generic/luamplib/NEWS index 50e7c625a9..9158d1ef92 100644 --- a/macros/luatex/generic/luamplib/NEWS +++ b/macros/luatex/generic/luamplib/NEWS @@ -1,5 +1,109 @@ History of the luamplib package +2025/02/06 2.37.0 + * introduce a new operator 'mpliblength <string>', a unicode-aware version of + the 'length' primitive + + * introduce a new operator 'mplibsubstring <pair> of <string>', a unicode-aware + version of the 'substring ... of ...' primitive + +2024/12/16 2.36.3 + * change '//' to 'math.floor' for compatibility with luajittex (#158) + + * fix documentation on mplibgraphictext considering the introduction of + 'withshadingmethod' + +2024/12/11 2.36.2 + * fix a bug regarding expansion of options + (https://tug.org/pipermail/metapost/2024-December/003574.html) + +2024/12/09 2.36.1 + * fix a bug of previous release: missing 'local' in front of 'os' + +2024/12/08 2.36.0 + * <path>|<textual picture> withshadingmethod <string>, + where <string> shall be "linear" or "circular", gives shading effect to + the <path> or <textual picture> with plain format as well as metafun. + See the documentation. + + * withtransparency (<number>|<string>, <number>) + gives transparency effect with plain format as well. See the documentation. + + * added 'dir TLT' to usemplibgroup boxes + + * removed 'tag=artifact' option. Use 'artifact' instead. + +2024/11/28 2.35.2 + * fix height/depth of boxes made by \mplibgroup command + * enhanced tagging of \usemplibgroup + +2024/11/25 2.35.1 + * cope with 'TEX(char13)': remove everything from char13 to the end of + input string (https://tug.org/pipermail/metapost/2024-November/003572.html) + + * (WIP) avoid internal command names of tagpdf/kernel code (#151) + +2024/11/12 2.35.0 + * even under \mplibtextextlabel{true}, the original 'infont' operator will + be used when the character slot of the text argument is less than 32, or is + equal to 35, 36, 37, 38, 92, 94, 95, 123, 125, 126 or 127. + + * \mplibforcehmode will have effects on \usemplibgroup as well as ordinary + metapost figures. + + * support tagged PDF when tagpdf package is activated. The related code is + currently in experimental stage. See the documentation for details. + +2024/08/03 2.34.5 + * provide 'withgroupbbox' macro for transparency group to enable users to + control the bounding box + + * write down the width/height/depth values of mplibgroup to the log file + +2024/07/31 2.34.4 + * 'withpattern' operator accepts a <textual picture> as well as a <path> + for its operand. Thus users can give pattern effect to the result of btex + command or infont operator. + + * fix regarding line width in mplibgraphictext + +2024/07/27 2.34.3 + * in DVI mode, use LaTeX's shipout hooks to generate new XObjects + or to put resources to pageresources. (in plain, load atbegshi.sty) + + * fix shading to allow the even-odd rule + +2024/07/24 2.34.2 + * With the newly introduced macros, \mplibgroup ... \endmplibgroup, users + can define a transparency group or a normal form XObject from TeX side. + The LaTeX environment 'mplibgroup' is identical to this pair of macros. + See the document for details. + + * document: be more precise about the color effect of a transparency group + + * remove trailing zeros from numeric objects to get smaller PDF + +2024/07/19 2.34.1 + * transparency group is available with plain format as well. + * transparency group once used is reusable in the TeX code or + in other MetaPost code chunks. see the document for details. + +2024/07/17 2.34.0 + * support transparency group with metafun format + * fix regarding default value in circular fading mode + * fix regarging the scope of graphics state + +2024/07/14 2.33.1 + * refactor the manual, including some minor items undocumented so far + * improve fading routine to get possibly smaller pdf file + +2024/07/08 2.33.0 + * provide a new metapost operator 'withfademethod' and related macros, + which make the color of an object gradiently transparent. see luamplib + document for details. + + * fix spot-color shading routine to support user-defined colorspace + 2024/07/03 2.32.4 * make the variable 'patterns' local * 'math.randomseed' on plain TeX diff --git a/macros/luatex/generic/luamplib/luamplib.dtx b/macros/luatex/generic/luamplib/luamplib.dtx index c050955a39..c08d07f029 100644 --- a/macros/luatex/generic/luamplib/luamplib.dtx +++ b/macros/luatex/generic/luamplib/luamplib.dtx @@ -1,9 +1,9 @@ % \iffalse meta-comment -- by the way, this file contains UTF-8 % -% Copyright (C) 2008-2024 by Hans Hagen, Taco Hoekwater, Elie Roux, +% Copyright (C) 2008-2025 by Hans Hagen, Taco Hoekwater, Elie Roux, % Manuel Pégourié-Gonnard, Philipp Gesang and Kim Dohyun. -% Currently maintained by the LuaLaTeX development team. -% Support: <lualatex-dev@tug.org> +% Currently maintained by Kim Dohyun. +% Support: <https://github.com/lualatex/luamplib> % % This work is under the GPL v2.0 license. % @@ -85,9 +85,9 @@ See source file '\inFileName' for licencing and contact information. %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{luamplib.drv}% - [2024/07/03 v2.32.4 Interface for using the mplib library]% + [2025/02/06 v2.37.0 Interface for using the mplib library]% \documentclass{ltxdoc} -\usepackage{metalogo,multicol,mdwlist,fancyvrb,xspace} +\usepackage{metalogo,multicol,xspace} \usepackage[x11names]{xcolor} % \def\primarycolor{DodgerBlue4} %%-> rgb 16 78 139 | #104e8b @@ -114,7 +114,7 @@ See source file '\inFileName' for licencing and contact information. ]{Linux Libertine O} \setmonofont[Scale=MatchLowercase]{InconsolataN} %setsansfont[Ligatures=TeX]{Linux Biolinum O} -\setsansfont[Ligatures=TeX,Scale=MatchLowercase]{Iwona Medium} +\setsansfont[UprightFont=*Medium,BoldFont=*Heavy,Ligatures=TeX,Scale=MatchLowercase]{Iwona} %setmathfont{XITS Math} \usepackage{hologo} @@ -123,7 +123,9 @@ See source file '\inFileName' for licencing and contact information. \newcommand*\email [1] {<\href{mailto:#1}{#1}>} \newcommand \file {\nolinkurl} -\newcommand \pk {\textsf} + +\newcommand*\metapost {\textsc{metapost}\xspace} +\newcommand*\mplib {\pkg{mplib}\xspace} \begin{document} \DocInput{luamplib.dtx}% @@ -149,125 +151,177 @@ See source file '\inFileName' for licencing and contact information. % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % -% \title{The \textsf{luamplib} package} +% \title{The \pkg{luamplib} package} % \author{Hans Hagen, Taco Hoekwater, Elie Roux, Philipp Gesang and Kim Dohyun\\ -% Maintainer: LuaLaTeX Maintainers --- -% Support: \email{lualatex-dev@tug.org}} -% \date{2024/07/03 v2.32.4} +% Current Maintainer: Kim Dohyun\\ +% Support: \url{https://github.com/lualatex/luamplib}} +% \date{2025/02/06 v2.37.0} % % \maketitle % % \begin{abstract} -% Package to have metapost code typeset directly in a document with \LuaTeX. +% Package to have \metapost code typeset directly in a document with \LuaTeX. % \end{abstract} % % \section{Documentation} % -% This packages aims at providing a simple way to typeset directly metapost -% code in a document with \LuaTeX. \LuaTeX\ is built with the lua -% \texttt{mplib} library, that runs metapost code. This package is basically a -% wrapper (in Lua) for the Lua \texttt{mplib} functions and some \TeX\ -% functions to have the output of the \texttt{mplib} functions in the pdf. -% -% In the past, -% the package required PDF mode in order to output something. -% Starting with version 2.7 it works in DVI mode as well, though -% DVIPDFMx is the only DVI tool currently supported. -% -% The metapost figures are put in a \TeX\ \texttt{hbox} with dimensions -% adjusted to the metapost code. +% This package aims at providing a simple way to typeset directly \metapost +% code in a document with \LuaTeX. \LuaTeX\ is built with the Lua +% \mplib library, that runs \metapost code. This package is basically a +% wrapper for the Lua \mplib functions and some \TeX\ +% functions to have the output of the \mplib functions in the pdf. % -% Using this package is easy: in Plain, type your metapost code between the +% Using this package is easy: in Plain, type your \metapost code between the % macros \cs{mplibcode} and \cs{endmplibcode}, and in \LaTeX\ in the -% \texttt{mplibcode} environment. +% |mplibcode| environment. % -% The code is from the \texttt{luatex-mplib.lua} and \texttt{luatex-mplib.tex} files -% from \ConTeXt, they have been adapted to \LaTeX\ and Plain by Elie Roux and -% Philipp Gesang, new functionalities have been added by Kim Dohyun. -% The changes are: +% The resulting \metapost figures are put in a \TeX\ |hbox| with dimensions +% adjusted to the \metapost code. +% +% The code of luamplib is basically from the |luatex-mplib.lua| and |luatex-mplib.tex| files +% from \ConTeXt. They have been adapted to \LaTeX\ and Plain by Elie Roux and +% Philipp Gesang and new functionalities have been added by Kim Dohyun. +% The most notable changes are: % % \begin{itemize} -% \item a \LaTeX\ environment -% \item all \TeX\ macros start by |mplib| -% \item use of our own function for errors, warnings and informations % \item possibility to use |btex ... etex| to typeset \TeX\ code. -% |textext()| is a more versatile macro equivalent to |TEX()| from TEX.mp. -% |TEX()| is also allowed and is a synomym of |textext()|.\par\smallskip -% \textsc{n.b.} Since v2.5, |btex ... etex| input from external |mp| files -% will also be processed by \textsf{luamplib}.\par\smallskip -% \textsc{n.b.} Since v2.20, |verbatimtex ... etex| from external |mp| files -% will be also processed by \textsf{luamplib}. Warning: This is a change -% from previous version. +% |textext()| is a more versatile macro equivalent to |TEX()| from \pkg{TEX.mp}. +% |TEX()| is also allowed and is a synonym of |textext()|. +% The argument of +% \mplib's primitive |maketext| will also be processed by the same routine. +% +% \item possibility to use |verbatimtex ... etex|, though it's behavior cannot +% be the same as the stand-alone \pkg{mpost}. +% Of course you cannot include \cs{documentclass}, \cs{usepackage} etc. +% When these \TeX\ commands are found in |verbatimtex ... etex|, the entire code will be +% ignored. +% The treatment of |verbatimtex| command has changed a lot since v2.20: +% see \hyperlink{mpliblegacybehavior}{below \S\,1.1}. +% +% \item in the past, +% the package required PDF mode in order to have some output. +% Starting with version 2.7 it works in DVI mode as well, though +% DVIPDFMx is the only DVI tool currently supported. % \end{itemize} % -% Some more changes and cautions are: +% It seems to be convenient to divide the explanations of some more changes and cautions +% into three parts: \TeX, \textsc{MetaPost}, and Lua interfaces. +% +% \subsection{\TeX} % -% \paragraph{\cs{mplibforcehmode}} -% When this macro is declared, every mplibcode figure box will be +% \subsubsection{\cs{mplibforcehmode}} +% When this macro is declared, every \metapost figure box will be % typeset in horizontal mode, so \cs{centering}, \cs{raggedleft} etc -% will have effects. |\mplibnoforcehmode|, being default, reverts this -% setting. (Actually these commands redefine |\prependtomplibbox|. You -% can define this command with anything suitable before a box.) -% -% \paragraph{\cs{mpfig} \ldots\ \cs{endmpfig}} -% Since v2.29 we provide unexpandable \TeX\ macros |\mpfig ... \endmpfig| and its starred version -% |\mpfig* ... \endmpfig| to save typing toil. -% The first is roughly the same as follows: -% \begin{verbatim} -% \begin{mplibcode}[@mpfig] -% beginfig(0) -% token list declared by \everymplib[@mpfig] -% ... -% token list declared by \everyendmplib[@mpfig] -% endfig; -% \end{mplibcode} -% \end{verbatim} -% and the starred version is roughly the same as follows: -% \begin{verbatim} -% \begin{mplibcode}[@mpfig] -% ... +% will have effects. \cs{mplibnoforcehmode}, being default, reverts this +% setting. (Actually these commands redefine \cs{prependtomplibbox}; you +% can redefine this command with anything suitable before a box.) +% +% \subsubsection{\cs{everymplib\{...\}}, \cs{everyendmplib\{...\}}} +% \cs{everymplib} and \cs{everyendmplib} redefine +% the lua table containing \metapost code +% which will +% be automatically inserted at the beginning and ending of each \metapost code chunk. +%\begin{verbatim} +% \everymplib{ beginfig(0); } +% \everyendmplib{ endfig; } +% \begin{mplibcode} +% % beginfig/endfig not needed +% draw fullcircle scaled 1cm; % \end{mplibcode} -% \end{verbatim} -% In these macros |\mpliblegacybehavior{disable}| (see below) -% is forcibly declared. -% And as both share the same instance name, metapost codes are inherited among them. -% A simple example: -% \begin{verbatim} -% \mpfig* input boxes \endmpfig -% \everymplib[@mpfig]{ drawoptions(withcolor .5[red,white]); } -% \mpfig circleit.a(btex Box 1 etex); drawboxed(a); \endmpfig -% \end{verbatim} -% The instance name (default: |@mpfig|) can be changed by redefining -% \cs{mpfiginstancename}, after which a new MPlib instance will start and -% code inheritance too will begin anew. |\let\mpfiginstancename\empty| will -% prevent code inheritance if |\mplibcodeinherit{true}| (see below) is not declared.\footnote{% -% As for user setting values, |enable|, |true|, |yes| are identical, and -% |disable|, |false|, |no| are identical.} -% -% \paragraph{\cs{mpliblegacybehavior\{enable\}}} -% By default, |\mpliblegacybehavior{enable}| is already declared, -% in which case -% a |verbatimtex ... etex| that comes just before |beginfig()| -% is not ignored, but the \TeX\ code will be inserted before the -% following mplib hbox. Using this command, -% each mplib box can be freely moved horizontally and/or vertically. -% Also, a box number might be assigned to mplib box, allowing it to be -% reused later (see test files). -% \begin{verbatim} +%\end{verbatim} +% +% \subsubsection{\cs{mplibsetformat\{plain\textbar metafun\}}} +% There are (basically) two formats for \metapost: \emph{plain} and +% \emph{metafun}. By default, the \emph{plain} format is used, but you can set +% the format to be used by future figures at any time using +% \cs{mplibsetformat}\marg{format name}. +% +% \textsc{n.b.} As \emph{metafun} is such a complicated format, +% we cannot support all the functionalities producing special effects provided by \emph{metafun}. +% At least, however, transparency (actually opacity), shading (gradient colors) and transparency group +% are fully supported, +% and outlinetext is supported by our own alternative |mpliboutlinetext| +% (see \hyperlink{mpliboutlinetext}{below \S\,1.2}). +% You can try other effects as well, though we did not fully tested their proper functioning. +% +% \begin{description} +% \item[transparency] +% (|texdoc metafun| \S\,8.2) Transparency is so simple that you can apply it to an object, +% with \emph{plain} format as well as \emph{metafun}, +% just by appending |withprescript| |"tr_transparency=|\meta{number}|"| to the sentence. +% ($0 \le \meta{number} \le 1$) +% +% From v2.36, |withtransparency| is available with \emph{plain} as well. +% See \hyperlink{luamplibtransparency}{below} \S\,1.2. +% +% \item[shading] +% (|texdoc metafun| \S\,8.3) One thing worth mentioning about shading is: +% when a color expression is given in string type, +% it is regarded by luamplib as +% a color expression of \TeX\ side. +% For instance, when |withshadecolors("orange", 2/3red)| is given, the first color |"orange"| will be +% interpreted as a \pkg{color}, \pkg{xcolor} or \pkg{l3color}'s expression. +% +% From v2.36, shading is available with \emph{plain} format as well with extended functionality. +% See \hyperlink{luamplibshading}{below} \S\,1.2. +% +% \item[transparency group] +% \hypertarget{metafunformat}{}\relax +% (|texdoc metafun| \S\,8.8) +% As for transparency group, the current \emph{metafun} document is not correct. +% The true syntax is: +%\begin{verbatim} +% draw <picture>|<path> asgroup <string> +%\end{verbatim} +% where \meta{string} should be |""| (empty), |"isolated"|, |"knockout"|, or |"isolated,knockout"|. +% Beware that currently many of the PDF rendering applications, except Adobe Acrobat Reader, +% cannot properly render the isolated or knockout effect. +% +% Transparency group is available with \emph{plain} format as well, with extended functionality. +% See \hyperlink{transparencygroup}{below} \S\,1.2. +% \end{description} +% +% \subsubsection{\cs{mplibnumbersystem\{scaled\textbar double\textbar decimal\}}} +% Users can choose |numbersystem| option. +% The default value is |scaled|, which can be changed +% by declaring \cs{mplibnumbersystem\{double\}} or +% \cs{mplibnumbersystem\{decimal\}}. +% +% \subsubsection{\cs{mplibshowlog\{enable\textbar disable\}}} +% Default: |disable|. +% When \cs{mplibshowlog\{enable\}}\footnote{As for user's setting, +% |enable|, |true| and |yes| are identical; +% |disable|, |false| and |no| are identical.} is declared, log messages returned by +% the \metapost process will be printed to the |.log| file. +% This is the \TeX{} side interface for |luamplib.showlog|. +% +% \subsubsection{\cs{mpliblegacybehavior\{enable\textbar disable\}}} +% \hypertarget{mpliblegacybehavior}{}\relax +% By default, \cs{mpliblegacybehavior\{enable\}} +% is already declared for backward compatibility, +% in which case \TeX\ code in +% |verbatimtex| |...| |etex| that comes just before |beginfig()| +% will be inserted before the +% following \metapost figure box. In this way, +% each figure box can be freely moved horizontally or vertically. +% Also, a box number can be assigned to a figure box, allowing it to be +% reused later. +%\begin{verbatim} % \mplibcode % verbatimtex \moveright 3cm etex; beginfig(0); ... endfig; % verbatimtex \leavevmode etex; beginfig(1); ... endfig; % verbatimtex \leavevmode\lower 1ex etex; beginfig(2); ... endfig; % verbatimtex \endgraf\moveright 1cm etex; beginfig(3); ... endfig; % \endmplibcode -% \end{verbatim} +%\end{verbatim} % \textsc{n.b.} \cs{endgraf} should be used instead of \cs{par} inside % |verbatimtex ... etex|. % -% By contrast, \TeX\ code in |VerbatimTeX(...)| or |verbatimtex ... etex| +% On the other hand, \TeX\ code in |verbatimtex ... etex| % between |beginfig()| and |endfig| will be inserted -% after flushing out the mplib figure. -% \begin{verbatim} +% after flushing out the \metapost figure. +% As shown in the example below, |VerbatimTeX()| is a synonym of |verbatimtex| |...| |etex|. +%\begin{verbatim} % \mplibcode % D := sqrt(2)**7; % beginfig(0); @@ -276,15 +330,15 @@ See source file '\inFileName' for licencing and contact information. % endfig; % \endmplibcode % diameter: \Dia bp. -% \end{verbatim} +%\end{verbatim} % -% \paragraph{\cs{mpliblegacybehavior\{disable\}}} -% If |\mpliblegacybehavior{disabled}| is declared by user, any -% |verbatimtex ... etex| will be executed, along with |btex ... etex|, +% By contrast, +% when \cs{mpliblegacybehavior\{disable\}} is declared, any +% |verbatimtex| |...| |etex| will be executed, along with |btex| |...| |etex|, % sequentially one by one. % So, some \TeX\ code in |verbatimtex ... etex| will have effects on -% |btex ... etex| codes that follows. -% \begin{verbatim} +% following |btex| |...| |etex| codes. +%\begin{verbatim} % \begin{mplibcode} % beginfig(0); % draw btex ABC etex; @@ -293,114 +347,80 @@ See source file '\inFileName' for licencing and contact information. % draw btex GHI etex shifted (2cm,0); % bold face % endfig; % \end{mplibcode} -% \end{verbatim} -% -% \paragraph{\cs{everymplib}, \cs{everyendmplib}} -% Since v2.3, new macros \cs{everymplib} and \cs{everyendmplib} redefine -% the lua table containing MetaPost code -% which will -% be automatically inserted at the beginning and ending of each |mplibcode|. -% \begin{verbatim} -% \everymplib{ beginfig(0); } -% \everyendmplib{ endfig; } -% \mplibcode % beginfig/endfig not needed -% draw fullcircle scaled 1cm; -% \endmplibcode -% \end{verbatim} +%\end{verbatim} % -% \paragraph{\cs{mpdim}} -% Since v2.3, \cs{mpdim} and other raw \TeX\ commands are allowed -% inside mplib code. This feature is inpired by gmp.sty authored by -% Enrico Gregorio. Please refer the manual of gmp package for details. -% \begin{verbatim} -% \begin{mplibcode} -% draw origin--(.6\mpdim{\linewidth},0) withpen pencircle scaled 4 -% dashed evenly scaled 4 withcolor \mpcolor{orange}; -% \end{mplibcode} -% \end{verbatim} -% \textsc{n.b.} Users should not use the protected variant of -% |btex ... etex| as provided by gmp package. As \textsf{luamplib} -% automatically protects \TeX\ code inbetween, \cs{btex} is not supported -% here. -% -% \paragraph{\cs{mpcolor}} -% With \cs{mpcolor} command, color names or expressions of -% \textsf{color}/\textsf{xcolor} packages can be used inside mplibcode -% enviroment (after |withcolor| operator), -% though \textsf{luamplib} does not automatically load these -% packages. See the example code above. For spot colors, -% \textsf{colorspace}, \textsf{spotcolor} -% (in PDF mode) and \textsf{xespotcolor} (in DVI mode) packages are supported -% as well. -% -% From v2.26.1, \textsf{l3color} is also supported by the command -% \cs{mpcolor\{color expression\}}, including spot colors. -% -% \paragraph{\cs{mplibnumbersystem}} -% Users can choose |numbersystem| option since v2.4. -% The default value |scaled| can be changed to |double| or |decimal| -% by declaring |\mplibnumbersystem{double}| or |\mplibnumbersystem{decimal}|. -% For details see -% \url{http://github.com/lualatex/luamplib/issues/21}. -% -% \paragraph{\cs{mplibtextextlabel}} -% Starting with v2.6, |\mplibtextextlabel{enable}| enables -% string labels typeset via |textext()| instead of |infont| operator. +% \subsubsection{\cs{mplibtextextlabel\{enable\textbar disable\}}} +% Default: |disable|. +% \cs{mplibtextextlabel\{enable\}} enables +% the labels typeset via |textext| instead of |infont| operator. % So, |label("my text",origin)| thereafter is exactly the same as -% |label(textext("my text"),origin)|. \textsc{n.b.} In the background, -% \textsf{luamplib} redefines |infont| operator so that the right side -% argument (the font part) is totally ignored. Every string label -% therefore will be typeset with current \TeX\ font. -% Also take care of |char| operator in the left side argument, +% |label(textext("my text"),origin)|. +% +% \textsc{n.b.} In the background, +% luamplib redefines |infont| operator so that the right side +% argument (the font part) is totally ignored. Therefore the left side arguemnt (the text part) +% will be typeset with the current \TeX\ font. +% +% From v2.35, however, the redefinition of |infont| operator has been revised: +% when the character code of the text argument is less than $32$~(control characters), +% or is equal to $35$~(|#|), $36$~(|$|), \iffalse |$|\fi +% $37$~(|%|), $38$~(|&|), $92$~(|\|), $94$~(|^|), +% $95$~(|_|), $123$~(|{|), $125$~(|}|), $126$~(|~|) or $127$~(DEL), +% the original |infont| operator will be used instead of |textext| operator +% so that the font part will be honored. +% Despite the revision, please take care of |char| operator in the text argument, % as this might bring unpermitted characters into \TeX. % -% \paragraph{\cs{mplibcodeinherit}} -% Starting with v2.9, |\mplibcodeinherit{enable}| enables the inheritance -% of variables, constants, and macros defined by previous |mplibcode| chunks. -% On the contrary, the default value |\mplibcodeinherit{disable}| will make -% each code chunks being treated as an independent instance, and never +% \subsubsection{\cs{mplibcodeinherit\{enable\textbar disable\}}} +% Default: |disable|. +% \cs{mplibcodeinherit\{enable\}} enables the inheritance +% of variables, constants, and macros defined by previous \metapost code chunks. +% On the contrary, \cs{mplibcodeinherit\{disable\}} will make +% each code chunk being treated as an independent instance, never % affected by previous code chunks. % -% \paragraph{Separate instances for \LaTeX{} and plain \TeX} -% v2.22 has added the support for several named MetaPost instances +% \subsubsection{Separate \metapost instances} +% luamplib v2.22 has added the support for several named \metapost instances % in \LaTeX{} |mplibcode| environment. -% (And since v2.29 plain \TeX\ users can use this functionality as well.) -% Syntax is like so: -% \begin{verbatim} +% Plain \TeX\ users also can use this functionality. +% The syntax for \LaTeX\ is: +%\begin{verbatim} % \begin{mplibcode}[instanceName] % % some mp code % \end{mplibcode} -% \end{verbatim} -% Behaviour is as follows. +%\end{verbatim} +% The behavior is as follows. % \begin{itemize} % \item All the variables and functions are shared % only among all the environments belonging to the same instance. -% \item |\mplibcodeinherit| only affects environments +% \item \cs{mplibcodeinherit} only affects environments % with no instance name set (since if a name is set, % the code is intended to be reused at some point). -% \item From v2.27, |btex ... etex| boxes are also shared and do not -% require |\mplibglobaltextext|. +% \item |btex ... etex| boxes are also shared and do not +% require \cs{mplibglobaltextext}. % \item When an instance names is set, -% respective |\currentmpinstancename| is set. +% respective \cs{currentmpinstancename} is set as well. % \end{itemize} -% In parellel with this functionality, v2.23 and after supports +% In parellel with this functionality, we support % optional argument of instance name for \cs{everymplib} and % \cs{everyendmplib}, affecting only those |mplibcode| environments % of the same name. % Unnamed \cs{everymplib} affects not only those instances with no name, % but also those with name but with no corresponding \cs{everymplib}. -% Syntax is: -% \begin{verbatim} +% The syntax is: +%\begin{verbatim} % \everymplib[instanceName]{...} % \everyendmplib[instanceName]{...} -% \end{verbatim} +%\end{verbatim} % -% \paragraph{\cs{mplibglobaltextext}} -% Formerly, to inherit |btex ... etex| boxes as well as metapost variables, +% \subsubsection{\cs{mplibglobaltextext\{enable\textbar disable\}}} +% Default: |disable|. +% Formerly, to inherit |btex| |...| |etex| boxes as well as other \metapost macros, variables and constants, % it was necessary to declare \cs{mplibglobaltextext\{enable\}} in advance. % But from v2.27, this is implicitly enabled when \cs{mplibcodeinherit} -% is |true|. -% \begin{verbatim} +% is enabled. +% This optional command still remains mostly for backward compatibility. +%\begin{verbatim} % \mplibcodeinherit{enable} % %\mplibglobaltextext{enable} % \everymplib{ beginfig(0);} \everyendmplib{ endfig;} @@ -412,38 +432,92 @@ See source file '\inFileName' for licencing and contact information. % \mplibcode % currentpicture := pic scaled 2; % \endmplibcode -% \end{verbatim} -% Generally speaking, it is recommended to turn |mplibglobaltextext| -% always on, because it has the advantage of reusing metapost pictures -% among code chunks. -% But everything has its downside: it will waste more memory resources. -% -% \paragraph{\cs{mplibverbatim}} -% Starting with v2.11, users can issue |\mplibverbatim{enable}|, after which +%\end{verbatim} +% +% \subsubsection{\cs{mplibverbatim\{enable\textbar disable\}}} +% Default: |disable|. +% Users can issue \cs{mplibverbatim\{enable\}}, after which % the contents of mplibcode environment will be read verbatim. As a result, -% except for |\mpdim| and |\mpcolor|, all other \TeX\ commands outside -% |btex ... etex| or |verbatimtex ... etex| are not expanded and will be fed -% literally into the mplib process. -% -% \paragraph{\cs{mplibshowlog}} -% When |\mplibshowlog{enable}| is declared, log messages returned by -% |mplib| instance will be printed into the |.log| file. -% |\mplibshowlog{disable}| will revert this functionality. -% This is a \TeX{} side interface for |luamplib.showlog|. (v2.20.8) -% -% \paragraph{About cache files} -% To support |btex ... etex| in external |.mp| files, \textsf{luamplib} -% inspects the content of each and every |.mp| input files and makes caches -% if nececcsary, before returning their paths to \LuaTeX's mplib library. -% This would make the compilation time longer wastefully, as most |.mp| files -% do not contain |btex ... etex| command. So \textsf{luamplib} provides -% macros as follows, so that users can give instruction about files +% except for \cs{mpdim} and \cs{mpcolor} (see \hyperlink{mpdim}{below}), +% all other \TeX\ commands outside of the +% |btex| or |verbatimtex| |...| |etex| are not expanded and will be fed +% literally to the \mplib library. +% +% \subsubsection{\cs{mpdim\{...\}}} +% \hypertarget{mpdim}{}\relax +% Besides other \TeX\ commands, \cs{mpdim} is specially allowed +% in the mplibcode environment. This feature is inpired by \pkg{gmp} package authored by +% Enrico Gregorio. Please refer to the manual of \pkg{gmp} package for details. +%\begin{verbatim} +% \begin{mplibcode} +% beginfig(1) +% draw origin--(.6\mpdim{\linewidth},0) withpen pencircle scaled 4 +% dashed evenly scaled 4 withcolor \mpcolor{orange}; +% endfig; +% \end{mplibcode} +%\end{verbatim} +% +% \subsubsection{\cs{mpcolor[...]\{...\}}} +% With \cs{mpcolor} command, color names or expressions of +% \pkg{color}, \pkg{xcolor} and \pkg{l3color} module/packages can be used in the mplibcode +% environment (after |withcolor| operator). +% See the example \hyperlink{mpdim}{above}. +% The optional |[...]| denotes the option of \pkg{xcolor}'s \cs{color} command. +% For spot colors, \pkg{l3color} (in PDF/DVI mode), +% \pkg{colorspace}, \pkg{spotcolor} +% (in PDF mode) and \pkg{xespotcolor} (in DVI mode) packages are supported +% as well. +% +% \subsubsection{\cs{mpfig} \ldots\ \cs{endmpfig}} +% Besides the |mplibcode| environment (for \LaTeX) and +% \cs{mplibcode ...} \cs{endmplibcode} (for Plain), +% we also provide unexpandable \TeX\ macros \cs{mpfig} |...| \cs{endmpfig} and its starred version +% \cs{mpfig*} |...| \cs{endmpfig} to save typing toil. +% The former is roughly the same as follows: +%\begin{verbatim} +% \begin{mplibcode}[@mpfig] +% beginfig(0) +% token list declared by \everymplib[@mpfig] +% ... +% token list declared by \everyendmplib[@mpfig] +% endfig; +% \end{mplibcode} +%\end{verbatim} +% and the starred version is roughly the same as follows: +%\begin{verbatim} +% \begin{mplibcode}[@mpfig] +% ... +% \end{mplibcode} +%\end{verbatim} +% In these macros \cs{mpliblegacybehavior\{disable\}} +% is forcibly declared. +% Again, as both share the same instance name, \metapost codes are inherited among them. +% A simple example: +%\begin{verbatim} +% \everymplib[@mpfig]{ drawoptions(withcolor .5[red,white]); } +% \mpfig* input boxes \endmpfig +% \mpfig +% circleit.a(btex Box 1 etex); drawboxed(a); +% \endmpfig +%\end{verbatim} +% The instance name (default: |@mpfig|) can be changed by redefining +% \cs{mpfiginstancename}, after which a new \mplib instance will start and +% code inheritance too will begin anew. \cs{let}\cs{mpfiginstancename}\cs{empty} will +% prevent code inheritance if \cs{mplibcodeinherit\{true\}} is not declared. +% +% \subsubsection{About cache files} +% To support |btex ... etex| in external |.mp| files, luamplib +% inspects the content of each and every |.mp| file and makes caches +% if nececcsary, before returning their paths to \LuaTeX's \mplib library. +% This could waste the compilation time, as most |.mp| files +% do not contain |btex ... etex| commands. So luamplib provides +% macros as follows, so that users can give instructions about files % that do not require this functionality. % \begin{itemize} -% \item |\mplibmakenocache{<filename>[,<filename>,...]}| -% \item |\mplibcancelnocache{<filename>[,<filename>,...]}| +% \item \cs{mplibmakenocache}|{|\meta{filename}|[,|\meta{filename}|,...]}| +% \item \cs{mplibcancelnocache}|{|\meta{filename}|[,|\meta{filename}|,...]}| % \end{itemize} -% where |<filename>| is a file name excluding |.mp| extension. +% where \meta{filename} is a filename excluding |.mp| extension. % Note that |.mp| files under |$TEXMFMAIN/metapost/base| and % |$TEXMFMAIN/metapost/context/base| are already registered by default. % @@ -451,64 +525,155 @@ See source file '\inFileName' for licencing and contact information. % if it's not available (mostly not writable), % in the directory where output files are saved: % to be specific, |$TEXMF_OUTPUT_DIRECTORY/luamplib_cache|, -% |./luamplib_cache|, |$TEXMFOUTPUT/luamplib_cache|, and |.| in this order. -% (|$TEXMF_OUTPUT_DIRECTORY| is normally the value of |--output-directory| -% command-line option.) -% This behavior however can be changed by the command -% |\mplibcachedir{<directory path>}|, where tilde (|~|) is interpreted +% |./luamplib_cache|, |$TEXMFOUTPUT/luamplib_cache|, and |.|, in this order. +% |$TEXMF_OUTPUT_DIRECTORY| is normally the value of |--output-directory| +% command-line option. +% +% Users can change this behavior by the command +% \cs{mplibcachedir}\marg{directory path}, where tilde (|~|) is interpreted % as the user's home directory (on a windows machine as well). -% As backslashes (|\|) should be escaped by users, it would be easier to use +% As backslashes (\cs{}) should be escaped by users, it would be easier to use % slashes (|/|) instead. % -% \paragraph{\texttt{mplibtexcolor}, \texttt{mplibrgbtexcolor}} -% |mplibtexcolor| is a metapost operator that converts a \TeX\ color expression -% to a MetaPost color expression. For instance: -% \begin{verbatim} +% \subsubsection{About figure box metric} +% Notice that, after each figure is processed, the macro \cs{MPwidth} stores +% the width value of the latest figure; \cs{MPheight}, the height value. +% Incidentally, also note that \cs{MPllx}, \cs{MPlly}, \cs{MPurx}, and +% \cs{MPury} store the bounding box information of the latest figure +% without the unit |bp|. +% +% \subsubsection{luamplib.cfg} +% At the end of package loading, luamplib searches +% |luamplib.cfg| and, if found, reads the file in automatically. +% Frequently used settings such as \cs{everymplib}, \cs{mplibforcehmode} +% or \cs{mplibcodeinherit} are suitable for going into this file. +% +% \subsubsection{Tagged PDF} +% When \pkg{tagpdf} package is loaded and activated, |mplibcode| environment accepts additional options for tagged PDF\@. +% The code related to this functionality is currently in experimental stage, not guaranteeing backward compatibility. +% Like the \LaTeX's |picture| environment, +% available optional keys are |tag|, |alt|, |actualtext|, |artifact|, |debug| and |correct-BBox| +% (|texdoc| |latex-lab-graphic|). +% Additionally, luamplib provides its own |text| key. +% \begin{description} +% \item[|tag=...|] You can choose a tag name, default value being |Figure|. +% BBox info will be added automatically to the PDF +% unless the value is |text| or |false|. +% When the value is |false|, tagging is deactivated. +% \item[|debug|] draws bounding box of the figure for checking, which you can correct +% by |correct-BBox| key with space-separated four dimen values. +% \item[|alt=...|] sets an alternative text of the figure as given. +% This key is needed for ordinary \metapost figures. +% You can give alternative text within \metapost code as well: +% |VerbatimTeX| |("\mplibalttext{...}");| +% \item[|actualtext=...|] starts a |Span| tag implicitly and sets an actual text as given. +% Horizontal mode is forced by \cs{noindent} command. BBox info will not be added. +% This key is intended for figures which can be represented by a character or +% a small sequence of characters. +% You can give actual text within \metapost code as well: +% |VerbatimTeX| |("\mplibactualtext{...}");| +% \item[|artifact|] starts an |artifact| MC (marked content). +% BBox info will not be added. +% This key is intended for decorative figures which have no semantic quality. +% \item[|text|] starts an |artifact| MC and enables tagging on textext +% (the same as |btex| |...| |etex|) boxes. +% Horizontal mode is forced by \cs{noindent} command. BBox info will not be added. +% This key is intended for figures made mostly of textext boxes. +% Inside text-keyed figures, reusing textext boxes is strongly discouraged. +% \end{description} +% These keys are provided also for \cs{mpfig} and \cs{usemplibgroup} (see \hyperlink{usemplibgroup}{below}) commands. +%\begin{verbatim} +% \begin{mplibcode}[myInstanceName, alt=figure drawing a circle] +% ... +% \end{mplibcode} +% +% \mpfig[alt=figure drawing a square box] +% ... +% \endmpfig +% +% \usemplibgroup[alt=figure drawing a triangle]{...} +% +% \mppattern{...} % see below +% \mpfig[tag=false] % do not tag this figure +% ... +% \endmpfig +% \endmppattern +%\end{verbatim} +% As for the instance name of |mplibcode| environment, +% |instance=...| or |instancename=...| is also allowed +% in addition to the raw instance name as shown above. +% +% +% \subsection{\textsc{MetaPost}} +% +% \subsubsection{\texttt{mplibdimen(...)}, \texttt{mplibcolor(...)}} +% These are \metapost interfaces for the \TeX\ commands +% \cs{mpdim} and \cs{mpcolor} (see \hyperlink{mpdim}{above}). For example, +% |mplibdimen("\linewidth")| is basically the same as \cs{mpdim\{\cs{linewidth}\}}, and +% |mplibcolor("red!50")| is basically the same as \cs{mpcolor\{red!50\}}. +% The difference is that these \metapost operators can also be used in external |.mp| files, +% which cannot have \TeX\ commands outside of the |btex| or |verbatimtex| |...| |etex|. +% +% \subsubsection{\texttt{mplibtexcolor ...}, \texttt{mplibrgbtexcolor ...}} +% |mplibtexcolor|, which accepts a string argument, is a \metapost operator that converts a \TeX\ color expression +% to a \metapost color expression, that can be used anywhere color expression is expected +% as well as after the |withcolor| operator. +% For instance: +%\begin{verbatim} % color col; % col := mplibtexcolor "olive!50"; -% \end{verbatim} -% The result may vary in its color model (gray/rgb/cmyk) +%\end{verbatim} +% But the result may vary in its color model (gray/rgb/cmyk) % according to the given \TeX\ color. (Spot colors are forced to % cmyk model, so this operator is not recommended for spot colors.) -% Therefore the example shown above would raise a metapost error: +% Therefore the example shown above would raise a \metapost error: % |cmykcolor col;| should have been declared. -% By contrast, |mplibrgbtexcolor| always returns rgb model expressions. -% -% \paragraph{\texttt{mplibgraphictext}} -% For some amusement, luamplib provides its own metapost operator -% |mplibgraphictext|, the effect of which is similar to that of -% \ConTeXt's |graphictext|. However syntax is somewhat different. -% \begin{verbatim} +% By contrast, |mplibrgbtexcolor| \meta{string} always returns rgb model expressions. +% +% \subsubsection{\texttt{mplibgraphictext ...}} +% |mplibgraphictext| is a \metapost operator, the effect of which is similar to that of +% \ConTeXt's |graphictext| or our own |mpliboutlinetext| +% (see \hyperlink{mpliboutlinetext}{below}). +% However the syntax is somewhat different. +%\begin{verbatim} % mplibgraphictext "Funny" % fakebold 2.3 % fontspec option % drawcolor .7blue fillcolor "red!50" % color expressions -% \end{verbatim} +%\end{verbatim} % |fakebold|, |drawcolor| and |fillcolor| are optional; % default values are |2|, |"black"| and |"white"| respectively. -% When color expressions are given as string, they are regarded as -% xcolor's or l3color's expressions (this is the same with shading colors). -% From v2.30, |scale| option is deprecated and is now a synonym of |scaled|. +% When the color expressions are given in string type, they are regarded as +% \pkg{color}, \pkg{xcolor} or \pkg{l3color}'s expressions. % All from |mplibgraphictext| to the end of sentence will compose an % anonymous |picture|, which can be drawn or assigned to a variable. % Incidentally, |withdrawcolor| and |withfillcolor| are synonyms of % |drawcolor| and |fillcolor|, hopefully to be compatible with |graphictext|. -% \textsc{n.b.} Because luamplib's current implementation is quite different -% from the \ConTeXt's, there are some limitations such that you can't -% apply shading (gradient colors) to the text (But see below). -% In DVI mode, |unicode-math| package is needed for math formula graphictext, +% +% \textsc{n.b.} +% In some cases, |mplibgraphictext| will produce better results than \ConTeXt\ +% or even than our own |mpliboutlinetext|, +% especially when processing complicated \TeX\ code +% such as the vertical writing in Chinese or Japanese. +% However, because the implementation is quite different from others, +% there are some limitations such that you can't +% apply shading (gradient colors) to the text with |withshademethod| from \emph{metafun}. +% (But this limitation is now lifted by the introduction of |withshadingmethod|. +% See \hyperlink{luamplibshading}{below}.) +% Again, +% in DVI mode, \pkg{unicode-math} package is needed for math formula, % as we cannot embolden type1 fonts in DVI mode. % -% \paragraph{\texttt{mplibglyph}, \texttt{mplibdrawglyph}} -% From v2.30, we provide a new metapost operator |mplibglyph|, which returns a metapost picture +% \subsubsection{\texttt{mplibglyph ... of ...}} +% From v2.30, we provide a new \metapost operator |mplibglyph|, which returns a \metapost picture % containing outline paths of a glyph in opentype, truetype or type1 fonts. -% When a type1 font is specified, metapost primitive |glyph| will be called. -% \begin{verbatim} +% When a type1 font is specified, \metapost primitive |glyph| will be called. +%\begin{verbatim} % mplibglyph 50 of \fontid\font % slot 50 of current font % mplibglyph "Q" of "TU/TeXGyrePagella(0)/m/n/10" % font csname % mplibglyph "Q" of "texgyrepagella-regular.otf" % raw filename % mplibglyph "Q" of "Times.ttc(2)" % subfont number % mplibglyph "Q" of "SourceHanSansK-VF.otf[Regular]" % instance name -% \end{verbatim} +%\end{verbatim} % Both arguments before and after of ``|of|'' can be either a number or a string. % Number arguments are regarded as a glyph slot (GID) and a font id number, repectively. % String argument at the left side is regarded as a glyph name in the font or a unicode character. @@ -518,76 +683,108 @@ See source file '\inFileName' for licencing and contact information. % subfont number (starting from zero) of a TTC font; a string within brackets denotes % an instance name of a variable font. % -% The returned picture will be quite similar to the result of |glyph| primitive in its structure. -% So, metapost's |draw| command will fill the inner path of the picture with background color. -% In contrast, |mplibdrawglyph| command fills the paths according to the Nonzero Winding -% Number Rule. As a result, for instance, the area surrounded by inner path of ``O'' +% \subsubsection{\texttt{mplibdrawglyph ...}} +% The picture returned by |mplibglyph| will be quite similar to the result of |glyph| primitive in its structure. +% So, \metapost's |draw| command will fill the inner path of the picture with the background color. +% In contrast, |mplibdrawglyph| \meta{picture} command fills the paths according to the nonzero winding +% number rule. As a result, for instance, the area surrounded by inner path of ``O'' % will remain transparent. % -% \paragraph{\texttt{mpliboutlinetext}} -% From v2.31, we provide a new metapost operator |mpliboutlinetext|, which mimicks -% metafun's |outlinetext|. So the syntax is the same as metafun's. See the metafun -% manual \textsection\,8.7 (|texdoc metafun|). A simple example: -% \begin{verbatim} +% \leavevmode\llap{\textcolor{red}{☞}\kern1.2\parindent}\relax +% To apply the nonzero winding number rule to a picture containing paths, +% luamplib appends |withpostscript| |"collect"| +% to the paths except the last one in the picture. +% If you want the even-odd rule instead, you can, with \emph{plain} format as well, +% additionally declare |withpostscript| |"evenodd"| to the last path in the picture. +% +% \subsubsection{\texttt{mpliboutlinetext (...)}} +% \hypertarget{mpliboutlinetext}{}\relax +% From v2.31, a new \metapost operator |mpliboutlinetext| is available, which mimicks +% \emph{metafun}'s |outlinetext|. So the syntax is the same: see the \emph{metafun} +% manual \S\,8.7 (|texdoc metafun|). A simple example: +%\begin{verbatim} % draw mpliboutlinetext.b ("$\sqrt{2+\alpha}$") % (withcolor \mpcolor{red!50}) % (withpen pencircle scaled .2 withcolor red) % scaled 2 ; -% \end{verbatim} -% After the process of |mpliboutlinetext|, |mpliboutlinepic[]| +%\end{verbatim} +% After the process, |mpliboutlinepic[]| % and |mpliboutlinenum| will be preserved as global variables; -% |mpliboutlinepic[1]| \ldots{} |mpliboutlinepic[mpliboutlinenum]| +% |mpliboutlinepic[1]| |...| |mpliboutlinepic[mpliboutlinenum]| % will be an array of images each of which containing a glyph or a rule. +% % \textsc{n.b.} As Unicode grapheme cluster is not considered in the array, a unit that must be % a single cluster might be separated apart. % -% \paragraph{\cs{mppattern} \ldots\ \cs{endmppattern}, \texttt{withpattern}} -% |\mppattern{<name>}| \ldots\ |\endmppattern| defines a tiling pattern -% associated with the |<name>|. -% MetaPost operator |withpattern|, the syntax being -% \textit{path} |withpattern| \textit{string}, will return a metapost picture which fills -% the given path with a tiling pattern of the |<name>|. -% \begin{verbatim} -% \mppattern{mypatt} % or \begin{mppattern}{mypatt} -% [ % options: see below -% xstep = 10, ystep = 12, -% matrix = {0,1,-1,0}, % or "0 1 -1 0" -% ] -% \mpfig % or any other TeX code, -% picture q; -% q := btex Q etex; -% fill bbox q withcolor .8[red,white]; -% draw q withcolor .8red; -% \endmpfig -% \endmppattern % or \end{mppattern} +% \subsubsection{\cs{mppattern\{...\} ...} \cs{endmppattern}, \texttt{... withpattern ...}} +% \hypertarget{mppattern}{}\relax +% \TeX\ macros +% \cs{mppattern}\marg{name} |...| \cs{endmppattern} define a tiling pattern +% associated with the \meta{name}. +% \metapost operator |withpattern|, the syntax being +% \meta{path}\,\textbar\,\meta{textual picture} |withpattern| \meta{string}, +% will return a \metapost picture which fills +% the given path or text with a tiling pattern of the \meta{name} +% by replicating it horizontally and vertically. +% The \emph{textual picture} here means any text typeset by \TeX, mostly the result +% of the |btex| command (though technically this is not a true textual picture) +% or the |infont| operator. % -% \mpfig -% fill fullcircle scaled 100 withpostscript "collect"; -% draw unitsquare shifted - center unitsquare scaled 45 -% withpattern "mypatt" -% withpostscript "evenodd" ; -% \endmpfig -% \end{verbatim} -% The available options are: -% \begin{center} +% An example: +%\begin{verbatim} +% \mppattern{mypatt} % or \begin{mppattern}{mypatt} +% [ % options: see below +% xstep = 10, +% ystep = 12, +% matrix = {0, 1, -1, 0}, % or "0 1 -1 0" +% ] +% \mpfig % or any other TeX code, +% draw (origin--(1,1)) +% scaled 10 +% withcolor 1/3[blue,white] +% ; +% draw (up--right) +% scaled 10 +% withcolor 1/3[red,white] +% ; +% \endmpfig +% \endmppattern % or \end{mppattern} +% +% \mpfig +% draw fullcircle scaled 90 +% withpostscript "collect" +% ; +% draw fullcircle scaled 200 +% withpattern "mypatt" +% withpen pencircle scaled 1 +% withcolor \mpcolor{red!50!blue!50} +% withpostscript "evenodd" +% ; +% \endmpfig +%\end{verbatim} +% +% The available options are listed in Table~\ref{tab:mppatternoptions}. +% \begin{table} +% \centering +% \caption{options for \cs{mppattern}}\label{tab:mppatternoptions} % \begin{tabular}{lll}\hline % Key & Value Type & Explanation\\\hline -% |xstep| &\textit{number} & horizontal spacing between pattern cells\\ -% |ystep| &\textit{number} & vertical spacing between pattern cells\\ -% |xshift| &\textit{number} & horizontal shifting of pattern cells\\ -% |yshift| &\textit{number} & vertical shifting of pattern cells\\ -% |matrix| &\textit{table} or \textit{string} & |xx|, |yx|, |xy|, |yy| values\kern1pt* or MP transform code\\ -% |bbox| &\textit{table} or \textit{string} & |llx|, |lly|, |urx|, |ury| values\kern1pt*\\ -% |resources|&\textit{string} & PDF resources if needed\\ -% |colored| or |coloured| &\textit{boolean}& |false| for uncolored pattern. default: |true|\\\hline +% |xstep| &\emph{number} & horizontal spacing between pattern cells\\ +% |ystep| &\emph{number} & vertical spacing between pattern cells\\ +% |xshift| &\emph{number} & horizontal shifting of pattern cells\\ +% |yshift| &\emph{number} & vertical shifting of pattern cells\\ +% |bbox| &\emph{table} or \emph{string} & |llx|, |lly|, |urx|, |ury| values\kern1pt*\\ +% |matrix| &\emph{table} or \emph{string} & |xx|, |yx|, |xy|, |yy| values\kern1pt* or MP transform code\\ +% |resources|&\emph{string} & PDF resources if needed\\ +% |colored| or |coloured| &\emph{boolean}& |false| for uncolored pattern. default: |true|\\\hline % & & \small *\,in string type, numbers are separated by spaces\\ % \end{tabular} -% \end{center} +% \end{table} % -% For the sake of convenience, width and height values of tiling patterns will be written down +% For the sake of convenience, the width and height values of tiling patterns will be written down % into the log file. (depth is always zero.) Users can refer to them for option setting. % -% As for |matrix| option, metapost code such as `|rotated 30 slanted .2|' is allowed as well +% As for |matrix| option, \metapost code such as `|rotated 30 slanted .2|' is allowed as well % as string or table of four numbers. You can also set |xshift| and |yshift| % values by using `|shifted|' operator. But when |xshift| or |yshift| option is explicitly % given, they have precedence over the effect of `|shifted|' operator. @@ -598,45 +795,349 @@ See source file '\inFileName' for licencing and contact information. % is not needed in most cases. % % Option |colored=false| (|coloured| is a synonym of |colored|) will generate an uncolored pattern which shall have no color at all. -% Uncolored pattern will be painted later by the color of a metapost object. +% Uncolored pattern will be painted later by the color of a \metapost object. % An example: -% \begin{verbatim} -% \begin{mppattern}{pattuncolored} +%\begin{verbatim} +% \begin{mppattern}{pattnocolor} % [ % colored = false, -% matrix = "rotated 30", +% matrix = "slanted .3 rotated 30", % ] % \tiny\TeX % \end{mppattern} % % \begin{mplibcode} % beginfig(1) -% picture tex; tex := mpliboutlinetext.p ("\bfseries \TeX"); -% i:=0; -% for item within tex: -% i:=i+1; -% if i < length tex: -% fill pathpart item scaled 10 -% withpostscript "collect"; -% else: +% picture tex; +% tex = mpliboutlinetext.p ("\bfseries \TeX"); +% for i=1 upto mpliboutlinenum: +% j:=0; +% for item within mpliboutlinepic[i]: +% j:=j+1; % draw pathpart item scaled 10 -% withpattern "pattuncolored" -% withpen pencircle scaled 0.5 -% withcolor 0.7 blue % paints the pattern -% ; -% fi +% if j < length mpliboutlinepic[i]: +% withpostscript "collect" +% else: +% withpattern "pattnocolor" +% withpen pencircle scaled 1/2 +% withcolor (i/4)[red,blue] % paints the pattern +% fi; +% endfor % endfor % endfig; % \end{mplibcode} -% \end{verbatim} -% -% \paragraph{Lua table \texttt{luamplib.instances}} -% Users can access the Lua table containing mplib instances, |luamplib.instances|, -% through which metapost variables are also easily accessible -% as documented in Lua\TeX{} manual \textsection\,11.2.8.4 (|texdoc luatex|). +%\end{verbatim} +% A much simpler and efficient way to obtain a similar result +% (without colorful characters in this example) +% is to give a \emph{textual picture} as the operand of |withpattern|: +%\begin{verbatim} +% \begin{mplibcode} +% beginfig(2) +% picture pic; +% pic = mplibgraphictext "\bfseries\TeX" +% fakebold 1/2 +% fillcolor 1/3[red,blue] % paints the pattern +% drawcolor 2/3[red,blue] +% scaled 10 ; +% draw pic withpattern "pattnocolor" ; +% endfig; +% \end{mplibcode} +%\end{verbatim} +% +% \subsubsection{\texttt{... withfademethod ...}} +% This is a \metapost operator which makes the color of an object gradiently transparent. +% The syntax is \meta{path}\,\textbar\,\meta{picture} |withfademethod| \meta{string}, +% the latter being either |"linear"| or |"circular"|. +% Though it is similar to the |withshademethod| from \emph{metafun}, +% the differences are: (1) the operand of |withfademethod| can be a picture as well as a path; +% (2) you cannot make gradient colors, but can only make gradient opacity. +% +% Related macros to control optional values are: +% \begin{description} +% \let\bfseries\relax +% \item [|withfadeopacity (|\emph{number, number}|)|] +% sets the starting opacity and the ending opacity, default value being |(1,0)|. +% `|1|' denotes full color; `|0|' full transparency. +% \item [|withfadevector (|\emph{pair, pair}|)|] +% sets the starting and ending points. Default value in the linear mode is +% |(llcorner p, lrcorner p)|, where |p| is the operand, +% meaning that fading starts from the left edge and ends at the right edge. +% Default value in the circular mode is |(center p, center p)|, which means +% centers of both starting and ending circles are the center of the bounding box. +% \item [|withfadecenter|] is a synonym of |withfadevector|. +% \item [|withfaderadius (|\emph{number, number}|)|] +% sets the radii of starting and ending circles. This is no-op in the linear mode. +% Default value is |(0, abs(center p - urcorner p))|, meaning that fading starts from the +% center and ends at the four corners of the bounding box. +% \item [|withfadebbox (|\emph{pair, pair}|)|] +% sets the bounding box of the fading area, default value being |(llcorner p, urcorner p)|. +% Though this option is not needed in most cases, there could be cases when users want to +% explicitly control the bounding box. +% Particularly, see the description \hyperlink{withgroupbbox}{below} +% on the analogous macro |withgroupbbox|. +% \end{description} +% An example: +%\begin{verbatim} +% \mpfig +% picture mill; +% mill = btex \includegraphics[width=100bp]{mill} etex; +% draw mill +% withfademethod "circular" +% withfadecenter (center mill, center mill) +% withfaderadius (20, 50) +% withfadeopacity (1, 0) +% ; +% \endmpfig +%\end{verbatim} +% +% \subsubsection{\texttt{... asgroup ...}} +% \hypertarget{transparencygroup}{}\relax +% As said \hyperlink{metafunformat}{before}, +% transparency group is available with \emph{plain} as well as \emph{metafun} format. +% The syntax is exactly the same: +% \meta{picture}\,\textbar\,\meta{path} |asgroup| +% |""|\,\textbar\,|"isolated"|\,\textbar\,|"knockout"|\,\textbar\ |"isolated,knockout"|, +% which will return a \metapost picture. +% It is called \emph{Transparency Group} because the objects contained in the group are composited +% to produce a single object, so that outer transparency effect, if any, +% will be applied to the group as a whole, not to the individual objects cumulatively. +% +% The additional feature provided by luamplib is that +% you can reuse the group as many times as you want +% in the \TeX{} code or in other \metapost code chunks, +% with infinitesimal increase in the size of PDF file. +% For this functionality we provide \TeX{} and \metapost macros as follows: +% \begin{description} +% \let\bfseries\relax +% \item[|withgroupname| \meta{string}] associates a transparency group with the given name. +% When this is not appended to the sentence with |asgroup| operator, +% the default group name `|lastmplibgroup|' will be used. +% +% \item[\cs{usemplibgroup}\marg{name}] +% \hypertarget{usemplibgroup}{}\relax +% is a \TeX\ command to reuse a transparency group of the name +% once used. +% Note that the position of the group will be origin-based: +% in other words, lower-left corner of the group will be shifted to the origin. +% +% \item[|usemplibgroup| \meta{string}] is a \metapost command which will add +% a transparency group of the name to the |currentpicture|. +% Contrary to the \TeX\ command just mentioned, +% the position of the group is the same as the original transparency group. +% +% \item[|withgroupbbox (|\emph{pair}|,|\emph{pair}|)|] +% \hypertarget{withgroupbbox}{}\relax +% sets the bounding box of the transparency group, +% default value being |(llcorner p, urcorner p)|. +% This option might be needed especially when you draw with a thick pen +% a path that touches the boundary; +% you would probably want to append to the sentence +% `|withgroupbbox| |(bot| |lft| |llcorner| |p,| |top| |rt| |urcorner| |p)|', +% supposing that the pen was selected by the |pickup| command. +% +% \end{description} +% An example showing the difference between the \TeX\ and \metapost commands: +%\begin{verbatim} +% \mpfig +% draw image( +% fill fullcircle scaled 100 shifted 25right withcolor blue; +% fill fullcircle scaled 100 withcolor red ; +% ) asgroup "" +% withgroupname "mygroup"; +% draw (left--right) scaled 10; +% draw (up--down) scaled 10; +% \endmpfig +% +% \noindent +% \clap{\vrule width 20pt height .25pt depth .25pt}% +% \clap{\vrule width .5pt height 10pt depth 10pt}% +% \usemplibgroup{mygroup} +% +% \mpfig +% usemplibgroup "mygroup" rotated 15 +% withtransparency (1, 0.5) ; +% draw (left--right) scaled 10; +% draw (up--down) scaled 10; +% \endmpfig +%\end{verbatim} +% +% Also note that normally the reused transparency groups are not affected by outer color commands. +% However, if you have made the original transparency group using |withoutcolor| command, +% colors will have effects on the uncolored objects in the group. +% +% \subsubsection{\cs{mplibgroup\{...\} ...} \cs{endmplibgroup}} +% These \TeX\ macros are described here in this subsection, as they are +% deeply related to the |asgroup| operator. +% Users can define a transparency group or a normal \emph{form XObject} +% with these macros from \TeX\ side. +% The syntax is similar to the \cs{mppattern} command (see \hyperlink{mppattern}{above}). +% An example: +%\begin{verbatim} +% \mplibgroup{mygrx} % or \begin{mplibgroup}{mygrx} +% [ % options: see below +% asgroup="", +% ] +% \mpfig % or any other TeX code +% pickup pencircle scaled 10; +% draw (left--right) scaled 30 rotated 45 ; +% draw (left--right) scaled 30 rotated -45 ; +% \endmpfig +% \endmplibgroup % or \end{mplibgroup} +% +% \usemplibgroup{mygrx} +% +% \mpfig +% usemplibgroup "mygrx" scaled 1.5 +% withtransparency (1, 0.5) ; +% \endmpfig +%\end{verbatim} +% +% Availabe options, much fewer than those for \cs{mppattern}, +% are listed in Table~\ref{tab:mplibgroupoptions}. +% Again, the width/height/depth values of the mplibgroup will be written down into the log file. +% \begin{table} +% \centering +% \caption{options for \cs{mplibgroup}}\label{tab:mplibgroupoptions} +% \begin{tabular}{lll} +% \hline +% Key & Value Type & Explanation\\ +% \hline +% |asgroup| &\emph{string} & |""|, |"isolated"|, |"knockout"|, or |"isolated,knockout"|\\ +% |bbox| &\emph{table} or \emph{string} & |llx|, |lly|, |urx|, |ury| values\kern1pt*\\ +% |matrix| &\emph{table} or \emph{string} & |xx|, |yx|, |xy|, |yy| values\kern1pt* +% or MP transform code\\ +% |resources| &\emph{string} & PDF resources if needed\\ +% \hline +% & & \small *\,in string type, numbers are separated by spaces\\ +% \end{tabular} +% \end{table} +% +% When |asgroup| option, including empty string, is not given, +% a normal form XObject will be generated rather than a transparency group. +% Thus the individual objects, not the XObject as a whole, will be affected +% by outer transparency command. +% +% As shown in the example, you can reuse the mplibgroup once defined +% using the \TeX\ command \cs{usemplibgroup} or +% the \metapost command |usemplibgroup|. +% The behavior of these commands is the same as that described \hyperlink{usemplibgroup}{above}, +% excepting that mplibgroup made by \TeX\ code (not by \metapost code) respects original height and depth. +% +% \subsubsection{\texttt{... withtransparency ...}} +% \hypertarget{luamplibtransparency}{}\relax +% |withtransparency(|\emph{number}\,\textbar\,\emph{string}, \emph{number}|)| +% is provided for \emph{plain} format as well. +% The first argument accepts a number or a name of +% alternative transparency methods (see |texdoc| |metafun| \S\,8.2 Figure~8.1). +% The second argument accepts a number denoting opacity. +%\begin{verbatim} +% fill fullcircle scaled 10 +% withcolor red +% withtransparency (1, 0.5) % or ("normal", 0.5) +% ; +%\end{verbatim} +% +% \subsubsection{\texttt{... withshadingmethod ...}} +% \hypertarget{luamplibshading}{}\relax +% The syntax is exactly the same as \emph{metafun}'s new shading method (|texdoc metafun| \S\,8.3.3), except that +% the `\textcolor{red}{|shade|}' contained in each and every macro name has changed to +% `\textcolor{red}{|shading|}' in luamplib: for instance, while |withshademethod| is +% a macro name which only works with \emph{metafun} format, +% the equivalent provided by luamplib, |withshadingmethod|, works with \emph{plain} as well. +% Other differences to the \emph{metafun}'s and some cautions are: +% \begin{itemize} +% \item \emph{textual pictures} (pictures made by |btex| |...| |etex|, |textext|, +% |maketext|, |mplibgraphictext|, |TEX|, |infont|, etc) +% as well as paths can have shading effect. +%\begin{verbatim} +% draw btex \bfseries\TeX etex scaled 10 +% withshadingmethod "linear" +% withshadingcolors (red,blue) ; +%\end{verbatim} +% \item When you give shading effect to a picture made by `|infont|' operator, +% the result of |withshadingvector| will be the same as that of |withshadingdirection|, +% as luamplib considers only the bounding box of the picture. +% \item Inside tiling pattern cells (see \hyperlink{mppattern}{above}), +% you shall not give shading effect to pictures (paths are OK). +% Anyway, that is the current phase of development. +% \end{itemize} +% Macros provided by luamplib are: +% \begin{description} +% \let\bfseries\relax +% \item[\meta{path}\,\textbar\,\meta{textual picture} \texttt{withshadingmethod} \meta{string}] +% where \meta{string} shall be |"linear"| or |"circular"|. +% This is the only `must' item to get shading effect; all the macros below are optional. +% \item[\texttt{withshadingvector} \meta{pair}] +% Starting and ending points (as time value) on the path. +% \item[\texttt{withshadingdirection} \meta{pair}] +% Starting and ending points (as time value) on the bounding box. +% Default value: |(0,2)| +% \item[\texttt{withshadingorigin} \meta{pair}] +% The center of starting and ending circles. +% Default value: |center p| +% \item[\texttt{withshadingradius} \meta{pair}] +% Radii of starting and ending circles. This is no-op in linear mode. +% Default value: |(0, abs(center p - urcorner p))| +% \item[\texttt{withshadingfactor} \meta{number}] +% Multiplier of the radii. This is no-op in linear mode. +% Default value: |1.2| +% \item[\texttt{withshadingcenter} \meta{pair}] +% Values for shifting starting center. +% For instance, +% |(0,0)| means that center of starting circle is |center p|; +% |(1,1)| means |urcorner p|. +% \item[\texttt{withshadingtransform} \meta{string}] +% where \meta{string} shall be |"yes"| (respect transform) or |"no"| (ignore transform). +% Default value: |"no"| for pictures made by |infont| operator; |"yes"| for all other cases. +% \item[\texttt{withshadingdomain} \meta{pair}] +% Limiting values of parametric variable +% that varies on the axis of color gradient. +% Default value: |(0,1)| +% \item[\texttt{withshadingstep (...)}] +% for combined shading of more than two colors. +% \item[\texttt{withshadingfraction} \meta{number}] +% Fractional number of each shading step. +% Only meaningful with |withshadingstep|. +% \item[\texttt{withshadingcolors (}\emph{color expr}, \emph{color expr}\texttt{)}] +% Starting and ending colors. +% Default value: |(white,black)| +% \end{description} +% +% \subsubsection{\texttt{mpliblength ...}} +% |mpliblength| \meta{string} returns the number of unicode characters in the string. +% This is a unicode-aware version equivalent to the \metapost primitive |length|, but +% accepts only a string-type argument. +% For instance, |mpliblength| |"abçdéf"| returns |6|, not |8|. +% +% \subsubsection{\texttt{mplibsubstring ... of ...}} +% |mplibsubstring| \meta{pair} |of| \meta{string} is a unicode-aware version equivalent to the +% \metapost's |substring ... of ...| primitive. The syntax is the same as the latter. +% For instance, |mplibsubstring| |(2,5)| |of| |"abçdéf"| returns |"çdé"|, +% and |mplibsubstring| |(5,2)| |of| |"abçdéf"| returns |"édç"|. +% +% \subsection{Lua} +% +% \subsubsection{\texttt{runscript ...}} +% Using the primitive |runscript| \meta{string}, you can run a Lua code chunk from \metapost side +% and get some \metapost code returned by Lua if you want. +% As the functionality is provided by the \mplib library itself, +% luamplib does not have much to say about it. +% +% One thing is worth mentioning, however: +% if you return a Lua \emph{table} to the \metapost process, +% it is automatically converted to a relevant \metapost value type +% such as pair, color, cmykcolor or transform. +% So users can save some extra toil of converting a table to a string, though it's not a big deal. +% For instance, |runscript "return {1,0,0}"| will give you the \metapost color expression |(1,0,0)| +% automatically. +% +% \subsubsection{Lua table \texttt{luamplib.instances}} +% Users can access the Lua table containing \mplib instances, |luamplib.instances|, +% through which \metapost variables are also easily accessible from Lua side, +% as documented in Lua\TeX{} manual \S\,11.2.8.4 (|texdoc luatex|). % The following will print |false|, |3.0|, |MetaPost| and -% the points and the cyclicity of the path |unitsquare|, consecutively. -% \begin{verbatim} +% the knots and the cyclicity of the path |unitsquare|, consecutively. +%\begin{verbatim} % \begin{mplibcode}[instance1] % boolean b; b = 1 > 2; % numeric n; n = 3; @@ -646,37 +1147,46 @@ See source file '\inFileName' for licencing and contact information. % % \directlua{ % local instance1 = luamplib.instances.instance1 -% print( instance1:get_boolean"b" ) -% print( instance1:get_number"n" ) -% print( instance1:get_string"s" ) -% local t = instance1:get_path"p" +% print( instance1:get_boolean "b" ) +% print( instance1:get_number "n" ) +% print( instance1:get_string "s" ) +% local t = instance1:get_path "p" % for k,v in pairs(t) do % print(k, type(v)=='table' and table.concat(v,' ') or v) % end % } -% \end{verbatim} -% In this way, it would not be difficult to define a paragraph shape -% (using \cs{parshape} \TeX\ primitive) which follows an arbitrary metapost path. -% -% \paragraph{About figure box metrics} -% Notice that, after each figure is processed, macro \cs{MPwidth} stores -% the width value of latest figure; \cs{MPheight}, the height value. -% Incidentally, also note that \cs{MPllx}, \cs{MPlly}, \cs{MPurx}, and -% \cs{MPury} store the bounding box information of latest figure -% without the unit |bp|. -% -% \paragraph{luamplib.cfg} -% At the end of package loading, \textsf{luamplib} searches -% |luamplib.cfg| and, if found, reads the file in automatically. -% Frequently used settings such as \cs{everymplib}, \cs{mplibforcehmode} -% or \cs{mplibcodeinherit} are suitable for going into this file. -% -% \bigskip +%\end{verbatim} +% +% \subsubsection{Lua function \texttt{luamplib.process\_mplibcode}} +% Users can execute a \metapost code chunk from Lua side by using this function: +%\begin{verbatim} +% luamplib.process_mplibcode (<string> metapost code, <string> instance name) +%\end{verbatim} +% The second argument cannot be absent, but can be an empty string (|""|) which +% means that it has no instance name. +% +% Some other elements in the |luamplib| namespace, listed in Table~\ref{tab:elementsinluamplib}, +% can have effects on the process of |process_mplibcode|. +% \begin{table} +% \centering +% \caption{elements in \texttt{luamplib} table (partial)}\label{tab:elementsinluamplib} +% \begin{tabular}{lll}\hline +% Key & Type & Related \TeX\ macro \\\hline +% |codeinherit| & \emph{boolean} & \cs{mplibcodeinherit}\\ +% |everyendmplib| & \emph{table} & \cs{everyendmplib}\\ +% |everymplib| & \emph{table} & \cs{everymplib}\\ +% |getcachedir| & \emph{function} (\meta{string}) & \cs{mplibcachedir}\\ +% |globaltextext| & \emph{boolean} & \cs{mplibglobaltextext}\\ +% |legacyverbatimtex| & \emph{boolean} & \cs{mpliblegacybehavior}\\ +% |noneedtoreplace| & \emph{table} & \cs{mplibmakenocache}\\ +% |numbersystem| & \emph{string} & \cs{mplibnumbersystem}\\ +% |setformat| & \emph{function} (\meta{string}) & \cs{mplibsetformat}\\ +% |showlog| & \emph{boolean} & \cs{mplibshowlog}\\ +% |textextlabel| & \emph{boolean} & \cs{mplibtextextlabel}\\ +% |verbatiminput| & \emph{boolean} & \cs{mplibverbatim}\\\hline +% \end{tabular} +% \end{table} % -% There are (basically) two formats for metapost: \emph{plain} and -% \emph{metafun}. By default, the \emph{plain} format is used, but you can set -% the format to be used by future figures at any time using -% \cs{mplibsetformat}\marg{format name}. % % \section{Implementation} % @@ -690,14 +1200,14 @@ See source file '\inFileName' for licencing and contact information. luatexbase.provides_module { name = "luamplib", - version = "2.32.4", - date = "2024/07/03", + version = "2.37.0", + date = "2025/02/06", description = "Lua package to typeset Metapost with LuaTeX's MPLib.", } % \end{macrocode} % -% Use the |luamplib| namespace, since |mplib| is for the metapost library +% Use the |luamplib| namespace, since |mplib| is for the \metapost library % itself. \ConTeXt{} uses |metapost|. % \begin{macrocode} luamplib = luamplib or { } @@ -733,7 +1243,6 @@ local function termorlog (target, text, kind) if kind == "Error" then error() end end end - local function warn (...) -- beware '%' symbol termorlog("term and log", select("#",...) > 1 and format(...) or ...) end @@ -749,33 +1258,23 @@ luamplib.showlog = luamplib.showlog or false % \end{macrocode} % % This module is a stripped down version of libraries that are used by -% \ConTeXt. Provide a few ``shortcuts'' expected by the imported code. +% \ConTeXt. Provide a few ``shortcuts'' expected by the code. % \begin{macrocode} local tableconcat = table.concat local tableinsert = table.insert +local tableunpack = table.unpack local texsprint = tex.sprint local texgettoks = tex.gettoks local texgetbox = tex.getbox local texruntoks = tex.runtoks -% \end{macrocode} -% -% We don't use |tex.scantoks| anymore. See below reagrding |tex.runtoks|. -% \begin{verbatim} -% local texscantoks = tex.scantoks -% \end{verbatim} -% \begin{macrocode} - if not texruntoks then err("Your LuaTeX version is too old. Please upgrade it to the latest") end - local is_defined = token.is_defined local get_macro = token.get_macro - local mplib = require ('mplib') local kpse = require ('kpse') local lfs = require ('lfs') - local lfsattributes = lfs.attributes local lfsisdir = lfs.isdir local lfsmkdir = lfs.mkdir @@ -791,7 +1290,6 @@ local file = file or { } local replacesuffix = file.replacesuffix or function(filename, suffix) return (filename:gsub("%.[%a%d]+$","")) .. "." .. suffix end - local is_writable = file.is_writable or function(name) if lfsisdir(name) then name = name .. "/_luam_plib_temp_file_" @@ -813,14 +1311,11 @@ end % \end{macrocode} % % |btex ... etex| in input |.mp| files will be replaced in finder. -% Because of the limitation of MPLib regarding |make_text|, +% Because of the limitation of \mplib regarding |make_text|, % we might have to make cache files modified from input files. % \begin{macrocode} -local luamplibtime = kpse.find_file("luamplib.lua") -luamplibtime = luamplibtime and lfsattributes(luamplibtime,"modification") - +local luamplibtime = lfsattributes(kpse.find_file"luamplib.lua", "modification") local currenttime = os.time() - local outputdir, cachedir if lfstouch then for i,v in ipairs{'TEXMFVAR','TEXMF_OUTPUT_DIRECTORY','.','TEXMFOUTPUT'} do @@ -857,10 +1352,9 @@ function luamplib.getcachedir(dir) end end end - % \end{macrocode} % -% Some basic MetaPost files not necessary to make cache files. +% Some basic \metapost files not necessary to make cache files. % \begin{macrocode} local noneedtoreplace = { ["boxes.mp"] = true, -- ["format.mp"] = true, @@ -879,7 +1373,6 @@ local noneedtoreplace = { ["mp-tool.mpiv"] = true, ["mp-cont.mpiv"] = true, } luamplib.noneedtoreplace = noneedtoreplace - % \end{macrocode} % % |format.mp| is much complicated, so specially treated. @@ -901,7 +1394,6 @@ local function replaceformatmp(file,newfile,ofmodify) lfstouch(newfile,currenttime,ofmodify) return newfile end - % \end{macrocode} % % Replace |btex ... etex| and |verbatimtex ... etex| in input files, @@ -911,7 +1403,6 @@ local name_b = "%f[%a_]" local name_e = "%f[^%a_]" local btex_etex = name_b.."btex"..name_e.."%s*(.-)%s*"..name_b.."etex"..name_e local verbatimtex_etex = name_b.."verbatimtex"..name_e.."%s*(.-)%s*"..name_b.."etex"..name_e - local function replaceinputmpfile (name,file) local ofmodify = lfsattributes(file,"modification") if not ofmodify then return file end @@ -924,23 +1415,19 @@ local function replaceinputmpfile (name,file) return nf.size == 0 and file or newfile end end - if name == "format.mp" then return replaceformatmp(file,newfile,ofmodify) end - local fh = ioopen(file,"r") if not fh then return file end local data = fh:read("*all"); fh:close() - % \end{macrocode} -% ``|etex|'' must be followed by a space or semicolon as specified in -% \LuaTeX\ manual, which is not the case of standalone MetaPost though. +% ``|etex|'' must be preceded by a space and followed by a space or semicolon as specified in +% \LuaTeX\ manual, which is not the case of standalone \metapost though. % \begin{macrocode} local count,cnt = 0,0 data, cnt = data:gsub(btex_etex, "btex %1 etex ") -- space count = count + cnt data, cnt = data:gsub(verbatimtex_etex, "verbatimtex %1 etex;") -- semicolon count = count + cnt - if count == 0 then noneedtoreplace[name] = true fh = ioopen(newfile,"w"); @@ -950,7 +1437,6 @@ local function replaceinputmpfile (name,file) end return file end - fh = ioopen(newfile,"w") if not fh then return file end fh:write(data); fh:close() @@ -960,8 +1446,8 @@ end % \end{macrocode} % -% As the finder function for MPLib, use the |kpse| library and -% make it behave like as if MetaPost was used. And replace it with +% As the finder function for \mplib, use the |kpse| library and +% make it behave like as if \metapost was used. And replace |.mp| files with % cache files if needed. % See also \#74, \#97. % \begin{macrocode} @@ -973,12 +1459,10 @@ do end mpkpse = kpse.new(arg[exe], "mpost") end - local special_ftype = { pfb = "type1 fonts", enc = "enc files", } - function luamplib.finder (name, mode, ftype) if mode == "w" then if name and name ~= "mpout.log" then @@ -1004,9 +1488,9 @@ end % \end{macrocode} % -% Create and load MPLib instances. -% We do not support ancient version of MPLib any more. -% (Don't know which version of MPLib started to support +% Create and load \mplib instances. +% We do not support ancient version of \mplib any more. +% (Don't know which version of \mplib started to support % |make_text| and |run_script|; let the users find it.) % \begin{macrocode} local preamble = [[ @@ -1015,17 +1499,15 @@ local preamble = [[ let normalfontsize = fontsize; input %s ; ]] - % \end{macrocode} % -% |plain| or |metafun|, -% though we cannot support |metafun| format fully. +% \emph{plain} or \emph{metafun}, +% though we cannot support \emph{metafun} format fully. % \begin{macrocode} local currentformat = "plain" function luamplib.setformat (name) currentformat = name end - % \end{macrocode} % % v2.9 has introduced the concept of ``code inherit'' @@ -1034,7 +1516,6 @@ luamplib.codeinherit = false local mplibinstances = {} luamplib.instances = mplibinstances local has_instancename = false - local function reporterror (result, prevlog) if not result then err("no result object returned") @@ -1061,7 +1542,7 @@ local function reporterror (result, prevlog) % \end{macrocode} % v2.6.1: now luamplib does not disregard |show| command, % even when |luamplib.showlog| is false. Incidentally, -% it does not raise error but just prints an info, +% it does not raise error nor prints an info, % even if output has no figure. % \begin{macrocode} local show = log:match"\n>>? .+" @@ -1075,11 +1556,10 @@ local function reporterror (result, prevlog) return log end end - % \end{macrocode} % % |lualibs-os.lua| installs a randomseed. When this file is not loaded, -% we should explicitly seed a unique interger to get random randomseed for each run. +% we should explicitly seed a unique integer to get random randomseed for each run. % \begin{macrocode} if not math.initialseed then math.randomseed(currenttime) end local function luamplibload (name) @@ -1088,10 +1568,8 @@ local function luamplibload (name) find_file = luamplib.finder, % \end{macrocode} % Make use of |make_text| and |run_script|, which will co-operate -% with \LuaTeX's |tex.runtoks|. And we -% provide |numbersystem| option since v2.4. Default value ``|scaled|'' -% can be changed by declaring |\mplibnumbersystem{double}| -% or |\mplibnumbersystem{decimal}|. +% with \LuaTeX's |tex.runtoks| or other Lua functions. And we +% provide |numbersystem| option since v2.4. % See \url{https://github.com/lualatex/luamplib/issues/21}. % \begin{macrocode} make_text = luamplib.maketext, @@ -1102,12 +1580,12 @@ local function luamplibload (name) extensions = 1, } % \end{macrocode} -% Append our own MetaPost preamble to the preamble above. +% Append our own \metapost preamble to the preamble above. % \begin{macrocode} local preamble = tableconcat{ format(preamble, replacesuffix(name,"mp")), luamplib.preambles.mplibcode, - luamplib.legacy_verbatimtex and luamplib.preambles.legacyverbatimtex or "", + luamplib.legacyverbatimtex and luamplib.preambles.legacyverbatimtex or "", luamplib.textextlabel and luamplib.preambles.textextlabel or "", } local result, log @@ -1119,22 +1597,12 @@ local function luamplibload (name) log = reporterror(result) return mpx, result, log end - % \end{macrocode} % % Here, excute each |mplibcode| data, % ie |\begin{mplibcode} ... \end{mplibcode}|. % \begin{macrocode} local function process (data, instancename) -% \end{macrocode} -% The workaround of issue \#70 seems to be unnecessary, as we use -% |make_text| now. -% \begin{verbatim} -% if not data:find(name_b.."beginfig%s*%([%+%-%s]*%d[%.%d%s]*%)") then -% data = data .. "beginfig(-1);endfig;" -% end -% \end{verbatim} -% \begin{macrocode} local currfmt if instancename and instancename ~= "" then currfmt = instancename @@ -1144,7 +1612,7 @@ local function process (data, instancename) currentformat, luamplib.numbersystem or "scaled", tostring(luamplib.textextlabel), - tostring(luamplib.legacy_verbatimtex), + tostring(luamplib.legacyverbatimtex), } has_instancename = false end @@ -1178,40 +1646,30 @@ end % |dvipdfmx| is supported, though nobody seems to use it. % \begin{macrocode} local pdfmode = tex.outputmode > 0 + % \end{macrocode} % -% |make_text| and some |run_script| uses \LuaTeX's |tex.runtoks|, -% which made possible running \TeX\ code snippets inside |\directlua|. +% |make_text| and some |run_script| uses \LuaTeX's |tex.runtoks|. % \begin{macrocode} local catlatex = luatexbase.registernumber("catcodetable@latex") local catat11 = luatexbase.registernumber("catcodetable@atletter") - % \end{macrocode} % % |tex.scantoks| sometimes fail to read catcode properly, especially % |\#|, |\&|, or |\%|. After some experiment, we dropped using it. -% Instead, a function containing |tex.script| seems to work nicely. -% \begin{verbatim} -% local function run_tex_code_no_use (str, cat) -% cat = cat or catlatex -% texscantoks("mplibtmptoks", cat, str) -% texruntoks("mplibtmptoks") -% end -% \end{verbatim} +% Instead, a function containing |tex.sprint| seems to work nicely. % \begin{macrocode} local function run_tex_code (str, cat) texruntoks(function() texsprint(cat or catlatex, str) end) end - % \end{macrocode} % -% Prepare textext box number containers, -% locals, globals and possibly instances. +% Prepare textext box number containers, locals and globals. % |localid| can be any number. They are local anyway. % The number will be reset at the start of a new code chunk. % Global boxes will use |\newbox| command in |tex.runtoks| process. -% This is the same when |codeinherit| is declared as true. -% Boxes of an instance will also be global, so that +% This is the same when |codeinherit| is true. +% Boxes in instances with name will also be global, so that % their tex boxes can be shared among instances of the same name. % \begin{macrocode} local texboxes = { globalid = 0, localid = 4096 } @@ -1219,13 +1677,12 @@ local texboxes = { globalid = 0, localid = 4096 } % For conversion of |sp| to |bp|. % \begin{macrocode} local factor = 65536*(7227/7200) - local textext_fmt = 'image(addto currentpicture doublepath unitsquare \z -xscaled %f yscaled %f shifted (0,-%f) \z -withprescript "mplibtexboxid=%i:%f:%f")' - -local function process_tex_text (str) + xscaled %f yscaled %f shifted (0,-%f) \z + withprescript "mplibtexboxid=%i:%f:%f")' +local function process_tex_text (str, maketext) if str then + if not maketext then str = str:gsub("\r.-$","") end local global = (has_instancename or luamplib.globaltextext or luamplib.codeinherit) and "\\global" or "" local tex_box_id @@ -1238,7 +1695,7 @@ local function process_tex_text (str) run_tex_code(format([[\expandafter\newbox\csname luamplib.box.%s\endcsname]], boxid)) tex_box_id = tex.getcount'allocationnumber' end - run_tex_code(format("%s\\setbox%i\\hbox{%s}", global, tex_box_id, str)) + run_tex_code(format("\\luamplibtagtextbegin{%i}%s\\setbox%i\\hbox{%s}\\luamplibtagtextend", tex_box_id, global, tex_box_id, str)) local box = texgetbox(tex_box_id) local wd = box.width / factor local ht = box.height / factor @@ -1253,7 +1710,6 @@ end % Make |color| or |xcolor|'s color expressions usable, % with \cs{mpcolor} or |mplibcolor|. These commands should be used % with graphical objects. -% % Attempt to support l3color as well. % \begin{macrocode} local mplibcolorfmt = { @@ -1269,7 +1725,6 @@ local mplibcolorfmt = { [[\color_select:n%s\endgroup]], }, } - local colfmt = is_defined'color_select:n' and "l3color" or "xcolor" if colfmt == "l3color" then run_tex_code{ @@ -1283,7 +1738,6 @@ if colfmt == "l3color" then } end local ccexplat = luatexbase.registernumber"luamplibcctabexplat" - local function process_color (str) if str then if not str:find("%b{}") then @@ -1344,20 +1798,18 @@ end % % For legacy verbatimtex process. % |verbatimtex ... etex| before |beginfig()| is not ignored, -% but the \TeX\ code is inserted just before the mplib box. And -% \TeX\ code inside |beginfig() ... endfig| is inserted after the mplib box. +% but the \TeX\ code is inserted just before the \mplib box. And +% \TeX\ code inside |beginfig() ... endfig| is inserted after the \mplib box. % \begin{macrocode} local tex_code_pre_mplib = {} luamplib.figid = 1 luamplib.in_the_fig = false - local function process_verbatimtex_prefig (str) if str then tex_code_pre_mplib[luamplib.figid] = str end return "" end - local function process_verbatimtex_infig (str) if str then return format('special "postmplibverbtex=%s";', str) @@ -1376,17 +1828,16 @@ local runscript_funcs = { % \end{macrocode} % -% For |metafun| format. see issue \#79. +% For \emph{metafun} format. see issue \#79. % \begin{macrocode} mp = mp or {} local mp = mp mp.mf_path_reset = mp.mf_path_reset or function() end mp.mf_finish_saving_data = mp.mf_finish_saving_data or function() end mp.report = mp.report or info - % \end{macrocode} % -% metafun 2021-03-09 changes crashes luamplib. +% \emph{metafun} 2021-03-09 changes crashes luamplib. % \begin{macrocode} catcodes = catcodes or {} local catcodes = catcodes @@ -1420,7 +1871,6 @@ local function mpprint(buffer,...) end end end - function luamplib.runscript (code) local id, str = code:match("(.-){(.*)}") if id and str then @@ -1442,7 +1892,7 @@ function luamplib.runscript (code) return buffer end buffer = {} - mpprint(buffer, table.unpack(res)) + mpprint(buffer, tableunpack(res)) return tableconcat(buffer) end return "" @@ -1457,11 +1907,10 @@ local function protecttexcontents (str) :gsub("%%.-\n", "") :gsub("%%.-$", "") :gsub("%zPerCent%z", "\\%%") + :gsub("\r.-$", "") :gsub("%s+", " ") end - -luamplib.legacy_verbatimtex = true - +luamplib.legacyverbatimtex = true function luamplib.maketext (str, what) if str and str ~= "" then str = protecttexcontents(str) @@ -1470,7 +1919,7 @@ function luamplib.maketext (str, what) not str:find("\\begin%s*{document}") and not str:find("\\documentstyle"..name_e) and not str:find("\\usepackage"..name_e) then - if luamplib.legacy_verbatimtex then + if luamplib.legacyverbatimtex then if luamplib.in_the_fig then return process_verbatimtex_infig(str) else @@ -1481,7 +1930,7 @@ function luamplib.maketext (str, what) end end else - return process_tex_text(str) + return process_tex_text(str, true) -- bool is for 'char13' end end return "" @@ -1489,13 +1938,13 @@ end % \end{macrocode} % -% luamplib's metapost color operators +% luamplib's \metapost color operators % \begin{macrocode} local function colorsplit (res) - local t, tt = { }, res:gsub("[%[%]]",""):explode() + local t, tt = { }, res:gsub("[%[%]]","",2):explode() local be = tt[1]:find"^%d" and 1 or 2 for i=be, #tt do - if tt[i]:find"^%a" then break end + if not tonumber(tt[i]) then break end t[#t+1] = tt[i] end return t @@ -1529,14 +1978,15 @@ luamplib.shadecolor = function (str) if res:find" cs " or res:find"@pdf.obj" then -- spot color shade: l3 only % \end{macrocode} % An example of spot color shading: -% \begin{verbatim} +%\begin{verbatim} +% \DocumentMetadata{ } % \documentclass{article} % \usepackage{luamplib} -% \mplibsetformat{metafun} % \ExplSyntaxOn % \color_model_new:nnn { pantone3005 } % { Separation } -% { name = PANTONE~3005~U , +% { +% name = PANTONE~3005~U , % alternative-model = cmyk , % alternative-values = {1, 0.56, 0, 0} % } @@ -1544,14 +1994,16 @@ luamplib.shadecolor = function (str) % \color_set:nnn{spotB}{pantone3005}{0.6} % \color_model_new:nnn { pantone1215 } % { Separation } -% { name = PANTONE~1215~U , +% { +% name = PANTONE~1215~U , % alternative-model = cmyk , % alternative-values = {0, 0.15, 0.51, 0} % } % \color_set:nnn{spotC}{pantone1215}{1} % \color_model_new:nnn { pantone2040 } % { Separation } -% { name = PANTONE~2040~U , +% { +% name = PANTONE~2040~U , % alternative-model = cmyk , % alternative-values = {0, 0.28, 0.21, 0.04} % } @@ -1560,44 +2012,77 @@ luamplib.shadecolor = function (str) % \begin{document} % \begin{mplibcode} % beginfig(1) -% fill unitsquare xyscaled (\mpdim\textwidth,1cm) -% withshademethod "linear" -% withshadevector (0,1) -% withshadestep ( -% withshadefraction .5 -% withshadecolors ("spotB","spotC") +% fill unitsquare xscaled \mpdim\textwidth yscaled 1cm +% withshadingmethod "linear" +% withshadingvector (0,1) +% withshadingstep ( +% withshadingfraction .5 +% withshadingcolors ("spotB","spotC") % ) -% withshadestep ( -% withshadefraction 1 -% withshadecolors ("spotC","spotD") +% withshadingstep ( +% withshadingfraction 1 +% withshadingcolors ("spotC","spotD") % ) % ; % endfig; % \end{mplibcode} % \end{document} -% \end{verbatim} +%\end{verbatim} +% another one: user-defined DeviceN colorspace +%\begin{verbatim} +% \DocumentMetadata{ } +% \documentclass{article} +% \usepackage{luamplib} +% \ExplSyntaxOn +% \color_model_new:nnn { pantone1215 } +% { Separation } +% { +% name = PANTONE~1215~U , +% alternative-model = cmyk , +% alternative-values = {0, 0.15, 0.51, 0} +% } +% \color_model_new:nnn { pantone+black } +% { DeviceN } +% { names = {pantone1215,black} } +% \color_set:nnn{purepantone}{pantone+black}{1,0} +% \color_set:nnn{pureblack} {pantone+black}{0,1} +% \ExplSyntaxOff +% \begin{document} +% \mpfig +% fill unitsquare xscaled \mpdim{\textwidth} yscaled 30 +% withshadingmethod "linear" +% withshadingcolors ("purepantone","pureblack") +% ; +% \endmpfig +% \end{document} +%\end{verbatim} % \begin{macrocode} run_tex_code({ [[\color_export:nnN{]], str, [[}{backend}\mplib_@tempa]], },ccexplat) - local name = get_macro'mplib_@tempa':match'{(.-)}{.+}' + local name, value = get_macro'mplib_@tempa':match'{(.-)}{(.-)}' local t, obj = res:explode() if pdfmode then obj = format("%s 0 R", ltx.pdf.object_id( t[1]:sub(2,-1) )) else obj = t[2] end - local value = t[3]:match"%[(.-)%]" or t[3] - return format('(%s) withprescript"mplib_spotcolor=%s:%s"', value,obj,name) + return format('(1) withprescript"mplib_spotcolor=%s:%s:%s"', value,obj,name) end return colorsplit(res) end % \end{macrocode} % +% Remove trailing zeros for smaller PDF +% \begin{macrocode} +local decimals = "%.%d+" +local function rmzeros(str) return str:gsub("%.?0+$","") end + +% \end{macrocode} +% % luamplib's mplibgraphictext operator % \begin{macrocode} -local running = -1073741824 local emboldenfonts = { } local function getemboldenwidth (curr, fakebold) local width = emboldenfonts.width @@ -1630,13 +2115,14 @@ local function getrulewhatsit (line, wd, ht, dp) fmt = "pdf:content "..fmt pl = node.new("whatsit","special") end - pl.data = fmt:format(line, 0, -dp, wd, ht+dp, "B") + pl.data = fmt:format(line, 0, -dp, wd, ht+dp, "B") :gsub(decimals,rmzeros) local ss = node.new"glue" node.setglue(ss, 0, 65536, 65536, 2, 2) pl.next = ss return pl end local function getrulemetric (box, curr, bp) + local running = -1073741824 local wd,ht,dp = curr.width, curr.height, curr.depth wd = wd == running and box.width or wd ht = ht == running and box.height or ht @@ -1688,7 +2174,8 @@ local function embolden (box, curr, fakebold) head, curr = node.remove(head, curr) elseif curr.id == node.id"glyph" and curr.font > 0 then local f = curr.font - local i = emboldenfonts[f] + local key = format("%s:%s",f,fakebold) + local i = emboldenfonts[key] if not i then local ft = font.getfont(f) or font.getcopy(f) if pdfmode then @@ -1704,7 +2191,7 @@ local function embolden (box, curr, fakebold) name = format('%s;embolden=%s;',name,fakebold) _, i = fonts.constructors.readanddefine(name,ft.size) end - emboldenfonts[f] = i + emboldenfonts[key] = i end curr.font = i end @@ -1716,6 +2203,9 @@ end local function graphictextcolor (col, filldraw) if col:find"^[%d%.:]+$" then col = col:explode":" + for i=1,#col do + col[i] = format("%.3f", col[i]) + end if pdfmode then local op = #col == 4 and "k" or #col == 3 and "rg" or "g" col[#col+1] = filldraw == "fill" and op or op:upper() @@ -1913,7 +2403,7 @@ end % mpliboutlinetext : based on mkiv's font-mps.lua % \begin{macrocode} local rulefmt = "mpliboutlinepic[%i]:=image(addto currentpicture contour \z -unitsquare shifted - center unitsquare;) xscaled %f yscaled %f shifted (%f,%f);" + unitsquare shifted - center unitsquare;) xscaled %f yscaled %f shifted (%f,%f);" local outline_horz, outline_vert function outline_vert (res, box, curr, xshift, yshift) local b2u = box.dir == "LTL" @@ -1951,10 +2441,10 @@ function outline_vert (res, box, curr, xshift, yshift) local ady = abs(ody - dy) local ndy = math.ceil(ady / hd) * hd local diff = ndy - ady - n = (vwidth-diff) // hd + n = math.floor((vwidth-diff) / hd) dy = dy + (b2u and diff or -diff) else - n = vwidth // hd + n = math.floor(vwidth / hd) if kind == 101 then local side = vwidth % hd / 2 dy = dy + (b2u and side or -side) @@ -2103,10 +2593,10 @@ function outline_horz (res, box, curr, xshift, yshift, discwd) local adx = abs(dx-dirs[1].dx) local ndx = math.ceil(adx / wd) * wd local diff = ndx - adx - n = (width-diff) // wd + n = math.floor((width-diff) / wd) dx = dx + (r2l and -diff-wd or diff) else - n = width // wd + n = math.floor(width / wd) if kind == 101 then local side = width % wd /2 dx = dx + (r2l and -side-wd or side) @@ -2154,7 +2644,28 @@ end % \end{macrocode} % -% Our MetaPost preambles +% lua function for |mplibsubstring ... of ...| +% \begin{macrocode} +function luamplib.utf8substring (s,b,e) + local t, tt, step = { }, { } + for _, c in utf8.codes(s) do + table.insert(t, utf8.char(c)) + end + if b <= e then + b, step = b+1, 1 + else + e, step = e+1, -1 + end + for i = b, e, step do + table.insert(tt, t[i]) + end + s = table.concat(tt):gsub('"','"&ditto&"') + return string.format('"%s"', s) +end + +% \end{macrocode} +% +% Our \metapost preambles % \begin{macrocode} luamplib.preambles = { mplibcode = [[ @@ -2181,6 +2692,20 @@ else: def message expr t = if string t: runscript("mp.report[=["&t&"]=]") else: errmessage "Not a string" fi enddef; + def withtransparency (expr a, t) = + withprescript "tr_alternative=" & if numeric a: decimal fi a + withprescript "tr_transparency=" & decimal t + enddef; + vardef ddecimal primary p = + decimal xpart p & " " & decimal ypart p + enddef; + vardef boundingbox primary p = + if (path p) or (picture p) : + llcorner p -- lrcorner p -- urcorner p -- ulcorner p + else : + origin + fi -- cycle + enddef; fi def resolvedcolor(expr s) = runscript("return luamplib.shadecolor('"& s &"')") @@ -2339,7 +2864,13 @@ vardef mpliboutlinetext@# (expr t) text rest = ) mplib_do_outline_options_r; ) enddef ; primarydef t withpattern p = - image( fill t withprescript "mplibpattern=" & if numeric p: decimal fi p; ) + image( + if cycle t: + fill + else: + draw + fi + t withprescript "mplibpattern=" & if numeric p: decimal fi p; ) enddef; vardef mplibtransformmatrix (text e) = save t; transform t; @@ -2353,6 +2884,217 @@ vardef mplibtransformmatrix (text e) = & decimal ypart t & "," & "}"); enddef; +primarydef p withfademethod s = + if picture p: + image( + draw p; + draw center p withprescript "mplibfadestate=stop"; + ) + else: + p withprescript "mplibfadestate=stop" + fi + withprescript "mplibfadetype=" & s + withprescript "mplibfadebbox=" & + decimal (xpart llcorner p -1/4) & ":" & + decimal (ypart llcorner p -1/4) & ":" & + decimal (xpart urcorner p +1/4) & ":" & + decimal (ypart urcorner p +1/4) +enddef; +def withfadeopacity (expr a,b) = + withprescript "mplibfadeopacity=" & + decimal a & ":" & + decimal b +enddef; +def withfadevector (expr a,b) = + withprescript "mplibfadevector=" & + decimal xpart a & ":" & + decimal ypart a & ":" & + decimal xpart b & ":" & + decimal ypart b +enddef; +let withfadecenter = withfadevector; +def withfaderadius (expr a,b) = + withprescript "mplibfaderadius=" & + decimal a & ":" & + decimal b +enddef; +def withfadebbox (expr a,b) = + withprescript "mplibfadebbox=" & + decimal xpart a & ":" & + decimal ypart a & ":" & + decimal xpart b & ":" & + decimal ypart b +enddef; +primarydef p asgroup s = + image( + draw center p + withprescript "mplibgroupbbox=" & + decimal (xpart llcorner p -1/4) & ":" & + decimal (ypart llcorner p -1/4) & ":" & + decimal (xpart urcorner p +1/4) & ":" & + decimal (ypart urcorner p +1/4) + withprescript "gr_state=start" + withprescript "gr_type=" & s; + draw p; + draw center p withprescript "gr_state=stop"; + ) +enddef; +def withgroupbbox (expr a,b) = + withprescript "mplibgroupbbox=" & + decimal xpart a & ":" & + decimal ypart a & ":" & + decimal xpart b & ":" & + decimal ypart b +enddef; +def withgroupname expr s = + withprescript "mplibgroupname=" & s +enddef; +def usemplibgroup primary s = + draw maketext("\csname luamplib.group." & s & "\endcsname") + shifted runscript("return luamplib.trgroupshifts['" & s & "']") +enddef; +path mplib_shade_path ; +numeric mplib_shade_step ; mplib_shade_step := 0 ; +numeric mplib_shade_fx, mplib_shade_fy ; +numeric mplib_shade_lx, mplib_shade_ly ; +numeric mplib_shade_nx, mplib_shade_ny ; +numeric mplib_shade_dx, mplib_shade_dy ; +numeric mplib_shade_tx, mplib_shade_ty ; +primarydef p withshadingmethod m = + p + if picture p : + withprescript "sh_operand_type=picture" + if textual p: + withprescript "sh_transform=no" + mplib_with_shade_method (boundingbox p, m) + else: + withprescript "sh_transform=yes" + mplib_with_shade_method (pathpart p, m) + fi + else : + withprescript "sh_transform=yes" + mplib_with_shade_method (p, m) + fi +enddef; +def mplib_with_shade_method (expr p, m) = + hide(mplib_with_shade_method_analyze(p)) + withprescript "sh_domain=0 1" + withprescript "sh_color=into" + withprescript "sh_color_a=" & colordecimals white + withprescript "sh_color_b=" & colordecimals black + withprescript "sh_first=" & ddecimal point 0 of p + withprescript "sh_set_x=" & ddecimal (mplib_shade_nx,mplib_shade_lx) + withprescript "sh_set_y=" & ddecimal (mplib_shade_ny,mplib_shade_ly) + if m = "linear" : + withprescript "sh_type=linear" + withprescript "sh_factor=1" + withprescript "sh_center_a=" & ddecimal llcorner p + withprescript "sh_center_b=" & ddecimal urcorner p + else : + withprescript "sh_type=circular" + withprescript "sh_factor=1.2" + withprescript "sh_center_a=" & ddecimal center p + withprescript "sh_center_b=" & ddecimal center p + withprescript "sh_radius_a=" & decimal 0 + withprescript "sh_radius_b=" & decimal mplib_max_radius(p) + fi +enddef; +def mplib_with_shade_method_analyze(expr p) = + mplib_shade_path := p ; + mplib_shade_step := 1 ; + mplib_shade_fx := xpart point 0 of p ; + mplib_shade_fy := ypart point 0 of p ; + mplib_shade_lx := mplib_shade_fx ; + mplib_shade_ly := mplib_shade_fy ; + mplib_shade_nx := 0 ; + mplib_shade_ny := 0 ; + mplib_shade_dx := abs(mplib_shade_fx - mplib_shade_lx) ; + mplib_shade_dy := abs(mplib_shade_fy - mplib_shade_ly) ; + for i=1 upto length(p) : + mplib_shade_tx := abs(mplib_shade_fx - xpart point i of p) ; + mplib_shade_ty := abs(mplib_shade_fy - ypart point i of p) ; + if mplib_shade_tx > mplib_shade_dx : + mplib_shade_nx := i + 1 ; + mplib_shade_lx := xpart point i of p ; + mplib_shade_dx := mplib_shade_tx ; + fi ; + if mplib_shade_ty > mplib_shade_dy : + mplib_shade_ny := i + 1 ; + mplib_shade_ly := ypart point i of p ; + mplib_shade_dy := mplib_shade_ty ; + fi ; + endfor ; +enddef; +vardef mplib_max_radius(expr p) = + max ( + (xpart center p - xpart llcorner p) ++ (ypart center p - ypart llcorner p), + (xpart center p - xpart ulcorner p) ++ (ypart ulcorner p - ypart center p), + (xpart lrcorner p - xpart center p) ++ (ypart center p - ypart lrcorner p), + (xpart urcorner p - xpart center p) ++ (ypart urcorner p - ypart center p) + ) +enddef; +def withshadingstep (text t) = + hide(mplib_shade_step := mplib_shade_step + 1 ;) + withprescript "sh_step=" & decimal mplib_shade_step + t +enddef; +def withshadingradius expr a = + withprescript "sh_radius_a=" & decimal (xpart a) + withprescript "sh_radius_b=" & decimal (ypart a) +enddef; +def withshadingorigin expr a = + withprescript "sh_center_a=" & ddecimal a + withprescript "sh_center_b=" & ddecimal a +enddef; +def withshadingvector expr a = + withprescript "sh_center_a=" & ddecimal (point xpart a of mplib_shade_path) + withprescript "sh_center_b=" & ddecimal (point ypart a of mplib_shade_path) +enddef; +def withshadingdirection expr a = + withprescript "sh_center_a=" & ddecimal (point xpart a of boundingbox(mplib_shade_path)) + withprescript "sh_center_b=" & ddecimal (point ypart a of boundingbox(mplib_shade_path)) +enddef; +def withshadingtransform expr a = + withprescript "sh_transform=" & a +enddef; +def withshadingcenter expr a = + withprescript "sh_center_a=" & ddecimal ( + center mplib_shade_path shifted ( + xpart a * xpart (lrcorner mplib_shade_path - llcorner mplib_shade_path)/2, + ypart a * ypart (urcorner mplib_shade_path - lrcorner mplib_shade_path)/2 + ) + ) +enddef; +def withshadingdomain expr d = + withprescript "sh_domain=" & ddecimal d +enddef; +def withshadingfactor expr f = + withprescript "sh_factor=" & decimal f +enddef; +def withshadingfraction expr a = + if mplib_shade_step > 0 : + withprescript "sh_fraction_" & decimal mplib_shade_step & "=" & decimal a + fi +enddef; +def withshadingcolors (expr a, b) = + if mplib_shade_step > 0 : + withprescript "sh_color=into" + withprescript "sh_color_a_" & decimal mplib_shade_step & "=" & colordecimals a + withprescript "sh_color_b_" & decimal mplib_shade_step & "=" & colordecimals b + else : + withprescript "sh_color=into" + withprescript "sh_color_a=" & colordecimals a + withprescript "sh_color_b=" & colordecimals b + fi +enddef; +def mpliblength primary t = + runscript("return utf8.len[===[" & t & "]===]") +enddef; +def mplibsubstring expr p of t = + runscript("return luamplib.utf8substring([===[" & t & "]===]," + & decimal xpart p & "," + & decimal ypart p & ")") +enddef; ]], legacyverbatimtex = [[ def specialVerbatimTeX (text t) = runscript("luamplibprefig{"&t&"}") enddef; @@ -2366,7 +3108,25 @@ extra_endfig := extra_endfig & " let VerbatimTeX = specialVerbatimTeX;"& "luamplib.in_the_fig=false" &ditto& ");"; ]], textextlabel = [[ -primarydef s infont f = rawtextext(s) enddef; +let luampliboriginalinfont = infont; +primarydef s infont f = + if (s < char 32) + or (s = char 35) % # + or (s = char 36) % $ + or (s = char 37) % % + or (s = char 38) % & + or (s = char 92) % \ + or (s = char 94) % ^ + or (s = char 95) % _ + or (s = char 123) % { + or (s = char 125) % } + or (s = char 126) % ~ + or (s = char 127) : + s luampliboriginalinfont f + else : + rawtextext(s) + fi +enddef; def fontsize expr f = begingroup save size; numeric size; @@ -2382,7 +3142,6 @@ enddef; % When \cs{mplibverbatim} is enabled, do not expand |mplibcode| data. % \begin{macrocode} luamplib.verbatiminput = false - % \end{macrocode} % % Do not expand |btex ... etex|, |verbatimtex ... etex|, and @@ -2398,7 +3157,6 @@ local function protect_expansion (str) return format("\\unexpanded{%s}",str) end end - local function unprotect_expansion (str) if str then return str:gsub("!!!Control!!!", "\\") @@ -2408,25 +3166,20 @@ local function unprotect_expansion (str) :gsub("!!!RBrace!!!", "}") end end - luamplib.everymplib = setmetatable({ [""] = "" },{ __index = function(t) return t[""] end }) luamplib.everyendmplib = setmetatable({ [""] = "" },{ __index = function(t) return t[""] end }) - function luamplib.process_mplibcode (data, instancename) texboxes.localid = 4096 - % \end{macrocode} % This is needed for legacy behavior % \begin{macrocode} - if luamplib.legacy_verbatimtex then + if luamplib.legacyverbatimtex then luamplib.figid, tex_code_pre_mplib = 1, {} end - local everymplib = luamplib.everymplib[instancename] local everyendmplib = luamplib.everyendmplib[instancename] data = format("\n%s\n%s\n%s\n",everymplib, data, everyendmplib) :gsub("\r","\n") - % \end{macrocode} % These five lines are needed for |mplibverbatim| mode. % \begin{macrocode} @@ -2466,7 +3219,6 @@ function luamplib.process_mplibcode (data, instancename) return format("verbatimtex %s etex", unprotect_expansion(str)) end) end - process(data, instancename) end @@ -2474,21 +3226,12 @@ end % % For parsing |prescript| materials. % \begin{macrocode} -local further_split_keys = { - mplibtexboxid = true, - sh_color_a = true, - sh_color_b = true, -} local function script2table(s) local t = {} for _,i in ipairs(s:explode("\13+")) do local k,v = i:match("(.-)=(.*)") -- v may contain = or empty. if k and v and k ~= "" and not t[k] then - if further_split_keys[k] or further_split_keys[k:sub(1,10)] then - t[k] = v:explode(":") - else - t[k] = v - end + t[k] = v end end return t @@ -2496,144 +3239,34 @@ end % \end{macrocode} % -% Codes below for inserting PDF lieterals are mostly from ConTeXt general, -% with small changes when needed. +% pdfliterals will be stored in |figcontents| table, and written to pdf in one go +% at the end of the flushing figure. +% Subtable |post| is for the legacy behavior. % \begin{macrocode} -local function getobjects(result,figure,f) - return figure:objects() -end - -function luamplib.convert (result, flusher) - luamplib.flush(result, flusher) - return true -- done -end - local figcontents = { post = { } } local function put2output(a,...) figcontents[#figcontents+1] = type(a) == "string" and format(a,...) or a end - local function pdf_startfigure(n,llx,lly,urx,ury) put2output("\\mplibstarttoPDF{%f}{%f}{%f}{%f}",llx,lly,urx,ury) end - local function pdf_stopfigure() put2output("\\mplibstoptoPDF") end - % \end{macrocode} % % |tex.sprint| with catcode regime -2, as sometimes |#| gets doubled % in the argument of pdfliteral. % \begin{macrocode} -local function pdf_literalcode (fmt,...) - put2output{-2, format(fmt,...)} -end - -local function pdf_textfigure(font,size,text,width,height,depth) - text = text:gsub(".",function(c) - return format("\\hbox{\\char%i}",string.byte(c)) -- kerning happens in metapost : false - end) - put2output("\\mplibtextext{%s}{%f}{%s}{%s}{%s}",font,size,text,0,0) -end - -local bend_tolerance = 131/65536 - -local rx, sx, sy, ry, tx, ty, divider = 1, 0, 0, 1, 0, 0, 1 - -local function pen_characteristics(object) - local t = mplib.pen_info(object) - rx, ry, sx, sy, tx, ty = t.rx, t.ry, t.sx, t.sy, t.tx, t.ty - divider = sx*sy - rx*ry - return not (sx==1 and rx==0 and ry==0 and sy==1 and tx==0 and ty==0), t.width -end - -local function concat(px, py) -- no tx, ty here - return (sy*px-ry*py)/divider,(sx*py-rx*px)/divider -end - -local function curved(ith,pth) - local d = pth.left_x - ith.right_x - if abs(ith.right_x - ith.x_coord - d) <= bend_tolerance and abs(pth.x_coord - pth.left_x - d) <= bend_tolerance then - d = pth.left_y - ith.right_y - if abs(ith.right_y - ith.y_coord - d) <= bend_tolerance and abs(pth.y_coord - pth.left_y - d) <= bend_tolerance then - return false - end - end - return true -end - -local function flushnormalpath(path,open) - local pth, ith - for i=1,#path do - pth = path[i] - if not ith then - pdf_literalcode("%f %f m",pth.x_coord,pth.y_coord) - elseif curved(ith,pth) then - pdf_literalcode("%f %f %f %f %f %f c",ith.right_x,ith.right_y,pth.left_x,pth.left_y,pth.x_coord,pth.y_coord) - else - pdf_literalcode("%f %f l",pth.x_coord,pth.y_coord) - end - ith = pth - end - if not open then - local one = path[1] - if curved(pth,one) then - pdf_literalcode("%f %f %f %f %f %f c",pth.right_x,pth.right_y,one.left_x,one.left_y,one.x_coord,one.y_coord ) - else - pdf_literalcode("%f %f l",one.x_coord,one.y_coord) - end - elseif #path == 1 then -- special case .. draw point - local one = path[1] - pdf_literalcode("%f %f l",one.x_coord,one.y_coord) - end -end - -local function flushconcatpath(path,open) - pdf_literalcode("%f %f %f %f %f %f cm", sx, rx, ry, sy, tx ,ty) - local pth, ith - for i=1,#path do - pth = path[i] - if not ith then - pdf_literalcode("%f %f m",concat(pth.x_coord,pth.y_coord)) - elseif curved(ith,pth) then - local a, b = concat(ith.right_x,ith.right_y) - local c, d = concat(pth.left_x,pth.left_y) - pdf_literalcode("%f %f %f %f %f %f c",a,b,c,d,concat(pth.x_coord, pth.y_coord)) - else - pdf_literalcode("%f %f l",concat(pth.x_coord, pth.y_coord)) - end - ith = pth - end - if not open then - local one = path[1] - if curved(pth,one) then - local a, b = concat(pth.right_x,pth.right_y) - local c, d = concat(one.left_x,one.left_y) - pdf_literalcode("%f %f %f %f %f %f c",a,b,c,d,concat(one.x_coord, one.y_coord)) - else - pdf_literalcode("%f %f l",concat(one.x_coord,one.y_coord)) - end - elseif #path == 1 then -- special case .. draw point - local one = path[1] - pdf_literalcode("%f %f l",concat(one.x_coord,one.y_coord)) - end -end - -local function start_pdf_code() - if pdfmode then - pdf_literalcode("q") - else - put2output"\\special{pdf:bcontent}" - end -end -local function stop_pdf_code() - if pdfmode then - pdf_literalcode("Q") - else - put2output"\\special{pdf:econtent}" - end +local function pdf_literalcode (...) + put2output{ -2, (format(...) :gsub(decimals,rmzeros)) } end +local start_pdf_code = pdfmode + and function() pdf_literalcode"q" end + or function() put2output"\\special{pdf:bcontent}" end +local stop_pdf_code = pdfmode + and function() pdf_literalcode"Q" end + or function() put2output"\\special{pdf:econtent}" end % \end{macrocode} % @@ -2641,7 +3274,7 @@ end % |textext(...)| or |TEX(...)|, all being the same internally. % \begin{macrocode} local function put_tex_boxes (object,prescript) - local box = prescript.mplibtexboxid + local box = prescript.mplibtexboxid:explode":" local n,tw,th = box[1],tonumber(box[2]),tonumber(box[3]) if n and tw and th then local op = object.path @@ -2705,23 +3338,38 @@ local pdfobjs, pdfetcs = {}, {} pdfetcs.pgfextgs = "pgf@sys@addpdfresource@extgs@plain" pdfetcs.pgfpattern = "pgf@sys@addpdfresource@patterns@plain" pdfetcs.pgfcolorspace = "pgf@sys@addpdfresource@colorspaces@plain" - -local function update_pdfobjs (os) - local on = pdfobjs[os] +local function update_pdfobjs (os, stream) + local key = os + if stream then key = key..stream end + local on = key and pdfobjs[key] if on then return on,false end if pdfmode then - on = pdf.immediateobj(os) + if stream then + on = pdf.immediateobj("stream",stream,os) + elseif os then + on = pdf.immediateobj(os) + else + on = pdf.reserveobj() + end else on = pdfetcs.cnt or 1 - texsprint(format("\\special{pdf:obj @mplibpdfobj%s %s}",on,os)) + if stream then + texsprint(format("\\special{pdf:stream @mplibpdfobj%s (%s) <<%s>>}",on,stream,os)) + elseif os then + texsprint(format("\\special{pdf:obj @mplibpdfobj%s %s}",on,os)) + else + texsprint(format("\\special{pdf:obj @mplibpdfobj%s <<>>}",on)) + end pdfetcs.cnt = on + 1 end - pdfobjs[os] = on + if key then + pdfobjs[key] = on + end return on,true end - +pdfetcs.resfmt = pdfmode and "%s 0 R" or "@mplibpdfobj%s" if pdfmode then pdfetcs.getpageres = pdf.getpageresources or function() return pdf.pageresources end local getpageres = pdfetcs.getpageres @@ -2757,11 +3405,20 @@ if pdfmode then end else texsprint { + "\\luamplibatfirstshipout{", "\\special{pdf:obj @MPlibTr<<>>}", "\\special{pdf:obj @MPlibSh<<>>}", "\\special{pdf:obj @MPlibCS<<>>}", - "\\special{pdf:obj @MPlibPt<<>>}", + "\\special{pdf:obj @MPlibPt<<>>}}", } + pdfetcs.resadded = { } + pdfetcs.fallback_update_resources = function (name,res,obj) + texsprint{"\\special{pdf:put ", obj, " <<", res, ">>}"} + if not pdfetcs.resadded[name] then + texsprint{"\\luamplibateveryshipout{\\special{pdf:put @resources <</", name, " ", obj, ">>}}"} + pdfetcs.resadded[name] = obj + end + end end % \end{macrocode} @@ -2774,14 +3431,17 @@ local transparancy_modes = { [0] = "Normal", "Darken", "Lighten", "Difference", "Exclusion", "Hue", "Saturation", "Color", "Luminosity", "Compatible", + normal = "Normal", multiply = "Multiply", screen = "Screen", + overlay = "Overlay", softlight = "SoftLight", hardlight = "HardLight", + colordodge = "ColorDodge", colorburn = "ColorBurn", darken = "Darken", + lighten = "Lighten", difference = "Difference", exclusion = "Exclusion", + hue = "Hue", saturation = "Saturation", color = "Color", + luminosity = "Luminosity", compatible = "Compatible", } - -local function update_tr_res(mode,opaq) - local os = format("<</BM /%s/ca %.3f/CA %.3f/AIS false>>",mode,opaq,opaq) - local on, new = update_pdfobjs(os) +local function add_extgs_resources (on, new) + local key = format("MPlibTr%s", on) if new then - local key = format("MPlibTr%s", on) - local val = format(pdfmode and "%s 0 R" or "@mplibpdfobj%s", on) + local val = format(pdfetcs.resfmt, on) if pdfmanagement then texsprint { "\\csname pdfmanagement_add:nnn\\endcsname{Page/Resources/ExtGState}{", key, "}{", val, "}" @@ -2790,103 +3450,106 @@ local function update_tr_res(mode,opaq) local tr = format("/%s %s", key, val) if is_defined(pdfetcs.pgfextgs) then texsprint { "\\csname ", pdfetcs.pgfextgs, "\\endcsname{", tr, "}" } - elseif pdfmode then - if is_defined"TRP@list" then - texsprint(catat11,{ - [[\if@filesw\immediate\write\@auxout{]], - [[\string\g@addto@macro\string\TRP@list{]], - tr, - [[}}\fi]], - }) - if not get_macro"TRP@list":find(tr) then - texsprint(catat11,[[\global\TRP@reruntrue]]) - end - else - pdfetcs.fallback_update_resources("ExtGState", tr) + elseif is_defined"TRP@list" then + texsprint(catat11,{ + [[\if@filesw\immediate\write\@auxout{]], + [[\string\g@addto@macro\string\TRP@list{]], + tr, + [[}}\fi]], + }) + if not get_macro"TRP@list":find(tr) then + texsprint(catat11,[[\global\TRP@reruntrue]]) end else - texsprint { "\\special{pdf:put @MPlibTr<<", tr, ">>}" } + pdfetcs.fallback_update_resources("ExtGState",tr,"@MPlibTr") end end end - if not pdfmode and not pdfmanagement and not is_defined(pdfetcs.pgfextgs) then - texsprint"\\special{pdf:put @resources <</ExtGState @MPlibTr>>}" - end - return on + return key end - local function do_preobj_TR(object,prescript) if object.postscript == "collect" then return end local opaq = prescript and prescript.tr_transparency - local tron_no if opaq then + local key, on, os, new local mode = prescript.tr_alternative or 1 - mode = transparancy_modes[tonumber(mode)] - tron_no = update_tr_res(mode, opaq) - start_pdf_code() - pdf_literalcode("/MPlibTr%i gs",tron_no) + mode = transparancy_modes[tonumber(mode) or mode:lower()] + if not mode then + mode = prescript.tr_alternative + warn("unsupported blend mode: '%s'", mode) + end + opaq = format("%.3f", opaq) :gsub(decimals,rmzeros) + for i,v in ipairs{ {mode,opaq},{"Normal",1} } do + os = format("<</BM/%s/ca %s/CA %s/AIS false>>",v[1],v[2],v[2]) + on, new = update_pdfobjs(os) + key = add_extgs_resources(on,new) + if i == 1 then + pdf_literalcode("/%s gs",key) + else + return format("/%s gs",key) + end + end end - return tron_no end % \end{macrocode} % -% Shading with |metafun| format. +% Shading with \emph{metafun} format. % \begin{macrocode} local function sh_pdfpageresources(shtype,domain,colorspace,ca,cb,coordinates,steps,fractions) - local fun2fmt,os = "<</FunctionType 2/Domain [%s]/C0 [%s]/C1 [%s]/N 1>>" + for _,v in ipairs{ca,cb} do + for i,vv in ipairs(v) do + for ii,vvv in ipairs(vv) do + v[i][ii] = tonumber(vvv) and format("%.3f",vvv) or vvv + end + end + end + local fun2fmt,os = "<</FunctionType 2/Domain[%s]/C0[%s]/C1[%s]/N 1>>" if steps > 1 then local list,bounds,encode = { },{ },{ } for i=1,steps do if i < steps then - bounds[i] = fractions[i] or 1 + bounds[i] = format("%.3f", fractions[i] or 1) end encode[2*i-1] = 0 encode[2*i] = 1 os = fun2fmt:format(domain,tableconcat(ca[i],' '),tableconcat(cb[i],' ')) - list[i] = format(pdfmode and "%s 0 R" or "@mplibpdfobj%s",update_pdfobjs(os)) + :gsub(decimals,rmzeros) + list[i] = format(pdfetcs.resfmt, update_pdfobjs(os)) end os = tableconcat { "<</FunctionType 3", - format("/Bounds [%s]", tableconcat(bounds,' ')), - format("/Encode [%s]", tableconcat(encode,' ')), - format("/Functions [%s]", tableconcat(list, ' ')), - format("/Domain [%s]>>", domain), - } + format("/Bounds[%s]", tableconcat(bounds,' ')), + format("/Encode[%s]", tableconcat(encode,' ')), + format("/Functions[%s]", tableconcat(list, ' ')), + format("/Domain[%s]>>", domain), + } :gsub(decimals,rmzeros) else os = fun2fmt:format(domain,tableconcat(ca[1],' '),tableconcat(cb[1],' ')) + :gsub(decimals,rmzeros) end - local objref = format(pdfmode and "%s 0 R" or "@mplibpdfobj%s",update_pdfobjs(os)) + local objref = format(pdfetcs.resfmt, update_pdfobjs(os)) os = tableconcat { format("<</ShadingType %i", shtype), format("/ColorSpace %s", colorspace), format("/Function %s", objref), - format("/Coords [%s]", coordinates), - "/Extend [true true]/AntiAlias true>>", - } + format("/Coords[%s]", coordinates), + "/Extend[true true]/AntiAlias true>>", + } :gsub(decimals,rmzeros) local on, new = update_pdfobjs(os) if new then - local key = format("MPlibSh%s", on) - local val = format(pdfmode and "%s 0 R" or "@mplibpdfobj%s", on) + local key, val = format("MPlibSh%s", on), format(pdfetcs.resfmt, on) if pdfmanagement then texsprint { "\\csname pdfmanagement_add:nnn\\endcsname{Page/Resources/Shading}{", key, "}{", val, "}" } else local res = format("/%s %s", key, val) - if pdfmode then - pdfetcs.fallback_update_resources("Shading", res) - else - texsprint { "\\special{pdf:put @MPlibSh<<", res, ">>}" } - end + pdfetcs.fallback_update_resources("Shading",res,"@MPlibSh") end end - if not pdfmode and not pdfmanagement then - texsprint"\\special{pdf:put @resources <</Shading @MPlibSh>>}" - end return on end - local function color_normalize(ca,cb) if #cb == 1 then if #ca == 4 then @@ -2898,7 +3561,6 @@ local function color_normalize(ca,cb) cb[1], cb[2], cb[3], cb[4] = 1-cb[1], 1-cb[2], 1-cb[3], 0 end end - pdfetcs.clrspcs = setmetatable({ }, { __index = function(t,names) run_tex_code({ [[\color_model_new:nnn]], @@ -2910,7 +3572,6 @@ pdfetcs.clrspcs = setmetatable({ }, { __index = function(t,names) t[names] = colorspace return colorspace end }) - local function do_preobj_SH(object,prescript) local shade_no local sh_type = prescript and prescript.sh_type @@ -2918,14 +3579,14 @@ local function do_preobj_SH(object,prescript) return else local domain = prescript.sh_domain or "0 1" - local centera = prescript.sh_center_a or "0 0"; centera = centera:explode() - local centerb = prescript.sh_center_b or "0 0"; centerb = centerb:explode() + local centera = (prescript.sh_center_a or "0 0"):explode() + local centerb = (prescript.sh_center_b or "0 0"):explode() local transform = prescript.sh_transform == "yes" local sx,sy,sr,dx,dy = 1,1,1,0,0 if transform then - local first = prescript.sh_first or "0 0"; first = first:explode() - local setx = prescript.sh_set_x or "0 0"; setx = setx:explode() - local sety = prescript.sh_set_y or "0 0"; sety = sety:explode() + local first = (prescript.sh_first or "0 0"):explode() + local setx = (prescript.sh_set_x or "0 0"):explode() + local sety = (prescript.sh_set_y or "0 0"):explode() local x,y = tonumber(setx[1]) or 0, tonumber(sety[1]) or 0 if x ~= 0 and y ~= 0 then local path = object.path @@ -2947,15 +3608,15 @@ local function do_preobj_SH(object,prescript) end end local ca, cb, colorspace, steps, fractions - ca = { prescript.sh_color_a_1 or prescript.sh_color_a or {0} } - cb = { prescript.sh_color_b_1 or prescript.sh_color_b or {1} } + ca = { (prescript.sh_color_a_1 or prescript.sh_color_a or "0"):explode":" } + cb = { (prescript.sh_color_b_1 or prescript.sh_color_b or "1"):explode":" } steps = tonumber(prescript.sh_step) or 1 if steps > 1 then fractions = { prescript.sh_fraction_1 or 0 } for i=2,steps do fractions[i] = prescript[format("sh_fraction_%i",i)] or (i/steps) - ca[i] = prescript[format("sh_color_a_%i",i)] or {0} - cb[i] = prescript[format("sh_color_b_%i",i)] or {1} + ca[i] = (prescript[format("sh_color_a_%i",i)] or "0"):explode":" + cb[i] = (prescript[format("sh_color_b_%i",i)] or "1"):explode":" end end if prescript.mplib_spotcolor then @@ -2964,15 +3625,14 @@ local function do_preobj_SH(object,prescript) local script = object.prescript:explode"\13+" for i=#script,1,-1 do if script[i]:find"mplib_spotcolor" then - local name, value - objref, name = script[i]:match"=(.-):(.+)" - value = script[i+1]:match"=(.+)" + local t, name, value = script[i]:explode"="[2]:explode":" + value, objref, name = t[1], t[2], t[3] if not names[name] then pos = pos+1 names[name] = pos names[#names+1] = name end - local t = { } + t = { } for j=1,names[name] do t[#t+1] = 0 end t[#t+1] = value tableinsert(#ca == #cb and ca or cb, t) @@ -3023,53 +3683,97 @@ local function do_preobj_SH(object,prescript) else err"unknown shading type" end - pdf_literalcode("q /Pattern cs") end return shade_no end % \end{macrocode} % -% Patterns +% Shading Patterns: much similar to the metafun's shade, +% but we can apply shading to textual pictures as well as paths. % \begin{macrocode} -pdfetcs.patterns = { } -local patterns = pdfetcs.patterns -function luamplib.registerpattern ( boxid, name, opts ) - local box = texgetbox(boxid) - local wd = format("%.3f",box.width/factor) - local hd = format("%.3f",(box.height+box.depth)/factor) - info("w/h/d of '%s': %s %s 0.0", name, wd, hd) - if opts.xstep == 0 then opts.xstep = nil end - if opts.ystep == 0 then opts.ystep = nil end - if opts.colored == nil then - opts.colored = opts.coloured - if opts.colored == nil then - opts.colored = true +local function add_pattern_resources (key, val) + if pdfmanagement then + texsprint { + "\\csname pdfmanagement_add:nnn\\endcsname{Page/Resources/Pattern}{", key, "}{", val, "}" + } + else + local res = format("/%s %s", key, val) + if is_defined(pdfetcs.pgfpattern) then + texsprint { "\\csname ", pdfetcs.pgfpattern, "\\endcsname{", res, "}" } + else + pdfetcs.fallback_update_resources("Pattern",res,"@MPlibPt") end end - if type(opts.matrix) == "table" then opts.matrix = tableconcat(opts.matrix," ") end - if type(opts.bbox) == "table" then opts.bbox = tableconcat(opts.bbox," ") end - if opts.matrix and opts.matrix:find"%a" then - local data = format("mplibtransformmatrix(%s);",opts.matrix) - process(data,"@mplibtransformmatrix") - local t = luamplib.transformmatrix - opts.matrix = format("%s %s %s %s", t[1], t[2], t[3], t[4]) - opts.xshift = opts.xshift or t[5] - opts.yshift = opts.yshift or t[6] +end +function luamplib.dolatelua (on, os) + local h, v = pdf.getpos() + h = format("%f", h/factor) :gsub(decimals,rmzeros) + v = format("%f", v/factor) :gsub(decimals,rmzeros) + if pdfmode then + pdf.obj(on, format("<<%s/Matrix[1 0 0 1 %s %s]>>", os, h, v)) + pdf.refobj(on) + else + local shift = os:explode() + if tonumber(h) ~= tonumber(shift[1]) or tonumber(v) ~= tonumber(shift[2]) then + warn([[Add 'withprescript "sh_matrixshift=%s %s"' to the picture shading]], h, v) + end + end +end +local function do_preobj_shading (object, prescript) + if not prescript or not prescript.sh_operand_type then return end + local on = do_preobj_SH(object, prescript) + local os = format("/PatternType 2/Shading %s", format(pdfetcs.resfmt, on)) + on = update_pdfobjs() + if pdfmode then + put2output(tableconcat{ "\\latelua{ luamplib.dolatelua(",on,",[[",os,"]]) }" }) + else +% \end{macrocode} +% Why |@xpos| |@ypos| do not work properly???\\ +% Anyway, this seems to be needed for proper functioning: +%\begin{verbatim} +% \pagewidth=\paperwidth +% \pageheight=\paperheight +% \special{papersize=\the\paperwidth,\the\paperheight} +%\end{verbatim} +% \begin{macrocode} + if is_defined"RecordProperties" then + put2output(tableconcat{ + "\\csname tex_savepos:D\\endcsname\\RecordProperties{luamplib/getpos/",on,"}{xpos,ypos}\z + \\special{pdf:put @mplibpdfobj",on," <<",os,"/Matrix[1 0 0 1 \z + \\csname dim_to_decimal_in_bp:n\\endcsname{\\RefProperty{luamplib/getpos/",on,"}{xpos}sp} \z + \\csname dim_to_decimal_in_bp:n\\endcsname{\\RefProperty{luamplib/getpos/",on,"}{ypos}sp}\z + ]>>}" + }) + else + local shift = prescript.sh_matrixshift or "0 0" + texsprint{ "\\special{pdf:put @mplibpdfobj",on," <<",os,"/Matrix[1 0 0 1 ",shift,"]>>}" } + put2output(tableconcat{ "\\latelua{ luamplib.dolatelua(",on,",[[",shift,"]]) }" }) + end + end + local key, val = format("MPlibPt%s", on), format(pdfetcs.resfmt, on) + add_pattern_resources(key,val) + pdf_literalcode("/Pattern cs/%s scn", key) +% \end{macrocode} +% To avoid possible double execution, once by Pattern gs, once by Sh operator. +% \begin{macrocode} + prescript.sh_type = nil +end + +% \end{macrocode} +% +% Tiling Patterns +% \begin{macrocode} +pdfetcs.patterns = { } +local function gather_resources (optres) + local t, do_pattern = { }, not optres + local names = {"ExtGState","ColorSpace","Shading"} + if do_pattern then + names[#names+1] = "Pattern" end - local attr = { - "/Type/Pattern", - "/PatternType 1", - format("/PaintType %i", opts.colored and 1 or 2), - "/TilingType 2", - format("/XStep %s", opts.xstep or wd), - format("/YStep %s", opts.ystep or hd), - format("/Matrix [%s %s %s]", opts.matrix or "1 0 0 1", opts.xshift or 0, opts.yshift or 0), - } if pdfmode then - local optres, t = opts.resources or "", { } if pdfmanagement then - for _,v in ipairs{"ExtGState","ColorSpace","Shading"} do + for _,v in ipairs(names) do local pp = get_macro(format("g__pdfdict_/g__pdf_Core/Page/Resources/%s_prop",v)) if pp and pp:find"__prop_pair" then t[#t+1] = format("/%s %s 0 R", v, ltx.pdf.object_id("__pdf/Page/Resources/"..v)) @@ -3078,26 +3782,19 @@ function luamplib.registerpattern ( boxid, name, opts ) else local res = pdfetcs.getpageres() or "" run_tex_code[[\mplibtmptoks\expandafter{\the\pdfvariable pageresources}]] - res = (res .. texgettoks'mplibtmptoks'):explode() - res = tableconcat(res," "):explode"/+" + res = res .. texgettoks'mplibtmptoks' + if do_pattern then return res end + res = res:explode"/+" for _,v in ipairs(res) do + v = v:match"^%s*(.-)%s*$" if not v:find"Pattern" and not optres:find(v) then t[#t+1] = "/" .. v end end end - optres = optres .. tableconcat(t) - if opts.bbox then - attr[#attr+1] = format("/BBox [%s]", opts.bbox) - end - local index = tex.saveboxresource(boxid, tableconcat(attr), optres, true, opts.bbox and 4 or 1) - patterns[name] = { id = index, colored = opts.colored } else - local objname = "@mplibpattern"..name - local metric = format("bbox %s", opts.bbox or format("0 0 %s %s",wd,hd)) - local optres, t = opts.resources or "", { } if pdfmanagement then - for _,v in ipairs{"ExtGState","ColorSpace","Shading"} do + for _,v in ipairs(names) do local pp = get_macro(format("g__pdfdict_/g__pdf_Core/Page/Resources/%s_prop",v)) if pp and pp:find"__prop_pair" then run_tex_code { @@ -3113,31 +3810,87 @@ function luamplib.registerpattern ( boxid, name, opts ) "\\mplibtmptoks\\expanded{{", "\\ifpgf@sys@pdf@extgs@exists /ExtGState @pgfextgs\\fi", "\\ifpgf@sys@pdf@colorspaces@exists /ColorSpace @pgfcolorspaces\\fi", + do_pattern and "\\ifpgf@sys@pdf@patterns@exists /Pattern @pgfpatterns \\fi" or "", "}}", }, catat11) t[#t+1] = texgettoks'mplibtmptoks' + else + for _,v in ipairs(names) do + local vv = pdfetcs.resadded[v] + if vv then + t[#t+1] = format("/%s %s", v, vv) + end + end + end + end + return tableconcat(t) +end +function luamplib.registerpattern ( boxid, name, opts ) + local box = texgetbox(boxid) + local wd = format("%.3f",box.width/factor) + local hd = format("%.3f",(box.height+box.depth)/factor) + info("w/h/d of pattern '%s': %s 0", name, format("%s %s",wd, hd):gsub(decimals,rmzeros)) + if opts.xstep == 0 then opts.xstep = nil end + if opts.ystep == 0 then opts.ystep = nil end + if opts.colored == nil then + opts.colored = opts.coloured + if opts.colored == nil then + opts.colored = true end - optres = optres .. tableconcat(t) + end + if type(opts.matrix) == "table" then opts.matrix = tableconcat(opts.matrix," ") end + if type(opts.bbox) == "table" then opts.bbox = tableconcat(opts.bbox," ") end + if opts.matrix and opts.matrix:find"%a" then + local data = format("mplibtransformmatrix(%s);",opts.matrix) + process(data,"@mplibtransformmatrix") + local t = luamplib.transformmatrix + opts.matrix = format("%f %f %f %f", t[1], t[2], t[3], t[4]) + opts.xshift = opts.xshift or format("%f",t[5]) + opts.yshift = opts.yshift or format("%f",t[6]) + end + local attr = { + "/Type/Pattern", + "/PatternType 1", + format("/PaintType %i", opts.colored and 1 or 2), + "/TilingType 2", + format("/XStep %s", opts.xstep or wd), + format("/YStep %s", opts.ystep or hd), + format("/Matrix[%s %s %s]", opts.matrix or "1 0 0 1", opts.xshift or 0, opts.yshift or 0), + } + local optres = opts.resources or "" + optres = optres .. gather_resources(optres) + local patterns = pdfetcs.patterns + if pdfmode then + if opts.bbox then + attr[#attr+1] = format("/BBox[%s]", opts.bbox) + end + attr = tableconcat(attr) :gsub(decimals,rmzeros) + local index = tex.saveboxresource(boxid, attr, optres, true, opts.bbox and 4 or 1) + patterns[name] = { id = index, colored = opts.colored } + else + local cnt = #patterns + 1 + local objname = "@mplibpattern" .. cnt + local metric = format("bbox %s", opts.bbox or format("0 0 %s %s",wd,hd)) texsprint { - [[\ifvmode\nointerlineskip\fi]], - format([[\hbox to0pt{\vbox to0pt{\hsize=\wd %i\vss\noindent]], boxid), -- force horiz mode? - [[\special{pdf:bcontent}]], - [[\special{pdf:bxobj ]], objname, format(" %s}", metric), - format([[\raise\dp %i\box %i]], boxid, boxid), - format([[\special{pdf:put @resources <<%s>>}]], optres), - [[\special{pdf:exobj <<]], tableconcat(attr), ">>}", - [[\special{pdf:econtent}]], - [[\par}\hss}]], + "\\expandafter\\newbox\\csname luamplib.patternbox.", cnt, "\\endcsname", + "\\global\\setbox\\csname luamplib.patternbox.", cnt, "\\endcsname", + "\\hbox{\\unhbox ", boxid, "}\\luamplibatnextshipout{", + "\\special{pdf:bcontent}", + "\\special{pdf:bxobj ", objname, " ", metric, "}", + "\\raise\\dp\\csname luamplib.patternbox.", cnt, "\\endcsname", + "\\box\\csname luamplib.patternbox.", cnt, "\\endcsname", + "\\special{pdf:put @resources <<", optres, ">>}", + "\\special{pdf:exobj <<", tableconcat(attr), ">>}", + "\\special{pdf:econtent}}", } - patterns[#patterns+1] = objname - patterns[name] = { id = #patterns, colored = opts.colored } + patterns[cnt] = objname + patterns[name] = { id = cnt, colored = opts.colored } end end local function pattern_colorspace (cs) local on, new = update_pdfobjs(format("[/Pattern %s]", cs)) if new then - local key = format("MPlibCS%i",on) - local val = pdfmode and format("%i 0 R",on) or format("@mplibpdfobj%i",on) + local key, val = format("MPlibCS%i",on), format(pdfetcs.resfmt,on) if pdfmanagement then texsprint { "\\csname pdfmanagement_add:nnn\\endcsname{Page/Resources/ColorSpace}{", key, "}{", val, "}" @@ -3146,21 +3899,17 @@ local function pattern_colorspace (cs) local res = format("/%s %s", key, val) if is_defined(pdfetcs.pgfcolorspace) then texsprint { "\\csname ", pdfetcs.pgfcolorspace, "\\endcsname{", res, "}" } - elseif pdfmode then - pdfetcs.fallback_update_resources("ColorSpace", res) else - texsprint { "\\special{pdf:put @MPlibCS<<", res, ">>}" } + pdfetcs.fallback_update_resources("ColorSpace",res,"@MPlibCS") end end end - if not pdfmode and not pdfmanagement and not is_defined(pdfetcs.pgfcolorspace) then - texsprint"\\special{pdf:put @resources <</ColorSpace @MPlibCS>>}" - end return on end local function do_preobj_PAT(object, prescript) local name = prescript and prescript.mplibpattern if not name then return end + local patterns = pdfetcs.patterns local patt = patterns[name] local index = patt and patt.id or err("cannot get pattern object '%s'", name) local key = format("MPlibPt%s",index) @@ -3192,25 +3941,318 @@ local function do_preobj_PAT(object, prescript) end if not patt.done then local val = pdfmode and format("%s 0 R",index) or patterns[index] - if pdfmanagement then - texsprint { - "\\csname pdfmanagement_add:nnn\\endcsname{Page/Resources/Pattern}{", key, "}{", val, "}" - } + add_pattern_resources(key,val) + end + patt.done = true +end + +% \end{macrocode} +% +% Fading +% \begin{macrocode} +pdfetcs.fading = { } +local function do_preobj_FADE (object, prescript) + local fd_type = prescript and prescript.mplibfadetype + local fd_stop = prescript and prescript.mplibfadestate + if not fd_type then + return fd_stop -- returns "stop" (if picture) or nil + end + local bbox = prescript.mplibfadebbox:explode":" + local dx, dy = -bbox[1], -bbox[2] + local vec = prescript.mplibfadevector; vec = vec and vec:explode":" + if not vec then + if fd_type == "linear" then + vec = {bbox[1], bbox[2], bbox[3], bbox[2]} -- left to right else - local res = format("/%s %s", key, val) - if is_defined(pdfetcs.pgfpattern) then - texsprint { "\\csname ", pdfetcs.pgfpattern, "\\endcsname{", res, "}" } - elseif pdfmode then - pdfetcs.fallback_update_resources("Pattern", res) - else - texsprint { "\\special{pdf:put @MPlibPt<<", res, ">>}" } - end + local centerx, centery = (bbox[1]+bbox[3])/2, (bbox[2]+bbox[4])/2 + vec = {centerx, centery, centerx, centery} -- center for both circles end end - if not pdfmode and not pdfmanagement and not is_defined(pdfetcs.pgfpattern) then - texsprint"\\special{pdf:put @resources <</Pattern @MPlibPt>>}" + local coords = { vec[1]+dx, vec[2]+dy, vec[3]+dx, vec[4]+dy } + if fd_type == "linear" then + coords = format("%f %f %f %f", tableunpack(coords)) + elseif fd_type == "circular" then + local width, height = bbox[3]-bbox[1], bbox[4]-bbox[2] + local radius = (prescript.mplibfaderadius or "0:"..math.sqrt(width^2+height^2)/2):explode":" + tableinsert(coords, 3, radius[1]) + tableinsert(coords, radius[2]) + coords = format("%f %f %f %f %f %f", tableunpack(coords)) + else + err("unknown fading method '%s'", fd_type) + end + fd_type = fd_type == "linear" and 2 or 3 + local opaq = (prescript.mplibfadeopacity or "1:0"):explode":" + local on, os, new + on = sh_pdfpageresources(fd_type, "0 1", "/DeviceGray", {{opaq[1]}}, {{opaq[2]}}, coords, 1) + os = format("<</PatternType 2/Shading %s>>", format(pdfetcs.resfmt, on)) + on = update_pdfobjs(os) + bbox = format("0 0 %f %f", bbox[3]+dx, bbox[4]+dy) + local streamtext = format("q /Pattern cs/MPlibFd%s scn %s re f Q", on, bbox) + :gsub(decimals,rmzeros) + os = format("<</Pattern<</MPlibFd%s %s>>>>", on, format(pdfetcs.resfmt, on)) + on = update_pdfobjs(os) + local resources = format(pdfetcs.resfmt, on) + on = update_pdfobjs"<</S/Transparency/CS/DeviceGray>>" + local attr = tableconcat{ + "/Subtype/Form", + "/BBox[", bbox, "]", + "/Matrix[1 0 0 1 ", format("%f %f", -dx,-dy), "]", + "/Resources ", resources, + "/Group ", format(pdfetcs.resfmt, on), + } :gsub(decimals,rmzeros) + on = update_pdfobjs(attr, streamtext) + os = "<</SMask<</S/Luminosity/G " .. format(pdfetcs.resfmt, on) .. ">>>>" + on, new = update_pdfobjs(os) + local key = add_extgs_resources(on,new) + start_pdf_code() + pdf_literalcode("/%s gs", key) + if fd_stop then return "standalone" end + return "start" +end + +% \end{macrocode} +% +% Transparency Group +% \begin{macrocode} +pdfetcs.tr_group = { shifts = { } } +luamplib.trgroupshifts = pdfetcs.tr_group.shifts +local function do_preobj_GRP (object, prescript) + local grstate = prescript and prescript.gr_state + if not grstate then return end + local trgroup = pdfetcs.tr_group + if grstate == "start" then + trgroup.name = prescript.mplibgroupname or "lastmplibgroup" + trgroup.isolated, trgroup.knockout = false, false + for _,v in ipairs(prescript.gr_type:explode",+") do + trgroup[v] = true + end + trgroup.bbox = prescript.mplibgroupbbox:explode":" + put2output[[\begingroup\setbox\mplibscratchbox\hbox\bgroup]] + elseif grstate == "stop" then + local llx,lly,urx,ury = tableunpack(trgroup.bbox) + put2output(tableconcat{ + "\\egroup", + format("\\wd\\mplibscratchbox %fbp", urx-llx), + format("\\ht\\mplibscratchbox %fbp", ury-lly), + "\\dp\\mplibscratchbox 0pt", + }) + local grattr = format("/Group<</S/Transparency/I %s/K %s>>",trgroup.isolated,trgroup.knockout) + local res = gather_resources() + local bbox = format("%f %f %f %f", llx,lly,urx,ury) :gsub(decimals,rmzeros) + if pdfmode then + put2output(tableconcat{ + "\\saveboxresource type 2 attr{/Type/XObject/Subtype/Form/FormType 1", + "/BBox[", bbox, "]", grattr, "} resources{", res, "}\\mplibscratchbox", + "\\luamplibtagasgroupbegin", + [[\setbox\mplibscratchbox\hbox{\useboxresource\lastsavedboxresourceindex}]], + [[\wd\mplibscratchbox 0pt\ht\mplibscratchbox 0pt\dp\mplibscratchbox 0pt]], + [[\box\mplibscratchbox]], + "\\luamplibtagasgroupend", + "\\endgroup", + "\\expandafter\\xdef\\csname luamplib.group.", trgroup.name, "\\endcsname{", + "\\setbox\\mplibscratchbox\\hbox{\\hskip",-llx,"bp\\raise",-lly,"bp\\hbox{", + "\\useboxresource \\the\\lastsavedboxresourceindex", + "}}\\wd\\mplibscratchbox",urx-llx,"bp\\ht\\mplibscratchbox",ury-lly,"bp", + "\\box\\mplibscratchbox}", + }) + else + trgroup.cnt = (trgroup.cnt or 0) + 1 + local objname = format("@mplibtrgr%s", trgroup.cnt) + put2output(tableconcat{ + "\\special{pdf:bxobj ", objname, " bbox ", bbox, "}", + "\\unhbox\\mplibscratchbox", + "\\special{pdf:put @resources <<", res, ">>}", + "\\special{pdf:exobj <<", grattr, ">>}", + "\\special{pdf:uxobj ", objname, "}", + "\\endgroup", + }) + token.set_macro("luamplib.group."..trgroup.name, tableconcat{ + "\\setbox\\mplibscratchbox\\hbox{\\hskip",-llx,"bp\\raise",-lly,"bp\\hbox{", + "\\special{pdf:uxobj ", objname, "}", + "}}\\wd\\mplibscratchbox",urx-llx,"bp\\ht\\mplibscratchbox",ury-lly,"bp", + "\\box\\mplibscratchbox", + }, "global") + end + trgroup.shifts[trgroup.name] = { llx, lly } + end + return grstate +end +function luamplib.registergroup (boxid, name, opts) + local box = texgetbox(boxid) + local wd, ht, dp = node.getwhd(box) + local res = (opts.resources or "") .. gather_resources() + local attr = { "/Type/XObject/Subtype/Form/FormType 1" } + if type(opts.matrix) == "table" then opts.matrix = tableconcat(opts.matrix," ") end + if type(opts.bbox) == "table" then opts.bbox = tableconcat(opts.bbox," ") end + if opts.matrix and opts.matrix:find"%a" then + local data = format("mplibtransformmatrix(%s);",opts.matrix) + process(data,"@mplibtransformmatrix") + opts.matrix = format("%f %f %f %f %f %f",tableunpack(luamplib.transformmatrix)) + end + local grtype = 3 + if opts.bbox then + attr[#attr+1] = format("/BBox[%s]", opts.bbox) + grtype = 2 + end + if opts.matrix then + attr[#attr+1] = format("/Matrix[%s]", opts.matrix) + grtype = opts.bbox and 4 or 1 + end + if opts.asgroup then + local t = { isolated = false, knockout = false } + for _,v in ipairs(opts.asgroup:explode",+") do t[v] = true end + attr[#attr+1] = format("/Group<</S/Transparency/I %s/K %s>>", t.isolated, t.knockout) + end + local trgroup = pdfetcs.tr_group + trgroup.shifts[name] = { get_macro'MPllx', get_macro'MPlly' } + local whd + if pdfmode then + attr = tableconcat(attr) :gsub(decimals,rmzeros) + local index = tex.saveboxresource(boxid, attr, res, true, grtype) + token.set_macro("luamplib.group."..name, tableconcat{ + "\\useboxresource ", index, + }, "global") + whd = format("%.3f %.3f 0", wd/factor, (ht+dp)/factor) :gsub(decimals,rmzeros) + else + trgroup.cnt = (trgroup.cnt or 0) + 1 + local objname = format("@mplibtrgr%s", trgroup.cnt) + texsprint { + "\\expandafter\\newbox\\csname luamplib.groupbox.", trgroup.cnt, "\\endcsname", + "\\global\\setbox\\csname luamplib.groupbox.", trgroup.cnt, "\\endcsname", + "\\hbox{\\unhbox ", boxid, "}\\luamplibatnextshipout{", + "\\special{pdf:bcontent}", + "\\special{pdf:bxobj ", objname, " width ", wd, "sp height ", ht, "sp depth ", dp, "sp}", + "\\unhbox\\csname luamplib.groupbox.", trgroup.cnt, "\\endcsname", + "\\special{pdf:put @resources <<", res, ">>}", + "\\special{pdf:exobj <<", tableconcat(attr), ">>}", + "\\special{pdf:econtent}}", + } + token.set_macro("luamplib.group."..name, tableconcat{ + "\\setbox\\mplibscratchbox\\hbox{\\special{pdf:uxobj ", objname, "}}", + "\\wd\\mplibscratchbox ", wd, "sp", + "\\ht\\mplibscratchbox ", ht, "sp", + "\\dp\\mplibscratchbox ", dp, "sp", + "\\box\\mplibscratchbox", + }, "global") + whd = format("%.3f %.3f %.3f", wd/factor, ht/factor, dp/factor) :gsub(decimals,rmzeros) + end + info("w/h/d of group '%s': %s", name, whd) +end + +local function stop_special_effects(fade,opaq,over) + if fade then -- fading + stop_pdf_code() + end + if opaq then -- opacity + pdf_literalcode(opaq) + end + if over then -- color + put2output"\\special{pdf:ec}" + end +end + +% \end{macrocode} +% +% Codes below for inserting PDF lieterals are mostly from ConTeXt general, +% with small changes when needed. +% \begin{macrocode} +local function getobjects(result,figure,f) + return figure:objects() +end + +function luamplib.convert (result, flusher) + luamplib.flush(result, flusher) + return true -- done +end + +local function pdf_textfigure(font,size,text,width,height,depth) + text = text:gsub(".",function(c) + return format("\\hbox{\\char%i}",string.byte(c)) -- kerning happens in metapost : false + end) + put2output("\\mplibtextext{%s}{%f}{%s}{%s}{%s}",font,size,text,0,0) +end + +local bend_tolerance = 131/65536 + +local rx, sx, sy, ry, tx, ty, divider = 1, 0, 0, 1, 0, 0, 1 + +local function pen_characteristics(object) + local t = mplib.pen_info(object) + rx, ry, sx, sy, tx, ty = t.rx, t.ry, t.sx, t.sy, t.tx, t.ty + divider = sx*sy - rx*ry + return not (sx==1 and rx==0 and ry==0 and sy==1 and tx==0 and ty==0), t.width +end + +local function concat(px, py) -- no tx, ty here + return (sy*px-ry*py)/divider,(sx*py-rx*px)/divider +end + +local function curved(ith,pth) + local d = pth.left_x - ith.right_x + if abs(ith.right_x - ith.x_coord - d) <= bend_tolerance and abs(pth.x_coord - pth.left_x - d) <= bend_tolerance then + d = pth.left_y - ith.right_y + if abs(ith.right_y - ith.y_coord - d) <= bend_tolerance and abs(pth.y_coord - pth.left_y - d) <= bend_tolerance then + return false + end + end + return true +end + +local function flushnormalpath(path,open) + local pth, ith + for i=1,#path do + pth = path[i] + if not ith then + pdf_literalcode("%f %f m",pth.x_coord,pth.y_coord) + elseif curved(ith,pth) then + pdf_literalcode("%f %f %f %f %f %f c",ith.right_x,ith.right_y,pth.left_x,pth.left_y,pth.x_coord,pth.y_coord) + else + pdf_literalcode("%f %f l",pth.x_coord,pth.y_coord) + end + ith = pth + end + if not open then + local one = path[1] + if curved(pth,one) then + pdf_literalcode("%f %f %f %f %f %f c",pth.right_x,pth.right_y,one.left_x,one.left_y,one.x_coord,one.y_coord ) + else + pdf_literalcode("%f %f l",one.x_coord,one.y_coord) + end + elseif #path == 1 then -- special case .. draw point + local one = path[1] + pdf_literalcode("%f %f l",one.x_coord,one.y_coord) + end +end + +local function flushconcatpath(path,open) + pdf_literalcode("%f %f %f %f %f %f cm", sx, rx, ry, sy, tx ,ty) + local pth, ith + for i=1,#path do + pth = path[i] + if not ith then + pdf_literalcode("%f %f m",concat(pth.x_coord,pth.y_coord)) + elseif curved(ith,pth) then + local a, b = concat(ith.right_x,ith.right_y) + local c, d = concat(pth.left_x,pth.left_y) + pdf_literalcode("%f %f %f %f %f %f c",a,b,c,d,concat(pth.x_coord, pth.y_coord)) + else + pdf_literalcode("%f %f l",concat(pth.x_coord, pth.y_coord)) + end + ith = pth + end + if not open then + local one = path[1] + if curved(pth,one) then + local a, b = concat(pth.right_x,pth.right_y) + local c, d = concat(one.left_x,one.left_y) + pdf_literalcode("%f %f %f %f %f %f c",a,b,c,d,concat(one.x_coord, one.y_coord)) + else + pdf_literalcode("%f %f l",concat(one.x_coord,one.y_coord)) + end + elseif #path == 1 then -- special case .. draw point + local one = path[1] + pdf_literalcode("%f %f l",concat(one.x_coord,one.y_coord)) end - patt.done = true end % \end{macrocode} @@ -3234,11 +4276,11 @@ function luamplib.flush (result,flusher) % luamplib silently ignores this invalid figure for those % that do not contain |beginfig ... endfig|. (issue \#70) % Original code of ConTeXt general was: -% \begin{verbatim} +%\begin{verbatim} % -- invalid % pdf_startfigure(fignum,0,0,0,0) % pdf_stopfigure() -% \end{verbatim} +%\end{verbatim} % \begin{macrocode} else % \end{macrocode} @@ -3256,13 +4298,17 @@ function luamplib.flush (result,flusher) local object = objects[o] local objecttype = object.type % \end{macrocode} -% The following 6 lines are part of |btex...etex| patch. +% The following 10 lines are part of |btex...etex| patch. % Again, colors are processed at this stage. % \begin{macrocode} local prescript = object.prescript prescript = prescript and script2table(prescript) -- prescript is now a table local cr_over = do_preobj_CR(object,prescript) -- color local tr_opaq = do_preobj_TR(object,prescript) -- opacity + local fading_ = do_preobj_FADE(object,prescript) -- fading + local trgroup = do_preobj_GRP(object,prescript) -- transparency group + local pattern_ = do_preobj_PAT(object,prescript) -- tiling pattern + local shading_ = do_preobj_shading(object,prescript) -- shading pattern if prescript and prescript.mplibtexboxid then put_tex_boxes(object,prescript) elseif objecttype == "start_bounds" or objecttype == "stop_bounds" then --skip @@ -3288,7 +4334,7 @@ function luamplib.flush (result,flusher) pdf_literalcode("%f %f %f %f %f %f cm",ot[3],ot[4],ot[5],ot[6],ot[1],ot[2]) pdf_textfigure(object.font,object.dsize,object.text,object.width,object.height,object.depth) stop_pdf_code() - else + elseif not trgroup and fading_ ~= "stop" then local evenodd, collect, both = false, false, false local postscript = object.postscript if not object.istext then @@ -3314,10 +4360,7 @@ function luamplib.flush (result,flusher) else % \end{macrocode} % Removed from ConTeXt general: color stuff. -% Added instead : shading stuff % \begin{macrocode} - local shade_no = do_preobj_SH(object,prescript) -- shading - local pattern_ = do_preobj_PAT(object,prescript) -- pattern local ml = object.miterlimit if ml and ml ~= miterlimit then miterlimit = ml @@ -3359,6 +4402,14 @@ function luamplib.flush (result,flusher) objecttype = 'fill' end end +% \end{macrocode} +% Added : shading +% \begin{macrocode} + local shade_no = do_preobj_SH(object,prescript) -- shading + if shade_no then + pdf_literalcode"q /Pattern cs" + objecttype = false + end if transformed then start_pdf_code() end @@ -3379,27 +4430,25 @@ function luamplib.flush (result,flusher) else flushnormalpath(path,open) end -% \end{macrocode} -% Shading seems to conflict with these ops -% \begin{macrocode} - if not shade_no then -- conflict with shading - if objecttype == "fill" then - pdf_literalcode(evenodd and "h f*" or "h f") - elseif objecttype == "outline" then - if both then - pdf_literalcode(evenodd and "h B*" or "h B") - else - pdf_literalcode(open and "S" or "h S") - end - elseif objecttype == "both" then + if objecttype == "fill" then + pdf_literalcode(evenodd and "h f*" or "h f") + elseif objecttype == "outline" then + if both then pdf_literalcode(evenodd and "h B*" or "h B") + else + pdf_literalcode(open and "S" or "h S") end + elseif objecttype == "both" then + pdf_literalcode(evenodd and "h B*" or "h B") end end if transformed then stop_pdf_code() end local path = object.htap +% \end{macrocode} +% How can we generate an |htap| object? Please let us know if you have succeeded. +% \begin{macrocode} if path then if transformed then start_pdf_code() @@ -3433,18 +4482,29 @@ function luamplib.flush (result,flusher) end end % \end{macrocode} -% Added to ConTeXt general: post-object color and shading stuff. +% Added to ConTeXt general: post-object colors and shading stuff. +% We should beware the |q ... Q| scope. % \begin{macrocode} if shade_no then -- shading - pdf_literalcode("W n /MPlibSh%s sh Q",shade_no) + pdf_literalcode("W%s n /MPlibSh%s sh Q",evenodd and "*" or "",shade_no) end end end - if tr_opaq then -- opacity - stop_pdf_code() + if fading_ == "start" then + pdfetcs.fading.specialeffects = {fading_, tr_opaq, cr_over} + elseif trgroup == "start" then + pdfetcs.tr_group.specialeffects = {fading_, tr_opaq, cr_over} + elseif fading_ == "stop" then + local se = pdfetcs.fading.specialeffects + if se then stop_special_effects(se[1], se[2], se[3]) end + elseif trgroup == "stop" then + local se = pdfetcs.tr_group.specialeffects + if se then stop_special_effects(se[1], se[2], se[3]) end + else + stop_special_effects(fading_, tr_opaq, cr_over) end - if cr_over then -- color - put2output"\\special{pdf:ec}" + if fading_ or trgroup then -- extgs resetted + miterlimit, linecap, linejoin, dashed = -1, -1, -1, false end end end @@ -3497,15 +4557,34 @@ end % First we need to load some packages. % % \begin{macrocode} -\bgroup\expandafter\expandafter\expandafter\egroup -\expandafter\ifx\csname selectfont\endcsname\relax - \input ltluatex -\else +\ifcsname ProvidesPackage\endcsname +% \end{macrocode} +% We need \LaTeX\ 2024-06-01 as we use |ltx.pdf.object_id| when pdfmanagement is loaded. +% But as \pkg{fp} package does not accept an option, we do not append the date option. +% \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{luamplib} - [2024/07/03 v2.32.4 mplib package for LuaTeX] - \ifx\newluafunction\@undefined + [2025/02/06 v2.37.0 mplib package for LuaTeX] +\fi +\ifdefined\newluafunction\else \input ltluatex +\fi +% \end{macrocode} +% +% In DVI mode, a new XObject (mppattern, mplibgroup) must be encapsulated in an \cs{hbox}. +% But this should not affect typesetting. So we use Hook mechanism provided by \LaTeX\ kernel. +% In Plain, \pkg{atbegshi.sty} is loaded. +% \begin{macrocode} +\ifnum\outputmode=0 + \ifdefined\AddToHookNext + \def\luamplibatnextshipout{\AddToHookNext{shipout/background}} + \def\luamplibatfirstshipout{\AddToHook{shipout/firstpage}} + \def\luamplibateveryshipout{\AddToHook{shipout/background}} + \else + \input atbegshi.sty + \def\luamplibatnextshipout#1{\AtBeginShipoutNext{\AtBeginShipoutAddToBox{#1}}} + \let\luamplibatfirstshipout\AtBeginShipoutFirst + \def\luamplibateveryshipout#1{\AtBeginShipout{\AtBeginShipoutAddToBox{#1}}} \fi \fi % \end{macrocode} @@ -3525,7 +4604,7 @@ end \fi % \end{macrocode} % -% Set the format for metapost. +% Set the format for \metapost. % \begin{macrocode} \def\mplibsetformat#1{\directlua{luamplib.setformat("#1")}} % \end{macrocode} @@ -3567,6 +4646,46 @@ end \def\mplibputtextbox#1{\vbox to 0pt{\vss\hbox to 0pt{\raise\dp#1\copy#1\hss}}} % \end{macrocode} % +% use Transparency Group +% \begin{macrocode} +\protected\def\usemplibgroup#1#{\usemplibgroupmain} +\def\usemplibgroupmain#1{% + \mplibstarttousemplibgroup + \csname luamplib.group.#1\endcsname + \mplibstoptousemplibgroup +} +\def\mplibstarttousemplibgroup{\prependtomplibbox\hbox dir TLT\bgroup} +\def\mplibstoptousemplibgroup{\egroup} +\protected\def\mplibgroup#1{% + \begingroup + \def\MPllx{0}\def\MPlly{0}% + \def\mplibgroupname{#1}% + \mplibgroupgetnexttok +} +\def\mplibgroupgetnexttok{\futurelet\nexttok\mplibgroupbranch} +\def\mplibgroupskipspace{\afterassignment\mplibgroupgetnexttok\let\nexttok= } +\def\mplibgroupbranch{% + \ifx [\nexttok + \expandafter\mplibgroupopts + \else + \ifx\mplibsptoken\nexttok + \expandafter\expandafter\expandafter\mplibgroupskipspace + \else + \let\mplibgroupoptions\empty + \expandafter\expandafter\expandafter\mplibgroupmain + \fi + \fi +} +\def\mplibgroupopts[#1]{\def\mplibgroupoptions{#1}\mplibgroupmain} +\def\mplibgroupmain{\setbox\mplibscratchbox\hbox\bgroup\ignorespaces} +\protected\def\endmplibgroup{\egroup + \directlua{ luamplib.registergroup( + \the\mplibscratchbox, '\mplibgroupname', {\mplibgroupoptions} + )}% + \endgroup +} +% \end{macrocode} +% % Patterns % \begin{macrocode} {\def\:{\global\let\mplibsptoken= } \: } @@ -3605,7 +4724,7 @@ end } % \end{macrocode} % -% simple way to use mplib: +% simple way to use \mplib: % |\mpfig draw fullcircle scaled 10; \endmpfig| % \begin{macrocode} \def\mpfiginstancename{@mpfig} @@ -3617,9 +4736,14 @@ end \ifx *\nexttok \expandafter\mplibprempfig \else - \expandafter\mplibmainmpfig + \ifx [\nexttok + \expandafter\expandafter\expandafter\mplibgobbleoptsmpfig + \else + \expandafter\expandafter\expandafter\mplibmainmpfig + \fi \fi } +\def\mplibgobbleoptsmpfig[#1]{\mplibmainmpfig} \def\mplibmainmpfig{% \begingroup \mplibsetupcatcodes @@ -3628,16 +4752,16 @@ end \long\def\mplibdomainmpfig#1\endmpfig{% \endgroup \directlua{ - local legacy = luamplib.legacy_verbatimtex + local legacy = luamplib.legacyverbatimtex local everympfig = luamplib.everymplib["\mpfiginstancename"] or "" local everyendmpfig = luamplib.everyendmplib["\mpfiginstancename"] or "" - luamplib.legacy_verbatimtex = false + luamplib.legacyverbatimtex = false luamplib.everymplib["\mpfiginstancename"] = "" luamplib.everyendmplib["\mpfiginstancename"] = "" luamplib.process_mplibcode( "beginfig(0) "..everympfig.." "..[===[\unexpanded{#1}]===].." "..everyendmpfig.." endfig;", "\mpfiginstancename") - luamplib.legacy_verbatimtex = legacy + luamplib.legacyverbatimtex = legacy luamplib.everymplib["\mpfiginstancename"] = everympfig luamplib.everyendmplib["\mpfiginstancename"] = everyendmpfig }% @@ -3651,14 +4775,14 @@ end \long\def\mplibdoprempfig#1\endmpfig{% \endgroup \directlua{ - local legacy = luamplib.legacy_verbatimtex + local legacy = luamplib.legacyverbatimtex local everympfig = luamplib.everymplib["\mpfiginstancename"] local everyendmpfig = luamplib.everyendmplib["\mpfiginstancename"] - luamplib.legacy_verbatimtex = false + luamplib.legacyverbatimtex = false luamplib.everymplib["\mpfiginstancename"] = "" luamplib.everyendmplib["\mpfiginstancename"] = "" luamplib.process_mplibcode([===[\unexpanded{#1}]===],"\mpfiginstancename") - luamplib.legacy_verbatimtex = legacy + luamplib.legacyverbatimtex = legacy luamplib.everymplib["\mpfiginstancename"] = everympfig luamplib.everyendmplib["\mpfiginstancename"] = everyendmpfig }% @@ -3670,7 +4794,7 @@ end % The Plain-specific stuff. % \begin{macrocode} \unless\ifcsname ver@luamplib.sty\endcsname - \def\mplibcodegetinstancename[#1]{\gdef\currentmpinstancename{#1}\mplibcodeindeed} + \def\mplibcodegetinstancename[#1]{\xdef\currentmpinstancename{#1}\mplibcodeindeed} \protected\def\mplibcode{% \begingroup \futurelet\nexttok\mplibcodebranch @@ -3700,7 +4824,7 @@ end % The \LaTeX-specific part: a new environment. % \begin{macrocode} \newenvironment{mplibcode}[1][]{% - \global\def\currentmpinstancename{#1}% + \xdef\currentmpinstancename{#1}% \mplibtmptoks{}\ltxdomplibcode }{} \def\ltxdomplibcode{% @@ -3737,9 +4861,9 @@ end \def\mpliblegacybehavior#1{\directlua{ local s = string.lower("#1") if s == "enable" or s == "true" or s == "yes" then - luamplib.legacy_verbatimtex = true + luamplib.legacyverbatimtex = true else - luamplib.legacy_verbatimtex = false + luamplib.legacyverbatimtex = false end }} \def\mplibverbatim#1{\directlua{ @@ -3811,14 +4935,13 @@ end % % Allow \TeX\ dimen/color macros. Now |runscript| does the job, % so the following lines are not needed for most cases. -% But the macros will be expanded when they are used in another macro. % \begin{macrocode} \def\mpdim#1{ runscript("luamplibdimen{#1}") } \def\mpcolor#1#{\domplibcolor{#1}} \def\domplibcolor#1#2{ runscript("luamplibcolor{#1{#2}}") } % \end{macrocode} % -% MPLib's number system. Now |binary| has gone away. +% \mplib's number system. Now |binary| has gone away. % \begin{macrocode} \def\mplibnumbersystem#1{\directlua{ local t = "#1" @@ -3883,12 +5006,13 @@ end % \end{macrocode} % % The followings are from ConTeXt general, mostly. -% % We use a dedicated scratchbox. +% +% We use a dedicated scratchbox. % \begin{macrocode} \ifx\mplibscratchbox\undefined \newbox\mplibscratchbox \fi % \end{macrocode} % -% We encapsulate the litterals. +% We encapsulate the literals. % \begin{macrocode} \def\mplibstarttoPDF#1#2#3#4{% \prependtomplibbox @@ -3954,6 +5078,506 @@ end \fi % \end{macrocode} % +% Code for \pkg{tagpdf} +% \begin{macrocode} +\def\luamplibtagtextbegin#1{} +\let\luamplibtagtextend\relax +\let\luamplibtagasgroupbegin\relax +\let\luamplibtagasgroupend\relax +\ifcsname SuspendTagging\endcsname\else\endinput\fi +\ifcsname ver@tagpdf.sty\endcsname \else + \ExplSyntaxOn + \keys_define:nn{luamplib/notag} + { + ,alt .code:n = { } + ,actualtext .code:n = { } + ,artifact .code:n = { } + ,text .code:n = { } + ,correct-BBox .code:n = { } + ,tag .code:n = { } + ,debug .code:n = { } + ,instance .code:n = { \tl_gset:Nn \currentmpinstancename {#1} } + ,instancename .meta:n = { instance = {#1} } + ,unknown .code:n = { \tl_gset:Ne \currentmpinstancename {\l_keys_key_str} } + } + \RenewDocumentCommand\mplibcode{O{}} + { + \tl_gset_eq:NN \currentmpinstancename \c_empty_tl + \keys_set:ne{luamplib/notag}{#1} + \mplibtmptoks{}\ltxdomplibcode + } + \ExplSyntaxOff + \let\mplibalttext \luamplibtagtextbegin + \let\mplibactualtext \mplibalttext + \endinput\fi +\let\mplibstarttoPDForiginal\mplibstarttoPDF +\let\mplibstoptoPDForiginal\mplibstoptoPDF +\let\mplibputtextboxoriginal\mplibputtextbox +\let\mplibstarttousemplibgrouporiginal\mplibstarttousemplibgroup +\let\mplibstoptousemplibgrouporiginal\mplibstoptousemplibgroup +\ExplSyntaxOn +\tl_new:N \l__luamplib_tag_alt_tl +\tl_new:N \l__luamplib_tag_alt_dflt_tl +\tl_set:Nn\l__luamplib_tag_alt_dflt_tl {metapost~figure} +\tl_new:N \l__luamplib_tag_actual_tl +\tl_new:N \l__luamplib_tag_struct_tl +\tl_set:Nn\l__luamplib_tag_struct_tl {Figure} +\bool_new:N \l__luamplib_tag_usetext_bool +\bool_new:N \l__luamplib_tag_BBox_bool +\bool_set_true:N \l__luamplib_tag_BBox_bool +\seq_new:N\l__luamplib_tag_bboxcorr_seq +\bool_new:N\l__luamplib_tag_bboxcorr_bool +\bool_new:N \l__luamplib_tag_debug_bool +\tl_new:N \l__luamplib_BBox_label_tl +\tl_new:N \l__luamplib_BBox_llx_tl +\tl_new:N \l__luamplib_BBox_lly_tl +\tl_new:N \l__luamplib_BBox_urx_tl +\tl_new:N \l__luamplib_BBox_ury_tl +\cs_set_nopar:Npn \luamplibtagtextbegin #1 +{ + \bool_if:NTF \l__luamplib_tag_usetext_bool + { + \tag_mc_end_push: + \tag_mc_begin:n{} + \tag_struct_begin:n{tag=NonStruct,stash} + \def\myboxnum{#1} + \edef\mystructnum{\tag_get:n{struct_num}} + \edef\statebeforebox{\inteval{\tag_get:n{struct_counter}+\tag_get:n{mc_counter}}} + } + { + \tag_if_active:TF + { \bool_set_true:N \l_tmpa_bool } + { \bool_set_false:N \l_tmpa_bool } + \SuspendTagging{luamplib.textext} + } +} +\cs_set_nopar:Npn \luamplibtagtextend +{ + \bool_if:NTF \l__luamplib_tag_usetext_bool + { + \edef\stateafterbox{\inteval{\tag_get:n{struct_counter}+\tag_get:n{mc_counter}}} + \tag_if_active:T { + \int_compare:nNnTF + {\stateafterbox} + = + {\statebeforebox} + { \cs_gset_nopar:cpe {luamplib.notagbox.\myboxnum} {\mystructnum} } + { \cs_gset_nopar:cpe {luamplib.tagbox.\myboxnum} {\mystructnum} } + } + \tag_struct_end: + \tag_mc_end: + \tag_mc_begin_pop:n{} + } + { + \bool_if:NT \l_tmpa_bool + { \ResumeTagging{luamplib.textext} } + } +} +\msg_new:nnn {luamplib}{figure-text-reuse} +{ + textext~box~#1~probably~is~incorrectly~tagged.\\ + Reusing~a~box~in~text-keyed~figures~is~strongly~discouraged. +} +\cs_set_nopar:Npn \mplibputtextbox #1 +{ + \vbox to 0pt{\vss\hbox to 0pt{% + \bool_if:NTF \l__luamplib_tag_usetext_bool + { + \ResumeTagging{luamplib.puttextbox} + \tag_mc_end: + \cs_if_exist:cTF {luamplib.tagbox.#1} + { + \tag_struct_use_num:n {\csname luamplib.tagbox.#1\endcsname} + \raise\dp#1\copy#1 + } + { + \cs_if_exist:cF {luamplib.notagbox.#1} + { + \msg_warning:nnn{luamplib}{figure-text-reuse}{#1} + } + \tag_mc_begin:n{} + \int_set:Nn \l_tmpa_int {#1} + \tag_mc_reset_box:N \l_tmpa_int + \raise\dp#1\copy#1 + \tag_mc_end: + } + \tag_mc_begin:n{artifact} + } + { + \int_set:Nn \l_tmpa_int {#1} + \tag_mc_reset_box:N \l_tmpa_int + \raise\dp#1\copy#1 + } + \hss}} +} +\cs_new_nopar:Npn \__luamplib_tagging_begin_figure: +{ + \tag_if_active:T + { + \tag_mc_end_push: + \tl_if_empty:NT\l__luamplib_tag_alt_tl + { + \msg_warning:nne{luamplib}{alt-text-missing}{\l__luamplib_tag_alt_dflt_tl} + \tl_set:Ne\l__luamplib_tag_alt_tl {\l__luamplib_tag_alt_dflt_tl} + } + \tag_struct_begin:n + { + tag=\l__luamplib_tag_struct_tl, + alt=\l__luamplib_tag_alt_tl, + } + \tag_mc_begin:n{} + } +} +\cs_new_nopar:Npn \__luamplib_tagging_end_figure: +{ + \tag_if_active:T + { + \tag_mc_end: + \tag_struct_end: + \tag_mc_begin_pop:n{} + } +} +\cs_new_nopar:Npn \__luamplib_tagging_begin_actualtext: +{ + \tag_if_active:T + { + \tag_mc_end_push: + \tag_struct_begin:n + { + tag=Span, + actualtext=\l__luamplib_tag_actual_tl, + } + \tag_mc_begin:n{} + } +} +\cs_set_eq:NN \__luamplib_tagging_end_actualtext: \__luamplib_tagging_end_figure: +\cs_new_nopar:Npn \__luamplib_tagging_begin_artifact: +{ + \tag_if_active:T + { + \tag_mc_end_push: + \tag_mc_begin:n{artifact} + } +} +\cs_new_nopar:Npn \__luamplib_tagging_end_artifact: +{ + \tag_if_active:T + { + \tag_mc_end: + \tag_mc_begin_pop:n{} + } +} +\cs_set_eq:NN \luamplibtaggingbegin \__luamplib_tagging_begin_figure: +\cs_set_eq:NN \luamplibtaggingend \__luamplib_tagging_end_figure: +\keys_define:nn{luamplib/tag} + { + ,alt .code:n = + { + \tl_set:Ne\l__luamplib_tag_alt_tl{\text_purify:n{#1}} + } + ,actualtext .code:n = + { + \bool_set_false:N \l__luamplib_tag_BBox_bool + \tl_set:Ne\l__luamplib_tag_actual_tl{\text_purify:n{#1}} + \cs_set_eq:NN \luamplibtaggingbegin \__luamplib_tagging_begin_actualtext: + \cs_set_eq:NN \luamplibtaggingend \__luamplib_tagging_end_actualtext: + \tag_if_active:T {\noindent} + } + ,artifact .code:n = + { + \bool_set_false:N \l__luamplib_tag_BBox_bool + \cs_set_eq:NN \luamplibtaggingbegin \__luamplib_tagging_begin_artifact: + \cs_set_eq:NN \luamplibtaggingend \__luamplib_tagging_end_artifact: + } + ,text .code:n = + { + \bool_set_false:N \l__luamplib_tag_BBox_bool + \bool_set_true:N \l__luamplib_tag_usetext_bool + \cs_set_eq:NN \luamplibtaggingbegin \__luamplib_tagging_begin_artifact: + \cs_set_eq:NN \luamplibtaggingend \__luamplib_tagging_end_artifact: + \tag_if_active:T {\noindent} + } + ,tag .code:n = + { + \str_case:nnF {#1} + { + {text} + { + \bool_set_false:N \l__luamplib_tag_BBox_bool + \bool_set_true:N \l__luamplib_tag_usetext_bool + \cs_set_eq:NN \luamplibtaggingbegin \__luamplib_tagging_begin_artifact: + \cs_set_eq:NN \luamplibtaggingend \__luamplib_tagging_end_artifact: + \tag_if_active:T {\noindent} + } + {false} + { + \SuspendTagging{luamplib.tagfalse} + } + } + { + \tl_set:Nn\l__luamplib_tag_struct_tl{#1} + } + } + ,correct-BBox .code:n = + { + \bool_set_true:N \l__luamplib_tag_bboxcorr_bool + \seq_set_split:Nnn \l__luamplib_tag_bboxcorr_seq{~}{#1~0pt~0pt~0pt~0pt} + } + ,debug .code:n = + { \bool_set_true:N \l__luamplib_tag_debug_bool } + ,instance .code:n = + { \tl_gset:Nn \currentmpinstancename {#1} } + ,instancename .meta:n = { instance = {#1} } + ,unknown .code:n = + { \tl_gset:Ne \currentmpinstancename {\l_keys_key_str} } + } +\cs_new_nopar:Npn \luamplibtaggingBBox +{ + \bool_lazy_and:nnT + {\tag_if_active_p:} + {\l__luamplib_tag_BBox_bool} + { + \tl_set:Ne \l__luamplib_BBox_label_tl {luamplib.BBox.\tag_get:n{struct_num}} + \tex_savepos:D + \property_record:ee{\l__luamplib_BBox_label_tl}{xpos,ypos,abspage} + \tl_set:Ne \l__luamplib_BBox_llx_tl + { + \dim_to_decimal_in_bp:n + { \property_ref:een {\l__luamplib_BBox_label_tl}{xpos}{0}sp } + } + \tl_set:Ne \l__luamplib_BBox_lly_tl + { + \dim_to_decimal_in_bp:n + { \property_ref:een {\l__luamplib_BBox_label_tl}{ypos}{0}sp - \dp\mplibscratchbox } + } + \tl_set:Ne \l__luamplib_BBox_urx_tl + { + \dim_to_decimal_in_bp:n + { \l__luamplib_BBox_llx_tl bp + \wd\mplibscratchbox } + } + \tl_set:Ne \l__luamplib_BBox_ury_tl + { + \dim_to_decimal_in_bp:n + { \l__luamplib_BBox_lly_tl bp + \ht\mplibscratchbox + \dp\mplibscratchbox } + } + \bool_if:NT \l__luamplib_tag_bboxcorr_bool + { + \tl_set:Ne \l__luamplib_BBox_llx_tl + { + \fp_eval:n + { + \l__luamplib_BBox_llx_tl + + + \dim_to_decimal_in_bp:n {\seq_item:Nn \l__luamplib_tag_bboxcorr_seq {1} } + } + } + \tl_set:Ne \l__luamplib_BBox_lly_tl + { + \fp_eval:n + { + \l__luamplib_BBox_lly_tl + + + \dim_to_decimal_in_bp:n {\seq_item:Nn \l__luamplib_tag_bboxcorr_seq {2} } + } + } + \tl_set:Ne \l__luamplib_BBox_urx_tl + { + \fp_eval:n + { + \l__luamplib_BBox_urx_tl + + + \dim_to_decimal_in_bp:n {\seq_item:Nn \l__luamplib_tag_bboxcorr_seq {3} } + } + } + \tl_set:Ne \l__luamplib_BBox_ury_tl + { + \fp_eval:n + { + \l__luamplib_BBox_ury_tl + + + \dim_to_decimal_in_bp:n {\seq_item:Nn \l__luamplib_tag_bboxcorr_seq {4} } + } + } + } + \prop_gput:cne + { g__tag_struct_\tag_get:n{struct_num}_prop } + {A} + { + << /O /Layout /BBox [ + \l__luamplib_BBox_llx_tl\c_space_tl + \l__luamplib_BBox_lly_tl\c_space_tl + \l__luamplib_BBox_urx_tl\c_space_tl + \l__luamplib_BBox_ury_tl + ] >> + } + \bool_if:NT \l__luamplib_tag_debug_bool + { + \iow_log:e + { + luamplib/tag/debug:~BBox~of~structure~\tag_get:n{struct_num}~is~ + \l__luamplib_BBox_llx_tl\c_space_tl + \l__luamplib_BBox_lly_tl\c_space_tl + \l__luamplib_BBox_urx_tl\c_space_tl + \l__luamplib_BBox_ury_tl + } + \use:e + { + \exp_not:N\AddToHookNext{shipout/foreground} + { + \exp_not:N\int_compare:nNnT + {\exp_not:N\g_shipout_readonly_int} + = + {\property_ref:een{\l__luamplib_BBox_label_tl}{abspage}{0}} + { + \exp_not:N\put + (\l__luamplib_BBox_llx_tl bp, \dim_eval:n{\l__luamplib_BBox_lly_tl bp -\paperheight}) + { + \exp_not:N\opacity_select:n{0.5} \exp_not:N\color_select:n{red} + \exp_not:N\rule + {\dim_eval:n {\l__luamplib_BBox_urx_tl bp - \l__luamplib_BBox_llx_tl bp}} + {\dim_eval:n {\l__luamplib_BBox_ury_tl bp - \l__luamplib_BBox_lly_tl bp}} + } + } + } + } + } + } +} +\cs_set_nopar:Npn \luamplibtagasgroupbegin +{ + \bool_if:NT \l__luamplib_tag_usetext_bool + { + \ResumeTagging{luamplib.asgroup} + \tag_mc_begin:n{} + } +} +\cs_set_nopar:Npn \luamplibtagasgroupend +{ + \bool_if:NT \l__luamplib_tag_usetext_bool + { + \tag_mc_end: + \SuspendTagging{luamplib.asgroup} + } +} +\cs_set_nopar:Npn \mplibstarttousemplibgroup +{ + \prependtomplibbox\hbox dir TLT\bgroup + \luamplibtaggingbegin + \setbox\mplibscratchbox\hbox\bgroup + \bool_if:NT \l__luamplib_tag_usetext_bool + { + \tag_mc_end: + \tag_mc_begin:n{} + } +} +\cs_set_nopar:Npn \mplibstoptousemplibgroup +{ + \bool_if:NT \l__luamplib_tag_usetext_bool + { + \tag_mc_end: + \tag_mc_begin:n{artifact} + } + \egroup + \luamplibtaggingBBox + \unhbox\mplibscratchbox + \luamplibtaggingend + \egroup +} +\cs_set_nopar:Npn \mplibstarttoPDF #1 #2 #3 #4 + { + \prependtomplibbox + \hbox dir TLT\bgroup + \luamplibtaggingbegin % begin tagging + \xdef\MPllx{#1}\xdef\MPlly{#2}% + \xdef\MPurx{#3}\xdef\MPury{#4}% + \xdef\MPwidth{\the\dimexpr#3bp-#1bp\relax}% + \xdef\MPheight{\the\dimexpr#4bp-#2bp\relax}% + \parskip0pt + \leftskip0pt + \parindent0pt + \everypar{}% + \setbox\mplibscratchbox\vbox\bgroup + \SuspendTagging{luamplib.mplibtopdf}% stop tag inside figure + \noindent + } +\cs_set_nopar:Npn \mplibstoptoPDF + { + \par + \egroup + \setbox\mplibscratchbox\hbox + {\hskip-\MPllx bp + \raise-\MPlly bp + \box\mplibscratchbox}% + \setbox\mplibscratchbox\vbox to \MPheight + {\vfill + \hsize\MPwidth + \wd\mplibscratchbox0pt + \ht\mplibscratchbox0pt + \dp\mplibscratchbox0pt + \box\mplibscratchbox}% + \wd\mplibscratchbox\MPwidth + \ht\mplibscratchbox\MPheight + \luamplibtaggingBBox % BBox + \box\mplibscratchbox + \luamplibtaggingend % end tagging + \egroup + } +\RenewDocumentCommand\mplibcode{O{}} + { + \msg_set:nnn {luamplib}{alt-text-missing} + { + Alternative~text~for~mplibcode~is~missing.\\ + Using~the~default~value~'##1'~instead. + } + \tl_gset_eq:NN \currentmpinstancename \c_empty_tl + \keys_set:ne{luamplib/tag}{#1} + \tl_if_empty:NF \currentmpinstancename + { \tl_set:Nn\l__luamplib_tag_alt_dflt_tl {metapost~figure~\currentmpinstancename} } + \mplibtmptoks{}\ltxdomplibcode + } +\RenewDocumentCommand\mpfig{s O{}} + { + \begingroup + \IfBooleanTF{#1} + {\mplibprempfig *} + { + \msg_set:nnn {luamplib}{alt-text-missing} + { + Alternative~text~for~mpfig~is~missing.\\ + Using~the~default~value~'##1'~instead. + } + \keys_set:ne{luamplib/tag}{#2} + \tl_if_empty:NF \mpfiginstancename + { \tl_set:Nn\l__luamplib_tag_alt_dflt_tl {metapost~figure~\mpfiginstancename} } + \mplibmainmpfig + } + } +\RenewDocumentCommand\usemplibgroup{O{} m} + { + \begingroup + \msg_set:nnn {luamplib}{alt-text-missing} + { + Alternative~text~for~usemplibgroup~is~missing.\\ + Using~the~default~value~'##1'~instead. + } + \keys_set:ne{luamplib/tag}{#1} + \tl_set:Nn\l__luamplib_tag_alt_dflt_tl {metapost~figure~#2} + \mplibstarttousemplibgroup + \csname luamplib.group.#2\endcsname + \mplibstoptousemplibgroup + \endgroup + } +\cs_new_nopar:Npn \mplibalttext #1 +{ + \tl_set:Ne \l__luamplib_tag_alt_tl {\text_purify:n{#1}} +} +\cs_new_nopar:Npn \mplibactualtext #1 +{ + \tl_set:Ne \l__luamplib_tag_actual_tl {\text_purify:n{#1}} +} +\ExplSyntaxOff +% \end{macrocode} +% % That's all folks! % % \iffalse diff --git a/macros/luatex/generic/luamplib/luamplib.pdf b/macros/luatex/generic/luamplib/luamplib.pdf Binary files differindex 5e8e97a778..95965a4f20 100644 --- a/macros/luatex/generic/luamplib/luamplib.pdf +++ b/macros/luatex/generic/luamplib/luamplib.pdf diff --git a/macros/luatex/generic/luamplib/test-luamplib-latex.tex b/macros/luatex/generic/luamplib/test-luamplib-latex.tex index c2d8cb498b..f983d96b17 100644 --- a/macros/luatex/generic/luamplib/test-luamplib-latex.tex +++ b/macros/luatex/generic/luamplib/test-luamplib-latex.tex @@ -7,7 +7,7 @@ \usepackage{fontspec} \setmainfont{latin modern roman} \usepackage{luamplib} -\usepackage{xcolor} +\usepackage{graphicx,xcolor} \everymplib{ beginfig(0); } \everyendmplib{ endfig; } \mpliblegacybehavior{true}% @@ -185,25 +185,26 @@ draw p scaled 3 shifted (40,0); endfig; \end{mplibcode}% \par -\mplibsetformat{metafun}% +%\mplibsetformat{metafun}% \begin{mplibcode} beginfig(1) -fill unitsquare xyscaled (\mpdim\textwidth,1cm) - withshademethod "linear" - withshadevector (0,1) - withshadestep ( - withshadefraction .5 - withshadecolors (red,"blue!50") +fill unitsquare xscaled \mpdim\textwidth yscaled 1cm + withshadingmethod "linear" + withshadingvector (0,1) + withshadingstep ( + withshadingfraction .5 + withshadingcolors (red,"blue!50") ) - withshadestep ( - withshadefraction 1 - withshadecolors ("blue!50",green) + withshadingstep ( + withshadingfraction 1 + withshadingcolors ("blue!50",green) ) ; endfig; \end{mplibcode}% \leavevmode \mpfig +color yellow; yellow = (1,1,0); picture Q, u, e; Q := mplibglyph "Q" of "texgyrepagella-bolditalic.otf" scaled .1; u := mplibglyph "u" of "texgyrepagella-bolditalic.otf" scaled .1 shifted lrcorner Q; @@ -217,9 +218,9 @@ for pic=Q, u, e: if i < totallen: withpostscript "collect"; fi endfor endfor - withshademethod "linear" - withshadedirection (0.5,2.5) - withshadecolors (.7red,.7yellow) + withshadingmethod "linear" + withshadingdirection (0.5,2.5) + withshadingcolors (.7red,.7yellow) ; \endmpfig \everymplib[@mpfig]{ drawoptions(withcolor mplibrgbtexcolor "olive"); }% @@ -238,27 +239,27 @@ draw mpliboutlinetext.b ("$\displaystyle\frac{1}{1-x^2}$") ("Question") ( withpen pencircle scaled .3 ) ( - withshademethod "linear" - withshadedirection (2.5, 0.5) - withshadecolors(red, blue) + withshadingmethod "linear" + withshadingdirection (2.5, 0.5) + withshadingcolors(red, blue) ) scaled 4; \endmpfig \par\leavevmode \mppattern{mypatt} - \mpfig - picture q; - q := btex Q etex; - fill bbox q withcolor .8[red,white]; - draw q withcolor .8red; - \endmpfig +[ + xstep = 5, ystep = 6, + matrix = "rotated 90 scaled .75", +] +\mpfig +draw (origin--right+up) scaled 5 withcolor 1/3[blue,white] ; +draw (up--right) scaled 5 withcolor 1/3[red,white] ; +\endmpfig \endmppattern \mpfig - fill fullcircle scaled 100 withpostscript "collect"; - draw unitsquare shifted - center unitsquare scaled 45 - withpattern "mypatt" - withpostscript "evenodd" - ; +draw unitsquare shifted -center unitsquare scaled 45 withpostscript "collect" ; +draw fullcircle scaled 100 withpattern "mypatt" withpen pencircle scaled 1 + withcolor \mpcolor{red!50!blue!50} withpostscript "evenodd" ; \endmpfig \begin{mppattern}{pattuncolored} [ @@ -268,17 +269,94 @@ draw mpliboutlinetext.b ("$\displaystyle\frac{1}{1-x^2}$") \tiny\TeX \end{mppattern}\relax \mpfig - picture tex; tex := mpliboutlinetext.p ("\bfseries \TeX"); - i:=0; - for item within tex: - i:=i+1; - if i < length tex: - fill pathpart item scaled 10 withpostscript "collect"; - else: - draw pathpart item scaled 10 withpattern "pattuncolored" - withpen pencircle scaled 1/2 - withcolor 0.7 blue; - fi + picture tex; + tex = mpliboutlinetext.p ("\bfseries \TeX"); + for i=1 upto mpliboutlinenum: + draw image( + j:=0; + for item within mpliboutlinepic[i]: + j:=j+1; + draw pathpart item scaled 10 + if j < length mpliboutlinepic[i]: + withpostscript "collect" + else: + withpattern "pattuncolored" + withpen pencircle scaled 1/2 + withcolor (i/4)[red,blue] + fi; + endfor + ) + withfademethod "linear" + ; + endfor +\endmpfig +\par\leavevmode +\mpfig + picture mill; mill = btex \includegraphics[width=100bp]{mill} etex; + draw mill; + mill := mill shifted 125right; + draw mill + withfademethod "circular" + withfadecenter (center mill, center mill) + withfaderadius (30, abs(lrcorner mill - llcorner mill)/2) + withfadeopacity (1, 0) + ; +\endmpfig +\par +\def\test#1{% + \mpfig + fill unitsquare shifted -center unitsquare scaled 200 + withshadingmethod "linear" + withshadingcolors (.3[red,white], .3[blue,white]) + ; + label( btex MetaPost etex scaled 3, origin) ; + draw image( + fill fullcircle scaled 100 shifted 25left + withcolor .8white + withtransparency (2,1) + ; + fill fullcircle scaled 100 shifted 25right + withcolor .8white + withtransparency (2,1) + ; + ) + asgroup "#1" + withgroupname "test:#1" + withtransparency (1,.5) + ; + currentpicture := currentpicture scaled 2/3; + \endmpfig +}% +\hbox{\test{isolated,knockout}\,\test{isolated}\vbox to\MPheight{\vss\hbox{~isolated}\vss}}% +\hbox{\test{knockout}\,\test{}}% +\hbox to\MPwidth{\hss knockout\hss}% +\leavevmode +\mpfig usemplibgroup "test:isolated,knockout" scaled 2/3 rotated 15 ; \endmpfig +\usemplibgroup{test:isolated,knockout}% +\begin{mplibgroup}{mytex}[matrix="rotated 15"] \TeX \end{mplibgroup}% +\hbox to0pt{\hss\vrule width.5pt height5pt depth5pt\hss}% +\hbox to0pt{\hss\vrule width10pt height.25pt depth.25pt\hss}% +\usemplibgroup{mytex}% +\mpfig usemplibgroup "mytex"; draw (left--right) scaled 5; draw (up--down) scaled 5; \endmpfig +\par +\mpfig + picture test; test = mplibgraphictext "\textbf{MPLIB}" + fakebold 1 fillcolor "red!70" drawcolor .7red scaled 7; + draw test withpattern "mypatt" ; +\endmpfig +\mpfig + picture tex; + tex = mplibgraphictext "\bfseries\TeX" rotated 30 scaled 4; + draw tex + withshadingmethod "linear" + withshadingvector (3,0) + withshadingcolors (red,blue) + ; +\endmpfig +\mpfig + string Test; Test="abçdéf"; + for k=0 upto mpliblength(Test)-1: + draw TEX(mplibsubstring (k,k+1) of Test) scaled 2 shifted (20k,0); endfor \endmpfig \tracingcommands0 diff --git a/macros/luatex/generic/luamplib/test-luamplib-plain.tex b/macros/luatex/generic/luamplib/test-luamplib-plain.tex index c178acb31a..2f8854c6f3 100644 --- a/macros/luatex/generic/luamplib/test-luamplib-plain.tex +++ b/macros/luatex/generic/luamplib/test-luamplib-plain.tex @@ -1,4 +1,4 @@ -\input luaotfload.sty +%\input luaotfload.sty \input miniltx \input color \definecolor{orange}{cmyk}{0,.5,1,0} @@ -178,25 +178,26 @@ draw p scaled 3 shifted (40,0); endfig; \endmplibcode \par -\mplibsetformat{metafun}% +%\mplibsetformat{metafun}% \mplibcode beginfig(1) -fill unitsquare xyscaled (\mpdim\hsize, 1cm) - withshademethod "linear" - withshadevector (0,1) - withshadestep ( - withshadefraction .5 - withshadecolors (red,blue) +fill unitsquare xscaled \mpdim\hsize yscaled 1cm + withshadingmethod "linear" + withshadingvector (0,1) + withshadingstep ( + withshadingfraction .5 + withshadingcolors (red,blue) ) - withshadestep ( - withshadefraction 1 - withshadecolors (blue,green) + withshadingstep ( + withshadingfraction 1 + withshadingcolors (blue,green) ) ; endfig; \endmplibcode \leavevmode \mpfig +color yellow; yellow = (1,1,0); picture Q, u, e; Q := mplibglyph "Q" of "texgyrepagella-bolditalic.otf" scaled .1; u := mplibglyph "u" of "texgyrepagella-bolditalic.otf" scaled .1 shifted lrcorner Q; @@ -210,9 +211,9 @@ for pic=Q, u, e: if i < totallen: withpostscript "collect"; fi endfor endfor - withshademethod "linear" - withshadedirection (0.5,2.5) - withshadecolors (.7red,.7yellow) + withshadingmethod "linear" + withshadingdirection (0.5,2.5) + withshadingcolors (.7red,.7yellow) ; \endmpfig \everymplib[@mpfig]{ drawoptions(withcolor mplibrgbtexcolor"orange"); }% @@ -231,9 +232,9 @@ draw mpliboutlinetext.b ("$\overbrace{x+\cdots+x}^k$") ("Question") ( withpen pencircle scaled .3 ) ( - withshademethod "linear" - withshadedirection (2.5, 0.5) - withshadecolors(red, blue) + withshadingmethod "linear" + withshadingdirection (2.5, 0.5) + withshadingcolors(red, blue) ) scaled 4; \endmpfig @@ -261,18 +262,69 @@ draw mpliboutlinetext.b ("$\overbrace{x+\cdots+x}^k$") \fiverm\TeX \endmppattern \mpfig - picture tex; tex := mpliboutlinetext.p ("\bf \TeX"); - i:=0; - for item within tex: - i:=i+1; - if i < length tex: - fill pathpart item scaled 10 withpostscript "collect"; - else: - draw pathpart item scaled 10 withpattern "pattuncolored" - withpen pencircle scaled 1/2 - withcolor 0.7 blue; - fi + picture tex; + tex = mpliboutlinetext.p ("\bf \TeX"); + draw image( + for i=1 upto mpliboutlinenum: + j:=0; + for item within mpliboutlinepic[i]: + j:=j+1; + draw pathpart item scaled 10 + if j < length mpliboutlinepic[i]: + withpostscript "collect" + else: + withpattern "pattuncolored" + withpen pencircle scaled 1/2 + withcolor (i/4)[red,blue] + fi; + endfor endfor + ) + withfademethod "linear" + ; +\endmpfig +\par\leavevmode +\mpfig +fill fullcircle scaled 125 withcolor 2/3[blue,white]; +fill fullcircle scaled 80 withcolor 2/3[red,white]; +draw image( + draw (left--right) rotated 45 scaled 50 + withpen pencircle scaled 20 + ; + draw (left--right) rotated -45 scaled 50 + withpen pencircle scaled 20 + ; + ) + asgroup "" + withgroupname "testTRgroup" + withtransparency (1, .3) + ; +\endmpfig +\mpfig +fill fullcircle scaled 125 withcolor 2/3[red,white]; +fill fullcircle scaled 80 withcolor 2/3[blue,white]; +usemplibgroup "testTRgroup" + withfademethod "circular" + withfaderadius (0,60) + ; +\endmpfig +\mplibgroup{mytex}[matrix="rotated 15"] \TeX \endmplibgroup +\hbox to0pt{\hss\vrule width.5pt height5pt depth5pt\hss}% +\hbox to0pt{\hss\vrule width10pt height.25pt depth.25pt\hss}% +\usemplibgroup{mytex}% +\mpfig usemplibgroup "mytex"; draw (left--right) scaled 5; draw (up--down) scaled 5; \endmpfig +\par +\mpfig + picture test; test = mplibgraphictext "\bf MPLIB" + fakebold 1 fillcolor .7[white,blue] drawcolor .7blue scaled 7; + draw test withpattern "pattuncolored" ; +\endmpfig +\mpfig + draw btex \bf\TeX etex rotated 30 scaled 3 + withshadingmethod "linear" + withshadingcolors (red,blue) + withshadingvector (0,1) + ; \endmpfig \tracingcommands0 diff --git a/macros/luatex/generic/luatexja/COPYING b/macros/luatex/generic/luatexja/COPYING index b82ffc50fe..9799d0ab20 100644 --- a/macros/luatex/generic/luatexja/COPYING +++ b/macros/luatex/generic/luatexja/COPYING @@ -1,4 +1,4 @@ -Copyright (c) 2011--2024 The LuaTeX-ja project, All rights reserved. +Copyright (c) 2011--2025 The LuaTeX-ja project, All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/macros/luatex/generic/luatexja/README b/macros/luatex/generic/luatexja/README index 9224c83b0b..fb8ca19008 100644 --- a/macros/luatex/generic/luatexja/README +++ b/macros/luatex/generic/luatexja/README @@ -1,6 +1,6 @@ -The LuaTeX-ja Package 20240514.0 +The LuaTeX-ja Package 20250208.0 -------------------------------- -Copyright (c) 2011--2024 The LuaTeX-ja project +Copyright (c) 2011--2025 The LuaTeX-ja project License: modified BSD (see COPYING) LuaTeX-ja is a macro package for typesetting Japanese documents with LuaTeX. @@ -42,7 +42,7 @@ Installation 2. If you must/want to install manually: a. Download the source archive from CTAN, - or tagged as 20240514.0 in the Git repository by + or tagged as 20250208.0 in the Git repository by <https://github.com/luatexja/luatexja/archive/refs/tags/$VER.zip> b. Extract the archive and process following three files by LuaLaTeX @@ -92,4 +92,4 @@ Notes This file and ltj-kinsoku.lua are not used anymore. (Do not remove ltj-kinsoku.tex.) -Last commit date: Tue May 14 19:12:05 2024 +0900 +Last commit date: Sat Feb 8 21:26:17 2025 +0900 diff --git a/macros/luatex/generic/luatexja/doc/ltjsclasses.pdf b/macros/luatex/generic/luatexja/doc/ltjsclasses.pdf Binary files differindex 786e01afa5..1c20815985 100644 --- a/macros/luatex/generic/luatexja/doc/ltjsclasses.pdf +++ b/macros/luatex/generic/luatexja/doc/ltjsclasses.pdf diff --git a/macros/luatex/generic/luatexja/doc/luatexja-en.pdf b/macros/luatex/generic/luatexja/doc/luatexja-en.pdf Binary files differindex de28e1d279..91e7a1eda1 100644 --- a/macros/luatex/generic/luatexja/doc/luatexja-en.pdf +++ b/macros/luatex/generic/luatexja/doc/luatexja-en.pdf diff --git a/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf b/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf Binary files differindex 49a8a6feef..608eb31bde 100644 --- a/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf +++ b/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf diff --git a/macros/luatex/generic/luatexja/doc/luatexja-ruby.pdf b/macros/luatex/generic/luatexja/doc/luatexja-ruby.pdf Binary files differindex 06cf336b44..0914351b11 100644 --- a/macros/luatex/generic/luatexja/doc/luatexja-ruby.pdf +++ b/macros/luatex/generic/luatexja/doc/luatexja-ruby.pdf diff --git a/macros/luatex/generic/luatexja/doc/luatexja-ruby.tex b/macros/luatex/generic/luatexja/doc/luatexja-ruby.tex index c7e05e8c51..8a12307e70 100644 --- a/macros/luatex/generic/luatexja/doc/luatexja-ruby.tex +++ b/macros/luatex/generic/luatexja/doc/luatexja-ruby.tex @@ -1,7 +1,7 @@ %#! lualatex %%% a test of ruby. \documentclass[a4paper,10ptj]{ltjsarticle} -\usepackage[rgb]{xcolor} +\usepackage[cmyk]{xcolor} \usepackage{enumitem,mleftright,pict2e} \usepackage{luatexja-otf,amsmath,bxghost} \usepackage[no-math]{fontspec} @@ -17,15 +17,21 @@ \def\cs#1{\eghostguarded{\texttt{\textbackslash#1}}} \usepackage[textwidth=45\zw, lines=45, footskip=2\zh]{geometry} \advance\leftmargini-1\zw\advance\leftmarginii-1\zw -\protected\def\Param#1{\eghostguarded{\underline{\smash{\textsf{\mdseries #1}}}}} +\protected\def\Param#1{\texorpdfstring{\eghostguarded{\underline{\smash{\textsf{\mdseries #1}}}}}{#1}} +\def\Pkg#1{\texorpdfstring{\textsf{#1}}{#1}} % packages/classes \usepackage{luatexja-ruby,showexpl,booktabs} -\definecolor{mygreen}{rgb}{0,0.5,0} +\usepackage{luacolor,lua-ul} +\definecolor{green}{cmyk}{.75,0,.65,0} +\definecolor{blue}{cmyk}{1,.45,0,0} +\definecolor{b_blue}{cmyk}{.3,0,0,0} \lstset{ preset=\normalsize, basicstyle=\small\ttfamily, basewidth=0.5em, explpreset={numberstyle=\tiny, numbers=left, numbersep=1em, columns=fixed}, - morecomment=[l]{\%}, commentstyle=\color{mygreen} + morecomment=[l]{\%}, commentstyle=\color{green} } +\newunderlinetype\beginActIntr{\color{blue}\leaders\vrule height -.16\zh depth .24\zh} +\NewDocumentCommand\ActIntr{+m}{{\beginActIntr#1}} \makeatletter\let\SX@Info=\relax\makeatother \fboxsep=0mm @@ -37,41 +43,23 @@ allcolors=blue, pdftitle={luatexja-ruby.sty} } -\def\Node#1#2{\,\vcenter{\hbox{\fboxsep=1pt\fbox{\vbox{\small\halign{\hfil##\hfil\cr - #1\mathstrut\cr\noalign{\smallskip\hrule height.4pt\smallskip}\strut\<#2\cr}}}}}\,} +\makeatletter +\def\Node{\@ifstar{\@Node[b_blue]}{\@Node[white]}} +\def\@Node[#1]#2#3{\,\vcenter{\hbox{\fboxsep=1pt\fcolorbox{black}{#1}{% + \vbox{\small\halign{\hfil##\hfil\cr + #2\mathstrut\cr\noalign{\smallskip\hrule height.4pt\smallskip}\strut\<#3\cr}}}}}\,} \def\LuaTeX{Lua\TeX} % 三分ルビ用 \DeclareFontShape{JY3}{mc}{mc}{n}{<-> [0.92487] HaranoAjiMincho-Regular:extend=0.67;jfm=ujisc33}{} -%%%% \ltjruby 内に \texorpdfstring + | 除去を仕込む -\RequirePackage{xparse} -\makeatletter -\def\removevert#1{\if\noexpand#1|% - \expandafter\expandafter\expandafter\@firstofone\expandafter{% - \else\ifnum0=1}\fi#1% - \ifx#1\relax\expandafter\@gobble% - \else\expandafter\@firstofone - \fi{\expandafter\@firstofone - \fi - \removevert}} -\makeatother -\ExplSyntaxOn -\cs_set_eq:NN \myorigltjruby \ltjruby -\DeclareExpandableDocumentCommand {\ltjruby} { O{} m m } {% - \texorpdfstring { - \exp_not:n { \myorigltjruby[#1]{#2}{#3} } - } { - \removevert #2 \relax - } -} -\cs_set_eq:NN \ruby \ltjruby -\ExplSyntaxOff -%%%% - \makeatletter +\let\origunderscore=\_ +\def\_{\ifx\f@family\ttdefault\origunderscore\else + \leavevmode \kern .06em\vbox {\hrule \@width .333em}\fi} \def\figureautorefname{図} +\def\tableautorefname{表} \def\HyRef@autoref#1#2{% \begingroup \Hy@safe@activestrue @@ -79,14 +67,29 @@ \endgroup\eghostguarded{}%" 欧文ゴースト } -\title{\textsf{luatexja-ruby}パッケージ} +\title{\Pkg{luatexja-ruby}パッケージ} \author{\LuaTeX-jaプロジェクトチーム} \date{\texttt{\csname ver@luatexja-ruby.sty\endcsname}(\today)} \makeatletter -\def\mybox#1{\unskip\ {\Large \fboxrule=0.1mm\fboxsep=0mm\fcolorbox{cyan}{white}{\hbox{\<\ltjjachar#1\<}}}\ } - +\def\mybox{\@ifnextchar({\mybox@@{2}{0}}{% + \@ifnextchar){\mybox@@{0}{2}}{\@ifnextchar={\mybox@@{1}{1}}{\mybox@@{0}{0}.}}}} +\def\mybox@@#1#2#3#4{\unskip\ {\Large \fboxrule=0.1mm\fboxsep=0mm% + \ifnum#1>0\fcolorbox{blue}{b_blue}{\vrule width 0pt height .88\zh depth .12\zh\kern#1\dimexpr.25\zw}\kern-\fboxrule\fi% + \fcolorbox{blue}{white}{\hbox{\<\ltjjachar#4\<}}% + \ifnum#2>0\kern-\fboxrule\fcolorbox{blue}{b_blue}{\vrule width 0pt height .88\zh depth .12\zh\kern#2\dimexpr.25\zw}\fi% +}\ } + +\def\RULER#1#2{% + \noindent + \rlap{\smash{\phantom{#1}\ \color{cyan}% + \@tempcnta=0 + \loop\ifnum\@tempcnta<20 + \kern-.05mm\vrule height \dimexpr-\baselineskip+0.88\zh depth \dimexpr #2\baselineskip+0.12\zh width0.1mm\kern-.05mm% + \kern\zw\advance\@tempcnta 1 + \repeat + }}\ignorespaces +} \begin{document} - \catcode`\<=13 \def<#1>{{\rmfamily\mdseries\itshape$\langle$#1\/$\rangle$}} %\fontsize{13.19873}{15}\selectfont% @@ -94,7 +97,7 @@ \maketitle \begin{abstract} -\textsf{luatexja-ruby}パッケージは,\LuaTeX-jaの機能を利用してルビの組版処理を行う追加パッケージである. +\Pkg{luatexja-ruby}パッケージは,\LuaTeX-jaの機能を利用してルビの組版処理を行う追加パッケージである. \LuaTeX, \LuaTeX-jaの内部処理に割り込むことにより,熟語ルビ中の行分割や, 行頭形・行中形・行末形の自動検出,また進入許容量の自動設定などを可能とした. @@ -105,15 +108,15 @@ v0.3より前とは親文字の高さの扱いが変わっている(\texttt{ba \tableofcontents \newpage -\section{\ltjruby{利|用|方|法}{り|よう|ほう|ほう}} +\section[利用方法]{\ltjruby{利|用|方|法}{り|よう|ほう|ほう}} パッケージ読み込みは,\verb+\usepackage{luatexja-ruby}+ で良く, 必要ならば自動的に\LuaTeX-ja本体を読み込む. plain \LuaTeX でのロードはまだサポートしておらず, \LaTeXe のみサポートしている. -\subsection{\ltjruby{用|語}{よう|ご}} +\subsection[用語]{\ltjruby{用|語}{よう|ご}} 「進入(intrusion)」「突出(protrusion)」という用語は, -\href{http://zrbabbler.sp.land.to/pxrubrica.html}{\textsf{pxrubrica}パッケージ}% +\href{http://zrbabbler.sp.land.to/pxrubrica.html}{\Pkg{pxrubrica}パッケージ}% での用法に準ずる. \begin{quote} @@ -125,15 +128,15 @@ plain \LuaTeX でのロードはまだサポートしておらず, なお,本パッケージでは親文字と直前・直後の文字の間に0でない和文処理グルー \footnote{JFMで指定されたグルーや,標準の和文間空白(\Param{kanjiskip}),標準の和欧文間空白(\Param{xkanjiskip}).}% -がくることも考慮しているため,「\emph{前後の文字への}\underline{進入(許容)量}」と「進入(許容)量」とは異なる可能性がある. +がくることも考慮しているため,「\emph{前後の文字への}\ActIntr{進入(許容)量}」と「進入(許容)量」とは異なる可能性がある. この文書では次のように称する: \begin{description} - \item[\underline{文字進入量}] 前後の文字へルビ文字が実際にかかる長さ.常に下線を引くことにする. + \item[\ActIntr{文字進入量}] 前後の文字へルビ文字が実際にかかる長さ.常に下線を引くことにする. \item[進入量] 前後の文字,およびそれとルビの間の和文処理グルーにかかる長さ \end{description} -多くの場合,和文処理グルーは0以上の長さのため,進入量は\underline{文字進入量}以上である. +多くの場合,和文処理グルーは0以上の長さのため,進入量は\ActIntr{文字進入量}以上である. -例えば次の例では,直前の文字「来」への\underline{前文字進入量}は0であるが, +例えば次の例では,直前の文字「来」への\ActIntr{前文字進入量}は0であるが, 前進入量は(和欧文間空白にかかる分まで含めるので)正である. \begin{quote} \Large @@ -145,15 +148,15 @@ plain \LuaTeX でのロードはまだサポートしておらず, \cs{zw},~\cs{zh}命令で取得できる値を表す.多くの場合は両者は同じ値であるが,いつでもそうであるという保証はない. 「ルビ全角幅」「ルビ全角高さ」についても同様である. -\subsection{\ruby{命|令}{めい|れい}} +\subsection[命令]{\ruby{命|令}{めい|れい}} \label{ssec:ltjruby} \paragraph{\cs{ltjruby}} -ルビ出力用命令の本体.\verb+\ruby+ という別名を定義している. +ルビ出力用命令の本体.\cs{ruby}という別名を定義している. \begin{quote} \ttfamily \textbackslash ltjruby[<option>]\{親|文|字\}\{おや|も|じ\} \end{quote} のように親文字→ルビの順序で指定する. -第2・第3引数内の「\verb+|+」はグループの区切りを表す.詳細は\ref{ssec:grp}\nobreak 小節を参照. +第2・第3引数内の「\texttt{|}」はグループの区切りを表す.詳細は\ref{ssec:grp}\nobreak 小節を参照. \medskip <option>には以下の内容をkey-valueリストで指定可能である. @@ -162,16 +165,16 @@ plain \LuaTeX でのロードはまだサポートしておらず, \begin{description} \def\makelabel#1{\ttfamily\bfseries #1} -\item[pre=<real>] \underline{前文字進入許容量}をルビ全角単位で指定. +\item[pre=<real>] \ActIntr{前文字進入許容量}をルビ全角単位で指定. 負の長さを指定した場合は,ルビの状況や直前の文字に応じた自動指定を意味する. 既定値は負(つまり,自動指定). -\item[post=<real>] 同様に,\underline{後文字進入許容量}を指定する.既定値は負(自動指定). +\item[post=<real>] 同様に,\ActIntr{後文字進入許容量}を指定する.既定値は負(自動指定). \item[mode] 進入処理のモードを表すbit vector.下位2\,bitは,\texttt{pre}や \texttt{post}が負である場合にしか効力を発揮しない.既定値は$(00001)_2 = 1$. \begin{description} - \item[bit 0] 前後の\underline{文字への進入}を無効にするならば0,有効にするならば1. + \item[bit 0] 前後の\ActIntr{文字への進入}を無効にするならば0,有効にするならば1. \item[bit 1] 前進入許容量$B$と後進入許容量$A$が異なった場合, そのまま処理する場合は0,小さい方に揃えるならば1. \item[bit 2--4] ルビ文字の突出量から実際の前・後進入量の計算方法を指定する. @@ -186,44 +189,41 @@ plain \LuaTeX でのロードはまだサポートしておらず, \item[stretchruby=\{<left>\}\{<middle>\}\{<right>\}] 親文字の合計長が ルビ文字の合計長より長い時に,ルビ文字の前・間・後に入れる空白の割合であり, それぞれ0--7の自然数で指定する. -既定値は\ \verb+{1}{2}{1}+ である. +既定値は\>\verb+{1}{2}{1}+\>である. <left>はルビ文字の先頭までの空き量,<middle>はルビ文字間の空き量,<right>はルビ文字の末尾からの 空き量(の比)を表す.以下が例である. -\begin{LTXexample}[width=0.3\textwidth, preset=\Large] +\begin{LTXexample}[width=0.25\textwidth, preset=\Large] \ltjruby[stretchruby=123,maxmargin=2]% {◯◯◯◯}{◆◆} \end{LTXexample} \item[stretch=\{<left>\}\{<middle>\}\{<right>\}] 行中形でルビ文字の方が長い場合,親文字の前・中・後に入れる空白の割合. -既定値は\ \verb+{1}{2}{1}+ である.それ以外の代表的な値としては,例えば次のようなものがある. +既定値は\>\verb+{1}{2}{1}+\>である.それ以外の代表的な値としては,例えば次のようなものがある. \begin{description} -\item[親文字均等割禁止] \verb+{1}{0}{1}+\ など<middle>を0にした値 +\item[親文字均等割禁止] \verb+{1}{0}{1}+\>など<middle>を0にした値 \item[前突出禁止] \verb+{0}{1}{1}+ \item[後突出禁止] \verb+{1}{1}{0}+ \end{description} \item[stretchbol=\{<left>\}\{<middle>\}\{<right>\}] 行頭形に対する\texttt{stretch}と同様の指定. -既定値は\ \verb+{0}{1}{1}+ である. +既定値は\>\verb+{0}{1}{1}+\>である. \item[stretcheol=\{<left>\}\{<middle>\}\{<right>\}] 行末形に対する\texttt{stretch}と同様の指定. -既定値は\ \verb+{1}{1}{0}+ である. +既定値は\>\verb+{1}{1}{0}+\>である. \item[maxmargin=<real>] 親文字の方がルビより長い時に,ルビの先頭と親文字の先頭,及び -ルビ末尾と親文字の末尾の間に許される最大の空白量.\textbf{親文字全角幅単位}で指定し,既定値は0.5. +ルビ末尾と親文字の末尾の間に許される最大の空白量.\emph{親文字全角幅単位}で指定し,既定値は0.5. \medskip \item[size=<real>] ルビ文字の親文字に対する大きさ.既定値は0.5. \item[intergap=<real>] ルビ文字と親文字との空きを親文字全角高さ単位で指定.既定値は0. \item[rubysmash=<bool>] ルビの高さを0にするか.既定値は偽.次が例である. -\begin{LTXexample}[width=0.3\textwidth, preset=\Large] +\begin{LTXexample}[width=0.25\textwidth, preset=\Large] \ \vrule width 0pt height 2\zw depth 1\zw \frame{\ltjruby[rubysmash=false]{本}{ほん}}\ \frame{\ltjruby[rubysmash=true]{本}{ほん}}\ -\frame{\ltjruby[rubysmash=false,intergap=0.2] - {本}{ほん}}\ -\frame{\ltjruby[rubysmash=true,intergap=0.2] - {本}{ほん}}\ -\frame{\ltjruby[rubysmash=false,intergap=-1.5] - {本}{ほん}} +\frame{\ltjruby[rubysmash=false,intergap=0.2]{本}{ほん}}\ +\frame{\ltjruby[rubysmash=true,intergap=0.2]{本}{ほん}}\ +\frame{\ltjruby[rubysmash=false,intergap=-1.5]{本}{ほん}} \end{LTXexample} \item[ybaseheight=<real>] 非負の値が指定された場合, \emph{縦組以外での}親文字の高さを親文字全角高さの<real>倍と強制的に固定する. @@ -233,7 +233,7 @@ plain \LuaTeX でのロードはまだサポートしておらず, 既定値は$0.5$. \item[baseheight=<real>] \texttt{ybaseheight},\texttt{tbaseheight}を同時に指定したことと同義. 次の例や\autoref{fig:ruby_vertical}を参照. -\begin{LTXexample}[width=0.3\textwidth, preset=\Large] +\begin{LTXexample}[width=0.25\textwidth, preset=\Large] \noindent \ltjruby[baseheight=0.88]{本}{ほん}\ \ltjruby[baseheight=0.88]{dvi}{ディーヴィーアイ}\\ @@ -252,7 +252,7 @@ plain \LuaTeX でのロードはまだサポートしておらず, 既定値は$0.5$. \item[rubydepth=<real>] \texttt{yrubydepth},\texttt{trubydepth}を同時に指定したことと同義. 次の例や\autoref{fig:ruby_vertical}を参照. -\begin{LTXexample}[width=0.3\textwidth, preset=\Large] +\begin{LTXexample}[width=0.25\textwidth, preset=\Large] \noindent \ltjruby[rubydepth=0.12]{◆}{ほん}\ \ltjruby[rubydepth=0.12]{◆}{pdf}\ @@ -305,20 +305,43 @@ plain \LuaTeX でのロードはまだサポートしておらず, \item[kenten=<command>]各文字につく圏点の出力命令を指定する. - 既定値は「\verb+\textbullet+」である. + 既定値は「\cs{textbullet}」である. \item[fontcmd=<command>]ルビ用のフォント切り替え命令を指定する. このキーの内容が実行された後に\ \verb+\fontsize...\selectfont+\ が実行されるので, -このキーの指定では最後に\ \verb+\selectfont+ を加える必要はない. +このキーの指定では最後に\cs{selectfont}を加える必要はない. -この \texttt{fontcmd} キーの内容は多くの回数実行される. -例えば,\textsf{luatexja-fontspec}パッケージを用いてOpenTypeフォントを用いる場合, +この \texttt{fontcmd}キーの内容は多くの回数実行される. +例えば,\Pkg{luatexja-fontspec}パッケージを用いてOpenTypeフォントを用いる場合, \begin{lstlisting} fontcmd=\addjfontfeatures{Style=Ruby} \end{lstlisting} のようにしてルビ用字形を用いることが可能だが,現在の実装ではタイプセットに時間がかかるようになる. + \item[always\_highlight\_protrusion=<bool>] この\cs{ltjruby}命令が\Pkg{lua-ul}パッケージの提供する「下線」命令 + \footnote{\cs{underLine}, \cs{highLight},およびそのほか.}の引数に含まれていた場合, + ルビの突出部(ただし\ActIntr{文字進入部分}は除く)に「下線」がいつでも引かれるか否か. + + 既定値は偽.この場合は,突出部に「下線」が引かれるのは,ルビの前後の文字も同じ「下線」命令の有効範囲になっているときに + 限られる.\autoref{fig:always-highlight-protrusion}を参照. \end{description} +\begin{figure}[t] +\begin{LTXexample}[width=13.2\zw, preset=\large] + \ltjsetruby{stretchbol=121,stretcheol=121} + あ\highLight{\ruby{◆}{□□□□□□□□}}あ + い\highLight{\ruby{◆}{□□□□□□□□}い}\\ + \highLight{う\ruby{◆}{□□□□□□□□}}う\\\kern7\zw + あ\highLight{\ruby{◆|◆}{□□□□□|□□□□□}}あ + + \ltjsetruby{always_highlight_protrusion} + あ\highLight{\ruby{◆}{□□□□□□□□}}あ + い\highLight{\ruby{◆}{□□□□□□□□}い}\\ + \highLight{う\ruby{◆}{□□□□□□□□}}う\\\kern7\zw + あ\highLight{\ruby{◆|◆}{□□□□□|□□□□□}}あ +\end{LTXexample} + \caption{\texttt{always\_highlight\_protrusion}キー有無による組版結果の違い} + \label{fig:always-highlight-protrusion} +\end{figure} \medskip 次の2つは,以上で説明した複数のオプションを一度に設定するためのものである. @@ -337,7 +360,7 @@ mode=9, stretch={1}{2}{1}, stretchruby={0}{0}{1} \end{description} \paragraph{\cs{ltjsetruby}\{<option>\}} -<option>の既定値を指定する.\textsf{luatexja-ruby}読み込み時の値は +<option>の既定値を指定する.\Pkg{luatexja-ruby}読み込み時の値は 各項目の所で既に説明してあるが,次のようになっている. \begin{verbatim} pre=-1, post=-1, mode=1, @@ -346,24 +369,51 @@ mode=9, stretch={1}{2}{1}, stretchruby={0}{0}{1} maxmargin=0.5, size=0.5, intergap=0, rubysmash=false, kenten=\textbullet, fontcmd=\relax, ybaseheight=0.88, tbaseheight=0.5, yrubydepth=0.12, trubydepth=0.5, - intrude_jfmgk, intrude_kanjiskip, intrude_xkanjiskip + intrude_jfmgk, intrude_kanjiskip, intrude_xkanjiskip, + always_highlight_protrusion=false \end{verbatim} \paragraph{\cs{ltjsetparamater} に追加されるキー} \begin{description} \item[\Param{rubypreintrusion}\ttfamily =\{<chr\_code>, <pre\_int>\}] - 文字<chr\_code> に,その\textbf{直後}のルビによって掛けられるルビ文字列の最大長 - (つまり,\underline{前文字進入許容量})をルビ全角幅単位で指定. - - \textbf{v0.5以降での変更点}:もし$-a$~($a>0$)を指定した場合は,実際の\underline{前文字進入許容量}は$a$となるが, - 文字<chr\_code>の前のJFMグルーに進入が発生した場合には,\underline{前文字進入許容量}が0でなかった場合は,の後のJFMグルーにはルビの進入は発生しない. - + 文字<chr\_code> に,その\emph{直後}のルビによって掛けられるルビ文字列の最大長 + (つまり,\ActIntr{前文字進入許容量})をルビ全角幅単位で指定. + + \emph{v0.5以降での変更点}:もし$-a$~($a>0$)を指定した場合は,次のようになる. + \begin{itemize} + \item 実際の\ActIntr{前文字進入許容量}は$a$となる. + \item ただし,文字<chr\_code>の直前のルビによって + 文字の前のJFMグルーに進入が発生した場合,文字<chr\_code>の直後のルビの前進入は発生しない. + \end{itemize} + 後者の状況の例を以下に載せる. +\begin{LTXexample}[width=0.25\textwidth, preset=\Large] +\ltjsetparameter{rubypreintrusion={`\【,-1}} +\ruby{鴎}{かもめ}【\ruby{隼}{はやぶさ} +% 「\ruby{鴎}{かもめ}」は,「【」直前のJFMグルーに +% ルビ半角だけ進入している +% →「\ruby{隼}{はやぶさ}」の「【」への進入はない. +\end{LTXexample} + + \item[\Param{rubypostintrusion}\ttfamily =\{<chr\_code>, <post\_int>\}] - 文字<chr\_code> に,その\textbf{直前}のルビによって掛けられるルビ文字列の最大長 - (つまり,\underline{後文字進入許容量})をルビ全角幅単位で指定. - - \textbf{v0.5以降での変更点}:もし$-a$~($a>0$)を指定した場合は,実際の\underline{後文字進入許容量}は$a$となるが, - 実際の\underline{後文字進入量}が0でなかった場合は,文字<chr\_code>の後のJFMグルーにはルビの進入は発生しない. + 文字<chr\_code>に,その\emph{直前}のルビによって掛けられるルビ文字列の最大長 + (つまり,\ActIntr{後文字進入許容量})をルビ全角幅単位で指定. + + \emph{v0.5以降での変更点}:もし$-a$~($a>0$)を指定した場合は,次のようになる. + \begin{itemize} + \item 実際の\ActIntr{後文字進入許容量}は$a$となる. + \item ただし,文字<chr\_code>の直前のルビによってこの文字への実際の\ActIntr{後文字進入}が + 発生した場合,文字<chr\_code>の直後のJFMグルーにはルビの前進入は発生しない. + \end{itemize} + 今回も後者の状況の例を以下に載せる. +\begin{LTXexample}[width=0.25\textwidth, preset=\Large] +\ltjsetparameter{rubypostintrusion={`\】,-1}} +\ruby{鴎}{かもめ}】\ruby{隼}{はやぶさ}\\ +\hskip.25\zw 鴎】隼\\% 比較用 +% 「\ruby{鴎}{かもめ}」は,「】」にルビ半角だけ進入 +% →「\ruby{隼}{はやぶさ}」は「】」直前のJFMグルー +% には進入しない. +\end{LTXexample} \end{description} 以下の文字は\Param{rubypreintrusion},~\Param{rubypostintrusion}とも初期値は1である: \begin{quote} @@ -374,51 +424,51 @@ mode=9, stretch={1}{2}{1}, stretchruby={0}{0}{1} \end{quote} 次に,以下の文字は\Param{rubypreintrusion},~\Param{rubypostintrusion}とも初期値は0.5である: \begin{quote} - 中点類\@for\@tmp:=`\・,`\:,`\; \do{\mybox{\@tmp}} + 中点類\@for\@tmp:=`\・,`\:,`\; \do{\mybox={\@tmp}} \end{quote} また,以下の文字は\Param{rubypreintrusion}のみ初期値は$-1$である: -\begin{quote} +\begin{itemize} + \item 始め括弧類 - \@for\@tmp:=`\‘,`\“,`\〈,`\《,`\「,`\『,`\【,`\〔,`\〖,`\〘,`\〝,`\(,`\[,`\{,`\⦅ \do{\mybox{\@tmp}}\unskip, - 「文字コード$-1$の文字 - \footnote{段落開始の\ \cs{parindent}分インデントを表す. + \@for\@tmp:=`\‘,`\“,`\〈,`\《,`\「,`\『,`\【,`\〔,`\〖,`\〘,`\〝,`\(,`\[,`\{,`\⦅ \do{\mybox({\@tmp}}\unskip + \item 「文字コード$-1$の文字 + \footnote{ここでは段落開始の\ \cs{parindent}分インデントを表す. 通常の\LuaTeX-jaにおける指定では「文字コード$-1$」は文中数式境界を表していることに注意.}」 -\end{quote} +\end{itemize} さらに,以下の文字は\Param{rubypostintrusion}のみ初期値は$-1$である: -\begin{quote} - 閉じ括弧類 - \@for\@tmp:=`\’,`\”,`\〉,`\》,`\」,`\』,`\】,`\〕,`\〗,`\〙,`\〟,`\),`\],`\},`\⦆ \do{\mybox{\@tmp}}\unskip, - 句読点類\@for\@tmp:=`\、,`\,,`\。,`\. \do{\mybox{\@tmp}} -\end{quote} +\begin{itemize} + \item 閉じ括弧類 + \@for\@tmp:=`\’,`\”,`\〉,`\》,`\」,`\』,`\】,`\〕,`\〗,`\〙,`\〟,`\),`\],`\},`\⦆ \do{\mybox){\@tmp}} + \item 句読点類\@for\@tmp:=`\、,`\,,`\。,`\. \do{\mybox){\@tmp}} +\end{itemize} \makeatother 以上で記述されていない\Param{rubypreintrusion},~\Param{rubypostintrusion}の初期値はすべて0である. - \paragraph{\cs{ltjkenten}} 圏点を出力する命令であり, \begin{quote} \ttfamily\cs{ltjkenten}[<option>]\{親文字\} \end{quote} -のように使用する.複数文字に圏点をつける場合でも,\verb+\ltjruby+ のように「\texttt{|}」を使って -文字を区切る\textbf{必要はない}(\verb+\kenten+内では「\texttt{|}」は特別な意味を持たない) +のように使用する.複数文字に圏点をつける場合でも,\cs{ltjruby}のように「\texttt{|}」を使って +文字を区切る\emph{必要はない}(\cs{kenten}内では「\texttt{|}」は特別な意味を持たない) ことに注意してほしい. 圏点として出力される文字は\texttt{kenten}キーによって指定し, 圏点自身の大きさは(ルビと同様に)\texttt{size}キーで指定する. -\subsection{グループの\ruby{指|定}{し|てい}} +\subsection[グループの指定]{グループの\ruby{指|定}{し|てい}} \label{ssec:grp} \begin{quote} \ttfamily\cs{ltjruby}[<option>]\{親|文|字\}\{おや|も|じ\} \end{quote} -のように,\verb+\ltjruby+\ の第2・第3引数内の「\verb+|+」はグループの区切りを表す. +のように,\cs{ltjruby}の第2・第3引数内の「\texttt{|}」はグループの区切りを表す. グループの数は両者で一致しなければならず, \verb+\ltjruby{紋章}{もん|しよう}+ のようには\emph{できない}. 1グループのみのルビ(単純グループルビ)はグループルビとして組まれる.そのため, もしモノルビを使いたければ,面倒でも -\begin{LTXexample}[width=0.4\textwidth, preset=\Large] +\begin{LTXexample}[width=0.25\textwidth, preset=\Large] の\ltjruby{紋}{もん}\ltjruby{章}{しよう}が \end{LTXexample} のように,複数回使用すること. @@ -427,7 +477,7 @@ mode=9, stretch={1}{2}{1}, stretchruby={0}{0}{1} 実際には\TeX での長さの計算誤差($2^{-16}$~ptの整数倍として計算していることによる)を考慮し, 親文字全角の$1/1000$だけルビ文字列が長くなることを許容している. }であれば, -単純グループルビの並びとして扱われる.すなわち,次ページ冒頭の2行は全くの等価となる. +単純グループルビの並びとして扱われる.すなわち,次の2行は全くの等価となる. \begin{verbatim} \ltjruby{普|通|車}{ふ|つう|しや} \ltjruby{普}{ふ}\ltjruby{通}{つう}\ltjruby{車}{しや} @@ -439,20 +489,23 @@ mode=9, stretch={1}{2}{1}, stretchruby={0}{0}{1} \begin{verbatim} …の\ltjruby{表|現|力}{ひよう|げん|りよく}は… \end{verbatim} -という入力からは得られる組版結果は,次のいずれかになる. -\begin{center} - \begin{tabular}{ll} +という入力からは得られる組版結果は,\autoref{tab:group_ruby}のいずれかになる. +\begin{table}[t] +\centering\small + \begin{tabular}{lll} \toprule 改行なし(行中形)&\Large …の\ltjruby{表|現|力}{ひよう|げん|りよく}は…\\ 直前で改行&\Large \vrule \ltjruby[stretch=011]{表|現|力}{ひよう|げん|りよく}は…\\ -&\Large …の\ltjruby[stretch=110]{表}{ひよう} - \vrule\ltjruby[stretch=011]{現|力}{げん|りよく}は…\\ -&\Large …の\ltjruby[stretch=110]{表|現}{ひよう|げん} - \vrule\ltjruby[stretch=011]{力}{りよく}は…\\ + 途中で改行&\Large …の\ltjruby[stretch=110]{表}{ひよう} + \vrule\ltjruby[stretch=011]{現|力}{げん|りよく}は… + &\Large …の\ltjruby[stretch=110]{表|現}{ひよう|げん} + \vrule\ltjruby[stretch=011]{力}{りよく}は…\\ 直後に改行&\Large …の\ltjruby[stretch=110]{表|現|力}{ひよう|げん|りよく}\vrule\\ \bottomrule \end{tabular} -\end{center} + \caption{可動グループルビの組まれ方(縦線は行の境目)} + \label{tab:group_ruby} +\end{table} \begin{itemize} \item これらの行分割によってペナルティは発生しない. \item 上記の例で見られるように, @@ -481,44 +534,44 @@ mode=9, stretch={1}{2}{1}, stretchruby={0}{0}{1} \item \cs{kenten}がすでに定義されていない場合に限り,\cs{kenten}が\cs{ltjkenten}の別名として定義される. \end{itemize} -\section{\ruby{注|意|点}{ちゆう|い|てん}} +\section[注意点]{\ruby{注|意|点}{ちゆう|い|てん}} \paragraph{前後からのルビ文字のはみ出し1} 「日本語組版処理の要件」の図117\footnote{2020-08-11版での番号.2012-04-03版では図3.82.}のように, 前後からのルビ文字のはみ出しが繋がらないようにする処理が組み込まれている. 例えば, -\begin{LTXexample}[preset=\Large,width=0.3\textwidth] +\begin{LTXexample}[preset=\Large,width=0.25\textwidth] \ltjruby{陵}{りよう}と\ltjruby{陵}{みささぎ}\\ \ltjruby{陵}{りよう}と\ltjruby[pre=1]{陵}{みささぎ} \end{LTXexample} において,1行目右側の「\ltjruby{陵}{みささぎ}」のルビが前の「と」にかかる量は次のように決まる: \begin{enumerate} -\item 1回目の実行では,行分割前に「\ltjruby{陵}{りよう}」の\underline{後文字進入量}は前もって知ることはでき +\item 1回目の実行では,行分割前に「\ltjruby{陵}{りよう}」の\ActIntr{後文字進入量}は前もって知ることはでき ない.そのため,「\ltjruby{陵}{りよう}」は行中形で組まれるものと想定し, 「\ltjruby{陵}{みささぎ}」の前文字進入許容量は \[ \underbrace{0.5\,\mathrm{zw}}_{\text{元々の許容量}} --\underbrace{0.25\,\mathrm{zw}}_{\text{前のルビの\underline{後文字進入量}(行中形)}}=0.25\,\mathrm{zw} +-\underbrace{0.25\,\mathrm{zw}}_{\text{前のルビの\ActIntr{後文字進入量}(行中形)}}=0.25\,\mathrm{zw} \] -となる.行分割後,「\ltjruby{陵}{りよう}」の実際の\underline{後文字進入量}は +となる.行分割後,「\ltjruby{陵}{りよう}」の実際の\ActIntr{後文字進入量}は <jobname>\texttt{.ltjruby}ファイルに記述される. -\item 2回目以降の実行では,<jobname>\texttt{.ltjruby}ファイルに保存された「\ltjruby{陵}{りよう}」の\underline{後文字進入量} -を用いて,「\ltjruby{陵}{みささぎ}」の\underline{前文字進入許容量}を次のように計算する: +\item 2回目以降の実行では,<jobname>\texttt{.ltjruby}ファイルに保存された「\ltjruby{陵}{りよう}」の\ActIntr{後文字進入量} +を用いて,「\ltjruby{陵}{みささぎ}」の\ActIntr{前文字進入許容量}を次のように計算する: \[ \underbrace{0.5\,\mathrm{zw}}_{\text{元々の許容量}} --\underbrace{0.25\,\mathrm{zw}}_{\text{前のルビの\underline{後文字進入量}(from \texttt{.ltjruby})}}=0.25\,\mathrm{zw}. +-\underbrace{0.25\,\mathrm{zw}}_{\text{前のルビの\ActIntr{後文字進入量}(from \texttt{.ltjruby})}}=0.25\,\mathrm{zw}. \] \end{enumerate} -<jobname>\texttt{.ltjruby}ファイルに保存する際,各 \verb+\ltjruby+ 命令の呼び出しを識別するキーが必要になるが, -そのキーとしては単純に「何個目の \verb+\ltjruby+ 命令か」である. +<jobname>\texttt{.ltjruby}ファイルに保存する際,各\cs{ltjruby}命令の呼び出しを識別するキーが必要になるが, +そのキーとしては単純に「何個目の\cs{ltjruby}命令か」である. なお,以上の処理は,1行目と2行目を比較すれば分かるように, -「\ltjruby{陵}{みささぎ}」の\emph{\underline{前文字進入許容量}指定(\texttt{pre})が自動}になっている場合のみ -実施される. - +「\ltjruby{陵}{みささぎ}」の\emph{\ActIntr{前文字進入許容量}指定が自動(\texttt{pre}の値が負)}に +なっている場合のみ実施される. +\newpage \paragraph{前後からのルビ文字のはみ出し2} -また,本パッケージのv0.**以降では,「日本語組版処理の要件」にある +また,本パッケージでは,「日本語組版処理の要件」にある \begin{quote} 後ろにくる終わり括弧類,句点類若しくは読点類,又は前にくる始め括弧類には, 最大でルビ文字サイズの全角までルビ文字を掛けてもよい. @@ -533,17 +586,17 @@ mode=9, stretch={1}{2}{1}, stretchruby={0}{0}{1} これは,段落の「本当の」末尾には \verb+\penalty10000\parfillskip+ があるためで, ルビ処理用に作った最後のグルー(\ref{ssec:impl}\nobreak 小節の説明では$g_2$)が消去されないことによる. -\verb+\parfillskip+ の長さ(や,場合によっては \verb+\rightskip+)を実測し, +\cs{parfillskip}(や,場合によっては\cs{rightskip})の長さを実測し, それによって処理を変えるのも可能だが,そのようなことはしなかった. -段落がルビで終わることは普通ない(最低でも句点が続くだろう)と思うからである. +段落がルビで終わることは普通ない(最低でも句点が続くだろう)と考えられるからである. \paragraph{段落先頭のルビ} 同様に,段落先頭のルビは行頭形にはならない. -\texttt{pre}が負(つまり,自動指定)のとき,段落最初の \verb+\parindent+ 分への -進入は可能である.ここ\verb+\parindent+ 分のインデントへの\underline{進入許容量}は +\texttt{pre}が負(つまり,自動指定)のとき,段落最初の\cs{parindent}分への +進入は可能である.この\cs{parindent}分のインデントへの\ActIntr{進入許容量}は 「文字$-1$」に対する\Param{rubypreintrusion}(既定値は1,ルビ全角単位)と -\ \verb+\parindent+ の長さのうち小さい方である. -\begin{LTXexample}[preset=\Large,width=0.4\textwidth] +\cs{parindent}の長さのうち小さい方である. +\begin{LTXexample}[preset=\Large,width=0.25\textwidth] \parindent1\zw\noindent 012345\par \ltjruby{陵}{みささぎ}は……\par \ltjruby{承}{うけたまわ}り……\par @@ -561,54 +614,52 @@ mode=9, stretch={1}{2}{1}, stretchruby={0}{0}{1} 例えば,標準設定での中黒「・」の直後のルビからの中黒への進入許容量は \begin{quote} - 中黒「・」への\underline{前進入許容量}はルビ全角の半分で, + 中黒「・」への\ActIntr{前進入許容量}はルビ全角の半分で, 中黒本体の後の四分空きには進入可能 \end{quote} となっている.そのため,下の例の1, 2行目ともルビの前進入量は0.5\,zwとなる. しかし,2行目では詰め量の0.5\,zwがほとんど中黒周囲の四分空きで負担されるため, 実際には「中黒本体にほぼ0.5\,zwが進入する」という望ましくない結果が得られている. + \typeout{===========} \begin{LTXexample}[preset=\Large,width=0.4\textwidth] \leavevmode\hbox{あ・\ltjruby{◆}{◆◆◆◆}漢字}\\ \hbox spread-0.5\zw{あ・\ltjruby{◆}{◆◆◆◆}漢字} \end{LTXexample} -また,次の例では2行目では前後の\underline{文字進入量}がルビ1字分と等しくなっているが, -3行目のように1全角伸ばすという調整が行われた後は\underline{文字進入量}が不揃いになってしまっている. +また,次の例では2行目では前後の\ActIntr{文字進入量}がルビ1字分と等しくなっているが, +3行目のように1全角伸ばすという調整が行われた後は\ActIntr{文字進入量}が不揃いになってしまっている. これはもともと「\texttt{;}」には後側にのみ和欧文間空白が入ることと,3行目ではこの和欧文間空白が 伸びているためである. -\begin{LTXexample}[preset=\Large,width=0.4\textwidth] -\leavevmode\hbox{……に% - \ltjruby{\texttt{;}}{セミコロン}という……}\\ -\hbox spread\zw{……に% - \ltjruby{\texttt{;}}{セミコロン}という……} +\begin{LTXexample}[preset=\Large,width=0.25\textwidth] +\leavevmode\hbox{に\ltjruby{\texttt{;}}{セミコロン}という}\\ +\hbox spread\zw{に\ltjruby{\texttt{;}}{セミコロン}という} \end{LTXexample} -\newpage -\section{\ruby{実|装}{じつ|そう}について} +\section[実装について]{\ruby{実|装}{じつ|そう}について} \subsection{進入量の計算} \label{ssec:calc_intrusion} ルビ文字を自然に組んだときの幅が親文字のそれより多い場合, ルビの前後への進入量は次のように決定される. \begin{enumerate}[label=\emph{Step~\arabic*},labelindent=0pt,itemindent=*,itemsep=\medskipamount] - \item \underline{前文字進入許容量}$B_0$,\underline{後進入文字許容量}$A_0$の算出. + \item \ActIntr{前文字進入許容量}$B_0$,\ActIntr{後進入文字許容量}$A_0$の算出. ルビ全角の長さを$r$とする. \begin{enumerate} - \item \texttt{pre}の指定値が非負であった場合は,それに$r$を掛けたものを$B_0$とする.\\ + \item \texttt{pre}の指定値が非負であった場合は,それに$r$を掛けたものを$B_0$とする. + そうでなかった場合は,「ルビの直前の文字」に対する - \Param{rubypreintrusion}の値に$r$を掛けたものを$B_0$とする + \Param{rubypreintrusion}の絶対値に$r$を掛けたものを$B_0$とする \footnote{% なお,「ルビの直前の文字」が段落最初の\cs{parindent}分のインデントであった場合, $B_0$を,「文字コード$-1$の文字」\Param{rubypreintrusion}の値に$r$を掛けた値と\cs{parindent}のうち 小さい方とする. - }. + }.ここで,もし2つ前の文字がルビで,その直後(つまりいま処理しているルビから見れば直前) + の文字へ$a'$だけの進入があった場合,現在のルビについて$B_0←\min(0,B_0-a')$とする. \item \texttt{post}の指定値が非負であった場合は,それに$r$を掛けたものを$A_0$とする.\\ そうでなかった場合は,「ルビの直後の文字」に対する - \Param{rubypostintrusion}の値にルビ全角の値を掛けたものを$A_0$とする. - \item \texttt{mode}の最下位ビット(bit~0)が0であった場合は,$B_0\leftarrow 0$, $A\leftarrow 0$とする. - \item もし2つ前の文字がルビで,その直後(つまりいま処理しているルビから見れば直前) - の文字へ$a'$だけの進入があった場合,現在のルビについて$B_0←\min(0,B_0-a')$とする. + \Param{rubypostintrusion}の絶対値にルビ全角の値を掛けたものを$A_0$とする. + \item \texttt{mode}の最下位ビット(bit~0)が0であった場合は,$B_0\leftarrow 0$, $A_0\leftarrow 0$とする. \end{enumerate} \item 前進入許容量$B$,後進入許容量$A$の算出. \begin{enumerate} @@ -624,8 +675,8 @@ mode=9, stretch={1}{2}{1}, stretchruby={0}{0}{1} それぞれ$g$の自然長を$B$に加算する. ルビとその直後の文字との間に和文処理グルーが挿入された場合も同様である. - - \item \texttt{mode}の2番目のビット(bit~1)が0であった場合は,$B$,~$A\leftarrow \min(B,A)$とする. + + \item \texttt{mode}の2番目のビット(bit~1)が1であった場合は,$B$,~$A\leftarrow \min(B,A)$とする. \end{enumerate} \item 実際の前進入量$b$,後進入量$a$の計算. @@ -704,21 +755,28 @@ mode=9, stretch={1}{2}{1}, stretchruby={0}{0}{1} \end{LTXexample} \begin{enumerate} -\item \verb|\ltjruby|コマンド自体は,一旦次のnode listを値とするwhatsit~$W$を作って, -現在の水平リストへと挿入する(必要ならば\verb|\leavevmode|も実行): +\item \cs{ltjruby}命令自体は,一旦次のnode listを値とするwhatsit~$W$を作って, +現在の水平リストへと挿入する(必要ならば\cs{leavevmode}も実行): \[ \Node{whatsit $w$}{value: 2}\longrightarrow \Node{hlist $s_1$}{「りゆう」}\longrightarrow \Node{hlist $p_1$}{「流」}\longrightarrow \Node{hlist $s_2$}{「ちよう」}\longrightarrow - \Node{hlist $p_2$}{「暢」} + \Node{hlist $p_2$}{「暢」}\longrightarrow + \Node{kern $k_b$}{}\longrightarrow + \Node{kern $k_a$}{} \] ここで,最初の$w$の値2は,ルビが2つのパーツ「\ltjruby{流}{りゆう}」「\ltjruby{暢}{ちよう}」からなっていることを 表している.この値を$\mathit{cmp}$とおこう. $s_i$達の中の文字は既にルビの大きさである. + +また,$k_b$,~$k_a$は\texttt{always\_highlight\_protrusion}キーが偽の場合にのみ生成されるが, +実際に使われるのは行分割後になってからである.\Pkg{lua-ul}対応のためには,和文処理グルーの挿入処理で +「前・後のクラスタそれぞれとのattributeの共通部分」を保存する必要があり,この段階でノードとして$k_b$,~$k_a$を +準備している. \item \LuaTeX-jaの和文処理グルー挿入処理において, このwhatsit~$W$はまとめて -「先頭が『流』,最後が『暢』であるようなhboxを \verb|\unhbox| で展開したもの」と扱われる. +「先頭が『流』,最後が『暢』であるようなhboxを\cs{unhbox}で展開したもの」と扱われる. 言い換えれば,ルビ部分を無視した単なる「流暢」という和文文字の並びとして扱われる\footnote{「流」「暢」の間のグルーは既に入っている,と扱われる.}. 次のサンプルを参照 \begin{LTXexample}[preset=\Large] @@ -729,7 +787,10 @@ $s_i$達の中の文字は既にルビの大きさである. \end{LTXexample} \item 和文処理グルーの挿入が終わった後で,可動グループルビのためのノードの挿入に入る. \begin{enumerate} -\item $W$の前後に$2\mathit{cmp}+1=5$個のノードが挿入され,$W$の周辺は次のようなノード列になる. +\item $W$の前後に$2\mathit{cmp}+1=5$個のノードが挿入され,$W$の周辺は次のようなノード列になる + \footnote{% + $r_2$と$g_2$の間には,ルビと直後の文字の間にある禁則処理のためのペナルティなどが入っているかもしれない. + }. \begin{align*} (\text{other nodes})&\longrightarrow \Node{glue $g_0$}{}\longrightarrow \Node{whatsit~$W$}{元からある}\longrightarrow \Node{rule $r_1$}{} @@ -743,14 +804,14 @@ $s_i$達の中の文字は既にルビの大きさである. \begin{gather*} (\text{other nodes})\longrightarrow \Node{glue $g_0$}{}\longrightarrow \Node{whatsit~$W$}{元からある}\longrightarrow \Node{rule $r_1$}{}\\ -\noalign{\hrulefill 行の境目\hrulefill} +\noalign{\leavevmode\hskip 2\zw\hrulefill 行の境目\hrulefill\kern 2\zw\null} \Node{rule $r_2$}{}\longrightarrow \Node{glue $g_2$}{}\longrightarrow (\text{other nodes}) \end{gather*} のようになったとしたら,「\ltjruby{流}{りゆう}」「\ltjruby{暢}{ちよう}」の間で行分割が起きた,ということがわかり, $g_i$,~$r_i$達のノードを適切に置き換えればよい(後で詳しく説明する). -\begin{figure}\centering\small +\begin{table}\centering\small \begin{tabular}{cllll} \toprule \multicolumn{1}{c}{\bf ノード}&\multicolumn{1}{c}{\bf 組み方}&\multicolumn{1}{c}{\bf サンプル}% @@ -766,16 +827,16 @@ $n_2$&行末2グループ& \fbox{を}{\color{blue!50!black}\gt\ltjruby[pre=1,mode=1,stretch=110]{流|暢}{りゆう|ちよう}}\vrule & $g_0\rightarrow W\rightarrow r_1\rightarrow g_2 \rightarrow r_2$\\ -$n_3$&行頭1グループ& -\Large -\vrule{\color{blue!50!black}\gt\ltjruby[post=1,mode=1,stretch=011]{暢}{ちよう}}\fbox{に} -& -$r_2\rightarrow g_2$\\ -$n_4$&行頭2グループ& +$n_3$&行頭2グループ& \Large \vrule{\color{blue!50!black}\gt\ltjruby[post=1,mode=1,stretch=011]{流|暢}{りゆう|ちよう}}\fbox{に} & $W\rightarrow r_1\rightarrow g_2 \rightarrow r_2\rightarrow g_2$\\ +$n_4$&行頭1グループ& +\Large +\vrule{\color{blue!50!black}\gt\ltjruby[post=1,mode=1,stretch=011]{暢}{ちよう}}\fbox{に} +& +$r_2\rightarrow g_2$\\ $n_5$&行中& \Large \fbox{を}{\color{blue!50!black}\gt\ltjruby[post=0.5,pre=0.5,mode=1]{流|暢}{りゆう|ちよう}}\fbox{に} @@ -785,32 +846,31 @@ $g_0\rightarrow W\rightarrow r_1\rightarrow g_2 \rightarrow r_2\rightarrow g_2$\ \bottomrule \end{tabular} \caption{ルビの組み方と対応するノード並び} -\label{fig:node} -\end{figure} +\label{tab:node} +\end{table} \item なお,$r_i$達の高さ・深さは組み上がった後のそれである. -$g_i$,~$r_i$達の幅は,図\nobreak\ref{fig:node}に示したような対応に沿って算出する. -例えばこの場合,行中形$n_5$に対して +$g_i$,~$r_i$達の幅は,\autoref{tab:node}に示したような対応に沿って算出する. +例えば,行中形$n_5$に対して,記号は乱用気味であるが, \[ g_0+r_1+g_2+r_2+g_2 = (3-0.25\times 2)\,\mathrm{zw}=2.5\,\mathrm{zw} \] -という方程式が立つ(zwは親文字全角の幅,進入量込). -$n_1$から$n_5$まで計5本の方程式が立つが,これらはGau\ss の消去法で解くことができて -$g_i$,~$r_i$達の幅が求まる. +という方程式が立つ(zwは親文字全角の幅,引き算は進入量の分). +方程式と未知数($g_i$,~$r_i$達の幅)はどちらも$2\mathit{cmp}+1$であるので, +Gau\ss の消去法により$g_i$,~$r_i$達の幅が求まる. \item また,ルビ処理を統括しているwhatsit~$W$の値も -\[ - \Node{whatsit $w$}{value: 2}\longrightarrow - \Node{vlist $n_1$}{末1}\longrightarrow - \Node{vlist $n_2$}{末2}\longrightarrow - \Node{vlist $n_3$}{頭1}\longrightarrow - \Node{vlist $n_4$}{頭2}\longrightarrow - \Node{vlist $n_5$}{中} -\] +\begin{align*} + \Node{whatsit $w$}{value: 2} + &\longrightarrow\Node{vlist $n_1$}{末1}\longrightarrow\Node{vlist $n_2$}{末2} + \longrightarrow\Node{vlist $n_3$}{頭2}\longrightarrow\Node{vlist $n_4$}{頭1} + \longrightarrow\Node{vlist $n_5$}{中}\\ + &\longrightarrow\Node{kern $k_b$}{}\longrightarrow\Node{kern $k_a$}{} +\end{align*} に置き換えておく. \end{enumerate} -\item \LuaTeX の行分割処理を普通に行う. +\item \LuaTeX の行分割処理を通常通りに行う. \item 行分割の結果に従って,$g_i$,~$r_i$達を適切に置換する. 例えば行分割の結果 @@ -818,7 +878,7 @@ $g_i$,~$r_i$達の幅が求まる. (\text{other nodes})\longrightarrow \Node{glue $g_0$}{}\longrightarrow \Node{whatsit~$W$}{元からある}\longrightarrow \Node{rule $r_1$}{} \tag{行A}\\ -\noalign{\hrulefill 行の境目\hrulefill} +\noalign{\leavevmode\hskip 2\zw\hrulefill 行の境目\hrulefill\kern 2\zw\null} \Node{rule $r_2$}{}\longrightarrow \Node{glue $g_2$}{}\longrightarrow (\text{other nodes})\tag{行B} \end{gather*} @@ -833,25 +893,32 @@ $g_i$,~$r_i$達の幅が求まる. $g_0$,~($W$,)~$r_1$というノードの並びは,「行末1グループ」$n_1$に対応しているので, $g_0$,~$r_1$を行Aから除去・メモリ解放し,代わりに$n_1$を行Aの中身に追加する. +\item +\texttt{always\_highlight\_protrusion}キーが偽であり,かつルビの前への突出量から\ActIntr{前文字進入量}を引いた値 + $\mathit{prot\_b}$が0でない場合は,$n_1$の直前にkern~$k_b$(長さ$\mathit{prot\_b}$)と,それを打ち消すkern(長さ$-\mathit{prot\_b}$)を挿入する. + \item 次に行Bの処理にうつる.行Aでルビの処理は完了していない(2グループのルビなのにまだ1グループしか使っていない)ので, 「whatsit~$W$由来」のノードがいくつか行B内に残っているはずである. -案の定,$r_2$,~$g_2$というノード列が見つかった.これは「行頭1グループ」$n_3$に対応しているので, -$r_2$,~$g_2$を行Bから除去・メモリ解放し,代わりに$n_3$を行Bの中身に挿入する. - +案の定,$r_2$,~$g_2$というノード列が見つかった.これは「行頭1グループ」$n_4$に対応しているので, +$r_2$,~$g_2$を行Bから除去・メモリ解放し,代わりに$n_4$を行Bの中身に挿入する. +\texttt{always\_highlight\_protrusion}キーが偽であったときは,行Aのときと同様にkernを2つ挿入する. + \item これで2グループとも使い切ったことになるので, 隔離しておいた$W$を,(使われなかった$n_2$,~$n_4$,~$n_5$などと共に)メモリ解放する.結果として -次のようになった: +次のようになる. \begin{gather*} - (\text{other nodes})\longrightarrow - \Node{vlist $n_1$}{末1}\tag{行A}\\ -\noalign{\hrulefill 行の境目\hrulefill} -\Node{vlist $n_3$}{頭1}\longrightarrow (\text{other nodes})\tag{行B} + (\text{other nodes})\longrightarrow \Node{kern~$k_b$}{$\mathit{prot\_b}$} + \longrightarrow \Node*{kern}{$-\mathit{prot\_b}$}\longrightarrow \Node*{vlist $n_1$}{末1}\tag{行A}\\ +\noalign{\leavevmode\hskip 2\zw\hrulefill 行の境目\hrulefill\kern 2\zw\null} +\Node*{vlist $n_4$}{頭1}\longrightarrow \Node*{kern}{$-\mathit{prot\_a}$} + \longrightarrow \Node{kern~$k_a$}{$\mathit{prot\_a}$}\longrightarrow (\text{other nodes})\tag{行B} \end{gather*} + ここで,色付きの4ノードは,\Pkg{lua-ul}パッケージの提供する「下線」命令が + \cs{ltjruby}のみを有効範囲として発行された場合の,「下線」がかかってくるノードたちである. \end{enumerate} \end{enumerate} -\newpage \section{いくつかの例} \def\rubytest{\ruby{黄金橋}{ゴールデンゲートブリッジ}\relax} @@ -949,7 +1016,6 @@ $r_2$,~$g_2$を行Bから除去・メモリ解放し,代わりに$n_3$を行B \item[肩つき] {\ltjsetruby{kata}\sample} \end{description} -\newpage \begin{LTXexample}[pos=t] {\ltjsetruby{stretch=101}% 親文字均等割り禁止 \ruby{休|憩|中}{きゆう|けい|ちゆう}かつ\ruby{視|聴|中}{し|ちよう|ちゆう}% @@ -961,7 +1027,6 @@ $r_2$,~$g_2$を行Bから除去・メモリ解放し,代わりに$n_3$を行B \end{LTXexample} -\typeout{AAAAAA} \setbox0=\vbox{\hsize20\zw \ltjsetparameter{rubypreintrusion={`◆,1}} \ltjsetparameter{rubypostintrusion={`◆,1}} @@ -1005,6 +1070,18 @@ $r_2$,~$g_2$を行Bから除去・メモリ解放し,代わりに$n_3$を行B } \fbox{\box0} +\medskip +\begin{LTXexample}[pos=t] +% lua-ul +たとえば\strikeThrough{\ruby{取|消|線}{とりけしの|いちじゆう|せん}を}引いてみる. +\strikeThrough{\ruby{取|消|線}{とりけしの|いちじゆう|せん}}だとどうかな + +\ltjsetparameter{prebreakpenalty={`な,2893}}% デバッグ用.あっても正常動作を確認. +\highLight{周囲が}\ruby{aaaaaaaaaaa}{全く}\highLight{ない} +ああああああああああああああああああああああああああ +周囲が\highLight{\ruby{あ|い|う|え}{おそらく|きっと|たぶん|maybe}}ないと思う +\end{LTXexample} + \newpage \section{『日本語組版処理の要件』20120403の例} @@ -1053,7 +1130,6 @@ $r_2$,~$g_2$を行Bから除去・メモリ解放し,代わりに$n_3$を行B \obeylines 3.62 の\ruby{葯}{やく}に 3.63 版面の\ruby{地}{ち}に\quad 版面の\ruby[kata]{地}{ち}に -% 横組肩つきはしないが,現状では縦組未サポートだし,仕方ないね 3.65 の\ruby{砦}{とりで}に {\ltjsetruby{kata}% 3.66上 の\ruby{旬}{しゆん}に\quad 後\ruby{旬}{しゆん}に @@ -1094,29 +1170,32 @@ $r_2$,~$g_2$を行Bから除去・メモリ解放し,代わりに$n_3$を行B の\ruby{成|就}{じよう|じゆ}を\quad の\ruby{紋|章}{もん|しよう}を\quad% の\ruby{象|徴}{しよう|ちよう}を} % モノルビ配置.望ましくない -3.76× の\ruby{流}{りゆう}\ruby{儀}{ぎ}を\quad の\ruby{無}{む}\ruby{常}{じよう}を\quad% - -3.77 {\ltjsetruby{stretchbol=121, stretcheol=121}% 行頭・行末揃えず - \hbox{\vrule\vbox{\hsize=10\zw\noindent\kern.75\zw - あああああああの\ruby{流|儀}{りゆう|ぎ}がある.}\vrule}\quad% +3.76× の\ruby{流}{りゆう}\ruby{儀}{ぎ}を\quad の\ruby{無}{む}\ruby{常}{じよう}を +3.77 {\ltjsetruby{stretchbol=121, stretcheol=121}% 行頭・行末揃えず + \hbox{\vrule\vbox{\hsize=5.25\zw ……等を\ruby{流|儀}{りゆう|ぎ}が}\vrule}\quad% \hbox{\vrule\vbox{\hsize=5\zw ……等の\ruby{無|常}{む|じよう}を}\vrule}} \end{LTXexample} \paragraph{3.3.8節 ルビはみ出し}\ \begin{LTXexample}[pos=t] -\obeylines +\obeylines\RULER{3.78}{4} 3.78 \ruby{人}{ひと}は\ruby{死}{し}して\ruby{名}{な}を\ruby{残}{のこ}す 3.79 漢字の部首には\ruby{偏}{へん}・\ruby{冠}{かんむり}・\ruby{脚}{きやく}・% \ruby{旁}{つくり}がある +3.79 {\ltjsetparameter{rubypreintrusion={`\,,1}}% +漢字の部首には\ruby{偏}{へん},\ruby{冠}{かんむり},\ruby{脚}{きやく},% +\ruby{旁}{つくり}がある} +% 上が『要件』にある例.標準(下)では句読点の直前にはルビがかからない. 3.79 漢字の部首には\ruby{偏}{へん},\ruby{冠}{かんむり},\ruby{脚}{きやく},% - \ruby{旁}{つくり}がある +\ruby{旁}{つくり}がある \end{LTXexample} \begin{LTXexample}[pos=t] -\obeylines +\obeylines\RULER{3.79}{9} 3.79 この\ruby{\噂}{うわさ}の好きな人は\ruby{懐}{ふところ}ぐあいもよく、\ruby{檜}{ひのき}を 3.80 漢字の部首には「\ruby{偏}{へん}」「\ruby{冠}{かんむり}」「\ruby{脚}{きやく}」% 「\ruby{旁}{つくり}」がある -3.80 この\ruby{\噂}{うわさ}好きな人は\ruby{懐}{ふところ}具合もよく、\ruby{檜}{ひのき}材を +3.80 {\ltjsetparameter{rubypreintrusion={`\,,1}}% +この\ruby{\噂}{うわさ}好きな人は\ruby{懐}{ふところ}具合もよく、\ruby{檜}{ひのき}材を} 3.81× に\ruby{暁}{あかつき}の\kern-1\zw の\ruby{趣}{おもむき}を(良くない例) 3.82 に\ruby{暁}{あかつき}の\ruby{趣}{おもむき}を diff --git a/macros/luatex/generic/luatexja/doc/luatexja.dtx b/macros/luatex/generic/luatexja/doc/luatexja.dtx index b550dc58d4..cefd739386 100644 --- a/macros/luatex/generic/luatexja/doc/luatexja.dtx +++ b/macros/luatex/generic/luatexja/doc/luatexja.dtx @@ -1467,14 +1467,19 @@ Alphabetic fonts &\cs{fontspec}&\cs{setmainfont}&\cs{setsansfont}&\cs{setmonofont}\\ \midrule Japanese fonts -&\cs{newjfontfamily}&\cs{renewjfontfamily}&\cs{setjfontfamily}\\ +&\cs{newjfontfamily}&\cs{renewjfontfamily}&\cs{setjfontfamily}&\cs{providejfontfamily}\\ Alphabetic fonts -&\cs{newfontfamily}&\cs{renewfontfamily}&\cs{setfontfamily}\\ +&\cs{newfontfamily}&\cs{renewfontfamily}&\cs{setfontfamily}&\cs{providefontfamily}\\ \midrule Japanese fonts -&\cs{newjfontface}&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\ +&\cs{newjfontface}&\cs{renewjfontface}&\cs{setjfontface}&\cs{providejfontface}\\ Alphabetic fonts -&\cs{newfontface}&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\ +&\cs{newfontface}&\cs{renewfontface}&\cs{setfontface}&\cs{providefontface}\\ +\midrule +Japanese fonts +&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\ +Alphabetic fonts +&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\ \bottomrule \end{tabular}\par} \end{table} @@ -1492,14 +1497,19 @@ Alphabetic fonts &\cs{fontspec}&\cs{setmainfont}&\cs{setsansfont}&\cs{setmonofont}\\ \midrule \emph{和文} -&\cs{newjfontfamily}&\cs{renewjfontfamily}&\cs{setjfontfamily}\\ +&\cs{newjfontfamily}&\cs{renewjfontfamily}&\cs{setjfontfamily}&\cs{providejfontfamily}\\ \emph{欧文} -&\cs{newfontfamily}&\cs{renewfontfamily}&\cs{setfontfamily}\\ +&\cs{newfontfamily}&\cs{renewfontfamily}&\cs{setfontfamily}&\cs{providefontfamily}\\ \midrule \emph{和文} -&\cs{newjfontface}&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\ +&\cs{newjfontface}&\cs{renewjfontface}&\cs{setjfontface}&\cs{providejfontface}\\ \emph{欧文} -&\cs{newfontface}&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\ +&\cs{newfontface}&\cs{renewfontface}&\cs{setfontface}&\cs{providefontface}\\ +\midrule +\emph{和文} +&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\ +\emph{欧文} +&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\ \bottomrule \end{tabular}\par} \end{table} @@ -1910,7 +1920,7 @@ these eight ranges belongs to the character range~217. \label{tab:rng9} \centering\footnotesize \def\ch#1{% - {\fboxsep0pt\fcolorbox{cyan}{white}% + {\fboxsep0pt\fcolorbox{b_cyan}{white}% {\normalsize\KOZM\UTF{20#1}}}\ (\texttt{U+20#1})} %" % 13: JIS X0213, AJ, Adobe-Japan-1 only \begin{tabular}{ll>{\color{white}}lll>{\color{white}}l} @@ -2520,7 +2530,7 @@ For the detail, see \autoref{tab:kcat}. \begin{table}[t] \small -\caption{\cs{kcatcode} in \upTeX} +\caption{\cs{kcatcode} in \upTeX~u1.30} \label{tab:kcat} %<en>\medskip @@ -2639,7 +2649,7 @@ to allow these characters in the control word. %<en>\medskip \label{tab:kcat-diff} \def\D#1#2#3#4{% - {\fboxsep0pt\fcolorbox{cyan}{white}% + {\fboxsep0pt\fcolorbox{b_cyan}{white}% {\large\char"#1#2#3#4}}\ (\texttt{U+#1#2#3#4})} %" \leavevmode\hbox to 0pt{\hss\begin{tabular}[t]{cccccc} \toprule @@ -2698,7 +2708,7 @@ to allow these characters in the control word. %<*en> \subsection{Non-kanji characters in a control word} {\def\D#1{% - {\fboxsep0pt\fcolorbox{cyan}{white}{#1}}}% + {\fboxsep0pt\fcolorbox{b_cyan}{white}{#1}}}% Because the engine differ, so non-kanji JIS~X~0208 characters which can be used in a control word differ in \pTeX, in \upTeX,~and~in \LuaTeX-ja. \autoref{tab:kcat-diff} shows the difference. @@ -3752,9 +3762,9 @@ This means the following two lines have the same meaning: \jfont\hoge=hogem:jfm=ujis;-kern at 3.5mm % ==> kern 無効(明示) \jfont\hoge=hogem:jfm=ujis at 3.5mm % ==> kern 有効(暗黙) \jfont\hoge=hogem:jfm=ujis;+kern at 3.5mm % ==> kern 有効(明示) -\DeclareFontShape{JY3}{fuga}{m}{n}{<-> s*hogem:jfm=-ujis}{} % ==> kern 無効(明示) -\DeclareFontShape{JY3}{fuga}{m}{n}{<-> s*hogem:jfm=ujis}{} % ==> kern 有効(暗黙) -\DeclareFontShape{JY3}{fuga}{m}{n}{<-> s*hogem:jfm=ujis+kern}{}% ==> kern 有効(明示) +\DeclareFontShape{JY3}{fuga}{m}{n}{<-> s*hogem:jfm=ujis;-kern}{} % ==> kern 無効(明示) +\DeclareFontShape{JY3}{fuga}{m}{n}{<-> s*hogem:jfm=ujis}{} % ==> kern 有効(暗黙) +\DeclareFontShape{JY3}{fuga}{m}{n}{<-> s*hogem:jfm=ujis;+kern}{} % ==> kern 有効(明示) \end{lstlisting} \item バージョン20220411.0以降では,\LuaTeX-ja読み込み時や,\Pkg{ltjclasses}, \Pkg{ltjsclasses}において @@ -3765,7 +3775,7 @@ This means the following two lines have the same meaning: \ltj@stdmcfont:-kern;jfm=\ltj@stdyokojfm}{} \end{lstlisting} とOpenType機能\texttt{kern}を明示的に無効化した状態で定義する. - これは標準JFM(\texttt{jfm-ujis.lua}, \texttt{jfm-ujisv.lua})が + これは標準JFM\ (\texttt{jfm-ujis.lua}, \texttt{jfm-ujisv.lua})が フォント由来のカーニングが入ることを期待していないためである. \item @@ -4061,7 +4071,7 @@ A font defined by~\cs{tfont} differs the following points from that by~\cs{jfont \end{figure} \begin{table}[t] \def\D#1#2#3#4{% - {\fboxsep0pt\fcolorbox{cyan}{white}% + {\fboxsep0pt\fcolorbox{b_cyan}{white}% {\large\lower-\cdp\hbox{\tate\ltjjachar"#1#2#3#4}}}\ (\texttt{U+#1#2#3#4})%" } \caption{\texttt{jpotf}が指定された際に行われる追加の縦組形への置換} @@ -4852,7 +4862,7 @@ Hence we have the following result: %<*ja> (任意,バージョン2以降) -優先順位付き行長調整が有効であり,かつ現在の文字クラスの文字が + 行末文字の位置調整が有効であり,かつ現在の文字クラスの文字が 行末に来た時に,この文字と行末の間には指定された値のいずれかの大きさのカーンが 挿入される(\autoref{ssec:adj}参照). @@ -7541,7 +7551,7 @@ JFMの\texttt{chars}テーブルのエントリとして \verb+'AJ1-xxx'+ の形 \def\outbox#1{{\Large% \ltjsetparameter{kanjiskip=0pt plus .2\zw minus .2\zw}% \setbox\gridbox=\hbox to 20\zw{\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb}% - \hbox{\textcolor{cyan}{\copy\gridbox}\hskip-20\zw% + \hbox{\textcolor{b_cyan}{\copy\gridbox}\hskip-20\zw% \vbox{\hsize=20\zw\noindent\leftskip0pt\rightskip0pt\parfillskip0pt#1}\vrule}% }} @@ -7619,7 +7629,7 @@ for making the difference obvious.} \item[「中身までみた」行送り計算] 複数行に渡る文章を組版するときには行間に空きが入ることが普通である. \TeX では各行が一つずつの水平ボックスをなしていることを思い出すと,隣り合った - 2つの行(つまり水平ボックス)の間の空きは次のようにして決まるのだった: + 2\nobreak つの行(つまり水平ボックス)の間の空きは次のようにして決まるのだった: \begin{itemize} \item 「通常に組んだときの行間」$d$を,\cs{baselineskip}から 「前の行」の深さと「次の行」の高さを加えたものを引いた値とする. @@ -7833,7 +7843,7 @@ stretch_priority={kanjiskip=-35,xkanjiskip=-25,others=50} さらに,バージョン20220211.0以降では次の命令が提供される. \begin{cslist} - \item[\cs{ltjghostbeginjachar}] + \item[\cs{ltjghostbeforejachar}] \LuaTeX-ja本体が提供している\cs{ltjfakeparbegin}, \cs{ltjfakeboxbdd}と類似の命令である. 実行された箇所が(限定・非限定を問わず)水平モードであった場合に,実行された箇所は 「文字クラス0の\textbf{JAchar}」の直前であると, @@ -7850,7 +7860,7 @@ A\LG 字 \par% ==> ALchar--(xkanjiskip)--\LG \end{LTXexample} \item[\cs{ltjghostafterjachar}] - \cs{ltjghostbeginjachar}と対を成す命令で,実行された箇所は + \cs{ltjghostbeforejachar}と対を成す命令で,実行された箇所は 「文字クラス0の\textbf{JAchar}」の直後であると, \LuaTeX-jaの和文処理グルー挿入処理に認識させる.以下の実行例を参照. @@ -9886,7 +9896,8 @@ process it}, if and only if the following three conditions are satisfied: \item The category code of \cs{ltjlineendcomment} itself is 14~(\textit{comment}). \item The input line matches the following ``regular expression'': \[ - (\text{any char})^*(\textbf{JAchar}) + (\text{any char})^* + \Bigl(\textbf{JAchar}\cap\bigl(\{\text{catcode}=11\}\cup\{\text{catcode}=12\}\bigr)\Bigr) \bigl(\{\text{catcode}=1\}\cup\{\text{catcode}=2\}\bigr)^* \] \end{enumerate} @@ -9947,7 +9958,8 @@ emits a space. \item \cs{ltjlineendcomment}のカテゴリーコードが14~(\textit{comment})である. \item 入力行は次の「正規表現」にマッチしている: \[ - (\text{any char})^*(\textbf{JAchar}) + (\text{any char})^* + \Bigl(\textbf{JAchar}\cap\bigl(\{\text{catcode}=11\}\cup\{\text{catcode}=12\}\bigr)\Bigr) \bigl(\{\text{catcode}=1\}\cup\{\text{catcode}=2\}\bigr)^* \] \end{enumerate} @@ -11286,7 +11298,16 @@ $n$個あるペナルティの箇所が改行可能箇所である.いずれ なお,段落の末尾には\cs{penalty10000}と\cs{parfillskip}由来のグルーが自動的に入るが, これらとの兼ね合いのため\emph{最後のクラスタについては上記のノード挿入処理は行われない}. -段落最終行の行末文字の位置調整は,すでに述べた「行分割後の場合」における最終行の処理をそのまま用いている. +段落最終行の行末文字の位置調整は,すでに述べた「行分割後の場合」における最終行の処理を流用しているが, +そのままでは「段落末尾をぶら下げ組($a_1=-0.5$)にする」ことができない +\footnote{通常時は\cs{parfillskip}の内容は\texttt{0pt plus 1fil}であるため, + 負の長さになることはない.これに伴って,「段落末尾はぶら下げ組が望ましい」状況であっても, + 実際には末尾の句点(とその前の数文字)がまとめて次の行に追い出されてしまう.}ため, +\begin{itemize} + \item 段落末尾の\cs{penalty10000}\cs{parfillskip}の直前に,$a_1\text{\cs{zw}}$のカーンを挿入する + \item 行分割後,行末文字の位置調整を行う前に,そのカーンを削除する +\end{itemize} +という前処理を追加している. \subsection{グルーの調整} $|\textit{total}|$の分だけが,行中のグルーの伸び量,あるいは縮み量に応じて負担されることになる. diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-ajmacros.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-ajmacros.sty index 10c2cd8fde..5692dc3b45 100644 --- a/macros/luatex/generic/luatexja/src/addons/luatexja-ajmacros.sty +++ b/macros/luatex/generic/luatexja/src/addons/luatexja-ajmacros.sty @@ -68,7 +68,7 @@ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname \csname iftrue\endcsname \NeedsTeXFormat{LaTeX2e} - \ProvidesPackage{luatexja-ajmacros}[2020-10-09] + \ProvidesPackage{luatexja-ajmacros}[2025-02-05] \fi %</LaTeX> %%------------------ @@ -651,24 +651,24 @@ \@tempdimb.94\@tempdimb \@tempskipa.94\@tempskipa \fontsize{\@tempdimb}{\@tempskipa}\selectfont\aj訓点レ}} -\gdef\aj訓点一レ{\mbox{\tate\kern-.24zw\aj訓点一\kern-.65zw\raise.15zw\hbox{\aj@smallReten}}} -\gdef\aj訓点上レ{\mbox{\tate\aj訓点上\kern-.3zw\raise.15zw\hbox{\aj@smallReten}}} -\gdef\aj訓点甲レ{\mbox{\tate\aj訓点甲\kern-.25zw\raise.15zw\hbox{\aj@smallReten}}} -\gdef\aj訓点天レ{\mbox{\tate\aj訓点天\kern-.4zw\raise.1zw\hbox{\aj@smallReten}}} +\gdef\aj訓点一レ{\mbox{\tate\kern-.24\zw\aj訓点一\kern-.65\zw\raise.15\zw\hbox{\aj@smallReten}}} +\gdef\aj訓点上レ{\mbox{\tate\aj訓点上\kern-.3\zw\raise.15\zw\hbox{\aj@smallReten}}} +\gdef\aj訓点甲レ{\mbox{\tate\aj訓点甲\kern-.25\zw\raise.15\zw\hbox{\aj@smallReten}}} +\gdef\aj訓点天レ{\mbox{\tate\aj訓点天\kern-.4\zw\raise.1\zw\hbox{\aj@smallReten}}} \def\@ajongofudef#1{\ifx\@nil#1% \else\expandafter\xdef\csname aj訓点#1|\endcsname {\noexpand\mbox{\yoko\expandafter\noexpand\csname aj訓点#1\endcsname - \hbox to\z@{\hss\expandafter\noexpand\csname aj訓点|\endcsname\kern-.5zw}}}% + \hbox to\z@{\hss\expandafter\noexpand\csname aj訓点|\endcsname\kern-.5\zw}}}% \expandafter\@ajongofudef\fi} \@ajongofudef 二三四中下乙丙丁地人\@nil -\expandafter\gdef\csname aj訓点 |\endcsname{\mbox{\yoko{ }\hbox to\z@{\hss\csname aj訓点|\endcsname\kern-.5zw}}} +\expandafter\gdef\csname aj訓点 |\endcsname{\mbox{\yoko{ }\hbox to\z@{\hss\csname aj訓点|\endcsname\kern-.5\zw}}} \def\@ajkungofudef#1{\ifx\@nil#1% \else\expandafter\xdef\csname aj訓点|#1\endcsname - {\noexpand\mbox{\yoko\hbox to\z@{\hss\expandafter\noexpand\csname aj訓点|\endcsname\kern-.5zw}% + {\noexpand\mbox{\yoko\hbox to\z@{\hss\expandafter\noexpand\csname aj訓点|\endcsname\kern-.5\zw}% \expandafter\noexpand\csname aj訓点#1\endcsname}}% \expandafter\@ajkungofudef\fi} \@ajkungofudef 二三四中下乙丙丁地人\@nil -\expandafter\gdef\csname aj訓点| \endcsname{\mbox{\yoko\hbox to\z@{\hss\csname aj訓点|\endcsname\kern-.5zw}{ }}} +\expandafter\gdef\csname aj訓点| \endcsname{\mbox{\yoko\hbox to\z@{\hss\csname aj訓点|\endcsname\kern-.5\zw}{ }}} % \gdef\ajKunten#1{\csname aj訓点#1\endcsname} % diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty index 76ebf8716c..6ef3ff1751 100644 --- a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty +++ b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{luatexja-fontspec-27c}[2024-02-19 fontspec support of LuaTeX-ja] +\ProvidesPackage{luatexja-fontspec-27c}[2024-05-27 fontspec support of LuaTeX-ja] \RequirePackage{l3keys2e} \ExplSyntaxOn @@ -359,10 +359,24 @@ \setfontfamily #1 [#2,#4] {#3} \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn } +\DeclareDocumentCommand \providejfontfamily { m O{} m O{} } { + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn + \providefontfamily #1 [#2,#4] {#3} + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn +} \DeclareDocumentCommand \newjfontface { m O{} m O{} } { \newjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} } +\DeclareDocumentCommand \renewjfontface { m O{} m O{} } { + \renewjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} +\DeclareDocumentCommand \setjfontface { m O{} m O{} } { + \setjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} +\DeclareDocumentCommand \providejfontface { m O{} m O{} } { + \providejfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} \prop_new:N \l__ltj_fontspec_tmp_prop \prop_new:N \g__ltj_fontspec_fontopts_prop diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29c.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29c.sty index 1415cee127..51af33447c 100644 --- a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29c.sty +++ b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29c.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{luatexja-fontspec-29c}[2024-05-05 fontspec support of LuaTeX-ja] +\ProvidesPackage{luatexja-fontspec-29c}[2024-05-27 fontspec support of LuaTeX-ja] \RequirePackage{l3keys2e} \ExplSyntaxOn @@ -359,10 +359,24 @@ \setfontfamily #1 [#2,#4] {#3} \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn } +\DeclareDocumentCommand \providejfontfamily { m O{} m O{} } { + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn + \providefontfamily #1 [#2,#4] {#3} + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn +} \DeclareDocumentCommand \newjfontface { m O{} m O{} } { \newjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} } +\DeclareDocumentCommand \renewjfontface { m O{} m O{} } { + \renewjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} +\DeclareDocumentCommand \setjfontface { m O{} m O{} } { + \setjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} +\DeclareDocumentCommand \providejfontface { m O{} m O{} } { + \providejfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} \prop_new:N \l__ltj_fontspec_tmp_prop \prop_new:N \g__ltj_fontspec_fontopts_prop diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29e.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29e.sty index e763d91ad7..02a79ad6ca 100644 --- a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29e.sty +++ b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29e.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{luatexja-fontspec-29e}[2024-05-14 fontspec support of LuaTeX-ja] +\ProvidesPackage{luatexja-fontspec-29e}[2024-05-27 fontspec support of LuaTeX-ja] \RequirePackage{l3keys2e} \ExplSyntaxOn @@ -359,10 +359,24 @@ \setfontfamily #1 [#2,#4] {#3} \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn } +\DeclareDocumentCommand \providejfontfamily { m O{} m O{} } { + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn + \providefontfamily #1 [#2,#4] {#3} + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn +} \DeclareDocumentCommand \newjfontface { m O{} m O{} } { \newjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} } +\DeclareDocumentCommand \renewjfontface { m O{} m O{} } { + \renewjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} +\DeclareDocumentCommand \setjfontface { m O{} m O{} } { + \setjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} +\DeclareDocumentCommand \providejfontface { m O{} m O{} } { + \providejfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} \prop_new:N \l__ltj_fontspec_tmp_prop \prop_new:N \g__ltj_fontspec_fontopts_prop diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-ruby.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-ruby.sty index d0d8e5488d..4c64b27d14 100644 --- a/macros/luatex/generic/luatexja/src/addons/luatexja-ruby.sty +++ b/macros/luatex/generic/luatexja/src/addons/luatexja-ruby.sty @@ -4,7 +4,7 @@ % LaTeX only! \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{luatexja-ruby}[2023-10-08 v0.62] +\ProvidesPackage{luatexja-ruby}[2024-09-09 v0.7] \RequirePackage{luatexja} %%------------------ @@ -18,9 +18,9 @@ %% 引数:ルビ全角を単位とした実数 %% この文字への pre-, post-intrusion の許容量 \define@key[ltj]{japaram}{rubypreintrusion}{% - \ltj@@set@stack@real{RIPRE}{-0x7FFFFFFF}{0x7FFFFFFF}#1 } + \ltj@@set@stack@real{RIPRE}{-0x7FFFFFFF}{0x7FFFFFFF}#1\relax} \define@key[ltj]{japaram}{rubypostintrusion}{% - \ltj@@set@stack@real{RIPOST}{-0x7FFFFFFF}{0x7FFFFFFF}#1 } + \ltj@@set@stack@real{RIPOST}{-0x7FFFFFFF}{0x7FFFFFFF}#1\relax} \def\ltj@@set@stack@real#1#2#3{% \directlua{luatexja.stack.set_stack_perchar(luatexja.stack_table_index.#1, #2, #3, token.scan_word)}} @@ -29,7 +29,6 @@ \def\ltj@@rkeydef#1{ \define@key[ltj]{ruby}{#1}{\expandafter\def\csname ltj@@rubyip@#1\endcsname{##1}} } -%% attr_ruby_mode %% bit 0: intrusion を有効にするか(1: 有効) %% bit 1: 前後の intrusion 許容量を小さい方に揃える (1: yes) %% bit 2--4: intrusion をどう使って親文字を配置するか @@ -42,10 +41,10 @@ %% ※ 01--100 で,intrusion で賄えきれなかった場合はいつものように伸長する. %% bit 5: 熟語ルビの際の処理方法(0: 常にグループ,1: 可能な限りブロックごとに) %% ↑bit 5 は今は無効 +%% bit 6: 突出部分について lua-ul 有効範囲から除外する処理するか \ltj@@rkeydef{mode} %% intrusion 量強制固定(bit 0, bit 1 より優先,負数で「自動」) %% attr は sp 単位だが,ユーザーはルビ全角単位で指定する -%% attr_ruby_maxprep, attr_ruby_maxpostp \ltj@@rkeydef{pre} \ltj@@rkeydef{post} %% 親文字伸長の際の比,{0}{1}{1} などと0--7 の数 3 つで指定 @@ -54,14 +53,11 @@ \ltj@@rkeydef{stretcheol} % 行末形 \ltj@@rkeydef{stretch} % 行中形 %% ルビが伸長するときの比 {1}{2}{1} などと0--7 の数 3 つで指定 -%% attr_ruby_mode 上位部分 \ltj@@rkeydef{stretchruby} %% ルビ<親のとき,ルビと親文字の端の最大値 -%% attr_ruby_maxmargin %% attr は sp 単位だが,ユーザーは親文字全角単位で指定 \ltj@@rkeydef{maxmargin} %% ルビと親文字の垂直方向の空き -%% attr_ruby_intergap %% attr は sp 単位だが,ユーザーは親文字全角単位で指定 \ltj@@rkeydef{intergap} @@ -92,6 +88,7 @@ \define@boolkey[ltj]{ruby}{intrude_xkanjiskip}[true]{} \define@boolkey[ltj]{ruby}{intrude_kanjiskip}[true]{} +\define@boolkey[ltj]{ruby}{always_highlight_protrusion}[true]{} %%%%%%%% setkeys の別名 \protected\def\ltjsetruby{\setkeys[ltj]{ruby}} @@ -141,7 +138,8 @@ [luatexja.icflag_table.XKANJI_SKIP]=true, [luatexja.icflag_table.XKANJI_SKIP_JFM]=true, \fi - \string} + \string}, + quirk_protrusion = \ifltj@ruby@always_highlight_protrusion false \else true \fi \string} } \egroup @@ -264,7 +262,7 @@ kenten=\textbullet, fontcmd=\relax, ybaseheight=0.88, tbaseheight=0.5, yrubydepth=0.12, trubydepth=0.5, intrude_jfmgk, intrude_kanjiskip, intrude_xkanjiskip, - epsilon=0.0001, + epsilon=0.0001, always_highlight_protrusion=false, } \endinput diff --git a/macros/luatex/generic/luatexja/src/lltjext.sty b/macros/luatex/generic/luatexja/src/lltjext.sty index a83c9305c9..aebdc3987c 100644 --- a/macros/luatex/generic/luatexja/src/lltjext.sty +++ b/macros/luatex/generic/luatexja/src/lltjext.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjext}[2022-08-24 v1.2k-ltj-14 Macros for vertical writing] +\ProvidesPackage{lltjext}[2024-07-23 v1.2k-ltj-16 Macros for vertical writing] \RequirePackage{luatexja} \newcount\ltj@ext@dir \let\ltj@lltjext@orig@tabular=\tabular @@ -27,7 +27,7 @@ \def\p@stabular<#1>#2{% \setlength\dimen@{#2}% \edef\@halignto{to\the\dimen@}\p@tabular<#1>} -\def\p@tabular<#1>{\leavevmode \hbox \bgroup +\def\p@tabular<#1>{\leavevmode\null \hbox \bgroup % fixed for unwanted xkanjiskip \ltj@ext@dir=\ltjgetparameter{direction}\relax $\let\@acol\@tabacol \let\@classz\@tabclassz @@ -78,7 +78,7 @@ \ifhmode \@preamerr\z@ \@@par\fi \@preamble} \def\endarray{\crcr\egroup\egroup\@end@alignbox} -\def\endtabular{\endarray$\egroup} +\def\endtabular{\endarray$\egroup\null} \expandafter \let \csname endtabular*\endcsname = \endtabular % ↓中身\周囲→ yoko tate utod dtou % yoko A* B* B B @@ -541,17 +541,11 @@ \else \let\box@dir\utod \fi \fi -\ifltj@ltfilehook@avail % LaTeX2e >= 2020-10-01 \@defaultunitsset\@picht{#3}\unitlength \@defaultunitsset\@picwd{#2}\unitlength \setbox\@picbox\hbox to\@picwd\bgroup\box@dir \@defaultunitsset\@tempdimc{#4}\unitlength\hskip-\@tempdimc \@defaultunitsset\@tempdimc{#5}\unitlength\lower\@tempdimc\hbox\bgroup -\else % <= 2020-02-02 - \@picwd=#2\unitlength \@picht=#3\unitlength - \setbox\@picbox\hbox to\@picwd\bgroup\box@dir - \hskip-#4\unitlength\lower#5\unitlength\hbox\bgroup -\fi \ltj@@pic@reset@blshift \ignorespaces} \def\endpicture{% @@ -675,6 +669,7 @@ %% Compatibility with array package +\ExplSyntaxOn \def\ltj@lltjext@patch@array{% \patchcmd{\@tabular}{\hbox\bgroup}{% \hbox\bgroup\ltj@ext@dir=\ltjgetparameter{direction}\relax}{}{} @@ -682,10 +677,6 @@ {\ltj@ext@dir=\ltjgetparameter{direction}\relax}{}{} \expandafter\let\csname tabular*\endcsname=\ltj@lltjext@orig@tabularS \patchcmd{\p@stabular}{\p@tabular}{\@tabular}{}{} - \@ifpackagelater{array}{2018/09/13} - {\expandafter\@firstoftwo} - {\expandafter\@secondoftwo} - {% = for 2018/09/13 v2.4i or newer \def\@startpbox##1{\bgroup \color@begingroup \box@dir\adjustbaseline%%% これを追加 @@ -694,16 +685,8 @@ \vrule \@height \ltjgetht\@arstrutbox \@width \z@ \everypar{}}% }% - }{ % = for 2018/04/30 v2.4h or older - \def\@startpbox##1{\bgroup - \box@dir\adjustbaseline%%% これを追加 - \setlength\hsize{##1}\@arrayparboxrestore - \everypar{% - \vrule \@height \ltjgetht\@arstrutbox \@width \z@ - \everypar{}}% - }% - }% \def\@tabarray{\@ifnextchar<\p@tabarray{\p@tabarray<Z>}} +\ifcsname tbl_save_outer_table_cols:\endcsname %%%%%% >=2024-06-01 \def\p@array<##1>[##2]##3{% \ifnum\ltj@ext@dir=0 \ltj@ext@dir=\ltjgetparameter{direction}\relax\fi \let\box@dir\relax @@ -736,20 +719,98 @@ \@depth \arraystretch \ltjgetdp \@tempcnta \@width \z@}% \fork@array@option<##1>[##2]% + \tbl_save_outer_table_cols: \begingroup \@mkpream{##3}% - \xdef\@preamble{\noexpand\ialign \noexpand \@halignto - \bgroup \tabskip \z@skip \@arstrut \@preamble - \tabskip \z@ \cr}% + \tbl_count_table_cols: + \xdef\@preamble{ + \noexpand\ar@ialign + \@halignto + \bgroup \@arstrut + \UseTaggingSocket{tbl/row/begin} + \tbl_init_cell_data_for_row: + \@preamble + \tabskip \z@ \cr}% \endgroup \@arrayleft - \@begin@alignbox\bgroup\box@dir\adjustbaseline - \let\par\@empty - \let\@sharp####\let\protect\relax - \let\\\@arraycr\let\tabularnewline\\\let\par\@empty - \lineskip\z@skip\baselineskip\z@skip\@preamble} - \def\endarray{\crcr\egroup\egroup\@end@alignbox\@arrayright} + \@begin@alignbox + \bgroup + \box@dir\adjustbaseline + \let\@sharp####\let\protect\relax + \lineskip \z@ + \baselineskip \z@ + \mathsurround \z@ + \let\\\@arraycr \let\tabularnewline\\\let\par\@empty + \UseTaggingSocket{tbl/init} + \@preamble + } + \def\endtabular{\endarray$\egroup + \UseTaggingSocket {tbl/hmode/end}\null} + \def\endarray{ + \tbl_crcr:n{endarray} \egroup + \UseTaggingSocket{tbl/finalize} + \tbl_restore_outer_cell_data: + \egroup\@end@alignbox + \@arrayright \gdef\@preamble{}% + } +\else %%%%%% <2024-06-01 + \def\p@array<##1>[##2]##3{% + \ifnum\ltj@ext@dir=0 \ltj@ext@dir=\ltjgetparameter{direction}\relax\fi + \let\box@dir\relax + \if ##1z\relax + \ifnum\ltj@ext@dir=3\relax + \let\box@dir\utod\@tempcnta=\zstrutbox + \fi + \else + \if ##1y\relax + \let\box@dir\yoko\@tempcnta=\ystrutbox + \else\if ##1t\relax + \let\box@dir\tate\@tempcnta=\tstrutbox + \else\if ##1d\relax + \let\box@dir\dtou\@tempcnta=\dstrutbox + \else\if ##1u\relax + \let\box@dir\utod\@tempcnta=\zstrutbox + \fi\fi\fi\fi + \fi + \ifx\box@dir\relax + \ifcase\ltj@ext@dir + \or \let\box@dir\dtou\@tempcnta=\dstrutbox% dtou + \or\or\let\box@dir\tate\@tempcnta=\tstrutbox% tate + \or \let\box@dir\yoko\@tempcnta=\ystrutbox% yoko + \else \let\box@dir\utod\@tempcnta=\zstrutbox% utod + \fi + \fi + \setbox \@arstrutbox \hbox{\box@dir\vrule + \@height \arraystretch + \dimexpr \ltjgetht\@tempcnta+\extrarowheight\relax + \@depth \arraystretch \ltjgetdp \@tempcnta + \@width \z@}% + \fork@array@option<##1>[##2]% + \begingroup + \@mkpream{##3}% + \xdef\@preamble{\noexpand\ialign \@halignto + \bgroup \@arstrut\@preamble \tabskip \z@ \cr}% + \endgroup + \@arrayleft + \@begin@alignbox + \bgroup + \box@dir\adjustbaseline + \let\@sharp####\let\protect\relax + \lineskip \z@ + \baselineskip \z@ + \m@th + \let\\\@arraycr \let\tabularnewline\\\let\par\@empty + \@preamble + } + \def\endtabular{\endarray\m@th$\egroup\null} + \def\endarray{ + \crcr\egroup\egroup\@end@alignbox + \@arrayright \gdef\@preamble{}% + } +\fi + \expandafter \let \csname endtabular*\endcsname = \endtabular } +\ExplSyntaxOff \@ifpackageloaded{array}{% \let\tabular=\ltj@lltjext@orig@tabular \let\array=\ltj@lltjext@orig@array @@ -760,9 +821,4 @@ \ltj@ExecuteAfterPackage{array}{\ltj@lltjext@patch@array} } -%%%%%%%%%%%%%%%% LuaTeX-ja original - -%%\define@key[ltj]{japaram}{autouprightnum}{% %COUNT -%% \ltj@@set@stack{AURN}{0}{10000}\z@#1 } - \endinput diff --git a/macros/luatex/generic/luatexja/src/ltj-adjust.lua b/macros/luatex/generic/luatexja/src/ltj-adjust.lua index 89ad7816d2..2214f1907c 100644 --- a/macros/luatex/generic/luatexja/src/ltj-adjust.lua +++ b/macros/luatex/generic/luatexja/src/ltj-adjust.lua @@ -37,6 +37,7 @@ local node_tail = node.direct.tail local get_attr = node.direct.get_attribute local set_attr = node.direct.set_attribute local insert_after = node.direct.insert_after +local node_remove = node.direct.remove local id_glyph = node.id 'glyph' local id_kern = node.id 'kern' @@ -205,7 +206,7 @@ end -- step 1 最終行用 local min, max = math.min, math.max local setsubtype = node.direct.setsubtype -local function aw_step1_last(p, total) +local function aw_step1_last(p, total, removed_le) local head = getlist(p) local x = node_tail(head); if not x then return total, false end -- x: \rightskip @@ -246,6 +247,7 @@ local function aw_step1_last(p, total) -- 続行条件2: min(eadt[1], 0)<= \parfillskip <= max(eadt[#eadt], 0) local pfw = getwidth(pf) + (total>0 and getfield(pf, 'stretch') or -getfield(pf, 'shrink')) *getfield(p, 'glue_set') + + removed_le if pfw<min(0,eadt[1]) or max(0,eadt[#eadt])<pfw then return total, false end -- \parfillskip を 0 にする total = total + getwidth(pf) @@ -393,6 +395,21 @@ do end end end +local insert_lineend_kern_tail +do + local insert_before = node.direct.insert_before + local KINSOKU = luatexja.icflag_table.KINSOKU + insert_lineend_kern_tail = function (head, nq, last) + if nq.met then + local eadt = nq.met.char_type[nq.class].end_adjust + if eadt and eadt[1]<0 then + local x = node_new(id_kern, 1) + setkern(x, eadt[1]); set_attr(x, attr_icflag, LINEEND) + insert_before(head, node_prev(last), x) + end + end + end +end local adjust_width do @@ -408,7 +425,15 @@ do last_p = p end if last_p then - myaw_step2(last_p, myaw_step1_last(last_p, get_total_stretched(last_p))) + local removed_le = 0 + local p = getlist(last_p); local pf = node_prev(node_tail(p)) + if getid(pf) == id_glue and getsubtype(pf) == 15 then + pf = node_prev(node_prev(pf)) + if getid(pf) == id_kern and get_attr_icflag(pf)==LINEEND then + removed_le = getwidth(pf); node_remove(p, pf); node_free(pf) + end + end + myaw_step2(last_p, myaw_step1_last(last_p, get_total_stretched(last_p), removed_le)) end return to_node(head) end @@ -426,6 +451,7 @@ do if status_le==2 then if not luatexbase.in_callback('luatexja.adjust_jfmglue', 'luatexja.adjust') then ltjb.add_to_callback('luatexja.adjust_jfmglue', insert_lineend_kern, 'luatexja.adjust') + ltjb.add_to_callback('luatexja.adjust_jfmglue_tail', insert_lineend_kern_tail, 'luatexja.adjust') end myaw_step1, myaw_step1_last = dummy, aw_step1_last else @@ -435,7 +461,8 @@ do myaw_step1, myaw_step1_last = aw_step1, aw_step1_last end if luatexbase.in_callback('luatexja.adjust_jfmglue', 'luatexja.adjust') then - luatexbase.remove_from_callback('luatexja.adjust_jfmglue', 'luatexja.adjust') + luatexbase.remove_from_callback('luatexja.adjust_jfmglue', 'luatexja.adjust') + luatexbase.remove_from_callback('luatexja.adjust_jfmglue_tail', 'luatexja.adjust') end end myaw_step2 = (status_pr>0) and aw_step2 or aw_step2_dummy @@ -560,7 +587,6 @@ end do local ltja = luatexja.adjust local sid_user = node.subtype 'user_defined' - local node_remove = node.direct.remove local node_write = node.direct.write local getvalue = node.direct.getdata local setvalue = node.direct.setdata diff --git a/macros/luatex/generic/luatexja/src/ltj-ivd_aj1.lua b/macros/luatex/generic/luatexja/src/ltj-ivd_aj1.lua index de18150d79..bb265c7e54 100644 --- a/macros/luatex/generic/luatexja/src/ltj-ivd_aj1.lua +++ b/macros/luatex/generic/luatexja/src/ltj-ivd_aj1.lua @@ -6,6 +6,9 @@ table_ivd_aj1 = { -- # -- # History: -- # +-- # 2022-09-13 Registration of additional sequences in the Adobe-Japan1 +-- # collection. +-- # -- # 2020-11-06 Registration of additional sequences in the MSARG -- # collection. -- # @@ -36,7 +39,7 @@ table_ivd_aj1 = { -- # For more details on the IVD, see UTS #37: -- # https://www.unicode.org/reports/tr37/ -- # --- # Copyright 2006-2020 Unicode, Inc. +-- # Copyright 2006-2022 Unicode, Inc. -- # For terms of use, see: https://www.unicode.org/copyright.html#8 -- # -- # EOF @@ -1952,7 +1955,7 @@ table_ivd_aj1 = { 0x209dbf,0x209db5,0x209db9,0x209dbd,0x209dc9,0x209dda,0x209de0,0x209de3,0x204d07,0x209e0a, 0x209e02,0x209e0d,0x209e1c,0x209e7b,0x222218,0x209e80,0x209e85,0x209e9b,0x22a38c,0x209ebd, 0x22a437,0x209edf,0x209eff,0x209f02,0x204d77,0x209f03,0x209f3a,0x209f3d,0x209f46,0x209f53, - 0x209f55,0x209f58,0x22a5f1,0x209f5d,0x22a602,0x209f69,0x209f6d,0x209f70,0x22a6b2,0x20793a, + 0x209f55,0x209f58,0x22a5f1,0x209f5d,0x22a602,0x209f69,0x209f6d,0x209f70,0x22a6b2,0x231350, 0x203614,0x2038ad,0x203dcc,0x203fdc,0x2045be,0x204610,0x204b7e,0x204c38,0x204ce1,0x204e0c, 0x204e23,0x204e24,0x204e79,0x204ef3,0x204f0c,0x204f19,0x204f2b,0x204f2e,0x204f31,0x204f84, 0x204f9e,0x204fb7,0x205004,0x20500c,0x20504c,0x20505f,0x205062,0x205077,0x20508e,0x20509e, diff --git a/macros/luatex/generic/luatexja/src/ltj-jfmglue.lua b/macros/luatex/generic/luatexja/src/ltj-jfmglue.lua index ed7ab6daa8..38d9a72d52 100644 --- a/macros/luatex/generic/luatexja/src/ltj-jfmglue.lua +++ b/macros/luatex/generic/luatexja/src/ltj-jfmglue.lua @@ -3,7 +3,7 @@ -- luatexbase.provides_module({ name = 'luatexja.jfmglue', - date = '2022-08-29', + date = '2024-10-12', description = 'Insertion process of JFM glues, [x]kanjiskip and others', }) luatexja.jfmglue = luatexja.jfmglue or {} @@ -587,7 +587,7 @@ function calc_np(last, lp) if k then return lp end end end - Np=nil + Np = nil end end -- 001 ----------------------------------------------- @@ -693,6 +693,7 @@ end -------------------- 最下層の処理 luatexbase.create_callback('luatexja.adjust_jfmglue', 'simple', function(n) return n end) +luatexbase.create_callback('luatexja.adjust_jfmglue_tail', 'simple', function(n) return n end) -- change penalties (or create a new penalty, if needed) local function handle_penalty_normal(post, pre, g) @@ -741,7 +742,7 @@ local function handle_penalty_jwp() local a = table_current_stack[luatexja.stack_table_index.JWP] if #widow_Bp == 0 then if a~=0 then - local p = node_new(id_penalty, widow_Np.nuc) + local p = node_new(id_penalty, nil, widow_Np.nuc) if a<-10000 then a = -10000 elseif a>10000 then a = 10000 end setpenalty(p, a); head = insert_before(head, widow_Np.first, p) widow_Bp[1]=p; set_attr(p, attr_icflag, KINSOKU) @@ -1059,7 +1060,7 @@ local function handle_np_jachar(mode) real_insert(g) end if mode and Np.kcat%2~=1 then - widow_Np.first, widow_Bp, Bp = Np.first, Bp, widow_Bp + widow_Np.nuc, widow_Np.first, widow_Bp, Bp = Np.nuc, Np.first, Bp, widow_Bp end end @@ -1138,6 +1139,7 @@ local function handle_list_tail(mode, last) adjust_nq() if mode then -- the current list is to be line-breaked. + call_callback('luatexja.adjust_jfmglue_tail', head, Nq, last) -- Insert \jcharwidowpenalty if widow_Np.first then handle_penalty_jwp() end else diff --git a/macros/luatex/generic/luatexja/src/ltj-jfont.lua b/macros/luatex/generic/luatexja/src/ltj-jfont.lua index 26c76d88a1..3e685c0b41 100644 --- a/macros/luatex/generic/luatexja/src/ltj-jfont.lua +++ b/macros/luatex/generic/luatexja/src/ltj-jfont.lua @@ -3,7 +3,7 @@ -- luatexbase.provides_module({ name = 'luatexja.jfont', - date = '2023-04-06', + date = '2024-07-25', description = 'Loader for Japanese fonts', }) @@ -434,17 +434,18 @@ do end -- extract jfm_name, jfm_spec and jfm_var -- normalize position of 'jfm=' and 'jfmvar=' keys + local match, sub = string.match, string.sub local function extract_jfm_spec(name) - name = (name:match '^{(.*)}$') or (name:match '^"(.*)"$') or name + name = (match(name,'^{(.*)}$')) or (match(name,'^"(.*)"$')) or name jfm_spec, jfm_var = '', '' - local tmp, index = name:sub(1, 5), 1 + local tmp, index = sub(name,1, 5), 1 if tmp == 'file:' or tmp == 'name:' or tmp == 'psft:' then index = 6 end name = lpegmatch(jf_remainder, name) if jfm_name~='' then if luatexja.jfont.jfm_feature then - local l, t2 = name:sub(-1), {} + local l, t2 = sub(name,-1), {} for i,v in pairs(luatexja.jfont.jfm_feature) do -- print(i,type(v),v) t2[#t2+1] = (v==true) and i @@ -454,7 +455,7 @@ do else jfm_spec = jfm_name end - l = name:sub(-1) + l = sub(name,-1) name = name .. ((l==':' or l==';') and '' or ';') .. 'jfm=' .. jfm_spec if jfm_var~='' then name = name .. ';jfmvar=' .. jfm_var @@ -806,9 +807,9 @@ local list_rotate_glyphs do local ceil = math.ceil -- output of function_uax50.lua - -- UAX#50 for Unicode 14.0.0 + -- UAX#50 for Unicode 15.1.0 -- t[0] = true - local t={ 0, 167, 168, 169, 170, 174, 175, 177, 178, 188, 191, 215, 216, 247, 248, 746, 748, 888, 890, 896, 900, 907, 908, 909, 910, 930, 931, 1328, 1329, 1367, 1369, 1419, 1421, 1424, 1425, 1480, 1488, 1515, 1519, 1525, 1536, 1806, 1807, 1867, 1869, 1970, 1984, 2043, 2045, 2094, 2096, 2111, 2112, 2140, 2142, 2143, 2144, 2155, 2160, 2191, 2192, 2194, 2200, 2436, 2437, 2445, 2447, 2449, 2451, 2473, 2474, 2481, 2482, 2483, 2486, 2490, 2492, 2501, 2503, 2505, 2507, 2511, 2519, 2520, 2524, 2526, 2527, 2532, 2534, 2559, 2561, 2564, 2565, 2571, 2575, 2577, 2579, 2601, 2602, 2609, 2610, 2612, 2613, 2615, 2616, 2618, 2620, 2621, 2622, 2627, 2631, 2633, 2635, 2638, 2641, 2642, 2649, 2653, 2654, 2655, 2662, 2679, 2689, 2692, 2693, 2702, 2703, 2706, 2707, 2729, 2730, 2737, 2738, 2740, 2741, 2746, 2748, 2758, 2759, 2762, 2763, 2766, 2768, 2769, 2784, 2788, 2790, 2802, 2809, 2816, 2817, 2820, 2821, 2829, 2831, 2833, 2835, 2857, 2858, 2865, 2866, 2868, 2869, 2874, 2876, 2885, 2887, 2889, 2891, 2894, 2901, 2904, 2908, 2910, 2911, 2916, 2918, 2936, 2946, 2948, 2949, 2955, 2958, 2961, 2962, 2966, 2969, 2971, 2972, 2973, 2974, 2976, 2979, 2981, 2984, 2987, 2990, 3002, 3006, 3011, 3014, 3017, 3018, 3022, 3024, 3025, 3031, 3032, 3046, 3067, 3072, 3085, 3086, 3089, 3090, 3113, 3114, 3130, 3132, 3141, 3142, 3145, 3146, 3150, 3157, 3159, 3160, 3163, 3165, 3166, 3168, 3172, 3174, 3184, 3191, 3213, 3214, 3217, 3218, 3241, 3242, 3252, 3253, 3258, 3260, 3269, 3270, 3273, 3274, 3278, 3285, 3287, 3293, 3295, 3296, 3300, 3302, 3312, 3313, 3315, 3328, 3341, 3342, 3345, 3346, 3397, 3398, 3401, 3402, 3408, 3412, 3428, 3430, 3456, 3457, 3460, 3461, 3479, 3482, 3506, 3507, 3516, 3517, 3518, 3520, 3527, 3530, 3531, 3535, 3541, 3542, 3543, 3544, 3552, 3558, 3568, 3570, 3573, 3585, 3643, 3647, 3676, 3713, 3715, 3716, 3717, 3718, 3723, 3724, 3748, 3749, 3750, 3751, 3774, 3776, 3781, 3782, 3783, 3784, 3790, 3792, 3802, 3804, 3808, 3840, 3912, 3913, 3949, 3953, 3992, 3993, 4029, 4030, 4045, 4046, 4059, 4096, 4294, 4295, 4296, 4301, 4302, 4304, 4352, 4608, 4681, 4682, 4686, 4688, 4695, 4696, 4697, 4698, 4702, 4704, 4745, 4746, 4750, 4752, 4785, 4786, 4790, 4792, 4799, 4800, 4801, 4802, 4806, 4808, 4823, 4824, 4881, 4882, 4886, 4888, 4955, 4957, 4989, 4992, 5018, 5024, 5110, 5112, 5118, 5120, 5121, 5760, 5789, 5792, 5881, 5888, 5910, 5919, 5943, 5952, 5972, 5984, 5997, 5998, 6001, 6002, 6004, 6016, 6110, 6112, 6122, 6128, 6138, 6144, 6170, 6176, 6265, 6272, 6315, 6400, 6431, 6432, 6444, 6448, 6460, 6464, 6465, 6468, 6510, 6512, 6517, 6528, 6572, 6576, 6602, 6608, 6619, 6622, 6684, 6686, 6751, 6752, 6781, 6783, 6794, 6800, 6810, 6816, 6830, 6832, 6863, 6912, 6989, 6992, 7039, 7040, 7156, 7164, 7224, 7227, 7242, 7245, 7305, 7312, 7355, 7357, 7368, 7376, 7419, 7424, 7958, 7960, 7966, 7968, 8006, 8008, 8014, 8016, 8024, 8025, 8026, 8027, 8028, 8029, 8030, 8031, 8062, 8064, 8117, 8118, 8133, 8134, 8148, 8150, 8156, 8157, 8176, 8178, 8181, 8182, 8191, 8192, 8214, 8215, 8224, 8226, 8240, 8242, 8251, 8253, 8258, 8259, 8263, 8266, 8273, 8274, 8293, 8294, 8306, 8308, 8335, 8336, 8349, 8352, 8385, 8400, 8413, 8417, 8418, 8421, 8433, 8450, 8451, 8458, 8463, 8464, 8467, 8469, 8470, 8472, 8478, 8484, 8485, 8486, 8487, 8488, 8489, 8490, 8494, 8495, 8501, 8512, 8517, 8523, 8524, 8526, 8527, 8586, 8588, 8592, 8734, 8735, 8756, 8758, 8960, 8968, 8972, 8992, 8996, 9001, 9003, 9004, 9085, 9115, 9150, 9166, 9167, 9168, 9169, 9180, 9186, 9251, 9252, 9472, 9632, 9754, 9760, 10088, 10102, 10132, 11026, 11056, 11088, 11098, 11124, 11126, 11158, 11160, 11192, 11218, 11219, 11244, 11248, 11264, 11508, 11513, 11558, 11559, 11560, 11565, 11566, 11568, 11624, 11631, 11633, 11647, 11671, 11680, 11687, 11688, 11695, 11696, 11703, 11704, 11711, 11712, 11719, 11720, 11727, 11728, 11735, 11736, 11743, 11744, 11856, 11858, 11870, 12296, 12306, 12308, 12320, 12336, 12337, 12448, 12449, 12540, 12541, 42192, 42540, 42560, 42744, 42752, 42955, 42960, 42962, 42963, 42964, 42965, 42970, 42994, 43053, 43056, 43066, 43072, 43128, 43136, 43206, 43214, 43226, 43232, 43348, 43359, 43360, 43392, 43470, 43471, 43482, 43486, 43519, 43520, 43575, 43584, 43598, 43600, 43610, 43612, 43715, 43739, 43767, 43777, 43783, 43785, 43791, 43793, 43799, 43808, 43815, 43816, 43823, 43824, 43884, 43888, 44014, 44016, 44026, 55296, 57344, 64256, 64263, 64275, 64280, 64285, 64311, 64312, 64317, 64318, 64319, 64320, 64322, 64323, 64325, 64326, 64451, 64467, 64912, 64914, 64968, 64975, 64976, 65008, 65040, 65056, 65072, 65097, 65104, 65112, 65119, 65123, 65127, 65136, 65141, 65142, 65277, 65279, 65280, 65288, 65290, 65293, 65294, 65306, 65311, 65339, 65340, 65341, 65342, 65343, 65344, 65371, 65471, 65474, 65480, 65482, 65488, 65490, 65496, 65498, 65501, 65507, 65508, 65512, 65519, 65529, 65532, 65536, 65548, 65549, 65575, 65576, 65595, 65596, 65598, 65599, 65614, 65616, 65630, 65664, 65787, 65792, 65795, 65799, 65844, 65847, 65935, 65936, 65949, 65952, 65953, 66000, 66046, 66176, 66205, 66208, 66257, 66272, 66300, 66304, 66340, 66349, 66379, 66384, 66427, 66432, 66462, 66463, 66500, 66504, 66518, 66560, 66718, 66720, 66730, 66736, 66772, 66776, 66812, 66816, 66856, 66864, 66916, 66927, 66939, 66940, 66955, 66956, 66963, 66964, 66966, 66967, 66978, 66979, 66994, 66995, 67002, 67003, 67005, 67072, 67383, 67392, 67414, 67424, 67432, 67456, 67462, 67463, 67505, 67506, 67515, 67584, 67590, 67592, 67593, 67594, 67638, 67639, 67641, 67644, 67645, 67647, 67670, 67671, 67743, 67751, 67760, 67808, 67827, 67828, 67830, 67835, 67868, 67871, 67898, 67903, 67904, 68000, 68024, 68028, 68048, 68050, 68100, 68101, 68103, 68108, 68116, 68117, 68120, 68121, 68150, 68152, 68155, 68159, 68169, 68176, 68185, 68192, 68256, 68288, 68327, 68331, 68343, 68352, 68406, 68409, 68438, 68440, 68467, 68472, 68498, 68505, 68509, 68521, 68528, 68608, 68681, 68736, 68787, 68800, 68851, 68858, 68904, 68912, 68922, 69216, 69247, 69248, 69290, 69291, 69294, 69296, 69298, 69376, 69416, 69424, 69466, 69488, 69514, 69552, 69580, 69600, 69623, 69632, 69710, 69714, 69750, 69759, 69827, 69837, 69838, 69840, 69865, 69872, 69882, 69888, 69941, 69942, 69960, 69968, 70007, 70016, 70112, 70113, 70133, 70144, 70162, 70163, 70207, 70272, 70279, 70280, 70281, 70282, 70286, 70287, 70302, 70303, 70314, 70320, 70379, 70384, 70394, 70400, 70404, 70405, 70413, 70415, 70417, 70419, 70441, 70442, 70449, 70450, 70452, 70453, 70458, 70459, 70469, 70471, 70473, 70475, 70478, 70480, 70481, 70487, 70488, 70493, 70500, 70502, 70509, 70512, 70517, 70656, 70748, 70749, 70754, 70784, 70856, 70864, 70874, 71168, 71237, 71248, 71258, 71264, 71277, 71296, 71354, 71360, 71370, 71424, 71451, 71453, 71468, 71472, 71495, 71680, 71740, 71840, 71923, 71935, 71943, 71945, 71946, 71948, 71956, 71957, 71959, 71960, 71990, 71991, 71993, 71995, 72007, 72016, 72026, 72096, 72104, 72106, 72152, 72154, 72165, 72384, 72441, 72704, 72713, 72714, 72759, 72760, 72774, 72784, 72813, 72816, 72848, 72850, 72872, 72873, 72887, 72960, 72967, 72968, 72970, 72971, 73015, 73018, 73019, 73020, 73022, 73023, 73032, 73040, 73050, 73056, 73062, 73063, 73065, 73066, 73103, 73104, 73106, 73107, 73113, 73120, 73130, 73440, 73465, 73648, 73649, 73664, 73714, 73727, 74650, 74752, 74863, 74864, 74869, 74880, 75076, 77712, 77811, 92160, 92729, 92736, 92767, 92768, 92778, 92782, 92863, 92864, 92874, 92880, 92910, 92912, 92918, 92928, 92998, 93008, 93018, 93019, 93026, 93027, 93048, 93053, 93072, 93760, 93851, 93952, 94027, 94031, 94088, 94095, 94112, 113664, 113771, 113776, 113789, 113792, 113801, 113808, 113818, 113820, 113828, 119296, 119366, 119808, 119893, 119894, 119965, 119966, 119968, 119970, 119971, 119973, 119975, 119977, 119981, 119982, 119994, 119995, 119996, 119997, 120004, 120005, 120070, 120071, 120075, 120077, 120085, 120086, 120093, 120094, 120122, 120123, 120127, 120128, 120133, 120134, 120135, 120138, 120145, 120146, 120486, 120488, 120780, 120782, 120832, 122624, 122655, 122880, 122887, 122888, 122905, 122907, 122914, 122915, 122917, 122918, 122923, 123136, 123181, 123184, 123198, 123200, 123210, 123214, 123216, 123536, 123567, 123584, 123642, 123647, 123648, 124896, 124903, 124904, 124908, 124909, 124911, 124912, 124927, 124928, 125125, 125127, 125143, 125184, 125260, 125264, 125274, 125278, 125280, 126065, 126133, 126209, 126270, 126464, 126468, 126469, 126496, 126497, 126499, 126500, 126501, 126503, 126504, 126505, 126515, 126516, 126520, 126521, 126522, 126523, 126524, 126530, 126531, 126535, 126536, 126537, 126538, 126539, 126540, 126541, 126544, 126545, 126547, 126548, 126549, 126551, 126552, 126553, 126554, 126555, 126556, 126557, 126558, 126559, 126560, 126561, 126563, 126564, 126565, 126567, 126571, 126572, 126579, 126580, 126584, 126585, 126589, 126590, 126591, 126592, 126602, 126603, 126620, 126625, 126628, 126629, 126634, 126635, 126652, 126704, 126706, 129024, 129036, 129040, 129096, 129104, 129114, 129120, 129160, 129168, 129198, 129200, 129202, 129792, 129939, 129940, 129995, 130032, 130042, 917505, 917506, 917536, 917632, 917760, 918000 } + local t={ 0, 167, 168, 169, 170, 174, 175, 177, 178, 188, 191, 215, 216, 247, 248, 746, 748, 888, 890, 896, 900, 907, 908, 909, 910, 930, 931, 1328, 1329, 1367, 1369, 1419, 1421, 1424, 1425, 1480, 1488, 1515, 1519, 1525, 1536, 1806, 1807, 1867, 1869, 1970, 1984, 2043, 2045, 2094, 2096, 2111, 2112, 2140, 2142, 2143, 2144, 2155, 2160, 2191, 2192, 2194, 2200, 2436, 2437, 2445, 2447, 2449, 2451, 2473, 2474, 2481, 2482, 2483, 2486, 2490, 2492, 2501, 2503, 2505, 2507, 2511, 2519, 2520, 2524, 2526, 2527, 2532, 2534, 2559, 2561, 2564, 2565, 2571, 2575, 2577, 2579, 2601, 2602, 2609, 2610, 2612, 2613, 2615, 2616, 2618, 2620, 2621, 2622, 2627, 2631, 2633, 2635, 2638, 2641, 2642, 2649, 2653, 2654, 2655, 2662, 2679, 2689, 2692, 2693, 2702, 2703, 2706, 2707, 2729, 2730, 2737, 2738, 2740, 2741, 2746, 2748, 2758, 2759, 2762, 2763, 2766, 2768, 2769, 2784, 2788, 2790, 2802, 2809, 2816, 2817, 2820, 2821, 2829, 2831, 2833, 2835, 2857, 2858, 2865, 2866, 2868, 2869, 2874, 2876, 2885, 2887, 2889, 2891, 2894, 2901, 2904, 2908, 2910, 2911, 2916, 2918, 2936, 2946, 2948, 2949, 2955, 2958, 2961, 2962, 2966, 2969, 2971, 2972, 2973, 2974, 2976, 2979, 2981, 2984, 2987, 2990, 3002, 3006, 3011, 3014, 3017, 3018, 3022, 3024, 3025, 3031, 3032, 3046, 3067, 3072, 3085, 3086, 3089, 3090, 3113, 3114, 3130, 3132, 3141, 3142, 3145, 3146, 3150, 3157, 3159, 3160, 3163, 3165, 3166, 3168, 3172, 3174, 3184, 3191, 3213, 3214, 3217, 3218, 3241, 3242, 3252, 3253, 3258, 3260, 3269, 3270, 3273, 3274, 3278, 3285, 3287, 3293, 3295, 3296, 3300, 3302, 3312, 3313, 3316, 3328, 3341, 3342, 3345, 3346, 3397, 3398, 3401, 3402, 3408, 3412, 3428, 3430, 3456, 3457, 3460, 3461, 3479, 3482, 3506, 3507, 3516, 3517, 3518, 3520, 3527, 3530, 3531, 3535, 3541, 3542, 3543, 3544, 3552, 3558, 3568, 3570, 3573, 3585, 3643, 3647, 3676, 3713, 3715, 3716, 3717, 3718, 3723, 3724, 3748, 3749, 3750, 3751, 3774, 3776, 3781, 3782, 3783, 3784, 3791, 3792, 3802, 3804, 3808, 3840, 3912, 3913, 3949, 3953, 3992, 3993, 4029, 4030, 4045, 4046, 4059, 4096, 4294, 4295, 4296, 4301, 4302, 4304, 4352, 4608, 4681, 4682, 4686, 4688, 4695, 4696, 4697, 4698, 4702, 4704, 4745, 4746, 4750, 4752, 4785, 4786, 4790, 4792, 4799, 4800, 4801, 4802, 4806, 4808, 4823, 4824, 4881, 4882, 4886, 4888, 4955, 4957, 4989, 4992, 5018, 5024, 5110, 5112, 5118, 5120, 5121, 5760, 5789, 5792, 5881, 5888, 5910, 5919, 5943, 5952, 5972, 5984, 5997, 5998, 6001, 6002, 6004, 6016, 6110, 6112, 6122, 6128, 6138, 6144, 6170, 6176, 6265, 6272, 6315, 6400, 6431, 6432, 6444, 6448, 6460, 6464, 6465, 6468, 6510, 6512, 6517, 6528, 6572, 6576, 6602, 6608, 6619, 6622, 6684, 6686, 6751, 6752, 6781, 6783, 6794, 6800, 6810, 6816, 6830, 6832, 6863, 6912, 6989, 6992, 7039, 7040, 7156, 7164, 7224, 7227, 7242, 7245, 7305, 7312, 7355, 7357, 7368, 7376, 7419, 7424, 7958, 7960, 7966, 7968, 8006, 8008, 8014, 8016, 8024, 8025, 8026, 8027, 8028, 8029, 8030, 8031, 8062, 8064, 8117, 8118, 8133, 8134, 8148, 8150, 8156, 8157, 8176, 8178, 8181, 8182, 8191, 8192, 8214, 8215, 8224, 8226, 8240, 8242, 8251, 8253, 8258, 8259, 8263, 8266, 8273, 8274, 8293, 8294, 8306, 8308, 8335, 8336, 8349, 8352, 8385, 8400, 8413, 8417, 8418, 8421, 8433, 8450, 8451, 8458, 8463, 8464, 8467, 8469, 8470, 8472, 8478, 8484, 8485, 8486, 8487, 8488, 8489, 8490, 8494, 8495, 8501, 8512, 8517, 8523, 8524, 8526, 8527, 8586, 8588, 8592, 8734, 8735, 8756, 8758, 8960, 8968, 8972, 8992, 8996, 9001, 9003, 9004, 9085, 9115, 9150, 9166, 9167, 9168, 9169, 9180, 9186, 9251, 9252, 9472, 9632, 9754, 9760, 10088, 10102, 10132, 11026, 11056, 11088, 11098, 11124, 11126, 11158, 11160, 11192, 11218, 11219, 11244, 11248, 11264, 11508, 11513, 11558, 11559, 11560, 11565, 11566, 11568, 11624, 11631, 11633, 11647, 11671, 11680, 11687, 11688, 11695, 11696, 11703, 11704, 11711, 11712, 11719, 11720, 11727, 11728, 11735, 11736, 11743, 11744, 11856, 11858, 11870, 12296, 12306, 12308, 12320, 12336, 12337, 12448, 12449, 12540, 12541, 42192, 42540, 42560, 42744, 42752, 42955, 42960, 42962, 42963, 42964, 42965, 42970, 42994, 43053, 43056, 43066, 43072, 43128, 43136, 43206, 43214, 43226, 43232, 43348, 43359, 43360, 43392, 43470, 43471, 43482, 43486, 43519, 43520, 43575, 43584, 43598, 43600, 43610, 43612, 43715, 43739, 43767, 43777, 43783, 43785, 43791, 43793, 43799, 43808, 43815, 43816, 43823, 43824, 43884, 43888, 44014, 44016, 44026, 55296, 57344, 64256, 64263, 64275, 64280, 64285, 64311, 64312, 64317, 64318, 64319, 64320, 64322, 64323, 64325, 64326, 64451, 64467, 64912, 64914, 64968, 64975, 64976, 65008, 65040, 65056, 65072, 65097, 65104, 65112, 65119, 65123, 65127, 65136, 65141, 65142, 65277, 65279, 65280, 65288, 65290, 65293, 65294, 65306, 65311, 65339, 65340, 65341, 65342, 65343, 65344, 65371, 65471, 65474, 65480, 65482, 65488, 65490, 65496, 65498, 65501, 65507, 65508, 65512, 65519, 65529, 65532, 65536, 65548, 65549, 65575, 65576, 65595, 65596, 65598, 65599, 65614, 65616, 65630, 65664, 65787, 65792, 65795, 65799, 65844, 65847, 65935, 65936, 65949, 65952, 65953, 66000, 66046, 66176, 66205, 66208, 66257, 66272, 66300, 66304, 66340, 66349, 66379, 66384, 66427, 66432, 66462, 66463, 66500, 66504, 66518, 66560, 66718, 66720, 66730, 66736, 66772, 66776, 66812, 66816, 66856, 66864, 66916, 66927, 66939, 66940, 66955, 66956, 66963, 66964, 66966, 66967, 66978, 66979, 66994, 66995, 67002, 67003, 67005, 67072, 67383, 67392, 67414, 67424, 67432, 67456, 67462, 67463, 67505, 67506, 67515, 67584, 67590, 67592, 67593, 67594, 67638, 67639, 67641, 67644, 67645, 67647, 67670, 67671, 67743, 67751, 67760, 67808, 67827, 67828, 67830, 67835, 67868, 67871, 67898, 67903, 67904, 68000, 68024, 68028, 68048, 68050, 68100, 68101, 68103, 68108, 68116, 68117, 68120, 68121, 68150, 68152, 68155, 68159, 68169, 68176, 68185, 68192, 68256, 68288, 68327, 68331, 68343, 68352, 68406, 68409, 68438, 68440, 68467, 68472, 68498, 68505, 68509, 68521, 68528, 68608, 68681, 68736, 68787, 68800, 68851, 68858, 68904, 68912, 68922, 69216, 69247, 69248, 69290, 69291, 69294, 69296, 69298, 69373, 69416, 69424, 69466, 69488, 69514, 69552, 69580, 69600, 69623, 69632, 69710, 69714, 69750, 69759, 69827, 69837, 69838, 69840, 69865, 69872, 69882, 69888, 69941, 69942, 69960, 69968, 70007, 70016, 70112, 70113, 70133, 70144, 70162, 70163, 70210, 70272, 70279, 70280, 70281, 70282, 70286, 70287, 70302, 70303, 70314, 70320, 70379, 70384, 70394, 70400, 70404, 70405, 70413, 70415, 70417, 70419, 70441, 70442, 70449, 70450, 70452, 70453, 70458, 70459, 70469, 70471, 70473, 70475, 70478, 70480, 70481, 70487, 70488, 70493, 70500, 70502, 70509, 70512, 70517, 70656, 70748, 70749, 70754, 70784, 70856, 70864, 70874, 71168, 71237, 71248, 71258, 71264, 71277, 71296, 71354, 71360, 71370, 71424, 71451, 71453, 71468, 71472, 71495, 71680, 71740, 71840, 71923, 71935, 71943, 71945, 71946, 71948, 71956, 71957, 71959, 71960, 71990, 71991, 71993, 71995, 72007, 72016, 72026, 72096, 72104, 72106, 72152, 72154, 72165, 72384, 72441, 72448, 72458, 72704, 72713, 72714, 72759, 72760, 72774, 72784, 72813, 72816, 72848, 72850, 72872, 72873, 72887, 72960, 72967, 72968, 72970, 72971, 73015, 73018, 73019, 73020, 73022, 73023, 73032, 73040, 73050, 73056, 73062, 73063, 73065, 73066, 73103, 73104, 73106, 73107, 73113, 73120, 73130, 73440, 73465, 73472, 73489, 73490, 73531, 73534, 73562, 73648, 73649, 73664, 73714, 73727, 74650, 74752, 74863, 74864, 74869, 74880, 75076, 77712, 77811, 92160, 92729, 92736, 92767, 92768, 92778, 92782, 92863, 92864, 92874, 92880, 92910, 92912, 92918, 92928, 92998, 93008, 93018, 93019, 93026, 93027, 93048, 93053, 93072, 93760, 93851, 93952, 94027, 94031, 94088, 94095, 94112, 113664, 113771, 113776, 113789, 113792, 113801, 113808, 113818, 113820, 113828, 119296, 119366, 119488, 119508, 119808, 119893, 119894, 119965, 119966, 119968, 119970, 119971, 119973, 119975, 119977, 119981, 119982, 119994, 119995, 119996, 119997, 120004, 120005, 120070, 120071, 120075, 120077, 120085, 120086, 120093, 120094, 120122, 120123, 120127, 120128, 120133, 120134, 120135, 120138, 120145, 120146, 120486, 120488, 120780, 120782, 120832, 122624, 122655, 122661, 122667, 122880, 122887, 122888, 122905, 122907, 122914, 122915, 122917, 122918, 122923, 122928, 122990, 123023, 123024, 123136, 123181, 123184, 123198, 123200, 123210, 123214, 123216, 123536, 123567, 123584, 123642, 123647, 123648, 124112, 124154, 124896, 124903, 124904, 124908, 124909, 124911, 124912, 124927, 124928, 125125, 125127, 125143, 125184, 125260, 125264, 125274, 125278, 125280, 126065, 126133, 126209, 126270, 126464, 126468, 126469, 126496, 126497, 126499, 126500, 126501, 126503, 126504, 126505, 126515, 126516, 126520, 126521, 126522, 126523, 126524, 126530, 126531, 126535, 126536, 126537, 126538, 126539, 126540, 126541, 126544, 126545, 126547, 126548, 126549, 126551, 126552, 126553, 126554, 126555, 126556, 126557, 126558, 126559, 126560, 126561, 126563, 126564, 126565, 126567, 126571, 126572, 126579, 126580, 126584, 126585, 126589, 126590, 126591, 126592, 126602, 126603, 126620, 126625, 126628, 126629, 126634, 126635, 126652, 126704, 126706, 129024, 129036, 129040, 129096, 129104, 129114, 129120, 129160, 129168, 129198, 129200, 129202, 129792, 129939, 129940, 129995, 130032, 130042, 917505, 917506, 917536, 917632, 917760, 918000 } local function rotate_in_uax50(i) local lo, hi = 1, #t while lo < hi do @@ -902,9 +903,10 @@ do end end + local sub = string.sub local function prepare_extra_data_font(id, res, name) if type(res)=='table' and (res.psname or res.filename) then - if (res.embedding=='no') and (type(name)=='string') and (name:sub(1,5)=='psft:') then + if (res.embedding=='no') and (type(name)=='string') and (sub(name,1,5)=='psft:') then font_extra_info[id] = res.resources.ltj_extra else local bname = res.psname or nameonly(res.filename) diff --git a/macros/luatex/generic/luatexja/src/ltj-latex.sty b/macros/luatex/generic/luatexja/src/ltj-latex.sty index 7e091d161d..9f6e4d0a36 100644 --- a/macros/luatex/generic/luatexja/src/ltj-latex.sty +++ b/macros/luatex/generic/luatexja/src/ltj-latex.sty @@ -12,45 +12,14 @@ \def\luatexjalatexLoaded{\endinput} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{ltj-latex}[2022-10-15 LaTeX support of LuaTeX-ja] +\ProvidesPackage{ltj-latex}[2024-05-16 LaTeX support of LuaTeX-ja] \endlinechar=13 %%% LaTeX version detection -\newif\ifltj@ltfilehook@avail -\@ifl@t@r\fmtversion{2020-10-01}{% - \@ifl@t@r\fmtversion{2020-10-02}% - {\ltj@ltfilehook@availtrue} - {% - \ifnum\patch@level<0\relax \ifnum\patch@level<-6 \ltj@ltfilehook@availtrue\fi - \else\ltj@ltfilehook@availtrue\fi - }% -}{} -\@ifl@t@r\fmtversion{2021-05-01}{\count@=1 }{\count@=0 } -\ifnum \count@<1 -%%%% \shipout - \newluafunction\ltj@@lua@shipout@inner - \directlua{ - local t = lua.get_functions_table() - local getbox, setbox = tex.getbox, tex.setbox - local shipout_lthook = luatexja.direction.shipout_lthook - t[\the\ltj@@lua@shipout@inner]=function () - local a = shipout_lthook(getbox(\the\ltj@afbox)) - if a then setbox(\the\ltj@afbox, a) end - end - } - \protected\luadef\ltj@@lua@shipout\ltj@@lua@shipout@inner - \def\ltj@shipout@{\ltj@@lua@shipout\primitive\shipout\box\ltj@afbox}% - \protected\def\ltj@shipout{\ltj@afterbox\ltj@shipout@} - \ifprimitive\shipout\let\shipout\ltj@shipout\fi - \ifcsname tex_shipout:D\endcsname - \expandafter\let\csname tex_shipout:D\endcsname\ltj@shipout - \fi -\else - \directlua{% - luatexbase.add_to_callback('pre_shipout_filter',luatexja.direction.shipout_lthook, 'ltj.direction', 1) - } -\fi +\directlua{% + luatexbase.add_to_callback('pre_shipout_filter',luatexja.direction.shipout_lthook, 'ltj.direction', 1) +} %%% patch for LaTeX \usepackage{lltjfont} @@ -59,36 +28,30 @@ \RequirePackage{lltjp-atbegshi} %%% patching commands -\ifltj@ltfilehook@avail - %% \ltj@ExecuteBeforePackage <package><code> and \ltj@ExecuteAfterPackage <package><code> - %% no-starred version: do nothing if the <package> is loaded - %% starred version: do <code> right away if the <package> is loaded - \def\ltj@ExecuteAfterPackage{\@ifstar\@@ltj@ExecuteAfterPackage@star\@@ltj@ExecuteAfterPackage} - \def\ltj@ExecuteBeforePackage{\@ifstar\@@ltj@ExecuteBeforePackage@star\@@ltj@ExecuteBeforePackage} - \@ifl@t@r\fmtversion{2021-11-15}{% 2021-11-15 - \def\@@ltj@ExecuteAfterPackage@star#1{\AddToHook{package/#1/after}} - \def\@@ltj@ExecuteBeforePackage@star#1{\AddToHook{package/#1/before}} - \long\def\@@ltj@ExecuteAfterPackage#1#2{% - \@ifpackageloaded{#1}{}{\AddToHook{package/#1/after}{#2}}% - } - \long\def\@@ltj@ExecuteBeforePackage#1#2{% - \@ifpackageloaded{#1}{}{\AddToHook{package/#1/before}{#2}}% - } - }{ - \def\@@ltj@ExecuteAfterPackage#1{\AddToHook{package/after/#1}} - \def\@@ltj@ExecuteBeforePackage#1{\AddToHook{package/before/#1}} - \long\def\@@ltj@ExecuteAfterPackage@star#1#2{% - \@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteAfterPackage{#1}{#2}}% - } - \long\def\@@ltj@ExecuteBeforePackage@star#1#2{% - \@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteBeforePackage{#1}{#2}}% - } +%% \ltj@ExecuteBeforePackage <package><code> and \ltj@ExecuteAfterPackage <package><code> +%% no-starred version: do nothing if the <package> is loaded +%% starred version: do <code> right away if the <package> is loaded +\def\ltj@ExecuteAfterPackage{\@ifstar\@@ltj@ExecuteAfterPackage@star\@@ltj@ExecuteAfterPackage} +\def\ltj@ExecuteBeforePackage{\@ifstar\@@ltj@ExecuteBeforePackage@star\@@ltj@ExecuteBeforePackage} +\@ifl@t@r\fmtversion{2021-11-15}{% 2021-11-15 + \def\@@ltj@ExecuteAfterPackage@star#1{\AddToHook{package/#1/after}} + \def\@@ltj@ExecuteBeforePackage@star#1{\AddToHook{package/#1/before}} + \long\def\@@ltj@ExecuteAfterPackage#1#2{% + \@ifpackageloaded{#1}{}{\AddToHook{package/#1/after}{#2}}% } -\else - \RequirePackage{filehook} - \let\ltj@ExecuteAfterPackage=\AtEndOfPackageFile - \let\ltj@ExecuteBeforePackage=\AtBeginOfPackageFile -\fi + \long\def\@@ltj@ExecuteBeforePackage#1#2{% + \@ifpackageloaded{#1}{}{\AddToHook{package/#1/before}{#2}}% + } +}{ + \def\@@ltj@ExecuteAfterPackage#1{\AddToHook{package/after/#1}} + \def\@@ltj@ExecuteBeforePackage#1{\AddToHook{package/before/#1}} + \long\def\@@ltj@ExecuteAfterPackage@star#1#2{% + \@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteAfterPackage{#1}{#2}}% + } + \long\def\@@ltj@ExecuteBeforePackage@star#1#2{% + \@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteBeforePackage{#1}{#2}}% + } +} \def\ltj@pkgpatch@im#1{\@ifnextchar[{\ltj@pkgpatch@im@{#1}}{\ltj@pkgpatch@im@{#1}[lltjp-#1]}}%] \def\ltj@pkgpatch@im@#1[#2]{\ltj@ExecuteAfterPackage*{#1}{\ltj@pkgpatch@im@@{#2}}} \def\ltj@pkgpatch@im@@#1{% @@ -101,11 +64,7 @@ } \def\ltj@pkgpatch#1{\@ifnextchar[{\ltj@pkgpatch@{#1}}{\ltj@pkgpatch@{#1}[lltjp-#1]}}%] -\ifltj@ltfilehook@avail - \def\ltj@pkgpatch@@{\AddToHook{begindocument/before}[luatexja.autopatch]} -\else - \def\ltj@pkgpatch@@{\gpreto\@begindocumenthook} -\fi +\def\ltj@pkgpatch@@{\AddToHook{begindocument/before}[luatexja.autopatch]} \def\ltj@pkgpatch@#1[#2]{% \ltj@pkgpatch@@{% \@ifpackageloaded{#1}{\@ifpackageloaded{#2}{}{\RequirePackage{#2}}}{}% @@ -121,18 +80,12 @@ \ltj@pkgpatch{tascmac} \ltj@pkgpatch{ascmac}[lltjp-tascmac] \ltj@pkgpatch@im{stfloats} -\ifltj@ltfilehook@avail\else - \ltj@pkgpatch{preview} %% at \begin{document} - % (preview package has delayed option) -\fi \ltj@pkgpatch{array} %% at \begin{document} \ltj@pkgpatch{collcell} %% at \begin{document} \ltj@pkgpatch@im{unicode-math} \ltj@pkgpatch@im{siunitx} \ltj@pkgpatch@im{microtype} -\ifltj@ltfilehook@avail\else\ltj@pkgpatch@im{everyshi}\fi - \RequirePackage{lltjp-geometry} \ltj@ExecuteBeforePackage{breqn}{% diff --git a/macros/luatex/generic/luatexja/src/ltj-pretreat.lua b/macros/luatex/generic/luatexja/src/ltj-pretreat.lua index 43ecac806c..8f5632be4e 100644 --- a/macros/luatex/generic/luatexja/src/ltj-pretreat.lua +++ b/macros/luatex/generic/luatexja/src/ltj-pretreat.lua @@ -156,16 +156,17 @@ function set_box_stack_level(head, mode) if ltjs.list_dir == dir_tate then for p in traverse_glyph(to_direct(head)) do if getlang(p)==lang_ja and has_attr(p, attr_icflag, 0) then - local pf = ltjf_replace_altfont(attr_curtfnt, getchar(p), p) + local pc = ltjs_orig_char_table[p] or getchar(p) + local pf = ltjf_replace_altfont(attr_curtfnt, pc, p) if ltjf_font_metric_table[pf].vert_activated then - local pc = ltjf_font_metric_table[pf].vform[pc]; if pc then setchar(p, pc) end + pc = ltjf_font_metric_table[pf].vform[pc]; if pc then setchar(p, pc) end end end end else for p in traverse_glyph(to_direct(head)) do if getlang(p)==lang_ja and has_attr(p, attr_icflag, 0) then - ltjf_replace_altfont(attr_curjfnt, getchar(p), p) + ltjf_replace_altfont(attr_curjfnt, ltjs_orig_char_table[p] or getchar(p), p) end end end diff --git a/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua b/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua index 88352dd5b2..23d20be3f3 100644 --- a/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua +++ b/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua @@ -15,7 +15,8 @@ do end local cidfont_data = {} local cache_chars = {} -local cache_ver = 13 +local cache_ver = 14 +local sub = string.sub local identifiers = fonts.hashes.identifiers local cid_reg, cid_order, cid_supp, cid_name @@ -147,7 +148,7 @@ do descender = 655360*0.12, }, embedding = "no", cache = "yes", factor = 0, hfactor = 0, vfactor = 0, - tounicode = 1, + tounicode = 1, filename="", properties = { language = "dflt", script = "dflt" }, } cidfont_data[cid_name] = k @@ -300,7 +301,6 @@ local function prepare_cid_font(reg, ord) return cidfont_data[cid_name] or read_cid_font() end - local definers = fonts.definers local function mk_rml(name, size, id) local specification = definers.analyze(name,size) @@ -308,8 +308,8 @@ local function mk_rml(name, size, id) specification.detail = specification.detail or '' do local n = specification.name - if n:sub(1,1)=="{" then n=n:sub(2) end - if n:sub(-1)=="}" then n=n:sub(1,-2) end + if sub(n,1,1)=="{" then n=sub(n,2) end + if sub(n,-1)=="}" then n=sub(n,1,-2) end specification.name=n end local fontdata = {} @@ -382,11 +382,11 @@ local function mk_rml(name, size, id) end local function font_callback(name, size, id, fallback) - if name:sub(1,1)=="{" and name:sub(-1)=="}" then name = name:sub(2,-2) end + if sub(name,1,1)=="{" and sub(name,-1)=="}" then name = sub(name,2,-2) end local p = name:find(":") or 0 - if name:sub(1, p-1) == 'psft' then + if sub(name,1, p-1) == 'psft' then local s = "Adobe-Japan1-7" - local basename = name:sub(p+1) + local basename = sub(name,p+1) local p = basename:find(":") local q = basename:find("/[BI][BI]?") if q and p and q<=p then @@ -394,12 +394,12 @@ local function font_callback(name, size, id, fallback) p = basename:find(":") end if p then - local xname = basename:sub(p+1) + local xname = sub(basename,p+1) p = 1 while p do local q = xname:find(";", p+1) or xname:len()+1 - if xname:sub(p, p+3)=='cid=' and q>p+4 then - s = xname:sub(p+4, q-1) + if sub(xname,p, p+3)=='cid=' and q>p+4 then + s = sub(xname,p+4, q-1) end if xname:len()+1==q then p = nil else p = q + 1 end end diff --git a/macros/luatex/generic/luatexja/src/ltj-ruby.lua b/macros/luatex/generic/luatexja/src/ltj-ruby.lua index 29b6fe1998..2ff41be947 100644 --- a/macros/luatex/generic/luatexja/src/ltj-ruby.lua +++ b/macros/luatex/generic/luatexja/src/ltj-ruby.lua @@ -3,7 +3,7 @@ -- luatexbase.provides_module({ name = 'luatexja.ruby', - date = '2022-12-31', + date = '2024-09-06', description = 'Ruby annotation', }) luatexja.ruby = {} @@ -37,7 +37,7 @@ local setwhd = node.direct.setwhd local setlist = node.direct.setlist local setvalue = node.direct.setdata -local node_new = node.direct.new +local node_new = luatexja.dnode_new local node_remove = node.direct.remove local node_next = node.direct.getnext local node_copy, node_tail = node.direct.copy, node.direct.tail @@ -45,6 +45,7 @@ local node_free = node.direct.flush_node or node.direct.free local get_attr, set_attr = node.direct.get_attribute, node.direct.set_attribute local insert_before, insert_after = node.direct.insert_before, node.direct.insert_after local hpack = node.direct.hpack +local node_inherit_attr = luatexja.node_inherit_attr local id_hlist = node.id 'hlist' local id_vlist = node.id 'vlist' @@ -175,10 +176,10 @@ do set_attr(nh, attr_icflag, get_attr_icflag(nh) + PROCESSED_BEGIN_FLAG) setnext(node_tail(h), nh) - setlist(f, nil); node_free(f) + setlist(f, nil) setlist(b, nil); node_free(b) local g = luatexja.jfmglue.main(h,false) - return hpack(g) + g = node_inherit_attr(hpack(g),f); node_free(f); return g else return f end @@ -207,6 +208,7 @@ end -- box の中身のノードは再利用される local enlarge do + local dimensions = node.direct.dimensions local FROM_JFM = luatexja.icflag_table.FROM_JFM local PROCESSED = luatexja.icflag_table.PROCESSED local KANJI_SKIP = luatexja.icflag_table.KANJI_SKIP @@ -239,18 +241,22 @@ do hx = node_next(hx) end -- 先頭の空白を挿入 - local k = node_new(id_glue); - setglue(k, prenw, round(pre*65536), 0, 2, 0) - h = insert_before(h, h, k); + local k1 = node_new(id_glue); + setglue(k1, prenw, round(pre*65536), 0, 2, 0) + h = insert_before(h, h, k1); -- 末尾の空白を挿入 - local k = node_new(id_glue); - setglue(k, postnw, round(post*65536), 0, 2, 0) - insert_after(h, node_tail(h), k); + local k2 = node_new(id_glue); + setglue(k2, postnw, round(post*65536), 0, 2, 0) + insert_after(h, node_tail(h), k2); -- hpack - setlist(box, nil); node_free(box) - box = hpack(h, new_width, 'exactly') - setheight(box, hh); setdepth(box, hd) - return box + setlist(box, nil); + local new_box = node_inherit_attr(hpack(h, new_width, 'exactly'), box) + setheight(new_box, hh); setdepth(new_box, hd) + node_free(box); + local gset, gsign, go + = getfield(new_box,'glue_set'), getfield(new_box,'glue_sign'), getfield(new_box,'glue_order') + return new_box, (dimensions(gset, gsign, go, k1, node_next(k1))), (dimensions(gset, gsign, go, k2)) + -- return value: (enlarged box), (width of left glue), (width of right glue) end end @@ -307,15 +313,18 @@ function luatexja.ruby.texiface(rst, rtlr, rtlp) end ---------------------------------------------------------------- --- pre_line_break +-- pre_linebreak ---------------------------------------------------------------- -- r, p の中身のノードは再利用される local function enlarge_parent(r, p, tmp_tbl, no_begin, no_end) -- r: ルビ部分の格納された box,p: 同,親文字 + -- no_begin: 行頭形ではないか + -- no_end: 行末形ではないか local rwidth = getwidth(r) local sumprot = rwidth - getwidth(p) -- >0 local pre_intrusion, post_intrusion + local pre_protrusion, post_protrusion local ppre, pmid, ppost = tmp_tbl.ppre, tmp_tbl.pmid, tmp_tbl.ppost local mapre, mapost = tmp_tbl.mapre, tmp_tbl.mapost local intmode = (tmp_tbl.mode//4)%8 @@ -325,17 +334,17 @@ local function enlarge_parent(r, p, tmp_tbl, no_begin, no_end) mapre = min(mapre,mapost); mapost = mapre end if intmode == 0 then -- とりあえず組んでから決める - p = enlarge(p, rwidth, ppre, pmid, ppost, 0, 0) + p, pre_protrusion, post_protrusion = enlarge(p, rwidth, ppre, pmid, ppost, 0, 0) pre_intrusion = min(mapre, round(ppre*getfield(p, 'glue_set')*65536)) post_intrusion = min(mapost, round(ppost*getfield(p, 'glue_set')*65536)) elseif intmode == 1 then pre_intrusion = min(mapre, sumprot); post_intrusion = min(mapost, max(sumprot-pre_intrusion, 0)) - p = enlarge(p, rwidth, ppre, pmid, ppost, pre_intrusion, post_intrusion) + p, pre_protrusion, post_protrusion = enlarge(p, rwidth, ppre, pmid, ppost, pre_intrusion, post_intrusion) elseif intmode == 2 then post_intrusion = min(mapost, sumprot); pre_intrusion = min(mapre, max(sumprot-post_intrusion, 0)) - p = enlarge(p, rwidth, ppre, pmid, ppost, pre_intrusion, post_intrusion) + p, pre_protrusion, post_protrusion = enlarge(p, rwidth, ppre, pmid, ppost, pre_intrusion, post_intrusion) elseif intmode==3 then local n = min(mapre, mapost)*2 if n < sumprot then @@ -343,7 +352,7 @@ local function enlarge_parent(r, p, tmp_tbl, no_begin, no_end) else pre_intrusion = sumprot//2; post_intrusion = sumprot - pre_intrusion end - p = enlarge(p, rwidth, ppre, pmid, ppost, pre_intrusion, post_intrusion) + p, pre_protrusion, post_protrusion = enlarge(p, rwidth, ppre, pmid, ppost, pre_intrusion, post_intrusion) pre_intrusion = min(mapre, pre_intrusion + round(ppre*getfield(p, 'glue_set')*65536)) post_intrusion = min(mapost, post_intrusion + round(ppost*getfield(p, 'glue_set')*65536)) else -- intmode == 4 @@ -354,7 +363,7 @@ local function enlarge_parent(r, p, tmp_tbl, no_begin, no_end) else pre_intrusion, post_intrusion = mapre, min(mapost, sumprot-mapre) end - p = enlarge(p, rwidth, ppre, pmid, ppost, pre_intrusion, post_intrusion) + p, pre_protrusion, post_protrusion = enlarge(p, rwidth, ppre, pmid, ppost, pre_intrusion, post_intrusion) end setshift(r, -pre_intrusion) local rwidth = rwidth - pre_intrusion - post_intrusion @@ -371,24 +380,29 @@ local function enlarge_parent(r, p, tmp_tbl, no_begin, no_end) post_jfmgk = (post_intrusion > 0) end end - return r, p, orig_post_intrusion, post_jfmgk + return r, p, orig_post_intrusion, post_jfmgk, + pre_protrusion - pre_intrusion, post_protrusion - post_intrusion end -- ルビボックスの生成(単一グループ) -- returned value: <new box>, <ruby width>, <post_intrusion> local max_margin -local function new_ruby_box(r, p, tmp_tbl, no_begin, no_end) +local function new_ruby_box(r, p, tmp_tbl, no_begin, no_end, w) + -- no_begin: 行頭形ではないか + -- no_end: 行末形ではないか local post_intrusion, post_jfmgk = 0, false local imode local ppre, pmid, ppost = tmp_tbl.ppre, tmp_tbl.pmid, tmp_tbl.ppost local mapre, mapost = tmp_tbl.mapre, tmp_tbl.mapost local rpre, rmid, rpost, rsmash + local protrusion = {0, 0}; tmp_tbl[tmp_tbl.index] = protrusion imode = tmp_tbl.mode//0x100000; rsmash = (imode%2 ==1) imode = imode//2; rpost = imode%8; imode = (imode-rpost)/8; rmid = imode%8; imode = (imode-rmid)/8; rpre = imode%8 if getwidth(r) > getwidth(p) then -- change the width of p - r, p, post_intrusion, post_jfmgk = enlarge_parent(r, p, tmp_tbl, no_begin, no_end) + r, p, post_intrusion, post_jfmgk, protrusion[1], protrusion[2] + = enlarge_parent(r, p, tmp_tbl, no_begin, no_end) elseif getwidth(r) < getwidth(p) then -- change the width of r r = enlarge(r, getwidth(p), rpre, rmid, rpost, 0, 0) post_intrusion = 0 @@ -406,7 +420,7 @@ local function new_ruby_box(r, p, tmp_tbl, no_begin, no_end) end if need_repack then local rt = r - r = hpack(getlist(r), getwidth(r), 'exactly') + r = node_inherit_attr(hpack(getlist(r), getwidth(r), 'exactly'), r) setlist(rt, nil); node_free(rt); end end @@ -416,7 +430,8 @@ local function new_ruby_box(r, p, tmp_tbl, no_begin, no_end) insert_after(r, k, p); setnext(p, nil) if tmp_tbl.rubydepth >= 0 then setdepth(r, tmp_tbl.rubydepth) end if tmp_tbl.baseheight >= 0 then setheight(p, tmp_tbl.baseheight) end - a = node.direct.vpack(r); setshift(a, 0) + a = node_inherit_attr(node.direct.vpack(r), p) + setshift(a, 0) set_attr(a, attr_ruby, post_intrusion) set_attr(a, attr_ruby_post_jfmgk, post_jfmgk and 1 or 0) if rsmash or getheight(a)<getheight(p) then @@ -437,7 +452,10 @@ local max_allow_pre, max_allow_post local flush_list = node.direct.flush_list -- 中付き熟語ルビ,cmp containers -- 「文字の構成を考えた」やつはどうしよう -local function pre_low_cal_box(w, cmp) +local pre_low_cal_box +do + local node_prev = node.direct.getprev +pre_low_cal_box = function (w, cmp) local rb = {} local pb = {} local kf = {} @@ -450,18 +468,24 @@ local function pre_low_cal_box(w, cmp) local coef = {} -- 連立一次方程式の拡大係数行列 local rtb = expand_3bits(rst.stretch) + local kb, ka + if rst.quirk_protrusion then + kb = node_prev(node_tail(wv)); ka = node_next(kb) + node_remove(wv, kb); node_remove(wv, ka) + end -- node list 展開・行末形の計算 local nt, nta, ntb = wv, nil, nil -- nt*: node temp rst.ppre, rst.pmid, rst.ppost = rtb[6], rtb[5], rtb[4] rst.mapre, rst.mapost = max_allow_pre, 0 - for i = 1, cmp do + for i = 1, cmp do nt = node_next(nt); rb[i] = nt; nta = concat(nta, node_copy(nt)) nt = node_next(nt); pb[i] = nt; ntb = concat(ntb, node_copy(nt)) coef[i] = {} for j = 1, 2*i do coef[i][j] = 1 end for j = 2*i+1, 2*cmp+1 do coef[i][j] = 0 end + rst.index = i kf[i], coef[i][2*cmp+2] - = new_ruby_box(node_copy(nta), node_copy(ntb), rst, true, false) + = new_ruby_box(node_copy(nta), node_copy(ntb), rst, true, false, w) end node_free(nta); node_free(ntb) @@ -474,8 +498,9 @@ local function pre_low_cal_box(w, cmp) for j = 1, 2*i-1 do coef[cmp+i][j] = 0 end for j = 2*i, 2*cmp+1 do coef[cmp+i][j] = 1 end nta = concat(node_copy(rb[i]), nta); ntb = concat(node_copy(pb[i]), ntb) + rst.index = 2*cmp+1-i kf[cmp+i], coef[cmp+i][2*cmp+2] - = new_ruby_box(node_copy(nta), node_copy(ntb), rst, false, true) + = new_ruby_box(node_copy(nta), node_copy(ntb), rst, false, true, w) end -- ここで,nta, ntb には全 container を連結した box が入っているので @@ -484,13 +509,17 @@ local function pre_low_cal_box(w, cmp) for j = 1, 2*cmp+1 do coef[2*cmp+1][j] = 1 end rst.ppre, rst.pmid, rst.ppost = rtb[3], rtb[2], rtb[1] rst.mapre, rst.mapost = max_allow_pre, max_allow_post + rst.index = 2*cmp+1 kf[2*cmp+1], coef[2*cmp+1][2*cmp+2], post_intrusion_backup, post_jfmgk_backup - = new_ruby_box(nta, ntb, rst, true, true) + = new_ruby_box(nta, ntb, rst, true, true, w) -- w.value の node list 更新. local nt = wv flush_list(node_next(wv)) for i = 1, 2*cmp+1 do setnext(nt, kf[i]); nt = kf[i] end + if rst.quirk_protrusion then + insert_after(wv, nt, kb); insert_after(wv, kb, ka); + end if cmp==1 then solve_1(coef) elseif cmp==2 then solve_2(coef) @@ -499,6 +528,7 @@ local function pre_low_cal_box(w, cmp) end return coef end +end local first_whatsit do @@ -512,25 +542,40 @@ do end local next_cluster_array = {} +local pre_high -- ノード追加 -local function pre_low_app_node(head, w, cmp, coef, ht, dp) +do + local node_prev = node.direct.getprev + local KINSOKU = luatexja.icflag_table.KINSOKU + local function pre_low_app_node (head, w, cmp, coef, ht, dp) -- メインの node list 更新 - local nt = node_new(id_glue) + local nt = node_new(id_glue, nil, w) -- INHERIT ATTRIBUTES OF w setglue(nt, coef[1][2*cmp+2], 0, 0, 0, 0) set_attr(nt, attr_ruby, 1); set_attr(w, attr_ruby, 2) head = insert_before(head, w, nt) nt = w for i = 1, cmp do -- rule - local nta = node_new(id_rule, 0); + local nta = node_new(id_rule, 0, w); -- INHERIT ATTRIBUTES OF w setwhd(nta, coef[i*2][2*cmp+2], ht, dp) insert_after(head, nt, nta) set_attr(nta, attr_ruby, 2*i+1) -- glue if i~=cmp or not next_cluster_array[w] then - nt = node_new(id_glue); insert_after(head, nta, nt) + nt = node_new(id_glue, nil, w); -- INHERIT ATTRIBUTE OF w + insert_after(head, nta, nt) else - nt = next_cluster_array[w] + nt = next_cluster_array[w]; local f = node_next(nta) + while f and f~=nt do + if getid(f)==id_glue then + node_remove(head, nt); insert_before(head, f, nt); f = nil + else if getid(f)==id_penalty and get_attr_icflag(f)==KINSOKU then + node_inherit_attr(f, w) -- INHERIT ATTRIBUTE OF w; for lua-ul + set_attr(f, attr_icflag, KINSOKU) + end + f = node_next(f) + end + end end setglue(nt, coef[i*2+1][2*cmp+2], 0, 0, 0, 0) set_attr(nt, attr_ruby, 2*i+2) @@ -540,14 +585,13 @@ local function pre_low_app_node(head, w, cmp, coef, ht, dp) next_cluster_array[w]=nil return head, first_whatsit(node_next(nt)) end - -local function pre_high(ahead) +pre_high = function (ahead) if not ahead then return ahead end local head = to_direct(ahead) post_intrusion_backup, post_jfmgk_backup = 0, false local n = first_whatsit(head) while n do - if getsubtype(n) == sid_user and getfield(n, 'user_id') == RUBY_PRE then + if getsubtype(n) == sid_user and getfield(n, 'user_id') == RUBY_PRE then local nv = getvalue(n) local rst = getvalue(nv) max_allow_pre = rst.pre or 0 @@ -567,13 +611,13 @@ local function pre_high(ahead) if rst.exclude_pre_jfmgk_from_prev_ruby and atr>0 and ((old_break_info[atr] or post_intrusion_backup) > 0) then -- 「直前のルビが文字に進入→現在のルビの和文処理グルーへの進入はなし」という状況 - rst.before_jfmgk = 0 + max_allow_pre = 0;rst.before_jfmgk = 0 end post_intrusion_backup, post_jfmgk_backup = 0, false max_allow_post = rst.post or 0 max_margin = rst.maxmargin or 0 local coef = pre_low_cal_box(n, rst.count) - local s = node_tail(nv) --ルビ文字 + local s = node_tail(nv); if rst.quirk_protrusion then s = node_prev(node_prev(s)) end --ルビ文字 head, n = pre_low_app_node( head, n, rst.count, coef, getheight(s), getdepth(s) ) @@ -583,11 +627,11 @@ local function pre_high(ahead) end return to_node(head) end +end luatexbase.add_to_callback('pre_linebreak_filter', pre_high, 'ltj.ruby.pre', 100) -luatexbase.add_to_callback('hpack_filter', pre_high, 'ltj.ruby.pre', 100) ---------------------------------------------------------------- --- post_line_break +-- post_linebreak ---------------------------------------------------------------- local post_lown do @@ -595,47 +639,110 @@ do local id = get_attr(wv, attr_ruby_id) or 0 if id>0 and cache_handle then cache_handle:write( - 'lrob[' .. tostring(id) .. ']=' .. num .. '\nlrob[' .. tostring(-id) .. ']=' .. tostring(bool) .. '\n') + 'lrob[' .. tostring(id) .. ']=' .. tostring(num) .. '\nlrob[' .. tostring(-id) .. ']=' .. tostring(bool) .. '\n') end end - + local node_prev = node.direct.getprev + local function new_kern(inherit, num) + local k = node_new(id_kern, 1, inherit); setkern(k, num); set_attr(kt, attr_icflag, PROCESSED); + return k; + end post_lown = function (rs, rw, cmp, ch) -- ch: the head of `current' hlist if #rs ==0 or not rw then return ch end local hn = get_attr(rs[1], attr_ruby) local fn = get_attr(rs[#rs], attr_ruby) - local wv = getvalue(rw) + local wv = getvalue(rw); local rst = getvalue(wv) if hn==1 then if fn==2*cmp+2 then - local hn = node_tail(wv) - node_remove(wv, hn) - insert_after(ch, rs[1], hn) - set_attr(hn, attr_icflag, PROCESSED) - write_aux(wv, get_attr(hn, attr_ruby), get_attr(hn, attr_ruby_post_jfmgk))-- 行中形 + -- 行中形 + local nn = node_tail(wv); + if rst.quirk_protrusion then + local prot_b,prot_a = rst[fn-1][1], rst[fn-1][2] + local ka=nn; local kb = node_prev(nn); nn = node_prev(kb) + node_remove(wv, nn); node_remove(wv, kb); node_remove(wv, ka) + if prot_b~=0 then + setkern(kb, prot_b); insert_after(ch, rs[1], kb); + local kt = new_kern(rw, -prot_b); insert_after(ch, kb, kt); + insert_after(ch, kt, nn); + else + node_free(kb); insert_after(ch, rs[1], nn) + end + if prot_a~=0 then + local kt = new_kern(rw, -prot_a); insert_after(ch, nn, kt); + setkern(ka, prot_a); insert_after(ch, kt, ka); + else node_free(ka) + end + else + node_remove(wv, nn); insert_after(ch, rs[1], nn) + end + set_attr(nn, attr_icflag, PROCESSED) + write_aux(wv, get_attr(nn, attr_ruby), get_attr(nn, attr_ruby_post_jfmgk)) else - local deg, hn = (fn-1)/2, wv - for i = 1, deg do hn = node_next(hn) end; - node_remove(wv, hn) - setnext(hn, nil) - insert_after(ch, rs[1], hn) - set_attr(hn, attr_icflag, PROCESSED) - write_aux(wv, get_attr(hn, attr_ruby), get_attr(hn, attr_ruby_post_jfmgk)) + -- 行末形 + local deg, nn = (fn-1)/2, wv; for i = 1, deg do nn = node_next(nn) end + if rst.quirk_protrusion then + local prot_b = rst[deg][1] + local ka = node_tail(wv); local kb = node_prev(ka); + node_remove(wv, nn); setnext(nn, nil); node_remove(wv, kb); + if prot_b~=0 then + setkern(kb, prot_b); insert_after(ch, rs[1], kb); + local kt = new_kern(rw, -prot_b); insert_after(ch, kb, kt); + insert_after(ch, kt, nn); + else + node_free(kb); insert_after(ch, rs[1], nn) + end + if deg==cmp then + local prot_a = rst[deg][2]; node_remove(wv,ka) + if prot_a~=0 then + local kt = new_kern(rw, -prot_a); insert_after(ch, nn, kt); + setkern(ka, prot_a); insert_after(ch, kt, ka); + else node_free(ka) + end + end + else + node_remove(wv, nn); setnext(nn, nil); insert_after(ch, rs[1], nn) + end + + set_attr(nn, attr_icflag, PROCESSED) + write_aux(wv, get_attr(nn, attr_ruby), get_attr(nn, attr_ruby_post_jfmgk)) end else - local deg, hn = max((hn-1)/2,2), wv - for i = 1, cmp+deg-1 do hn = node_next(hn) end + -- 行頭形 + local nn = wv; for i = 1, cmp+max((hn-1)/2,2)-1 do nn = node_next(nn) end -- -1 is needed except the case hn = 3, -- because a ending-line form is removed already from the list - node_remove(wv, hn); setnext(hn, nil) - insert_after(ch, rs[1], hn) - set_attr(hn, attr_icflag, PROCESSED) + if rst.quirk_protrusion then + local deg=(hn-1)/2; local prot_b = rst[2*cmp+1-deg][1] + local ka = node_tail(wv); node_remove(wv, nn); setnext(nn, nil); + if deg==1 then + local kb = node_prev(ka); node_remove(wv, kb); + if prot_b~=0 then + setkern(kb, prot_b); insert_after(ch, rs[1], kb); + local kt = new_kern(rw, -prot_b); insert_after(ch, kb, kt); + insert_after(ch, kt, nn); + else + node_free(kb); insert_after(ch, rs[1], nn) + end + else insert_after(ch, rs[1], nn) + end + local prot_a = rst[2*cmp+1-deg][2]; node_remove(wv,ka) + if prot_a~=0 then + local kt = new_kern(rw, -prot_a); insert_after(ch, nn, kt); + setkern(ka, prot_a); insert_after(ch, kt, ka); + else node_free(ka) + end + else + node_remove(wv, nn); setnext(nn, nil); insert_after(ch, rs[1], nn) + end + + set_attr(nn, attr_icflag, PROCESSED) if fn == 2*cmp-1 then - write_aux(wv, get_attr(hn, attr_ruby), get_attr(hn, attr_ruby_post_jfmgk)) + write_aux(wv, get_attr(nn, attr_ruby), get_attr(nn, attr_ruby_post_jfmgk)) end end for i = 1,#rs do - local ri = rs[i] - ch = node_remove(ch, ri); node_free(ri); + local ri = rs[i]; ch = node_remove(ch, ri); node_free(ri) end -- cleanup if fn >= 2*cmp+1 then node_free(rw) end @@ -644,73 +751,86 @@ do end local traverse_id = node.direct.traverse_id -local function post_high_break(head) - local rs = {} -- rs: sequence of ruby_nodes, - local rw = nil -- rw: main whatsit - local cmp = -2 -- dummy - for h in traverse_id(id_hlist, to_direct(head)) do - for i = 1, #rs do rs[i] = nil end - local ha = getlist(h) +local post_high_hbox, post_high_break +do + local rs, rw = {}, nil -- rs: sequence of ruby_nodes, rw: main whatsit + local cmp + post_high_break = function (head) + for h in traverse_id(id_hlist, to_direct(head)) do + for i = 1, #rs do rs[i] = nil end + local ha = getlist(h); + while ha do + local hai = getid(ha) + local i = ((hai == id_glue and getsubtype(ha)==0) + or (hai == id_rule and getsubtype(ha)==0) + or (hai == id_whatsit and getsubtype(ha)==sid_user + and getfield(ha, 'user_id', RUBY_POST))) + and get_attr(ha, attr_ruby) or 0 + if i==0 then + ha = node_next(ha) + elseif i==1 then + setlist(h, post_lown(rs, rw, cmp, getlist(h))) + for i = 2, #rs do rs[i] = nil end -- rs[1] is set by the next statement + rs[1], rw = ha, nil; ha = node_next(ha) + elseif i==2 then + rw = ha + cmp = getvalue(getvalue(rw)).count + local hb, hc = node_remove(getlist(h), rw) + setlist(h, hb); ha = hc + else -- i>=3 + rs[#rs+1] = ha; ha = node_next(ha) + end + end + setlist(h, post_lown(rs, rw, cmp, getlist(h))) + end + return head + end + post_high_hbox = function (ahead) + for i = 1, #rs do rs[i] = nil end; rw = nil + local ha = to_direct(ahead); local head = ha while ha do local hai = getid(ha) local i = ((hai == id_glue and getsubtype(ha)==0) - or (hai == id_rule and getsubtype(ha)==0) - or (hai == id_whatsit and getsubtype(ha)==sid_user - and getfield(ha, 'user_id', RUBY_POST))) - and get_attr(ha, attr_ruby) or 0 + or (hai == id_rule and getsubtype(ha)==0) + or (hai == id_whatsit and getsubtype(ha)==sid_user + and getfield(ha, 'user_id', RUBY_POST))) + and get_attr(ha, attr_ruby) or 0 if i==0 then ha = node_next(ha) elseif i==1 then - setlist(h, post_lown(rs, rw, cmp, getlist(h))) + head = post_lown(rs, rw, cmp, head) for i = 2, #rs do rs[i] = nil end -- rs[1] is set by the next statement rs[1], rw = ha, nil; ha = node_next(ha) elseif i==2 then rw = ha cmp = getvalue(getvalue(rw)).count - local hb, hc = node_remove(getlist(h), rw) - setlist(h, hb); ha = hc - else -- i>=3 + head, ha = node_remove(head, rw) + else -- i >= 3 rs[#rs+1] = ha; ha = node_next(ha) end end - setlist(h, post_lown(rs, rw, cmp, getlist(h))) + return to_node(post_lown(rs, rw, cmp, head)) end - return head end - -local function post_high_hbox(ahead) - local ha = to_direct(ahead); local head = ha - local rs = {}; -- rs: sequence of ruby_nodes, - local rw = nil; -- rw: main whatsit - local cmp - while ha do - local hai = getid(ha) - local i = ((hai == id_glue and getsubtype(ha)==0) - or (hai == id_rule and getsubtype(ha)==0) - or (hai == id_whatsit and getsubtype(ha)==sid_user - and getfield(ha, 'user_id', RUBY_POST))) - and get_attr(ha, attr_ruby) or 0 - if i==0 then - ha = node_next(ha) - elseif i==1 then - head = post_lown(rs, rw, cmp, head) - for i = 2, #rs do rs[i] = nil end -- rs[1] is set by the next statement - rs[1], rw = ha, nil; ha = node_next(ha) - elseif i==2 then - rw = ha - cmp = getvalue(getvalue(rw)).count - head, ha = node_remove(head, rw) - else -- i >= 3 - rs[#rs+1] = ha; ha = node_next(ha) - end +do + -- pre_append_to_vlist_filter.lua: distributed with lua-ul + local found = kpse.find_file('pre_append_to_vlist_filter.lua', 'lua') + if not found then + luatexbase.add_to_callback('post_linebreak_filter', post_high_break, 'ltj.ruby.post_break') + else + require 'pre_append_to_vlist_filter' + luatexbase.add_to_callback('pre_append_to_vlist_filter', + function(head, loc) + return (loc~='post_linebreak') and head or post_high_break(head) + end, + 'ltj.ruby.post_break', + (luatexbase.priority_in_callback('pre_append_to_vlist_filter', 'add underlines to list') or 1)) end - return to_node(post_lown(rs, rw, cmp, head)) + luatexbase.add_to_callback('hpack_filter', + function(head) return post_high_hbox(pre_high(head)) end, 'ltj.ruby', + luatexbase.priority_in_callback('hpack_filter', 'add underlines to list') or nil) end -luatexbase.add_to_callback('post_linebreak_filter', post_high_break, 'ltj.ruby.post_break', 100) -luatexbase.add_to_callback('hpack_filter', post_high_hbox, 'ltj.ruby.post_hbox', 101) - - ---------------------------------------------------------------- -- for jfmglue callbacks ---------------------------------------------------------------- @@ -736,7 +856,7 @@ do p = 0 end rst.pre = -p; rst.exclude_pre_from_prev_ruby = (s<0); - rst.exclude_pre_jfmgk_from_prev_ruby = (ltjs.table_current_stack[RIPOST +Nq.char] or 0)<0; + rst.exclude_pre_jfmgk_from_prev_ruby = (ltjs.table_current_stack[RIPOST +Nq.char] or 0)<0; end if Nq.prev_ruby then set_attr(lp, attr_ruby, Nq.prev_ruby) @@ -758,6 +878,11 @@ do elseif rst.pre < 0 then -- auto rst.pre = 0 end + if rst.quirk_protrusion then + local lk = node_new(id_kern, 1, Nq.nuc, lp); set_attr(lk, attr_icflag, PROCESSED) + insert_after(lpv, node_tail(lpv), lk) + insert_after(lpv, node_tail(lpv), node_new(id_kern, 1)) + end return Np else return Np @@ -780,10 +905,12 @@ do end local RIPOST = luatexja.stack_table_index.RIPOST local abs = math.abs + local ltjj_after_hlist=luatexja.jfmglue.after_hlist + local ltjj_check_box_high=luatexja.jfmglue.check_box_high local function whatsit_after_callback(s, Nq, Np, head) if not s and getfield(Nq.nuc, 'user_id') == RUBY_PRE then if Np then - local last_glue = node_new(id_glue) + local last_glue = node_new(id_glue, nil, Nq.nuc) -- INHERIT ATTRIBUTE OF Nq.nuc set_attr(last_glue, attr_icflag, 0) insert_before(Nq.nuc, Np.first, last_glue) Np.first = last_glue @@ -798,8 +925,8 @@ do end local x = node_next(node_next(nqnv)) for i = 2, rst.count do x = node_next(node_next(x)) end - Nq.last_char = luatexja.jfmglue.check_box_high(Nq, getlist(x), nil) - luatexja.jfmglue.after_hlist(Nq) + Nq.last_char = ltjj_check_box_high(Nq, getlist(x), nil) + ltjj_after_hlist(Nq) if Np and Np.id ~=id_pbox_w and type(Np.char)=='number' then -- Np is a JAchar if rst.post < 0 then -- auto @@ -812,12 +939,15 @@ do Np.prev_ruby = get_attr(getvalue(Nq.nuc), attr_ruby_id) -- 前のクラスタがルビであったことのフラグ else -- 直前が文字以外 - local nqnv = getvalue(Nq.nuc) - local rst = getvalue(nqnv) if rst.post < 0 then -- auto rst.post = 0 end end + if rst.quirk_protrusion then + local lk = node_tail(nqnv); + node_inherit_attr(lk, Nq.nuc, Np and Np.nuc) + set_attr(lk, attr_icflag, PROCESSED) + end return head else return s diff --git a/macros/luatex/generic/luatexja/src/ltjclasses.dtx b/macros/luatex/generic/luatexja/src/ltjclasses.dtx index f05afe97c1..7f6000dbb9 100644 --- a/macros/luatex/generic/luatexja/src/ltjclasses.dtx +++ b/macros/luatex/generic/luatexja/src/ltjclasses.dtx @@ -140,6 +140,7 @@ % \changes{v1.8f-ltj-21}{2021-12-22}{余計なコメントの削除.} % \changes{v1.8f-ltj-22}{2022-04-11}{kern featureが有効になっていたのを修正.} % \changes{v1.8f-ltj-23}{2022-09-12}{|\stockwidth|がカーネルで定義される可能性に対応.} +% \changes{v1.8f-ltj-24}{2024-12-13}{TOCファイルに\cs{rensuji}を書き出すことをやめた} % \fi % % \iffalse @@ -169,7 +170,7 @@ %<11pt&bk>\ProvidesFile{ltjtbk11.clo} %<12pt&bk>\ProvidesFile{ltjtbk12.clo} %</tate> - [2022-09-12 v1.8f-ltj-23 + [2024-12-13 v1.8f-ltj-24 %<article|report|book> Standard LuaLaTeX-ja class] %<10pt|11pt|12pt> Standard LuaLaTeX-ja file (size option)] %<*driver> @@ -4130,6 +4131,7 @@ % \changes{v1.3}{2001/10/04}{第5引数の書体を\cs{rmfamily}から\cs{normalfont}に変更} % \changes{v1.7a}{2016/11/16}{Added \cs{nobreak} for % latex/2343 (sync with ltsect.dtx v1.0z)} +% \changes{v1.8f-ltj-24}{2024-12-13}{TOCファイルに\cs{rensuji}を書き出すことをやめた} % \begin{macrocode} \def\@dottedtocline#1#2#3#4#5{% \ifnum #1>\c@tocdepth \else @@ -4143,36 +4145,18 @@ {#4}\nobreak \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern \@dotsep mu$}% \hfill\nobreak - \hb@xt@\@pnumwidth{\hss\normalfont \normalcolor #5}% +%<yoko> \hb@xt@\@pnumwidth{\hss\normalfont \normalcolor #5}% +%<tate> \hb@xt@\@pnumwidth{\hss\normalfont \normalcolor\rensuji{#5}}% \par}% \fi} % \end{macrocode} % \end{macro} % -% \begin{macro}{\addcontentsline} -% 縦組の場合にページ番号を|\rensuji|で囲むように変更します。 -% -% このマクロは\file{ltsect.dtx}で定義されています。 -% ^^A 命令 |\addcontentsline| と |\addtocontents| を組み合わせ -% \changes{v1.8a}{2018/10/25}{ファイル書き出し時の行末文字対策 -% (sync with ltsect.dtx 2018/09/26 v1.1c)} -% \changes{v1.8f}{2020/09/30}{add a fourth argument for better -% hyperref compability -% (sync with ltsect.dtx 2020/07/27 v1.1e)} -% \begin{macrocode} -\providecommand*\protected@file@percent{} -\def\addcontentsline#1#2#3{% - \protected@write\@auxout - {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble -%<tate> \@temptokena{\rensuji{\thepage}}% -%<yoko> \@temptokena{\thepage}% - }{\string\@writefile{#1}% - {\protect\contentsline{#2}{#3}{\the\@temptokena}{}% - \protected@file@percent}}% -} -% \end{macrocode} -% \end{macro} -% +% [2024-12-13 LTJ] 従来は\cs{addcontentsline}命令を再定義し、ページ番号が入る\cs{contentsline}の第3引数を +% 縦組時には\cs{rensuji}でくくっていました。これでは|hyperref|パッケージと干渉してしまうので、 +% \cs{rensuji}は\cs{l@chapter}など実際の出力命令のほうに押し込めることにし、 +% \cs{addcontentsline}の再定義は削除します。 +% \changes{v1.8f-ltj-24}{2024-12-13}{TOCファイルに\cs{rensuji}を書き出すことをやめた} % % \subsubsection{本文目次} % @@ -4200,6 +4184,7 @@ % % \begin{macro}{\l@part} % partレベルの目次です。 +% \changes{v1.8f-ltj-24}{2024-12-13}{TOCファイルに\cs{rensuji}を書き出すことをやめた} % \begin{macrocode} \newcommand*{\l@part}[2]{% \ifnum \c@tocdepth >-2\relax @@ -4212,7 +4197,8 @@ {\leavevmode\large\bfseries \setlength\@lnumwidth{4\zw}% #1\hfil\nobreak - \hb@xt@\@pnumwidth{\hss#2}}\par +%<yoko> \hb@xt@\@pnumwidth{\hss#2}}\par +%<tate> \hb@xt@\@pnumwidth{\hss\rensuji{#2}}}\par \nobreak %<article> \if@compatibility \global\@nobreaktrue @@ -4225,6 +4211,7 @@ % % \begin{macro}{\l@chapter} % chapterレベルの目次です。 +% \changes{v1.8f-ltj-24}{2024-12-13}{TOCファイルに\cs{rensuji}を書き出すことをやめた} % \begin{macrocode} %<*report|book> \newcommand*{\l@chapter}[2]{% @@ -4236,7 +4223,8 @@ \leavevmode\bfseries \setlength\@lnumwidth{4\zw}% \advance\leftskip\@lnumwidth \hskip-\leftskip - #1\nobreak\hfil\nobreak\hb@xt@\@pnumwidth{\hss#2}\par +%<yoko> #1\nobreak\hfil\nobreak\hb@xt@\@pnumwidth{\hss#2}\par +%<tate> #1\nobreak\hfil\nobreak\hb@xt@\@pnumwidth{\hss\rensuji{#2}}\par \penalty\@highpenalty \endgroup \fi} @@ -4246,6 +4234,7 @@ % % \begin{macro}{\l@section} % sectionレベルの目次です。 +% \changes{v1.8f-ltj-24}{2024-12-13}{TOCファイルに\cs{rensuji}を書き出すことをやめた} % \begin{macrocode} %<*article> \newcommand*{\l@section}[2]{% @@ -4257,7 +4246,8 @@ \leavevmode\bfseries \setlength\@lnumwidth{1.5em}% \advance\leftskip\@lnumwidth \hskip-\leftskip - #1\nobreak\hfil\nobreak\hb@xt@\@pnumwidth{\hss#2}\par +%<yoko> #1\nobreak\hfil\nobreak\hb@xt@\@pnumwidth{\hss#2}\par +%<tate> #1\nobreak\hfil\nobreak\hb@xt@\@pnumwidth{\hss\rensuji{#2}}\par \endgroup \fi} %</article> diff --git a/macros/luatex/generic/luatexja/src/ltjsclasses.dtx b/macros/luatex/generic/luatexja/src/ltjsclasses.dtx index a151210339..19f54e35a1 100644 --- a/macros/luatex/generic/luatexja/src/ltjsclasses.dtx +++ b/macros/luatex/generic/luatexja/src/ltjsclasses.dtx @@ -44,7 +44,7 @@ %<*driver> \ProvidesFile{ltjsclasses.dtx} %</driver> - [2022/09/12 ltjsclasses ] + [2023/07/26 ltjsclasses ] %<*driver> \IfFileExists{luatex85.sty}{\RequirePackage{luatex85}}{} \documentclass[disablejfam]{ltjsarticle} @@ -5139,6 +5139,13 @@ % % [2018-03-11] |\next|などいくつかの内部命令を |\jsc@...| 付きの % ユニークな名前にしました。 +% +% [2022-09-13] \LaTeXe~2021-11-15 (ltfloat.dtx 2021/10/14 v1.2g)で +% |\@currentcounter|が追加されましたので,追随します。 +% なお,\LaTeXe~2021-06-01 (ltfloat.dtx 2021/02/10 v1.2e)で +% parhook対応として\cs{par}が追加されていますが, +% 実は同時に\cs{color@endgroup}も\cs{endgraf}するように変更 +% されていますので,不要だと思います。というわけで追加しません。 % \begin{macrocode} \long\def\@footnotetext{% \insert\footins\bgroup diff --git a/macros/luatex/generic/luatexja/src/luatexja-core.sty b/macros/luatex/generic/luatexja/src/luatexja-core.sty index a5801ed386..341c7aa37d 100644 --- a/macros/luatex/generic/luatexja/src/luatexja-core.sty +++ b/macros/luatex/generic/luatexja/src/luatexja-core.sty @@ -68,7 +68,7 @@ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname \csname iftrue\endcsname \NeedsTeXFormat{LaTeX2e} - \ProvidesPackage{luatexja-core}[2023-04-06 Core of LuaTeX-ja] + \ProvidesPackage{luatexja-core}[2023-10-07 Core of LuaTeX-ja] \endlinechar=13 % \RequirePackage{infwarerr} \endlinechar=-1 % @@ -774,10 +774,9 @@ %%------------------ Load module for the format - \directlua{luatexja.load_kinsoku()} \ifltj@in@latex %<*LaTeX> - \RequirePackage{ltj-latex} + \usepackage{ltj-latex} \else\ifltj@in@plain %<*plain> \input ltj-plain.sty % \fi\fi %</LaTeX|plain> diff --git a/macros/luatex/generic/luatexja/src/luatexja.lua b/macros/luatex/generic/luatexja/src/luatexja.lua index 1013684496..e815ba3d68 100644 --- a/macros/luatex/generic/luatexja/src/luatexja.lua +++ b/macros/luatex/generic/luatexja/src/luatexja.lua @@ -423,9 +423,10 @@ local utfchar = utf.char local function debug_show_node_X(p,print_fn, limit, inner_depth) local k = prefix local s - local pt, pic = node_type(p.id), (get_attr(p, attr_icflag) or 0) % icflag_table.PROCESSED_BEGIN_FLAG - local base = prefix .. '[' .. string.format('%7d', node.direct.todirect(p)) .. '] ' .. - string.format('%X', pic) .. ' ' .. pt .. ' ' .. tostring(p.subtype) .. ' ' + local pt, pic = node_type(p.id), (get_attr(p, attr_icflag) or 0) --% icflag_table.PROCESSED_BEGIN_FLAG + local base = prefix .. '[' .. string.format('%7d', node.direct.todirect(p)) + .. ', ' .. tostring(get_attr(p, 27)) .. '] ' + .. string.format('%X', pic) .. ' ' .. pt .. ' ' .. tostring(p.subtype) .. ' ' if pt == 'glyph' then s = base .. ' ' .. (p.char<0xF0000 and utfchar(p.char) or '') diff --git a/macros/luatex/generic/luatexja/src/luatexja.sty b/macros/luatex/generic/luatexja/src/luatexja.sty index a54ede6758..413b58f85c 100644 --- a/macros/luatex/generic/luatexja/src/luatexja.sty +++ b/macros/luatex/generic/luatexja/src/luatexja.sty @@ -27,7 +27,7 @@ \newif\ifltj@disablejfam %%%% VERSION -\def\LuaTeXjaversion{20240514.0} +\def\LuaTeXjaversion{20250208.0} %% Check if LaTeX is used. \begingroup\expandafter\expandafter\expandafter\endgroup diff --git a/macros/luatex/generic/luatexja/src/patches/lltjcore.sty b/macros/luatex/generic/luatexja/src/patches/lltjcore.sty index 1c8f9cba4e..99b61c4a5d 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjcore.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjcore.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjcore}[2023-02-26 Patch to LaTeX2e Kernel for LuaTeX-ja] +\ProvidesPackage{lltjcore}[2025-01-12 Patch to LaTeX2e Kernel for LuaTeX-ja] \RequirePackage{etoolbox} %%% expl3 @@ -219,10 +219,6 @@ \@latex@error{Direction change inside float!?\MessageBreak Use \noexpand\layoutcaption provided in \string\usepackage{lltjext}}\@ehc} %%% Remove extra xkanjiskip -\renewcommand\@makefnmark{% - \unless\ifnum\ltjgetparameter{direction}=3 - \hbox{}\hbox{\@textsuperscript{\normalfont\@thefnmark}}\hbox{}% - \else\hbox{\yoko \@textsuperscript{\normalfont\@thefnmark}}\fi} \begingroup \@ifpackageloaded{hyperref} {\ifdefined\real@setref\def\ltj@setrefprefix{real}\else\def\ltj@setrefprefix{}\fi} @@ -250,6 +246,11 @@ \gdef\@stopfield{% \inhibitglue\@tempskipa\lastskip\unskip \hskip\@tempskipa\color@endgroup\egroup} +%%%%%% footnote +\renewcommand\@makefnmark{% + \unless\ifnum\ltjgetparameter{direction}=3 + \hbox{}\hbox{\@textsuperscript{\normalfont\@thefnmark}}\hbox{}% + \else\hbox{\yoko \@textsuperscript{\normalfont\@thefnmark}}\fi} \pretocmd{\footnote}{\inhibitglue}{}{} \pretocmd{\footnotemark}{\inhibitglue}{}{} \def\@ltj@process@makefnmark#1{% @@ -352,4 +353,10 @@ \def\ltj@unhbox@curfield{\ltjfakeboxbdd\unhbox\@curfield\ltjfakeboxbdd} %\patchcmd\@contfield{\unhbox\@curfield}{\ltj@unhbox@curfield}{}{} \patchcmd\@addfield{\unhbox\@curfield}{\ltj@unhbox@curfield}{}{} + +%\def\m@th{\mathsurround\z@\ltj@yablshift0 } +\def\mathsm@sh#1#2{% + \setbox\z@\hbox{\ltj@yablshift0$\m@th#1{#2}$}% + {}\finsm@sh} + \endinput diff --git a/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty b/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty index bb63ac6877..00c858e349 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjdefs}[2022-01-23 Default font settings of LuaTeX-ja] +\ProvidesPackage{lltjdefs}[2024-05-16 Default font settings of LuaTeX-ja] \ifdefined\ltj@stdmcfont\else\def\ltj@stdmcfont{file:HaranoAjiMincho-Regular.otf}\fi \ifdefined\ltj@stdgtfont\else\def\ltj@stdgtfont{file:HaranoAjiGothic-Medium.otf}\fi @@ -18,13 +18,8 @@ \DeclareKanjiEncodingDefaults{}{} \DeclareErrorKanjiFont{JY3}{mc}{m}{n}{10} \kanjifamily{mc} -\ifnum\ltj@@latex@plv<1500 % <=2020-10-01 - \kanjiseries{m} - \kanjishape{n} -\else % >=2021-06-01 - \def\k@series{m} - \def\k@shape{n} -\fi +\def\k@series{m} +\def\k@shape{n} \fontsize{10}{10} \DeclareYokoKanjiEncoding{JY3}{}{} \DeclareKanjiSubstitution{JY3}{mc}{m}{n} @@ -37,12 +32,7 @@ \newcommand\kanjiencodingdefault{JY3} \newcommand\kanjifamilydefault{\mcdefault} \newcommand\kanjiseriesdefault{\mddefault} -\ifnum 0\ifltj@ltfilehook@avail1\fi\ifdefined\@rmfamilyhook1\fi>0 - %% LaTeX 2020-02-02 - \newcommand\kanjishapedefault{\shapedefault} -\else%% LaTeX 2019-10-01 - \newcommand\kanjishapedefault{\updefault} -\fi +\newcommand\kanjishapedefault{\shapedefault} \DeclareKanjiFamily{JY3}{mc}{} \DeclareFontShape{JY3}{mc}{m}{n}{<-> s*[\ifdefined\Cjascale\Cjascale\else 0.962216\fi] @@ -90,57 +80,36 @@ \DeclareMathAlphabet{\mathgt}{JY3}{gt}{m}{n} \fi -\ifnum 0\ifltj@ltfilehook@avail1\fi\ifdefined\@rmfamilyhook1\fi>0 -%%%% LaTeX >= 2020-02-02 \edef\bfseries@mc{\bfdefault} \edef\bfseries@gt{\bfdefault} \def\bfseries@jtt{\bfseries@mc} \edef\mdseries@mc{\mddefault} \edef\mdseries@gt{\mddefault} \def\mdseries@jtt{\mdseries@mc} -\fi \newif\if@ltj@match@family \@ltj@match@familyfalse \def\verbatim@font{\normalfont\ttfamily\kanjifamily\jttdefault\selectfont} -\def\@ltj@hook@family#1#2{% #1: csname #2: contents - \ifltj@ltfilehook@avail % LaTeX 2020-10-01 - \AddToHook{#1}{#2}% - \else\ifcsname @#1hook\endcsname % LaTeX 2020-02-02 - \csappto{@#1hook}{#2}% - \else % LaTeX 2019-10-01 - \ifcsname #1 \endcsname - \expandafter\patchcmd\csname #1 \endcsname{\selectfont}{#2\selectfont}{}{}% - \else - \PackageWarningNoLine{luatexja}{% - Patching to \expandafter\string\csname #1\endcsname\space failed% - }% - \fi - \fi\fi -} -\@ltj@hook@family{rmfamily}{% +\AddToHook{rmfamily}{% \if@ltj@match@family \prepare@family@series@update@kanji{mc}\mcdefault \fi } -\@ltj@hook@family{sffamily}{% +\AddToHook{sffamily}{% \if@ltj@match@family \prepare@family@series@update@kanji{gt}\gtdefault \fi } -\@ltj@hook@family{ttfamily}{% +\AddToHook{ttfamily}{% \if@ltj@match@family \prepare@family@series@update@kanji{jtt}\jttdefault \fi } -\let\@ltj@hook@family\@undefined -\ifltj@ltfilehook@avail % 2020-10-01 - \expandafter\def\expandafter\kanjiseriesdefault - \expandafter{\kanjiseriesdefault\@empty} - \let\kanjiseriesdefault@kernel\kanjiseriesdefault -\fi +\expandafter\def\expandafter\kanjiseriesdefault + \expandafter{\kanjiseriesdefault\@empty} +\let\kanjiseriesdefault@kernel\kanjiseriesdefault %%% \eminnershape \expandafter\patchcmd\csname em \endcsname{\itshape}{\gtfamily\itshape}{}{} diff --git a/macros/luatex/generic/luatexja/src/patches/lltjfont.sty b/macros/luatex/generic/luatexja/src/patches/lltjfont.sty index 2efc9435ab..52ac44d5cc 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjfont.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjfont.sty @@ -3,31 +3,10 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjfont}[2023-04-13 Patch to NFSS2 for LuaTeX-ja] +\ProvidesPackage{lltjfont}[2023-05-16 Patch to NFSS2 for LuaTeX-ja] %%%%%%%% LaTeX2e version detection -\newcount\ltj@@latex@plv \ltj@@latex@plv=-1 -\ifltj@ltfilehook@avail -\ExplSyntaxOn - \cs_if_exist:NTF \__shipout_execute_main_cont:Nnnn - {\ltj@@latex@plv=1500}% 2021-06-01 - {\ifnum\patch@level>2\relax \ltj@@latex@plv=1300\else \ltj@@latex@plv=1000\fi}% 2020-10-01 -\ExplSyntaxOff -\else\ifdefined\@rmfamilyhook % 2020-02-02 - \ifx\@forced@seriestrue\@undefined % 2020-02-02 pl0--2 - \@latex@error - {Please update LaTeX2e!^^J\space\space - At least LaTeX2e 2020-02-02 patch level 3 is required}% - {LaTeX2e 2020-02-02 patch level 2 (and 4) has a bug.} - \else - \ltj@@latex@plv=300 - \unless\ifx\series@maybe@drop@one@m@x\@undefined % pl5 + develop - \ltj@@latex@plv=501 - \else\unless\ifx\series@maybe@drop@one@m\@undefined % patch level 5 - \ltj@@latex@plv=500 - \fi\fi - \fi -\fi\fi +\newcount\ltj@@latex@plv \ltj@@latex@plv=1500 %% patching \DeclareTextComposite \def\ltj@chardef@text@cmd#1{% @@ -400,59 +379,7 @@ \directlua{luatexja.jfont.pickup_alt_font_a('\f@size')}% }% \fi} -\ifnum\ltj@@latex@plv<1500 % <=2020-10-01 -\protected\def\ltj@selectfont@patch{% - \ltj@@start@time@measure{selectfont}% - \let\tmp@error@fontshape\error@fontshape - \let\error@fontshape\error@kfontshape - \ltj@@is@kyenc{\k@encoding}\ifin@% - \let\cy@encoding\k@encoding - \ensure@KanjiEncodingPair{t}% - \edef\ct@encoding{\csname t@enc@\k@encoding\endcsname}% - \else - \ltj@@is@ktenc{\k@encoding}\ifin@% - \let\ct@encoding\k@encoding - \ensure@KanjiEncodingPair{y}% - \edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}% - \else - \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha - \fi - \fi - \global\let\ltj@afont@name=\font@name - \ltj@selectfont@tate\ltj@selectfont@yoko -% - \edef\tmp@item{{\k@encoding}}\expandafter\def\expandafter\k@encoding\tmp@item - \kenc@update - \global\let\font@name=\ltj@afont@name - \let\error@fontshape\tmp@error@fontshape - \if@knjcmd \@knjcmdfalse - \expandafter\ifx - \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname\relax - \expandafter\ifx - \csname rel@\k@encoding/\k@family/\k@series/all\endcsname\relax - \else - \csname rel@\k@encoding/\k@family/\k@series/all\endcsname\selectfont - % 警告: 再び \selectfont を呼んでいる.無限ループの可能性あり - \fi - \else - \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname\selectfont - % 警告: 再び \selectfont を呼んでいる.無限ループの可能性あり - \fi - \fi - \global\let\font@name=\ltj@afont@name - \ltj@@stop@time@measure{selectfont}% -} -\RequirePackage{everysel} -\let\ltj@@EverySelectfont@Init=\@EverySelectfont@Init -\expandafter\expandafter\expandafter\let -\expandafter\expandafter\csname ltj@@orig@selectfont\endcsname\csname selectfont\space\endcsname -\@EverySelectfont@Init% for LaTeX2e <=2020-10-01 -\def\@EverySelectfont@Init{% - \expandafter\let\csname selectfont\space \endcsname \ltj@@orig@selectfont - \ltj@@EverySelectfont@Init -} -\EverySelectfont{\ltj@selectfont@patch} -\else % LaTeX2e >=2021-06-01 + \AddToHook{selectfont}[luatexja]{% \ltj@@start@time@measure{selectfont}% \ifx\delayed@k@adjustment\@empty @@ -514,7 +441,6 @@ \global\let\font@name=\ltj@afont@name \ltj@@stop@time@measure{selectfont}% } -\fi \bgroup \def\ltj@@dir@patch#1#2#3{% @@ -721,8 +647,6 @@ } %%%%%% -\ifnum\ltj@@latex@plv>0 -%%%% LaTeX >= 2020-02-02 \newif\if@shape@roman@kanji \def\merge@kanji@series#1{% @@ -740,76 +664,11 @@ \@nil } -\ifnum\ltj@@latex@plv>500 % !!! pl5 + develop \def\set@target@series@kanji#1{% \edef\k@series{#1}% \series@maybe@drop@one@m\k@series\k@series } -\else\ifnum\ltj@@latex@plv>300 % !!! pl5 - \def\set@target@series@kanji#1{% - \edef\k@series{#1}% - \expandafter\series@maybe@drop@one@m\expandafter{\k@series}\k@series - } -\else % !!! pl 3, 4 - \def\set@target@series@kanji#1{% - \edef\k@series{#1}% - \edef\k@series{\expandafter\series@drop@one@m\k@series mm\series@drop@one@m}% - } -\fi\fi -\ifnum\ltj@@latex@plv<1500% <=2020-10-01 -\def\merge@kanji@series@#1#2#3\@nil{% - \def\reserved@a{#3}% - \ifx\reserved@a\@empty - \set@target@series@kanji{#2}% - \else - \begingroup\let\f@encoding\k@encoding\let\f@family\k@family - \maybe@load@fontshape\endgroup - \edef\reserved@a{\k@encoding /\k@family /#1/\k@shape}% - \ifcsname \reserved@a \endcsname - \set@target@series@kanji{#1}% - \else - \ifcsname \k@encoding /\k@family /#2/\k@shape \endcsname - \set@target@series@kanji{#2}% - {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}% - \else - \set@target@series@kanji{#3}% - {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}% - \fi - \fi - \fi -} -\def\merge@kanji@shape@#1#2#3\@nil{% - \def\reserved@a{#3}% - \ifx\reserved@a\@empty - \if@shape@roman@kanji - \set@safe@kanji@shape{#2}{}% - \else - \edef\k@shape{#2}% - \fi - \else - \begingroup\let\f@encoding\k@encoding\let\f@family\k@family - \maybe@load@fontshape\endgroup - \edef\reserved@a{\k@encoding /\k@family /\k@series/#1}% - \ifcsname \reserved@a\endcsname - \edef\k@shape{#1}% - \else - \ifcsname \k@encoding /\k@family /\k@series/#2\endcsname - \edef\k@shape{#2}% - {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}% - \else - \if@shape@roman@kanji - \set@safe@kanji@shape{#3}% - {{\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}}% - \else - \edef\k@shape{#3}% - {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}% - \fi - \fi - \fi - \fi -} -\else % >=2021-06-01 \def\merge@kanji@series@#1#2#3\@nil{% \def\reserved@a{#3}% \ifx\reserved@a\@empty @@ -892,20 +751,8 @@ \fi } \let\delayed@merge@kanji@shape\merge@kanji@shape@without@substitution -\fi \newif\if@forced@series@kanji -\ifnum\ltj@@latex@plv=300 % 2020-02-02 pl3, 4 - \DeclareRobustCommand\romanseries[1]{\merge@font@series{#1}} - \DeclareRobustCommand\kanjiseries[1]{\merge@kanji@series{#1}} - \DeclareRobustCommand\romanseriesforce[1]{\edef\f@series{#1}} - \DeclareRobustCommand\kanjiseriesforce[1]{\edef\k@series{#1}} -\else\ifnum\ltj@@latex@plv<1500% >=2020-02-02 pl5 and <=2020-10-01 - \DeclareRobustCommand\romanseries[1]{\@forced@seriesfalse\merge@font@series{#1}} - \DeclareRobustCommand\kanjiseries[1]{\@forced@series@kanjifalse\merge@kanji@series{#1}} - \DeclareRobustCommand\romanseriesforce[1]{\@forced@seriestrue\edef\f@series{#1}} - \DeclareRobustCommand\kanjiseriesforce[1]{\@forced@series@kanjitrue\edef\k@series{#1}} -\else% >=2021-06-01 \DeclareRobustCommand\romanseries[1]{\@forced@seriesfalse \expandafter\def\expandafter\delayed@f@adjustment\expandafter {\delayed@f@adjustment\delayed@merge@font@series{#1}}} @@ -919,22 +766,9 @@ \expandafter\def\expandafter\delayed@k@adjustment\expandafter {\delayed@k@adjustment\edef\k@series{#1}}} \let\delayed@k@adjustment\@empty -\fi\fi \DeclareRobustCommand\fontseries[1]{\kanjiseries{#1}\romanseries{#1}}% \DeclareRobustCommand\fontseriesforce[1]{\kanjiseriesforce{#1}\romanseriesforce{#1}}% -\ifnum\ltj@@latex@plv<1500% <=2020-10-01 - \DeclareRobustCommand\romanshape[1]{\merge@font@shape{#1}} - \DeclareRobustCommand\kanjishape[1]{\merge@kanji@shape{#1}} - \DeclareRobustCommand\fontshape[1]{% - \@shape@roman@kanjitrue - \merge@font@shape{#1}\merge@kanji@shape{#1}% - \@shape@roman@kanjifalse - } - \DeclareRobustCommand\romanshapeforce[1]{\edef\f@shape{#1}} - \DeclareRobustCommand\kanjishapeforce[1]{\edef\k@shape{#1}} - \DeclareRobustCommand\fontshapeforce[1]{\set@safe@kanji@shape{#1}{}\romanshapeforce{#1}} -\else% >=2021-06-01 \DeclareRobustCommand\romanshape[1]{% \expandafter\def\expandafter\delayed@f@adjustment\expandafter {\delayed@f@adjustment\delayed@merge@font@shape{#1}}} @@ -956,9 +790,6 @@ \romanshapeforce{#1}% \expandafter\def\expandafter\delayed@k@adjustment\expandafter {\delayed@k@adjustment\set@safe@kanji@shape{#1}{}}} -\fi -\ifnum\ltj@@latex@plv>1499 -%%%% LaTeX >= 2021-06-01 \DeclareRobustCommand\usekanji[4]{% \kanjiencoding{#1}\edef\k@family{#2}% \set@target@series@kanji{#3}\edef\k@shape{#4}% @@ -969,42 +800,6 @@ \set@target@series{#3}\edef\f@shape{#4}% \let\delayed@f@adjustment\@empty \selectfont\ignorespaces} -\else\ifnum\ltj@@latex@plv>1000 -%%%% 2021-10-01 PL3 <= LaTeX < 2021-06-01 -\DeclareRobustCommand\usekanji[4]{% - \kanjiencoding{#1}\edef\k@family{#2}% - \set@target@series@kanji{#3}\edef\k@shape{#4}% - \selectfont\ignorespaces} -\DeclareRobustCommand\useroman[4]{% - \romanencoding{#1}\edef\f@family{#2}% - \set@target@series{#3}\edef\f@shape{#4}% - \selectfont\ignorespaces} -\else -%%%% 2020-10-01 <= LaTeX < 2020-10-01 PL3 -\DeclareRobustCommand\usekanji[4]{% - \kanjiencoding{#1}\edef\k@family{#2}\edef\k@series{#3}\edef\k@shape{#4}% - \selectfont\ignorespaces} -\DeclareRobustCommand\useroman[4]{% - \romanencoding{#1}\edef\f@family{#2}\edef\f@series{#3}\edef\f@shape{#4}% - \selectfont\ignorespaces} -\fi\fi -%%%% LaTeX >= 2020-02-02 END -\else -%%%% LaTeX 2019-10-01 -\DeclareRobustCommand\romanseries[1]{\edef\f@series{#1}} -\DeclareRobustCommand\kanjiseries[1]{\edef\k@series{#1}} -\DeclareRobustCommand\fontseries[1]{\kanjiseries{#1}\romanseries{#1}} -\DeclareRobustCommand\romanshape[1]{\edef\f@shape{#1}} -\DeclareRobustCommand\kanjishape[1]{\edef\k@shape{#1}} -\DeclareRobustCommand\fontshape[1]{\set@safe@kanji@shape{#1}{}\romanshape{#1}} -\DeclareRobustCommand\usekanji[4]{% - \kanjiencoding{#1}\kanjifamily{#2}\kanjiseries{#3}\kanjishape{#4}% - \selectfont\ignorespaces} -\DeclareRobustCommand\useroman[4]{% - \romanencoding{#1}\romanfamily{#2}\romanseries{#3}\romanshape{#4}% - \selectfont\ignorespaces} -%%%% LaTeX 2019-10-01 END -\fi %%%% \def\set@safe@kanji@shape#1#2{% @@ -1026,8 +821,6 @@ \else\useroman{#1}{#2}{#3}{#4}% \fi} -\ifnum 0\ifltj@ltfilehook@avail1\fi\ifdefined\@rmfamilyhook1\fi>0 -%%%% LaTeX >= 2020-02-02 \let\prepare@family@series@update@kanji=\prepare@family@series@update \patchcmd\prepare@family@series@update{\fontfamily}{\romanfamily}{}{} \patchcmd\prepare@family@series@update@kanji{\if@forced@series}{\if@forced@series@kanji}{}{} @@ -1049,34 +842,16 @@ \patchcmd\update@series@target@value@kanji{\f@series}{\k@series}{}{} \def\@meta@family@list@kanji{\@elt{mc}\@elt{gt}\@elt{jtt}} -\def\@ltj@hook@series@default#1#2#3{% - \ifltj@ltfilehook@avail % 2020-10-01 - \AddToHook{#1/defaults}{#2}% - \else\ifcsname @set#1defaultshook\endcsname %after 2020-04-07 - \expandafter\g@addto@macro\csname @set#1defaultshook\endcsname{#2}% - \else % 2020-02-02 - \expandafter\patchcmd\csname #1 \endcsname{#3}{#3#2}{}{}% - \fi\fi -} -\@ltj@hook@series@default{bfseries}{% +\AddToHook{bfseries/defaults}{% \let\bfseries@mc\bfdef@ult \let\bfseries@gt\bfdef@ult \let\bfseries@jtt\bfdef@ult -}{% - \let\bfseries@rm\bfdef@ult - \let\bfseries@sf\bfdef@ult - \let\bfseries@tt\bfdef@ult } -\@ltj@hook@series@default{mdseries}{% +\AddToHook{mdseries/defaults}{% \let\mdseries@mc\mddef@ult \let\mdseries@gt\mddef@ult \let\mdseries@jtt\mddef@ult -}{% - \let\mdseries@rm\mddef@ult - \let\mdseries@sf\mddef@ult - \let\mdseries@tt\mddef@ult } -\let\@ltj@hook@series@default\@undefined \expandafter\patchcmd\csname bfseries \endcsname{% \ifx\f@family\rmdef@ult \fontseries\bfseries@rm @@ -1105,105 +880,41 @@ \fi\fi\fi }{}{} -\def\@ltj@hook@series#1#2{% - \ifltj@ltfilehook@avail % 2020-10-01 - \AddToHook{#1}{#2}% - \else % 2020-02-02 - \expandafter\patchcmd\csname #1 \endcsname{\selectfont}{#2\selectfont}{}{}% - \fi -} -\@ltj@hook@series{bfseries}{% +\AddToHook{bfseries}{% \ifx\k@family\mcdef@ult \kanjiseries\bfseries@mc \else\ifx\k@family\gtdef@ult \kanjiseries\bfseries@gt \else\ifx\k@family\jttdef@ult\kanjiseries\bfseries@jtt \else \kanjiseries\bfdefault \fi\fi\fi } -\@ltj@hook@series{mdseries}{% +\AddToHook{mdseries}{% \ifx\k@family\mcdef@ult \kanjiseries\mdseries@mc \else\ifx\k@family\gtdef@ult \kanjiseries\mdseries@gt \else\ifx\k@family\jttdef@ult\kanjiseries\mdseries@jtt \else \kanjiseries\mddefault \fi\fi\fi } -\let\@ltj@hook@series\@undefined -\def\@ltj@hook@efd#1#2{% - \ifltj@ltfilehook@avail % 2020-10-01 - \AddToHook{expand@font@defaults}{#1}% - \else\ifdefined\@expandfontdefaultshook %after 2020-04-07 - \g@addto@macro\@expandfontdefaultshook{#1#2}% - \else % 2020-02-02 - \appto\expand@font@defaults{#1#2}% - \fi\fi -} -\@ltj@hook@efd{% +\AddToHook{expand@font@defaults}{% \edef\mcdef@ult{\mcdefault}% \edef\gtdef@ult{\gtdefault}% \edef\jttdef@ult{\jttdefault}% -}{\edef\kanjidef@ult{\kanjifamilydefault}} -\let\@ltj@hook@efd\@undefined + \edef\kanjidef@ult{\kanjifamilydefault}} -\ifltj@ltfilehook@avail % 2020-10-01 - \appto\init@series@setup{% - \ifx\kanjiseriesdefault\kanjiseriesdefault@kernel - \mdseries - \let\kanjiseriesdefault\k@series - \fi - } -\else - \appto\init@series@setup{% - \ifx\kanjidef@ult\mcdef@ult \mcfamily - \else\ifx\kanjidef@ult\gtdef@ult \gtfamily - \else\ifx\kanjidef@ult\jttdef@ult \jttfamily - \fi\fi\fi - } -\fi - -\def\@ltj@hook@dfh#1{% - \ifltj@ltfilehook@avail % 2020-10-01 - \AddToHook{normalfont}{#1}% - \else\ifdefined\@defaultfamilyhook - \g@addto@macro\@defaultfamilyhook{#1}% - \else % 2020-02-02 - \expandafter\patchcmd\csname normalfont \endcsname{\selectfont}{#1\selectfont}{}{}% - \let\reset@font\normalfont - \fi\fi +\appto\init@series@setup{% + \ifx\kanjiseriesdefault\kanjiseriesdefault@kernel + \mdseries + \let\kanjiseriesdefault\k@series + \fi } -\ifnum\ltj@@latex@plv>1499 -\@ltj@hook@dfh{% +\AddToHook{normalfont}{% \kanjiencoding{\kanjiencodingdefault}% \edef\k@family{\kanjifamilydefault}% \edef\k@series{\kanjiseriesdefault}% \edef\k@shape{\kanjishapedefault}% \let\delayed@k@adjustment\empty } -\else -\@ltj@hook@dfh{% - \kanjiencoding{\kanjiencodingdefault}% - \edef\k@family{\kanjifamilydefault}% - \edef\k@series{\kanjiseriesdefault}% - \edef\k@shape{\kanjishapedefault}% -} -\fi -\let\@ltj@hook@dfh\@undefined -%%%% LaTeX >= 2020-02-02 END -\else -%%%% LaTeX 2019-10-01 -\DeclareRobustCommand\normalfont{% - \useroman\encodingdefault\familydefault\seriesdefault\shapedefault - \usekanji\kanjiencodingdefault\kanjifamilydefault\kanjiseriesdefault\kanjishapedefault} -\let\reset@font\normalfont -%%%% LaTeX 2019-10-01 END -\fi - - - -\ifdefined\prepare@family@series@update@kanji\else -%%%% LaTeX 2019-10-01 -\def\prepare@family@series@update@kanji#1{\kanjifamily} -\fi \DeclareRobustCommand\mcfamily{% \unless\ifltj@disablejfam\not@math@alphabet\mcfamily\mathmc\fi diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty index 9575dc3c04..fa5fe7b933 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty @@ -3,7 +3,9 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjp-array}[2019-07-18 Patch to array for LuaTeX-ja] +\ProvidesPackage{lltjp-array}[2024-07-21 Patch to array for LuaTeX-ja] + +\@ifpackageloaded{array}{\def\lltjp@array@array@loaded{1}}{\let\lltjp@array@array@loaded\relax} \RequirePackage{etoolbox,array} @@ -11,16 +13,23 @@ \ignorespaces\@sharp\unskip }{% \ltj@sharp -}{}{} +}{}{% >=2024-06-01 + \def\ltj@sharp{\relax\pltx@next@inhibitglue\ltjfakeboxbdd\ignorespaces\@sharp\textonly@unskip\ltjfakeboxbdd} + \patchcmd\insert@column{% + \ignorespaces\@sharp\textonly@unskip + }{% + \ltj@sharp + }{}{} +} \@ifpackageloaded{lltjext}{}{% %% remove extra \xkanjiskip (pLaTeX2e 2016/04/17) -\def\@tabular{% - \leavevmode \null - \hbox \bgroup $\col@sep\tabcolsep \let\d@llarbegin\begingroup - \let\d@llarend\endgroup - \@tabarray} -\def\endtabular{\endarray $\egroup\null} +\ifnum0<0\lltjp@array@array@loaded + \patchcmd{\@tabular}{\leavevmode}{\leavevmode\null}{}{} + \patchcmd{\@tabular}{\leavevmode\null\null}{\leavevmode\null}{}{} + \apptocmd{\endtabular}{\null}{}{} + \let\lltjp@array@array@loaded\undefined +\fi \expandafter \let \csname endtabular*\endcsname = \endtabular } \endinput diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-footmisc.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-footmisc.sty index edde267d3c..5ee7d407ce 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjp-footmisc.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjp-footmisc.sty @@ -3,63 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjp-footmisc}[2022-02-19 Patch to footmisc for LuaTeX-ja] +\ProvidesPackage{lltjp-footmisc}[2024-07-22 Patch to footmisc for LuaTeX-ja] -\@ifpackagelater{footmisc}{2022-02-10}{%% v6.0a or later - \patchcmd{\@makenormalcolbox}{\vskip -\@outputbox@depth\@textbottom}% - {\pltx@adjust@wd@outputbox\vskip -\@outputbox@depth\@textbottom}{}{}% - \let\ltj@next\endinput -}{\let\ltj@next\relax} -\ltj@next - -% old (v5.5) -\let \if@tempswa \ifFN@bottom -\ifFN@para \@tempswatrue \fi -\if@tempswa - \ifFN@bottom - \toks@{\setbox\@outputbox \box\@cclv - \xdef\@freelist{\@freelist\@midlist}% - \global\let\@midlist\@empty - \@combinefloats - \ifvoid\footins - \else - \setbox\@outputbox \vbox\bgroup - \boxmaxdepth\@maxdepth - \unvbox\@outputbox - \vfill\relax - } - \the\FN@temptoken - \toks@\expandafter{\the\toks@\egroup\fi} - \else - \toks@{\ifvoid\footins - \setbox\@outputbox\box\@cclv - \else - \setbox\@outputbox \vbox\bgroup - \boxmaxdepth\@maxdepth - \unvbox\@cclv - } - \the\FN@temptoken - \toks@\expandafter{\the\toks@ - \egroup - \fi - \xdef\@freelist{\@freelist\@midlist}% - \global\let\@midlist\@empty - \@combinefloats - }% - \fi - \toks@\expandafter{\the\toks@ - \ifvbox\@kludgeins - \@makespecialcolbox - \else - \setbox\@outputbox \vbox to\@colht{% - \@texttop \dimen@\dp\@outputbox - \unvbox\@outputbox - \pltx@adjust@wd@outputbox - \vskip -\dimen@\@textbottom - }% - \fi - \global\maxdepth\@maxdepth - } - \edef\@makecol{\the\toks@} -\fi -\endinput +\patchcmd{\@makenormalcolbox}{\vskip -\@outputbox@depth\@textbottom}% + {\pltx@adjust@wd@outputbox\vskip -\@outputbox@depth\@textbottom}{}{}% diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty index 67b0f5de7f..641fa4a34d 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjp-geometry}[2021-10-24 Patch to geometry for LuaTeX-ja with vertical writing mode] +\ProvidesPackage{lltjp-geometry}[2024-05-16 Patch to geometry for LuaTeX-ja with vertical writing mode] \RequirePackage{expl3} \ifdefined\if@ltj@@geometry@tate\expandafter\endinput\fi \newif\if@ltj@@geometry@tate @@ -31,15 +31,6 @@ %============================================ \unless\ifdefined\ltj@ExecuteAfterPackage -\expandafter\newif\csname ifltj@ltfilehook@avail\endcsname -\@ifl@t@r\fmtversion{2020-10-01}{% - \@ifl@t@r\fmtversion{2020-10-02}{\ltj@ltfilehook@availtrue} - {% - \ifnum\patch@level<0\relax \ifnum\patch@level<-6 \ltj@ltfilehook@availtrue\fi - \else\ltj@ltfilehook@availtrue\fi - }% -}{} -\ifltj@ltfilehook@avail %% \ltj@ExecuteBeforePackage <package><code> and \ltj@ExecuteAfterPackage <package><code> %% no-starred version: do nothing if the <package> is loaded %% starred version: do <code> right away if the <package> is loaded @@ -64,11 +55,6 @@ \@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteBeforePackage{#1}{#2}}% } } -\else - \RequirePackage{filehook} - \let\ltj@ExecuteAfterPackage=\AtEndOfPackageFile - \let\ltj@ExecuteBeforePackage=\AtBeginOfPackageFile -\fi \fi %============================================ @@ -89,12 +75,8 @@ \else \@gobble\iftrue\csname iftdir\endcsname \bool_set_true:N \l_tmpa_bool \fi \fi -\ifltj@ltfilehook@avail - \prop_map_inline:Nn \g__hook_begindocument_code_prop - { \tl_if_in:nnT {#2} {\tate} {\bool_set_true:N \l_tmpa_bool} } -\else - \tl_if_in:NnT \@begindocumenthook {\tate} {\bool_set_true:N \l_tmpa_bool} -\fi +\prop_map_inline:Nn \g__hook_begindocument_code_prop + { \tl_if_in:nnT {#2} {\tate} {\bool_set_true:N \l_tmpa_bool} } \bool_if:NT \l_tmpa_bool { \if@ltj@@geometry@forceoff \@ltj@@geometry@tatefalse diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty index 9c4526c3fd..292cbf00bf 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty @@ -1,5 +1,5 @@ % -% lltjp-siunitx.sty 2022-12-14 +% lltjp-siunitx.sty 2024-06-10 % \NeedsTeXFormat{LaTeX2e} @@ -7,7 +7,6 @@ \RequirePackage{siunitx} \makeatletter \ExplSyntaxOn -\cs_if_exist:NTF \siunitx_print_text:n {% siunitx v3.00 \cs_set_protected:Npn \siunitx_print_text:n #1 { \text @@ -32,104 +31,26 @@ } } \cs_set_eq:NN \ltj_orig__siunitx_table_collect_begin:w \__siunitx_table_collect_begin:w -\cs_set_protected:Npn \__siunitx_table_collect_begin:w #1 \relax - { \ltj_orig__siunitx_table_collect_begin:w } -\RenewDocumentCommand \tablenum { O { } m } - { - \mode_leave_vertical: - \group_begin: - \keys_set:nn { siunitx } {#1} - \siunitx_cell_begin:w - \relax \ignorespaces #2 - \siunitx_cell_end: - \group_end: - } -}% siunitx v3.00 end -{% siunitx v2.xx -\cs_generate_variant:Nn \tl_if_in:NnT { coT } -\cs_new:Nn \__ltj_siunix_patch_inner:n { - \cs_if_exist:cT { #1_tl } { - \tl_if_in:coT { #1_tl } { \tex_char:D } { - \tl_replace_all:cnn { #1_tl } { \tex_char:D } { \ltjalchar } - } +\cs_set_protected:Npn \__siunitx_table_collect_begin:w #1 { + \token_if_eq_meaning:NNTF #1 \relax + {\ltj_orig__siunitx_table_collect_begin:w } + {\ltj_orig__siunitx_table_collect_begin:w #1 } } -} -\cs_new:Nn \__ltj_siunix_patch_inner_math:n { - \__ltj_siunix_patch_inner:n { l__siunitx_#1_math } - \__ltj_siunix_patch_inner:n { l__siunitx_#1_text } -} -\AtBeginDocument { - \__ltj_siunix_patch_inner:n { c__siunitx_minus } - \__ltj_siunix_patch_inner:n { c__siunitx_mu } - \__ltj_siunix_patch_inner_math:n { angstrom } - \__ltj_siunix_patch_inner_math:n { arcminute } - \__ltj_siunix_patch_inner_math:n { arcsecond } - \__ltj_siunix_patch_inner_math:n { ohm } -} - -%%%% new table column: S and s -\bool_new:N \l__ltj_siunitx_table_collect_relax_bool -\cs_set_protected:Npn \__siunitx_table_collect_begin_s: { - \bool_set_false:N \l__ltj_siunitx_table_collect_relax_bool - \cs_set_eq:NN \__siunitx_table_collect_token:N - \__siunitx_table_collect_token_s:N - \cs_set_eq:NN \__siunitx_table_print: \__siunitx_table_print_s: - \__siunitx_table_collect_init_s: - \__siunitx_table_collect_get: -} - -\cs_set_protected:Npn \__siunitx_table_collect_not_braced:N #1 +\cs_set_protected:Npn \__siunitx_table_collect_token:N #1 { - \token_if_eq_meaning:NNTF #1 \tex_relax:D { - \bool_if:NTF \l__ltj_siunitx_table_collect_relax_bool { - \__siunitx_table_collect_not_braced_aux_i:N #1 - } { - \bool_set_true:N \l__ltj_siunitx_table_collect_relax_bool - } - } { - \token_if_eq_meaning:NNF #1 \ltjfakeboxbdd { - \token_if_eq_meaning:NNF #1 \pltx@next@inhibitglue { - \token_if_eq_meaning:NNF #1 \tex_ignorespaces:D + \__siunitx_table_collect_search:NnF #1 { - \token_if_eq_meaning:NNF #1 \tex_unskip:D - { \__siunitx_table_collect_not_braced_aux_i:N #1 } + \ignorespaces { \__siunitx_table_collect_ignore_spaces:N #1} + \pltx@next@inhibitglue { \__siunitx_table_collect_loop:} + \ltjfakeboxbdd { \__siunitx_table_collect_loop:} + \textonly@unskip { \__siunitx_table_collect_loop:} + \unskip { \__siunitx_table_collect_loop:} + \end { \tabularnewline \end } + \relax { \__siunitx_table_collect_relax:N #1 } + \tabularnewline { \tabularnewline } + \siunitx_cell_end: { \siunitx_cell_end:} } - }}} - \__siunitx_table_collect_next: - } - -\AtBeginDocument - { - \@ifpackageloaded { mdwtab } - { - \cs_set_protected:Npn \__siunitx_table_collect_not_braced:N #1 - { - \token_if_eq_meaning:NNTF #1 \tex_relax:D { - \bool_if:NTF \l__ltj_siunitx_table_collect_relax_bool { - \__siunitx_table_collect_not_braced_aux_i:N #1 - } { - \bool_set_true:N \l__ltj_siunitx_table_collect_relax_bool - } - } { - \token_if_eq_meaning:NNF #1 \ltjfakeboxbdd { - \token_if_eq_meaning:NNF #1 \pltx@next@inhibitglue { - \token_if_eq_meaning:NNF #1 \tex_ignorespaces:D - { - \token_if_eq_meaning:NNF #1 \tex_unskip:D - { - \token_if_eq_meaning:NNF #1 \tab@setcr - { - \token_if_eq_meaning:NNF #1 \@maybe@unskip - { \__siunitx_table_collect_not_braced_aux_i:N #1 } - } - } - } - }}} - \__siunitx_table_collect_next: - } - } - { } - } + { \__siunitx_table_collect_token_aux:N #1 } } \ExplSyntaxOff \endinput diff --git a/macros/luatex/generic/luaxml/README b/macros/luatex/generic/luaxml/README index 5df074c453..644c4fe9bd 100644 --- a/macros/luatex/generic/luaxml/README +++ b/macros/luatex/generic/luaxml/README @@ -32,7 +32,7 @@ Author ------ Michal Hoftich Email: michal.h21@gmail.com -Version: v0.1r, 2024-02-23 +Version: v0.2b, 2024-11-14 Original authors: Paul Chakravarti and Manoel Campos (http://manoelcampos.com) diff --git a/macros/luatex/generic/luaxml/luaxml-cssquery.lua b/macros/luatex/generic/luaxml/luaxml-cssquery.lua index ebb29abb15..452656845c 100644 --- a/macros/luatex/generic/luaxml/luaxml-cssquery.lua +++ b/macros/luatex/generic/luaxml/luaxml-cssquery.lua @@ -156,7 +156,7 @@ local function cssquery() -- make sure we deal with a string value = tostring(value) -- make the search string safe for pattern matching - local escaped_search = search:gsub("([%(%)%.%%%+%–%*%?%[%^%$])", "%%%1") + local escaped_search = search:gsub("([%(%)%.%%%+%-%#%*%?%[%^%$])", "%%%1") if modifier == "" then return value == search elseif modifier == "|" then @@ -434,6 +434,18 @@ local function cssquery() return querylist end + --- Remove selector from the CSS list object. + -- All actions that literaly match the given selector will be removed. + function CssQuery:remove_selector( + selector -- CSS selector to be removed + ) + for pos, obj in ipairs(self.querylist) do + if obj.source == selector then + table.remove(self.querylist, pos) + end + end + end + --- It tests list of queries agaings a DOM element and executes the --- coresponding function that is saved for the matched query. -- @return nothing diff --git a/macros/luatex/generic/luaxml/luaxml-domobject.lua b/macros/luatex/generic/luaxml/luaxml-domobject.lua index 73689add5a..d60b1a291e 100644 --- a/macros/luatex/generic/luaxml/luaxml-domobject.lua +++ b/macros/luatex/generic/luaxml/luaxml-domobject.lua @@ -6,16 +6,20 @@ local dom = {} local xml local handler local css_query +local html if kpse then xml = require("luaxml-mod-xml") handler = require("luaxml-mod-handler") css_query = require("luaxml-cssquery") + html = require("luaxml-mod-html") else xml = require("luaxml.mod-xml") handler = require("luaxml.mod-handler") css_query = require("luaxml.cssquery") + html = require("luaxml.mod-html") end +local HtmlParser = html.HtmlParser local void = {area = true, base = true, br = true, col = true, hr = true, img = true, input = true, link = true, meta = true, param = true} @@ -31,6 +35,13 @@ local escapes = { ["`"] = "`" } +-- declarations of local functions +local html_to_dom +local html_parse +local parse + + + local function escape(search, text) return text:gsub(search, function(ch) return escapes[ch] or "" @@ -91,9 +102,14 @@ local function serialize_dom(parser, current,level, output) local format = get_action(typ, "start") insert(format, el, prepare_attributes(attr)) end - local function text(typ, text) + local function text(typ, text, parent) + local parent = parent or {} local format = get_action(typ, "text") - insert(format, escape_element(text)) + if parent.verbatim then + insert(format, text) + else + insert(format, escape_element(text)) + end end local function stop(typ, el) local format = get_action(typ, "stop") @@ -141,7 +157,7 @@ local function serialize_dom(parser, current,level, output) end start(xtype, name, attributes) - text(xtype,text_content) + text(xtype,text_content, (current or {})._parent) local children = root._children or {} for _, child in ipairs(children) do output = serialize_dom(parser,child, level + 1, output) @@ -153,7 +169,7 @@ end --- XML parsing function -- Parse the XML text and create the DOM object. -- @return DOM_Object -local parse = function( +parse = function( xmltext --- String to be parsed ,voidElements --- hash table with void elements ) @@ -411,8 +427,8 @@ local parse = function( return strings end - --- Get table with the inner text of an element -- leading and trailing spaces are removed and elements that contain only white space are ignored. - --- @return table + --- Get table with the inner text of an element - leading and trailing spaces are removed and elements that contain only white space are ignored. + -- @return table function DOM_Object:stripped_strings( current --- [optional] element to be selected ) @@ -608,15 +624,169 @@ local parse = function( return el:get_sibling_node(-1) end + --- parse string as HTML or XML and return created elements + --- @return table elements + function DOM_Object:create_template( + str, + is_xml + ) + -- <> is a dummy element, we just need to wrap everything in some element + str = "<>" .. (str or "") .. "</>" + local template = is_xml and parse(str) or parse(str) + local root = template:root_node()._children[1] + return root + end + + --- parse string as HTML or XML and insert it as a child of the current node + function DOM_Object:inner_html( + str, --- HTML or XML to be inserted + is_xml --- [optional] Pass true to parse as XML, otherwise parse as HTML + ) + local el = self + local root = self:create_template(str, is_xml) + -- replace original children of the current element with children of the dummy element created by parsing + el._children = root._children + return el + end + + + --- parse string as HTML or XML and insert it before current the element + function DOM_Object:insert_before_begin( + str, --- HTML or XML to be inserted + is_xml --- [optional] Pass true to parse as XML, otherwise parse as HTML + ) + local el = self + local root = self:create_template(str, is_xml) + local parent = el:get_parent() + local current_pos = el:find_element_pos() + local children = root:get_children() + for i = 1, #children do + parent:add_child_node(children[i], current_pos + i - 1) + end + end + + --- parse string as HTML or XML and insert it at the beginning of the current the element + function DOM_Object:insert_after_begin( + str, --- HTML or XML to be inserted + is_xml --- [optional] Pass true to parse as XML, otherwise parse as HTML + ) + local el = self + local root = self:create_template(str, is_xml) + local children = root:get_children() + for i = 1, #children do + el:add_child_node(children[i], i) + end + end + + --- parse string as HTML or XML and insert it at the end of the current the element + function DOM_Object:insert_before_end( + str, --- HTML or XML to be inserted + is_xml --- [optional] Pass true to parse as XML, otherwise parse as HTML + ) + local el = self + local root = self:create_template(str, is_xml) + local children = root:get_children() + for i = 1, #children do + el:add_child_node(children[i]) + end + end + + --- parse string as HTML or XML and insert it after current the element + function DOM_Object:insert_after_end( + str, --- HTML or XML to be inserted + is_xml --- [optional] Pass true to parse as XML, otherwise parse as HTML + ) + local el = self + local root = self:create_template(str, is_xml) + local parent = el:get_parent() + local current_pos = el:find_element_pos() + local children = root:get_children() + for i = 1, #children do + parent:add_child_node(children[i], current_pos + i) + end + end + -- include the methods to all xml nodes save_methods(parser._handler.root) -- parser: - return parser + return parser, DOM_Object +end + +-- table of elements that should be kept without XML escaping in the DOM serialization +local verbatim_elements = {script=true, style=true} + +function html_to_dom(html_object) + -- convert parsed HTML DOM to the XML DOM + local dom, DOM_Object = parse("") -- use empty text to just initialize the DOM object + -- use root of the DOM object as the original parent + local current_parent = dom._handler.root + + local function create_node(tbl) + -- create node suitable for LuaXML DOM object + tbl._children = {} + -- this should copy methods from the DOM object to the newly created object + tbl.__index = DOM_Object + return setmetatable(tbl, DOM_Object) + end + + local function build_tree(object) + -- convert tree produced by the HTML parser to LuaXML DOM + local typ = object._type + -- process particular node types from the HTML parser + if typ == "doctype" then + current_parent:add_child_node(create_node {_name=object.name, _type="DTD"}) + elseif typ == "comment" then + current_parent:add_child_node(create_node {_text=object.text, _type="COMMENT"}) + elseif typ == "element" then + local attributes = {} + -- convert attributes to the form expected by the DOM object + for _, attr in ipairs(object.attr) do + attributes[attr.name] = attr.value + end + local element = current_parent:create_element(object.tag, attributes) + -- disable escaping of text in dom:serialize() for <script> or <style> elements + if verbatim_elements[string.lower(object.tag)] then element.verbatim = true end + current_parent:add_child_node(element) + -- set the current element as parent for the processing of children + local old_parent = current_parent + current_parent = element + -- process children + for k,v in ipairs(object.children) do + build_tree(v) + end + -- restore original parent + current_parent = old_parent + elseif typ == "text" then + local text = current_parent:create_text_node(object.text) + current_parent:add_child_node(text) + else + -- for other node types, just process the children + for k,v in ipairs(object.children) do + build_tree(v) + end + end + + end + build_tree(html_object) + return dom end +--- Parse HTML text as a DOM object. +-- It supports all methods as the object returned by the parse() function. +-- @param html_str string with the HTML code to be parsed +-- @return DOM_Object +function html_parse(html_str) + local html_obj = HtmlParser:init(html_str) + local html_dom = html_obj:parse() + return html_to_dom(html_dom) +end + + + --- @export return { parse = parse, - serialize_dom= serialize_dom + serialize_dom= serialize_dom, + html_parse = html_parse } diff --git a/macros/luatex/generic/luaxml/luaxml-encodings.lua b/macros/luatex/generic/luaxml/luaxml-encodings.lua new file mode 100644 index 0000000000..9369f494a5 --- /dev/null +++ b/macros/luatex/generic/luaxml/luaxml-encodings.lua @@ -0,0 +1,89 @@ +--- Convert 8-bit encodings to UTF-8 +--- @module luaxml-encodings + +-- this table is generated automatically by this command: +-- texlua encodings/make_encodings.lua +local encodings = { + ['ibm866'] = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ ', + ['iso-8859-5'] = '�������������������������������� ЁЂЃЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ', + ['macintosh'] = 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ', + ['windows-1251'] = 'ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя', + ['iso-8859-13'] = '�������������������������������� ”¢£¤„¦§Ø©Ŗ«¬®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’', + ['iso-8859-6'] = '�������������������������������� ���¤�������،�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ', + ['iso-8859-8'] = '�������������������������������� �¢£¤¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��', + ['iso-8859-4'] = '�������������������������������� ĄĸŖ¤ĨĻ§¨ŠĒĢŦŽ¯°ą˛ŗ´ĩļˇ¸šēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖ×ØŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙', + ['koi8-r'] = '─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ', + ['iso-8859-7'] = '�������������������������������� ‘’£€₯¦§¨©ͺ«¬�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ', + ['iso-8859-3'] = '�������������������������������� Ħ˘£¤�Ĥ§¨İŞĞĴ�Ż°ħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙', + ['windows-1256'] = '€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œں ،¢£¤¥¦§¨©ھ«¬®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûüے', + ['windows-1258'] = '€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ', + ['iso-8859-14'] = '�������������������������������� Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ', + ['windows-1252'] = '€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ', + ['iso-8859-15'] = '�������������������������������� ¡¢£€¥Š§š©ª«¬®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ', + ['x-mac-cyrillic'] = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю€', + ['windows-1254'] = '€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ', + ['windows-1255'] = '€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��', + ['windows-1250'] = '€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙', + ['koi8-u'] = '─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ', + ['iso-8859-10'] = '�������������������������������� ĄĒĢĪĨĶ§ĻĐŠŦŽŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ', + ['windows-1257'] = '€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙', + ['windows-1253'] = '€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ', + ['iso-8859-2'] = '�������������������������������� Ą˘Ł¤ĽŚ§¨ŠŞŤŹŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙', + ['windows-874'] = '€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛', + ['iso-8859-16'] = '�������������������������������� ĄąŁ€„Š§š©Ș«ŹźŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ', +} + + +local utfchar = utf8.char + +--- Try to find an encoding in HTML string +---@param str string HTML document +---@param len number count of characters from the start of the string where it should search for the encoding metadata +---@return string encoding identifier, or nil and message if no encoding was found +local function find_html_encoding(str, len) + -- try to find encoding in the html document + -- we limit search length, because encoding should be in the document head, ideally near the start + local len = len or 4096 + local sub = str:sub(1, len) + for meta in sub:gmatch("<meta (.-)>") do + local charset = meta:match("charset%s*=%s*[\"']?(.-)[\"']") + if charset then return string.lower(charset) end + end + return nil, "Cannot find the document encoding" +end + +local function load_mapping(enc_name) + local enc_name = enc_name or "" + local enc = encodings[enc_name] + if not enc then return nil, "Cannot load encoding " .. enc_name end + local mapping,i = {}, 128 + for pos, codepoint in utf8.codes(enc) do + mapping[i] = utfchar(codepoint) + i = i + 1 + end + return mapping +end + +--- Convert string to utf-8 +---@param text string for converting +---@param mapping table +---@return string converted string +local function recode(text, mapping) + return text:gsub("(.)", function(char) + local charpoint = string.byte(char) + if charpoint > 127 then + return mapping[charpoint] + else + return false + end + end) +end + + +return { + encodings = encodings, + find_html_encoding = find_html_encoding, + load_mapping = load_mapping, + recode = recode +} + diff --git a/macros/luatex/generic/luaxml/luaxml-htmltemplates.lua b/macros/luatex/generic/luaxml/luaxml-htmltemplates.lua new file mode 100644 index 0000000000..171d16f1ae --- /dev/null +++ b/macros/luatex/generic/luaxml/luaxml-htmltemplates.lua @@ -0,0 +1,144 @@ + +local luaxml_sty = require "luaxml-sty" +-- try +local xmltransform = luaxml_sty.transformations.html +if not xmltransform then + xmltransform = luaxml_sty.declare_transformer("html") +end + + +xmltransform:add_action("head", [[ +\tableofcontents +]]) + +xmltransform:add_action("img", [[\noindent\includegraphics[max width=\textwidth]{@{src}}]]) + +xmltransform:add_action("h1", [[\addcontentsline{toc}{section}{%s}\section*{%s} +]]) +xmltransform:add_action("h2", [[\addcontentsline{toc}{subsection}{%s}\subsection*{%s} +]]) +-- don't add lower sectioning level than subsection +xmltransform:add_action("h3", [[\addcontentsline{toc}{subsubsection}{%s}\subsubsection*{%s} +]]) +xmltransform:add_action("h4", [[\addcontentsline{toc}{subsubsection}{%s}\subsubsection*{%s} +]]) +xmltransform:add_action("h5", [[\addcontentsline{toc}{subsubsection}{%s}\subsubsection*{%s} +]]) +xmltransform:add_action("h6", [[\addcontentsline{toc}{subsubsection}{%s}\subsubsection*{%s} +]]) + +xmltransform:add_action("i", [[\textit{%s}]]) +xmltransform:add_action("em", [[\emph{%s}]]) +xmltransform:add_action("b", [[\textbf{%s}]]) +xmltransform:add_action("strong", [[\textbf{%s}]]) +xmltransform:add_action("tt", [[\texttt{%s}]]) +xmltransform:add_action("samp", [[\texttt{%s}]]) +xmltransform:add_action("kbd", [[\texttt{%s}]]) +xmltransform:add_action("var", [[\textit{%s}]]) +xmltransform:add_action("dfn", [[\texttt{%s}]]) +xmltransform:add_action("code", [[\texttt{%s}]]) +xmltransform:add_action("a[href]", [[\textit{%s}\protect\footnote{\texttt{@{href}}}]]) + + +local itemize = [[ +\begin{itemize} +%s +\end{itemize} +]] +xmltransform:add_action("ul", itemize) +xmltransform:add_action("menu", itemize) +xmltransform:add_action("ol", [[ +\begin{enumerate} +%s +\end{enumerate} +]]) + +xmltransform:add_action("dl", [[ +\begin{description} +%s +\end{description} +]]) + + +xmltransform:add_action("li", "\\item %s\n") +xmltransform:add_action("dt", "\\item[%s] ") + +local quote = [[ +\begin{quotation} +%s +\end{quotation} +]] + +xmltransform:add_action("blockquote", quote) +xmltransform:add_action("q", "\\enquote{%s}") +xmltransform:add_action("abbr", "%s\\protect\\footnote{@{title}}") +xmltransform:add_action("sup", "\\textsuperscript{%s}") +xmltransform:add_action("sub", "\\textsubscript{%s}") + +xmltransform:add_action("table", [[ +\begin{calstable} +%s +\end{calstable} +]]) + +xmltransform:add_action("tr", "\\brow %s \\erow") +xmltransform:add_action("td", "\\cell{%s}") +xmltransform:add_action("th", "\\cell{%s}") + + +-- this is the original code for verbatim, but I changed LuaXML to not escape characters in verbatim, +-- so we can use the verbatim environment +xmltransform:add_action("pre", [[{\parindent=0pt\obeylines\ttfamily\catcode`\ =\active\def {\ }\catcode`\#=11%% +%s} + +]], {verbatim=true}) +xmltransform:add_action("pre *", [[%s]]) + +-- +xmltransform:add_action("pre", [[ +\begin{verbatim}%s\end{verbatim} +]], {verbatim=true}) + +xmltransform:add_action("details", [[%s +]]) + +xmltransform:add_action("details summary", [[ +\medskip +\noindent %s + +\smallskip +\noindent +]]) + +xmltransform:add_action("figure", [[ +\begin{figure}[hbt!] +\centering + +%s + +\end{figure} +]]) + +xmltransform:add_action("figcaption", [[\caption{%s}]]) + + +xmltransform:add_action("p", [[ + +%s + +]]) + +xmltransform:add_action("br", [[\\]]) + +-- some fixes for weird web pages +xmltransform:add_action("a p", [[%s]]) +xmltransform:add_action("h1 a[href], h2 a[href], h3 a[href], h4 a[href], h5 a[href], h6 a[href]", "%s") + + +-- mathjax is special element added by rmodepdf around LaTeX math +xmltransform:add_action("mathjax",[[%s]], {verbatim=true,collapse_newlines=false}) + +xmltransform:add_action("hyperlink", "\\hyperlink{@{href}}{%s}") +xmltransform:add_action("hypertarget", "\\hypertarget{@{id}}{%s}") + +return xmltransform diff --git a/macros/luatex/generic/luaxml/luaxml-mod-html.lua b/macros/luatex/generic/luaxml/luaxml-mod-html.lua index 69e32b16e2..9f99cc3bc4 100644 --- a/macros/luatex/generic/luaxml/luaxml-mod-html.lua +++ b/macros/luatex/generic/luaxml/luaxml-mod-html.lua @@ -1,3 +1,6 @@ +--- HTML parsing module for LuaXML +-- @module luaxml-mod-html +-- @author Michal Hoftich <michal.h21@gmail.com -- Copyright Michal Hoftich, 2022 -- HTML parser inspired by https://browser.engineering/html.html -- but then redone using https://html.spec.whatwg.org/multipage/parsing.html @@ -1540,9 +1543,14 @@ local function is_formatting_element(name) return formatting_element_names[name] end -local special_elements = {} +local function hash_from_array(tbl) + local t = {} + for _, v in ipairs(tbl) do t[v] = true end + return t +end + -local special_elements_list = {"address", "applet", "area", "article", "aside", +local special_elements_list = hash_from_array {"address", "applet", "area", "article", "aside", "base", "basefont", "bgsound", "blockquote", "body", "br", "button", "caption", "center", "col", "colgroup", "dd", "details", "dir", "div", "dl", "dt", "embed", "fieldset", "figcaption", "figure", "footer", "form", "frame", @@ -1555,13 +1563,9 @@ local special_elements_list = {"address", "applet", "area", "article", "aside", "mi","mo","mn","ms","mtext", "annotation-xml","foreignObject","desc", "title" } -for k,v in ipairs(special_elements_list) do - special_elements[v] = true -end - local function is_special(name) - return special_elements[name] + return special_elements_list[name] end -- these lists are used in HtmlParser:generate_implied_endtags() @@ -1649,8 +1653,12 @@ local HtmlTreeStates = {} +--- @type HtmlParser local HtmlParser = {} +--- Initialize the HTML Object +---@param body string HTML to be parsed +---@return table initialized object function HtmlParser:init(body) local o ={} setmetatable(o, self) @@ -1686,10 +1694,11 @@ for _,v in ipairs(self_closing_tags_list) do self_closing_tags[v] = true end - +--- Execute the HTML parser +--- @return table Root node of the HTML DOM function HtmlParser:parse() -- we assume utf8 input, you must convert it yourself if the source is - -- in a different encoding + -- in a different encoding. for example using luaxml-encodings library self.text = {} self.state = self.default_state -- this should enable us to pass over some characters that we want to ignore @@ -1791,6 +1800,7 @@ function HtmlParser:emit(token) elseif token_type == "start_tag" then self:add_text() -- self:start_attribute() + self:reset_insertion_mode() self:start_tag() -- print("Emit start tag", table.concat(token.name)) -- save last attribute @@ -1882,8 +1892,142 @@ function HtmlParser:set_xmlns(node, parent) end end +function HtmlParser:pop_element() + -- close the current element and add it to the DOM + local el = self:close_element() + local parent = self:get_parent() + parent:add_child(el) + return el +end + +local close_p_at_start = hash_from_array {"address", "article", "aside", "blockquote", "center", "details", "dialog", "dir", "div", "dl", "fieldset", "figcaption", "figure", "footer", "header", "hgroup", "main", "menu", "nav", "ol", "p", "search", "section", "summary", "ul", "pre", "listing", "form", "table", "xmp", "hr"} + +local close_headers = hash_from_array {"h1", "h2", "h3", "h4", "h5", "h6"} + +local body_modes = hash_from_array {"in_body", "in_cell", "in_row", "in_select", "in_table", "in_table_body", "in_frameset"} + +local list_items = hash_from_array {"li", "dt", "dd"} + +local close_address_at_end = hash_from_array{"address", "article", "aside", "blockquote", "button", "center", "details", "dialog", "dir", "div", "dl", "fieldset", "figcaption", "figure", "footer", "header", "hgroup", "listing", "main", "menu", "nav", "ol", "pre", "search", "section", "summary", "ul", "form"} + + +function HtmlParser:close_unfinished(name) + -- close all unfinished elements until the element with the given name is found + for i = #self.unfinished, 1, -1 do + local el = self:pop_element() + if el.tag == name then + break + end + end +end + + +function HtmlParser:close_paragraph() + -- close currently open <p> elements + self:close_unfinished("p") +end + +function HtmlParser:current_element_name() + -- return name of the current element + return self:get_parent().tag +end + +local not_specials = hash_from_array { "address", "div", "p"} + +local function handle_list_item(self, name) + -- we handle li, dt and dd. dt and dd should close each other, li closes only itself + local names = {dt = true, dd = true} + if name == "li" then names = {li=true} end + for i = #self.unfinished, 1, -1 do + local current = self.unfinished[i] + local current_tag = current.tag + if names[current_tag] then + self:generate_implied_endtags(nil, {current.tag}) + for j = #self.unfinished, i, -1 do + self:pop_element() + end + break + elseif is_special(current_tag) and not not_specials[name] then + break + end + end +end + +local close_paragraph = function(self) + if is_in_button_scope(self, "p") then + self:close_paragraph() + end +end + +function HtmlParser:handle_insertion_mode(token) + -- simple handling of https://html.spec.whatwg.org/multipage/parsing.html#tree-construction + -- we don't support most rules, just the most important for avoiding mismatched tags + + if body_modes[self.insertion_mode] then + if token.type == "start_tag" then + local name = table.concat(token.name) + if close_p_at_start[name] then close_paragraph(self) end + if close_headers[name] then + close_paragraph(self) + -- close current element if it is already header + if close_headers[self:current_element_name()] then + self:pop_element() + end + elseif name == "pre" or name == "listing" then + -- we should ignore next "\n" char token + elseif name == "image" then + -- image tag is an error, change to <img> + token.name = {"img"} + elseif list_items[name] then + handle_list_item(self, name) + close_paragraph(self) + end + elseif token.type == "end_tag" then + local name = table.concat(token.name) + if close_address_at_end[name] then + if is_in_scope(self, name, {}) then + self:generate_implied_endtags() + self:close_unfinished(name) + return false + else + token.type = "ignore" + end + elseif name == "p" then + if not is_in_button_scope(self, "p") then + local parent = self:get_parent() + local node = Element:init("p", parent) + table.insert(self.unfinished, node) + end + -- use self:close_paragraph() instead of close_paragraph() because we don't need to check scope at this point + self:close_paragraph() + elseif name == "br" then + token.type = "start_tag" + elseif close_headers[name] then + local header_in_scope = false + -- detect, if there are any open h1-h6 tag and close it + for el, _ in pairs(close_headers) do + if is_in_scope(self, el, {}) then + header_in_scope = el + break + end + end + if not header_in_scope then + token.type = "ignore" + else + self:close_unfinished(header_in_scope) + end + end + end + end + return true +end + +local rawtext_elements = hash_from_array {"style", "textarea", "xmp"} + + function HtmlParser:start_tag() local token = self.current_token + self:handle_insertion_mode(token) if token.type == "start_tag" then -- close all currently opened attributes self:start_attribute() @@ -1894,18 +2038,18 @@ function HtmlParser:start_tag() node.attr = token.attr node.self_closing = token.self_closing self:set_xmlns(node) - -- + -- in this handler we should close <p> or <li> elements without explicit closing tags if token.self_closing -- <img /> or self_closing_tags[name] -- void elements then - parent:add_child(node) + parent:add_child(node, node.tag) else -- add to the unfinished list table.insert(self.unfinished, node) end if name == "title" then self.element_state = "rcdata" - elseif name == "style" then + elseif rawtext_elements[name] then self.element_state = "rawtext" elseif name == "script" then self.element_state = "script_data" @@ -1916,11 +2060,16 @@ end function HtmlParser:end_tag() -- close current opened element local token = self.current_token + local should_pop = self:handle_insertion_mode(token) if token.type == "end_tag" then if #self.unfinished==0 then return nil end - local node = self:close_element() - local parent = self:get_parent() - parent:add_child(node) + -- we shouldn't close elements if handle_insertion_mode() already closed them + if should_pop then + -- close the current element only if the token is in the current scope + if is_in_scope(self, table.concat(token.name), {}) then + self:pop_element() + end + end end end @@ -1964,6 +2113,21 @@ function HtmlParser:adjusted_current_node() end +local simple_modes = { + body = "in_body", + td = "in_cell", + th = "in_cell", + tr = "in_row", + tbody = "in_table_body", + thead = "in_table_body", + tfoot = "in_table_body", + caption = "in_caption", + colgroup = "in_column_group", + table = "in_table", + template = "current_template_insertion_mode", + frameset = "in_frameset" +} + function HtmlParser:reset_insertion_mode() -- https://html.spec.whatwg.org/multipage/parsing.html#reset-the-insertion-mode-appropriately local last = false @@ -1977,16 +2141,33 @@ function HtmlParser:reset_insertion_mode() if name == "head" and last == true then self:switch_insertion("in_head") return - elseif name == "body" then - self:switch_insertion("in_body") - return elseif name == "html" then - if self.head_pointer then + if not self.head_pointer then self:switch_insertion("before_head") return else self:switch_insertion("after_head") + return + end + elseif name == "select" then + if not last then + for x = position -1, 1, -1 do + if x == 1 then break end + local ancestor = self.unfinished[x] + local ancestor_name = ancestor.tag + if ancestor_name == "template" then + break + elseif ancestor_name == "table" then + self:switch_insertion("in_select_in_table") + return + end + end end + self:switch_insertion("in_select") + return + elseif simple_modes[name] then + self:switch_insertion(simple_modes[name]) + return elseif last == true then self:switch_insertion("in_body") return @@ -2006,8 +2187,8 @@ function HtmlParser:generate_implied_endtags(included, ignored) local current = self:current_node() or {} -- keep removing elements while they are in the "included" list if included[current.tag] then - table.remove(self.unfinished) - self:generate_implied_endtags(ignored) + self:pop_element() + self:generate_implied_endtags(included, ignored) end end @@ -2023,9 +2204,7 @@ function HtmlParser:finish() self:start_tag("html") end while #self.unfinished > 0 do - local node = self:close_element() - local parent = self:get_parent() - parent:add_child(node) + self:pop_element() end -- return root element return self.Document -- self:close_element() diff --git a/macros/luatex/generic/luaxml/luaxml-sty.lua b/macros/luatex/generic/luaxml/luaxml-sty.lua new file mode 100644 index 0000000000..35548688ce --- /dev/null +++ b/macros/luatex/generic/luaxml/luaxml-sty.lua @@ -0,0 +1,155 @@ +--- Helper functions for the luaxml.sty package +--- @module luaxml-sty +--- @author Michal Hoftich <michal.h21@gmail.com +-- provide global object with all variables we will use +luaxml_sty = { + current = { + transformation = "default", + parameters = {}, -- "parameters" argument for transform:add_action + }, + packages = {}, + -- we want to support multiple transformation objects, they will be stored here + transformations = {}, +} +luaxml_sty.packages.transform = require "luaxml-transform" +luaxml_sty.packages.domobject = require "luaxml-domobject" + +-- declare default transformer, used if no explicit transformer is used in LuaXML LaTeX commands +luaxml_sty.transformations.default = luaxml_sty.packages.transform.new() + +-- debuggind functions +function luaxml_sty.error(...) + local arg = {...} + print("LuaXML error: " .. table.concat(arg, " ")) +end + +luaxml_sty.do_debug = false + +function luaxml_sty.debug(...) + if luaxml_sty.do_debug then + local arg = {...} + print("LuaXML: " .. table.concat(arg, " ")) + end +end + +--- Declare new transformer +---@param name string transformer name +---@return table transformer object +function luaxml_sty.declare_transformer(name) + luaxml_sty.transformations[name] = luaxml_sty.packages.transform.new() + return luaxml_sty.transformations[name] +end + + +--- Add luaxml-transform rule +--- @param current string transformer name, empty for the default object +--- @param selector string CSS selector to be used +--- @param rule string luaxml-transform rule +function luaxml_sty.add_rule(current, selector, rule) + if current == "" then + current = luaxml_sty.current.transformation + end + -- the +v parameter type in LaTeX replaces newlines with \obeyedline. we need to replace it back to newlines + rule = rule:gsub("\\obeyedline", "\n") + luaxml_sty.debug("************* luaxml_sty rule: " .. selector, rule, current, (luaxml_sty.current.parameters.verbatim and "verbatim" or "not verbatim")) + local transform = luaxml_sty.transformations[current] or luaxml_sty.declare_transformer(current) + if not transform then + luaxml_sty.error("Cannot find LuaXML transform object: " .. (current or "")) + return nil, "Cannot find LuaXML transform object: " .. (current or "") + end + transform:add_action(selector, rule, luaxml_sty.current.parameters) +end + +-- by default, we will use XML parser, so use_xml is set to true +luaxml_sty.use_xml = true + +--- Use XML parser for parsing of next snippets +function luaxml_sty.set_xml() + luaxml_sty.use_xml = true +end + + +--- Use HTML parser for parsing of next snippets +function luaxml_sty.set_html() + luaxml_sty.use_xml = false +end + +--- transform XML string and print it to the output +---@param current string transformer name, empty for the default object +---@param xml_string string to be transformed +function luaxml_sty.parse_snippet(current, xml_string) + local domobject = luaxml_sty.packages.domobject + -- get the current transformer object + if current == "" then + current = luaxml_sty.current.transformation + end + local transform = luaxml_sty.transformations[current] + if not transform then + luaxml_sty.error("Cannot load transformer: " .. current) + return nil, "Cannot load transformer: " .. current + end + local dom + -- decide if we should use XML or HTML parser + if luaxml_sty.use_xml then + dom = domobject.parse(xml_string) + else + dom = domobject.html_parse(xml_string) + end + luaxml_sty.debug(dom:serialize()) + local result = transform:process_dom(dom) + luaxml_sty.debug(result) + luaxml_sty.packages.transform.print_tex(result) +end + +--- Transform file +---@param current string transformer name, empty for the default object +---@param filename string file to be transformed +function luaxml_sty.parse_file(current, filename) + local f = io.open(filename, "r") + if not f then + luaxml_sty.packages.transform.print_tex("\\textbf{LuaXML error}: cannot find file " .. filename) + return nil, "Cannot find file " .. filename + end + local content = f:read("*a") + f:close() + luaxml_sty.parse_snippet(current, content) +end + +--- parse environment contents using Lua +---@param env_name string environment name +---@param callback_name string name which will be used in the callback registration +---@return function +-- idea from https://tex.stackexchange.com/a/574323/2891 +function luaxml_sty.store_lines(env_name, callback_name) + return function(str) + luaxml_sty.debug("str", str) + local env_str = [[\end{]] .. env_name .. "}" + if string.find (str , env_str:gsub("%*", "%%*")) then + luaxml_sty.debug("end of environment") + luatexbase.remove_from_callback ( "process_input_buffer" , callback_name) + return env_str -- str + else + table.insert(luaxml_sty.verb_table, str) + end + return "" + end +end + +--- require line grabbing for an environment +---@param env_name string environment name +function luaxml_sty.register_verbatim(env_name) + luaxml_sty.verb_table = {} + local callback_name = "luaxml_store_lines_".. env_name + local fn = luaxml_sty.store_lines(env_name, callback_name) + luatexbase.add_to_callback( + "process_input_buffer" , fn , callback_name) +end + +--- parse content of the previous environment registered using luaxml_sty.register_verbatim() +--- and print the transformed content +---@param transformer string transformer name, empty for the default object +function luaxml_sty.print_verbatim(transformer) + luaxml_sty.parse_snippet(transformer, table.concat(luaxml_sty.verb_table, "\n")) +end + +return luaxml_sty diff --git a/macros/luatex/generic/luaxml/luaxml-transform.lua b/macros/luatex/generic/luaxml/luaxml-transform.lua index b6841fea5f..34930df844 100644 --- a/macros/luatex/generic/luaxml/luaxml-transform.lua +++ b/macros/luatex/generic/luaxml/luaxml-transform.lua @@ -1,5 +1,5 @@ --- XML transformation module for LuaXML --- @module luaxml-tranform +-- @module luaxml-transform -- @author Michal Hoftich <michal.h21@gmail.com -- code originaly comes from from https://github.com/michal-h21/luaxml-mathml @@ -198,6 +198,13 @@ local function add_action(selector, template, parameters, csspar) end +--- Remove actions for a given selector +-- @param selector CSS selector for the matching element +-- @param csspar cssquery object. Default is set by the library, so it is not necessary to use. +local function reset_actions(selector, csspar) + local css = csspar or css + css:remove_selector(selector) +end --- Transform XML string @@ -234,7 +241,7 @@ end local function print_tex(content) -- we need to replace "\n" characters with calls to tex.sprint for s in content:gmatch("([^\n]*)") do - tex.sprint(s) + tex.print(s) end end @@ -243,7 +250,7 @@ end local Transformer --- Make new Transformer object --- @return Tranformer object +-- @return Transformer object local function new() local self = setmetatable({}, Transformer) self.css = cssquery() @@ -289,6 +296,12 @@ function Transformer:add_custom_action(selector, fn ) add_custom_action(selector, fn, self.css) end +--- Remove all actions that match the given selector +---@param selector string +function Transformer:reset_actions(selector) + reset_actions(selector, self.css) +end + -- all methods that use transformation functions must -- correctly handle the cssquery object that this library uses @@ -338,6 +351,7 @@ local M = { print_tex = print_tex, add_action = add_action, add_custom_action = add_custom_action, + reset_actions = reset_actions, simple_content = simple_content, load_file = load_file, process_dom = process_dom, diff --git a/macros/luatex/generic/luaxml/luaxml.pdf b/macros/luatex/generic/luaxml/luaxml.pdf Binary files differindex f574a0a528..22c6de3c84 100644 --- a/macros/luatex/generic/luaxml/luaxml.pdf +++ b/macros/luatex/generic/luaxml/luaxml.pdf diff --git a/macros/luatex/generic/luaxml/luaxml.sty b/macros/luatex/generic/luaxml/luaxml.sty new file mode 100644 index 0000000000..0d1ca3727e --- /dev/null +++ b/macros/luatex/generic/luaxml/luaxml.sty @@ -0,0 +1,142 @@ +\ProvidesExplPackage{luaxml}{2024-11-14}{v0.2b}{LuaXML package} +% \ProvidesPackage{luaxml}[2024-11-14 LuaXML package] + +\RequirePackage{luacode} + +% ToDo: add support for use of transformation rules for other XML syntaxes -- using LaTeX command? + + +\begin{luacode*} +luaxml_sty = require "luaxml-sty" +\end{luacode*} + + +\ExplSyntaxOn + +% package options +\bool_new:N\l_luaxml_use_defaults +\keys_define:nn {luaxml}{ + default .bool_set:N = \l_luaxml_use_defaults, + default .initial:n = false +} +\ProcessKeyOptions + +% options used in \LXMLRule +\bool_new:N\l_luaxml_verbatim +\tl_new:N \l_luaxml_transformer + +\keys_define:nn{luaxmlrule}{ + verbatim .bool_set:N = \l_luaxml_verbatim , + verbatim .initial:n = false, + unknown .code:n = \tl_set_eq:NN\l_luaxml_transformer\l_keys_key_str, + transformer .tl_set:N = \l_luaxml_transformer, +} + + +% select current transformer object +\NewDocumentCommand\LXMLUseTransformer{m}{ + \directlua{ +luaxml_sty.current.transformation = "#1", +}} + +% declare new transformer object +\NewDocumentCommand\LXMLDeclareTransformer{m}{ + \directlua{ + % luaxml_sty.transformations["#1"] = luaxml_sty.packages.transform.new() + luaxml_sty.declare_transformer("#1") + } +} + +% add transformer rule +% #1 options (verbatim, transformer, unknown key = transformer) +% #2 CSS selector +% #3 transformer rule +\NewDocumentCommand\LXMLRule{O{} m +v}{ + % handle keyval options + \group_begin: + \keys_set:nn {luaxmlrule} { #1 } + \directlua{luaxml_sty.current.parameters = {}} + \bool_if:NT \l_luaxml_verbatim {\directlua{luaxml_sty.current.parameters.verbatim = true}} + \directlua{ + luaxml_sty.add_rule("\l_luaxml_transformer", "#2", "\luaescapestring{#3}") + } + \group_end: +} + + +% Transform code snippet +% \LXMLSnippet* - parse using XML parser +% \LXMLSnippet - parse using HTML parser +% #2 transformer object name -- empty = default +% #3 XML string +\NewDocumentCommand\LXMLSnippet{s O{} m}{ + \IfBooleanTF{#1}{ + \directlua{luaxml_sty.set_html()} + }{ + \directlua{luaxml_sty.set_xml()} + } + \directlua{ + luaxml_sty.parse_snippet("\luaescapestring{#2}", [[\detokenize{#3}]]) + } +} + +% Transform file +% \LXMLInputFile* - parse using XML parser +% \LXMLInputFile - parse using HTML parser +% #2 transformer object name -- empty = default +% #3 XML string +\NewDocumentCommand\LXMLInputFile{s O{} m}{ + \IfBooleanTF{#1}{ + \directlua{luaxml_sty.set_html()} + }{ + \directlua{luaxml_sty.set_xml()} + } + \directlua{ + luaxml_sty.parse_file("\luaescapestring{#2}", "\luaescapestring{#3}") + } +} + + +% Transform XML contained in the environment +% #1 transformer object name -- empty = default +\newenvironment{LXMLCode}[1]{ + \directlua{ + luaxml_sty.set_xml() + luaxml_sty.register_verbatim("LXMLCode") + } + \tl_set:Nn\l_luaxml_transformer{#1} +}{ + \directlua{ + luaxml_sty.print_verbatim("\l_luaxml_transformer") + } +} + +% Transform HTML contained in the environment +% #1 transformer object name -- empty = default +% +% I couldn't process the first line in the environment using the Lua callback with \NewDocumentEnvironment, +% so \newenvironment is used instead. +\newenvironment{LXMLCode*}[1]{ + \directlua{ + luaxml_sty.set_html() + luaxml_sty.register_verbatim("LXMLCode*") + } + \tl_set:Nn\l_luaxml_transformer{#1} +}{ + \directlua{ + luaxml_sty.print_verbatim("\l_luaxml_transformer") + } +} + +% load default transformation rules +\NewDocumentCommand\LXMLLoadDefaults{}{ + \directlua{require "luaxml-htmltemplates"} +} + +\AtBeginDocument{ + \bool_if:NT \l_luaxml_use_defaults {\LXMLLoadDefaults} +} + + +\ExplSyntaxOff +\endinput diff --git a/macros/luatex/generic/luaxml/luaxml.tex b/macros/luatex/generic/luaxml/luaxml.tex index 5031a0468e..1d5065ce50 100644 --- a/macros/luatex/generic/luaxml/luaxml.tex +++ b/macros/luatex/generic/luaxml/luaxml.tex @@ -7,7 +7,7 @@ \usepackage{framed} % Version is defined in the makefile, use default values when compiled directly \ifdefined\version\else -\def\version{v0.1r} +\def\version{v0.2b} \let\gitdate\date \fi \newcommand\modulename[1]{\subsection{#1}\label{sec:#1}} @@ -17,6 +17,7 @@ \newcommand\functionsummary[1]{#1\\\textbf{Parameters:}\\} \newcommand\functionparam[2]{\texttt{#1}: #2\\} \newcommand\functionreturn[1]{\textbf{Return: }\\#1\\} +\usepackage[default]{luaxml} \begin{document} \title{The \textsc{LuaXML} library} @@ -99,6 +100,67 @@ end \end{luacode*} \end{framed} +\subsection{HTML parsing} + +You can parse HTML documents using the \verb|DOM_Object.html_parse| function. This parser is slower +than the default XML parser, but it can load files that would cause errors in the XML mode. +It can handle wrongly nested HTML tags, inline JavaScript and CSS styles, and other HTML features +that would cause XML errors. + +\begin{verbatim} +dom = require "luaxml-domobject" +local document = [[ +<html> +<head><title>sample</title></head> +<body> +<h1>test</h1> +<p>hello +<p>another paragraph +<ul> +<li>first +<li>second +</ul> +</body> +</html> + ]] + +-- dom.html_parse returns the DOM_Object +obj = dom.html_parse(document) +-- print names of all elements contained in body +for _, x in ipairs(obj:query_selector("body *")) do + tex.print(x:get_element_name().. "\\par") +end +\end{verbatim} + + +\begin{framed} +\begin{luacode*} +dom = require "luaxml-domobject" +local document = [[ +<html> +<head><title>sample</title></head> +<body> +<h1>test</h1> +<p>hello +<p>another paragraph +<ul> +<li>first +<li>second +</ul> +</body> +</html> + ]] + +-- dom.html_parse returns the DOM_Object +obj = dom.html_parse(document) +-- print names of all elements contained in body +for _, x in ipairs(obj:query_selector("body *")) do + tex.print(x:get_element_name().. "\\par") +end +\end{luacode*} +\end{framed} + + \subsection{Void elements} The \verb|DOM_Object.parse| function tries to support the HTML void elements, @@ -295,6 +357,52 @@ body:replace_node(oldbody) \end{framed} +\subsubsection{Adding raw XML and HTML string} + +You can also set XML or HTML markup from a string to an element using the \texttt{DOM\_Object:inner\_html} function. +Pass true as the second argument to parse string as XML, it is parsed as HTML otherwise. + + +\begin{verbatim} +local document = [[ +<html><p>hello</p> +</html> +]] +local tree = dom.html_parse(document) +local p = tree:query_selector("p")[1] +-- insert inner_html as XML +p:inner_html("hello <b>this</b> should be the new content") +print(tree:serialize()) +\end{verbatim} + +In this example, we replace contents of the first \verb|<p>| element by new content. + +\begin{framed} + \ttfamily + \begin{luacode*} +local document = [[ +<html><p>hello</p> +</html> +]] +local tree = dom.html_parse(document) +local p = tree:query_selector("p")[1] +-- insert inner_html as XML +p:inner_html("hello <b>this</b> should be the new content") +tex.print(tree:serialize()) + \end{luacode*} +\end{framed} + +There are more variants of raw string methods that add the new content at specific places in the element instead of replacing contents +of the element: + +\begin{description} + \item[\texttt{DOM\_Object:insert\_before\_begin}] -- before element. + \item[\texttt{DOM\_Object:insert\_after\_begin}] -- just inside the element, before its first child. + \item[\texttt{DOM\_Object:insert\_before\_end}] -- just inside the element, after its last child. + \item[\texttt{DOM\_Object:insert\_after\_end}] -- after the element. +\end{description} + + \section{The \texttt{CssQuery} library} \label{sec:cssquery_library} @@ -436,7 +544,7 @@ is placed to the output string. There are two methods for action specification, \verb|add_action| for text templates, and \verb|add_custom_action| for Lua functions. -\subsubsection{Transforming using templates} +\subsubsection{Transforming using templates}\label{sec:transform-templates} Template actions can be added using the \verb|add_action| method: @@ -456,6 +564,7 @@ attributes. \begin{description} \item[\verb|@\{attribute name\}|] insert value of an attribute \item[\verb|@<.>|] insert transformed content of the element + \item[\texttt{\%s}] insert transformed content of the element. Shortcut for \verb|@<.>|. \item[\verb|@<number>|] insert transformed content of the child element selected by it's number in the list of children \item[\verb|@<element name>|] insert transformed content of the named child element @@ -641,7 +750,257 @@ transform.print_tex("\\verb|" .. result .. "|") \end{luacode*} \end{framed} +\section{Character sets handling} + +The \texttt{luaxml-encodings} library provides functions to convert texts in legacy 8-bit encodings such as WINDOWS-1250 +or ISO-8859-2 to UTF-8. This can be useful in fixing document encoding before HTML parsing using the \texttt{luaxml-mod-html} +library. + +\subsection{Example} + + +\begin{verbatim} +kpse.set_program_name "luatex" +local encodings = require "luaxml-encodings" + +--read HTML page from the standard input +local text = io.read("*all") +-- find the character encoding in HTML metadata +local enc = encodings.find_html_encoding(text) +if enc then + -- local conversion table for the found encoding + local mapping = encodings.load_mapping(enc) + if mapping then + -- if the mapping exists, recode the HTML input and print it + local converted = encodings.recode(text, mapping) + print(converted) + end +end +\end{verbatim} + +\section{The \texttt{luaxml.sty} Package} + +The \texttt{luaxml.sty} package is designed to provide an interface for defining +transformation rules for XML and HTML documents using Lua and \LaTeX\ commands. +It allows users to declare transformation objects, apply transformation rules +based on CSS selectors, and process XML or HTML from files or code snippets +within \LaTeX\ documents. + +XML and HTML documents can be inserted from files or directly via commands and environments. +All commands and environments intended for code input have two variants: with +an asterisk for inputting HTML documents and without an asterisk for inputting +XML documents. + +\subsection{Package Options} + +\begin{description} + \item[default] -- load HTML templates. They will be available as \verb|html| + option in \verb|luaxml.sty| commands and environments. +\end{description} + +\begin{verbatim} +\usepackage[default]{luaxml} +... + +\begin{LXMLCode*}{html} + <p>Hello <b>world</b> and some text in <i>italics</i>.</p> +\end{LXMLCode*} +\end{verbatim} + +\begin{framed} +\begin{LXMLCode*}{html} + <p>Hello <b>world</b> and some text in <i>italics</i>.</p> +\end{LXMLCode*} +\end{framed} + + +\subsection{Example of Transformation Using \LaTeX\ Commands} +\begin{verbatim} +\LXMLRule[sample]{h1}|\par\noindent{\large\bfseries %s\par}| +\LXMLRule[sample]{p}|%s\par| +\LXMLRule[sample]{a[href]}|\href{@{href}}{%s}| + %% process HTML code +\begin{LXMLCode*}{sample} +<html> +<h1>Hello</h1> +<p>Here is a link to <a href="https://tex.stackexchange.com/">TeX.sx</a> +</p> +</html> +\end{LXMLCode*} +\end{verbatim} +\begin{framed} + +\LXMLRule[sample]{h1}|\par\noindent{\large\bfseries %s\par}| +\LXMLRule[sample]{p}|%s\par| +\LXMLRule[sample]{a[href]}|\href{@{href}}{%s}| +% process HTML code +\begin{LXMLCode*}{sample} +<html> +<h1>Hello</h1> +<p>Here is a link to <a href="https://tex.stackexchange.com/">TeX.sx</a> +</p> +</html> +\end{LXMLCode*} +\end{framed} + + +\subsection{Declaring Transformation Rules} + + + +\begin{verbatim} +\LXMLRule[<options>]\{<CSS selector>\}|<transformation rule>| +\end{verbatim} + +\noindent Defines a transformation rule for the current transformer. The transformation +is applied to elements matching the given CSS selector. You can define multiple transformers, +for example if you want to support multiple XML syntaxes and HTML at the same time. + +\medskip + +\noindent The \texttt{<options>} parameter can include: + +\begin{itemize} + \item \texttt{verbatim}: Whether to process the rule in verbatim mode. + \item \texttt{transformer}: Specifies a transformer. +\end{itemize} + +Any unknown key acts as a name of the transformer. In the following code, both +examples add a rule to a transformer named \texttt{sample}. + +\begin{verbatim} +\LXMLRule[transformer=sample]{b}|\textbf{%s}| +\LXMLRule[sample]{i}|\textit{%s}| +\end{verbatim} + +If you want to support only one syntax though, you don't need to specify the transformer name at all, +a default object will be used. + +By default, spaces are collapsed. If you want to support elements where white spaces +should be preserved, such as HTML \verb|<pre>| element, use the \verb|verbatim| option: + +\begin{verbatim} +\LXMLRule[verbatim]{pre}|\begin{verbatim} + %s +\end{verbatim} +% trick to print \end{verbatim}| +\verb+\end{verbatim}|+ + +\bigskip + +The \texttt{transformation rule} must be delimited by a pair of characters that are not used in the +text of the rule. We use \verb+|+ in our examples, but you can use other characters if you like. +This is similar to how the \verb|\verb| command works. You can use the syntax +shown in the section~\ref{sec:transform-templates} (page~\pageref{sec:transform-templates}). + +The following code defines rule that transforms the \verb|<h1>| element to a \verb|\section| command, +and \verb|<a>| element which has a \verb|href| attribute to \verb|\href|. URL of the link is used +thanks to the \verb|@{href}| rule. + +\begin{verbatim} +\LXMLRule{h1}|{\section{%s}| +\LXMLRule{a[href]}|\href{@{href}}{%s}| +\end{verbatim} + +\subsection{Content Transformation} + +\begin{verbatim} +\LXMLSnippet[<transformer name>]{<XML code>} +\LXMLSnippet*[<transformer name>]{<HTML code>} +\end{verbatim} + +\noindent The \verb|\LXMLSnippet| command processes a code snippet as XML or HTML. +Use the starred variant for HTML +input. The \texttt{<transformer name>} argument specifies the transformer object to apply +(default is used if empty). The code to be transformed is passed in the second +argument. + +\medskip + +\noindent{XML snippet transformation:} +\begin{verbatim} +\LXMLRule[xmlsnippet]{title}|title: %s| +\LXMLSnippet{<root><title>Hello</title></root>} +\end{verbatim} + +\begin{framed} +\LXMLRule[xmlsnippet]{title}|title: %s| +\LXMLSnippet[xmlsnippet]{<root><title>Hello</title></root>} +\end{framed} + +\noindent{HTML snippet transformation:} +\begin{verbatim} +\LXMLRule[htmlsnippet]{h1}|title: %s| +\LXMLSnippet*[htmlsnippet]{<div><h1>Header</h1></div>} +\end{verbatim} + +\begin{framed} +\LXMLRule[htmlsnippet]{h1}|title: %s| +\LXMLSnippet*[htmlsnippet]{<div><h1>Header</h1></div>} +\end{framed} + +\vtop\bgroup +\begin{verbatim} +\LXMLInputFile[<transformer>]{<XML file path>} +\LXMLInputFile*[<transformer>]{<HTML file path>} +\end{verbatim} + +\noindent Processes a file as XML or HTML. Use the starred variant for HTML input. The \texttt{<transformer>} specifies the transformer object to apply (default is used if empty). The file path is passed in the second argument. +\egroup + +\noindent\textbf{Environments} + +\medskip +\noindent \textbf{\texttt{\textbackslash begin\{LXMLCode\}\{<transformer>\}} ... \texttt{\textbackslash end\{LXMLCode\}}} + + +\noindent Processes XML code inside the environment. The \texttt{<transformer>} specifies the transformer object to apply (default is used if empty). + +\begin{verbatim} +\LXMLRule[xmlenv]{element}|hello: %s| +\begin{LXMLCode}{xmlenv} +<root> + <element>Some content</element> +</root> +\end{LXMLCode} +\end{verbatim} + +\begin{framed} +\LXMLRule[xmlenv]{element}|hello: %s| +\begin{LXMLCode}{xmlenv} +<root> + <element>Some content</element> +</root> +\end{LXMLCode} +\end{framed} + +\medskip +\noindent\textbf{\texttt{\textbackslash begin\{LXMLCode*\}\{<transformer>\}} ... \texttt{\textbackslash end\{LXMLCode*\}}} + +\noindent Processes HTML code inside the environment. The \texttt{<transformer>} specifies the transformer object to apply (default is used if empty). + +\begin{verbatim} +\LXMLRule[htmlenv]{p}|paragraph: %s| +\begin{LXMLCode*}{htmlenv} +<div> + <p>Some HTML content</p> +</div> +\end{LXMLCode*} +\end{verbatim} + +\begin{framed} +\LXMLRule[htmlenv]{p}|paragraph: %s| +\begin{LXMLCode*}{htmlenv} +<div> + <p>Some HTML content</p> +</div> +\end{LXMLCode*} +\end{framed} + + + +\clearpage \section{The API documentation} \input{doc/api.tex} diff --git a/macros/luatex/generic/lutabulartools/README.md b/macros/luatex/generic/lutabulartools/README.md index ee3381533b..6e9960c096 100644 --- a/macros/luatex/generic/lutabulartools/README.md +++ b/macros/luatex/generic/lutabulartools/README.md @@ -7,7 +7,7 @@ macro-enabled spreadsheet named "LaTeX-Tabular-Generator.xlsm" to help make tabl # License (MIT) -Copyright (C) 2021-2023 Kale Ewasiuk +Copyright (C) 2021-2025 Kale Ewasiuk Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/macros/luatex/generic/lutabulartools/lutabulartools.lua b/macros/luatex/generic/lutabulartools/lutabulartools.lua index 92ce236715..7b1a832bc4 100644 --- a/macros/luatex/generic/lutabulartools/lutabulartools.lua +++ b/macros/luatex/generic/lutabulartools/lutabulartools.lua @@ -1,6 +1,6 @@ --% Kale Ewasiuk (kalekje@gmail.com) ---% 2023-07-22 ---% Copyright (C) 2021-2023 Kale Ewasiuk +--% 2025-01-06 +--% Copyright (C) 2021-2025 Kale Ewasiuk --% --% Permission is hereby granted, free of charge, to any person obtaining a copy --% of this software and associated documentation files (the "Software"), to deal @@ -30,7 +30,7 @@ local lutabt = {} local pl = penlight local T = pl.tablex -lutabt.luakeys = require'luakeys'() -- note: YAMLvars.sty will have checked existence of this already +lutabt.luakeys = require'luakeys'() lutabt.tablelevel = 0 diff --git a/macros/luatex/generic/lutabulartools/lutabulartools.pdf b/macros/luatex/generic/lutabulartools/lutabulartools.pdf Binary files differindex eab8203760..290498ae70 100644 --- a/macros/luatex/generic/lutabulartools/lutabulartools.pdf +++ b/macros/luatex/generic/lutabulartools/lutabulartools.pdf diff --git a/macros/luatex/generic/lutabulartools/lutabulartools.sty b/macros/luatex/generic/lutabulartools/lutabulartools.sty index ee36589cd5..0b1041fbfd 100644 --- a/macros/luatex/generic/lutabulartools/lutabulartools.sty +++ b/macros/luatex/generic/lutabulartools/lutabulartools.sty @@ -1,6 +1,6 @@ % Kale Ewasiuk (kalekje@gmail.com) -% 2023-07-22 -% Copyright (C) 2021-2023 Kale Ewasiuk +% 2025-01-06 +% Copyright (C) 2021-2025 Kale Ewasiuk % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal @@ -23,7 +23,7 @@ % OR OTHER DEALINGS IN THE SOFTWARE. \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lutabulartools}[2023-07-22] +\ProvidesPackage{lutabulartools}[2025-01-06] \RequirePackage{booktabs} \RequirePackage{multirow} @@ -59,8 +59,15 @@ } \NewDocumentCommand{\resetmidruleX}{O{0}}{\luadirect{lutabt.mrX.reset_midruleX(\luastring{#1})}} +\NewCommandCopy{\ltt@RealPackageWarning}{\PackageWarning} +\newcommand*{\ltt@DeactivatePackageWarning}{\renewcommand*{\PackageWarning}[2]{}} +\newcommand*{\ltt@ActivatePackageWarning}{\RenewCommandCopy{\PackageWarning}{\ltt@RealPackageWarning}} -\NewDocumentCommand{\settabular}{s m}{\luadirect{lutabt.set_tabular(\luastring{#2})}} % + +\NewDocumentCommand{\settabular}{s m}{\ltt@DeactivatePackageWarning% + \luadirect{lutabt.set_tabular(\luastring{#2})}% + \ltt@ActivatePackageWarning% +}% \def\ltt@resetrownum{\luadirect{lutabt.reset_rows()}} \def\ltt@resetrownumhard{\luadirect{lutabt.row_num = 0}} diff --git a/macros/luatex/generic/lutabulartools/lutabulartools.tex b/macros/luatex/generic/lutabulartools/lutabulartools.tex index b9a4c96254..1676bd2b09 100644 --- a/macros/luatex/generic/lutabulartools/lutabulartools.tex +++ b/macros/luatex/generic/lutabulartools/lutabulartools.tex @@ -1,6 +1,6 @@ % Kale Ewasiuk (kalekje@gmail.com) -% 2023-07-22 -% Copyright (C) 2021-2023 Kale Ewasiuk +% 2025-01-06 +% Copyright (C) 2021-2025 Kale Ewasiuk % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal @@ -53,7 +53,7 @@ \addtokomafont{date}{\raggedright} \author{Kale Ewasiuk (\url{kalekje@gmail.com})} \usepackage[yyyymmdd]{datetime}\renewcommand{\dateseparator}{--} -\date{\today} +\date{\,\,\today} @@ -115,6 +115,9 @@ or adjusts the \cmd{tabcolsep} length (an integer must be used, the result is mu \settabular{nopad=false,tbrule=false} % to set the switches to off \end{verbatim} +\settabular{nopad} +\settabular{!nopad} + \section{Debugging} You can toggle log output debugging with \cmd{\lttdebugON} and \cmd{\lttdebugOFF}. diff --git a/macros/luatex/generic/minim-math/README b/macros/luatex/generic/minim-math/README index 24fe3397f1..8e3f841e41 100644 --- a/macros/luatex/generic/minim-math/README +++ b/macros/luatex/generic/minim-math/README @@ -1,4 +1,4 @@ -Version: 2024/1.4 +Version: 2025/1.5 SUMMARY @@ -18,6 +18,10 @@ In order to obtain the typeset manual of this package, simply say: HISTORY +2025/1.5 (12/2/2025) + + This version includes a new and experimental latex package. + 2024/1.4 (5/1/2024) * Add \floor and \ceil macros diff --git a/macros/luatex/generic/minim-math/minim-math.doc b/macros/luatex/generic/minim-math/minim-math.doc index 3648458b57..c46d288cb5 100644 --- a/macros/luatex/generic/minim-math/minim-math.doc +++ b/macros/luatex/generic/minim-math/minim-math.doc @@ -8,8 +8,8 @@ \else \startmetadata author {Esger Renkema} title {minim-math} - date {2024-01-05} - version {2024/1.4} + date {2025-02-12} + version {2025/1.5} keywords {LuaTeX; Plain TeX; Unicode mathematics} stopmetadata \maketitle \fi @@ -26,6 +26,26 @@ It will not, however, select mathematical fonts for you. That you will have to do for yourself; see below for instructions. +\section Experimental LaTeX support + +As of version 1.5, an experimental latex package is available as a faster +alternative to unicode-math. +The unicode-math user interface is not replicated though: it adds nothing to +the plain tex version but the ⟦\setfontfam⟧ macro for loading a math font. +Use it like this: + +{\leftskip2em +⟦\usepackage {minim-mp} +% additional fonts can be loaded with \setfontfam +\textfam = 1 % for the \text command; see below +\setfontfam \textfam {Latin Modern Roman} +% the next line is also the default +\setfontfam 0 {Latin Modern Math} ⟧ +\par} + +Bugs are likely many at this point; reports are welcome. + + \section Styles and alphabets For some (mostly alphabetical) characters, multiple variants are available, @@ -167,18 +187,17 @@ Do note that various spacing constants are set according to the \emph{last} math family that is assigned to. Therefore, you should assign your main math font to a family after all others. - -\section Shorthands and additions - You can use ⟦*\text⟧ for adding nonmathematical text to your equations. It will behave well in sub- and superscripts: ⟦\text{word}^\text{word}⟧ gives $\smash{\text{word}^\text{word}}$. By default, the font used is the normal mathematical font. You can change this by setting the ⟦*\textfam⟧ parameter to some nonzero value and assigning -a different font to that family (see above). -You probably want to do this, since most commonly-used mathematical fonts do not +a different font to that family. +You probably want this, since most commonly-used mathematical fonts do not include a normal kerning table. +\section Shorthands and additions + All the usual arrows can be made extensible by prefacing them with an ⟦x⟧, including ⟦\xmapsto⟧ and ⟦\xmapsfrom⟧. Alternatively, you can use ⟦\→⟧ etc. as shorthands. Additionally, you can use the following: @@ -214,9 +233,9 @@ brackets: ⟦$$\underbrace[=1]{(x^2+∥penalty0y^2)}$$⟧ gives $$\underbrace[=1]{(x^2 + y^2)}.$$ -Finally, the following (entirely optional) alternative to using dollar signs is -provided, which also offers slight improvements in the spacing of displayed -equations: +Finally, for plain tex only, the following (entirely optional) alternative to +using dollar signs is provided, which also offers slight improvements in the +spacing of displayed equations: \stopformulatagging\Ustartdisplaymath \halign{# \hfil&#\quad&#\hfil\cr &⟦\[ ... \]⟧&inline mathematics\cr @@ -227,7 +246,8 @@ equations: The automatic display numbering uses the count ⟦\equationnumber⟧ and the token list ⟦\setequationnumber⟧ internally. All displays created this way can be made -left-aligned by saying ⟦\leftdisplaystrue⟧. +left-aligned by saying ⟦\leftdisplaystrue⟧. In that case, the displays are +offset from the margin by ⟦\leftdisplayindent⟧ (a muskip, default value~⟦0mu⟧). \section Best practices diff --git a/macros/luatex/generic/minim-math/minim-math.lua b/macros/luatex/generic/minim-math/minim-math.lua index 2598094fdd..f9bafa5ced 100644 --- a/macros/luatex/generic/minim-math/minim-math.lua +++ b/macros/luatex/generic/minim-math/minim-math.lua @@ -169,13 +169,13 @@ end local alphabets = alloc.saved_table('math:alphabets') local function add_to_alphabet(num, code) - alphabets[code] = (alphabets[code] or '') .. string.utfcharacter(num) + alphabets[code] = (alphabets[code] or '') .. utf8.char(num) end local function chars_iterator(input) local a = alphabets[input] if a then - return string.utfvalues(a) + return a:utfvalues() else local from, to = string.match(input, '^([0-9]+)@([0-9]+)$') if from then @@ -185,7 +185,7 @@ local function chars_iterator(input) if i <= n then return gaps[i] or i end end else - return string.utfvalues(input) + return input:utfvalues() end end end @@ -249,14 +249,14 @@ M.greek_variants = } function M.usevariant (char) - for num in string.utfvalues (char) do + for _, num in utf8.codes(char) do local class, fam, _ = tex.getmathcodes(num) tex.setmathcode (num, class, fam, M.greek_variants[num] or num) end end function M.usedefault (char) - for num in string.utfvalues (char) do + for _, num in utf8.codes(char) do local class, fam, _ = tex.getmathcodes(num) tex.setmathcode (num, class, fam, num) end diff --git a/macros/luatex/generic/minim-math/minim-math.pdf b/macros/luatex/generic/minim-math/minim-math.pdf Binary files differindex 9544068d92..9e6509a0ae 100644 --- a/macros/luatex/generic/minim-math/minim-math.pdf +++ b/macros/luatex/generic/minim-math/minim-math.pdf diff --git a/macros/luatex/generic/minim-math/minim-math.sty b/macros/luatex/generic/minim-math/minim-math.sty new file mode 100644 index 0000000000..ec4141f004 --- /dev/null +++ b/macros/luatex/generic/minim-math/minim-math.sty @@ -0,0 +1,70 @@ + +\ProvidesPackage{minim-math}[2025/02/12 Unicode mathematics] + +\RequirePackage[no-math]{fontspec} + +% load the plain package +\let\minimmathlatex=\relax +\input minim-math + +% do not reset math fonts in everymath +\let\check@mathfonts = \relax +\let\mathgroup = \fam + +% unicode-math compatibility +\let \symup = \mup +\let \symbfup = \mbf +\let \symbf = \mbf +\let \symit = \mit +\let \symbfit = \mbfit +\let \symbb = \mbb +\let \symscr = \scr +\let \symcal = \scr +\let \symbfscr = \bfscr +\let \symfrak = \frak +\let \symbffrak = \bffrak +\def \symsfup #1{{\mathstyle{sf}}} +\def \symbfsfup #1{{\mathstyle{sfbf}}} +\def \symsfit #1{{\mathstyle{sfit}}} +\def \symbfsfit #1{{\mathstyle{sfbfit}}} +\def \symtt #1{{\mathstyle{tt}}} + +% more compatibility +\let \mathup = \symup +\let \mathbfup = \symbfup +\let \mathbf = \symbf +\let \mathit = \symit +\let \mathbfit = \symbfit +\let \mathbb = \symbb +\let \mathscr = \symscr +\let \mathcal = \symcal +\let \mathbfscr = \symbfscr +\let \mathfrak = \symfrak +\let \mathbffrak = \symbffrak +\let \mathsfup = \symsfup +\let \mathbfsfup = \symbfsfup +\let \mathsfit = \symsfit +\let \mathbfsfit = \symbfsfit +\let \mathtt = \symtt + +% \setmathfam 0 [features] {font name or file} +\newcount\set@mathfamcount +\protected\def\setmathfam{\afterassignment\set@mathfam\set@mathfamcount= } +\newcommand\set@mathfam[2][]{% + \calculate@math@sizes \csname S@\f@size\endcsname + \expandafter\font\csname math main font \the\set@mathfamcount\endcsname + {#2:mode=base;script=math;ssty=0;#1} at \tf@size pt + \expandafter\font\csname math script font \the\set@mathfamcount\endcsname + {#2:mode=base;script=math;ssty=1;#1} at \sf@size pt + \expandafter\font\csname math sscript font \the\set@mathfamcount\endcsname + {#2:mode=base;script=math;ssty=2;#1} at \ssf@size pt + \textfont\the\set@mathfamcount + \expandafter\csname math main font \the\set@mathfamcount\endcsname + \scriptfont\the\set@mathfamcount + \expandafter\csname math script font \the\set@mathfamcount\endcsname + \scriptscriptfont\the\set@mathfamcount + \expandafter\csname math sscript font \the\set@mathfamcount\endcsname} + +% load a default font +\setmathfam 0 {Latin Modern Math} + diff --git a/macros/luatex/generic/minim-math/minim-math.tex b/macros/luatex/generic/minim-math/minim-math.tex index 7029952418..f39a26aea2 100644 --- a/macros/luatex/generic/minim-math/minim-math.tex +++ b/macros/luatex/generic/minim-math/minim-math.tex @@ -1,6 +1,6 @@ \ifdefined \minimmathloaded - \message{(skipped)} + \wlog{(skipped)} \expandafter\endinput \fi \chardef\minimmathloaded=\catcode`: \catcode`:=11 @@ -543,22 +543,25 @@ % 1 Displayed equations +% \leftdisplaystrue +\newif\ifleftdisplays +\newif\ifdisplay: +\newif\ifdisplay:nr + +\ifdefined\minimmathlatex\else % for the latex package + % \display \protected\def\display{\display:true} % \displaynr {nr} \protected\def\displaynr{\display:true\display:nrtrue \nextifcat\bgroup\display:specialnr\relax} -% \leftdisplaystrue -\newif\ifleftdisplays % \setdisplaynr {...} \newtoks\setdisplaynr % \equationnumber \newcount\equationnumber \equationnumber = 0 \setdisplaynr{\global\advance\equationnumber1(\the\equationnumber)} -\newif\ifdisplay: -\newif\ifdisplay:nr \newtoks\display:specialnr \display:specialnr{\the\setdisplaynr} @@ -572,6 +575,9 @@ \ifdefined \tagging:tagformula \else \let\tagging:tagformula=\ignore \fi +\newmuskip\leftdisplayindent +\leftdisplayindent = 0mu + \protected\def\startdisplay{% % if the display starts a paragraph, omit baselineskip % and ensure that the long \beforedisplayskip is used @@ -581,7 +587,7 @@ % compatibility with minim-pdf \csname tagging:indisplaytrue\endcsname % for left-aligned equations, force manual placement - \ifleftdisplays\muskip0mu\fi} + \ifleftdisplays\mskip\leftdisplayindent\relax\fi} \protected\def\stopdisplay{% \ifleftdisplays \hskip\displaywidth minus\displaywidth\fi @@ -592,6 +598,7 @@ \Ustopdisplaymath \ignorespaces} +\fi % standard mappings diff --git a/macros/luatex/generic/minim-mp/README b/macros/luatex/generic/minim-mp/README index bf03e5114e..36dd3ffb15 100644 --- a/macros/luatex/generic/minim-mp/README +++ b/macros/luatex/generic/minim-mp/README @@ -1,4 +1,4 @@ -Version: 2024/1.6 +Version: 2025/1.7 SUMMARY @@ -40,22 +40,33 @@ Useful shell aliases are HISTORY +2025/1.7 (12/2/2025) + + This version contains a re-organised and improved manual. + 2024/1.6 (25/3/2024) New features: - * Add per-instance \everymp token lists + * Add per-instance \everymp token lists. + * Provide \mpdim to the latex package. + * Also accept (postscript) font names instead of ids as arguments to the + infont and glyph of operators. * Reduce the number of metapost error messages echoed to the terminal. - * The operators infont and glyph of now also accept font names. - * Provide \mpdim to latex class. + * Add the missing tex.skip macro (read-only). + * Provide more information in debugging mode; standardise its lay-out and + only write debugging info to the log, not to the terminal. Bug fixes: - * Newlines are now handled by metapost too. - * As are all special characters: #$%^&_~ - * Plain and luatex now use the same catcode regime. - * Add the missing tex.skip macro. - * Improve debugging messages. + * Re-work the scanning of metapost code: preserve not only %s but also + newlines; neutralise all other special characters. Only spaces and + csnames are pre-treated on the tex side. + * This means comments are now passed to metapost and handled there. + * Apply the same metapost code scanning method to both plain macros and + latex environments. + * Remove the grouping around metapost code execution in the latex + environments. 2024/1.5 (25/2/2024) @@ -67,7 +78,6 @@ HISTORY Bug fixes: * Make metafun not crash immediately. - * Comments (% characters) are now handled by metapost, not tex. 2024/1.4 (5/1/2024) diff --git a/macros/luatex/generic/minim-mp/minim-mp.doc b/macros/luatex/generic/minim-mp/minim-mp.doc index 9b4806807d..103490ec42 100644 --- a/macros/luatex/generic/minim-mp/minim-mp.doc +++ b/macros/luatex/generic/minim-mp/minim-mp.doc @@ -8,40 +8,19 @@ \else \startmetadata author {Esger Renkema} title {minim-mp} - date {2024-03-25} - version {2024/1.6} + date {2025-02-12} + version {2025/1.7} keywords {LuaTeX; Plain TeX; MetaPost; mplib} stopmetadata \maketitle \fi -This package offers low-level mplib integration for plain luatex. -The use of multiple simultaneous metapost instances is supported, as well as -running tex or lua code from within metapost. -In order to use it, simply say ⟦\input minim-mp.tex⟧. - +This package provides low-level mplib integration for plain lua(la)tex. In +order to use it, simply say ⟦\input minim-mp.tex⟧ (from plain tex) or +⟦\requirepackage {minim-mp}⟧ from latex. After this, ⟦*\directmetapost [ options ] { mp code }⟧ will result in a series of images corresponding to the ⟦beginfig() ... endfig;⟧ statements in your ⟦mp code⟧. Every image will be in a box of its own. -The metapost code to-be-run will be read under a special catcode regime in -which most ‘special’ characters (including {\tt\#} and {\tt\%}) are inert. -However, any control sequences will be expanded fully, as inside an ⟦\edef⟧. -Keep this in mind and define any macros you want to use in a ⟦btex ... etex;⟧ -environment as ⟦\protected⟧ (with the latex package, latex’s ‘protected’ macros -are safe-to-use, too). - -Every call to ⟦\directmetapost⟧ opens and closes a separate metapost instance. -If you want your second call to remember the first, you will have to define -a persistent metapost instance. This will also give you more control over image -extraction. See below under „Metapost instances”. The ⟦options⟧ will also be -explained there (for simple cases, you will not need them). - -The logs of the metapost run will be embedded in the regular log file. If an -error occurs, the log of the last snippet will also be shown on the terminal. - - -\section As a stand-alone Metapost compiler %1 - This package can also be used as a stand-alone metapost compiler. Saying \stopformulatagging$$\hbox{⟦luatex --fmt=minim-mp your_file.mp⟧}$$\startformulatagging will create a pdf file of all images in ⟦your_file.mp⟧, in order, with page @@ -55,153 +34,230 @@ With minim-lamp, for specifying the contents of the preamble, you can use Concluding the preamble with ⟦\begin{document}⟧ is optional, as both ⟦\begin⟧ and ⟦\end{document}⟧ will be inserted automatically if omitted. +\subsection TeX-MetaPost compatibility notes %1 + +All metapost code to-be-run will be read under a special catcode regime in +which most ‘special’ characters (including {\tt\#} and {\tt\%}) are inert. +Any control sequences will be expanded fully, however, as inside an ⟦\edef⟧. +Keep this in mind and define any macros you want to use in a ⟦btex ... etex;⟧ +environment as ⟦\protected⟧. With the latex package, latex’s ‘protected’ macros +are safe-to-use, too. + +Every call to ⟦\directmetapost⟧ opens and closes a separate metapost instance. +If you want your second call to remember the first, you will have to define +a persistent metapost instance. This will also give you more control over image +extraction. See below under „Metapost instances”. The ⟦options⟧ will also be +explained there (for simple cases, you will not need them). -\section LaTeX compatibility %1 +\subsection LaTeX compatibility notes %1 -An experimental latex package is included in ⟦minim-mp.sty⟧. It really is -a rather thin wrapper around the plain tex package, -but does provide a proper ⟦*metapost⟧ latex environment as an -alternative to ⟦\directmetapost⟧. +The latex package minim-mp.sty contains the full plain interface, but also +provides a proper ⟦*metapost⟧ environment as an alternative to +⟦\directmetapost⟧. The ⟦metapost⟧ environment has no persistent backing instance, but you can create a similar environment ⟦envname⟧ that does with ⟦*\newmetapostenvironment [options] {envname}⟧. -If your demands are even more complex, you should fall back to the plain tex -commands described in the next section. - -As in luamplib, you can use ⟦*\mpcolor {name}⟧ to insert the proper colour -values; this macro is only available inside the above environments. -A ⟦\mpdim⟧ macro is present too, but quite superfluous: since the contents of -the metapost environments are fully expanded before metapost sees them, you can -use ⟦\the⟧ and ⟦\the\dimexpr⟧ like everywhere else. Tex’s registers can also be -accessed by metapost itself (see below). - -When the package is loaded with the option ⟦luamplib⟧, minim-mp will try and -act as a drop-in replacement for luamplib. The effort made is not very great -though, but it will define an ⟦mplibcode⟧ environment, as well as the + +Inside the above environments, you can use ⟦*\mpcolor {name}⟧ to insert the +proper colour values. Unlike in luamplib, this will work in any context where +metapost expects a colour. +An ⟦\mpdim⟧ macro is present too, but quite superfluous since the contents of +the metapost environments are fully expanded before metapost sees them: this +means you can use ⟦\the⟧ and ⟦\the\dimexpr⟧ like everywhere else. Tex’s +registers can also be accessed from within metapost itself (see below). + +When the package is loaded with the option ⟦*luamplib⟧, minim-mp will try and +act as a drop-in replacement for luamplib. The effort made is not very great, +but it will define an ⟦mplibcode⟧ environment, as well as the ⟦\mplibcodeinherit⟧, ⟦\mplibshowlog⟧, ⟦\mplibsetformat⟧ and ⟦\mplibnumbersystem⟧ switches; also the macros ⟦\everymplib⟧ and ⟦\everyendmplib⟧. -Please do note that this is not the recommended way of using minim-mp, which -remains the interface documented above and further in the next section. +\subsection MetaFun compatibility notes %1 -\section Metapost instances %1 +The metafun format is supported to the extent that it should not immediately crash. +Otherwise, useing metafun is neither supported nor recommended. -For more complicated uses, you can define your own instances by saying -⟦*\newmetapostinstance [ options ] \id⟧. -An instance can be closed with ⟦*\closemetapostinstance \id⟧. -The ⟦options⟧ are directly passed to lua, as a table, and can contain the -following keys: +% -\smallskip\smallskip\automarktable -\halign{#\quad\hfil&#\quad\hfil&#\hfil\cr -Option&Default&Description\cr -⟦jobname⟧&⟦':metapost:'⟧&Used in error messages.\cr -⟦format⟧&⟦'plain.mp'⟧&Format to initialise the instance with.\cr -⟦mathmode⟧&⟦'scaled'⟧&One of ⟦scaled⟧, ⟦decimal⟧ or ⟦double⟧.\cr -⟦seed⟧&⟦nil⟧&Random seed for this instance.\cr -⟦catcodes⟧&(internal value)&Catcode table for ⟦btex ... etex⟧.\cr -⟦env⟧© of ⟦_G⟧&Lua environment; see below.\cr -}\smallskip +\section Metapost extensions %1 -Now that you have your own instance, you can run chunks of metapost code in it -with ⟦*\runmetapost \id { code }⟧. Any images that your code may have contained -will have to be extracted explicitly. This is possible in a number of ways, -although each image can be retrieved only once. +You can set the baseline of an image with ⟦*baseline(p)⟧. There, ⟦p⟧ must +either be a point through which the baseline should pass, or a number (where an +x~coordinate of zero will be added). Transformations will be taken into +account, hence the specification of two coordinates. The last given baseline +will be used. -⟦*\getnextmpimage \id⟧ -– Writes the first unretrieved image to the current node list. -There, the image will be contained in a single box node. +You can write to tex’s log directly with ⟦*texmessage "hello";⟧. You can feed +it a comma-separated list of strings and numbers, which will be passed through +⟦string.format()⟧ first. -⟦*\getnamedmpimage \id {name}⟧ -– Retrieves an image by name -and writes it to the current node list. +You can write direct pdf statements with ⟦*special "pdf: statements"⟧ and you +can add comments to the pdf file with ⟦*special "pdfcomment: comments"⟧. +Say ⟦*special "latelua: lua code"⟧ to insert a ⟦late_lua⟧ whatsit. +All three specials can also be given as pre- or postscripts to another object. +In that case, they will be added before or after the object they are attached to. +Do note that all ⟦special⟧ statements will appear at the beginning of the +image; use pre- and postscripts to drawing statements if the order matters. -⟦*\boxnextmpimage \id box-nr⟧ -– Puts the next unretrieved image in box ⟦box-nr⟧. The number may be anything -tex can parse as a number. +\subsection Partial paths and the even-odd rule %2 -⟦*\boxnamedmpimage \id box-nr {name}⟧ -– Puts the image named ⟦name⟧ in box ⟦box-nr⟧. +While metapost fills paths according to the winding number, the pdf format also +supports filling according to the even-odd rule. You can use this method with +the ⟦*eofill⟧ and ⟦*eofilldraw⟧ drawing statements. Multiple contours can be +filled at once if all but the last are drawn with ⟦*nofill⟧. The latter is +especially useful for cutting something out of a shape, as it saves you the +hassle of stitching the paths together. -Say ⟦*\remainingmpimages \id⟧ for the number of images not yet retrieved -and ⟦*\getallmpimages \id⟧ to insert all remaining images. +The macros ⟦*multi(draw|fill|filldraw|eofill|eofilldraw)⟧ take a list of paths +between parentheses and can be followed by the usual drawing options. +For example, +⟦multidraw (contours "example" of "tenbf") withpen currentpen scaled 1/10;⟧ +will give the word% +\markelement{Span}{\setactualtext{example }\startsinglecontentitem\space +\directmetapost [jobname='outline'] +{beginfig(1) multidraw (contours "example" of "tenbf") +withpen currentpen scaled 1/10; baseline 0; endfig;}\stopsinglecontentitem} +in a thin outline. -Finally, as a shorthand, ⟦*\runmetapostimage \id { code }⟧ will add -⟦beginfig ... endfig;⟧ to your ⟦code⟧ and write the resulting image immediately -to the current list. +The clipping shorthands ⟦*clipout⟧ and ⟦*clipto⟧ take a list of paths as +a ‘text’ parameter and either clip their ensemble out of the current picture, +or the current picture to the ensemble. +You will have to ensure yourself that the path has the right orientation for +clipping (i.e. you may have to insert the proper ⟦reverse⟧ operator yourself). -Associated to every instance are four token registers containing tex and/or -metapost code to be inserted before or after each executed chunk. -You can access them with ⟦*\everymp \id {pre|post} {tex|mp}⟧. -The token lists where ${\tt id}=0$ do not correspond to any instance and will -apply to every instance instead. -All four token lists are empty by default if you use minim-mp with plain tex. -The latex package, on the other hand, uses them for its own purposes, so take -care in that case to use ⟦\tokspre⟧ and ⟦\toksapp⟧ instead of overwriting their -contents. As a bonus, when using the latex package, you can use the environment -name instead of the numerical ⟦\id⟧. +\subsection Tiling patterns %2 +The specification ⟦*withpattern(<name>)⟧ added to a ⟦fill⟧ statement will fill +the path with a pattern instead of a solid colour. If the pattern itself does +not contain any colour statements, it will have the colour given by ⟦withcolor⟧. +Stroking operations (the ⟦draw⟧ part) will not be affected. +Patterns will always look the same, irrespective of any transformations you +apply to the picture. -\section Lua interface %1 +To define a pattern, sketch it between +⟦*beginpattern(<name>) ... endpattern(xstep, ystep);⟧ +where ⟦<name>⟧ is a suffix and ⟦(xstep, ystep)⟧ are the horizontal and vertical +distances between applications of the pattern. +Inside the definition, you can draw the pattern using whatever coordinates you +like; assign a value to the ⟦*matrix⟧ transformation to specify how the pattern +should be projected onto the page. This ⟦matrix⟧ will also be applied to +⟦xstep⟧ and ⟦ystep⟧. -In what follows, you should assume ⟦M⟧ to be the result of -\stopformulatagging$$\hbox{⟦M = require('minim-mp')⟧}$$\startformulatagging -as this package does not claim a table in the global environment for itself. +You can also change the internal variable ⟦*tilingtype⟧ and the normal variable +⟦*painttype⟧, although the latter will be set to~1 automatically if you use any +colour inside the pattern definition. Consult the pdf specification for more +information on these parameters. -You can open a new instance with ⟦*nr = M.open {options}⟧. -This returns an index in the ⟦*M.instances⟧ table. -Run code with ⟦*M.run (nr, code)⟧ and close the instance with ⟦*M.close (nr)⟧. -Images can be retrieved only with ⟦*box_node = M.get_image(nr, [name])⟧; omit -the ⟦name⟧ to select the first image. -Say ⟦*nr_remaining = M.left(nr)⟧ for the number of remaining images. +You can use text inside patterns, as in this example: +\hfill \vbox to 0pt{ +\startelement alt{A circle filled with red As in a rectangular pattern.}{Figure} +\startsinglecontentitem \directmetapost [jobname='pattern'] +{% define the pattern +picture letter; letter = maketext("a"); +beginpattern(a) + draw letter rotated 45; + matrix = identity rotated 45; +endpattern(12pt,12pt); +% use the pattern +beginfig(1) + fill fullcircle scaled 3cm withpattern(a) withcolor 3/4red; + draw fullcircle scaled 3cm withpen pencircle scaled 1; +endfig;}\stopsinglecontentitem +\stopelement{Figure}\vss}\hskip10pt\strut +\par\nobreak +⟦% define the pattern +picture letter; letter = maketext("a"); +beginpattern(a) + draw letter rotated 45; + matrix = identity rotated 45; +endpattern(12pt,12pt); +% use the pattern +beginfig(1) + fill fullcircle scaled 3cm withpattern(a) withcolor 3/4red; + draw fullcircle scaled 3cm withpen pencircle scaled 1; +endfig;⟧ -Each metapost instance is a table containing the following entries: +A small pattern library is available in the ⟦*minim-hatching.mp⟧ file; see the +accompanying documentation sheet for an overview of patterns. -\smallskip\smallskip -\marktableaslist -\tagattribute List ListNumbering /Description -\halign{\qquad#\quad\hfil&#\hfil\cr -⟦jobname⟧&The jobname.\cr -⟦instance⟧&The primitive metapost instance.\cr -⟦results⟧&A linked list of unretrieved images.\cr -⟦status⟧&The last exit status (will never decrease).\cr -⟦catcodes⟧&Number of the catcode table used with ⟦btex ... etex⟧.\cr -⟦env⟧&The lua environment for ⟦runscript⟧.\cr} -Default values for the format and number system are available in the -⟦*M.default_format⟧ and ⟦*M.default_mathmode⟧ variables. -The full initialisation sequence for new instances (i.e. the first metapost -chunk, that is executed automatically) is contained in the ⟦*M.init_code⟧ -table. +\subsection Box resources %2 + +Box resources (XForms) saved by tex can be included with ⟦*boxresource nr⟧. +(Note that ⟦nr⟧ is not a box number, but the index returned by +⟦\lastsavedboxresourceindex⟧.) +The result will be an image object with the proper dimensions. This image can +be transformed in any way you like, but you cannot inspect the contents of the +resource within metapost. +Box resources can also be created from within metapost: ⟦<id> =⟧ +⟦*saveboxresource (<attributes>) <picture>⟧ returns a number identifying the +resource. The ⟦<attributes>⟧ can be given in the same way as the arguments to +⟦setgstate⟧ (see below). XForms defined through metapost are available to other +metapost instances but not to tex; they are drawn with the same command +(⟦boxresource nr⟧). +There remains a subtle difference, however: metapost-defined box resources are +placed at their original origin, tex-defined resources at their lower left +corner. -\section Logs and debugging %1 -Metapost log output of every processed chunk of metapost code will be printed -to the main log file in a quoted form. -The logs will be duplicated to the terminal if an error occurs or if the -variable ⟦*M.on_line⟧ is ⟦true⟧ (the default is ⟦false⟧, but set to ⟦true⟧ in -the stand-alone format files). -Because a single error message might trigger many others, log output to the -terminal (but not the log file) will be cut after a certain number of errors: -this behaviour is governed by the ⟦*M.max_errprint⟧ variable (default ⟦1⟧; set -to ⟦0⟧ to disable). +\subsection Advanced PDF graphics %2 -You can enable (global) debugging by saying ⟦*debug_pdf⟧ to metapost, -⟦*\debugmetapost⟧ to tex or ⟦*M.enable_debugging()⟧ to lua. This will write -out a summary of metapost object information to the pdf file, just above the -pdf instructions that object was translated into. For this purpose, the pdf -will be generated uncompressed. Additionally, the metapost code itself will be -echoed to the log, as well as ⟦runscript⟧ and ⟦maketext⟧ invocations, and -a small summary of every generated image will be written to log and terminal. +You can use ⟦*savegstate⟧ and ⟦*restoregstate⟧ for inserting the ⟦q⟧ and ⟦Q⟧ +operators; these must always be paired, or horrible errors will occur. You may +need them if you use ⟦*setgstate(<params>)⟧ for modifying the extended +graphical state (ExtGState). The ⟦params⟧ must be a comma-separated +⟦Key=value⟧ list, with all ⟦value⟧s being suffixes. The latter restriction may +require the use of additional variables, but as this is a very low-level +command, it is best to wrap it in a more specialised macro anyway. +The ⟦*withgstate (<params>)⟧ can be added to a drawing statement and includes +saving/restoring the graphical state. -For debugging the results of ⟦maketext⟧ and the like, you can set the -⟦*debug_tex_bboxes⟧ variable to ⟦true⟧ and have their resulting bounding boxes -drawn on the pdf. +Note that while you could try and use ⟦setgstate⟧ for modifying variables like +the line cap or dash pattern, the result of doing so will be unpredictable, +since such changes will be invisible to metapost. Its intended use is +restricted to graphics parameters outside metapost’s scope. -\section Running tex from within metapost %1 +\subsection Transparency + +For applying transparency, ⟦*setalpha(a)⟧ updates the ⟦CA⟧ and ⟦ca⟧ parameters +as a stand-alone command and ⟦*withalpha(a)⟧ can be used in a drawing statement +where it will save/restore the graphical state around it. For applying +transparency to an ensemble of drawing statements, ⟦*transparent (a) <picture>⟧ +instead of ⟦draw <picture>⟧ will create and insert the proper transparency group. +The transparency group attributes can be set with the string internal +⟦*transparency_group_attrs⟧, while for all three macros the blend mode can be +set with the string internal ⟦*blend_mode⟧ (it will be added whenever set). + + +\subsection Additions to plain.mp %2 + +Minim-mp provides a few elementary macros and constants that are conspicuously +absent from plain.mp; I hope their addition is uncontroversial. All are +provided in the file minim.mp. This file is safe for use with other metapost +processors. + +The constants are ⟦*pi⟧ (355/113), ⟦*fullsquare⟧, ⟦*unitcircle⟧ and the +cmyk-colours ⟦*cyan⟧, ⟦*magenta⟧, ⟦*yellow⟧ and ⟦*key⟧. The macros are +⟦*clockwise⟧, ⟦*xshifted⟧, ⟦*yshifted⟧, ⟦*hflip⟧ and ⟦*vflip⟧, where the flips +are defined in such a way that ⟦p & hflip p⟧ gives the expected result. + +Version 1.2 brought the following additions: ⟦*save_pair⟧, ⟦*save_path⟧ etc. +etc. that save and declare in one go; the missing trigonometric functions +⟦*tand⟧, ⟦*arcsind⟧, ⟦*arccosd⟧ and ⟦*arctand⟧, and the unit circle segment +drawing function ⟦*arc(⟧$θ_0$⟦*,⟧$θ_ℓ$⟦*)⟧ (taking a starting angle and arc +length, both in degrees). + +Version 1.6 brought ⟦*empty⟧ for testing empty suffixes, ⟦*typeof(v)⟧ +expanding to the type (⟦numeric⟧, ⟦pair⟧ etc.) of variable ⟦v⟧, +⟦*getbounds⟧ as complement to ⟦setbounds⟧, the (twodimensional) exterior product +⟦*p extprod q⟧ and the test ⟦*collinear(p,q,r)⟧. + +% + +\section Running tex code %1 You can include tex snippets with either ⟦*maketext "tex text"⟧ or ⟦*btex ... etex⟧ statements. The tex code will be executed in the current @@ -214,10 +270,13 @@ Arbitrary tex statements may be included in ⟦*verbatimtex ... etex⟧, which m occur anywhere. These ⟦btex⟧ and ⟦verbatimtex⟧ statements are executed in the order they are given. -Previously-defined box resources can be included with ⟦*boxresource(nr)⟧. The -result will be an image object with the proper dimensions. This image can be -transformed in any way you like, but you cannot inspect the contents of the -resource within metapost. +When including tex code in metapost, do keep in mind that every metapost +snippet read by ⟦\directmetapost⟧ or ⟦\begin{metapost}⟧ will be expanded fully +(as inside an ⟦\edef⟧) before execution. This may expand your macros too early! +The best solution is to define your own macros as ⟦\protected⟧ or using latex’s +more convoluted protection equivalent, although a well-placed ⟦\noexpand⟧ or, +as a last resort, wrapping the entire tex fragment in ⟦\unexpanded{...}⟧ will +work as well. You can also use metapost’s ⟦*infont⟧ operator, which restricts the text to-be-typeset to a single font, but returns an ⟦picture⟧ containing a ⟦picture⟧ @@ -226,7 +285,7 @@ a (numerical) font~id or the (cs)name of a font (without backslash). A traditional font name (e.g. ‘cmtt10’) is also accepted; this will silently load the font. -One possible use of the ⟦infont⟧ operator is setting text along curves: +One possible use of the ⟦infont⟧ operator is setting text along curves: %2 \goodbreak ⟦beginfig(1) @@ -242,7 +301,7 @@ One possible use of the ⟦infont⟧ operator is setting text along curves: endfig;⟧ \vskip-2\parskip plus 2\parskip \quitvmode\hfil -\startelement alt {The text ‘Running TeX from within MetaPost’ set along a half-circle.} {Figure}% +\startelement alt {The text „Running TeX from within MetaPost” set along a half-circle.} {Figure}% \startsinglecontentitem\directmetapost [jobname='tex-in-mp'] {% beginfig(1) save t, w, r, a; picture t; @@ -260,52 +319,65 @@ By default, the ⟦maketext⟧ operator is used for typesetting labels. You can, however, order de ⟦label⟧ macro to use ⟦infont⟧ instead by setting ⟦*maketextlabels⟧ to ⟦false⟧. -For the greatest amount of control, you can use the ⟦*glyph g of f⟧ -operator, which returns the contours that make up a glyph. It is a bit more -versatile than its traditional metapost counterpart: ⟦g⟧ may also be the name -of the glyph instead of its index, while ⟦f⟧ can be a font~id or font name (as -with ⟦infont⟧). +\subsection Access to font contours %2 + +Both the ⟦maketext⟧ and ⟦infont⟧ operators return pictures that are opaque to +metapost. For accessing the contours that make up the characters in a string, +you will need the ⟦*glyph g of f⟧ operator. +It is a bit more versatile than its traditional metapost +counterpart: ⟦g⟧ may also be the name of the glyph instead of its index, while +⟦f⟧ can either be a font~id or font name (as with ⟦infont⟧). -A variant of ⟦glyph of⟧ is the ⟦*contours t of f⟧ macro: it first typesets the -string ⟦t⟧ in the same way as ⟦infont⟧ does (so that kerning and font shaping -are applied), but returns a (comma-separated) list of contours, such as may be -used in a ⟦for⟧ loop. Due to rounding errors, the glyphs will not match exactly. +A variant of ⟦glyph of⟧ is the ⟦*contours s of f⟧ macro, which first typesets +the string ⟦s⟧ in the same way as ⟦infont⟧ does (so that kerning and font +shaping are applied), but returns a (comma-separated) list of contours. This +list is fit for use in a for loop. Note that due to rounding errors, the glyph +contours will not match the output of ⟦infont⟧ exactly. -Be aware that the contours returned by these operators may be disjoint: -a letter ⟦o⟧, for example, will consists of two. This means you cannot recreate -the characters by just filling each contour: this would turn the ⟦o⟧ into -a filled-in circle. Instead, you must use ⟦multifill⟧ on the entire output of -⟦glyph of⟧ or ⟦contours of⟧ (see below under ‘partial paths’). +Be also aware that the contours returned by these operators may be disjoint: +a letter ⟦o⟧, for example, will consists of two paths. This means you cannot +recreate the characters by just filling each contour, as that would turn the +⟦o⟧ into a filled-in circle. Instead, you must use ⟦multifill⟧ on the entire +output of ⟦glyph of⟧ or ⟦contours of⟧ (see above under „Partial paths”). +% -\section Running lua from within metapost %1 +\section Running lua code %1 You can call out to lua with ⟦*runscript "lua code"⟧. For this purpose, each metapost instance carries around its own lua environment so that assignments -you make are local to the instance. (You can of course order the global -environment to be used by giving ⟦env = _G⟧ as option to -⟦\newmetapostinstance⟧.) -Any environment you specify will be supplemented with the contents of the -⟦*M.mp_functions⟧ table. Two useful functions pre-supplied are ⟦quote(s)⟧, -which escapes all double quotes in the string ⟦s⟧ before surrounding it with -the same (so that it may be read as a metapost string literal); and -⟦sp_to_pt(nr)⟧, which prints dimensions in points (preventing overflows). - -When using ⟦runscript⟧ in this way, you must ensure its argument is a correct -lua program. As an escape hatch, raw strings can be passed to lua with +you make are local to the instance. (The global environment can still be +accessed behind the ⟦_G⟧ variable.) + +Every runscript environment is augmented with a small set of useful functions; +this set can be found in the ⟦*M.mp_functions⟧ table (with +⟦M = require 'minim-mp'⟧; see below under „Lua interface”). + +When using ⟦runscript⟧, you must ensure its argument is a correct lua program. +As an escape hatch, raw strings can be passed to lua with ⟦runscript ("[[function_name]]" & raw_string)⟧. This will return the result of the function ⟦function_name⟧ applied to ⟦raw_string⟧ as a lua string. +\subsection Returning values from lua %2 + If your lua snippet returns nothing, the ⟦runscript⟧ call will be invisible to metapost. If on the other hand it does return a value, that value will have to -be translated to metapost. Numbers and strings will be returned as they are -(so make sure the string is surrounded by quotes if you want to return -a metapost string). You can return a point, colour or transform by returning an -array of two to six elements (excluding five). For other return values, -⟦tostring()⟧ will be called. - -\section Passing values to lua +be translated to something metapost can understand. +You can return a point, colour or transform by returning an array of two to six +elements (excluding five). +Numbers and strings will be returned as they are. +For other return values, ⟦tostring()⟧ will be called. + +Note that lua strings will be returned as metapost code, not as metapost string +literals! If you want to return the latter, you must quote the string yourself; +the runscript environment contains a ⟦*quote(s)⟧ function for this purpose, +which also escapes all double quotes in the string~⟦s⟧. +When returning dimensions, you must be wary of arithmetic overflows: every +useful dimension expressed in scaled points will be too large for metapost. Use +⟦*sp_to_pt(nr)⟧ instead, which converts dimensions to points. + +\subsection Passing values to lua %2 Do keep in mind that metapost and lua represent numbers in different ways and that rounding errors may occur. For instance, metapost’s ⟦decimal epsilon⟧ @@ -324,8 +396,7 @@ A generic macro for passing values to lua, finally, is ⟦*quote_for_lua⟧, whi automatically converts strings, numbers, points and colours to (metapost) strings that lua can understand. - -\section Querying tex and lua variables +\subsection Querying tex and lua variables %2 Stitching together lua snippets by hand is not very convenient. Therefore, minim-mp provides three helper macros that should cover most lua interaction. @@ -346,174 +417,112 @@ For accessing count, dimen, attribute or toks registers, the macros are ⟦*set tex.count⟧ ⟦[number] = value⟧ or ⟦*set tex.count⟧⟦.name = value⟧ etc. for setting values. +% -\section Partial paths and the even-odd rule %1 - -You can fill or draw two or more disjoint paths in one go by using ⟦*nofill⟧ as -drawing operator for all paths but the last. This may make it easier to cut -something out of a shape, since you do not have to worry about stitching the -paths together. - -While metapost fills paths according to the winding number, the pdf format also -supports filling according to the even-odd rule. You can use that method -with the ⟦*eofill⟧ and ⟦*eofilldraw⟧ drawing statements, which can of course -also be used as the final statement after a series of nofills. - -The macros ⟦*multi(draw|fill|filldraw|eofill|eofilldraw)⟧ take a list of paths -between parentheses and can be followed by the usual drawing options. -For example, -⟦multidraw (contours "example" of "tenbf") withpen currentpen scaled 1/10;⟧ -will give the word% -\markelement{Span}{\setactualtext{example }\startsinglecontentitem\space -\directmetapost [jobname='outline'] -{beginfig(1) multidraw (contours "example" of "tenbf") -withpen currentpen scaled 1/10; baseline 0; endfig;}\stopsinglecontentitem} -in a thin outline. - -Finally, two handy clipping macros have been added: -⟦*clipout⟧ and ⟦*clipto⟧, which both receive a list of paths as a ‘text’ -parameter and either clip their ensemble out of the picture, or the picture to -the ensemble. - - -\section Tiling patterns %1 +\section Metapost instances %1 -The specification ⟦*withpattern(<name>)⟧ added to a ⟦fill⟧ statement will fill -the path with a pattern instead of a solid colour. If the pattern itself does -not contain any colour statements, it will have the colour given by ⟦withcolor⟧. -Stroking operations (the ⟦draw⟧ part) will not be affected. -Patterns will always look the same, irrespective of any transformations you -apply to the picture. +You can define a new persistent metapost instance with +⟦*\newmetapostinstance [ options ] \id⟧. +An instance can be closed with ⟦*\closemetapostinstance \id⟧. +The ⟦options⟧ are directly passed to lua, as a table, and can contain the +following keys: -To define a pattern, sketch it between -⟦*beginpattern(<name>) ... endpattern(xstep, ystep);⟧ -where ⟦<name>⟧ is a suffix and ⟦(xstep, ystep)⟧ are the horizontal and vertical -distances between applications of the pattern. -Inside the definition, you can draw the pattern using whatever coordinates you -like; assign a value to the ⟦*matrix⟧ transformation to specify how the pattern -should be projected onto the page. This ⟦matrix⟧ will also be applied to -⟦xstep⟧ and ⟦ystep⟧. +\smallskip\smallskip\automarktable +\halign{#\quad\hfil&#\quad\hfil&#\hfil\cr +Option&Default&Description\cr +⟦jobname⟧&⟦':metapost:'⟧&Used in error messages.\cr +⟦format⟧&⟦'plain.mp'⟧&Format to initialise the instance with.\cr +⟦mathmode⟧&⟦'scaled'⟧&One of ⟦scaled⟧, ⟦decimal⟧ or ⟦double⟧.\cr +⟦seed⟧&⟦nil⟧&Random seed for this instance.\cr +⟦catcodes⟧&(internal value)&Catcode table for ⟦btex ... etex⟧.\cr +⟦env⟧© of ⟦_G⟧&Lua environment for ⟦runscript⟧.\cr +}\smallskip -You can also change the internal variable ⟦*tilingtype⟧ and the normal variable -⟦*painttype⟧, although the latter will be set to~1 automatically if you use any -colour inside the pattern definition. Consult the pdf specification for more -information on these parameters. +See below under „Lua interface” for greater control over these parameters. -You can use text inside patterns, as in this example: -\hfill \vbox to 0pt{ -\startelement alt{A circle filled with red As in a rectangular pattern.}{Figure} -\startsinglecontentitem \directmetapost [jobname='pattern'] -{% define the pattern -picture letter; letter = maketext("a"); -beginpattern(a) - draw letter rotated 45; - matrix = identity rotated 45; -endpattern(12pt,12pt); -% use the pattern -beginfig(1) - fill fullcircle scaled 3cm withpattern(a) withcolor 3/4red; - draw fullcircle scaled 3cm withpen pencircle scaled 1; -endfig;}\stopsinglecontentitem -\stopelement{Figure}\vss}\hskip10pt\strut -\par\nobreak -⟦% define the pattern -picture letter; letter = maketext("a"); -beginpattern(a) - draw letter rotated 45; - matrix = identity rotated 45; -endpattern(12pt,12pt); -% use the pattern -beginfig(1) - fill fullcircle scaled 3cm withpattern(a) withcolor 3/4red; - draw fullcircle scaled 3cm withpen pencircle scaled 1; -endfig;⟧ +\subsection Retrieving images from instances %2 -A small pattern library is available in the ⟦*minim-hatching.mp⟧ file; see the -accompanying documentation sheet for an overview of patterns. +Now that you have your own instance, you can run chunks of metapost code in it +with ⟦*\runmetapost \id { code }⟧. Any images that your code may have contained +will have to be extracted explicitly. This is possible in a number of ways, +although each image can be retrieved only once. -\section Advanced PDF graphics %1 +All metapost images have an ⟦\hbox⟧ as outermost container. Do not unpack this +box: doing so will cause its dimensions to be lost. -You can use ⟦*savegstate⟧ and ⟦*restoregstate⟧ for inserting the ⟦q⟧ and ⟦Q⟧ -operators; these must always be paired, or horrible errors will occur. You may -need them if you use ⟦*setgstate(<params>)⟧ for modifying the extended -graphical state (ExtGState). The ⟦params⟧ must be a comma-separated -⟦Key=value⟧ list, with all ⟦value⟧s being suffixes. The latter restriction may -require the use of additional variables, but as this is a very low-level -command, it is best to wrap it in a more specialised macro anyway. -The ⟦*withgstate (<params>)⟧ can be added to a drawing statement and includes -saving/restoring the graphical state. +⟦*\getnextmpimage \id⟧ +– Writes the first unretrieved image to the current node list. +There, the image will be contained in a single box node. -Note that while you could try and use ⟦setgstate⟧ for modifying variables like -the line cap or dash pattern, the result of doing so will be unpredictable, -since such changes will be invisible to metapost. Its intended use is -restricted to graphics parameters outside the scope of metapost. +⟦*\getnamedmpimage \id {name}⟧ +– Retrieves an image by name +and writes it to the current node list. -For applying transparency, ⟦*setalpha(a)⟧ updates the ⟦CA⟧ and ⟦ca⟧ parameters -as a stand-alone command and ⟦*withalpha(a)⟧ can be used in a drawing statement -where it will save/restore the graphical state around it. For applying -transparency to an ensemble of drawing statements, ⟦*transparent (a) <picture>⟧ -instead of ⟦draw <picture>⟧ will create and insert the proper transparency group. -The transparency group attributes can be set with the string internal -⟦*transparency_group_attrs⟧, while for all three macros the blend mode can be -set with the string internal ⟦*blend_mode⟧ (it will be added whenever set). +⟦*\boxnextmpimage \id box-nr⟧ +– Puts the next unretrieved image in box ⟦box-nr⟧. The number may be anything +tex can parse as a number. -A transparency group is a special kind of XForm, and these can be created from -within metapost: ⟦<id> =⟧ ⟦*saveboxresource (<attributes>) <picture>⟧ returns -a number identifying the resource; the ⟦<attributes>⟧ can be given in the same -way as the arguments to ⟦setgstate⟧. XForms defined through metapost are -available to other metapost instances but not to tex, though the macro painting -them, ⟦*boxresource <id>⟧, also accepts identifiers of tex-defined box -resources. There remains a subtle difference, however: metapost-defined box -resources are placed at their original origin. +⟦*\boxnamedmpimage \id box-nr {name}⟧ +– Puts the image named ⟦name⟧ in box ⟦box-nr⟧. +Say ⟦*\remainingmpimages \id⟧ for the number of images not yet retrieved +and ⟦*\getallmpimages \id⟧ to insert all remaining images. -\section Other metapost extensions %1 +Finally, as a shorthand, ⟦*\runmetapostimage \id { code }⟧ will add +⟦beginfig ... endfig;⟧ to your ⟦code⟧ and write the resulting image immediately +to the current list. -You can set the baseline of an image with ⟦*baseline(p)⟧. There, ⟦p⟧ must -either be a point through which the baseline should pass, or a number (where an -x~coordinate of zero will be added). Transformations will be taken into -account, hence the specification of two coordinates. The last given baseline -will be used. +\subsection Associated token lists %2 -You can write to tex’s log directly with ⟦*texmessage "hello";⟧. You can feed -it a comma-separated list of strings and numbers, which will be passed through -⟦string.format()⟧ first. +Associated to every instance are four token registers containing tex and/or +metapost code to be inserted before or after each executed chunk. +You can access them with ⟦*\everymp \id {pre|post} {tex|mp}⟧ +(e.g. ⟦\everymp1{pre}{mp}⟧). +The token lists where ${\tt id}=0$ do not correspond to any instance and will +apply to every instance instead. +All four token lists are empty by default if you use minim-mp with plain tex. +The latex package, on the other hand, uses them for its own purposes, so take +care in that case to use ⟦\tokspre⟧ and ⟦\toksapp⟧ instead of overwriting their +contents. As a bonus, when using the latex package, you can use the environment +name instead of the numerical ⟦\id⟧. -You can write direct pdf statements with ⟦*special "pdf: statements"⟧ and you -can add comments to the pdf file with ⟦*special "pdfcomment: comments"⟧. -Say ⟦*special "latelua: lua code"⟧ to insert a ⟦late_lua⟧ whatsit. -All three specials can also be given as pre- or postscripts to another object. -In that case, they will be added before or after the object they are attached to. -Do note that all ⟦special⟧ statements will appear at the beginning of the -image; use pre- and postscripts to drawing statements if the order matters. +\subsection Lua interface %2 +In what follows, you should assume ⟦M⟧ to be the result of +\stopformulatagging$$\hbox{⟦M = require('minim-mp')⟧}$$\startformulatagging +as this package does not claim a table in the global environment for itself. -\section Additions to plain.mp %1 +You can open a new instance with ⟦*nr = M.open {options}⟧. +This returns an index in the ⟦*M.instances⟧ table. +Run code with ⟦*M.run (nr, code)⟧ and close the instance with ⟦*M.close (nr)⟧. +Images can be retrieved only with ⟦*box_node = M.get_image(nr, [name])⟧; omit +the ⟦name⟧ to select the first image. +Say ⟦*nr_remaining = M.left(nr)⟧ for the number of remaining images. -Minim-mp provides a few elementary macros and constants that are -conspicuously absent from plain.mp; I hope their addition is uncontroversial. -All are provided in the file minim.mp; the contents of this file do not depend -on functions specific to minim-mp and thus it can safely be used with other -metapost processors. It is included automatically right after the format file -(i.e. plain.mp). +Each metapost instance is a table containing the following entries: -The constants are ⟦*pi⟧ (355/113), ⟦*fullsquare⟧, ⟦*unitcircle⟧ and the -cmyk-colours ⟦*cyan⟧, ⟦*magenta⟧, ⟦*yellow⟧ and ⟦*key⟧. The macros are -⟦*clockwise⟧, ⟦*xshifted⟧, ⟦*yshifted⟧, ⟦*hflip⟧ and ⟦*vflip⟧, where the flips -are defined in such a way that ⟦p & hflip p⟧ gives the expected result. +\smallskip\smallskip +\marktableaslist +\tagattribute List ListNumbering /Description +\halign{\qquad#\quad\hfil&#\hfil\cr +⟦jobname⟧&The jobname.\cr +⟦instance⟧&The primitive metapost instance.\cr +⟦results⟧&A linked list of unretrieved images.\cr +⟦status⟧&The last exit status (will never decrease).\cr +⟦catcodes⟧&Number of the catcode table used with ⟦btex ... etex⟧.\cr +⟦env⟧&The lua environment for ⟦runscript⟧.\cr} -Version 1.2 brought the following additions: ⟦*save_pair⟧, ⟦*save_path⟧ etc. -etc. that save and declare in one go; the missing trigonometric functions -⟦*tand⟧, ⟦*arcsind⟧, ⟦*arccosd⟧ and ⟦*arctand⟧, and the unit circle segment -drawing function ⟦*arc(⟧$θ_0$⟦*,⟧$θ_ℓ$⟦*)⟧ (taking a starting angle and arc -length, both in degrees). +Default values for the format and number system are available in the +⟦*M.default_format⟧ and ⟦*M.default_mathmode⟧ variables. +The full initialisation sequence for new instances (i.e. the first metapost +chunk, that is executed automatically) is contained in the ⟦*M.init_code⟧ +table. -Version 1.6 brought ⟦*empty⟧ for testing empty suffixes, ⟦*typeof(v)⟧ -expanding to the type (⟦numeric⟧, ⟦pair⟧ etc.) of variable ⟦v⟧, -⟦*getbounds⟧ as complement to ⟦setbounds⟧, the (twodimensional) exterior product -⟦*p extprod q⟧ and the test ⟦*collinear(p,q,r)⟧. +The table passed to ⟦env⟧ defaults to a copy of the global table ⟦_G⟧, and will +be augmented with the contents of ⟦*M.mp_functions⟧. You can add your own +functions to this table, if you wish. -\section Metapost specials %1 +\subsection Adding new metapost specials %2 You can extend this package by adding new metapost specials. Specials should have the form ⟦"identifier: instructions"⟧ and can be added as pre- or @@ -541,5 +550,32 @@ properly-dimensioned boxes. If a ⟦user.save_fn⟧ function is defined, it will replace the normal saving of the image to the image list and the image node list will be flushed. -\endmanual % +\subsection Logs and debugging %2 + +Metapost log output of every processed chunk of metapost code will be printed +to the main log file in a quoted form. +The logs will be duplicated to the terminal if an error occurs or if the +variable ⟦*M.on_line⟧ is ⟦true⟧ (the default is ⟦false⟧, but set to ⟦true⟧ in +the stand-alone format files). +Because a single error message might trigger many others, log output to the +terminal (but not the log file) will be cut after a certain number of errors: +this behaviour is governed by the ⟦*M.max_errprint⟧ variable (default ⟦1⟧; set +to ⟦0⟧ to disable). + +You can enable (global) debugging by saying ⟦*debug_pdf⟧ to metapost, +⟦*\debugmetapost⟧ to tex or ⟦*M.enable_debugging()⟧ to lua. This will write +out a summary of metapost object information to the pdf file, just above the +pdf instructions that object was translated into. For this purpose, the pdf +will be generated uncompressed. Additionally, the metapost code itself will be +echoed to the log, as well as ⟦runscript⟧ and ⟦maketext⟧ invocations, and +a small summary of every generated image will be written to log and terminal. + +For debugging the results of ⟦maketext⟧ and the like, you can set the +⟦*debug_tex_bboxes⟧ variable to ⟦true⟧ and have their resulting bounding boxes +drawn on the pdf. + + +% + +\endmanual diff --git a/macros/luatex/generic/minim-mp/minim-mp.lua b/macros/luatex/generic/minim-mp/minim-mp.lua index 885a6941e4..762b355015 100644 --- a/macros/luatex/generic/minim-mp/minim-mp.lua +++ b/macros/luatex/generic/minim-mp/minim-mp.lua @@ -1267,7 +1267,7 @@ E.texmessage = alloc.msg local function prepare_env(e) -- in M.open() local env = e or copy_table(_G, { }) - return copy_table(E, env) + return setmetatable(env, { __index = E }) end function E.quote(val) @@ -1330,6 +1330,7 @@ local function maketext(text, mode) make_transform(box.width, box.height, box.depth)) elseif mode == 1 then -- verbatimtex debug('┌ verbatimtex: %s', text) + text = '\\the\\everyverbatimtex\n'..text tex.runtoks(function() tex.print(current_instance.catcodes, text:explode('\n')) end) debug('└ etex') end diff --git a/macros/luatex/generic/minim-mp/minim-mp.pdf b/macros/luatex/generic/minim-mp/minim-mp.pdf Binary files differindex 4760106341..538ac5ba55 100644 --- a/macros/luatex/generic/minim-mp/minim-mp.pdf +++ b/macros/luatex/generic/minim-mp/minim-mp.pdf diff --git a/macros/luatex/generic/minim-mp/minim-mp.sty b/macros/luatex/generic/minim-mp/minim-mp.sty index 948c6034b7..adc194be3e 100644 --- a/macros/luatex/generic/minim-mp/minim-mp.sty +++ b/macros/luatex/generic/minim-mp/minim-mp.sty @@ -1,11 +1,12 @@ -\ProvidesPackage{minim-mp}[2023/03/03 Run MetaPost code from LaTeX] +\ProvidesPackage{minim-mp}[2025/02/12 Run MetaPost code from LaTeX] \input minim-mp % work around latex’s \protect mechanism \let\mnm@protect=\protect \everymaketext{\let\protect=\mnm@protect} +\everyverbatimtex{\let\protect=\mnm@protect} % the defaultfont is the current \normalfont \def\mnm@setnormalfont{{\normalfont diff --git a/macros/luatex/generic/minim-mp/minim-mp.tex b/macros/luatex/generic/minim-mp/minim-mp.tex index ddc925ab3a..6f478bdfdc 100644 --- a/macros/luatex/generic/minim-mp/minim-mp.tex +++ b/macros/luatex/generic/minim-mp/minim-mp.tex @@ -115,6 +115,7 @@ % miscellaneous bits and ends \newtoks \everymaketext +\newtoks \everyverbatimtex \def\mpdim#1{\the\dimexpr#1\relax} \catcode`\: = \minimmploaded diff --git a/macros/luatex/generic/minim-mp/minim.mp b/macros/luatex/generic/minim-mp/minim.mp index ed152a018b..00ac2fa32a 100644 --- a/macros/luatex/generic/minim-mp/minim.mp +++ b/macros/luatex/generic/minim-mp/minim.mp @@ -35,10 +35,10 @@ vardef clockwise primary c = if turningnumber c > 0: reverse fi c enddef; % clipping -vardef clipto text t = +vardef clipout text t = clip currentpicture to bbox currentpicture for c = t: -- c -- cycle endfor -- cycle enddef; -vardef clipout text t = +vardef clipto text t = clip currentpicture to for c = t: c -- cycle -- endfor cycle enddef; vardef getbounds primary p = % without bboxmargin diff --git a/macros/luatex/generic/minim-pdf/README b/macros/luatex/generic/minim-pdf/README index c449a9a2c4..a3ad66e79f 100644 --- a/macros/luatex/generic/minim-pdf/README +++ b/macros/luatex/generic/minim-pdf/README @@ -1,4 +1,4 @@ -Version: 2024/1.5 +Version: 2025/1.6 SUMMARY @@ -27,7 +27,11 @@ In order to obtain the typeset manual of this package, simply say: HISTORY -2024/1.5 (in development) +2025/1.6 (12/2/2025) + + No notable changes. + +2024/1.5 (25/2/2024) New features: diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.doc b/macros/luatex/generic/minim-pdf/minim-pdf.doc index 3dc0349aca..8e0f564632 100644 --- a/macros/luatex/generic/minim-pdf/minim-pdf.doc +++ b/macros/luatex/generic/minim-pdf/minim-pdf.doc @@ -3,7 +3,7 @@ \manual{minim-pdf} -\ifchapter \chapter Advanced PDF features +\ifchapter \chapter Hypertext This chapter and the next document the support of the modern pdf features provided by the minim-pdf package. @@ -14,8 +14,8 @@ all other features of the package are described here. \else \startmetadata author {Esger Renkema} title {minim-pdf} - date {2024-02-25} - version {2024/1.5} + date {2025-02-12} + version {2025/1.6} keywords {LuaTeX; Plain TeX; PDF/A; Tagged PDF; accessibility; a11y; hypertext; bookmarks; document outline; associated files} stopmetadata diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.lua b/macros/luatex/generic/minim-pdf/minim-pdf.lua index 101a548e4b..9d824a829f 100644 --- a/macros/luatex/generic/minim-pdf/minim-pdf.lua +++ b/macros/luatex/generic/minim-pdf/minim-pdf.lua @@ -2,7 +2,6 @@ local M = { } local alloc = require('minim-alloc') local cb = require('minim-callbacks') -alloc.remember('minim-hooks') alloc.remember('minim-pdf') -- 1 helper functions @@ -32,25 +31,10 @@ local pdf_name = alloc.pdf_name local pdf_string = alloc.pdf_string local options_scanner = alloc.options_scanner --- is this table empty? -local function is_empty(t) - for _, _ in pairs(t or {}) do - return false - end - return true -end - --- has this table just one element? local function singleton(t) - local one = false - for _, _ in pairs(t) do - if one then - return false - else - one = true - end - end - return one + local v = next(t) + v = v and not next(t, v) + return v and true or false end -- in-depth node list traversal; returns current and parent node @@ -92,6 +76,7 @@ local structure = { { index = 1, struct = 'Document', children = { }, + level = 0, -- for debugging only } } -- the parent tree will be filled automatically and separately @@ -158,7 +143,7 @@ local structure_types = alloc.saved_table('structure types', { -- block level structure elements (BLSE) P = { type = 'block' }, H = { type = 'block' }, - H1 = { type = 'block' }, -- for nonhierarchical tagging (do not use?) + H1 = { type = 'block' }, -- for nonhierarchical tagging (do not use) H2 = { type = 'block' }, -- __________ „ __________ H3 = { type = 'block' }, -- __________ „ __________ H4 = { type = 'block' }, -- __________ „ __________ @@ -328,7 +313,8 @@ local function make_rolemap() return '' end -local function make_attributes(res, t) +local function make_attributes(t) + local res = { } -- is there just one attribute? local list = not singleton(t) if list then table.insert(res, '[') end @@ -340,6 +326,7 @@ local function make_attributes(res, t) table.insert(res, '>>') end if list then table.insert(res, ']') end + return table.concat(res, ' ') end local attribute_classes = alloc.saved_table('attribute classes') @@ -347,7 +334,7 @@ local function make_classmap() local classes = { } for c, as in pairs(attribute_classes) do insert_formatted(classes, '\n%s', pdf_name(c)) - make_attributes(classes, as) + table.insert(classes, make_attributes(as)) end if #classes > 0 then return '\n/ClassMap << ' .. table.concat(classes, ' ') .. ' >>' @@ -355,11 +342,59 @@ local function make_classmap() return '' end +local id_tree = { } + +local function write_structure_element(se) + local res = { '<<' } + insert_formatted(res, '/Type/StructElem /S%s /P %d 0 R', pdf_name(se.struct), se.parent.objnum) + if se.id then insert_formatted(res, '/ID %s', pdf_string(se.id)) end + if se.lang and se.lang ~= se.parent.lang then insert_formatted(res, '/Lang %s', pdf_string(se.lang)) end + if se.alt then insert_formatted(res, '/Alt %s', pdf_string(se.alt)) end + if se.actual then insert_formatted(res, '/ActualText %s', pdf_string(se.actual)) end + if se.title then insert_formatted(res, '/T %s', pdf_string(se.title)) end + if #se.children > 0 then insert_formatted(res, '\n/K %s', format_K_array(se)) end + if se.mainpage then insert_formatted(res, '/Pg %d 0 R', se.mainpage) end + if se.class then + table.insert(res, '/C') + if #se.class > 1 then table.insert(res, '[') end + for _, c in ipairs(se.class) do + insert_formatted(res, '%s', pdf_name(c)) + end + if #se.class > 1 then table.insert(res, ']') end + end + if se.ref then + table.insert(res, '/Ref') + table.insert(res, '[') + for _, c in ipairs(se.ref) do + local onum = id_tree[c] + if onum then + insert_formatted(res, '%d 0 R', onum) + else + alloc.err('Invalid structure element ID: %s', c) + end + end + table.insert(res, ']') + end + if next(se.attributes or {}) then + table.insert(res, '/A') + table.insert(res, make_attributes(se.attributes)) + end + if se.files then + table.insert(res, '/AF [') + for _, fs in ipairs(se.files) do + insert_formatted(res, '%d 0 R', fs) + end + table.insert(res, ']') + end + table.insert(res, '>>') + pdf.immediateobj(se.objnum, table.concat(res, ' ')) +end + local function write_structure() if #structure == 1 then return end -- reserve object numbers, prepare for writing - local root_obj, parent_tree_obj = pdf.reserveobj(), pdf.reserveobj() - local id_tree, id_tree_obj = { }, pdf.reserveobj() + local root_obj, parent_tree_obj, id_tree_obj = + pdf.reserveobj(), pdf.reserveobj(), pdf.reserveobj() structure[1].parent = { objnum = root_obj } for _, se in ipairs(structure) do if not se.hidden then @@ -383,49 +418,7 @@ local function write_structure() -- write structure elements for _, se in ipairs(structure) do if not se.hidden then - local res = { '<<' } - insert_formatted(res, '/Type/StructElem /S%s /P %d 0 R', pdf_name(se.struct), se.parent.objnum) - if se.id then insert_formatted(res, '/ID %s', pdf_string(se.id)) end - if se.lang and se.lang ~= se.parent.lang then insert_formatted(res, '/Lang %s', pdf_string(se.lang)) end - if se.alt then insert_formatted(res, '/Alt %s', pdf_string(se.alt)) end - if se.actual then insert_formatted(res, '/ActualText %s', pdf_string(se.actual)) end - if se.title then insert_formatted(res, '/T %s', pdf_string(se.title)) end - if #se.children > 0 then insert_formatted(res, '\n/K %s', format_K_array(se)) end - if se.mainpage then insert_formatted(res, '/Pg %d 0 R', se.mainpage) end - if se.class then - table.insert(res, '/C') - if #se.class > 1 then table.insert(res, '[') end - for _, c in ipairs(se.class) do - insert_formatted(res, '%s', pdf_name(c)) - end - if #se.class > 1 then table.insert(res, ']') end - end - if se.ref then - table.insert(res, '/Ref') - table.insert(res, '[') - for _, c in ipairs(se.ref) do - local onum = id_tree[c] - if onum then - insert_formatted(res, '%d 0 R', onum) - else - alloc.err('Invalid structure element ID: %s', c) - end - end - table.insert(res, ']') - end - if not is_empty(se.attributes) then - table.insert(res, '/A') - make_attributes(res, se.attributes) - end - if se.files then - table.insert(res, '/AF [') - for _, fs in ipairs(se.files) do - insert_formatted(res, '%d 0 R', fs) - end - table.insert(res, ']') - end - table.insert(res, '>>') - pdf.immediateobj(se.objnum, table.concat(res, ' ')) + write_structure_element(se) end end -- write the parent tree (a number tree) @@ -519,7 +512,6 @@ end local function get_ancestor_of_type(se, stype) while se and se.struct ~= stype do - if se.level == -1000 then return end se = se.parent end return se and se.parent @@ -527,7 +519,8 @@ end function M.close_structure_node(stype, raiseerror) local strict = tex.count['strictstructuretagging'] > 0 - local current, open = current_structure_element() + local current = current_structure_element() + local open if strict then open = current.struct == stype and current.parent else @@ -574,6 +567,7 @@ function M.open_structure_node(n) n.order = n.order or tex.getattribute(current_order) n.parent = (n.parent and structure[n.parent]) or determine_parent_node(current_structure_element(), n) + n.level = n.parent.level + 1 table.insert(structure, n) -- determine the proper language code if n.lang then @@ -664,7 +658,7 @@ local mcid_list, pageobj local function clear_page_tagging_parameters() mcid_list, pageobj = { }, nil - _open_mci_node_ = function (se_num, order) + _open_mci_node_ = function (se_num, order) --luacheck: ignore 111 pageobj = pageobj or pdf.getpageref(status.total_pages + 1) local se = structure[se_num] pdf.print(string.format('%s <</MCID %d>> BDC ', pdf_name(se.struct), #mcid_list)) @@ -854,7 +848,7 @@ end) local function scan_escaped_argument(chars_to_escape) local stored = { } - for char in string.utfvalues(chars_to_escape) do + for _, char in utf8.codes(chars_to_escape) do stored[char] = tex.getcatcode(char) tex.setcatcode(char, 12) end @@ -1060,7 +1054,7 @@ function M.mark_discretionaries(head, gc) if #actual == 0 and pre and pre.char and pre.char == 0x2D then actual = '' -- soft hyphen U+00AD elseif #actual > 0 then - actual = string.utfcharacter(table.unpack(actual)) + actual = utf8.char(table.unpack(actual)) else goto continue end diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.pdf b/macros/luatex/generic/minim-pdf/minim-pdf.pdf Binary files differindex 2056601eec..9fc6616988 100644 --- a/macros/luatex/generic/minim-pdf/minim-pdf.pdf +++ b/macros/luatex/generic/minim-pdf/minim-pdf.pdf diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.tex b/macros/luatex/generic/minim-pdf/minim-pdf.tex index d5300fd58f..f0b2dff92a 100644 --- a/macros/luatex/generic/minim-pdf/minim-pdf.tex +++ b/macros/luatex/generic/minim-pdf/minim-pdf.tex @@ -1,12 +1,11 @@ \ifdefined\minimpdfloaded - \message{(skipped)} + \wlog{(skipped)} \expandafter\endinput\fi \chardef\minimpdfloaded = \catcode`\: \catcode`\: = 11 \input minim-alloc -\input minim-hooks % Abbreviations used throughout this document: % se structure element @@ -50,6 +49,13 @@ % 1 artifacts and content items +% The following functions have lua-side definitions; all insert a whatsit node +% that will be intercepted in the pre_shipout callback. +% +% \tagging:mci:content +% \tagging:mci:markstart \tagging:mci:markstop +% \tagging:art:markstart \tagging:art:markstop + % \stoptagging ... \starttagging % disables marking structure elements \newif\iftagging:enabled \tagging:enabledtrue @@ -84,6 +90,9 @@ % 1 structure elements +% All macros in this section wrap a lua-defined function; these functions will +% take care of scanning and parsing the actual arguments. + % \savecurrentelement ... \continueelement % \savecurrentelementto\name ... \continueelementfrom\name \protected\def\savecurrentelementto#1{\global\chardef#1\tagging:current:se} @@ -572,10 +581,12 @@ \expandafter\def\csname minim:pdfa:3u\endcsname{\minim:pdfasettings 7U3} % \pdfualavel 1 -\def\pdfualevel{\input minim-xmp - \setmetadata pdfuaid:part {1} - \tagging:enablepdfua +\def\pdfualevel{% + \afterassignment\pdfualevel:set \global\pdfuaconformancelevel= } +\def\pdfualevel:set{\input minim-xmp + \setmetadata pdfuaid:part{\the\pdfuaconformancelevel}% + \tagging:enablepdfua} % diff --git a/macros/luatex/generic/minim-xmp/README b/macros/luatex/generic/minim-xmp/README index 15878c6e17..e74d94eff4 100644 --- a/macros/luatex/generic/minim-xmp/README +++ b/macros/luatex/generic/minim-xmp/README @@ -1,4 +1,4 @@ -Version: 2024/1.3 +Version: 2025/1.4 SUMMARY @@ -21,6 +21,10 @@ In order to obtain the typeset manual of this package, simply say: HISTORY +2025/1.4 (12/2/2025) + + No notable changes. + 2024/1.3 (5/1/2024) New features: diff --git a/macros/luatex/generic/minim-xmp/minim-xmp.doc b/macros/luatex/generic/minim-xmp/minim-xmp.doc index 250edb18af..b069a6a8c8 100644 --- a/macros/luatex/generic/minim-xmp/minim-xmp.doc +++ b/macros/luatex/generic/minim-xmp/minim-xmp.doc @@ -8,8 +8,8 @@ \else \startmetadata author {Esger Renkema} title {minim-xmp} - date {2024-01-05} - version {2024/1.3} + date {2025-02-12} + version {2025/1.4} keywords {LuaTeX; Plain TeX; XMP; metadata; PDF/A;} stopmetadata \maketitle \fi diff --git a/macros/luatex/generic/minim-xmp/minim-xmp.lua b/macros/luatex/generic/minim-xmp/minim-xmp.lua index e3b7a8de70..229ded2deb 100644 --- a/macros/luatex/generic/minim-xmp/minim-xmp.lua +++ b/macros/luatex/generic/minim-xmp/minim-xmp.lua @@ -349,7 +349,7 @@ local function make_xmp_packet(xmp) local rv = { } ; local add = function(...) table.insert(rv, string.format(...)) end -- wrapper and opening tags add('<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>') - add('<x:xmpmeta xmlns:x="adobe:ns:meta/">') + add('<xmp:xmpmeta xmlns:xmp="adobe:ns:meta/">') add('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">') -- namespaces for id, keys in sorted_pairs(xmp) do @@ -400,7 +400,7 @@ local function make_xmp_packet(xmp) end -- closing tags and wrapper local editable = tex.count['metadatamodification'] > 0 - add('</rdf:RDF>\n</x:xmpmeta>') + add('</rdf:RDF>\n</xmp:xmpmeta>') if editable then add(string.rep(string.rep(' ', 80), 25, '\n')) end add('<?xpacket end="%s"?>', editable and 'w' or 'r') return table.concat(rv, '\n') @@ -437,7 +437,7 @@ local function get_metadata_info(fullkey) end local function get_separator() - return string.utfcharacter(tex.count['metadataseparator']) + return utf8.char(tex.count['metadataseparator']) end function M.get_metadata(k, a) @@ -458,7 +458,7 @@ function M.get_metadata(k, a) end local function split_metadata_input(s) - local rv = string.explode(s, get_separator()) + local rv = s:explode(get_separator()) for i = 1, #rv do rv[i] = string.gsub(rv[i], '^ *', '') rv[i] = string.gsub(rv[i], ' *$', '') diff --git a/macros/luatex/generic/minim-xmp/minim-xmp.pdf b/macros/luatex/generic/minim-xmp/minim-xmp.pdf Binary files differindex fdf38f3a2c..5fd58cc74c 100644 --- a/macros/luatex/generic/minim-xmp/minim-xmp.pdf +++ b/macros/luatex/generic/minim-xmp/minim-xmp.pdf diff --git a/macros/luatex/generic/minim-xmp/minim-xmp.tex b/macros/luatex/generic/minim-xmp/minim-xmp.tex index 2548ad857b..e26edf9249 100644 --- a/macros/luatex/generic/minim-xmp/minim-xmp.tex +++ b/macros/luatex/generic/minim-xmp/minim-xmp.tex @@ -1,6 +1,6 @@ \ifdefined\minimxmploaded - \message{(skipped)} + \wlog{(skipped)} \expandafter\endinput\fi \chardef\minimxmploaded=\catcode`\: \catcode`\:=11 diff --git a/macros/luatex/generic/minim/README b/macros/luatex/generic/minim/README index 751c428bad..f237e9d1a5 100644 --- a/macros/luatex/generic/minim/README +++ b/macros/luatex/generic/minim/README @@ -1,4 +1,4 @@ -Version: 2024/1.6 +Version: 2025/1.7 SUMMARY @@ -31,6 +31,13 @@ the packages mentioned above. HISTORY +2025/1.7 (12/2/2025) + + Major changes: + + * The minim-hooks.{tex,lua} files are gone; their contents have been + included (and documented) in minim-alloc. + 2024/1.6 (25/3/2024) No changes. diff --git a/macros/luatex/generic/minim/minim-alloc.doc b/macros/luatex/generic/minim/minim-alloc.doc index b1f6ed77bd..f535320269 100644 --- a/macros/luatex/generic/minim/minim-alloc.doc +++ b/macros/luatex/generic/minim/minim-alloc.doc @@ -162,15 +162,21 @@ Finally, for the ⟦*simple⟧ callbacks ⟦process_rule⟧. all registered functions are called in order with the same arguments. -Two callbacks are new: -the new ⟦*mlist_to_mlist⟧ callback is called before ⟦mlist_to_hlist⟧ and should -not convert noads to nodes, while the ⟦*uselanguage⟧ callback is called from -⟦\uselanguage⟧. +Three callbacks are new: +\startlist +\item 1. ⟦*mlist_to_mlist⟧ is called before ⟦mlist_to_hlist⟧ and should not +convert noads to nodes; +\item 2. ⟦*uselanguage⟧ is called from ⟦\uselanguage⟧ and receives the +language name (not the numerical id) as argument; +\item 3. ⟦*pre_shipout⟧ is called just before a box is shipped out, +opposite to ⟦finish_pdfpage⟧, and receives the to-be-shipped-out box number as +argument. If you create a new callback with a number for a name, that callback will replace the ⟦*process_rule⟧ callback when its number matches the index property of the rule. + \section PDF resources This package can perform sophisticated pdf resource management, assigning to @@ -269,6 +275,7 @@ Finally the function ⟦*M.table_to_text(table)⟧ may be useful when debugging code: it dumps a table as a (lua-readable) string. Cyclic references will spin in into an eternal loop, however. + \section Miscellaneous helper macros On the tex side, ⟦*\voidbox⟧, ⟦*\ignore⟧, ⟦*\spacechar⟧, ⟦*\unbrace⟧, diff --git a/macros/luatex/generic/minim/minim-alloc.lua b/macros/luatex/generic/minim/minim-alloc.lua index 3b14f5cc80..8e84553c2f 100644 --- a/macros/luatex/generic/minim/minim-alloc.lua +++ b/macros/luatex/generic/minim/minim-alloc.lua @@ -195,10 +195,6 @@ function M.table_to_text (tbl) return '{ ' .. table.concat (r,', ') .. ' }' end -local cb = require('minim-callbacks') -M.remember('minim-callbacks') -M.remember('minim-alloc') - -- 1 allocation functions -- like \unset @@ -271,6 +267,21 @@ make_alloc_old ('box', globoffset + 4 ) make_alloc_old ('toks', globoffset + 5 ) make_alloc_old ('marks', globoffset + 6 ) +-- 1 other extensions + +local cb = require('minim-callbacks') +M.remember('minim-callbacks') +M.remember('minim-alloc') + +-- Add a callback just before a box is shipped out, opposite to 'finish_pdfpage'. +cb.new_callback('pre_shipout', 'simple') +M.primitive_shipout = tex.shipout +function tex.shipout(nr) + cb.call_callback('pre_shipout', nr) + M.primitive_shipout(nr) +end + +-- define tex commands from lua function M.luadef (csname, fn, ...) local nr = M.new_function(csname) lua.get_functions_table()[nr] = fn diff --git a/macros/luatex/generic/minim/minim-alloc.tex b/macros/luatex/generic/minim/minim-alloc.tex index f83e043ad4..40e01f66a0 100644 --- a/macros/luatex/generic/minim/minim-alloc.tex +++ b/macros/luatex/generic/minim/minim-alloc.tex @@ -115,10 +115,10 @@ \ifdefined \documentclass % latex has no \globcount etc. \alloc:globoffset = 10 - \ifnum\count10<256 \count10=256 \fi - \ifnum\count11<256 \count11=256 \fi - \ifnum\count12<256 \count12=256 \fi - \ifnum\count14<256 \count14=256 \fi + \ifnum\count10<256 \count10=300 \fi + \ifnum\count11<256 \count11=300 \fi + \ifnum\count12<256 \count12=300 \fi + \ifnum\count14<256 \count14=300 \fi \else \ifdefined \globcount % use global allocation (see etex.src) \let\newcount = \globcount @@ -189,6 +189,39 @@ \ifdefined\minim:uselanguagehook \noexpand\minim:uselanguagehook{#1}\fi} +%1 hooks + +% the pre_shipout callback +\newbox\minim:shipout:box \let\minim:shipout:orig = \shipout +\def\minim:shipout:do{\minim:shipout:orig\box\minim:shipout:box} +\protected\def\minim:shipout:new{\directlua{ + tex.box[\the\minim:shipout:box] = token.scan_list() + require('minim-callbacks').call_callback('pre_shipout', \the\minim:shipout:box) + token.put_next(token.create('minim:shipout:do'))}} +\let\shipout = \minim:shipout:new + +% invisibly adding to \everypar +\let\minim:everypar = \everypar +\newtoks\minim:ateverypar +\newtoks\minim:atnextpar +\newtoks\everypar \everypar\minim:everypar +\minim:everypar\expandafter{\expandafter + \minim:changeparindent + % expansion makes this process repeatable + \expandafter\the\everypar + \the\minim:ateverypar + \minim:atnextpar\expandafter + {\expandafter}\the\minim:atnextpar} +\let\minim:changeparindent = \relax % as of yet unused + +% There is presently no need for the following. + +%\let\minim:par = \par +%\newtoks\minim:aftereverypar +%\protected\def\par{\ifhmode \unskip +% \the\minim:aftereverypar \fi \minim:par} + + % 1 format file compatibility % all other work is done at the lua end diff --git a/macros/luatex/generic/minim/minim-callbacks.lua b/macros/luatex/generic/minim/minim-callbacks.lua index b0ecc1a711..63100bd5b2 100644 --- a/macros/luatex/generic/minim/minim-callbacks.lua +++ b/macros/luatex/generic/minim/minim-callbacks.lua @@ -254,11 +254,12 @@ register_list ('process_jobname', call_list_data) -- node list processing callbacks register_list ('pre_linebreak_filter', call_list_node) register_list ('post_linebreak_filter', call_list_node) ---register_list ('append_to_vlist_filter', call_list_node) -- TODO this breaks something register_list ('hpack_filter', call_list_node) register_list ('vpack_filter', call_list_node) register_list ('pre_output_filter', call_list_node) +-- TODO 'append_to_vlist_filter' needs second return value + -- mlist_to_mlist and mlist_to_mlist M.new_callback ('mlist_to_mlist', 'node') M.new_callback ('mlist_to_hlist', 'stack') diff --git a/macros/luatex/generic/minim/minim-doc.sty b/macros/luatex/generic/minim/minim-doc.sty index 32c8a1e991..86d218ea6f 100644 --- a/macros/luatex/generic/minim/minim-doc.sty +++ b/macros/luatex/generic/minim/minim-doc.sty @@ -22,6 +22,8 @@ \uselanguage{ukenglish} \hyphenation { mark-tab-le-cell + mark-tab-le-hea-der + no-de-ci-mal-com-ma } \parindent 0pt @@ -135,7 +137,7 @@ endfig;} \hbox to 2em{\hss\startelement{Lbl}#1.~~}% \startelement{LBody}\ignorespaces} -\sectionstructure{section, chapter} +\sectionstructure{subsection, section, chapter} % \chapter Title \par \protected\def\chapter#1 \par{% @@ -150,12 +152,21 @@ endfig;} \protected\def\section#1 \par{% \bigskip\penalty-50\relax \marksection[Section \the\chapternr.\the\sectionnr]% - \outline closed {#1}% + \outline open {#1}% \addtotoc{\section{#1}{\lastdestinationname}}% \nextpartag{H}\quitvmode \red{\title#1}% \par\nobreak} +% \subsection Title \par +\protected\def\subsection#1 \par{% + \smallskip\penalty-50\relax + \marksubsection[Section \the\chapternr.\the\sectionnr.\the\subsectionnr]% + \outline closed {#1}% + \nextpartag{H}\quitvmode + \red{\tenbf#1}% + \par\nobreak} + % table of contents \newtoks\toc \newif\iftoc \toctrue \def\addtotoc#1{% @@ -193,8 +204,9 @@ endfig;} \mailname\tmp elrenkema\TMP nl}\cr} \smallskip} -% 1 Chapters and full manuals +% 1 chapters and full manuals +% the EUPL \def\licencesection{\section Licence \embedfile global file {EUPL-1.2-EN.txt} @@ -219,6 +231,21 @@ obtained at \def\endmanual{\ifchapter\expandafter\endinput\else \licencesection\expandafter\bye\fi} +% typesetting a table of comtents +\def\makecontents{% + \tocfalse \section Contents \par + \smallskip \begingroup \parskip1pt + \protected\def\chapter##1##2##3{% + \stopelement{TOC}\smallskip + \nextpartag{}\red{\tenbf\marktocentry{##2}{}{\strut##1}{\hfill~}{##3}}% + \smallskip\startelement{TOC}} + \protected\def\section##1##2##3{% + \marktocentry{##2}{}{\strut\quad##1}{\dotfill~}{##3}\par} + \startelement{TOC} \startelement{TOC} + \the\toc + \stopelement{TOC} \stopelement{TOC} + \endgroup} + % introduction \endinput diff --git a/macros/luatex/generic/minim/minim-hooks.lua b/macros/luatex/generic/minim/minim-hooks.lua deleted file mode 100644 index f11ce27875..0000000000 --- a/macros/luatex/generic/minim/minim-hooks.lua +++ /dev/null @@ -1,18 +0,0 @@ - -local cb = require ('minim-callbacks') - -local M = { } - --- Add a callback just before a box is shipped out, opposite to --- 'finish_pdfpage'. - -cb.new_callback('pre_shipout', 'simple') - -M.primitive_shipout = tex.shipout -function tex.shipout(nr) - cb.call_callback('pre_shipout', nr) - M.primitive_shipout(nr) -end - -return M - diff --git a/macros/luatex/generic/minim/minim-hooks.tex b/macros/luatex/generic/minim/minim-hooks.tex deleted file mode 100644 index da19182a48..0000000000 --- a/macros/luatex/generic/minim/minim-hooks.tex +++ /dev/null @@ -1,60 +0,0 @@ - -% The purpose of this module is allowing arbitrary code be run at specific -% places. I have not yet included it in the manual, because I still am a bit -% unsure about the details of the implementation. -% -% The first thing done here is inserting a callback into \shipout (and -% tex.shipout) mirroring finish_pdf, allowing last-minute manipulation before -% the pdf code will be assembled. -% -% The second feature is adding things to the beginning of a paragraph without -% (seemingly) disturbing \everypar, and also adding things to the next -% paragraph only. -% -% Both features are implemented in a way that is repeatable and should coexist -% peacefully with other packages doing something of the same. But please let me -% know if you run into any problems. - -\ifdefined\minimhooksloaded - \wlog{(skipped)} - \expandafter\endinput\fi -\chardef\minimhooksloaded = \catcode`\: -\catcode`\: = 11 - -\directlua{ require('minim-hooks') } - -% 1 the pre_shipout callback - -\newbox\minim:shipout:box \let\minim:shipout:orig = \shipout -\def\minim:shipout:do{\minim:shipout:orig\box\minim:shipout:box} -\protected\def\minim:shipout:new{\directlua{ - tex.box[\the\minim:shipout:box] = token.scan_list() - require('minim-callbacks').call_callback('pre_shipout', \the\minim:shipout:box) - token.put_next(token.create('minim:shipout:do'))}} -\let\shipout = \minim:shipout:new - -% 1 invisibly adding to \everypar - -\let\minim:everypar = \everypar -\newtoks\minim:ateverypar -\newtoks\minim:atnextpar -\newtoks\everypar \everypar\minim:everypar -\minim:everypar\expandafter{\expandafter - \minim:changeparindent - % expansion makes this process repeatable - \expandafter\the\everypar - \the\minim:ateverypar - \minim:atnextpar\expandafter - {\expandafter}\the\minim:atnextpar} -\let\minim:changeparindent = \relax % as of yet unused - -% There is presently no need for the following. - -%\let\minim:par = \par -%\newtoks\minim:aftereverypar -%\protected\def\par{\ifhmode \unskip -% \the\minim:aftereverypar \fi \minim:par} - -\catcode`\: = \minimhooksloaded - - diff --git a/macros/luatex/generic/minim/minim.doc b/macros/luatex/generic/minim/minim.doc index f1538c5724..faec9d6b6c 100644 --- a/macros/luatex/generic/minim/minim.doc +++ b/macros/luatex/generic/minim/minim.doc @@ -4,8 +4,8 @@ \startmetadata author {Esger Renkema} title {minim} - date {2024-03-25} - version {2024/1.6} + date {2025-02-12} + version {2025/1.7} keywords {LuaTeX; Plain TeX; MetaPost; PDF/A; Tagged PDF; accessibility; a11y; Unicode mathematics; XMP; metadata; hypertext; bookmarks} stopmetadata @@ -39,18 +39,7 @@ For building your own format files, you can re-use the file \red{minim.ini}: if you define ⟦\fmtname⟧ before inputting this file, no ⟦\dump⟧ will be performed. -\tocfalse \section Contents \par -\smallskip \begingroup \parskip1pt -\protected\def\chapter#1#2#3{% - \stopelement{TOC}\smallskip - \nextpartag{}\red{\tenbf\marktocentry{#2}{}{\strut#1}{\hfill~}{#3}}% - \smallskip\startelement{TOC}} -\protected\def\section#1#2#3{% - \marktocentry{#2}{}{\strut\quad#1}{\dotfill~}{#3}\par} -\startelement{TOC} \startelement{TOC} -\the\toc -\stopelement{TOC} \stopelement{TOC} -\endgroup +\makecontents \section Compatibility diff --git a/macros/luatex/generic/minim/minim.pdf b/macros/luatex/generic/minim/minim.pdf Binary files differindex e7a0519965..bd46c62c35 100644 --- a/macros/luatex/generic/minim/minim.pdf +++ b/macros/luatex/generic/minim/minim.pdf diff --git a/macros/luatex/generic/nodetree/README.md b/macros/luatex/generic/nodetree/README.md index f9fdb53fff..71297fb7f1 100644 --- a/macros/luatex/generic/nodetree/README.md +++ b/macros/luatex/generic/nodetree/README.md @@ -18,7 +18,7 @@ terminal to generate the document. # License -Copyright (C) 2016-2023 by Josef Friedrich <josef@friedrich.rocks> +Copyright (C) 2016-2024 by Josef Friedrich <josef@friedrich.rocks> ------------------------------------------------------------------------ This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 of this license @@ -150,8 +150,8 @@ if not modules then modules = { } end modules ['nodetree'] = { ### Update the copyright year: ``` -sed -i 's/(C) 2016-2023/(C) 2016-2021/g' nodetree.ins -sed -i 's/(C) 2016-2023/(C) 2016-2021/g' nodetree.dtx +sed -i 's/(C) 2016-2024/(C) 2016-2021/g' nodetree.ins +sed -i 's/(C) 2016-2024/(C) 2016-2021/g' nodetree.dtx ``` ### Command line tasks: diff --git a/macros/luatex/generic/nodetree/nodetree-doc.tex b/macros/luatex/generic/nodetree/nodetree-doc.tex index d9531ad9f2..c992d70246 100644 --- a/macros/luatex/generic/nodetree/nodetree-doc.tex +++ b/macros/luatex/generic/nodetree/nodetree-doc.tex @@ -107,7 +107,7 @@ \href{https://github.com/Josef-Friedrich/nodetree}{github.com/Josef-Friedrich/nodetree}\\% with contributions by Werner Lemberg } -\date{v2.3.0 from 2023/09/10} +\date{v2.4.0 from 2024/09/17} \maketitle diff --git a/macros/luatex/generic/nodetree/nodetree.dtx b/macros/luatex/generic/nodetree/nodetree.dtx index 0b3668a8ce..6c274899d3 100644 --- a/macros/luatex/generic/nodetree/nodetree.dtx +++ b/macros/luatex/generic/nodetree/nodetree.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 2016-2023 by Josef Friedrich <josef@friedrich.rocks> +% Copyright (C) 2016-2024 by Josef Friedrich <josef@friedrich.rocks> % ---------------------------------------------------------------------- % This work may be distributed and/or modified under the conditions of % the LaTeX Project Public License, either version 1.3 of this license @@ -28,7 +28,7 @@ %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] %<package>\ProvidesPackage{nodetree} %<*package> - [2023/09/10 v2.3.0 Visualize node lists in a tree view] + [2024/09/17 v2.4.0 Visualize node lists in a tree view] %</package> % \fi % @@ -218,7 +218,7 @@ % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[1994/06/01] \ProvidesPackage{nodetree-embed} - [2023/09/10 v2.3.0 Embed node trees into a LaTeX document] + [2024/09/17 v2.4.0 Embed node trees into a LaTeX document] % \end{macrocode} % % \begin{macrocode} diff --git a/macros/luatex/generic/nodetree/nodetree.ins b/macros/luatex/generic/nodetree/nodetree.ins index e1ded5bb1b..fce0ba7c8d 100644 --- a/macros/luatex/generic/nodetree/nodetree.ins +++ b/macros/luatex/generic/nodetree/nodetree.ins @@ -1,4 +1,4 @@ -% Copyright (C) 2016-2023 by Josef Friedrich <josef@friedrich.rocks> +% Copyright (C) 2016-2024 by Josef Friedrich <josef@friedrich.rocks> % ---------------------------------------------------------------------- % This work may be distributed and/or modified under the conditions of % the LaTeX Project Public License, either version 1.3c of this license @@ -21,7 +21,7 @@ This is a generated file. -Copyright (C) 2016-2023 by Josef Friedrich <josef@friedrich.rocks> +Copyright (C) 2016-2024 by Josef Friedrich <josef@friedrich.rocks> ---------------------------------------------------------------------- This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3c of this license diff --git a/macros/luatex/generic/nodetree/nodetree.lua b/macros/luatex/generic/nodetree/nodetree.lua index 18a1f204c3..82a3e294d3 100644 --- a/macros/luatex/generic/nodetree/nodetree.lua +++ b/macros/luatex/generic/nodetree/nodetree.lua @@ -30,7 +30,7 @@ --- be either `continue` or `stop`. if not modules then modules = {} end modules ['nodetree'] = { - version = '2.3.0', + version = '2.4.0', comment = 'nodetree', author = 'Josef Friedrich', copyright = 'Josef Friedrich', @@ -649,30 +649,37 @@ end --- Convert a Lua table into a format string. --- ----@param table table # A table to generate an inline view of. +---@param tbl table # A table to generate an inline view of. --- ---@return string -function template.table_inline(table) +function template.table_inline(tbl) local tex_escape = '' if options.channel == 'tex' then tex_escape = '\\' end - if type(table) == 'table' then - table = get_all_table_data(table) + if type(tbl) == 'table' then + tbl = get_all_table_data(tbl) local output = tex_escape .. '{' local kv_list = '' - for key, value in pairs(table) do - if type(key) ~= 'numbers' then - key = '\'' .. - template.colored_string(key, 'cyan', 'dim') .. '\'' - end - kv_list = kv_list .. '[' .. key .. '] = ' .. - template.table_inline(value) .. ', ' + local keys = {} + for key in pairs(tbl) do + keys[#keys + 1] = key + end + table.sort(keys) + for i = 1, #keys do + local key = keys[i] + local value = tbl[key] + if type(key) ~= 'numbers' then + key = '\'' .. + template.colored_string(key, 'cyan', 'dim') .. '\'' + end + kv_list = kv_list .. '[' .. key .. '] = ' .. + template.table_inline(value) .. ', ' end output = output .. kv_list:gsub(', $', '') return output .. tex_escape .. '}' else - return tostring(table) + return tostring(tbl) end end diff --git a/macros/luatex/generic/nodetree/nodetree.pdf b/macros/luatex/generic/nodetree/nodetree.pdf Binary files differindex c15b1e5c17..6c228dbe58 100644 --- a/macros/luatex/generic/nodetree/nodetree.pdf +++ b/macros/luatex/generic/nodetree/nodetree.pdf diff --git a/macros/luatex/generic/penlight/README.md b/macros/luatex/generic/penlight/README.md index a80a51c22e..18427f1141 100644 --- a/macros/luatex/generic/penlight/README.md +++ b/macros/luatex/generic/penlight/README.md @@ -5,7 +5,7 @@ This LuaLaTeX package provides a wrapper to use the [penlight](https://github.co # License -Copyright (C) 2021-2023 Kale Ewasiuk +Copyright (C) 2021-2024 Kale Ewasiuk Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/macros/luatex/generic/penlight/penlight.lua b/macros/luatex/generic/penlight/penlight.lua index 6ffcaf49b7..e104886a83 100644 --- a/macros/luatex/generic/penlight/penlight.lua +++ b/macros/luatex/generic/penlight/penlight.lua @@ -275,7 +275,7 @@ function Doc:reset() end ---- Append a child to the currrent Node (ignoring current position). +--- Append a child to the current Node (ignoring current position). -- @param child a child node (either text or a document) -- @return the current node (`self`) -- @usage @@ -311,7 +311,7 @@ end --- Set attributes of a document node. --- Will add/overwite values, but will not remove existing ones. +-- Will add/overwrite values, but will not remove existing ones. -- Operates on the Node itself, will not take position into account. -- @tparam table t a table containing attribute/value pairs -- @return the current node (`self`) @@ -447,7 +447,7 @@ do -- @param self document node to traverse -- @param tag tag-name to look for -- @param list array table to add the matching ones to - -- @param recurse if truthy, recursivly search the node + -- @param recurse if truthy, recursively search the node local function _children_with_name(self, tag, list, recurse) -- TODO: protect against recursion for _, child in ipairs(self) do @@ -942,7 +942,7 @@ local html_empty_elements = { --lists all HTML empty (void) elements } --- Parse a well-formed HTML file as a string. --- Tags are case-insenstive, DOCTYPE is ignored, and empty elements can be .. empty. +-- Tags are case-insensitive, DOCTYPE is ignored, and empty elements can be .. empty. -- @param s the HTML function _M.parsehtml(s) return _M.basic_parse(s,false,true) @@ -1335,7 +1335,7 @@ end -- Multiple short args can be combined like so: ( `-abcd`). -- -- When specifying the `flags_valid` parameter, its contents can also contain --- aliasses, to convert short/long flags to the same output name. See the +-- aliases, to convert short/long flags to the same output name. See the -- example below. -- -- Note: if a flag is repeated, the last value wins. @@ -1354,7 +1354,7 @@ end -- { "hello", "world" }, -- list of flags taking values -- { "l", "a", "b"}) -- list of allowed flags (value ones will be added) -- --- -- More complex example using aliasses: +-- -- More complex example using aliases: -- local valid = { -- long = "l", -- if 'l' is specified, it is reported as 'long' -- new = { "n", "old" }, -- here both 'n' and 'old' will go into 'new' @@ -1397,16 +1397,16 @@ function app.parse_args (args,flags_with_values, flags_valid) valid = setmetatable({},{ __index = function(_, key) return key end }) else valid = {} - for k,aliasses in pairs(flags_valid) do + for k,aliases in pairs(flags_valid) do if type(k) == "number" then -- array/list entry - k = aliasses + k = aliases end - if type(aliasses) == "string" then -- single alias - aliasses = { aliasses } + if type(aliases) == "string" then -- single alias + aliases = { aliases } end - if type(aliasses) == "table" then -- list of aliasses + if type(aliases) == "table" then -- list of aliases -- it's the alternate name, so add the proper mappings - for i, alias in ipairs(aliasses) do + for i, alias in ipairs(aliases) do valid[alias] = k end end @@ -1427,7 +1427,7 @@ function app.parse_args (args,flags_with_values, flags_valid) end -- now check that all flags with values are reported as such under all - -- of their aliasses + -- of their aliases for k, main_alias in pairs(valid) do if with_values[main_alias] then with_values[k] = true @@ -1696,7 +1696,7 @@ function array2d.flatten (t) return makelist(res) end ---- reshape a 2D array. Reshape the aray by specifying a new nr of rows. +--- reshape a 2D array. Reshape the array by specifying a new nr of rows. -- @array2d t 2d array -- @int nrows new number of rows -- @bool co use column-order (Fortran-style) (default false) @@ -1773,7 +1773,7 @@ end --- extract the specified columns. -- @array2d t 2d array -- @tparam {int} cidx a table of column indices --- @return a new 2d array with the extracted colums +-- @return a new 2d array with the extracted columns function array2d.extract_cols (t,cidx) assert_arg(1,t,'table') local res = {} @@ -2097,7 +2097,7 @@ end, -------------------- -- Module: 'pl.class' -------------------- ---- Provides a reuseable and convenient framework for creating classes in Lua. +--- Provides a reusable and convenient framework for creating classes in Lua. -- Two possible notations: -- -- B = class(A) @@ -2124,7 +2124,7 @@ local function call_ctor (c,obj,...) init = rawget(parent_with_init, '_init') parent_with_init = rawget(parent_with_init, '_parent_with_init') end - if parent_with_init then -- super() points to one above whereever _init came from + if parent_with_init then -- super() points to one above wherever _init came from rawset(obj,'super',function(obj,...) call_ctor(parent_with_init,obj,...) end) @@ -2970,9 +2970,9 @@ end local config = {} ---- like `io.lines`, but allows for lines to be continued with '`\`'. +--- like `io.lines`, but allows for lines to be continued with '`\\`'. -- @param file a file-like object (anything where read() returns the next line) or a filename. --- Defaults to stardard input. +-- Defaults to standard input. -- @return an iterator over the lines, or nil -- @return error 'not a file-like object' or 'file is nil' function config.lines(file) @@ -3353,7 +3353,7 @@ function data.read(file,cnfg) -- note that using dot as the thousands separator (@thousands_dot) -- requires a special conversion function! For CSV, _empty fields_ are - -- considered to default to numerial zeroes. + -- considered to default to numerical zeroes. local tonumber = tonumber local function try_number(x) if thousands_dot then x = x:gsub('%.(...)','%1') end @@ -5327,7 +5327,7 @@ function repr (e,lastpred) end func.repr = repr --- collect all the non-PE values in this PE into vlist, and replace each occurence +-- collect all the non-PE values in this PE into vlist, and replace each occurrence -- with a constant PH (_C1, etc). Return the maximum placeholder index found. local collect_values function collect_values (e,vlist) @@ -5411,13 +5411,20 @@ utils.add_function_factory(_PEMT,func.I) func.bind1 = utils.bind1 func.curry = func.bind1 ---- create a function which chains two functions. +--- create a function which chains multiple functions. -- @func f a function of at least one argument -- @func g a function of at least one argument +-- @param ... additional functions to compose -- @return a function --- @usage printf = compose(io.write,string.format) -function func.compose (f,g) - return function(...) return f(g(...)) end +-- @usage printf = compose(io.write, string.format) +-- @usage printf = compose(io.write, string.lower, string.format) +function func.compose (...) + local args = pack(...) + return tablex.reduce(function(f, g) + return function(...) + return f(g(...)) + end + end, args) end --- bind the arguments of a function to given values. @@ -5475,7 +5482,7 @@ end, -------------------- -------------- -- PL loader, for loading all PL libraries, only on demand. --- Whenever a module is implicitly accesssed, the table will have the module automatically injected. +-- Whenever a module is implicitly accessed, the table will have the module automatically injected. -- (e.g. `_ENV.tablex`) -- then that module is dynamically loaded. The submodules are all brought into -- the table that is provided as the argument, or returned in a new table. @@ -5573,7 +5580,7 @@ end, -------------------- -------------- -- Entry point for loading all PL libraries only on demand, into the global space. --- Requiring 'pl' means that whenever a module is implicitly accesssed +-- Requiring 'pl' means that whenever a module is implicitly accessed -- (e.g. `utils.split`) -- then that module is dynamically loaded. The submodules are all brought into -- the global space. @@ -6872,7 +6879,7 @@ function List:insert(i, x) return self end ---- Insert an item at the begining of the list. +--- Insert an item at the beginning of the list. -- @param x a data item -- @return the list function List:put (x) @@ -7282,7 +7289,7 @@ function List:iter () return iter(self) end ---- Create an iterator over a seqence. +--- Create an iterator over a sequence. -- This captures the Python concept of 'sequence'. -- For tables, iterates over all values with integer indices. -- @param seq a sequence; a string (over characters), a table, a file object (over lines) or an iterator function @@ -7637,10 +7644,14 @@ local function makelist(t) return setmetatable(t, require('pl.List')) end ---- list of keys. +--- return a List of all keys. +-- @class function +-- @name Map:keys Map.keys = tablex.keys ---- list of values. +--- return a List of all values. +-- @class function +-- @name Map:values Map.values = tablex.values --- return an iterator over all key-value pairs. @@ -7648,7 +7659,7 @@ function Map:iter () return pairs(self) end ---- return a List of all key-value pairs, sorted by the keys. +--- return a List of all key-value pairs, sorted by the keys in ascending order. function Map:items() local ls = makelist(tablex.pairmap (function (k,v) return makelist {k,v} end, self)) ls:sort(function(t1,t2) return t1[1] < t2[1] end) @@ -8223,12 +8234,12 @@ local function err_func(name, param, err, code) end --- Lua iterator over the entries of a given directory. --- Implicit link to [`luafilesystem.dir`](https://keplerproject.github.io/luafilesystem/manual.html#reference) +-- Implicit link to [`luafilesystem.dir`](https://lunarmodules.github.io/luafilesystem/manual.html#dir) -- @function dir path.dir = lfs.dir --- Creates a directory. --- Implicit link to [`luafilesystem.mkdir`](https://keplerproject.github.io/luafilesystem/manual.html#reference) +-- Implicit link to [`luafilesystem.mkdir`](https://lunarmodules.github.io/luafilesystem/manual.html#mkdir) -- @function mkdir path.mkdir = function(d) local ok, err, code = lfs.mkdir(d) @@ -8239,7 +8250,7 @@ path.mkdir = function(d) end --- Removes a directory. --- Implicit link to [`luafilesystem.rmdir`](https://keplerproject.github.io/luafilesystem/manual.html#reference) +-- Implicit link to [`luafilesystem.rmdir`](https://lunarmodules.github.io/luafilesystem/manual.html#rmdir) -- @function rmdir path.rmdir = function(d) local ok, err, code = lfs.rmdir(d) @@ -8250,7 +8261,7 @@ path.rmdir = function(d) end --- Gets attributes. --- Implicit link to [`luafilesystem.attributes`](https://keplerproject.github.io/luafilesystem/manual.html#reference) +-- Implicit link to [`luafilesystem.attributes`](https://lunarmodules.github.io/luafilesystem/manual.html#attributes) -- @function attrib path.attrib = function(d, r) local ok, err, code = attrib(d, r) @@ -8261,7 +8272,7 @@ path.attrib = function(d, r) end --- Get the working directory. --- Implicit link to [`luafilesystem.currentdir`](https://keplerproject.github.io/luafilesystem/manual.html#reference) +-- Implicit link to [`luafilesystem.currentdir`](https://lunarmodules.github.io/luafilesystem/manual.html#currentdir) -- @function currentdir path.currentdir = function() local ok, err, code = currentdir() @@ -8272,7 +8283,7 @@ path.currentdir = function() end --- Gets symlink attributes. --- Implicit link to [`luafilesystem.symlinkattributes`](https://keplerproject.github.io/luafilesystem/manual.html#reference) +-- Implicit link to [`luafilesystem.symlinkattributes`](https://lunarmodules.github.io/luafilesystem/manual.html#symlinkattributes) -- @function link_attrib path.link_attrib = function(d, r) local ok, err, code = link_attrib(d, r) @@ -8285,7 +8296,7 @@ end --- Changes the working directory. -- On Windows, if a drive is specified, it also changes the current drive. If -- only specifying the drive, it will only switch drive, but not modify the path. --- Implicit link to [`luafilesystem.chdir`](https://keplerproject.github.io/luafilesystem/manual.html#reference) +-- Implicit link to [`luafilesystem.chdir`](https://lunarmodules.github.io/luafilesystem/manual.html#chdir) -- @function chdir path.chdir = function(d) local ok, err, code = lfs.chdir(d) @@ -8329,7 +8340,7 @@ end --- does a path exist? -- @string P A file path --- @return the file path if it exists (either as file, directory, socket, etc), nil otherwise +-- @return the file path if it exists (either as file, directory, socket, etc), false otherwise function path.exists(P) assert_string(1,P) return attrib(P,'mode') ~= nil and P @@ -8426,8 +8437,8 @@ end -- @string[opt] pwd optional start path to use (default is current dir) function path.abspath(P,pwd) assert_string(1,P) - if pwd then assert_string(2,pwd) end local use_pwd = pwd ~= nil + if use_pwd then assert_string(2,pwd) end if not use_pwd and not currentdir() then return P end P = P:gsub('[\\/]$','') pwd = pwd or currentdir() @@ -8671,17 +8682,35 @@ end -- In windows, if HOME isn't set, then USERPROFILE is used in preference to -- HOMEDRIVE HOMEPATH. This is guaranteed to be writeable on all versions of Windows. -- @string P A file path +-- @treturn[1] string The file path with the `~` prefix substituted, or the input path if it had no prefix. +-- @treturn[2] nil +-- @treturn[2] string Error message if the environment variables were unavailable. function path.expanduser(P) assert_string(1,P) - if at(P,1) == '~' then - local home = getenv('HOME') - if not home then -- has to be Windows - home = getenv 'USERPROFILE' or (getenv 'HOMEDRIVE' .. getenv 'HOMEPATH') - end - return home..sub(P,2) - else + if P:sub(1,1) ~= '~' then return P end + + local home = getenv('HOME') + if (not home) and (not path.is_windows) then + -- no more options to try on Nix + return nil, "failed to expand '~' (HOME not set)" + end + + if (not home) then + -- try alternatives on Windows + home = getenv 'USERPROFILE' + if not home then + local hd = getenv 'HOMEDRIVE' + local hp = getenv 'HOMEPATH' + if not (hd and hp) then + return nil, "failed to expand '~' (HOME, USERPROFILE, and HOMEDRIVE and/or HOMEPATH not set)" + end + home = hd..hp + end + end + + return home..sub(P,2) end @@ -8839,7 +8868,7 @@ end --- an iterator over all permutations of the elements of the given lists. -- @param ... list-like tables, they are nil-safe if a length-field `n` is provided (see `utils.pack`) --- @return an iterator which provides the next permutation as return values in the same order as the provided lists, preceeded by an index +-- @return an iterator which provides the next permutation as return values in the same order as the provided lists, preceded by an index -- @usage -- local strs = utils.pack("one", nil, "three") -- adds an 'n' field for nil-safety -- local bools = utils.pack(true, false) @@ -8977,6 +9006,42 @@ local assert_arg = utils.assert_arg local original_tostring = tostring +-- Calculate min and max integer supported by lua_Number +-- Assumptions: +-- 1. max_int = 2 ^ n - 1 +-- 2. min_int = -max_int +-- 3. if n > max_int versions with integer support will have +-- integer overflow and versions without integers will lose least significant bit +-- Note: if lua_Integer is smaller than lua_Number mantissa string.format('%d') +-- can throw runtime error +local max_int, min_int +local next_cand = 1 +while next_cand > 0 and next_cand % 2 == 1 do + max_int = next_cand + min_int = -next_cand + next_cand = next_cand * 2 + 1 +end + +local function is_integer(value) + if _VERSION == "Lua 5.3" or _VERSION == "Lua 5.4" then + return mtype(value) == "integer" + end + if value < min_int or value > max_int then + return false + end + return math.floor(value) == value +end + +local function is_float(value) + if _VERSION == "Lua 5.3" or _VERSION == "Lua 5.4" then + return mtype(value) == "float" + end + if value < min_int or value > max_int then + return true + end + return mfloor(value) == value +end + -- Patch tostring to format numbers with better precision -- and to produce cross-platform results for -- infinite values and NaN. @@ -8989,11 +9054,11 @@ local function tostring(value) return "Inf" elseif value == -mhuge then return "-Inf" - elseif (_VERSION ~= "Lua 5.3" or mtype(value) == "integer") and mfloor(value) == value then + elseif is_integer(value) then return ("%d"):format(value) else local res = ("%.14g"):format(value) - if _VERSION == "Lua 5.3" and mtype(value) == "float" and not res:find("%.") then + if is_float(value) and not res:find("%.") then -- Number is internally a float but looks like an integer. -- Insert ".0" after first run of digits. res = res:gsub("%d+", "%0.0", 1) @@ -11289,7 +11354,7 @@ local function _partition(p,delim,fn) end end ---- partition the string using first occurance of a delimiter +--- partition the string using first occurrence of a delimiter -- @string s the string -- @string ch delimiter (match as plain string, no patterns) -- @return part before ch @@ -11303,7 +11368,7 @@ function stringx.partition(s,ch) return _partition(s,ch,stringx.lfind) end ---- partition the string p using last occurance of a delimiter +--- partition the string p using last occurrence of a delimiter -- @string s the string -- @string ch delimiter (match as plain string, no patterns) -- @return part before ch @@ -11575,7 +11640,7 @@ end ---- Miscelaneous +--- Miscellaneous -- @section misc --- return an iterator over all lines in a string @@ -11593,7 +11658,7 @@ function stringx.lines(s) return s:gmatch('([^\n]*)\n') end ---- inital word letters uppercase ('title case'). +--- initial word letters uppercase ('title case'). -- Here 'words' mean chunks of non-space characters. -- @string s the string -- @return a string with each word's first letter uppercase @@ -11614,7 +11679,7 @@ do --- Return a shortened version of a string. -- Fits string within w characters. Removed characters are marked with ellipsis. -- @string s the string - -- @int w the maxinum size allowed + -- @int w the maximum size allowed -- @bool tail true if we want to show the end of the string (head otherwise) -- @usage ('1234567890'):shorten(8) == '12345...' -- @usage ('1234567890'):shorten(8, true) == '...67890' @@ -11688,7 +11753,7 @@ end --- Python-style formatting operator. -- Calling `text.format_operator()` overloads the % operator for strings to give --- Python/Ruby style formated output. +-- Python/Ruby style formatted output. -- This is extended to also do template-like substitution for map-like data. -- -- Note this goes further than the original, and will allow these cases: @@ -11698,7 +11763,7 @@ end -- 3. a map of var=value pairs -- 4. a function, as in gsub -- --- For the second two cases, it uses $-variable substituion. +-- For the second two cases, it uses $-variable substitution. -- -- When called, this function will monkey-patch the global `string` metatable by -- adding a `__mod` method. @@ -12799,59 +12864,72 @@ end, local utils = require 'pl.utils' -local append,format,strsub,strfind,strgsub = table.insert,string.format,string.sub,string.find,string.gsub +local append, concat = table.insert, table.concat +local format, strsub, strfind, strgsub, strrep = string.format, string.sub, string.find, string.gsub, string.rep -local APPENDER = "\n__R_size = __R_size + 1; __R_table[__R_size] = " +local APPENDER = " __R_size = __R_size + 1; __R_table[__R_size] = " +-- When this function returns, `pieces` is guaranteed to hold a complete Lua +-- statement, meaning that new statements can be appended without creating +-- invalid Lua code. local function parseDollarParen(pieces, chunk, exec_pat, newline) local s = 1 for term, executed, e in chunk:gmatch(exec_pat) do - executed = '('..strsub(executed,2,-2)..')' - append(pieces, APPENDER..format("%q", strsub(chunk,s, term - 1))) - append(pieces, APPENDER..format("__tostring(%s or '')", executed)) + executed = '(' .. strsub(executed, 2, -2) .. ')' + append(pieces, APPENDER .. format("%q;", strsub(chunk, s, term - 1))) + append(pieces, APPENDER .. format("__tostring(%s or '');", executed)) s = e end - local r + local remainder, newlines_removed if newline then - r = format("%q", strgsub(strsub(chunk,s),"\n","")) + remainder, newlines_removed = strgsub(strsub(chunk, s), "\n", "") else - r = format("%q", strsub(chunk,s)) + remainder, newlines_removed = strsub(chunk, s), 0 end - if r ~= '""' then - append(pieces, APPENDER..r) + if remainder ~= "" then + append(pieces, APPENDER .. format("%q;", remainder)) + end + if newlines_removed > 0 then + append(pieces, strrep("\n", newlines_removed)) end end -local function parseHashLines(chunk,inline_escape,brackets,esc,newline) - local exec_pat = "()"..inline_escape.."(%b"..brackets..")()" +local function parseHashLines(chunk, inline_escape, brackets, esc, newline) + -- Escape special characters to avoid invalid expressions + inline_escape = utils.escape(inline_escape) + esc = utils.escape(esc) + + local exec_pat = "()" .. inline_escape .. "(%b" .. brackets .. ")()" - local esc_pat = esc.."+([^\n]*\n?)" - local esc_pat1, esc_pat2 = "^"..esc_pat, "\n"..esc_pat - local pieces, s = {"return function()\nlocal __R_size, __R_table, __tostring = 0, {}, __tostring", n = 1}, 1 + local esc_pat = esc .. "+([^\n]*\n?)" + local esc_pat1, esc_pat2 = "^" .. esc_pat, "\n" .. esc_pat + local pieces, s = {"return function() local __R_size, __R_table, __tostring = 0, {}, __tostring; "}, 1 while true do - local _, e, lua = strfind(chunk,esc_pat1, s) + local _, e, lua = strfind(chunk, esc_pat1, s) if not e then local ss - ss, e, lua = strfind(chunk,esc_pat2, s) - parseDollarParen(pieces, strsub(chunk,s, ss), exec_pat, newline) + ss, e, lua = strfind(chunk, esc_pat2, s) + parseDollarParen(pieces, strsub(chunk, s, ss), exec_pat, newline) if not e then break end end - if strsub(lua, -1, -1) == "\n" then lua = strsub(lua, 1, -2) end - append(pieces, "\n"..lua) + if strsub(lua, -1, -1) ~= "\n" then lua = lua .. "\n" end -- Ensure trailing newline + append(pieces, lua) + -- since `lua` ends with a newline, there is no danger of subsequent + -- statements being gobbled up by comments or being altered s = e + 1 end - append(pieces, "\nreturn __R_table\nend") + append(pieces, "return __R_table; end") -- let's check for a special case where there is nothing to template, but it's -- just a single static string local short = false - if (#pieces == 3) and (pieces[2]:find(APPENDER, 1, true) == 1) then - pieces = { "return " .. pieces[2]:sub(#APPENDER+1,-1) } + if (#pieces == 3) and (strfind(pieces[2], APPENDER, 1, true) == 1) then + pieces = { "return " .. strsub(pieces[2], #APPENDER + 1, -1) } short = true end -- if short == true, the generated function will not return a table of strings, -- but a single string - return table.concat(pieces), short + return concat(pieces), short end local template = {} @@ -12859,33 +12937,34 @@ local template = {} --- expand the template using the specified environment. -- This function will compile and render the template. For more performant -- recurring usage use the two step approach by using `compile` and `ct:render`. --- There are six special fields in the environment table `env` --- --- * `_parent`: continue looking up in this table (e.g. `_parent=_G`). --- * `_brackets`: bracket pair that wraps inline Lua expressions, default is '()'. --- * `_escape`: character marking Lua lines, default is '#' --- * `_inline_escape`: character marking inline Lua expression, default is '$'. --- * `_chunk_name`: chunk name for loaded templates, used if there --- is an error in Lua code. Default is 'TMP'. --- * `_debug`: if truthy, the generated code will be printed upon a render error --- -- @string str the template string --- @tab[opt] env the environment --- @return `rendered template + nil + source_code`, or `nil + error + source_code`. The last --- return value (`source_code`) is only returned if the debug option is used. -function template.substitute(str,env) +-- @tparam[opt] table env the environment. This table has the following special fields: +-- @tparam[opt=nil] table env._parent continue looking up in this table (e.g. `_parent=_G`). +-- @tparam[opt="()"] string env._brackets bracket pair that wraps inline Lua expressions. +-- @tparam[opt="#"] string env._escape character marking Lua lines. +-- @tparam[opt="$"] string env._inline_escape character marking inline Lua expression. +-- @tparam[opt="TMP"] string env._chunk_name chunk name for loaded templates, used if there +-- is an error in Lua code. +-- @tparam[opt=false] boolean env._debug if truthy, the generated code will be printed upon a render error. +-- @treturn[1] string render result +-- @treturn[1] nil +-- @treturn[1] string source_code (only if '`env._debug`' was truthy). +-- @treturn[2] nil +-- @treturn[2] string error message +-- @treturn[2] string source_code (only if '`env._debug`' was truthy). +function template.substitute(str, env) env = env or {} local t, err = template.compile(str, { - chunk_name = rawget(env,"_chunk_name"), - escape = rawget(env,"_escape"), - inline_escape = rawget(env,"_inline_escape"), - inline_brackets = rawget(env,"_brackets"), - newline = nil, - debug = rawget(env,"_debug") + chunk_name = rawget(env, "_chunk_name"), + escape = rawget(env, "_escape"), + inline_escape = rawget(env, "_inline_escape"), + inline_brackets = rawget(env, "_brackets"), + newline = false, + debug = rawget(env, "_debug") }) if not t then return t, err end - return t:render(env, rawget(env,"_parent"), rawget(env,"_debug")) + return t:render(env, rawget(env, "_parent"), rawget(env, "_debug")) end --- executes the previously compiled template and renders it. @@ -12894,12 +12973,16 @@ end -- @tab[opt] parent continue looking up in this table (e.g. `parent=_G`). -- @bool[opt] db if thruthy, it will print the code upon a render error -- (provided the template was compiled with the debug option). --- @return `rendered template + nil + source_code`, or `nil + error + source_code`. The last return value --- (`source_code`) is only returned if the template was compiled with the debug option. +-- @treturn[1] string render result +-- @treturn[1] nil +-- @treturn[1] string source_code (only if '`env._debug`' was truthy). +-- @treturn[2] nil +-- @treturn[2] string error message +-- @treturn[2] string source_code (only if '`env._debug`' was truthy). -- @usage -- local ct, err = template.compile(my_template) -- local rendered , err = ct:render(my_env, parent) -local render = function(self, env, parent, db) +local function render(self, env, parent, db) env = env or {} if parent then -- parent is a bit silly, but for backward compatibility retained setmetatable(env, {__index = parent}) @@ -12911,25 +12994,27 @@ local render = function(self, env, parent, db) if self.code and db then print(self.code) end return nil, out, self.code end - return table.concat(out), nil, self.code + return concat(out), nil, self.code end --- compiles the template. -- Returns an object that can repeatedly be rendered without parsing/compiling --- the template again. --- The options passed in the `opts` table support the following options: --- --- * `chunk_name`: chunk name for loaded templates, used if there --- is an error in Lua code. Default is 'TMP'. --- * `escape`: character marking Lua lines, default is '#' --- * `inline_escape`: character marking inline Lua expression, default is '$'. --- * `inline_brackets`: bracket pair that wraps inline Lua expressions, default is '()'. --- * `newline`: string to replace newline characters, default is `nil` (not replacing newlines). --- * `debug`: if truthy, the generated source code will be retained within the compiled template object, default is `nil`. --- --- @string str the template string --- @tab[opt] opts the compilation options to use --- @return template object, or `nil + error + source_code` +-- the template again. Preserves the line layout of the template so that line +-- numbers in error messages should point to the correct lines in the source +-- string. +-- @tparam string str the template string +-- @tparam[opt] table opts the compilation options to use. This table supports the following options: +-- @tparam[opt="TMP"] string opts.chunk_name chunk name for loaded templates, used if there +-- is an error in Lua code. +-- @tparam[opt="#"] string opts.escape character marking Lua lines. +-- @tparam[opt="$"] string opts.inline_escape character marking inline Lua expression. +-- @tparam[opt="()"] string opts.inline_brackets bracket pair that wraps inline Lua expressions. +-- @tparam[opt=false] boolean opts.newline if truthy, newlines will be stripped from text in the template. +-- @tparam[opt=false] boolean opts.debug if truthy, the generated code will be printed upon a render error. +-- @treturn[1] ct compiled template object +-- @treturn[2] nil +-- @treturn[2] string error message +-- @treturn[2] string source_code -- @usage -- local ct, err = template.compile(my_template) -- local rendered , err = ct:render(my_env, parent) @@ -12940,9 +13025,9 @@ function template.compile(str, opts) local inline_escape = opts.inline_escape or '$' local inline_brackets = opts.inline_brackets or '()' - local code, short = parseHashLines(str,inline_escape,inline_brackets,escape,opts.newline) + local code, short = parseHashLines(str, inline_escape, inline_brackets, escape, opts.newline) local env = { __tostring = tostring } - local fn, err = utils.load(code, chunk_name,'t',env) + local fn, err = utils.load(code, chunk_name, 't', env) if not fn then return nil, err, code end if short then @@ -13453,7 +13538,8 @@ local operators local _function_factories = {} -local utils = { _VERSION = "1.13.1" } +local utils = { _VERSION = "1.14.0" } + for k, v in pairs(compat) do utils[k] = v end --- Some standard patterns @@ -13571,7 +13657,11 @@ end -- @param value1 Value returned if cond is truthy -- @param value2 Value returned if cond is falsy function utils.choose(cond, value1, value2) - return cond and value1 or value2 + if cond then + return value1 + else + return value2 + end end --- convert an array of values to strings. @@ -13727,7 +13817,7 @@ end -- non-existing values, and/or converting strings/identifiers to other values. -- -- Calling on the object does the same, but returns a soft error; `nil + err`, if --- the call is succesful (the key exists), it will return the value. +-- the call is successful (the key exists), it will return the value. -- -- When calling with varargs or an array the values will be equal to the keys. -- The enum object is read-only. @@ -13755,7 +13845,7 @@ end -- }, -- -- some_method = function(self) --- return self.ERR.OUT_OF_BOUNDS +-- return nil, self.ERR.OUT_OF_BOUNDS -- end, -- } -- @@ -14011,6 +14101,11 @@ end --- OS functions -- @section OS-functions +--- Execute a shell command. +-- This function is a copy of `compat.execute`. +-- @class function +-- @name utils.execute + --- execute a shell command and return the output. -- This function redirects the output to tempfiles and returns the content of those files. -- @param cmd a shell command @@ -14121,7 +14216,7 @@ end -- @param s The input string -- @param re optional A Lua string pattern; defaults to '%s+' -- @param plain optional If truthy don't use Lua patterns --- @param n optional maximum number of elements (if there are more, the last will remian un-split) +-- @param n optional maximum number of elements (if there are more, the last will remain un-split) -- @return a list-like table -- @raise error if s is not a string -- @see splitv @@ -14175,8 +14270,8 @@ end -- This is useful if you have a function which is relatively expensive, -- but you don't know in advance what values will be required, so -- building a table upfront is wasteful/impossible. --- @param func a function of at least one argument --- @return a function with at least one argument, which is used as the key. +-- @param func a function that takes exactly one argument (which later serves as the cache key) and returns a single value +-- @return a function taking one argument and returning a single value either from the cache or by running the original input function function utils.memoize(func) local cache = {} return function(k) diff --git a/macros/luatex/generic/penlight/penlight.pdf b/macros/luatex/generic/penlight/penlight.pdf Binary files differindex 3932e74389..928e356b85 100644 --- a/macros/luatex/generic/penlight/penlight.pdf +++ b/macros/luatex/generic/penlight/penlight.pdf diff --git a/macros/luatex/generic/penlight/penlight.sty b/macros/luatex/generic/penlight/penlight.sty index 7a7c94b6a7..8a0bb2c8f0 100644 --- a/macros/luatex/generic/penlight/penlight.sty +++ b/macros/luatex/generic/penlight/penlight.sty @@ -1,6 +1,6 @@ % Kale Ewasiuk (kalekje@gmail.com) -% 2023-07-22 -% Copyright (C) 2021-2023 Kale Ewasiuk +% 2024-09-15 +% Copyright (C) 2021-2024 Kale Ewasiuk % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal @@ -22,7 +22,7 @@ % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE % OR OTHER DEALINGS IN THE SOFTWARE. -\ProvidesPackage{penlight}[2023-07-22] +\ProvidesPackage{penlight}[2024-09-15] \directlua{penlight = require'penlight'} diff --git a/macros/luatex/generic/penlight/penlight.tex b/macros/luatex/generic/penlight/penlight.tex index 93d7bdbfc3..c3f141bcbe 100644 --- a/macros/luatex/generic/penlight/penlight.tex +++ b/macros/luatex/generic/penlight/penlight.tex @@ -1,6 +1,6 @@ % Kale Ewasiuk (kalekje@gmail.com) -% 2023-07-22 -% Copyright (C) 2021-2023 Kale Ewasiuk +% 2024-09-15 +% Copyright (C) 2021-2024 Kale Ewasiuk % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal @@ -64,7 +64,7 @@ Documentation for Penlight can be found here:\\ \mbox{\url{https://lunarmodules.github.io/Penlight}} -\\\\ This package uses version \cmd{1.13.1} +\\\\ This package uses version \cmd{1.14.0} (2024-04-15) \subsection*{Importing Penlight from within LaTeX} Loading this package runs the Lua code: \texttt{penlight = require'penlight'} @@ -95,8 +95,7 @@ Instead of using penlight.sty, you can simply:\\ \newpage \section*{} -This package used to contain \cmd{penlightextras.lua}. -That functionality now belongs to a standalone package named \cmd{penlightplus}. +Additional functionality is provided in the \cmd{penlightplus} package. \section*{} Disclaimer: I am not the author of the Lua Penlight library. diff --git a/macros/luatex/generic/penlightplus/README.md b/macros/luatex/generic/penlightplus/README.md index cc80374347..04db3bf991 100644 --- a/macros/luatex/generic/penlightplus/README.md +++ b/macros/luatex/generic/penlightplus/README.md @@ -5,7 +5,7 @@ Additions to the Penlight Lua Libraries. # License -Copyright (C) 2021-2023 Kale Ewasiuk +Copyright (C) 2021-2025 Kale Ewasiuk Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/macros/luatex/generic/penlightplus/penlightplus.lua b/macros/luatex/generic/penlightplus/penlightplus.lua index e51b01c14b..21596fac07 100644 --- a/macros/luatex/generic/penlightplus/penlightplus.lua +++ b/macros/luatex/generic/penlightplus/penlightplus.lua @@ -1,13 +1,13 @@ --% Kale Ewasiuk (kalekje@gmail.com) ---% 2024-03-14 ---% Copyright (C) 2021-2024 Kale Ewasiuk +--% 2025-02-14 +--% Copyright (C) 2021-2025 Kale Ewasiuk --% --% Permission is hereby granted, free of charge, to any person obtaining a copy --% of this software and associated documentation files (the "Software"), to deal --% in the Software without restriction, including without limitation the rights --% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell --% copies of the Software, and to permit persons to whom the Software is ---% furnished to do so, subjdeect to the following conditions: +--% furnished to do so, subjected to the following conditions: --% --% The above copyright notice and this permission notice shall be included in --% all copies or substantial portions of the Software. @@ -42,6 +42,8 @@ if debug ~= nil then end + + -- http://lua-users.org/wiki/SplitJoin -- todo read me!! penlight.tex = {} -- adding a sub-module for tex related stuff @@ -65,6 +67,17 @@ function penlight.hasval(x) -- if something has value end + +function penlight._Gdot(s) + -- return a global with nots + o = _G + for _, a in ipairs(s:split('.')) do + o = o[a] + end + return o +end + + -- Some simple and helpful LaTeX functions -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- xparse defaults @@ -182,6 +195,18 @@ function penlight.tex.pkgerror(pkg, msg1, msg2, stop) end +if not penlight.debug_available then + penlight.tex.pkgwarn('penlightplus', 'lua debug library is not available, recommend re-compiling with the --luadebug option') +end + + +function penlight.tex.errorif(exp, pkg, msg1, msg2, stop) + if penlight.hasval(exp) then + penlight.tex.pkgerror(pkg, msg1, msg2, stop) + end +end + + --definition helpers -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- function penlight.tex.defmacro(cs, val, g) -- , will not work if val contains undefined tokens (so pre-define them if using..) @@ -264,6 +289,8 @@ end -- when nesting commands, this makes it helpful to not worry about brackets penlight.tex._NumBkts = 0 +penlight.tex._EndEnvs = {} + --prt(opencmd('textbf')..opencmd('texttt')..'bold typwriter'..close_bkt_cnt()) function penlight.tex.opencmd(cmd) @@ -291,11 +318,29 @@ end + + +function penlight.tex.openenv(env, opt) + if opt == nil then opt = '' else opt = '['..opt..']' end + tex.sprint('\\begin{' .. env .. '}'..opt) + table.insert(penlight.tex._EndEnvs, 1, '\\end{'..env..'}') +end + +function penlight.tex.closeenv(num) + num = num or #penlight.tex._EndEnvs + for i=1, num do + tex.sprint(penlight.tex._EndEnvs[1]) + table.remove(penlight.tex._EndEnvs, 1) + end +end + + + function penlight.tex.aliasluastring(s, d) s = s:delspace():upper():tolist() d = d:delspace():upper():tolist() for i, S in penlight.seq.enum(d:slice_assign(1,#s,s)) do - if (S == 'E') or (S == 'F') then S = '' end -- E or F is fully expanded + if (S == 'F') then S = '' end -- F is fully expanded penlight.tex.prtn('\\let\\plluastring'..penlight.Char(i)..'\\luastring'..S) end end @@ -371,11 +416,11 @@ local number = P{"number", function penlight.char(num) - return string.char(string.byte("a")+num-1) + return string.char(string.byte("a")+tonumber(num)-1) end function penlight.Char(num) - return string.char(string.byte("A")+num-1) + return string.char(string.byte("A")+tonumber(num)-1) end @@ -395,6 +440,25 @@ function str_mt.__index.gextract(s, pat) --extract a pattern from string, return return s_extr, s_rem end +function str_mt.__index.gxtrct(s, pat, num, join) --extract a pattern from string, returns both + -- todo a variant where you can specify the number of extractions, and either list of concatenate them would be helpful + local l_extr = penlight.List{} + local s_rem = s + local n = 1 + num = num or 99999 + for e in s:gmatch(pat) do + l_extr = l_extr:append(e) + s_rem = s_rem:gsub(e,'',1) + if n == num then break end + n = n +1 + end + if join then + l_extr = l_extr:join(join) + end + return l_extr, s_rem +end + + function str_mt.__index.gfirst(s, t) -- get the first pattern found from a table of pattern for _, pat in pairs(t) do if string.find(s, pat) then @@ -456,6 +520,17 @@ function str_mt.__index.trimfl(str) return str:sub(2,-2) end +function str_mt.__index.istexdim(str) + for _, u in pairs{'pt', 'mm', 'cm', 'in', 'ex', 'em', 'mu', 'sp'} do + if penlight.hasval(str:delspace():find('^%-?%d*%.?%d+'..u..'$')) then + return true + end + end + return false +end + + + function str_mt.__index.subpar(s, r) r = r or ' ' return (s:gsub('\\par', r)) @@ -475,6 +550,48 @@ function str_mt.__index.parsekv(s, t) -- parsekv string return penlight.luakeys.parse(s, t) end +function str_mt.__index.splitstrip(s, sep, stri) -- + sep = sep or ',' + return penlight.List(s:split(sep)):map(function(x) return penlight.stringx.strip(x, stri) end) +end + + +function str_mt.__index.split2(s, sep1, sep2, stri) -- + sep1 = sep1 or ',' + sep2 = sep2 or '=' + if stri == nil then stri = true end + stri = penlight.hasval(strip) + local splitfunc = string.split + if stri then + splitfunc = string.splitstrip + end + return penlight.List(splitfunc(s,sep1)):map(function(x) return splitfunc(x, sep2) end) +end + + + + +function str_mt.__index.hasnonum(s) + -- string only contains letters and symbols + --assert_string(1,s) -- todo + return string.find(s,'^[%D]+$') == 1 +end + +function str_mt.__index.hasnoalpha(s) + -- string only contains numbers and symbols + --assert_string(1,s) -- todo + return string.find(s,'^[%A]+$') == 1 +end + +function str_mt.__index.isvarlike(s) + -- string is like a variable, does not start with a number, then followd by letter, number, or underscore + --assert_string(1,s) -- todo + return string.find(s,'^[%a_][%w%d_]*$') == 1 +end + + + + -- -- -- -- function stuff function penlight.clone_function(fn) @@ -495,6 +612,127 @@ end + + + + + + + +-- -- -- -- -- -- -- -- -- -- -- -- functions below extend the seq module + + +function penlight.seq.check_neg_index(i, len, fallback) + i = tostring(i):delspace() + if i == '' then return fallback end + i = tonumber(i) + if i == nil then + local _ = 1*'"Attempted to use seqstr indexing with negative number, but length of list not provided"' + return fallback -- fallback is the number to fall back on if i isn't provided + end + len = tonumber(len) + if i < 0 then + if len == nil then + local _ = 1*'"Attempted to use seqstr indexing with negative number, but length of list not provided"' + return penlight.utils.raise("Attempted to use seqstr indexing with negative number, but length of list not provided") + end + i = len + 1 + i -- negative index + end + return i +end + +penlight.seq.train_element_sep = ',' +penlight.seq.train_range_sep = ':' + + +function penlight.seq.train(s, len) + -- parse a range given a string indexer + -- syntax is: s = 'i1, i2, r1:r2' where i1 and i2 are individual indexes. + -- r1:r2 is a range (inclusive). + -- a 'stride' can be given to ranges, eg. ::2 is 1,3,5,..., or 2::3 is 2,5,8,... + -- negative numbers can be used to index relative to the length of the table, eg, -1 -> len + -- if length is not given, negative indeing cannot be used + -- returns a penlight list of numbers + + local t = penlight.List() -- list of indexes + local check_neg = penlight.seq.check_neg_index + local steps = s:split(penlight.seq.train_element_sep) + --penlight.wrth(steps,'abc') + for _, r in ipairs(steps) do + --penlight.wrth(r,'seq.train = '..s) + r = penlight.stringx.strip(r) + if r == '*' then -- if the string has no numbers and no :, it is a key + t:append(r) + elseif string.isvarlike(r) then -- if the string has no numbers and no :, it is a key + t:append(r) + elseif r:find(penlight.seq.train_range_sep) then + r = r:split(penlight.seq.train_range_sep) -- if it's a range + t:extend(penlight.List.range(check_neg(r[1], len, 1), + check_neg(r[2], len, len), + tonumber(r[3]))) + else + t:append(check_neg(r, len)) + end + end +return t +end + +function penlight.seq.itrain(s, len) +-- iterator version of sequence-string + local t = penlight.seq.train(s, len) + local i = 0 + return function () + i = i + 1 + if i <= #t then return t[i] end + end +end + + + +function penlight.seq.tbltrain(tbl, s) -- iterate over a table using the train syntax + local inds = penlight.seq.train(s, #tbl) -- indexes to use + local star = inds:index('*') + if star ~= nil then + inds:pop(star) + inds:inject(penlight.tablex.kkeys(tbl), star) + end + local i = 0 + return function () + i = i + 1 -- i of indexes + if i <= #inds then + local v = tbl[inds[i]] + --penlight.wrth(v) + --if v == nil then penlight.test.asserteq(v, true) end -- todo make a generic lua error message function + return inds[i], v + end + end +end + + + + + +function penlight.seq.prod(t1, t2) + -- cartesian prduct of two tables (uses ipairs) + local t_new = {} + for _, v1 in ipairs(t1) do + for _, v2 in ipairs(t2) do + t_new[#t_new + 1] = {v1, v2} + end + end + local i = 0 + return function () + i = i + 1 + if i <= #t_new then return t_new[i][1], t_new[i][2] end + end +end + + + + + + + -- -- -- -- -- -- -- -- -- -- -- -- functions below extend the operator module function penlight.operator.strgt(a,b) return tostring(a) > tostring(b) end @@ -517,9 +755,17 @@ end +-- table stuff below --- table stuff below +function penlight.tablex.concatenate(t1,t2) + -- todo is this needed + for i=1,#t2 do + t1[#t1+1] = t2[i] + end + return t1 +end + function penlight.tablex.strinds(t) -- convert indices that are numbers to string indices local t_new = {} @@ -534,6 +780,7 @@ function penlight.tablex.strinds(t) -- convert indices that are numbers to strin end + function penlight.tablex.listcontains(t, v) return penlight.tablex.find(t, v) ~= nil end @@ -565,6 +812,20 @@ function penlight.tablex.fmt(t, fmt, strinds) end +function penlight.tablex.list2comma(t) + t = penlight.List(t) + local s = '' + if #t == 1 then + s = t[1] + elseif #t == 2 then + s = t:join(' and ') + elseif #t >= 3 then + s = t:slice(1,#t-1):join(', ')..', and '..t[#t] + end + return s +end + + function penlight.tablex.map_slice(func, T, j1, j2) if type(j1) == 'string' then return penlight.array2d.map_slice(func, {T}, ','..j1)[1] @@ -576,6 +837,18 @@ end penlight.array2d.map_slice1 = penlight.tablex.map_slice + +function penlight.tablex.kkeys(t) + local keys = {} + for k, _ in penlight.utils.kpairs(t) do + keys[#keys+1] = k + end + return keys +end + + + + -- todo option for multiple filters with AND logic, like the filter files?? function penlight.tablex.filterstr(t, exp, case) -- case = case sensitive @@ -589,6 +862,56 @@ function penlight.tablex.filterstr(t, exp, case) end end + +function penlight.tablex.train(t,seq,reind) + local t_new = {} + local num = 0 + for k, v in penlight.seq.tbltrain(t, seq) do + if reind and type(v) == 'number' then + num = num + 1 + k = num + end + t_new[k] = v + end + return t_new +end + + + +function penlight.trysplitcomma(s) + strip = strip or false + if type(s) == 'number' then s = tostring(s) end + if type(s) == 'string' then + return s:splitstrip(',') + end + return s +end + + +function penlight.findfiles(kv) + if type(kv) == 'string' then kv = penlight.luakeys.parse(kv) end + kv = penlight.tablex.update({dir={'.'}, fn={'*'}, ext={''}, sub=false}, kv) + kv.dir = penlight.trysplitcomma(kv.dir) + kv.fn = penlight.trysplitcomma(kv.fn) + kv.ext = penlight.trysplitcomma(kv.ext) + --local files_all = penlight.getallfilesdirs(kv.dir, kv.sub) + local getfiles = penlight.dir.getfiles + if penlight.hasval(kv.sub) then + getfiles = function(dir, fn) return penlight.dir.getallfiles(dir, '*'..fn) end -- need * in front so folder does not affect result + end + local files = penlight.List{} + for fn, ext in penlight.seq.prod(kv.fn, kv.ext) do + for _, dir in ipairs(kv.dir) do + files:extend(getfiles(dir, fn..ext)) + end + end + files = pl.List(penlight.tablex.keys(pl.Set(files))) -- clear duplicates + files = files:map(function(s) return s:gsub('\\','/') end) -- change slash for latex + return files +end + +penlight.dir.findfiles = penlight.findfiles + --todo add doc function penlight.utils.filterfiles(...) -- f1 is a series of filtering patterns, or condition @@ -725,11 +1048,8 @@ end -if not penlight.debug_available then - penlight.tex.pkgwarn('penlight', 'lua debug library is not available, recommend re-compiling with the --luadebug option') -else - penlight.COMP = require'pl.comprehension'.new() -- for comprehensions - +if penlight.debug_available then + penlight.COMP = penlight.comprehension.new() -- for comprehensions local _parse_range = penlight.clone_function(penlight.array2d.parse_range) function penlight.array2d.parse_range(s) -- edit parse range to do numpy string if no letter passed @@ -743,6 +1063,25 @@ end +function penlight.List:inject(l2, pos) + pos = pos or 1 + if pos < 1 then + pos = #self + pos + 1 + end + l2 = penlight.List(l2):reverse() + for i in l2:iter() do + self:insert(pos, i) + end + return self +end + + + + + + + + -- https://tex.stackexchange.com/questions/38150/in-lualatex-how-do-i-pass-the-content-of-an-environment-to-lua-verbatim penlight.tex.recordedbuf = "" @@ -772,37 +1111,57 @@ __PDFmetadata__ = {} penlight.tex.add_xspace_intext = true -function penlight.tex.updatePDFtable(k, v, o) -- key val overwrite - k = k:upfirst() +function penlight.tex.checkPDFkey(k) + k = k:delspace():upfirst() + local keys_allowed = 'Title Author Subject Date Language Keywords Publisher Copyright CopyrightURL Copyrighted Owner CertificateURL Coverage PublicationType Relation Source Doi ISBN URLlink Journaltitle Journalnumber Volume Issue Firstpage Lastpage CoverDisplayDate CoverDate Advisory BaseURL Identifier Nickname Thumbnails ' + if not keys_allowed:find(k ..' ') then + penlight.tex.pkgerror('penlightplus', 'invalid PDF metadata key assigned "'..k..'"') + end + return k +end + +function penlight.tex.makePDFtablekv(kv) + local t_new = {} + for k, v in pairs(penlight.luakeys.parse(kv)) do + k = penlight.tex.checkPDFkey(k) + v = penlight.tex.makePDFvarstr(v) + t_new[k] = v + end + return t_new +end + +function penlight.tex.updatePDFtable(k, v, o) -- update pdf table + if o == nil then o = true end + k = k:strip():upfirst() if penlight.hasval(o) or (__PDFmetadata__[k] == nil) then - __PDFmetadata__[k] = v + __PDFmetadata__[penlight.tex.checkPDFkey(k)] = penlight.tex.makePDFvarstr(v) end end + penlight.tex.writePDFmetadata = function(t) -- write PDF metadata to xmpdata file t = t or __PDFmetadata__ local str = '' for k, v in pairs(t) do - k = k:upfirst() str = str..'\\'..k..'{'..v..'}'..'\n' end - penlight.utils.writefile(tex.jobname..'.xmpdata', str) + penlight.utils.writefile(tex.jobname:gsub('"','')..'.xmpdata', str) end - -function penlight.tex.clear_cmds_str(s) - return s:gsub('%s+', ' '):gsub('\\\\',' '):gsub('\\%a+',''):gsub('{',' '):gsub('}',' '):gsub('%s+',' '):strip() -end - function penlight.tex.makePDFvarstr(s) s = s:gsub('%s*\\sep%s+','\0'):gsub('%s*\\and%s+','\0') -- turn \and into \sep + -- todo preserve \%, \{, \}, \backslash, and \copyright s = penlight.tex.clear_cmds_str(s) s = s:gsub('\0','\\sep ') --penlight.tex.help_wrt(s,'PDF var string') return s end +function penlight.tex.clear_cmds_str(s) + return s:gsub('%s+', ' '):gsub('\\\\',' '):gsub('\\%a+',''):gsub('{',' '):gsub('}',' '):gsub('%s+',' '):strip() +end + function penlight.tex.makeInTextstr(s) local s, c_and = s:gsub('%s*\\and%s+','\0') s = penlight.tex.clear_cmds_str(s) @@ -819,31 +1178,11 @@ function penlight.tex.makeInTextstr(s) return s end ---todo decide on above or below -function penlight.tex.list2comma(t) - local s = '' - if #t == 1 then - s = t[1] - elseif #t == 2 then - s = t:join(' and ') - elseif #t >= 3 then - s = t:slice(1,#t-1):join(', ')..', and '..t[#t] - end - return s -end -function penlight.tex.split2comma(s, d) - local t = penlight.List(s:split(d)):map(string.strip) - penlight.tex.prt(penlight.tex.list2comma(t)) -end -function penlight.tex.split2items(s, d) - local t = penlight.List(s:split(d)):map(string.strip) - for n, v in ipairs(t) do - penlight.tex.prtn('\\item '..v) - end -end + + function penlight.toggle_luaexpr(expr) @@ -857,116 +1196,18 @@ end - -penlight.tbls = {} - -penlight.rec_tbl = '' -penlight.rec_tbl_opts = {} - -function penlight.get_tbl_name(s) - if s == '' then - return penlight.rec_tbl - end - return s -end - -function penlight.get_tbl(s) - s = penlight.get_tbl_name(s) - return penlight.tbls[s] -end - -function penlight.get_tbl_index(s, undec) - undec = undec or false -- flag for allowing undeclared indexing - local tbl = '' - local key = '' - local s_raw = s - if s:find('%.') then - local tt = s:split('.') - tbl = tt[1] - key = tt[2] - elseif s:find('/') then - local tt = s:split('/') - tbl = tt[1] - if tbl == '' then tbl = penlight.rec_tbl end - key = tonumber(tonumber(tt[2])) - if key < 0 then key = #penlight.tbls[tbl]+1+key end - else - tbl = penlight.rec_tbl - key = tonumber(s) or s - if type(key) == 'number' and key < 0 then key = #penlight.tbls[tbl]+1+key end - end - if tbl == '' then tbl = penlight.rec_tbl end - - if (penlight.tbls[tbl] == nil) or ((not undec) and (penlight.tbls[tbl][key] == nil)) then - penlight.tex.pkgerror('penlightplus', 'Invalid tbl index attempt using: "'..s_raw..'". We tried to use tbl: "' ..tbl..'" and key: "'..key..'"') - end - return tbl, key -end - - -function penlight.get_tbl_item(s, p) -- get item with string, p means print value - p = p or false - local tbl, key = penlight.get_tbl_index(s) - local itm = penlight.tbls[tbl][key] - if p then - tex.sprint(tostring(itm)) - end - return itm -end - - -function penlight.set_tbl_item(s, v) - tbl, key = penlight.get_tbl_index(s) - penlight.tbls[tbl][key] = v -end - -function penlight.check_recent_tbl_undefault() - local undefaults = {} - if penlight.rec_tbl_opts ~= nil then - local defaults = penlight.tablex.union( - penlight.rec_tbl_opts.defs or {}, - penlight.rec_tbl_opts.defaults or {} - ) - for k, v in pairs(penlight.tbls[penlight.rec_tbl]) do - if defaults[k] == nil then - undefaults[#undefaults+1] = k - end - end - if penlight.hasval(undefaults) then - penlight.tex.pkgerror('penlightplus', - 'Invalid keys passed to tbl keyval: ' .. (', '):join(undefaults) .. - ' ; choices are: ' .. (', '):join(penlight.tablex.keys(defaults)) - ) - end - end -end - -function penlight.def_tbl(ind, def, g) - local _tbl, _key = penlight.get_tbl_index(ind) - if def == '' then def = 'dtbl'.._tbl.._key end - token.set_macro(def, tostring(penlight.tbls[_tbl][_key]), g) -end - -function penlight.def_tbl_all(ind, def) - local _tbl = penlight.get_tbl_name(ind) - if def == '' then def = 'dtbl'.._tbl end - for k, v in pairs(penlight.tbls[_tbl]) do - token.set_macro(def..k, tostring(v)) - end -end - --- TODO TODO TODO get error working xy def, and referene which table for key-vals -penlight.tbl_xysep = '%s+' -- spaces separate x-y coordinates -function penlight.def_tbl_coords(ind, def) - local tbl, key = penlight.get_tbl_index(ind) - local str = penlight.tbls[tbl][key] - if def == '' then def = 'dtbl'..tbl..key end - local x, y = str:strip():splitv(penlight.tbl_xysep) - if (not penlight.hasval(x)) or (not penlight.hasval(y)) then - penlight.tex.pkgerror('penlightplus', 'def_tbl_coords function could not parse coordiantes given as "'..str..'" ensure two numbers separated by space are given!', '', true) +function penlight.caseswitch(s, c, kv) + local kvtbl = penlight.luakeys.parse(kv) + local sw = kvtbl[c] -- the returned switch + if sw == nil then -- if switch not found + if s == penlight.tex.xTrue then -- if star, throw error + penlight.tex.pkgerror('penlight', 'case: "'..c..'" not found in key-vals: "'..kv..'"') + sw = '' + else + sw = kvtbl['__'] or '' -- use __ as not found case + end end - token.set_macro(def..'x', tostring(x)) - token.set_macro(def..'y', tostring(y)) + tex.sprint(sw) end @@ -976,7 +1217,6 @@ end - -- global setting type stuff function penlight.make_tex_global() @@ -1029,114 +1269,67 @@ end --- graveyard - --_xTrue = penlight.tex._xTrue - --_xFalse = penlight.tex._xFalse - --_xNoValue = penlight.tex._xNoValue - -- - --prt = penlight.tex.prt - --prtn = penlight.tex.prtn - --wrt = penlight.tex.wrt - --wrtn = penlight.tex.wrtn - -- - --prtl = penlight.tex.prtl - --prtt = penlight.tex.prtt - -- - --help_wrt = penlight.tex.help_wrt - --prt_array2d = penlight.tex.prt_array2d - -- - --pkgwarn = penlight.tex.pkgwarn - --pkgerror = penlight.tex.pkgerror - -- - --defcmd = penlight.tex.defcmd - --prvcmd = penlight.tex.prvcmd - --newcmd = penlight.tex.newcmd - --renewcmd = penlight.tex.renewcmd - --deccmd = penlight.tex.deccmd - -- - --_NumBkts = penlight.tex._NumBkts - --opencmd = penlight.tex.opencmd - --reset_bkt_cnt = penlight.tex.reset_bkt_cnt - --add_bkt_cnt = penlight.tex.add_bkt_cnt - --close_bkt_cnt = penlight.tex.close_bkt_cnt + + -- graveyard +--todo decide on above or below --- luakeys parses individual keys as ipairs, this changes the list to a pure map ---function penlight.luakeystomap(t) --- local t_new = {} --- for k, v in pairs(t) do --- if type(k) == 'number' then --- t_new[v] = true --- else --- t_new[k] = v --- end --- end --- return t_new ---end ---if luakeys then -- if luakeys is already loaded --- function luakeys.parseN(s, ...) --- local t = luakeys.parse(s,...) --- t = penlight.luakeystomap(t) --- return t --- end ---end --- might not be needed - --local func = check_func(func) ---local function check_func(func) -- check if a function is a PE, if so, make it a function --- if type(func) ~= 'function' then --- return I(func) --- end --- return func ---end +penlight.tex.list2comma = penlight.tablex.list2comma --- -- -- -- -- -- -- --- -- -- -- functions below extend the array2d module +function penlight.tex.split2comma(s, d) + local t = penlight.List(s:split(d)):map(string.strip) + penlight.tex.prt(penlight.tex.list2comma(t)) +end +function penlight.tex.split2items(s, d) + local t = penlight.List(s:split(d)):map(string.strip) + for n, v in ipairs(t) do + penlight.tex.prtn('\\item '..v) + end +end ---function penlight.array2d.map_slice1(func, L, i1, i2) -- map a function to a slice of an array, can use PlcExpr --- i2 = i2 or i1 --- local len = #L --- i1 = check_index(i1, len) --- i2 = check_index(i2, len) --- func = check_func(func) --- for i in penlight.seq.range(i1,i2) do --- L[i] = func(L[i]) --- end --- return L ---end - -- used this below when iter was not working.. - --i1, j1, i2, j2 = check_slice(M, i1, j1, i2, j2) - --for i in penlight.seq.range(i1,i2) do - -- for j in penlight.seq.range(j1,j2) do - --end - -- penlight may have fixed this ---local function check_index(ij, rc) -- converts array index to positive value if negative --- if type(ij) ~= 'number' then --- return 1 --- else --- if ij < 0 then --- ij = rc + ij + 1 --- elseif ij > rc then --- ij = rc --- elseif ij == 0 then --- ij = 1 --- end --- return ij --- end ---end ---local function check_slice(M, i1, j1, i2, j2) -- ensure a slice is valid; i.e. all positive numbers --- r, c = penlight.array2d.size(M) --- i1 = check_index(i1 or 1, r) --- i2 = check_index(i2 or r, r) --- j1 = check_index(j1 or 1, c) --- j2 = check_index(j2 or c, c) --- return i1, j1, i2, j2 ---end +-- +--\subsection*{Splitting strings} +--Splitting text (or a cmd) into oxford comma format via: +--\cmd{\splittocomma[expansion level]{text}{text to split on}}: +-- +--\begin{LTXexample}[width=0.3\linewidth] +-- \splittocomma{ j doe }{\and}-\\ +--\splittocomma{ j doe \and s else }{\and}-\\ +--\splittocomma{ j doe \and s else \and a per }{\and}-\\ +--\splittocomma{ j doe \and s else \and a per \and f guy}{\and}- +-- +--\def\authors{j doe \and s else \and a per \and f guy} +--\splittocomma[o]{\authors}{\and} +--\end{LTXexample} +-- +--The expansion level is up to two characters, \cmd{n|o|t|f}, to control the expansion of each argument. +-- +--You can do a similar string split but to \cmd{\item} instead of commas with \cmd{\splittoitems} +--\begin{LTXexample} +--\begin{itemize} +-- \splittoitems{kale\and john}{\and} +-- \splittoitems{kale -john -someone else}{-} +-- \splittoitems{1,2,3,4}{,} +--\end{itemize} +--\end{LTXexample} + + +-- +--\NewDocumentCommand{\splittocomma}{ O{nn} m m }{% +-- \MakeluastringCommands[nn]{#1}% +-- \luadirect{penlight.tex.split2comma(\plluastringA{#2},\plluastringB{#3})}% +--} +-- +--\NewDocumentCommand{\splittoitems}{ O{NN} m m }{% +-- \MakeluastringCommands[nn]{#1}% +-- \luadirect{penlight.tex.split2items(\plluastringA{#2},\plluastringB{#3})}% +--} diff --git a/macros/luatex/generic/penlightplus/penlightplus.pdf b/macros/luatex/generic/penlightplus/penlightplus.pdf Binary files differindex 2e37875101..7544f0d5cf 100644 --- a/macros/luatex/generic/penlightplus/penlightplus.pdf +++ b/macros/luatex/generic/penlightplus/penlightplus.pdf diff --git a/macros/luatex/generic/penlightplus/penlightplus.sty b/macros/luatex/generic/penlightplus/penlightplus.sty index 3c411d227a..7e33fbce93 100644 --- a/macros/luatex/generic/penlightplus/penlightplus.sty +++ b/macros/luatex/generic/penlightplus/penlightplus.sty @@ -1,6 +1,6 @@ % Kale Ewasiuk (kalekje@gmail.com) -% 2024-03-14 -% Copyright (C) 2021-2024 Kale Ewasiuk +% 2025-02-14 +% Copyright (C) 2021-2025 Kale Ewasiuk % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal @@ -22,12 +22,14 @@ % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE % OR OTHER DEALINGS IN THE SOFTWARE. -\ProvidesPackage{penlightplus}[2024-03-14] +\ProvidesPackage{penlightplus}[2025-02-14] \RequirePackage{luacode} \RequirePackage{luakeys} \RequirePackage[import]{penlight} \RequirePackage{etoolbox} +\RequirePackage{tokcycle} + \DeclareOption{globals}{\luadirect{__PL_GLOBALS__ = true}} \DeclareOption{pl}{\directlua{pl = penlight}} @@ -40,40 +42,42 @@ \global\newcommand{\writePDFmetadata}{\luadirect{penlight.tex.writePDFmetadata()}} -\NewDocumentCommand{\writePDFmetadatakv}{ s m }{ -\IfBooleanTF{#1}{% if *, overwrite everything +\NewDocumentCommand{\writePDFmetadatakv}{ s O{f} m }{% +\MakeluastringCommands[f]{#2}% +\IfBooleanTF{#1}{% if *, delete existing data \luadirect{ - __PDFmetadata__ = penlight.luakeys.parse(\luastring{#2}) - penlight.tex.writePDFmetadata() - }}{ + __PDFmetadata__ = penlight.tex.makePDFtablekv(\plluastringA{#3}) + }}{ % if no star, update \luadirect{ __PDFmetadata__ = __PDFmetadata__ or {} - penlight.tablex.update(__PDFmetadata__, penlight.luakeys.parse(\luastring{#2})) - penlight.tex.writePDFmetadata() - }} + penlight.tablex.update(__PDFmetadata__, penlight.tex.makePDFtablekv(\plluastringA{#3})) + }}% + \writePDFmetadata{}% } + \gdef\luastringT#1{\luastring{\unexpanded\expandafter\expandafter\expandafter{#1}}} % expand luastring twice \global\let\luastringF\luastring % fully expanded luastring +% +%\xtokcycleenvironment\luastringeenv +% {\addcytoks{##1}} +% {\processtoks{##1}} +% {\addcytoks[1]{##1}} +% {\addcytoks{##1}} +% {} +% {\cytoks\expandafter{\expandafter\luastringO\expandafter{\the\cytoks}}} +% +%\def\luastringE#1{\luastringeenv#1\endluastringeenv} +%\gdef\luastringE#1{\begin{luastringeenv#1\endluastringeenv} + + % allow control over expansion of arguments to a latex function \NewDocumentCommand{\MakeluastringCommands}{O{} m }{% #1 the desired commands #2 defaults \luadirect{penlight.tex.aliasluastring(\luastring{#2},\luastring{#1})}% } -\NewDocumentCommand{\splittocomma}{ O{nn} m m }{% - \MakeluastringCommands[nn]{#1}% - \luadirect{penlight.tex.split2comma(\plluastringA{#2},\plluastringB{#3})}% -} - -\NewDocumentCommand{\splittoitems}{ O{NN} m m }{% - \MakeluastringCommands[nn]{#1}% - \luadirect{penlight.tex.split2items(\plluastringA{#2},\plluastringB{#3})}% -} - - - @@ -83,127 +87,20 @@ \newtoggle{luaexpr}\togglefalse{luaexpr} -\begin{luacode*} - -\end{luacode*} - -\NewDocumentCommand{\ifluax}{m m O{}}{% if lua expression is true do {m} if not [o] - \luadirect{penlight.toggle_luaexpr(#1)}% +\NewDocumentCommand{\ifluax}{m +m +O{}}{% if lua expression is true do {m} if not [o] + \luadirect{penlight.toggle_luaexpr(\expanded{#1})}% \iftoggle{luaexpr}{#2}{#3}% \togglefalse{luaexpr}% safety set to false } -\NewDocumentCommand{\ifluaxv}{m m O{}}{\ifluax{penlight.hasval(#1)}{#2}[#3]}% if lua expression is truthy do {m} else [o] - - - -%%% tbls below - -\NewDocumentCommand{\tblnew}{m}{\luadirect{% initialize a tbl and set blank - penlight.tbls[\luastring{#1}] = {} - penlight.rec_tbl = \luastring{#1} -}} - -\NewDocumentCommand{\tblfrkv}{m +m O{}}{\luadirect{% - penlight.rec_tbl_opts = penlight.luakeys.parse(\luastring{#3}) - penlight.tbls[\luastring{#1}] = penlight.luakeys.parse(string.subpar(\luastring{#2}), penlight.rec_tbl_opts) - penlight.rec_tbl = \luastring{#1} -}} - -\NewDocumentCommand{\tblfrkvCD}{m +m O{}}{\tblfrkv{#1}{#2}[#3]\tblkvundefcheck\tbldefall{}{}} -%% tbl from key-vals, then check defaults, then define all keys using default format -\NewDocumentCommand{\tblfrkvNCD}{m +m O{}}{\tblfrkvN{#1}{#2}[#3]\tblkvundefcheck\tbldefall{}{}} - -\NewDocumentCommand{\tblfrkvN}{m +m O{}}{\luadirect{% - penlight.rec_tbl_opts = penlight.luakeys.parse(\luastring{#3}) - penlight.tbls[\luastring{#1}] = penlight.luakeys.parse(string.subpar(\luastringN{#2}), penlight.rec_tbl_opts) - penlight.rec_tbl = \luastring{#1} -}} - -\NewDocumentCommand{\tblfrcsv}{m +m O{}}{\tblfrkv{#1}{#2}[naked_as_value=true,#3]} - -\NewDocumentCommand{\tblfrcsvN}{m +m O{}}{\tblfrkvN{#1}{#2}[naked_as_value=true,#3]} - - -\NewDocumentCommand{\tblkvundefcheck}{}{\luadirect{penlight.check_recent_tbl_undefault()}}% check defaults list and throw error if foreign keys were used - - - -\NewDocumentCommand{\tblapp}{m m}{\luadirect{% append to a table (ie using integer index) with a value (second arg) # todo option for string or number - __tbl__ = penlight.get_tbl_name(\luastring{#1}) - table.insert(penlight.tbls[__tbl__], \luastring{#2}) -}} - -\NewDocumentCommand{\tblcon}{m m}{\luadirect{% concatenate to a table (ie using integer index) with a list of comma separated values (second arg) # - __tbl__ = penlight.get_tbl_name(\luastring{#1}) - for k, v in ipairs(penlight.luakeys.parse(string.subpar(\luastring{#2}), {naked_as_value=true})) do - table.insert(penlight.tbls[__tbl__], v) - end -}} - -\NewDocumentCommand{\tbladd}{m m}{\luadirect{% add a kv pair to a table - __tbl__, __key__ = penlight.get_tbl_index(\luastring{#1}, true) - penlight.tbls[__tbl__][__key__] = \luastring{#2} -}} - -\NewDocumentCommand{\tbladdN}{m m m}{\luadirect{% add a kv pair to a table - __tbl__, __key__ = penlight.get_tbl_index(\luastring{#1}, true) - penlight.tbls[__tbl__][__key__] = \luastringN{#2} -}} - - - - -\NewDocumentCommand{\tblchg}{ m }{\luadirect{% change recent table - penlight.rec_tbl = \luastring{#1} -}} - - -\NewDocumentCommand{\tblget}{m}{\luadirect{% get an item - penlight.get_tbl_item(\luastring{#1}, true) -}} - -\NewDocumentCommand{\tblset}{m m}{\luadirect{% set item with {value} - penlight.set_tbl_item(\luastring{#1}, \luastring{#2}) -}} - - -\NewDocumentCommand{\tbldef}{ m m }{\luadirect{penlight.def_tbl(\luastring{#1}, \luastring{#2})}} - -% define a table, use * to make global definition -\NewDocumentCommand{\tblgdef}{ m m }{\luadirect{penlight.def_tbl(\luastring{#1}, \luastring{#2}, 'global')}} - -\NewDocumentCommand{\tbldefall}{ m m }{\luadirect{penlight.def_tbl_all(\luastring{#1}, \luastring{#2})}} - -\NewDocumentCommand{\tbldefxy}{ m m }{\luadirect{penlight.def_tbl_coords(\luastring{#1}, \luastring{#2})}}% define #2x and #2y from a space delimited x-y pair - -\NewDocumentCommand{\tblif}{m m O{}}{\ifluax{penlight.get_tbl_item(\luastring{#1})}{#2}[#3]} - -\NewDocumentCommand{\tblifv}{m m O{}}{\ifluaxv{penlight.get_tbl_item(\luastring{#1})}{#2}[#3]} - -\NewDocumentCommand{\tblprt}{m}{\luadirect{penlight.wrth(penlight.get_tbl(\luastring{#1}),'penlightplus table: '..\luastring{#1})}} - +\NewDocumentCommand{\ifluaxv}{m +m +O{}}{\ifluax{penlight.hasval(#1)}{#2}[#3]}% if lua expression is truthy do {m} else [o] +\NewDocumentCommand{\caseswitch}{s m +m}{\ignorespaces\luadirect{penlight.caseswitch(\luastring{#1},\luastring{#2},\luastringN{#3})}\unskip} +% argument 1 is star option, which throws an error if case is not found +% argument 2 is the case, fully expanded +% argument 3 is a luakeys table of options, not expanded -% legacy code, delete this -\let\kvtblundefcheck\tblkvundefcheck -\NewDocumentCommand{\tbladdo}{m m m}{\luadirect{% add a kv pair to a table - __tbl__ = penlight.get_tbl_name(\luastring{#1}) - penlight.tbls[__tbl__][\luastring{#2}] = \luastring{#3} -}} -\NewDocumentCommand{\tbladdNo}{m m m}{\luadirect{% add a kv pair to a table - __tbl__ = penlight.get_tbl_name(\luastring{#1}) - penlight.tbls[__tbl__][\luastring{#2}] = \luastringN{#3} -}} -\let\chgtbl\tblchg -\let\newtbl\tblnew -\let\gettbl\tblget -\let\settbl\tblset -\let\deftbl\tbldef -\let\gdeftbl\tblgdef -\let\iftbl\tblif -\let\iftblv\tblifv
\ No newline at end of file diff --git a/macros/luatex/generic/penlightplus/penlightplus.tex b/macros/luatex/generic/penlightplus/penlightplus.tex index 015dac98ef..78b5ee846a 100644 --- a/macros/luatex/generic/penlightplus/penlightplus.tex +++ b/macros/luatex/generic/penlightplus/penlightplus.tex @@ -1,6 +1,6 @@ % Kale Ewasiuk (kalekje@gmail.com) -% 2024-03-14 -% Copyright (C) 2021-2024 Kale Ewasiuk +% 2025-02-14 +% Copyright (C) 2021-2025 Kale Ewasiuk % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal @@ -24,6 +24,7 @@ \documentclass[11pt,parskip=half]{scrartcl} +\usepackage[default]{lato} \setlength{\parindent}{0ex} \newcommand{\llcmd}[1]{\leavevmode\llap{\texttt{\detokenize{#1}}}} \newcommand{\cmd}[1]{\texttt{\detokenize{#1}}} @@ -50,7 +51,7 @@ \addtokomafont{date}{\raggedright} \author{Kale Ewasiuk (\url{kalekje@gmail.com})} \usepackage[yyyymmdd]{datetime}\renewcommand{\dateseparator}{--} -\date{\today} +\date{\ \today} \RequirePackage[pl,globals]{penlightplus} @@ -59,18 +60,43 @@ \subtitle{Additions to the Penlight Lua Libraries} - \begin{document} % \maketitle -This package first loads the \cmd{[import]penlight} package.\\ +\section*{Package Options and Set-Up} + +This package first loads the LaTeX \cmd{penlight[import]} package:\\ +\url{https://ctan.org/pkg/penlight?lang=en}.\\ +Documentation for the Lua penlight package can be found here:\\ \url{https://lunarmodules.github.io/Penlight/index.html}.\\ The \texttt{pl} option may be passed to this package to create an alias for \cmd{penlight}.\\ -\texttt{globals} option may be used to make several of the functions global (as discussed below). +A portion of this package to facilitate the creation, modification, and usage of the Lua table data structure +through a LaTeX interface has been moved to a separate package called \cmd{luatbls}:\\ +\url{https://ctan.org/pkg/luatbls}. + + +The following global Lua variables are defined: + +\cmd{__SKIP_TEX__} If using the \cmd{penlightplus} package with \cmd{texlua} (good for troubleshooting), set this global before loading \cmd{penlight}\\ +\cmd{__PL_GLOBALS__} If using this package with \cmd{texlua} and you want to set some functions as globals (described in next sections), set this variable to \cmd{true} before loading \cmd{penlight}\\ +\cmd{__PL_NO_HYPERREF__} a flag used to change the behaviour of some functions, depending on if you don't use the hyperref package\\ +\cmd{__PDFmetadata__} a table used to store PDF meta-data for pdfx package. + + +\subsubsection*{globals option} +Since this package uses the penlight \cmd{import} option, +all \cmd{stringx} functions are injected into the \cmd{string} meta-table and you can use them like so: \cmd{'first name':upfirst()}. +But if the package option \cmd{globals} is used, many additional globals are set for easier scripting. +\cmd{pl.hasval}, \cmd{pl.COMP}, \cmd{pl.utils.kpairs}, \cmd{pl.utils.npairs} become globals. +\cmd{pl.tablex} is aliased as \cmd{tbx} (which also includes all native Lua table functions), and +\cmd{pl.array2d} is aliased as \cmd{a2d}. + +%If you want global \cmd{pl.tex} functions and variables, call \cmd{pl.make_tex_global()}.\\ + \subsection*{texlua usage} -If you want to use penlightplus.lua with the \texttt{texlua} interpreter +If you want to use \cmd{penlightplus.lua} with the \texttt{texlua} interpreter (no document is made, but useful for testing your Lua code), you can access it by setting \cmd{__SKIP_TEX__ = true} before loading. For example: \begin{verbatim} @@ -88,83 +114,161 @@ require'penlightplus' +\section*{penlight additions} -The following global Lua variables are defined: +Some functionality is added to penlight and Lua. -\cmd{__SKIP_TEX__} If using the \cmd{penlightplus} package with \cmd{texlua} (good for troubleshooting), set this global before loading \cmd{penlight}\\ -The gloals flags below are taken care of in the package options:\\ -\cmd{__PL_GLOBALS__} If using package with \cmd{texlua} and you don't want to set some globals (described in next sections), set this global before to \cmd{true} loading \cmd{penlight}\\ -\cmd{__PL_NO_HYPERREF__} a flag used to change the behaviour of a function, depending on if you don't use the hyperref package\\ -\cmd{__PDFmetadata__} a table used to store PDF meta-data +\subsection*{General Additions} +\llcmd{pl.hasval(x)} Python-like boolean testing\\ +\llcmd{COMP'xyz'()} Python-like comprehensions:\\\url{https://lunarmodules.github.io/Penlight/libraries/pl.comprehension.html}\\ -\subsubsection*{global extras} -If the package option \cmd{globals} is used, many additional globals are set for easier scripting. -\cmd{pl.hasval}, \cmd{pl.COMP}, \cmd{pl.utils.kpairs}, \cmd{pl.utils.npairs} become globals. -\cmd{pl.tablex} is aliased as \cmd{pl.tbx and tbx} (which also includes all native Lua table functions), and -\cmd{pl.array2d} is aliased as \cmd{pl.a2d and a2d}. +\llcmd{_Gdot(s)} return a global (may contain dots) from string -If you want global \cmd{pl.tex} funcs and vars, call \cmd{pl.make_tex_global()}\\ +\cmd{clone_function(f)} returns a cloned function\\ +\cmd{operator.strgt(a,b)} compares strings a greater than b (useful for sorting)\\ +\cmd{operator.strlt(a,b)} compares strings a less than b (useful for sorting)\\ +\llcmd{math.mod(n,d)} math modulus\\ +\cmd{math.mod2(n)} mod with base 2\\ -\subsubsection*{penlight additions} +\llcmd{pl.utils.}\cmd{filterfiles}\cmd{(dir,filt,rec)} Get files from dir and apply glob-like filters. Set rec to \cmd{true} to include sub directories\\ -Some functionality is added to penlight and Lua. +\llcmd{pl.}\cmd{trysplitcomma(s)} will try to split a string on comma (and strip), but if is a table, leave it -\llcmd{pl.hasval(x)} Python-like boolean testing\\ -\llcmd{COMP'xyz'()} Python-like comprehensions:\\\url{https://lunarmodules.github.io/Penlight/libraries/pl.comprehension.html}\\ +\llcmd{pl.}\cmd{findfiles{}} or \cmd{findfiles'kv'} is an updated version of \cmd{filterfiles}. Pass a table or a luakeys +kv string as the only argument. Valid table options are: \cmd{fn, dir, ext, sub}. + +\llcmd{pl.}\cmd{char(n)} return letter corresponding to 1=a, 2=b, etc.\\ +\llcmd{pl.}\cmd{Char(n)} return letter corresponding to 1=A, 2=B, etc.\\ -\cmd{clone_function(f)} returns a cloned function\\ -\cmd{operator.strgt(a,b)} compares strings a greater than b (useful for sorting)\\ -\cmd{operator.strlt(a,b)} compares strings a less than b (useful for sorting)\\ -\llcmd{math.mod(n,d)}, \cmd{math.mod2(n)} math modulous\\ + +\subsection*{string additions} + +\begin{luacode*} + pl.wrth(('a = 1, b =2 '):split2('=',',',false)) +\end{luacode*} \llcmd{string.}\cmd{upfirst(s)} uppercase first letter\\ \llcmd{string.}\cmd{delspace(s)} delete all spaces\\ \llcmd{string.}\cmd{trimfl(s)}remove first and last chars\\ +\llcmd{string.}\cmd{splitstrip(s, sp, st)} split by sp (default comma) followed by strip (default whitespace)\\ +\llcmd{string.}\cmd{split2(s, sep1, sep2, st)} split a string twice (creates a 2d array), first by sep1 (default comma), then by sep2 (default =), with option to strip (default true)\\ \llcmd{string.}\cmd{appif(s, append, bool, alternate)}\\ \llcmd{string.}\cmd{gfirst(s, t)}return first matched patter from an array of patterns t\\ %\llcmd{string.}\cmd{gnum(s)} extract a number from a string\\ -\llcmd{string.}\cmd{gextract(s)} extract a pattern from a string (returns capture and new string with capture removed)\\ +\llcmd{string.}\cmd{gextract(s,pat)} extract a pattern from a string (returns capture and new string with capture removed)\\ +\llcmd{string.}\cmd{gextrct(s,pat,num,join)} extract a pattern from a string (returns capture and new string with capture removed), +can specify a number of extractions. if join is specified, captures will be joined, otherwise a list is returned\\ \llcmd{string.}\cmd{totable(s)} string a table of characters\\ \llcmd{string.}\cmd{tolist(s)} string a table of characters\\ \llcmd{string.}\cmd{containsany(s,t)} checks if any of the array of strings \cmd{t} are in \cmd{s} using \cmd{string.find}\\ \llcmd{string.}\cmd{containsanycase(s,t)} case-insensitive version\\ \llcmd{string.}\cmd{delspace(s)} clear spaces from string\\ \llcmd{string.}\cmd{subpar(s, c)} replaces \cmd{\\par} with a character of your choice default is space\\ +\llcmd{string.}\cmd{istexdim(s)} checks if a string is a valid tex dimension (eg. mm, pt, sp)\\ \llcmd{string.}\cmd{fmt(s, t, fmt)} format a string like \cmd{format_operator}, but with a few improvements. \cmd{t} can be an array (reference items like \cmd{\$1} in the string), and \cmd{fmt} can be a table of formats (keys correspond to those in \cmd{t}), or a string that is processed by luakeys.\\ -\llcmd{string.}\cmd{parsekv(s, opts)} parse a string using \cmd{penlight.luakeys}. A string or table can be used for opts. +\llcmd{string.}\cmd{parsekv(s, opts)} parse a string using a \cmd{luakeys} instance (\cmd{penlight.luakeys}). A kv-string or table can be used for opts.\\ +\llcmd{string.}\cmd{hasnoalpha(s)} string has no letters\\ +\llcmd{string.}\cmd{hasnonum(s)} string has no numbers\\ +\llcmd{string.}\cmd{isvarlike(s)} string is 'variable-like', starts with a letter or underscore and then is alphanumeric or has underscores after \\ +%\begin{luacode*} +% local s1, s2 = ('12,13'):gxtrct('%d',nil) +% pl.wrth({s1,s2}, 'err rat') +%--% pl.wrth(('_'):isvarlike(), 'llll') +%--% pl.wrth(('1_1k'):isvarlike(), ',,') +%--% pl.wrth(('kale_1'):isvarlike(), '') +%--% pl.wrth(('kale_1'):isvarlike(), '') +%\end{luacode*} +\subsection*{tablex additions} \llcmd{tablex.}\cmd{fmt(t, f)} format a table with table or key-value string f\\ +\llcmd{tablex.}\cmd{list2comma(t)} Use oxford comma type listing, e.g. A, B, and C\\ \llcmd{tablex.}\cmd{strinds(t)} convert integer indexes to string indices (1 -> '1')\\ \llcmd{tablex.}\cmd{filterstr(t,e,case)} keep only values in table t that contain expression e, case insensitive by default.\\ \llcmd{tablex.}\cmd{mapslice(f,t,i1,i2)} map a function to elements between i1 and i2\\ \llcmd{tablex.}\cmd{listcontains(t,v)} checks if a value is in a array-style list \\ +\llcmd{tablex.}\cmd{kkeys(t)} returns keys that are non-numeric (like kpairs) \\ +\llcmd{tablex.}\cmd{train(t,seq,reind)} return a sable based on \cmd{pl.seq.tbltrain}, \cmd{reind} will make numerical keys ordered from 1 \\ +%\begin{luacode*} +% local t = {1,2,3,a='A',b='B'} +% penlight.wrth(penlight.tablex.train(t,'2:3,*',true),'kew') +%\end{luacode*} +\subsection*{List additions} +\llcmd{List:}\cmd{inject(l2, pos)} injects a list (l2) into a list at position. Set pos=0 to inject at end. +\begin{luacode*} + l = pl.List{1,2,3,4,5} + pl.wrth(l:inject({'a','b','c'},0), 'INJECTED') +\end{luacode*} + +\begin{luacode*} + f = pl.findfiles'fn=pen*, ext=".lua, .sty, .pdf", sub=false' + pl.wrth(f, 'FILES') + --penlight.wrth(penlight.dir.getallfiles('.', '*pen*'), 'ALLFILES') + pl.wrth(pl.file.access_time('penlightplus'), 'ACCESS TIME') + pl.wrth(pl.file.access_time('penlightpluxs'), 'ACCESS TIME') + if xdasdsa == nil then + penlight.utils.on_error('error') + --texio.write_nl('LaTeX Warning: FK )') + -- return penlight.utils.raise('Invalid path was attempted') + -- penlight.utils.on_error('stop') + -- return penlight.utils.raise('...') + end +\end{luacode*} -\llcmd{pl.}\cmd{char(n)} return letter corresponding to 1=a, 2=b, etc.\\ -\llcmd{pl.}\cmd{Char(n)} return letter corresponding to 1=A, 2=B, etc.\\ +\subsubsection*{seq additions} +A syntax to produce sequences or a 'train' of numbers is provided. This may be useful for including pages from a pdf, or selecting rows of a table with a concise syntax.\\ +\llcmd{seq.}\cmd{prod(t1, t2)} iterate over the cartesian product of t1 and t2\\ +\llcmd{seq.}\cmd{train(trn, len)} produces a pl.List according to the arguments\\ +\llcmd{seq.}\cmd{itrain(trn, len)} produces an iterator according to the arguments.\\ +\llcmd{seq.}\cmd{tbltrain(tbl, trn)} produces an iterator over a table + +An example syntax for \cmd{trn} is \cmd{'i1, i2, r1:r2', etc.} where \cmd{i1} and \cmd{i2} are individual indexes/elements, separated by \cmd{,} and +\cmd{r1:r2} is a range (inclusive of end-point) denoted with a \cmd{:}. The range format follows python's numpy indexing, and +a 'stride' can be given by including a second colon like \cmd{::2 -> is 1,3,5,...}, or \cmd{2::3 -> 2,5,8,...}. +Negative numbers can be used to index relative to the length of the table, eg, \cmd{-1 -> len}, but +if length is not given, negative indexing cannot be used and a number after the first colon must be provided. +A missing left-number on the colon assumes \cmd{1}, and missing right number assumes \cmd{len}. A missing 'stride' (number after the optional second colon) assumes a value of 1.\\ +Variable-like strings can be given in place of numbers, which are assumed to be keys for a table instead.\\ +For \cmd{tbltrain} a \cmd{*} can be passed to iterate over all keys. + +The default colon and comma separators for ranges and elements can be set with \cmd{seq.train_range_sep} and \cmd{seq.train_element_sep}, respectively. +\begin{LTXexample}[width=0.5\linewidth] +\begin{luacode*} + for i in + pl.seq.itrain('1, :, 6, 0::2, -3 ', + 5) do + tex.print(i..',') + end + local t = {'n1','n2',a='A',b='B',c='C'} + for k, v in + pl.seq.tbltrain(t, '*,c,1') do + tex.print(tostring(k)..'='..tostring(v)..'; ') + end +\end{luacode*} +\end{LTXexample} -\llcmd{pl.utils.}\cmd{filterfiles}\cmd{(dir,filt,rec)} Get files from dir and apply glob-like filters. Set rec to \cmd{true} to include sub directories\\ -\subsubsection*{A \cmd{pl.tex.} module is added} +\subsection*{A \cmd{pl.tex.} module is added} \llcmd{add_bkt}\cmd{_cnt(n), }\cmd{close_bkt_cnt(n), reset_bkt_cnt} functions to keep track of adding curly brackets as strings. \cmd{add} will return \cmd{n} (default 1) \{'s and increment a counter. \cmd{close} will return \cmd{n} \}'s (default will close all brackets) and decrement.\\ \llcmd{_NumBkts} internal integer for tracking the number of brackets\\ \llcmd{opencmd(cs)} prints \cmd{\cs}\{ and adds to the bracket counters.\\ +\cmd{openenv(env,opts)} prints a \cmd{\begin{env}[opts]}, and stores the enironment in a list so it can be later closed with \cmd{closeenv{num}} \\ \llcmd{xNoValue,}\cmd{xTrue,xFalse}: \cmd{xparse} equivalents for commands\\ \\ \llcmd{prt(x),prtn(x)} print without or with a newline at end. Tries to help with special characters or numbers printing.\\ \llcmd{prtl(l),prtt(t)} print a literal string, or table\\ \llcmd{wrt(x), wrtn(x)} write to log\\ -\llcmd{wrh}\cmd{(s1, s2)} pretty-print something to console. S2 is a flag to help you find., alias is \cmd{help_wrt}, also in \cmd{pl.wrth}\\ +\llcmd{wrth}\cmd{(s1, s2)} pretty-print something to console. S2 is a flag to help you find., alias is \cmd{help_wrt}, also in \cmd{pl.wrth}\\ \llcmd{prt_array2d(tt)} pretty print a 2d array\\ \\ \llcmd{pkgwarn}\cmd{(pkg, msg1, msg2)} throw a package warning\\ @@ -178,29 +282,45 @@ is processed by luakeys.\\ \llcmd{deccmd}\cmd{(cs, dft, overwrite)} declare a command. If \cmd{dft} (default) is \cmd{nil}, \cmd{cs} is set to a package warning saying \cmd{'cs' was declared and used in document, but never set}. If \cmd{overwrite} is true, it will overwrite an existing command (using \cmd{defcmd}), otherwise, it will throw error like \cmd{newcmd}.\\ +\\ \llcmd{get_ref_info(l)}accesses the \cmd{\r@label} and returns a table\\ -\subsubsection*{Recording latex input} + + + +\subsection*{Recording LaTeX input as a lua variable} \cmd{penlight.tex.startrecording()} start recording input buffer without printing to latex\\ \cmd{penlight.tex.stoprecording()} stop recording input buffer\\ \cmd{penlight.tex.readbuf()} internal-use function that interprets the buffer. This will ignore an environment ending (eg. \cmd{end{envir}})\\\\ \cmd{penlight.tex.recordedbuf} the string variable where the recorded buffer is stored\\ +\section*{penlightplus LaTeX Macros} \subsection*{Macro helpers} \cmd{\MakeluastringCommands[def]{spec}} will let \cmd{\plluastring(A|B|C..)} be \cmd{\luastring(N|O|T|F)} -based on the letters that \cmd{spec} is set to (or \cmd{def} if nothing is provided) +based on the letters that \cmd{spec} is set to (or \cmd{def}(ault) if nothing is provided) This is useful if you want to write a command with flexibility on argument expansion. The user can specify \cmd{n}, \cmd{o}, \cmd{t}, and \cmd{f} (case insensitve) if they want -no, once, twice, or full expansion. For example, we can control the expansion of args 2 and 3 with arg 1: +none, once, twice, or full expansion. + +%\cmd{e} expansion expands every token in the argument only once. +%\cmd{\luastringE{m}}, expands each token once (note that \cmd{\luastringO} only expands the first token once) + + + +Variants of luastring are added:\\ +\cmd{\luastringF{m}} = \cmd{\luastring{m}} \\ +\cmd{\luastringT{m}}, expand the first token of m twice\\ + +For example, we can control the expansion of args 2 and 3 with arg 1: \begin{verbatim} \NewDocumentCommand{\splittocomma}{ O{nn} m m }{% - \MakeluastringCommands[nn]{#1}% - \luadirect{penlight.tex.split2comma(\plluastringA{#2},\plluastringB{#3})}% -} + \MakeluastringCommands[nn]{#1}% + \luadirect{penlight.tex.split2comma(\plluastringA{#2},\plluastringB{#3})}% + } \end{verbatim} % BELOW IS FOR TROUBLESHOOTING ABOVE @@ -222,9 +342,10 @@ no, once, twice, or full expansion. For example, we can control the expansion of %\luastringExpTest{ n o t f }{\NOTexp} -\subsection*{Lua boolean expressions for LaTeX conditionals} +\subsection*{Lua boolean expressions} -\cmd{\ifluax{<Lua expr>}{<do if true>}[<do if false>]} and\\ \cmd{\ifluax{<Lua expr>}{<do if true>}[<do if false>]} for truthy (uses \cmd{penlight.hasval}) +\cmd{\ifluax{<Lua expr>}{<do if true>}[<do if false>]} and\\ +\cmd{\ifluaxv{<Lua expr>}{<do if true>}[<do if false>]} for truthy (uses \cmd{penlight.hasval}). The argument is expanded. \begin{LTXexample}[width=0.3\linewidth] \ifluax{3^3 == 27}{3*3*3 is 27}[WRONG]\\ @@ -232,214 +353,130 @@ no, once, twice, or full expansion. For example, we can control the expansion of \ifluax{not true}{tRuE}[fAlSe]\\ \ifluax{''}{TRUE}[FALSE]\\ \ifluaxv{''}{true}[false]\\ +\def\XXX{8} +\ifluax{\XXX == 8}{Yes}[No] \end{LTXexample} -\subsection*{Creating and using Lua tables in LaTeX} -\cmd{penlightplus} provides a Lua-table interface. Tables are stored in the -\cmd{penlight.tbls} table. - -%%% - -\cmd{\tblnew{t}} declares a new table with name \cmd{t}\\ -\cmd{\tblchg{t}} changes the 'recent' table\\ -\cmd{\tblfrkv{t}{key-val string}[luakeys opts]} new table from key-vals using \cmd{luakeys} \\ -\cmd{\tblfrkvN{t}{key-val string}[luakeys opts]} does not expand key-val string \cmd{luakeys} \\ -\cmd{\tblfrkvCD{t}{key-val string}[luakeys opts]} define tbl from key-val, -check if any were not defined as defaults (see below), and then push all to definitions\\ -\cmd{\tblkvundefcheck} will throw an error if you use define a table from key-values -and use a key that was not specified in the luakeys parse options via \cmd{opts.defaults} or \cmd{opts.defs}. - \cmd{\tblfrcsv{t}{csv}} a shorthand \cmd{\tblfrkv{t}{csv}[naked_as_value=true,opts]}, a good way to convert a comma-separated list to an array\\ - \cmd{\tblfrcsvN{t}{csv}} same as above, but the csv is not expanded. -\cmd{\tblset{i}{v}} sets a value of the table/index \cmd{i} to \cmd{v}\\ -\cmd{\tblget{i}} gets the value and \cmd{tex.sprint()}s it\\ -\cmd{\tbladd{i}{v}} add a new value to a table using index method\\ -\cmd{\tbladdN{i}{v}} above, but don't expand the value argument\\ -\cmd{\tblcon{t}{csv}} concatenate an array-style csv\\ -\cmd{\tblapp{t}{v}} append a value (integer-wise) to a table\\ -\cmd{\tbldef{i}{d}} pushes the value to macro \cmd{d}\\ -\cmd{\tbldefall{t}{d}} define all item in table \cmd{t} (use recent if blank) with format \cmd{d<key>} where d is your prefix. If d is blank, keys will be defined as \cmd{\dtbl<t><k>} -\cmd{\tblgdef{i}{d}} pushes the defined value to a global\\ -\cmd{\tbldefxy{i}{d}} splits the value of item by spaces creates two definitions \cmd{\dx} and \cmd{\dy}. Useful for pasing tikz coordinates like \cmd{xy=0 5}\\ -For definiting tables, if \cmd{d} is blank, commands are defined as \cmd{dtbl<t><k>}\\ -\cmd{\iftbl{i}{tr}[fa]} runs code \cmd{ta} if the item is true else \cmd{fr}\\ -\cmd{\iftblv{i}{tr}[fa]} runs code \cmd{ta} if the item is truthy else \cmd{fr}\\ - -\cmd{\tblprt{t}} print the table in console - -There are 3 ways to use the index (placeholder \cmd{{i}} above). -\cmd{t.key} where \cmd{t} is the table name and \cmd{key} is a string key, -\cmd{t/int} where \cmd{int} is an integer index (ie. uses \cmd{t[int]}, note that negative indexes are allowered where -1 is the last element), -or simply use \cmd{ind} without the table name, where the assumed table is the last one that was created or changed to, (passing a number will used as an integer index). -\enlargethispage{2em} -\begin{LTXexample}[width=0.3\linewidth] -\tblfrkv{my}{a,b,c,first=john,last=smith}% - [defaults={x=0,1=one,n=false,y=yes}] -\tblget{my.a}\\ -\tblset{a}{tRuE!!} -\tblget{a}\\ -\tblget{my.x}\\ -\tblget{.x}\\ -\tbladd{my.newkey}{val}\tblget{newkey}\\ -\tbladd{nk}{VAL}\tblget{nk}\\ -\tblif{n}{tr}[fa]\\ -\tblifv{n}{TR}[FA]\\ -\tblif{my.y}{Tr}[Fa]\\ -\tblifv{y}{tR}[fA]\\ -%% \kvtblundefcheck % would throw error -\tbldef{my.first}{mydef} \mydef\\ -\tbldef{first}{}\dtblmyfirst\\ -{\tbldef{last}{mydef} \mydef} \mydef\\ -{\tblgdef{last}{mydef}} \mydef\\ - -\tbldefall{}{}\dtblmyfirst\\ -\tbldefall{my}{DEF}\DEFfirst - -\tblset{my.a}{12 36} -\tbldefxy{my.a}{coord} (\coordx,\coordy) -\tbldefxy{my.a}{} (\dtblmyax,\dtblmyay) -\tbldefxy{a}{} (\dtblmyax,\dtblmyay) - -\tblfrcsv{me}{a,b,"c,see",d,e} -\tblget{me/1},\tblget{2}\\ -\tblget{3}\\ -\tblset{me/4}{D}\tblget{me/4}\tblget{/4}\\ -\tblset{5}{E}\tblget{5}\\ -\tblget{-2},\tblget{me/-1}\\ -\tblget{/-3}\\ -%% \tblget{k} % would throw error - -\tblfrkvCD{M}{a=A,b=B,d=D}[defaults={a,b,c,d}] -\dtblMa \dtblMb \dtblMc \dtblMd +\subsection*{Case-switch for Conditionals} + +\cmd{\caseswitch{case}{kev-val choices}} The starred version will throw an error if the case is not found. +Use \_\_ as a placeholder for a case that isn't matched. The case is fully expanded and interpreted as a lua string. + +%TODO consider a case switch wth placeholder expressions? that would be cool. \_1 == 8 for example. +\begin{LTXexample}[width=0.3\linewidth] +\def\caseswitchexample{\caseswitch{\mycase}{dog=DOG, cat=CAT, __=INVALID}} +\def\mycase{dog} \caseswitchexample \\ +\def\mycase{human} \caseswitchexample \end{LTXexample} +%\caseswitch*{\mycase}{dog=DOG, cat=CAT, __=INVALID} -%\tblfrcsv{me}{ -%Hello=world, -% -%Bonjour=terre, -%} -%\tblget{Hello} -%\tblget{Bonjour} -Note: for this versions: all latex tbl commands are now prefixed with \cmd{tbl}, eg., \cmd{tblget}, \cmd{tblset}. -Old-style commands eg. \cmd{gettbl} will be kept as aliases for a few more releases then removed. -\subsubsection*{A practical tbl example} -\begin{LTXexample} -\begin{luacode*} - function prt_pyth() - t = pl.tbls.pyth - if not t.a then - pl.tex.pkgerror('must pass a= to \\pyth') - elseif not t.b then - t.b = (tonumber(t.c)^2 - - tonumber(t.a)^2)^0.5 - elseif not t.c then - t.c = (tonumber(t.a)^2 + - tonumber(t.b)^2)^0.5 - end - local t = pl.tbx.fmt(t,'.'..t.d..'f') -- format table according to d decimals - s = 'Right-angle sides a=$a and b=$b form a hypotenuse of c=$c' - pl.tex.prt(s:fmt(t)) - end -\end{luacode*} -\NewDocumentCommand{\pyth}{m}{% - \tblfrkv{pyth}{#1}[defaults={a=false,b=false,c=false,d=0,e=extras}] - \luadirect{prt_pyth()}% -} -\pyth{a=3,c=5}\\ -\pyth{a=3.2,b=4.2,d=2}\\ -C: \tblget{c} +\subsection*{PDF meta data (for pdfx package)} +\cmd{\writePDFmetadatakv*[x]{kv}} Take a key-value string (eg. \cmd{title=whatever, author=me}) and then writes to the \cmd{jobname.xmpdata} file, which is used by pdfx. +\cmd{*} will first clear \cmd{__PDFmetadata__} which is the table variable that stores the metadata. +The un-starred version updates that table. +You can control the expansion of the key-val argument with \cmd{[x]}, which is fully expanded by default. +Command sequences are ultimately stripped from the values, except for \cmd{\and} is converted to \cmd{\sep} for pdfx usage (\url{https://texdoc.org/serve/pdfx/0}). +\\ + +\cmd{\writePDFmetadata} runs the lua function \cmd{penlight.tex.writePDFmetadata()}, +which pushes the lua variable \cmd{__PDFmetadata__} (a table) to the xmpdata file. +This might be useful if you're updating \cmd{__PDFmetadata__} by some other means. + +\def\thekeywords{A\and B\and C} +\def\thekeywords{ABC} +\begin{LTXexample} +\writePDFmetadatakv{author=Some One} % +\writePDFmetadatakv*[n]{author=Kale \and You\xspace} % Overwrites above. Does not expant kv +\writePDFmetadatakv{date=2024-02-01} \end{LTXexample} -\subsection*{Splitting strings} -Splitting text (or a cmd) into oxford comma format via: -\cmd{\splittocomma[expansion level]{text}{text to split on}}: -\begin{LTXexample}[width=0.3\linewidth] --\splittocomma{ j doe }{\and}-\\ --\splittocomma{ j doe \and s else }{\and}-\\ --\splittocomma{ j doe \and s else \and a per }{\and}-\\ --\splittocomma{ j doe \and s else \and a per \and f guy}{\and}- +%\writePDFmetadatakv{datxe=2024-02-01} % would throw error, invalid key +%\writePDFmetadatakv[E]{keywords=\thekeywords} % -\def\authors{j doe \and s else \and a per \and f guy} -\splittocomma[o]{\authors}{\and} -\end{LTXexample} +%\luadirect{texio.write_nl(\luastringE{keywords=\thekeywords})} -The expansion level is up to two characters, \cmd{n|o|t|f}, to control the expansion of each argument. -You can do a similar string split but to \cmd{\item} instead of commas with \cmd{\splittoitems} -\begin{LTXexample} -\begin{itemize} - \splittoitems{kale\and john}{\and} - \splittoitems{kale -john -someone else}{-} - \splittoitems{1,2,3,4}{,} -\end{itemize} -\end{LTXexample} + + +%%%%% SAND BOX +% +%\xtokcycleenvironment\luastringAenv +% {\addcytoks{##1}} +% {\processtoks{##1}} +% {\addcytoks[1]{##1}} +% {\addcytoks{##1}} +% {} +% {\cytoks\expandafter{\expandafter\luastringO\expandafter{\the\cytoks}}} +% +%\def\luastringA#1{\luastringAenv#1\endluastringAenv} +%\def\zzz{Hi Mom} +%\NewDocumentCommand{\testcommand}{m}{% +% \luastringA{#1} % this works as requested :) +%% \luadirect{texio.write_nl(\luastringA{#1}..' <<<')} +% } +% +%\luastringA{Hmmm. \zzz.} +%\testcommand{Hmmm. \zzz.} -\subsubsection*{PDF meta data (for pdfx package)} -\cmd{\writePDFmetadatakv*{m}} Take a key-value string (eg. \cmd{title=whatever, author=me}) and writes to the \cmd{jobname.xmpdata} file, to be used by pdfx. \cmd{*} will first clear the data\\ -\cmd{\writePDFmetadata} runs the lua function \cmd{penlight.tex.writePDFmetadata()}, -which pushes the lua variable \cmd{__PDFmetadata__} (a table) to the xmpdata file. -%\pyth{} % erro -%\begin{luacode*} -% pl.tex.wrth(('a,b,c=3'):parsekv('!naked_as_value'), 'dumy') -%\end{luacode*} +% todo why isnt this working??? -% \tblfrkv{tbl_def}{kale=cool,paul=gay,craig=fun} -% \tblfrkv{tbl}{kale,paul=gay} %[naked_as_value=true] -% -% \tblget{tbl}{kale}% -% \tblget{tbl}{paul}% -% \tblget{tbl}{craig}% -% -% \tblupd{tbl_def}{tbl}% + + + + + +%\writePDFmetadatakv{datxe=2024-02-01} % would throw error, invalid key +%\writePDFmetadatakv[E]{keywords=\thekeywords} % + +%\luadirect{texio.write_nl(\luastringE{keywords=\thekeywords})} + + + + +%%%%% SAND BOX % -% \tblfrkvII{tbl}{kale=cool,paul=gay,craig=fun}{kale=weak,paul=sad} -% \tblget{tbl}{craig}% -% \tblget{tbl}{paul}% -% \tblget{tbl}{kale}% +%\xtokcycleenvironment\luastringAenv +% {\addcytoks{##1}} +% {\processtoks{##1}} +% {\addcytoks[1]{##1}} +% {\addcytoks{##1}} +% {} +% {\cytoks\expandafter{\expandafter\luastringO\expandafter{\the\cytoks}}} % -% \NewDocumentCommand{\THINg}{ O{} m}{% -% \tblfrkvII{setti}{color=red,size=small}{#1} % make settings and update based on [arg=] -% {\color{\tblget{setti}{color}}\tblget{setti}{size} #2} -% } +%\def\luastringA#1{\luastringAenv#1\endluastringAenv} +%\def\zzz{Hi Mom} +%\NewDocumentCommand{\testcommand}{m}{% +% \luastringA{#1} % this works as requested :) +%% \luadirect{texio.write_nl(\luastringA{#1}..' <<<')} +% } % -% \THINg[color=blue,size=tiny]{Kale} +%\luastringA{Hmmm. \zzz.} +%\testcommand{Hmmm. \zzz.} + + % -\begin{luacode*} -function prttol() - local dec = penlight.tbls.tol[4] or 1 - penlight.wrth(dec,'??') - penlight.tbls.tol[3] = penlight.tbls.tol[3] or 3 - penlight.tbls.tol[4] = penlight.tbls.tol[1]*(1.0-penlight.tbls.tol[3]/100.0) + 0.0 - penlight.tbls.tol[5] = penlight.tbls.tol[1]*(1.0+penlight.tbls.tol[3]/100.0) + 0.0 - --penlight.tbls.tol['k'] = 'fuckboi' - --ttt = pl.tbx.fmt(penlight.tbls.tol, '.3f') - penlight.wrth(('$1\\$2 (\\pmpct{$3} tolerance, $4\\ndash$5\\$2)'):fmt(penlight.tbls.tol, '4=.'..dec..'f, 5=.'..dec..'f'), 'XYZ') -end -\end{luacode*} -\NewDocumentCommand{\prttol}{ m }{\tblfrcsv{tol}{#1}\luadirect{prttol()}}% {50.0,kV,3,P} % 50\us (\pmpct{20} tolerance, 40=--60\us), P is optional and precision of the range (number of decimals) -\prttol{50,kV,3} +%\pyth{} % erro + -\begin{luacode*} - pl.wrth(pl.filterfiles('.',true,'.*%.tex'), 'FF') -\end{luacode*} \end{document}
\ No newline at end of file diff --git a/macros/luatex/generic/unibidi-lua/COPYING b/macros/luatex/generic/unibidi-lua/COPYING new file mode 100644 index 0000000000..8ec5b15e11 --- /dev/null +++ b/macros/luatex/generic/unibidi-lua/COPYING @@ -0,0 +1,350 @@ +ConTeXt, where this implementation of the Unicode Bidi algorithm originates, is +licensed under the GPL version 2.0 (exactly). As a derived work, anything +the unibidi-lua LuaTeX package adds to that is also subject to the same license at the same +version. The “any later version” clause as used by the FSF in the license text +*does not apply* to either ConTeXt or UAX9, despite being kept around in +the license text given below. + +------------------------------------------------------------------------------- + LICENSE TEXT BELOW +------------------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/macros/luatex/generic/unibidi-lua/README.md b/macros/luatex/generic/unibidi-lua/README.md new file mode 100644 index 0000000000..386bbb3e8e --- /dev/null +++ b/macros/luatex/generic/unibidi-lua/README.md @@ -0,0 +1,34 @@ +# The unibidi-lua Package +unibidi-lua version 0.1, 2025-01-19 + +## Description +The unibidi-lua LuaTeX package is a port of the unicode bidi algorithm +implementation of the ConTeXt project to OpTeX, LuaLaTeX and Plain LuaTeX. + +## Maintenance +This package is currently maintained at https://github.com/Udi-Fogiel/UAX9-LuaTeX. + +Issues can be reported at the issue tracker. + +## Documentation +To print the documentation run `optex -jobname unibidi-lua-doc '\docgen unibidi-lua'` + +## License +The unibidi-lua package, as a derived work of ConTeXt, is distributed under the GNU GPLv2 license: + +http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + +This license requires the license itself to be distributed with the work. +For its full text see the file COPYING. + +The files unibidi-lua.lua and unibidi-lua-data.lua are copyrighted +under PRAGMA ADE / ConTeXt Development Team. +## DISCLAIMER + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; version 2. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. diff --git a/macros/luatex/generic/unibidi-lua/unibidi-lua-data.lua b/macros/luatex/generic/unibidi-lua/unibidi-lua-data.lua new file mode 100644 index 0000000000..0299fa6dc3 --- /dev/null +++ b/macros/luatex/generic/unibidi-lua/unibidi-lua-data.lua @@ -0,0 +1,35143 @@ +--[[ + version = 0.1, 2025-01-19 + author = Hans Hagen, PRAGMA-ADE, Hasselt NL, Udi Fogiel + copyright = PRAGMA ADE / ConTeXt Development Team + license = GPL v2.0 + dataonly = true + +The first version of this table was generated from unicode tables but after that was +mostly updated manual using data present in ConTeXt and elsewhere. I did my best to +make this table as complete as needed for proper use in ConTeXt MkIV. All errors are +mine. If you find an error or ommision, just let me know. This file is updated every +now and then using mtx-unicode where we check against the latest unicode txt files +(normally once per year around the tex live code freeze) and checked afterwards for +differences. We could save some bytes by sharing variant tables but it's not worth +the trouble. Some additional data is kept in other files. + +For a generic subset of the data here, run "context luatex-basics-prepare.tex" after +adapting this file. + +Todo: get rid of specials = { "font", ... } in math ... we have already vectors. +Todo: remove adobe names (move them to the glyph list, done) +Todo: remove some never used context names (idem) + +This file is a derivative of char-def.lua from the ConTeXt project. + +]]-- + + +return { + [0x0]={d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="s"}, + {d="b"}, + {d="s"}, + {d="ws"}, + {d="b"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="b"}, + {d="b"}, + {d="b"}, + {d="s"}, + {d="ws"}, + {d="on"}, + {d="on"}, + {d="et"}, + {d="et"}, + {d="et"}, + {d="on"}, + {d="on"}, + {d="on", + m=0x29, + tc="open"}, + {d="on", + m=0x28, + tc="close"}, + {d="on"}, + {d="es"}, + {d="cs"}, + {d="es"}, + {d="cs"}, + {d="cs"}, + {d="en"}, + {d="en"}, + {d="en"}, + {d="en"}, + {d="en"}, + {d="en"}, + {d="en"}, + {d="en"}, + {d="en"}, + {d="en"}, + {d="cs"}, + {d="on"}, + {d="on", + m=0x3E, + tc="open"}, + {d="on"}, + {d="on", + m=0x3C, + tc="close"}, + {d="on"}, + {d="on"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="on", + m=0x5D, + tc="open"}, + {d="on"}, + {d="on", + m=0x5B, + tc="close"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="on", + m=0x7D, + tc="open"}, + {d="on"}, + {d="on", + m=0x7B, + tc="close"}, + {d="on"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="b"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="bn"}, + {d="cs"}, + {d="on"}, + {d="et"}, + {d="et"}, + {d="et"}, + {d="et"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="l"}, + {d="on", + m=0xBB, + tc="open"}, + {d="on"}, + {d="bn"}, + {d="on"}, + {d="on"}, + {d="et"}, + {d="et"}, + {d="en"}, + {d="en"}, + {d="on"}, + {d="l"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="en"}, + {d="l"}, + {d="on", + m=0xAB, + tc="close"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="on"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="on"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="on"}, + {d="on"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="l"}, + {d="l"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="l"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="on"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="nsm"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="l"}, + {d="on"}, + {d="on"}, + {d="l"}, + {d="l"}, + [0x37A]={d="l"}, + [0x37B]={d="l"}, + [0x37C]={d="l"}, + [0x37D]={d="l"}, + [0x37E]={d="on"}, + [0x37F]={d="l"}, + [0x384]={d="on"}, + [0x385]={d="on"}, + [0x386]={d="l"}, + [0x387]={d="on"}, + [0x388]={d="l"}, + [0x389]={d="l"}, + [0x38A]={d="l"}, + [0x38C]={d="l"}, + [0x38E]={d="l"}, + [0x38F]={d="l"}, + [0x390]={d="l"}, + [0x391]={d="l"}, + [0x392]={d="l"}, + [0x393]={d="l"}, + [0x394]={d="l"}, + [0x395]={d="l"}, + [0x396]={d="l"}, + [0x397]={d="l"}, + [0x398]={d="l"}, + [0x399]={d="l"}, + [0x39A]={d="l"}, + [0x39B]={d="l"}, + [0x39C]={d="l"}, + [0x39D]={d="l"}, + [0x39E]={d="l"}, + [0x39F]={d="l"}, + [0x3A0]={d="l"}, + [0x3A1]={d="l"}, + [0x3A3]={d="l"}, + [0x3A4]={d="l"}, + [0x3A5]={d="l"}, + [0x3A6]={d="l"}, + [0x3A7]={d="l"}, + [0x3A8]={d="l"}, + [0x3A9]={d="l"}, + [0x3AA]={d="l"}, + [0x3AB]={d="l"}, + [0x3AC]={d="l"}, + [0x3AD]={d="l"}, + [0x3AE]={d="l"}, + [0x3AF]={d="l"}, + [0x3B0]={d="l"}, + [0x3B1]={d="l"}, + [0x3B2]={d="l"}, + [0x3B3]={d="l"}, + [0x3B4]={d="l"}, + [0x3B5]={d="l"}, + [0x3B6]={d="l"}, + [0x3B7]={d="l"}, + [0x3B8]={d="l"}, + [0x3B9]={d="l"}, + [0x3BA]={d="l"}, + [0x3BB]={d="l"}, + [0x3BC]={d="l"}, + [0x3BD]={d="l"}, + [0x3BE]={d="l"}, + [0x3BF]={d="l"}, + [0x3C0]={d="l"}, + [0x3C1]={d="l"}, + [0x3C2]={d="l"}, + [0x3C3]={d="l"}, + [0x3C4]={d="l"}, + [0x3C5]={d="l"}, + [0x3C6]={d="l"}, + [0x3C7]={d="l"}, + [0x3C8]={d="l"}, + [0x3C9]={d="l"}, + [0x3CA]={d="l"}, + [0x3CB]={d="l"}, + [0x3CC]={d="l"}, + [0x3CD]={d="l"}, + [0x3CE]={d="l"}, + [0x3CF]={d="l"}, + [0x3D0]={d="l"}, + [0x3D1]={d="l"}, + [0x3D2]={d="l"}, + [0x3D3]={d="l"}, + [0x3D4]={d="l"}, + [0x3D5]={d="l"}, + [0x3D6]={d="l"}, + [0x3D7]={d="l"}, + [0x3D8]={d="l"}, + [0x3D9]={d="l"}, + [0x3DA]={d="l"}, + [0x3DB]={d="l"}, + [0x3DC]={d="l"}, + [0x3DD]={d="l"}, + [0x3DE]={d="l"}, + [0x3DF]={d="l"}, + [0x3E0]={d="l"}, + [0x3E1]={d="l"}, + [0x3E2]={d="l"}, + [0x3E3]={d="l"}, + [0x3E4]={d="l"}, + [0x3E5]={d="l"}, + [0x3E6]={d="l"}, + [0x3E7]={d="l"}, + [0x3E8]={d="l"}, + [0x3E9]={d="l"}, + [0x3EA]={d="l"}, + [0x3EB]={d="l"}, + [0x3EC]={d="l"}, + [0x3ED]={d="l"}, + [0x3EE]={d="l"}, + [0x3EF]={d="l"}, + [0x3F0]={d="l"}, + [0x3F1]={d="l"}, + [0x3F2]={d="l"}, + [0x3F3]={d="l"}, + [0x3F4]={d="l"}, + [0x3F5]={d="l"}, + [0x3F6]={d="on"}, + [0x3F7]={d="l"}, + [0x3F8]={d="l"}, + [0x3F9]={d="l"}, + [0x3FA]={d="l"}, + [0x3FB]={d="l"}, + [0x3FC]={d="l"}, + [0x3FD]={d="l"}, + [0x3FE]={d="l"}, + [0x3FF]={d="l"}, + [0x400]={d="l"}, + [0x401]={d="l"}, + [0x402]={d="l"}, + [0x403]={d="l"}, + [0x404]={d="l"}, + [0x405]={d="l"}, + [0x406]={d="l"}, + [0x407]={d="l"}, + [0x408]={d="l"}, + [0x409]={d="l"}, + [0x40A]={d="l"}, + [0x40B]={d="l"}, + [0x40C]={d="l"}, + [0x40D]={d="l"}, + [0x40E]={d="l"}, + [0x40F]={d="l"}, + [0x410]={d="l"}, + [0x411]={d="l"}, + [0x412]={d="l"}, + [0x413]={d="l"}, + [0x414]={d="l"}, + [0x415]={d="l"}, + [0x416]={d="l"}, + [0x417]={d="l"}, + [0x418]={d="l"}, + [0x419]={d="l"}, + [0x41A]={d="l"}, + [0x41B]={d="l"}, + [0x41C]={d="l"}, + [0x41D]={d="l"}, + [0x41E]={d="l"}, + [0x41F]={d="l"}, + [0x420]={d="l"}, + [0x421]={d="l"}, + [0x422]={d="l"}, + [0x423]={d="l"}, + [0x424]={d="l"}, + [0x425]={d="l"}, + [0x426]={d="l"}, + [0x427]={d="l"}, + [0x428]={d="l"}, + [0x429]={d="l"}, + [0x42A]={d="l"}, + [0x42B]={d="l"}, + [0x42C]={d="l"}, + [0x42D]={d="l"}, + [0x42E]={d="l"}, + [0x42F]={d="l"}, + [0x430]={d="l"}, + [0x431]={d="l"}, + [0x432]={d="l"}, + [0x433]={d="l"}, + [0x434]={d="l"}, + [0x435]={d="l"}, + [0x436]={d="l"}, + [0x437]={d="l"}, + [0x438]={d="l"}, + [0x439]={d="l"}, + [0x43A]={d="l"}, + [0x43B]={d="l"}, + [0x43C]={d="l"}, + [0x43D]={d="l"}, + [0x43E]={d="l"}, + [0x43F]={d="l"}, + [0x440]={d="l"}, + [0x441]={d="l"}, + [0x442]={d="l"}, + [0x443]={d="l"}, + [0x444]={d="l"}, + [0x445]={d="l"}, + [0x446]={d="l"}, + [0x447]={d="l"}, + [0x448]={d="l"}, + [0x449]={d="l"}, + [0x44A]={d="l"}, + [0x44B]={d="l"}, + [0x44C]={d="l"}, + [0x44D]={d="l"}, + [0x44E]={d="l"}, + [0x44F]={d="l"}, + [0x450]={d="l"}, + [0x451]={d="l"}, + [0x452]={d="l"}, + [0x453]={d="l"}, + [0x454]={d="l"}, + [0x455]={d="l"}, + [0x456]={d="l"}, + [0x457]={d="l"}, + [0x458]={d="l"}, + [0x459]={d="l"}, + [0x45A]={d="l"}, + [0x45B]={d="l"}, + [0x45C]={d="l"}, + [0x45D]={d="l"}, + [0x45E]={d="l"}, + [0x45F]={d="l"}, + [0x460]={d="l"}, + [0x461]={d="l"}, + [0x462]={d="l"}, + [0x463]={d="l"}, + [0x464]={d="l"}, + [0x465]={d="l"}, + [0x466]={d="l"}, + [0x467]={d="l"}, + [0x468]={d="l"}, + [0x469]={d="l"}, + [0x46A]={d="l"}, + [0x46B]={d="l"}, + [0x46C]={d="l"}, + [0x46D]={d="l"}, + [0x46E]={d="l"}, + [0x46F]={d="l"}, + [0x470]={d="l"}, + [0x471]={d="l"}, + [0x472]={d="l"}, + [0x473]={d="l"}, + [0x474]={d="l"}, + [0x475]={d="l"}, + [0x476]={d="l"}, + [0x477]={d="l"}, + [0x478]={d="l"}, + [0x479]={d="l"}, + [0x47A]={d="l"}, + [0x47B]={d="l"}, + [0x47C]={d="l"}, + [0x47D]={d="l"}, + [0x47E]={d="l"}, + [0x47F]={d="l"}, + [0x480]={d="l"}, + [0x481]={d="l"}, + [0x482]={d="l"}, + [0x483]={d="nsm"}, + [0x484]={d="nsm"}, + [0x485]={d="nsm"}, + [0x486]={d="nsm"}, + [0x487]={d="nsm"}, + [0x488]={d="nsm"}, + [0x489]={d="nsm"}, + [0x48A]={d="l"}, + [0x48B]={d="l"}, + [0x48C]={d="l"}, + [0x48D]={d="l"}, + [0x48E]={d="l"}, + [0x48F]={d="l"}, + [0x490]={d="l"}, + [0x491]={d="l"}, + [0x492]={d="l"}, + [0x493]={d="l"}, + [0x494]={d="l"}, + [0x495]={d="l"}, + [0x496]={d="l"}, + [0x497]={d="l"}, + [0x498]={d="l"}, + [0x499]={d="l"}, + [0x49A]={d="l"}, + [0x49B]={d="l"}, + [0x49C]={d="l"}, + [0x49D]={d="l"}, + [0x49E]={d="l"}, + [0x49F]={d="l"}, + [0x4A0]={d="l"}, + [0x4A1]={d="l"}, + [0x4A2]={d="l"}, + [0x4A3]={d="l"}, + [0x4A4]={d="l"}, + [0x4A5]={d="l"}, + [0x4A6]={d="l"}, + [0x4A7]={d="l"}, + [0x4A8]={d="l"}, + [0x4A9]={d="l"}, + [0x4AA]={d="l"}, + [0x4AB]={d="l"}, + [0x4AC]={d="l"}, + [0x4AD]={d="l"}, + [0x4AE]={d="l"}, + [0x4AF]={d="l"}, + [0x4B0]={d="l"}, + [0x4B1]={d="l"}, + [0x4B2]={d="l"}, + [0x4B3]={d="l"}, + [0x4B4]={d="l"}, + [0x4B5]={d="l"}, + [0x4B6]={d="l"}, + [0x4B7]={d="l"}, + [0x4B8]={d="l"}, + [0x4B9]={d="l"}, + [0x4BA]={d="l"}, + [0x4BB]={d="l"}, + [0x4BC]={d="l"}, + [0x4BD]={d="l"}, + [0x4BE]={d="l"}, + [0x4BF]={d="l"}, + [0x4C0]={d="l"}, + [0x4C1]={d="l"}, + [0x4C2]={d="l"}, + [0x4C3]={d="l"}, + [0x4C4]={d="l"}, + [0x4C5]={d="l"}, + [0x4C6]={d="l"}, + [0x4C7]={d="l"}, + [0x4C8]={d="l"}, + [0x4C9]={d="l"}, + [0x4CA]={d="l"}, + [0x4CB]={d="l"}, + [0x4CC]={d="l"}, + [0x4CD]={d="l"}, + [0x4CE]={d="l"}, + [0x4CF]={d="l"}, + [0x4D0]={d="l"}, + [0x4D1]={d="l"}, + [0x4D2]={d="l"}, + [0x4D3]={d="l"}, + [0x4D4]={d="l"}, + [0x4D5]={d="l"}, + [0x4D6]={d="l"}, + [0x4D7]={d="l"}, + [0x4D8]={d="l"}, + [0x4D9]={d="l"}, + [0x4DA]={d="l"}, + [0x4DB]={d="l"}, + [0x4DC]={d="l"}, + [0x4DD]={d="l"}, + [0x4DE]={d="l"}, + [0x4DF]={d="l"}, + [0x4E0]={d="l"}, + [0x4E1]={d="l"}, + [0x4E2]={d="l"}, + [0x4E3]={d="l"}, + [0x4E4]={d="l"}, + [0x4E5]={d="l"}, + [0x4E6]={d="l"}, + [0x4E7]={d="l"}, + [0x4E8]={d="l"}, + [0x4E9]={d="l"}, + [0x4EA]={d="l"}, + [0x4EB]={d="l"}, + [0x4EC]={d="l"}, + [0x4ED]={d="l"}, + [0x4EE]={d="l"}, + [0x4EF]={d="l"}, + [0x4F0]={d="l"}, + [0x4F1]={d="l"}, + [0x4F2]={d="l"}, + [0x4F3]={d="l"}, + [0x4F4]={d="l"}, + [0x4F5]={d="l"}, + [0x4F6]={d="l"}, + [0x4F7]={d="l"}, + [0x4F8]={d="l"}, + [0x4F9]={d="l"}, + [0x4FA]={d="l"}, + [0x4FB]={d="l"}, + [0x4FC]={d="l"}, + [0x4FD]={d="l"}, + [0x4FE]={d="l"}, + [0x4FF]={d="l"}, + [0x500]={d="l"}, + [0x501]={d="l"}, + [0x502]={d="l"}, + [0x503]={d="l"}, + [0x504]={d="l"}, + [0x505]={d="l"}, + [0x506]={d="l"}, + [0x507]={d="l"}, + [0x508]={d="l"}, + [0x509]={d="l"}, + [0x50A]={d="l"}, + [0x50B]={d="l"}, + [0x50C]={d="l"}, + [0x50D]={d="l"}, + [0x50E]={d="l"}, + [0x50F]={d="l"}, + [0x510]={d="l"}, + [0x511]={d="l"}, + [0x512]={d="l"}, + [0x513]={d="l"}, + [0x514]={d="l"}, + [0x515]={d="l"}, + [0x516]={d="l"}, + [0x517]={d="l"}, + [0x518]={d="l"}, + [0x519]={d="l"}, + [0x51A]={d="l"}, + [0x51B]={d="l"}, + [0x51C]={d="l"}, + [0x51D]={d="l"}, + [0x51E]={d="l"}, + [0x51F]={d="l"}, + [0x520]={d="l"}, + [0x521]={d="l"}, + [0x522]={d="l"}, + [0x523]={d="l"}, + [0x524]={d="l"}, + [0x525]={d="l"}, + [0x526]={d="l"}, + [0x527]={d="l"}, + [0x528]={d="l"}, + [0x529]={d="l"}, + [0x52A]={d="l"}, + [0x52B]={d="l"}, + [0x52C]={d="l"}, + [0x52D]={d="l"}, + [0x52E]={d="l"}, + [0x52F]={d="l"}, + [0x531]={d="l"}, + [0x532]={d="l"}, + [0x533]={d="l"}, + [0x534]={d="l"}, + [0x535]={d="l"}, + [0x536]={d="l"}, + [0x537]={d="l"}, + [0x538]={d="l"}, + [0x539]={d="l"}, + [0x53A]={d="l"}, + [0x53B]={d="l"}, + [0x53C]={d="l"}, + [0x53D]={d="l"}, + [0x53E]={d="l"}, + [0x53F]={d="l"}, + [0x540]={d="l"}, + [0x541]={d="l"}, + [0x542]={d="l"}, + [0x543]={d="l"}, + [0x544]={d="l"}, + [0x545]={d="l"}, + [0x546]={d="l"}, + [0x547]={d="l"}, + [0x548]={d="l"}, + [0x549]={d="l"}, + [0x54A]={d="l"}, + [0x54B]={d="l"}, + [0x54C]={d="l"}, + [0x54D]={d="l"}, + [0x54E]={d="l"}, + [0x54F]={d="l"}, + [0x550]={d="l"}, + [0x551]={d="l"}, + [0x552]={d="l"}, + [0x553]={d="l"}, + [0x554]={d="l"}, + [0x555]={d="l"}, + [0x556]={d="l"}, + [0x559]={d="l"}, + [0x55A]={d="l"}, + [0x55B]={d="l"}, + [0x55C]={d="l"}, + [0x55D]={d="l"}, + [0x55E]={d="l"}, + [0x55F]={d="l"}, + [0x560]={d="l"}, + [0x561]={d="l"}, + [0x562]={d="l"}, + [0x563]={d="l"}, + [0x564]={d="l"}, + [0x565]={d="l"}, + [0x566]={d="l"}, + [0x567]={d="l"}, + [0x568]={d="l"}, + [0x569]={d="l"}, + [0x56A]={d="l"}, + [0x56B]={d="l"}, + [0x56C]={d="l"}, + [0x56D]={d="l"}, + [0x56E]={d="l"}, + [0x56F]={d="l"}, + [0x570]={d="l"}, + [0x571]={d="l"}, + [0x572]={d="l"}, + [0x573]={d="l"}, + [0x574]={d="l"}, + [0x575]={d="l"}, + [0x576]={d="l"}, + [0x577]={d="l"}, + [0x578]={d="l"}, + [0x579]={d="l"}, + [0x57A]={d="l"}, + [0x57B]={d="l"}, + [0x57C]={d="l"}, + [0x57D]={d="l"}, + [0x57E]={d="l"}, + [0x57F]={d="l"}, + [0x580]={d="l"}, + [0x581]={d="l"}, + [0x582]={d="l"}, + [0x583]={d="l"}, + [0x584]={d="l"}, + [0x585]={d="l"}, + [0x586]={d="l"}, + [0x587]={d="l"}, + [0x588]={d="l"}, + [0x589]={d="l"}, + [0x58A]={d="on"}, + [0x58D]={d="on"}, + [0x58E]={d="on"}, + [0x58F]={d="et"}, + [0x591]={d="nsm"}, + [0x592]={d="nsm"}, + [0x593]={d="nsm"}, + [0x594]={d="nsm"}, + [0x595]={d="nsm"}, + [0x596]={d="nsm"}, + [0x597]={d="nsm"}, + [0x598]={d="nsm"}, + [0x599]={d="nsm"}, + [0x59A]={d="nsm"}, + [0x59B]={d="nsm"}, + [0x59C]={d="nsm"}, + [0x59D]={d="nsm"}, + [0x59E]={d="nsm"}, + [0x59F]={d="nsm"}, + [0x5A0]={d="nsm"}, + [0x5A1]={d="nsm"}, + [0x5A2]={d="nsm"}, + [0x5A3]={d="nsm"}, + [0x5A4]={d="nsm"}, + [0x5A5]={d="nsm"}, + [0x5A6]={d="nsm"}, + [0x5A7]={d="nsm"}, + [0x5A8]={d="nsm"}, + [0x5A9]={d="nsm"}, + [0x5AA]={d="nsm"}, + [0x5AB]={d="nsm"}, + [0x5AC]={d="nsm"}, + [0x5AD]={d="nsm"}, + [0x5AE]={d="nsm"}, + [0x5AF]={d="nsm"}, + [0x5B0]={d="nsm"}, + [0x5B1]={d="nsm"}, + [0x5B2]={d="nsm"}, + [0x5B3]={d="nsm"}, + [0x5B4]={d="nsm"}, + [0x5B5]={d="nsm"}, + [0x5B6]={d="nsm"}, + [0x5B7]={d="nsm"}, + [0x5B8]={d="nsm"}, + [0x5B9]={d="nsm"}, + [0x5BA]={d="nsm"}, + [0x5BB]={d="nsm"}, + [0x5BC]={d="nsm"}, + [0x5BD]={d="nsm"}, + [0x5BE]={d="r"}, + [0x5BF]={d="nsm"}, + [0x5C0]={d="r"}, + [0x5C1]={d="nsm"}, + [0x5C2]={d="nsm"}, + [0x5C3]={d="r"}, + [0x5C4]={d="nsm"}, + [0x5C5]={d="nsm"}, + [0x5C6]={d="r"}, + [0x5C7]={d="nsm"}, + [0x5D0]={d="r"}, + [0x5D1]={d="r"}, + [0x5D2]={d="r"}, + [0x5D3]={d="r"}, + [0x5D4]={d="r"}, + [0x5D5]={d="r"}, + [0x5D6]={d="r"}, + [0x5D7]={d="r"}, + [0x5D8]={d="r"}, + [0x5D9]={d="r"}, + [0x5DA]={d="r"}, + [0x5DB]={d="r"}, + [0x5DC]={d="r"}, + [0x5DD]={d="r"}, + [0x5DE]={d="r"}, + [0x5DF]={d="r"}, + [0x5E0]={d="r"}, + [0x5E1]={d="r"}, + [0x5E2]={d="r"}, + [0x5E3]={d="r"}, + [0x5E4]={d="r"}, + [0x5E5]={d="r"}, + [0x5E6]={d="r"}, + [0x5E7]={d="r"}, + [0x5E8]={d="r"}, + [0x5E9]={d="r"}, + [0x5EA]={d="r"}, + [0x5EF]={d="r"}, + [0x5F0]={d="r"}, + [0x5F1]={d="r"}, + [0x5F2]={d="r"}, + [0x5F3]={d="r"}, + [0x5F4]={d="r"}, + [0x600]={d="an"}, + [0x601]={d="an"}, + [0x602]={d="an"}, + [0x603]={d="an"}, + [0x604]={d="an"}, + [0x605]={d="an"}, + [0x606]={d="on"}, + [0x607]={d="on"}, + [0x608]={d="al"}, + [0x609]={d="et"}, + [0x60A]={d="et"}, + [0x60B]={d="al"}, + [0x60C]={d="cs"}, + [0x60D]={d="al"}, + [0x60E]={d="on"}, + [0x60F]={d="on"}, + [0x610]={d="nsm"}, + [0x611]={d="nsm"}, + [0x612]={d="nsm"}, + [0x613]={d="nsm"}, + [0x614]={d="nsm"}, + [0x615]={d="nsm"}, + [0x616]={d="nsm"}, + [0x617]={d="nsm"}, + [0x618]={d="nsm"}, + [0x619]={d="nsm"}, + [0x61A]={d="nsm"}, + [0x61B]={d="al"}, + [0x61C]={d="al"}, + [0x61D]={d="al"}, + [0x61E]={d="al"}, + [0x61F]={d="al"}, + [0x620]={d="al"}, + [0x621]={d="al"}, + [0x622]={d="al"}, + [0x623]={d="al"}, + [0x624]={d="al"}, + [0x625]={d="al"}, + [0x626]={d="al"}, + [0x627]={d="al"}, + [0x628]={d="al"}, + [0x629]={d="al"}, + [0x62A]={d="al"}, + [0x62B]={d="al"}, + [0x62C]={d="al"}, + [0x62D]={d="al"}, + [0x62E]={d="al"}, + [0x62F]={d="al"}, + [0x630]={d="al"}, + [0x631]={d="al"}, + [0x632]={d="al"}, + [0x633]={d="al"}, + [0x634]={d="al"}, + [0x635]={d="al"}, + [0x636]={d="al"}, + [0x637]={d="al"}, + [0x638]={d="al"}, + [0x639]={d="al"}, + [0x63A]={d="al"}, + [0x63B]={d="al"}, + [0x63C]={d="al"}, + [0x63D]={d="al"}, + [0x63E]={d="al"}, + [0x63F]={d="al"}, + [0x640]={d="al"}, + [0x641]={d="al"}, + [0x642]={d="al"}, + [0x643]={d="al"}, + [0x644]={d="al"}, + [0x645]={d="al"}, + [0x646]={d="al"}, + [0x647]={d="al"}, + [0x648]={d="al"}, + [0x649]={d="al"}, + [0x64A]={d="al"}, + [0x64B]={d="nsm"}, + [0x64C]={d="nsm"}, + [0x64D]={d="nsm"}, + [0x64E]={d="nsm"}, + [0x64F]={d="nsm"}, + [0x650]={d="nsm"}, + [0x651]={d="nsm"}, + [0x652]={d="nsm"}, + [0x653]={d="nsm"}, + [0x654]={d="nsm"}, + [0x655]={d="nsm"}, + [0x656]={d="nsm"}, + [0x657]={d="nsm"}, + [0x658]={d="nsm"}, + [0x659]={d="nsm"}, + [0x65A]={d="nsm"}, + [0x65B]={d="nsm"}, + [0x65C]={d="nsm"}, + [0x65D]={d="nsm"}, + [0x65E]={d="nsm"}, + [0x65F]={d="nsm"}, + [0x660]={d="an"}, + [0x661]={d="an"}, + [0x662]={d="an"}, + [0x663]={d="an"}, + [0x664]={d="an"}, + [0x665]={d="an"}, + [0x666]={d="an"}, + [0x667]={d="an"}, + [0x668]={d="an"}, + [0x669]={d="an"}, + [0x66A]={d="et"}, + [0x66B]={d="an"}, + [0x66C]={d="an"}, + [0x66D]={d="al"}, + [0x66E]={d="al"}, + [0x66F]={d="al"}, + [0x670]={d="nsm"}, + [0x671]={d="al"}, + [0x672]={d="al"}, + [0x673]={d="al"}, + [0x674]={d="al"}, + [0x675]={d="al"}, + [0x676]={d="al"}, + [0x677]={d="al"}, + [0x678]={d="al"}, + [0x679]={d="al"}, + [0x67A]={d="al"}, + [0x67B]={d="al"}, + [0x67C]={d="al"}, + [0x67D]={d="al"}, + [0x67E]={d="al"}, + [0x67F]={d="al"}, + [0x680]={d="al"}, + [0x681]={d="al"}, + [0x682]={d="al"}, + [0x683]={d="al"}, + [0x684]={d="al"}, + [0x685]={d="al"}, + [0x686]={d="al"}, + [0x687]={d="al"}, + [0x688]={d="al"}, + [0x689]={d="al"}, + [0x68A]={d="al"}, + [0x68B]={d="al"}, + [0x68C]={d="al"}, + [0x68D]={d="al"}, + [0x68E]={d="al"}, + [0x68F]={d="al"}, + [0x690]={d="al"}, + [0x691]={d="al"}, + [0x692]={d="al"}, + [0x693]={d="al"}, + [0x694]={d="al"}, + [0x695]={d="al"}, + [0x696]={d="al"}, + [0x697]={d="al"}, + [0x698]={d="al"}, + [0x699]={d="al"}, + [0x69A]={d="al"}, + [0x69B]={d="al"}, + [0x69C]={d="al"}, + [0x69D]={d="al"}, + [0x69E]={d="al"}, + [0x69F]={d="al"}, + [0x6A0]={d="al"}, + [0x6A1]={d="al"}, + [0x6A2]={d="al"}, + [0x6A3]={d="al"}, + [0x6A4]={d="al"}, + [0x6A5]={d="al"}, + [0x6A6]={d="al"}, + [0x6A7]={d="al"}, + [0x6A8]={d="al"}, + [0x6A9]={d="al"}, + [0x6AA]={d="al"}, + [0x6AB]={d="al"}, + [0x6AC]={d="al"}, + [0x6AD]={d="al"}, + [0x6AE]={d="al"}, + [0x6AF]={d="al"}, + [0x6B0]={d="al"}, + [0x6B1]={d="al"}, + [0x6B2]={d="al"}, + [0x6B3]={d="al"}, + [0x6B4]={d="al"}, + [0x6B5]={d="al"}, + [0x6B6]={d="al"}, + [0x6B7]={d="al"}, + [0x6B8]={d="al"}, + [0x6B9]={d="al"}, + [0x6BA]={d="al"}, + [0x6BB]={d="al"}, + [0x6BC]={d="al"}, + [0x6BD]={d="al"}, + [0x6BE]={d="al"}, + [0x6BF]={d="al"}, + [0x6C0]={d="al"}, + [0x6C1]={d="al"}, + [0x6C2]={d="al"}, + [0x6C3]={d="al"}, + [0x6C4]={d="al"}, + [0x6C5]={d="al"}, + [0x6C6]={d="al"}, + [0x6C7]={d="al"}, + [0x6C8]={d="al"}, + [0x6C9]={d="al"}, + [0x6CA]={d="al"}, + [0x6CB]={d="al"}, + [0x6CC]={d="al"}, + [0x6CD]={d="al"}, + [0x6CE]={d="al"}, + [0x6CF]={d="al"}, + [0x6D0]={d="al"}, + [0x6D1]={d="al"}, + [0x6D2]={d="al"}, + [0x6D3]={d="al"}, + [0x6D4]={d="al"}, + [0x6D5]={d="al"}, + [0x6D6]={d="nsm"}, + [0x6D7]={d="nsm"}, + [0x6D8]={d="nsm"}, + [0x6D9]={d="nsm"}, + [0x6DA]={d="nsm"}, + [0x6DB]={d="nsm"}, + [0x6DC]={d="nsm"}, + [0x6DD]={d="an"}, + [0x6DE]={d="on"}, + [0x6DF]={d="nsm"}, + [0x6E0]={d="nsm"}, + [0x6E1]={d="nsm"}, + [0x6E2]={d="nsm"}, + [0x6E3]={d="nsm"}, + [0x6E4]={d="nsm"}, + [0x6E5]={d="al"}, + [0x6E6]={d="al"}, + [0x6E7]={d="nsm"}, + [0x6E8]={d="nsm"}, + [0x6E9]={d="on"}, + [0x6EA]={d="nsm"}, + [0x6EB]={d="nsm"}, + [0x6EC]={d="nsm"}, + [0x6ED]={d="nsm"}, + [0x6EE]={d="al"}, + [0x6EF]={d="al"}, + [0x6F0]={d="en"}, + [0x6F1]={d="en"}, + [0x6F2]={d="en"}, + [0x6F3]={d="en"}, + [0x6F4]={d="en"}, + [0x6F5]={d="en"}, + [0x6F6]={d="en"}, + [0x6F7]={d="en"}, + [0x6F8]={d="en"}, + [0x6F9]={d="en"}, + [0x6FA]={d="al"}, + [0x6FB]={d="al"}, + [0x6FC]={d="al"}, + [0x6FD]={d="al"}, + [0x6FE]={d="al"}, + [0x6FF]={d="al"}, + [0x700]={d="al"}, + [0x701]={d="al"}, + [0x702]={d="al"}, + [0x703]={d="al"}, + [0x704]={d="al"}, + [0x705]={d="al"}, + [0x706]={d="al"}, + [0x707]={d="al"}, + [0x708]={d="al"}, + [0x709]={d="al"}, + [0x70A]={d="al"}, + [0x70B]={d="al"}, + [0x70C]={d="al"}, + [0x70D]={d="al"}, + [0x70F]={d="al"}, + [0x710]={d="al"}, + [0x711]={d="nsm"}, + [0x712]={d="al"}, + [0x713]={d="al"}, + [0x714]={d="al"}, + [0x715]={d="al"}, + [0x716]={d="al"}, + [0x717]={d="al"}, + [0x718]={d="al"}, + [0x719]={d="al"}, + [0x71A]={d="al"}, + [0x71B]={d="al"}, + [0x71C]={d="al"}, + [0x71D]={d="al"}, + [0x71E]={d="al"}, + [0x71F]={d="al"}, + [0x720]={d="al"}, + [0x721]={d="al"}, + [0x722]={d="al"}, + [0x723]={d="al"}, + [0x724]={d="al"}, + [0x725]={d="al"}, + [0x726]={d="al"}, + [0x727]={d="al"}, + [0x728]={d="al"}, + [0x729]={d="al"}, + [0x72A]={d="al"}, + [0x72B]={d="al"}, + [0x72C]={d="al"}, + [0x72D]={d="al"}, + [0x72E]={d="al"}, + [0x72F]={d="al"}, + [0x730]={d="nsm"}, + [0x731]={d="nsm"}, + [0x732]={d="nsm"}, + [0x733]={d="nsm"}, + [0x734]={d="nsm"}, + [0x735]={d="nsm"}, + [0x736]={d="nsm"}, + [0x737]={d="nsm"}, + [0x738]={d="nsm"}, + [0x739]={d="nsm"}, + [0x73A]={d="nsm"}, + [0x73B]={d="nsm"}, + [0x73C]={d="nsm"}, + [0x73D]={d="nsm"}, + [0x73E]={d="nsm"}, + [0x73F]={d="nsm"}, + [0x740]={d="nsm"}, + [0x741]={d="nsm"}, + [0x742]={d="nsm"}, + [0x743]={d="nsm"}, + [0x744]={d="nsm"}, + [0x745]={d="nsm"}, + [0x746]={d="nsm"}, + [0x747]={d="nsm"}, + [0x748]={d="nsm"}, + [0x749]={d="nsm"}, + [0x74A]={d="nsm"}, + [0x74D]={d="al"}, + [0x74E]={d="al"}, + [0x74F]={d="al"}, + [0x750]={d="al"}, + [0x751]={d="al"}, + [0x752]={d="al"}, + [0x753]={d="al"}, + [0x754]={d="al"}, + [0x755]={d="al"}, + [0x756]={d="al"}, + [0x757]={d="al"}, + [0x758]={d="al"}, + [0x759]={d="al"}, + [0x75A]={d="al"}, + [0x75B]={d="al"}, + [0x75C]={d="al"}, + [0x75D]={d="al"}, + [0x75E]={d="al"}, + [0x75F]={d="al"}, + [0x760]={d="al"}, + [0x761]={d="al"}, + [0x762]={d="al"}, + [0x763]={d="al"}, + [0x764]={d="al"}, + [0x765]={d="al"}, + [0x766]={d="al"}, + [0x767]={d="al"}, + [0x768]={d="al"}, + [0x769]={d="al"}, + [0x76A]={d="al"}, + [0x76B]={d="al"}, + [0x76C]={d="al"}, + [0x76D]={d="al"}, + [0x76E]={d="al"}, + [0x76F]={d="al"}, + [0x770]={d="al"}, + [0x771]={d="al"}, + [0x772]={d="al"}, + [0x773]={d="al"}, + [0x774]={d="al"}, + [0x775]={d="al"}, + [0x776]={d="al"}, + [0x777]={d="al"}, + [0x778]={d="al"}, + [0x779]={d="al"}, + [0x77A]={d="al"}, + [0x77B]={d="al"}, + [0x77C]={d="al"}, + [0x77D]={d="al"}, + [0x77E]={d="al"}, + [0x77F]={d="al"}, + [0x780]={d="al"}, + [0x781]={d="al"}, + [0x782]={d="al"}, + [0x783]={d="al"}, + [0x784]={d="al"}, + [0x785]={d="al"}, + [0x786]={d="al"}, + [0x787]={d="al"}, + [0x788]={d="al"}, + [0x789]={d="al"}, + [0x78A]={d="al"}, + [0x78B]={d="al"}, + [0x78C]={d="al"}, + [0x78D]={d="al"}, + [0x78E]={d="al"}, + [0x78F]={d="al"}, + [0x790]={d="al"}, + [0x791]={d="al"}, + [0x792]={d="al"}, + [0x793]={d="al"}, + [0x794]={d="al"}, + [0x795]={d="al"}, + [0x796]={d="al"}, + [0x797]={d="al"}, + [0x798]={d="al"}, + [0x799]={d="al"}, + [0x79A]={d="al"}, + [0x79B]={d="al"}, + [0x79C]={d="al"}, + [0x79D]={d="al"}, + [0x79E]={d="al"}, + [0x79F]={d="al"}, + [0x7A0]={d="al"}, + [0x7A1]={d="al"}, + [0x7A2]={d="al"}, + [0x7A3]={d="al"}, + [0x7A4]={d="al"}, + [0x7A5]={d="al"}, + [0x7A6]={d="nsm"}, + [0x7A7]={d="nsm"}, + [0x7A8]={d="nsm"}, + [0x7A9]={d="nsm"}, + [0x7AA]={d="nsm"}, + [0x7AB]={d="nsm"}, + [0x7AC]={d="nsm"}, + [0x7AD]={d="nsm"}, + [0x7AE]={d="nsm"}, + [0x7AF]={d="nsm"}, + [0x7B0]={d="nsm"}, + [0x7B1]={d="al"}, + [0x7C0]={d="r"}, + [0x7C1]={d="r"}, + [0x7C2]={d="r"}, + [0x7C3]={d="r"}, + [0x7C4]={d="r"}, + [0x7C5]={d="r"}, + [0x7C6]={d="r"}, + [0x7C7]={d="r"}, + [0x7C8]={d="r"}, + [0x7C9]={d="r"}, + [0x7CA]={d="r"}, + [0x7CB]={d="r"}, + [0x7CC]={d="r"}, + [0x7CD]={d="r"}, + [0x7CE]={d="r"}, + [0x7CF]={d="r"}, + [0x7D0]={d="r"}, + [0x7D1]={d="r"}, + [0x7D2]={d="r"}, + [0x7D3]={d="r"}, + [0x7D4]={d="r"}, + [0x7D5]={d="r"}, + [0x7D6]={d="r"}, + [0x7D7]={d="r"}, + [0x7D8]={d="r"}, + [0x7D9]={d="r"}, + [0x7DA]={d="r"}, + [0x7DB]={d="r"}, + [0x7DC]={d="r"}, + [0x7DD]={d="r"}, + [0x7DE]={d="r"}, + [0x7DF]={d="r"}, + [0x7E0]={d="r"}, + [0x7E1]={d="r"}, + [0x7E2]={d="r"}, + [0x7E3]={d="r"}, + [0x7E4]={d="r"}, + [0x7E5]={d="r"}, + [0x7E6]={d="r"}, + [0x7E7]={d="r"}, + [0x7E8]={d="r"}, + [0x7E9]={d="r"}, + [0x7EA]={d="r"}, + [0x7EB]={d="nsm"}, + [0x7EC]={d="nsm"}, + [0x7ED]={d="nsm"}, + [0x7EE]={d="nsm"}, + [0x7EF]={d="nsm"}, + [0x7F0]={d="nsm"}, + [0x7F1]={d="nsm"}, + [0x7F2]={d="nsm"}, + [0x7F3]={d="nsm"}, + [0x7F4]={d="r"}, + [0x7F5]={d="r"}, + [0x7F6]={d="on"}, + [0x7F7]={d="on"}, + [0x7F8]={d="on"}, + [0x7F9]={d="on"}, + [0x7FA]={d="r"}, + [0x7FD]={d="nsm"}, + [0x7FE]={d="r"}, + [0x7FF]={d="r"}, + [0x800]={d="r"}, + [0x801]={d="r"}, + [0x802]={d="r"}, + [0x803]={d="r"}, + [0x804]={d="r"}, + [0x805]={d="r"}, + [0x806]={d="r"}, + [0x807]={d="r"}, + [0x808]={d="r"}, + [0x809]={d="r"}, + [0x80A]={d="r"}, + [0x80B]={d="r"}, + [0x80C]={d="r"}, + [0x80D]={d="r"}, + [0x80E]={d="r"}, + [0x80F]={d="r"}, + [0x810]={d="r"}, + [0x811]={d="r"}, + [0x812]={d="r"}, + [0x813]={d="r"}, + [0x814]={d="r"}, + [0x815]={d="r"}, + [0x816]={d="nsm"}, + [0x817]={d="nsm"}, + [0x818]={d="nsm"}, + [0x819]={d="nsm"}, + [0x81A]={d="r"}, + [0x81B]={d="nsm"}, + [0x81C]={d="nsm"}, + [0x81D]={d="nsm"}, + [0x81E]={d="nsm"}, + [0x81F]={d="nsm"}, + [0x820]={d="nsm"}, + [0x821]={d="nsm"}, + [0x822]={d="nsm"}, + [0x823]={d="nsm"}, + [0x824]={d="r"}, + [0x825]={d="nsm"}, + [0x826]={d="nsm"}, + [0x827]={d="nsm"}, + [0x828]={d="r"}, + [0x829]={d="nsm"}, + [0x82A]={d="nsm"}, + [0x82B]={d="nsm"}, + [0x82C]={d="nsm"}, + [0x82D]={d="nsm"}, + [0x830]={d="r"}, + [0x831]={d="r"}, + [0x832]={d="r"}, + [0x833]={d="r"}, + [0x834]={d="r"}, + [0x835]={d="r"}, + [0x836]={d="r"}, + [0x837]={d="r"}, + [0x838]={d="r"}, + [0x839]={d="r"}, + [0x83A]={d="r"}, + [0x83B]={d="r"}, + [0x83C]={d="r"}, + [0x83D]={d="r"}, + [0x83E]={d="r"}, + [0x840]={d="r"}, + [0x841]={d="r"}, + [0x842]={d="r"}, + [0x843]={d="r"}, + [0x844]={d="r"}, + [0x845]={d="r"}, + [0x846]={d="r"}, + [0x847]={d="r"}, + [0x848]={d="r"}, + [0x849]={d="r"}, + [0x84A]={d="r"}, + [0x84B]={d="r"}, + [0x84C]={d="r"}, + [0x84D]={d="r"}, + [0x84E]={d="r"}, + [0x84F]={d="r"}, + [0x850]={d="r"}, + [0x851]={d="r"}, + [0x852]={d="r"}, + [0x853]={d="r"}, + [0x854]={d="r"}, + [0x855]={d="r"}, + [0x856]={d="r"}, + [0x857]={d="r"}, + [0x858]={d="r"}, + [0x859]={d="nsm"}, + [0x85A]={d="nsm"}, + [0x85B]={d="nsm"}, + [0x85E]={d="r"}, + [0x860]={d="al"}, + [0x861]={d="al"}, + [0x862]={d="al"}, + [0x863]={d="al"}, + [0x864]={d="al"}, + [0x865]={d="al"}, + [0x866]={d="al"}, + [0x867]={d="al"}, + [0x868]={d="al"}, + [0x869]={d="al"}, + [0x86A]={d="al"}, + [0x870]={d="al"}, + [0x871]={d="al"}, + [0x872]={d="al"}, + [0x873]={d="al"}, + [0x874]={d="al"}, + [0x875]={d="al"}, + [0x876]={d="al"}, + [0x877]={d="al"}, + [0x878]={d="al"}, + [0x879]={d="al"}, + [0x87A]={d="al"}, + [0x87B]={d="al"}, + [0x87C]={d="al"}, + [0x87D]={d="al"}, + [0x87E]={d="al"}, + [0x87F]={d="al"}, + [0x880]={d="al"}, + [0x881]={d="al"}, + [0x882]={d="al"}, + [0x883]={d="al"}, + [0x884]={d="al"}, + [0x885]={d="al"}, + [0x886]={d="al"}, + [0x887]={d="al"}, + [0x888]={d="al"}, + [0x889]={d="al"}, + [0x88A]={d="al"}, + [0x88B]={d="al"}, + [0x88C]={d="al"}, + [0x88D]={d="al"}, + [0x88E]={d="al"}, + [0x890]={d="an"}, + [0x891]={d="an"}, + [0x898]={d="nsm"}, + [0x899]={d="nsm"}, + [0x89A]={d="nsm"}, + [0x89B]={d="nsm"}, + [0x89C]={d="nsm"}, + [0x89D]={d="nsm"}, + [0x89E]={d="nsm"}, + [0x89F]={d="nsm"}, + [0x8A0]={d="al"}, + [0x8A1]={d="al"}, + [0x8A2]={d="al"}, + [0x8A3]={d="al"}, + [0x8A4]={d="al"}, + [0x8A5]={d="al"}, + [0x8A6]={d="al"}, + [0x8A7]={d="al"}, + [0x8A8]={d="al"}, + [0x8A9]={d="al"}, + [0x8AA]={d="al"}, + [0x8AB]={d="al"}, + [0x8AC]={d="al"}, + [0x8AD]={d="al"}, + [0x8AE]={d="al"}, + [0x8AF]={d="al"}, + [0x8B0]={d="al"}, + [0x8B1]={d="al"}, + [0x8B2]={d="al"}, + [0x8B3]={d="al"}, + [0x8B4]={d="al"}, + [0x8B5]={d="al"}, + [0x8B6]={d="al"}, + [0x8B7]={d="al"}, + [0x8B8]={d="al"}, + [0x8B9]={d="al"}, + [0x8BA]={d="al"}, + [0x8BB]={d="al"}, + [0x8BC]={d="al"}, + [0x8BD]={d="al"}, + [0x8BE]={d="al"}, + [0x8BF]={d="al"}, + [0x8C0]={d="al"}, + [0x8C1]={d="al"}, + [0x8C2]={d="al"}, + [0x8C3]={d="al"}, + [0x8C4]={d="al"}, + [0x8C5]={d="al"}, + [0x8C6]={d="al"}, + [0x8C7]={d="al"}, + [0x8C8]={d="al"}, + [0x8C9]={d="al"}, + [0x8CA]={d="nsm"}, + [0x8CB]={d="nsm"}, + [0x8CC]={d="nsm"}, + [0x8CD]={d="nsm"}, + [0x8CE]={d="nsm"}, + [0x8CF]={d="nsm"}, + [0x8D0]={d="nsm"}, + [0x8D1]={d="nsm"}, + [0x8D2]={d="nsm"}, + [0x8D3]={d="nsm"}, + [0x8D4]={d="nsm"}, + [0x8D5]={d="nsm"}, + [0x8D6]={d="nsm"}, + [0x8D7]={d="nsm"}, + [0x8D8]={d="nsm"}, + [0x8D9]={d="nsm"}, + [0x8DA]={d="nsm"}, + [0x8DB]={d="nsm"}, + [0x8DC]={d="nsm"}, + [0x8DD]={d="nsm"}, + [0x8DE]={d="nsm"}, + [0x8DF]={d="nsm"}, + [0x8E0]={d="nsm"}, + [0x8E1]={d="nsm"}, + [0x8E2]={d="an"}, + [0x8E3]={d="nsm"}, + [0x8E4]={d="nsm"}, + [0x8E5]={d="nsm"}, + [0x8E6]={d="nsm"}, + [0x8E7]={d="nsm"}, + [0x8E8]={d="nsm"}, + [0x8E9]={d="nsm"}, + [0x8EA]={d="nsm"}, + [0x8EB]={d="nsm"}, + [0x8EC]={d="nsm"}, + [0x8ED]={d="nsm"}, + [0x8EE]={d="nsm"}, + [0x8EF]={d="nsm"}, + [0x8F0]={d="nsm"}, + [0x8F1]={d="nsm"}, + [0x8F2]={d="nsm"}, + [0x8F3]={d="nsm"}, + [0x8F4]={d="nsm"}, + [0x8F5]={d="nsm"}, + [0x8F6]={d="nsm"}, + [0x8F7]={d="nsm"}, + [0x8F8]={d="nsm"}, + [0x8F9]={d="nsm"}, + [0x8FA]={d="nsm"}, + [0x8FB]={d="nsm"}, + [0x8FC]={d="nsm"}, + [0x8FD]={d="nsm"}, + [0x8FE]={d="nsm"}, + [0x8FF]={d="nsm"}, + [0x900]={d="nsm"}, + [0x901]={d="nsm"}, + [0x902]={d="nsm"}, + [0x903]={d="l"}, + [0x904]={d="l"}, + [0x905]={d="l"}, + [0x906]={d="l"}, + [0x907]={d="l"}, + [0x908]={d="l"}, + [0x909]={d="l"}, + [0x90A]={d="l"}, + [0x90B]={d="l"}, + [0x90C]={d="l"}, + [0x90D]={d="l"}, + [0x90E]={d="l"}, + [0x90F]={d="l"}, + [0x910]={d="l"}, + [0x911]={d="l"}, + [0x912]={d="l"}, + [0x913]={d="l"}, + [0x914]={d="l"}, + [0x915]={d="l"}, + [0x916]={d="l"}, + [0x917]={d="l"}, + [0x918]={d="l"}, + [0x919]={d="l"}, + [0x91A]={d="l"}, + [0x91B]={d="l"}, + [0x91C]={d="l"}, + [0x91D]={d="l"}, + [0x91E]={d="l"}, + [0x91F]={d="l"}, + [0x920]={d="l"}, + [0x921]={d="l"}, + [0x922]={d="l"}, + [0x923]={d="l"}, + [0x924]={d="l"}, + [0x925]={d="l"}, + [0x926]={d="l"}, + [0x927]={d="l"}, + [0x928]={d="l"}, + [0x929]={d="l"}, + [0x92A]={d="l"}, + [0x92B]={d="l"}, + [0x92C]={d="l"}, + [0x92D]={d="l"}, + [0x92E]={d="l"}, + [0x92F]={d="l"}, + [0x930]={d="l"}, + [0x931]={d="l"}, + [0x932]={d="l"}, + [0x933]={d="l"}, + [0x934]={d="l"}, + [0x935]={d="l"}, + [0x936]={d="l"}, + [0x937]={d="l"}, + [0x938]={d="l"}, + [0x939]={d="l"}, + [0x93A]={d="nsm"}, + [0x93B]={d="l"}, + [0x93C]={d="nsm"}, + [0x93D]={d="l"}, + [0x93E]={d="l"}, + [0x93F]={d="l"}, + [0x940]={d="l"}, + [0x941]={d="nsm"}, + [0x942]={d="nsm"}, + [0x943]={d="nsm"}, + [0x944]={d="nsm"}, + [0x945]={d="nsm"}, + [0x946]={d="nsm"}, + [0x947]={d="nsm"}, + [0x948]={d="nsm"}, + [0x949]={d="l"}, + [0x94A]={d="l"}, + [0x94B]={d="l"}, + [0x94C]={d="l"}, + [0x94D]={d="nsm"}, + [0x94E]={d="l"}, + [0x94F]={d="l"}, + [0x950]={d="l"}, + [0x951]={d="nsm"}, + [0x952]={d="nsm"}, + [0x953]={d="nsm"}, + [0x954]={d="nsm"}, + [0x955]={d="nsm"}, + [0x956]={d="nsm"}, + [0x957]={d="nsm"}, + [0x958]={d="l"}, + [0x959]={d="l"}, + [0x95A]={d="l"}, + [0x95B]={d="l"}, + [0x95C]={d="l"}, + [0x95D]={d="l"}, + [0x95E]={d="l"}, + [0x95F]={d="l"}, + [0x960]={d="l"}, + [0x961]={d="l"}, + [0x962]={d="nsm"}, + [0x963]={d="nsm"}, + [0x964]={d="l"}, + [0x965]={d="l"}, + [0x966]={d="l"}, + [0x967]={d="l"}, + [0x968]={d="l"}, + [0x969]={d="l"}, + [0x96A]={d="l"}, + [0x96B]={d="l"}, + [0x96C]={d="l"}, + [0x96D]={d="l"}, + [0x96E]={d="l"}, + [0x96F]={d="l"}, + [0x970]={d="l"}, + [0x971]={d="l"}, + [0x972]={d="l"}, + [0x973]={d="l"}, + [0x974]={d="l"}, + [0x975]={d="l"}, + [0x976]={d="l"}, + [0x977]={d="l"}, + [0x978]={d="l"}, + [0x979]={d="l"}, + [0x97A]={d="l"}, + [0x97B]={d="l"}, + [0x97C]={d="l"}, + [0x97D]={d="l"}, + [0x97E]={d="l"}, + [0x97F]={d="l"}, + [0x980]={d="l"}, + [0x981]={d="nsm"}, + [0x982]={d="l"}, + [0x983]={d="l"}, + [0x985]={d="l"}, + [0x986]={d="l"}, + [0x987]={d="l"}, + [0x988]={d="l"}, + [0x989]={d="l"}, + [0x98A]={d="l"}, + [0x98B]={d="l"}, + [0x98C]={d="l"}, + [0x98F]={d="l"}, + [0x990]={d="l"}, + [0x993]={d="l"}, + [0x994]={d="l"}, + [0x995]={d="l"}, + [0x996]={d="l"}, + [0x997]={d="l"}, + [0x998]={d="l"}, + [0x999]={d="l"}, + [0x99A]={d="l"}, + [0x99B]={d="l"}, + [0x99C]={d="l"}, + [0x99D]={d="l"}, + [0x99E]={d="l"}, + [0x99F]={d="l"}, + [0x9A0]={d="l"}, + [0x9A1]={d="l"}, + [0x9A2]={d="l"}, + [0x9A3]={d="l"}, + [0x9A4]={d="l"}, + [0x9A5]={d="l"}, + [0x9A6]={d="l"}, + [0x9A7]={d="l"}, + [0x9A8]={d="l"}, + [0x9AA]={d="l"}, + [0x9AB]={d="l"}, + [0x9AC]={d="l"}, + [0x9AD]={d="l"}, + [0x9AE]={d="l"}, + [0x9AF]={d="l"}, + [0x9B0]={d="l"}, + [0x9B2]={d="l"}, + [0x9B6]={d="l"}, + [0x9B7]={d="l"}, + [0x9B8]={d="l"}, + [0x9B9]={d="l"}, + [0x9BC]={d="nsm"}, + [0x9BD]={d="l"}, + [0x9BE]={d="l"}, + [0x9BF]={d="l"}, + [0x9C0]={d="l"}, + [0x9C1]={d="nsm"}, + [0x9C2]={d="nsm"}, + [0x9C3]={d="nsm"}, + [0x9C4]={d="nsm"}, + [0x9C7]={d="l"}, + [0x9C8]={d="l"}, + [0x9CB]={d="l"}, + [0x9CC]={d="l"}, + [0x9CD]={d="nsm"}, + [0x9CE]={d="l"}, + [0x9D7]={d="l"}, + [0x9DC]={d="l"}, + [0x9DD]={d="l"}, + [0x9DF]={d="l"}, + [0x9E0]={d="l"}, + [0x9E1]={d="l"}, + [0x9E2]={d="nsm"}, + [0x9E3]={d="nsm"}, + [0x9E6]={d="l"}, + [0x9E7]={d="l"}, + [0x9E8]={d="l"}, + [0x9E9]={d="l"}, + [0x9EA]={d="l"}, + [0x9EB]={d="l"}, + [0x9EC]={d="l"}, + [0x9ED]={d="l"}, + [0x9EE]={d="l"}, + [0x9EF]={d="l"}, + [0x9F0]={d="l"}, + [0x9F1]={d="l"}, + [0x9F2]={d="et"}, + [0x9F3]={d="et"}, + [0x9F4]={d="l"}, + [0x9F5]={d="l"}, + [0x9F6]={d="l"}, + [0x9F7]={d="l"}, + [0x9F8]={d="l"}, + [0x9F9]={d="l"}, + [0x9FA]={d="l"}, + [0x9FB]={d="et"}, + [0x9FC]={d="l"}, + [0x9FD]={d="l"}, + [0x9FE]={d="nsm"}, + [0xA01]={d="nsm"}, + [0xA02]={d="nsm"}, + [0xA03]={d="l"}, + [0xA05]={d="l"}, + [0xA06]={d="l"}, + [0xA07]={d="l"}, + [0xA08]={d="l"}, + [0xA09]={d="l"}, + [0xA0A]={d="l"}, + [0xA0F]={d="l"}, + [0xA10]={d="l"}, + [0xA13]={d="l"}, + [0xA14]={d="l"}, + [0xA15]={d="l"}, + [0xA16]={d="l"}, + [0xA17]={d="l"}, + [0xA18]={d="l"}, + [0xA19]={d="l"}, + [0xA1A]={d="l"}, + [0xA1B]={d="l"}, + [0xA1C]={d="l"}, + [0xA1D]={d="l"}, + [0xA1E]={d="l"}, + [0xA1F]={d="l"}, + [0xA20]={d="l"}, + [0xA21]={d="l"}, + [0xA22]={d="l"}, + [0xA23]={d="l"}, + [0xA24]={d="l"}, + [0xA25]={d="l"}, + [0xA26]={d="l"}, + [0xA27]={d="l"}, + [0xA28]={d="l"}, + [0xA2A]={d="l"}, + [0xA2B]={d="l"}, + [0xA2C]={d="l"}, + [0xA2D]={d="l"}, + [0xA2E]={d="l"}, + [0xA2F]={d="l"}, + [0xA30]={d="l"}, + [0xA32]={d="l"}, + [0xA33]={d="l"}, + [0xA35]={d="l"}, + [0xA36]={d="l"}, + [0xA38]={d="l"}, + [0xA39]={d="l"}, + [0xA3C]={d="nsm"}, + [0xA3E]={d="l"}, + [0xA3F]={d="l"}, + [0xA40]={d="l"}, + [0xA41]={d="nsm"}, + [0xA42]={d="nsm"}, + [0xA47]={d="nsm"}, + [0xA48]={d="nsm"}, + [0xA4B]={d="nsm"}, + [0xA4C]={d="nsm"}, + [0xA4D]={d="nsm"}, + [0xA51]={d="nsm"}, + [0xA59]={d="l"}, + [0xA5A]={d="l"}, + [0xA5B]={d="l"}, + [0xA5C]={d="l"}, + [0xA5E]={d="l"}, + [0xA66]={d="l"}, + [0xA67]={d="l"}, + [0xA68]={d="l"}, + [0xA69]={d="l"}, + [0xA6A]={d="l"}, + [0xA6B]={d="l"}, + [0xA6C]={d="l"}, + [0xA6D]={d="l"}, + [0xA6E]={d="l"}, + [0xA6F]={d="l"}, + [0xA70]={d="nsm"}, + [0xA71]={d="nsm"}, + [0xA72]={d="l"}, + [0xA73]={d="l"}, + [0xA74]={d="l"}, + [0xA75]={d="nsm"}, + [0xA76]={d="l"}, + [0xA81]={d="nsm"}, + [0xA82]={d="nsm"}, + [0xA83]={d="l"}, + [0xA85]={d="l"}, + [0xA86]={d="l"}, + [0xA87]={d="l"}, + [0xA88]={d="l"}, + [0xA89]={d="l"}, + [0xA8A]={d="l"}, + [0xA8B]={d="l"}, + [0xA8C]={d="l"}, + [0xA8D]={d="l"}, + [0xA8F]={d="l"}, + [0xA90]={d="l"}, + [0xA91]={d="l"}, + [0xA93]={d="l"}, + [0xA94]={d="l"}, + [0xA95]={d="l"}, + [0xA96]={d="l"}, + [0xA97]={d="l"}, + [0xA98]={d="l"}, + [0xA99]={d="l"}, + [0xA9A]={d="l"}, + [0xA9B]={d="l"}, + [0xA9C]={d="l"}, + [0xA9D]={d="l"}, + [0xA9E]={d="l"}, + [0xA9F]={d="l"}, + [0xAA0]={d="l"}, + [0xAA1]={d="l"}, + [0xAA2]={d="l"}, + [0xAA3]={d="l"}, + [0xAA4]={d="l"}, + [0xAA5]={d="l"}, + [0xAA6]={d="l"}, + [0xAA7]={d="l"}, + [0xAA8]={d="l"}, + [0xAAA]={d="l"}, + [0xAAB]={d="l"}, + [0xAAC]={d="l"}, + [0xAAD]={d="l"}, + [0xAAE]={d="l"}, + [0xAAF]={d="l"}, + [0xAB0]={d="l"}, + [0xAB2]={d="l"}, + [0xAB3]={d="l"}, + [0xAB5]={d="l"}, + [0xAB6]={d="l"}, + [0xAB7]={d="l"}, + [0xAB8]={d="l"}, + [0xAB9]={d="l"}, + [0xABC]={d="nsm"}, + [0xABD]={d="l"}, + [0xABE]={d="l"}, + [0xABF]={d="l"}, + [0xAC0]={d="l"}, + [0xAC1]={d="nsm"}, + [0xAC2]={d="nsm"}, + [0xAC3]={d="nsm"}, + [0xAC4]={d="nsm"}, + [0xAC5]={d="nsm"}, + [0xAC7]={d="nsm"}, + [0xAC8]={d="nsm"}, + [0xAC9]={d="l"}, + [0xACB]={d="l"}, + [0xACC]={d="l"}, + [0xACD]={d="nsm"}, + [0xAD0]={d="l"}, + [0xAE0]={d="l"}, + [0xAE1]={d="l"}, + [0xAE2]={d="nsm"}, + [0xAE3]={d="nsm"}, + [0xAE6]={d="l"}, + [0xAE7]={d="l"}, + [0xAE8]={d="l"}, + [0xAE9]={d="l"}, + [0xAEA]={d="l"}, + [0xAEB]={d="l"}, + [0xAEC]={d="l"}, + [0xAED]={d="l"}, + [0xAEE]={d="l"}, + [0xAEF]={d="l"}, + [0xAF0]={d="l"}, + [0xAF1]={d="et"}, + [0xAF9]={d="l"}, + [0xAFA]={d="nsm"}, + [0xAFB]={d="nsm"}, + [0xAFC]={d="nsm"}, + [0xAFD]={d="nsm"}, + [0xAFE]={d="nsm"}, + [0xAFF]={d="nsm"}, + [0xB01]={d="nsm"}, + [0xB02]={d="l"}, + [0xB03]={d="l"}, + [0xB05]={d="l"}, + [0xB06]={d="l"}, + [0xB07]={d="l"}, + [0xB08]={d="l"}, + [0xB09]={d="l"}, + [0xB0A]={d="l"}, + [0xB0B]={d="l"}, + [0xB0C]={d="l"}, + [0xB0F]={d="l"}, + [0xB10]={d="l"}, + [0xB13]={d="l"}, + [0xB14]={d="l"}, + [0xB15]={d="l"}, + [0xB16]={d="l"}, + [0xB17]={d="l"}, + [0xB18]={d="l"}, + [0xB19]={d="l"}, + [0xB1A]={d="l"}, + [0xB1B]={d="l"}, + [0xB1C]={d="l"}, + [0xB1D]={d="l"}, + [0xB1E]={d="l"}, + [0xB1F]={d="l"}, + [0xB20]={d="l"}, + [0xB21]={d="l"}, + [0xB22]={d="l"}, + [0xB23]={d="l"}, + [0xB24]={d="l"}, + [0xB25]={d="l"}, + [0xB26]={d="l"}, + [0xB27]={d="l"}, + [0xB28]={d="l"}, + [0xB2A]={d="l"}, + [0xB2B]={d="l"}, + [0xB2C]={d="l"}, + [0xB2D]={d="l"}, + [0xB2E]={d="l"}, + [0xB2F]={d="l"}, + [0xB30]={d="l"}, + [0xB32]={d="l"}, + [0xB33]={d="l"}, + [0xB35]={d="l"}, + [0xB36]={d="l"}, + [0xB37]={d="l"}, + [0xB38]={d="l"}, + [0xB39]={d="l"}, + [0xB3C]={d="nsm"}, + [0xB3D]={d="l"}, + [0xB3E]={d="l"}, + [0xB3F]={d="nsm"}, + [0xB40]={d="l"}, + [0xB41]={d="nsm"}, + [0xB42]={d="nsm"}, + [0xB43]={d="nsm"}, + [0xB44]={d="nsm"}, + [0xB47]={d="l"}, + [0xB48]={d="l"}, + [0xB4B]={d="l"}, + [0xB4C]={d="l"}, + [0xB4D]={d="nsm"}, + [0xB55]={d="nsm"}, + [0xB56]={d="nsm"}, + [0xB57]={d="l"}, + [0xB5C]={d="l"}, + [0xB5D]={d="l"}, + [0xB5F]={d="l"}, + [0xB60]={d="l"}, + [0xB61]={d="l"}, + [0xB62]={d="nsm"}, + [0xB63]={d="nsm"}, + [0xB66]={d="l"}, + [0xB67]={d="l"}, + [0xB68]={d="l"}, + [0xB69]={d="l"}, + [0xB6A]={d="l"}, + [0xB6B]={d="l"}, + [0xB6C]={d="l"}, + [0xB6D]={d="l"}, + [0xB6E]={d="l"}, + [0xB6F]={d="l"}, + [0xB70]={d="l"}, + [0xB71]={d="l"}, + [0xB72]={d="l"}, + [0xB73]={d="l"}, + [0xB74]={d="l"}, + [0xB75]={d="l"}, + [0xB76]={d="l"}, + [0xB77]={d="l"}, + [0xB82]={d="nsm"}, + [0xB83]={d="l"}, + [0xB85]={d="l"}, + [0xB86]={d="l"}, + [0xB87]={d="l"}, + [0xB88]={d="l"}, + [0xB89]={d="l"}, + [0xB8A]={d="l"}, + [0xB8E]={d="l"}, + [0xB8F]={d="l"}, + [0xB90]={d="l"}, + [0xB92]={d="l"}, + [0xB93]={d="l"}, + [0xB94]={d="l"}, + [0xB95]={d="l"}, + [0xB99]={d="l"}, + [0xB9A]={d="l"}, + [0xB9C]={d="l"}, + [0xB9E]={d="l"}, + [0xB9F]={d="l"}, + [0xBA3]={d="l"}, + [0xBA4]={d="l"}, + [0xBA8]={d="l"}, + [0xBA9]={d="l"}, + [0xBAA]={d="l"}, + [0xBAE]={d="l"}, + [0xBAF]={d="l"}, + [0xBB0]={d="l"}, + [0xBB1]={d="l"}, + [0xBB2]={d="l"}, + [0xBB3]={d="l"}, + [0xBB4]={d="l"}, + [0xBB5]={d="l"}, + [0xBB6]={d="l"}, + [0xBB7]={d="l"}, + [0xBB8]={d="l"}, + [0xBB9]={d="l"}, + [0xBBE]={d="l"}, + [0xBBF]={d="l"}, + [0xBC0]={d="nsm"}, + [0xBC1]={d="l"}, + [0xBC2]={d="l"}, + [0xBC6]={d="l"}, + [0xBC7]={d="l"}, + [0xBC8]={d="l"}, + [0xBCA]={d="l"}, + [0xBCB]={d="l"}, + [0xBCC]={d="l"}, + [0xBCD]={d="nsm"}, + [0xBD0]={d="l"}, + [0xBD7]={d="l"}, + [0xBE6]={d="l"}, + [0xBE7]={d="l"}, + [0xBE8]={d="l"}, + [0xBE9]={d="l"}, + [0xBEA]={d="l"}, + [0xBEB]={d="l"}, + [0xBEC]={d="l"}, + [0xBED]={d="l"}, + [0xBEE]={d="l"}, + [0xBEF]={d="l"}, + [0xBF0]={d="l"}, + [0xBF1]={d="l"}, + [0xBF2]={d="l"}, + [0xBF3]={d="on"}, + [0xBF4]={d="on"}, + [0xBF5]={d="on"}, + [0xBF6]={d="on"}, + [0xBF7]={d="on"}, + [0xBF8]={d="on"}, + [0xBF9]={d="et"}, + [0xBFA]={d="on"}, + [0xC00]={d="nsm"}, + [0xC01]={d="l"}, + [0xC02]={d="l"}, + [0xC03]={d="l"}, + [0xC04]={d="nsm"}, + [0xC05]={d="l"}, + [0xC06]={d="l"}, + [0xC07]={d="l"}, + [0xC08]={d="l"}, + [0xC09]={d="l"}, + [0xC0A]={d="l"}, + [0xC0B]={d="l"}, + [0xC0C]={d="l"}, + [0xC0E]={d="l"}, + [0xC0F]={d="l"}, + [0xC10]={d="l"}, + [0xC12]={d="l"}, + [0xC13]={d="l"}, + [0xC14]={d="l"}, + [0xC15]={d="l"}, + [0xC16]={d="l"}, + [0xC17]={d="l"}, + [0xC18]={d="l"}, + [0xC19]={d="l"}, + [0xC1A]={d="l"}, + [0xC1B]={d="l"}, + [0xC1C]={d="l"}, + [0xC1D]={d="l"}, + [0xC1E]={d="l"}, + [0xC1F]={d="l"}, + [0xC20]={d="l"}, + [0xC21]={d="l"}, + [0xC22]={d="l"}, + [0xC23]={d="l"}, + [0xC24]={d="l"}, + [0xC25]={d="l"}, + [0xC26]={d="l"}, + [0xC27]={d="l"}, + [0xC28]={d="l"}, + [0xC2A]={d="l"}, + [0xC2B]={d="l"}, + [0xC2C]={d="l"}, + [0xC2D]={d="l"}, + [0xC2E]={d="l"}, + [0xC2F]={d="l"}, + [0xC30]={d="l"}, + [0xC31]={d="l"}, + [0xC32]={d="l"}, + [0xC33]={d="l"}, + [0xC34]={d="l"}, + [0xC35]={d="l"}, + [0xC36]={d="l"}, + [0xC37]={d="l"}, + [0xC38]={d="l"}, + [0xC39]={d="l"}, + [0xC3C]={d="nsm"}, + [0xC3D]={d="l"}, + [0xC3E]={d="nsm"}, + [0xC3F]={d="nsm"}, + [0xC40]={d="nsm"}, + [0xC41]={d="l"}, + [0xC42]={d="l"}, + [0xC43]={d="l"}, + [0xC44]={d="l"}, + [0xC46]={d="nsm"}, + [0xC47]={d="nsm"}, + [0xC48]={d="nsm"}, + [0xC4A]={d="nsm"}, + [0xC4B]={d="nsm"}, + [0xC4C]={d="nsm"}, + [0xC4D]={d="nsm"}, + [0xC55]={d="nsm"}, + [0xC56]={d="nsm"}, + [0xC58]={d="l"}, + [0xC59]={d="l"}, + [0xC5A]={d="l"}, + [0xC5D]={d="l"}, + [0xC60]={d="l"}, + [0xC61]={d="l"}, + [0xC62]={d="nsm"}, + [0xC63]={d="nsm"}, + [0xC66]={d="l"}, + [0xC67]={d="l"}, + [0xC68]={d="l"}, + [0xC69]={d="l"}, + [0xC6A]={d="l"}, + [0xC6B]={d="l"}, + [0xC6C]={d="l"}, + [0xC6D]={d="l"}, + [0xC6E]={d="l"}, + [0xC6F]={d="l"}, + [0xC77]={d="l"}, + [0xC78]={d="on"}, + [0xC79]={d="on"}, + [0xC7A]={d="on"}, + [0xC7B]={d="on"}, + [0xC7C]={d="on"}, + [0xC7D]={d="on"}, + [0xC7E]={d="on"}, + [0xC7F]={d="l"}, + [0xC80]={d="l"}, + [0xC81]={d="nsm"}, + [0xC82]={d="l"}, + [0xC83]={d="l"}, + [0xC84]={d="l"}, + [0xC85]={d="l"}, + [0xC86]={d="l"}, + [0xC87]={d="l"}, + [0xC88]={d="l"}, + [0xC89]={d="l"}, + [0xC8A]={d="l"}, + [0xC8B]={d="l"}, + [0xC8C]={d="l"}, + [0xC8E]={d="l"}, + [0xC8F]={d="l"}, + [0xC90]={d="l"}, + [0xC92]={d="l"}, + [0xC93]={d="l"}, + [0xC94]={d="l"}, + [0xC95]={d="l"}, + [0xC96]={d="l"}, + [0xC97]={d="l"}, + [0xC98]={d="l"}, + [0xC99]={d="l"}, + [0xC9A]={d="l"}, + [0xC9B]={d="l"}, + [0xC9C]={d="l"}, + [0xC9D]={d="l"}, + [0xC9E]={d="l"}, + [0xC9F]={d="l"}, + [0xCA0]={d="l"}, + [0xCA1]={d="l"}, + [0xCA2]={d="l"}, + [0xCA3]={d="l"}, + [0xCA4]={d="l"}, + [0xCA5]={d="l"}, + [0xCA6]={d="l"}, + [0xCA7]={d="l"}, + [0xCA8]={d="l"}, + [0xCAA]={d="l"}, + [0xCAB]={d="l"}, + [0xCAC]={d="l"}, + [0xCAD]={d="l"}, + [0xCAE]={d="l"}, + [0xCAF]={d="l"}, + [0xCB0]={d="l"}, + [0xCB1]={d="l"}, + [0xCB2]={d="l"}, + [0xCB3]={d="l"}, + [0xCB5]={d="l"}, + [0xCB6]={d="l"}, + [0xCB7]={d="l"}, + [0xCB8]={d="l"}, + [0xCB9]={d="l"}, + [0xCBC]={d="nsm"}, + [0xCBD]={d="l"}, + [0xCBE]={d="l"}, + [0xCBF]={d="l"}, + [0xCC0]={d="l"}, + [0xCC1]={d="l"}, + [0xCC2]={d="l"}, + [0xCC3]={d="l"}, + [0xCC4]={d="l"}, + [0xCC6]={d="l"}, + [0xCC7]={d="l"}, + [0xCC8]={d="l"}, + [0xCCA]={d="l"}, + [0xCCB]={d="l"}, + [0xCCC]={d="nsm"}, + [0xCCD]={d="nsm"}, + [0xCD5]={d="l"}, + [0xCD6]={d="l"}, + [0xCDD]={d="l"}, + [0xCDE]={d="l"}, + [0xCE0]={d="l"}, + [0xCE1]={d="l"}, + [0xCE2]={d="nsm"}, + [0xCE3]={d="nsm"}, + [0xCE6]={d="l"}, + [0xCE7]={d="l"}, + [0xCE8]={d="l"}, + [0xCE9]={d="l"}, + [0xCEA]={d="l"}, + [0xCEB]={d="l"}, + [0xCEC]={d="l"}, + [0xCED]={d="l"}, + [0xCEE]={d="l"}, + [0xCEF]={d="l"}, + [0xCF1]={d="l"}, + [0xCF2]={d="l"}, + [0xCF3]={d="l"}, + [0xD00]={d="nsm"}, + [0xD01]={d="nsm"}, + [0xD02]={d="l"}, + [0xD03]={d="l"}, + [0xD04]={d="l"}, + [0xD05]={d="l"}, + [0xD06]={d="l"}, + [0xD07]={d="l"}, + [0xD08]={d="l"}, + [0xD09]={d="l"}, + [0xD0A]={d="l"}, + [0xD0B]={d="l"}, + [0xD0C]={d="l"}, + [0xD0E]={d="l"}, + [0xD0F]={d="l"}, + [0xD10]={d="l"}, + [0xD12]={d="l"}, + [0xD13]={d="l"}, + [0xD14]={d="l"}, + [0xD15]={d="l"}, + [0xD16]={d="l"}, + [0xD17]={d="l"}, + [0xD18]={d="l"}, + [0xD19]={d="l"}, + [0xD1A]={d="l"}, + [0xD1B]={d="l"}, + [0xD1C]={d="l"}, + [0xD1D]={d="l"}, + [0xD1E]={d="l"}, + [0xD1F]={d="l"}, + [0xD20]={d="l"}, + [0xD21]={d="l"}, + [0xD22]={d="l"}, + [0xD23]={d="l"}, + [0xD24]={d="l"}, + [0xD25]={d="l"}, + [0xD26]={d="l"}, + [0xD27]={d="l"}, + [0xD28]={d="l"}, + [0xD29]={d="l"}, + [0xD2A]={d="l"}, + [0xD2B]={d="l"}, + [0xD2C]={d="l"}, + [0xD2D]={d="l"}, + [0xD2E]={d="l"}, + [0xD2F]={d="l"}, + [0xD30]={d="l"}, + [0xD31]={d="l"}, + [0xD32]={d="l"}, + [0xD33]={d="l"}, + [0xD34]={d="l"}, + [0xD35]={d="l"}, + [0xD36]={d="l"}, + [0xD37]={d="l"}, + [0xD38]={d="l"}, + [0xD39]={d="l"}, + [0xD3A]={d="l"}, + [0xD3B]={d="nsm"}, + [0xD3C]={d="nsm"}, + [0xD3D]={d="l"}, + [0xD3E]={d="l"}, + [0xD3F]={d="l"}, + [0xD40]={d="l"}, + [0xD41]={d="nsm"}, + [0xD42]={d="nsm"}, + [0xD43]={d="nsm"}, + [0xD44]={d="nsm"}, + [0xD46]={d="l"}, + [0xD47]={d="l"}, + [0xD48]={d="l"}, + [0xD4A]={d="l"}, + [0xD4B]={d="l"}, + [0xD4C]={d="l"}, + [0xD4D]={d="nsm"}, + [0xD4E]={d="l"}, + [0xD4F]={d="l"}, + [0xD54]={d="l"}, + [0xD55]={d="l"}, + [0xD56]={d="l"}, + [0xD57]={d="l"}, + [0xD58]={d="l"}, + [0xD59]={d="l"}, + [0xD5A]={d="l"}, + [0xD5B]={d="l"}, + [0xD5C]={d="l"}, + [0xD5D]={d="l"}, + [0xD5E]={d="l"}, + [0xD5F]={d="l"}, + [0xD60]={d="l"}, + [0xD61]={d="l"}, + [0xD62]={d="nsm"}, + [0xD63]={d="nsm"}, + [0xD66]={d="l"}, + [0xD67]={d="l"}, + [0xD68]={d="l"}, + [0xD69]={d="l"}, + [0xD6A]={d="l"}, + [0xD6B]={d="l"}, + [0xD6C]={d="l"}, + [0xD6D]={d="l"}, + [0xD6E]={d="l"}, + [0xD6F]={d="l"}, + [0xD70]={d="l"}, + [0xD71]={d="l"}, + [0xD72]={d="l"}, + [0xD73]={d="l"}, + [0xD74]={d="l"}, + [0xD75]={d="l"}, + [0xD76]={d="l"}, + [0xD77]={d="l"}, + [0xD78]={d="l"}, + [0xD79]={d="l"}, + [0xD7A]={d="l"}, + [0xD7B]={d="l"}, + [0xD7C]={d="l"}, + [0xD7D]={d="l"}, + [0xD7E]={d="l"}, + [0xD7F]={d="l"}, + [0xD81]={d="nsm"}, + [0xD82]={d="l"}, + [0xD83]={d="l"}, + [0xD85]={d="l"}, + [0xD86]={d="l"}, + [0xD87]={d="l"}, + [0xD88]={d="l"}, + [0xD89]={d="l"}, + [0xD8A]={d="l"}, + [0xD8B]={d="l"}, + [0xD8C]={d="l"}, + [0xD8D]={d="l"}, + [0xD8E]={d="l"}, + [0xD8F]={d="l"}, + [0xD90]={d="l"}, + [0xD91]={d="l"}, + [0xD92]={d="l"}, + [0xD93]={d="l"}, + [0xD94]={d="l"}, + [0xD95]={d="l"}, + [0xD96]={d="l"}, + [0xD9A]={d="l"}, + [0xD9B]={d="l"}, + [0xD9C]={d="l"}, + [0xD9D]={d="l"}, + [0xD9E]={d="l"}, + [0xD9F]={d="l"}, + [0xDA0]={d="l"}, + [0xDA1]={d="l"}, + [0xDA2]={d="l"}, + [0xDA3]={d="l"}, + [0xDA4]={d="l"}, + [0xDA5]={d="l"}, + [0xDA6]={d="l"}, + [0xDA7]={d="l"}, + [0xDA8]={d="l"}, + [0xDA9]={d="l"}, + [0xDAA]={d="l"}, + [0xDAB]={d="l"}, + [0xDAC]={d="l"}, + [0xDAD]={d="l"}, + [0xDAE]={d="l"}, + [0xDAF]={d="l"}, + [0xDB0]={d="l"}, + [0xDB1]={d="l"}, + [0xDB3]={d="l"}, + [0xDB4]={d="l"}, + [0xDB5]={d="l"}, + [0xDB6]={d="l"}, + [0xDB7]={d="l"}, + [0xDB8]={d="l"}, + [0xDB9]={d="l"}, + [0xDBA]={d="l"}, + [0xDBB]={d="l"}, + [0xDBD]={d="l"}, + [0xDC0]={d="l"}, + [0xDC1]={d="l"}, + [0xDC2]={d="l"}, + [0xDC3]={d="l"}, + [0xDC4]={d="l"}, + [0xDC5]={d="l"}, + [0xDC6]={d="l"}, + [0xDCA]={d="nsm"}, + [0xDCF]={d="l"}, + [0xDD0]={d="l"}, + [0xDD1]={d="l"}, + [0xDD2]={d="nsm"}, + [0xDD3]={d="nsm"}, + [0xDD4]={d="nsm"}, + [0xDD6]={d="nsm"}, + [0xDD8]={d="l"}, + [0xDD9]={d="l"}, + [0xDDA]={d="l"}, + [0xDDB]={d="l"}, + [0xDDC]={d="l"}, + [0xDDD]={d="l"}, + [0xDDE]={d="l"}, + [0xDDF]={d="l"}, + [0xDE6]={d="l"}, + [0xDE7]={d="l"}, + [0xDE8]={d="l"}, + [0xDE9]={d="l"}, + [0xDEA]={d="l"}, + [0xDEB]={d="l"}, + [0xDEC]={d="l"}, + [0xDED]={d="l"}, + [0xDEE]={d="l"}, + [0xDEF]={d="l"}, + [0xDF2]={d="l"}, + [0xDF3]={d="l"}, + [0xDF4]={d="l"}, + [0xE01]={d="l"}, + [0xE02]={d="l"}, + [0xE03]={d="l"}, + [0xE04]={d="l"}, + [0xE05]={d="l"}, + [0xE06]={d="l"}, + [0xE07]={d="l"}, + [0xE08]={d="l"}, + [0xE09]={d="l"}, + [0xE0A]={d="l"}, + [0xE0B]={d="l"}, + [0xE0C]={d="l"}, + [0xE0D]={d="l"}, + [0xE0E]={d="l"}, + [0xE0F]={d="l"}, + [0xE10]={d="l"}, + [0xE11]={d="l"}, + [0xE12]={d="l"}, + [0xE13]={d="l"}, + [0xE14]={d="l"}, + [0xE15]={d="l"}, + [0xE16]={d="l"}, + [0xE17]={d="l"}, + [0xE18]={d="l"}, + [0xE19]={d="l"}, + [0xE1A]={d="l"}, + [0xE1B]={d="l"}, + [0xE1C]={d="l"}, + [0xE1D]={d="l"}, + [0xE1E]={d="l"}, + [0xE1F]={d="l"}, + [0xE20]={d="l"}, + [0xE21]={d="l"}, + [0xE22]={d="l"}, + [0xE23]={d="l"}, + [0xE24]={d="l"}, + [0xE25]={d="l"}, + [0xE26]={d="l"}, + [0xE27]={d="l"}, + [0xE28]={d="l"}, + [0xE29]={d="l"}, + [0xE2A]={d="l"}, + [0xE2B]={d="l"}, + [0xE2C]={d="l"}, + [0xE2D]={d="l"}, + [0xE2E]={d="l"}, + [0xE2F]={d="l"}, + [0xE30]={d="l"}, + [0xE31]={d="nsm"}, + [0xE32]={d="l"}, + [0xE33]={d="l"}, + [0xE34]={d="nsm"}, + [0xE35]={d="nsm"}, + [0xE36]={d="nsm"}, + [0xE37]={d="nsm"}, + [0xE38]={d="nsm"}, + [0xE39]={d="nsm"}, + [0xE3A]={d="nsm"}, + [0xE3F]={d="et"}, + [0xE40]={d="l"}, + [0xE41]={d="l"}, + [0xE42]={d="l"}, + [0xE43]={d="l"}, + [0xE44]={d="l"}, + [0xE45]={d="l"}, + [0xE46]={d="l"}, + [0xE47]={d="nsm"}, + [0xE48]={d="nsm"}, + [0xE49]={d="nsm"}, + [0xE4A]={d="nsm"}, + [0xE4B]={d="nsm"}, + [0xE4C]={d="nsm"}, + [0xE4D]={d="nsm"}, + [0xE4E]={d="nsm"}, + [0xE4F]={d="l"}, + [0xE50]={d="l"}, + [0xE51]={d="l"}, + [0xE52]={d="l"}, + [0xE53]={d="l"}, + [0xE54]={d="l"}, + [0xE55]={d="l"}, + [0xE56]={d="l"}, + [0xE57]={d="l"}, + [0xE58]={d="l"}, + [0xE59]={d="l"}, + [0xE5A]={d="l"}, + [0xE5B]={d="l"}, + [0xE81]={d="l"}, + [0xE82]={d="l"}, + [0xE84]={d="l"}, + [0xE86]={d="l"}, + [0xE87]={d="l"}, + [0xE88]={d="l"}, + [0xE89]={d="l"}, + [0xE8A]={d="l"}, + [0xE8C]={d="l"}, + [0xE8D]={d="l"}, + [0xE8E]={d="l"}, + [0xE8F]={d="l"}, + [0xE90]={d="l"}, + [0xE91]={d="l"}, + [0xE92]={d="l"}, + [0xE93]={d="l"}, + [0xE94]={d="l"}, + [0xE95]={d="l"}, + [0xE96]={d="l"}, + [0xE97]={d="l"}, + [0xE98]={d="l"}, + [0xE99]={d="l"}, + [0xE9A]={d="l"}, + [0xE9B]={d="l"}, + [0xE9C]={d="l"}, + [0xE9D]={d="l"}, + [0xE9E]={d="l"}, + [0xE9F]={d="l"}, + [0xEA0]={d="l"}, + [0xEA1]={d="l"}, + [0xEA2]={d="l"}, + [0xEA3]={d="l"}, + [0xEA5]={d="l"}, + [0xEA7]={d="l"}, + [0xEA8]={d="l"}, + [0xEA9]={d="l"}, + [0xEAA]={d="l"}, + [0xEAB]={d="l"}, + [0xEAC]={d="l"}, + [0xEAD]={d="l"}, + [0xEAE]={d="l"}, + [0xEAF]={d="l"}, + [0xEB0]={d="l"}, + [0xEB1]={d="nsm"}, + [0xEB2]={d="l"}, + [0xEB3]={d="l"}, + [0xEB4]={d="nsm"}, + [0xEB5]={d="nsm"}, + [0xEB6]={d="nsm"}, + [0xEB7]={d="nsm"}, + [0xEB8]={d="nsm"}, + [0xEB9]={d="nsm"}, + [0xEBA]={d="nsm"}, + [0xEBB]={d="nsm"}, + [0xEBC]={d="nsm"}, + [0xEBD]={d="l"}, + [0xEC0]={d="l"}, + [0xEC1]={d="l"}, + [0xEC2]={d="l"}, + [0xEC3]={d="l"}, + [0xEC4]={d="l"}, + [0xEC6]={d="l"}, + [0xEC8]={d="nsm"}, + [0xEC9]={d="nsm"}, + [0xECA]={d="nsm"}, + [0xECB]={d="nsm"}, + [0xECC]={d="nsm"}, + [0xECD]={d="nsm"}, + [0xECE]={d="nsm"}, + [0xED0]={d="l"}, + [0xED1]={d="l"}, + [0xED2]={d="l"}, + [0xED3]={d="l"}, + [0xED4]={d="l"}, + [0xED5]={d="l"}, + [0xED6]={d="l"}, + [0xED7]={d="l"}, + [0xED8]={d="l"}, + [0xED9]={d="l"}, + [0xEDC]={d="l"}, + [0xEDD]={d="l"}, + [0xEDE]={d="l"}, + [0xEDF]={d="l"}, + [0xF00]={d="l"}, + [0xF01]={d="l"}, + [0xF02]={d="l"}, + [0xF03]={d="l"}, + [0xF04]={d="l"}, + [0xF05]={d="l"}, + [0xF06]={d="l"}, + [0xF07]={d="l"}, + [0xF08]={d="l"}, + [0xF09]={d="l"}, + [0xF0A]={d="l"}, + [0xF0B]={d="l"}, + [0xF0C]={d="l"}, + [0xF0D]={d="l"}, + [0xF0E]={d="l"}, + [0xF0F]={d="l"}, + [0xF10]={d="l"}, + [0xF11]={d="l"}, + [0xF12]={d="l"}, + [0xF13]={d="l"}, + [0xF14]={d="l"}, + [0xF15]={d="l"}, + [0xF16]={d="l"}, + [0xF17]={d="l"}, + [0xF18]={d="nsm"}, + [0xF19]={d="nsm"}, + [0xF1A]={d="l"}, + [0xF1B]={d="l"}, + [0xF1C]={d="l"}, + [0xF1D]={d="l"}, + [0xF1E]={d="l"}, + [0xF1F]={d="l"}, + [0xF20]={d="l"}, + [0xF21]={d="l"}, + [0xF22]={d="l"}, + [0xF23]={d="l"}, + [0xF24]={d="l"}, + [0xF25]={d="l"}, + [0xF26]={d="l"}, + [0xF27]={d="l"}, + [0xF28]={d="l"}, + [0xF29]={d="l"}, + [0xF2A]={d="l"}, + [0xF2B]={d="l"}, + [0xF2C]={d="l"}, + [0xF2D]={d="l"}, + [0xF2E]={d="l"}, + [0xF2F]={d="l"}, + [0xF30]={d="l"}, + [0xF31]={d="l"}, + [0xF32]={d="l"}, + [0xF33]={d="l"}, + [0xF34]={d="l"}, + [0xF35]={d="nsm"}, + [0xF36]={d="l"}, + [0xF37]={d="nsm"}, + [0xF38]={d="l"}, + [0xF39]={d="nsm"}, + [0xF3A]={d="on", + m=0xF3B}, + [0xF3B]={d="on", + m=0xF3A}, + [0xF3C]={d="on", + m=0xF3D}, + [0xF3D]={d="on", + m=0xF3C}, + [0xF3E]={d="l"}, + [0xF3F]={d="l"}, + [0xF40]={d="l"}, + [0xF41]={d="l"}, + [0xF42]={d="l"}, + [0xF43]={d="l"}, + [0xF44]={d="l"}, + [0xF45]={d="l"}, + [0xF46]={d="l"}, + [0xF47]={d="l"}, + [0xF49]={d="l"}, + [0xF4A]={d="l"}, + [0xF4B]={d="l"}, + [0xF4C]={d="l"}, + [0xF4D]={d="l"}, + [0xF4E]={d="l"}, + [0xF4F]={d="l"}, + [0xF50]={d="l"}, + [0xF51]={d="l"}, + [0xF52]={d="l"}, + [0xF53]={d="l"}, + [0xF54]={d="l"}, + [0xF55]={d="l"}, + [0xF56]={d="l"}, + [0xF57]={d="l"}, + [0xF58]={d="l"}, + [0xF59]={d="l"}, + [0xF5A]={d="l"}, + [0xF5B]={d="l"}, + [0xF5C]={d="l"}, + [0xF5D]={d="l"}, + [0xF5E]={d="l"}, + [0xF5F]={d="l"}, + [0xF60]={d="l"}, + [0xF61]={d="l"}, + [0xF62]={d="l"}, + [0xF63]={d="l"}, + [0xF64]={d="l"}, + [0xF65]={d="l"}, + [0xF66]={d="l"}, + [0xF67]={d="l"}, + [0xF68]={d="l"}, + [0xF69]={d="l"}, + [0xF6A]={d="l"}, + [0xF6B]={d="l"}, + [0xF6C]={d="l"}, + [0xF71]={d="nsm"}, + [0xF72]={d="nsm"}, + [0xF73]={d="nsm"}, + [0xF74]={d="nsm"}, + [0xF75]={d="nsm"}, + [0xF76]={d="nsm"}, + [0xF77]={d="nsm"}, + [0xF78]={d="nsm"}, + [0xF79]={d="nsm"}, + [0xF7A]={d="nsm"}, + [0xF7B]={d="nsm"}, + [0xF7C]={d="nsm"}, + [0xF7D]={d="nsm"}, + [0xF7E]={d="nsm"}, + [0xF7F]={d="l"}, + [0xF80]={d="nsm"}, + [0xF81]={d="nsm"}, + [0xF82]={d="nsm"}, + [0xF83]={d="nsm"}, + [0xF84]={d="nsm"}, + [0xF85]={d="l"}, + [0xF86]={d="nsm"}, + [0xF87]={d="nsm"}, + [0xF88]={d="l"}, + [0xF89]={d="l"}, + [0xF8A]={d="l"}, + [0xF8B]={d="l"}, + [0xF8C]={d="l"}, + [0xF8D]={d="nsm"}, + [0xF8E]={d="nsm"}, + [0xF8F]={d="nsm"}, + [0xF90]={d="nsm"}, + [0xF91]={d="nsm"}, + [0xF92]={d="nsm"}, + [0xF93]={d="nsm"}, + [0xF94]={d="nsm"}, + [0xF95]={d="nsm"}, + [0xF96]={d="nsm"}, + [0xF97]={d="nsm"}, + [0xF99]={d="nsm"}, + [0xF9A]={d="nsm"}, + [0xF9B]={d="nsm"}, + [0xF9C]={d="nsm"}, + [0xF9D]={d="nsm"}, + [0xF9E]={d="nsm"}, + [0xF9F]={d="nsm"}, + [0xFA0]={d="nsm"}, + [0xFA1]={d="nsm"}, + [0xFA2]={d="nsm"}, + [0xFA3]={d="nsm"}, + [0xFA4]={d="nsm"}, + [0xFA5]={d="nsm"}, + [0xFA6]={d="nsm"}, + [0xFA7]={d="nsm"}, + [0xFA8]={d="nsm"}, + [0xFA9]={d="nsm"}, + [0xFAA]={d="nsm"}, + [0xFAB]={d="nsm"}, + [0xFAC]={d="nsm"}, + [0xFAD]={d="nsm"}, + [0xFAE]={d="nsm"}, + [0xFAF]={d="nsm"}, + [0xFB0]={d="nsm"}, + [0xFB1]={d="nsm"}, + [0xFB2]={d="nsm"}, + [0xFB3]={d="nsm"}, + [0xFB4]={d="nsm"}, + [0xFB5]={d="nsm"}, + [0xFB6]={d="nsm"}, + [0xFB7]={d="nsm"}, + [0xFB8]={d="nsm"}, + [0xFB9]={d="nsm"}, + [0xFBA]={d="nsm"}, + [0xFBB]={d="nsm"}, + [0xFBC]={d="nsm"}, + [0xFBE]={d="l"}, + [0xFBF]={d="l"}, + [0xFC0]={d="l"}, + [0xFC1]={d="l"}, + [0xFC2]={d="l"}, + [0xFC3]={d="l"}, + [0xFC4]={d="l"}, + [0xFC5]={d="l"}, + [0xFC6]={d="nsm"}, + [0xFC7]={d="l"}, + [0xFC8]={d="l"}, + [0xFC9]={d="l"}, + [0xFCA]={d="l"}, + [0xFCB]={d="l"}, + [0xFCC]={d="l"}, + [0xFCE]={d="l"}, + [0xFCF]={d="l"}, + [0xFD0]={d="l"}, + [0xFD1]={d="l"}, + [0xFD2]={d="l"}, + [0xFD3]={d="l"}, + [0xFD4]={d="l"}, + [0xFD5]={d="l"}, + [0xFD6]={d="l"}, + [0xFD7]={d="l"}, + [0xFD8]={d="l"}, + [0xFD9]={d="l"}, + [0xFDA]={d="l"}, + [0x1000]={d="l"}, + [0x1001]={d="l"}, + [0x1002]={d="l"}, + [0x1003]={d="l"}, + [0x1004]={d="l"}, + [0x1005]={d="l"}, + [0x1006]={d="l"}, + [0x1007]={d="l"}, + [0x1008]={d="l"}, + [0x1009]={d="l"}, + [0x100A]={d="l"}, + [0x100B]={d="l"}, + [0x100C]={d="l"}, + [0x100D]={d="l"}, + [0x100E]={d="l"}, + [0x100F]={d="l"}, + [0x1010]={d="l"}, + [0x1011]={d="l"}, + [0x1012]={d="l"}, + [0x1013]={d="l"}, + [0x1014]={d="l"}, + [0x1015]={d="l"}, + [0x1016]={d="l"}, + [0x1017]={d="l"}, + [0x1018]={d="l"}, + [0x1019]={d="l"}, + [0x101A]={d="l"}, + [0x101B]={d="l"}, + [0x101C]={d="l"}, + [0x101D]={d="l"}, + [0x101E]={d="l"}, + [0x101F]={d="l"}, + [0x1020]={d="l"}, + [0x1021]={d="l"}, + [0x1022]={d="l"}, + [0x1023]={d="l"}, + [0x1024]={d="l"}, + [0x1025]={d="l"}, + [0x1026]={d="l"}, + [0x1027]={d="l"}, + [0x1028]={d="l"}, + [0x1029]={d="l"}, + [0x102A]={d="l"}, + [0x102B]={d="l"}, + [0x102C]={d="l"}, + [0x102D]={d="nsm"}, + [0x102E]={d="nsm"}, + [0x102F]={d="nsm"}, + [0x1030]={d="nsm"}, + [0x1031]={d="l"}, + [0x1032]={d="nsm"}, + [0x1033]={d="nsm"}, + [0x1034]={d="nsm"}, + [0x1035]={d="nsm"}, + [0x1036]={d="nsm"}, + [0x1037]={d="nsm"}, + [0x1038]={d="l"}, + [0x1039]={d="nsm"}, + [0x103A]={d="nsm"}, + [0x103B]={d="l"}, + [0x103C]={d="l"}, + [0x103D]={d="nsm"}, + [0x103E]={d="nsm"}, + [0x103F]={d="l"}, + [0x1040]={d="l"}, + [0x1041]={d="l"}, + [0x1042]={d="l"}, + [0x1043]={d="l"}, + [0x1044]={d="l"}, + [0x1045]={d="l"}, + [0x1046]={d="l"}, + [0x1047]={d="l"}, + [0x1048]={d="l"}, + [0x1049]={d="l"}, + [0x104A]={d="l"}, + [0x104B]={d="l"}, + [0x104C]={d="l"}, + [0x104D]={d="l"}, + [0x104E]={d="l"}, + [0x104F]={d="l"}, + [0x1050]={d="l"}, + [0x1051]={d="l"}, + [0x1052]={d="l"}, + [0x1053]={d="l"}, + [0x1054]={d="l"}, + [0x1055]={d="l"}, + [0x1056]={d="l"}, + [0x1057]={d="l"}, + [0x1058]={d="nsm"}, + [0x1059]={d="nsm"}, + [0x105A]={d="l"}, + [0x105B]={d="l"}, + [0x105C]={d="l"}, + [0x105D]={d="l"}, + [0x105E]={d="nsm"}, + [0x105F]={d="nsm"}, + [0x1060]={d="nsm"}, + [0x1061]={d="l"}, + [0x1062]={d="l"}, + [0x1063]={d="l"}, + [0x1064]={d="l"}, + [0x1065]={d="l"}, + [0x1066]={d="l"}, + [0x1067]={d="l"}, + [0x1068]={d="l"}, + [0x1069]={d="l"}, + [0x106A]={d="l"}, + [0x106B]={d="l"}, + [0x106C]={d="l"}, + [0x106D]={d="l"}, + [0x106E]={d="l"}, + [0x106F]={d="l"}, + [0x1070]={d="l"}, + [0x1071]={d="nsm"}, + [0x1072]={d="nsm"}, + [0x1073]={d="nsm"}, + [0x1074]={d="nsm"}, + [0x1075]={d="l"}, + [0x1076]={d="l"}, + [0x1077]={d="l"}, + [0x1078]={d="l"}, + [0x1079]={d="l"}, + [0x107A]={d="l"}, + [0x107B]={d="l"}, + [0x107C]={d="l"}, + [0x107D]={d="l"}, + [0x107E]={d="l"}, + [0x107F]={d="l"}, + [0x1080]={d="l"}, + [0x1081]={d="l"}, + [0x1082]={d="nsm"}, + [0x1083]={d="l"}, + [0x1084]={d="l"}, + [0x1085]={d="nsm"}, + [0x1086]={d="nsm"}, + [0x1087]={d="l"}, + [0x1088]={d="l"}, + [0x1089]={d="l"}, + [0x108A]={d="l"}, + [0x108B]={d="l"}, + [0x108C]={d="l"}, + [0x108D]={d="nsm"}, + [0x108E]={d="l"}, + [0x108F]={d="l"}, + [0x1090]={d="l"}, + [0x1091]={d="l"}, + [0x1092]={d="l"}, + [0x1093]={d="l"}, + [0x1094]={d="l"}, + [0x1095]={d="l"}, + [0x1096]={d="l"}, + [0x1097]={d="l"}, + [0x1098]={d="l"}, + [0x1099]={d="l"}, + [0x109A]={d="l"}, + [0x109B]={d="l"}, + [0x109C]={d="l"}, + [0x109D]={d="nsm"}, + [0x109E]={d="l"}, + [0x109F]={d="l"}, + [0x10A0]={d="l"}, + [0x10A1]={d="l"}, + [0x10A2]={d="l"}, + [0x10A3]={d="l"}, + [0x10A4]={d="l"}, + [0x10A5]={d="l"}, + [0x10A6]={d="l"}, + [0x10A7]={d="l"}, + [0x10A8]={d="l"}, + [0x10A9]={d="l"}, + [0x10AA]={d="l"}, + [0x10AB]={d="l"}, + [0x10AC]={d="l"}, + [0x10AD]={d="l"}, + [0x10AE]={d="l"}, + [0x10AF]={d="l"}, + [0x10B0]={d="l"}, + [0x10B1]={d="l"}, + [0x10B2]={d="l"}, + [0x10B3]={d="l"}, + [0x10B4]={d="l"}, + [0x10B5]={d="l"}, + [0x10B6]={d="l"}, + [0x10B7]={d="l"}, + [0x10B8]={d="l"}, + [0x10B9]={d="l"}, + [0x10BA]={d="l"}, + [0x10BB]={d="l"}, + [0x10BC]={d="l"}, + [0x10BD]={d="l"}, + [0x10BE]={d="l"}, + [0x10BF]={d="l"}, + [0x10C0]={d="l"}, + [0x10C1]={d="l"}, + [0x10C2]={d="l"}, + [0x10C3]={d="l"}, + [0x10C4]={d="l"}, + [0x10C5]={d="l"}, + [0x10C7]={d="l"}, + [0x10CD]={d="l"}, + [0x10D0]={d="l"}, + [0x10D1]={d="l"}, + [0x10D2]={d="l"}, + [0x10D3]={d="l"}, + [0x10D4]={d="l"}, + [0x10D5]={d="l"}, + [0x10D6]={d="l"}, + [0x10D7]={d="l"}, + [0x10D8]={d="l"}, + [0x10D9]={d="l"}, + [0x10DA]={d="l"}, + [0x10DB]={d="l"}, + [0x10DC]={d="l"}, + [0x10DD]={d="l"}, + [0x10DE]={d="l"}, + [0x10DF]={d="l"}, + [0x10E0]={d="l"}, + [0x10E1]={d="l"}, + [0x10E2]={d="l"}, + [0x10E3]={d="l"}, + [0x10E4]={d="l"}, + [0x10E5]={d="l"}, + [0x10E6]={d="l"}, + [0x10E7]={d="l"}, + [0x10E8]={d="l"}, + [0x10E9]={d="l"}, + [0x10EA]={d="l"}, + [0x10EB]={d="l"}, + [0x10EC]={d="l"}, + [0x10ED]={d="l"}, + [0x10EE]={d="l"}, + [0x10EF]={d="l"}, + [0x10F0]={d="l"}, + [0x10F1]={d="l"}, + [0x10F2]={d="l"}, + [0x10F3]={d="l"}, + [0x10F4]={d="l"}, + [0x10F5]={d="l"}, + [0x10F6]={d="l"}, + [0x10F7]={d="l"}, + [0x10F8]={d="l"}, + [0x10F9]={d="l"}, + [0x10FA]={d="l"}, + [0x10FB]={d="l"}, + [0x10FC]={d="l"}, + [0x10FD]={d="l"}, + [0x10FE]={d="l"}, + [0x10FF]={d="l"}, + [0x1100]={d="l"}, + [0x1101]={d="l"}, + [0x1102]={d="l"}, + [0x1103]={d="l"}, + [0x1104]={d="l"}, + [0x1105]={d="l"}, + [0x1106]={d="l"}, + [0x1107]={d="l"}, + [0x1108]={d="l"}, + [0x1109]={d="l"}, + [0x110A]={d="l"}, + [0x110B]={d="l"}, + [0x110C]={d="l"}, + [0x110D]={d="l"}, + [0x110E]={d="l"}, + [0x110F]={d="l"}, + [0x1110]={d="l"}, + [0x1111]={d="l"}, + [0x1112]={d="l"}, + [0x1113]={d="l"}, + [0x1114]={d="l"}, + [0x1115]={d="l"}, + [0x1116]={d="l"}, + [0x1117]={d="l"}, + [0x1118]={d="l"}, + [0x1119]={d="l"}, + [0x111A]={d="l"}, + [0x111B]={d="l"}, + [0x111C]={d="l"}, + [0x111D]={d="l"}, + [0x111E]={d="l"}, + [0x111F]={d="l"}, + [0x1120]={d="l"}, + [0x1121]={d="l"}, + [0x1122]={d="l"}, + [0x1123]={d="l"}, + [0x1124]={d="l"}, + [0x1125]={d="l"}, + [0x1126]={d="l"}, + [0x1127]={d="l"}, + [0x1128]={d="l"}, + [0x1129]={d="l"}, + [0x112A]={d="l"}, + [0x112B]={d="l"}, + [0x112C]={d="l"}, + [0x112D]={d="l"}, + [0x112E]={d="l"}, + [0x112F]={d="l"}, + [0x1130]={d="l"}, + [0x1131]={d="l"}, + [0x1132]={d="l"}, + [0x1133]={d="l"}, + [0x1134]={d="l"}, + [0x1135]={d="l"}, + [0x1136]={d="l"}, + [0x1137]={d="l"}, + [0x1138]={d="l"}, + [0x1139]={d="l"}, + [0x113A]={d="l"}, + [0x113B]={d="l"}, + [0x113C]={d="l"}, + [0x113D]={d="l"}, + [0x113E]={d="l"}, + [0x113F]={d="l"}, + [0x1140]={d="l"}, + [0x1141]={d="l"}, + [0x1142]={d="l"}, + [0x1143]={d="l"}, + [0x1144]={d="l"}, + [0x1145]={d="l"}, + [0x1146]={d="l"}, + [0x1147]={d="l"}, + [0x1148]={d="l"}, + [0x1149]={d="l"}, + [0x114A]={d="l"}, + [0x114B]={d="l"}, + [0x114C]={d="l"}, + [0x114D]={d="l"}, + [0x114E]={d="l"}, + [0x114F]={d="l"}, + [0x1150]={d="l"}, + [0x1151]={d="l"}, + [0x1152]={d="l"}, + [0x1153]={d="l"}, + [0x1154]={d="l"}, + [0x1155]={d="l"}, + [0x1156]={d="l"}, + [0x1157]={d="l"}, + [0x1158]={d="l"}, + [0x1159]={d="l"}, + [0x115A]={d="l"}, + [0x115B]={d="l"}, + [0x115C]={d="l"}, + [0x115D]={d="l"}, + [0x115E]={d="l"}, + [0x115F]={d="l"}, + [0x1160]={d="l"}, + [0x1161]={d="l"}, + [0x1162]={d="l"}, + [0x1163]={d="l"}, + [0x1164]={d="l"}, + [0x1165]={d="l"}, + [0x1166]={d="l"}, + [0x1167]={d="l"}, + [0x1168]={d="l"}, + [0x1169]={d="l"}, + [0x116A]={d="l"}, + [0x116B]={d="l"}, + [0x116C]={d="l"}, + [0x116D]={d="l"}, + [0x116E]={d="l"}, + [0x116F]={d="l"}, + [0x1170]={d="l"}, + [0x1171]={d="l"}, + [0x1172]={d="l"}, + [0x1173]={d="l"}, + [0x1174]={d="l"}, + [0x1175]={d="l"}, + [0x1176]={d="l"}, + [0x1177]={d="l"}, + [0x1178]={d="l"}, + [0x1179]={d="l"}, + [0x117A]={d="l"}, + [0x117B]={d="l"}, + [0x117C]={d="l"}, + [0x117D]={d="l"}, + [0x117E]={d="l"}, + [0x117F]={d="l"}, + [0x1180]={d="l"}, + [0x1181]={d="l"}, + [0x1182]={d="l"}, + [0x1183]={d="l"}, + [0x1184]={d="l"}, + [0x1185]={d="l"}, + [0x1186]={d="l"}, + [0x1187]={d="l"}, + [0x1188]={d="l"}, + [0x1189]={d="l"}, + [0x118A]={d="l"}, + [0x118B]={d="l"}, + [0x118C]={d="l"}, + [0x118D]={d="l"}, + [0x118E]={d="l"}, + [0x118F]={d="l"}, + [0x1190]={d="l"}, + [0x1191]={d="l"}, + [0x1192]={d="l"}, + [0x1193]={d="l"}, + [0x1194]={d="l"}, + [0x1195]={d="l"}, + [0x1196]={d="l"}, + [0x1197]={d="l"}, + [0x1198]={d="l"}, + [0x1199]={d="l"}, + [0x119A]={d="l"}, + [0x119B]={d="l"}, + [0x119C]={d="l"}, + [0x119D]={d="l"}, + [0x119E]={d="l"}, + [0x119F]={d="l"}, + [0x11A0]={d="l"}, + [0x11A1]={d="l"}, + [0x11A2]={d="l"}, + [0x11A3]={d="l"}, + [0x11A4]={d="l"}, + [0x11A5]={d="l"}, + [0x11A6]={d="l"}, + [0x11A7]={d="l"}, + [0x11A8]={d="l"}, + [0x11A9]={d="l"}, + [0x11AA]={d="l"}, + [0x11AB]={d="l"}, + [0x11AC]={d="l"}, + [0x11AD]={d="l"}, + [0x11AE]={d="l"}, + [0x11AF]={d="l"}, + [0x11B0]={d="l"}, + [0x11B1]={d="l"}, + [0x11B2]={d="l"}, + [0x11B3]={d="l"}, + [0x11B4]={d="l"}, + [0x11B5]={d="l"}, + [0x11B6]={d="l"}, + [0x11B7]={d="l"}, + [0x11B8]={d="l"}, + [0x11B9]={d="l"}, + [0x11BA]={d="l"}, + [0x11BB]={d="l"}, + [0x11BC]={d="l"}, + [0x11BD]={d="l"}, + [0x11BE]={d="l"}, + [0x11BF]={d="l"}, + [0x11C0]={d="l"}, + [0x11C1]={d="l"}, + [0x11C2]={d="l"}, + [0x11C3]={d="l"}, + [0x11C4]={d="l"}, + [0x11C5]={d="l"}, + [0x11C6]={d="l"}, + [0x11C7]={d="l"}, + [0x11C8]={d="l"}, + [0x11C9]={d="l"}, + [0x11CA]={d="l"}, + [0x11CB]={d="l"}, + [0x11CC]={d="l"}, + [0x11CD]={d="l"}, + [0x11CE]={d="l"}, + [0x11CF]={d="l"}, + [0x11D0]={d="l"}, + [0x11D1]={d="l"}, + [0x11D2]={d="l"}, + [0x11D3]={d="l"}, + [0x11D4]={d="l"}, + [0x11D5]={d="l"}, + [0x11D6]={d="l"}, + [0x11D7]={d="l"}, + [0x11D8]={d="l"}, + [0x11D9]={d="l"}, + [0x11DA]={d="l"}, + [0x11DB]={d="l"}, + [0x11DC]={d="l"}, + [0x11DD]={d="l"}, + [0x11DE]={d="l"}, + [0x11DF]={d="l"}, + [0x11E0]={d="l"}, + [0x11E1]={d="l"}, + [0x11E2]={d="l"}, + [0x11E3]={d="l"}, + [0x11E4]={d="l"}, + [0x11E5]={d="l"}, + [0x11E6]={d="l"}, + [0x11E7]={d="l"}, + [0x11E8]={d="l"}, + [0x11E9]={d="l"}, + [0x11EA]={d="l"}, + [0x11EB]={d="l"}, + [0x11EC]={d="l"}, + [0x11ED]={d="l"}, + [0x11EE]={d="l"}, + [0x11EF]={d="l"}, + [0x11F0]={d="l"}, + [0x11F1]={d="l"}, + [0x11F2]={d="l"}, + [0x11F3]={d="l"}, + [0x11F4]={d="l"}, + [0x11F5]={d="l"}, + [0x11F6]={d="l"}, + [0x11F7]={d="l"}, + [0x11F8]={d="l"}, + [0x11F9]={d="l"}, + [0x11FA]={d="l"}, + [0x11FB]={d="l"}, + [0x11FC]={d="l"}, + [0x11FD]={d="l"}, + [0x11FE]={d="l"}, + [0x11FF]={d="l"}, + [0x1200]={d="l"}, + [0x1201]={d="l"}, + [0x1202]={d="l"}, + [0x1203]={d="l"}, + [0x1204]={d="l"}, + [0x1205]={d="l"}, + [0x1206]={d="l"}, + [0x1207]={d="l"}, + [0x1208]={d="l"}, + [0x1209]={d="l"}, + [0x120A]={d="l"}, + [0x120B]={d="l"}, + [0x120C]={d="l"}, + [0x120D]={d="l"}, + [0x120E]={d="l"}, + [0x120F]={d="l"}, + [0x1210]={d="l"}, + [0x1211]={d="l"}, + [0x1212]={d="l"}, + [0x1213]={d="l"}, + [0x1214]={d="l"}, + [0x1215]={d="l"}, + [0x1216]={d="l"}, + [0x1217]={d="l"}, + [0x1218]={d="l"}, + [0x1219]={d="l"}, + [0x121A]={d="l"}, + [0x121B]={d="l"}, + [0x121C]={d="l"}, + [0x121D]={d="l"}, + [0x121E]={d="l"}, + [0x121F]={d="l"}, + [0x1220]={d="l"}, + [0x1221]={d="l"}, + [0x1222]={d="l"}, + [0x1223]={d="l"}, + [0x1224]={d="l"}, + [0x1225]={d="l"}, + [0x1226]={d="l"}, + [0x1227]={d="l"}, + [0x1228]={d="l"}, + [0x1229]={d="l"}, + [0x122A]={d="l"}, + [0x122B]={d="l"}, + [0x122C]={d="l"}, + [0x122D]={d="l"}, + [0x122E]={d="l"}, + [0x122F]={d="l"}, + [0x1230]={d="l"}, + [0x1231]={d="l"}, + [0x1232]={d="l"}, + [0x1233]={d="l"}, + [0x1234]={d="l"}, + [0x1235]={d="l"}, + [0x1236]={d="l"}, + [0x1237]={d="l"}, + [0x1238]={d="l"}, + [0x1239]={d="l"}, + [0x123A]={d="l"}, + [0x123B]={d="l"}, + [0x123C]={d="l"}, + [0x123D]={d="l"}, + [0x123E]={d="l"}, + [0x123F]={d="l"}, + [0x1240]={d="l"}, + [0x1241]={d="l"}, + [0x1242]={d="l"}, + [0x1243]={d="l"}, + [0x1244]={d="l"}, + [0x1245]={d="l"}, + [0x1246]={d="l"}, + [0x1247]={d="l"}, + [0x1248]={d="l"}, + [0x124A]={d="l"}, + [0x124B]={d="l"}, + [0x124C]={d="l"}, + [0x124D]={d="l"}, + [0x1250]={d="l"}, + [0x1251]={d="l"}, + [0x1252]={d="l"}, + [0x1253]={d="l"}, + [0x1254]={d="l"}, + [0x1255]={d="l"}, + [0x1256]={d="l"}, + [0x1258]={d="l"}, + [0x125A]={d="l"}, + [0x125B]={d="l"}, + [0x125C]={d="l"}, + [0x125D]={d="l"}, + [0x1260]={d="l"}, + [0x1261]={d="l"}, + [0x1262]={d="l"}, + [0x1263]={d="l"}, + [0x1264]={d="l"}, + [0x1265]={d="l"}, + [0x1266]={d="l"}, + [0x1267]={d="l"}, + [0x1268]={d="l"}, + [0x1269]={d="l"}, + [0x126A]={d="l"}, + [0x126B]={d="l"}, + [0x126C]={d="l"}, + [0x126D]={d="l"}, + [0x126E]={d="l"}, + [0x126F]={d="l"}, + [0x1270]={d="l"}, + [0x1271]={d="l"}, + [0x1272]={d="l"}, + [0x1273]={d="l"}, + [0x1274]={d="l"}, + [0x1275]={d="l"}, + [0x1276]={d="l"}, + [0x1277]={d="l"}, + [0x1278]={d="l"}, + [0x1279]={d="l"}, + [0x127A]={d="l"}, + [0x127B]={d="l"}, + [0x127C]={d="l"}, + [0x127D]={d="l"}, + [0x127E]={d="l"}, + [0x127F]={d="l"}, + [0x1280]={d="l"}, + [0x1281]={d="l"}, + [0x1282]={d="l"}, + [0x1283]={d="l"}, + [0x1284]={d="l"}, + [0x1285]={d="l"}, + [0x1286]={d="l"}, + [0x1287]={d="l"}, + [0x1288]={d="l"}, + [0x128A]={d="l"}, + [0x128B]={d="l"}, + [0x128C]={d="l"}, + [0x128D]={d="l"}, + [0x1290]={d="l"}, + [0x1291]={d="l"}, + [0x1292]={d="l"}, + [0x1293]={d="l"}, + [0x1294]={d="l"}, + [0x1295]={d="l"}, + [0x1296]={d="l"}, + [0x1297]={d="l"}, + [0x1298]={d="l"}, + [0x1299]={d="l"}, + [0x129A]={d="l"}, + [0x129B]={d="l"}, + [0x129C]={d="l"}, + [0x129D]={d="l"}, + [0x129E]={d="l"}, + [0x129F]={d="l"}, + [0x12A0]={d="l"}, + [0x12A1]={d="l"}, + [0x12A2]={d="l"}, + [0x12A3]={d="l"}, + [0x12A4]={d="l"}, + [0x12A5]={d="l"}, + [0x12A6]={d="l"}, + [0x12A7]={d="l"}, + [0x12A8]={d="l"}, + [0x12A9]={d="l"}, + [0x12AA]={d="l"}, + [0x12AB]={d="l"}, + [0x12AC]={d="l"}, + [0x12AD]={d="l"}, + [0x12AE]={d="l"}, + [0x12AF]={d="l"}, + [0x12B0]={d="l"}, + [0x12B2]={d="l"}, + [0x12B3]={d="l"}, + [0x12B4]={d="l"}, + [0x12B5]={d="l"}, + [0x12B8]={d="l"}, + [0x12B9]={d="l"}, + [0x12BA]={d="l"}, + [0x12BB]={d="l"}, + [0x12BC]={d="l"}, + [0x12BD]={d="l"}, + [0x12BE]={d="l"}, + [0x12C0]={d="l"}, + [0x12C2]={d="l"}, + [0x12C3]={d="l"}, + [0x12C4]={d="l"}, + [0x12C5]={d="l"}, + [0x12C8]={d="l"}, + [0x12C9]={d="l"}, + [0x12CA]={d="l"}, + [0x12CB]={d="l"}, + [0x12CC]={d="l"}, + [0x12CD]={d="l"}, + [0x12CE]={d="l"}, + [0x12CF]={d="l"}, + [0x12D0]={d="l"}, + [0x12D1]={d="l"}, + [0x12D2]={d="l"}, + [0x12D3]={d="l"}, + [0x12D4]={d="l"}, + [0x12D5]={d="l"}, + [0x12D6]={d="l"}, + [0x12D8]={d="l"}, + [0x12D9]={d="l"}, + [0x12DA]={d="l"}, + [0x12DB]={d="l"}, + [0x12DC]={d="l"}, + [0x12DD]={d="l"}, + [0x12DE]={d="l"}, + [0x12DF]={d="l"}, + [0x12E0]={d="l"}, + [0x12E1]={d="l"}, + [0x12E2]={d="l"}, + [0x12E3]={d="l"}, + [0x12E4]={d="l"}, + [0x12E5]={d="l"}, + [0x12E6]={d="l"}, + [0x12E7]={d="l"}, + [0x12E8]={d="l"}, + [0x12E9]={d="l"}, + [0x12EA]={d="l"}, + [0x12EB]={d="l"}, + [0x12EC]={d="l"}, + [0x12ED]={d="l"}, + [0x12EE]={d="l"}, + [0x12EF]={d="l"}, + [0x12F0]={d="l"}, + [0x12F1]={d="l"}, + [0x12F2]={d="l"}, + [0x12F3]={d="l"}, + [0x12F4]={d="l"}, + [0x12F5]={d="l"}, + [0x12F6]={d="l"}, + [0x12F7]={d="l"}, + [0x12F8]={d="l"}, + [0x12F9]={d="l"}, + [0x12FA]={d="l"}, + [0x12FB]={d="l"}, + [0x12FC]={d="l"}, + [0x12FD]={d="l"}, + [0x12FE]={d="l"}, + [0x12FF]={d="l"}, + [0x1300]={d="l"}, + [0x1301]={d="l"}, + [0x1302]={d="l"}, + [0x1303]={d="l"}, + [0x1304]={d="l"}, + [0x1305]={d="l"}, + [0x1306]={d="l"}, + [0x1307]={d="l"}, + [0x1308]={d="l"}, + [0x1309]={d="l"}, + [0x130A]={d="l"}, + [0x130B]={d="l"}, + [0x130C]={d="l"}, + [0x130D]={d="l"}, + [0x130E]={d="l"}, + [0x130F]={d="l"}, + [0x1310]={d="l"}, + [0x1312]={d="l"}, + [0x1313]={d="l"}, + [0x1314]={d="l"}, + [0x1315]={d="l"}, + [0x1318]={d="l"}, + [0x1319]={d="l"}, + [0x131A]={d="l"}, + [0x131B]={d="l"}, + [0x131C]={d="l"}, + [0x131D]={d="l"}, + [0x131E]={d="l"}, + [0x131F]={d="l"}, + [0x1320]={d="l"}, + [0x1321]={d="l"}, + [0x1322]={d="l"}, + [0x1323]={d="l"}, + [0x1324]={d="l"}, + [0x1325]={d="l"}, + [0x1326]={d="l"}, + [0x1327]={d="l"}, + [0x1328]={d="l"}, + [0x1329]={d="l"}, + [0x132A]={d="l"}, + [0x132B]={d="l"}, + [0x132C]={d="l"}, + [0x132D]={d="l"}, + [0x132E]={d="l"}, + [0x132F]={d="l"}, + [0x1330]={d="l"}, + [0x1331]={d="l"}, + [0x1332]={d="l"}, + [0x1333]={d="l"}, + [0x1334]={d="l"}, + [0x1335]={d="l"}, + [0x1336]={d="l"}, + [0x1337]={d="l"}, + [0x1338]={d="l"}, + [0x1339]={d="l"}, + [0x133A]={d="l"}, + [0x133B]={d="l"}, + [0x133C]={d="l"}, + [0x133D]={d="l"}, + [0x133E]={d="l"}, + [0x133F]={d="l"}, + [0x1340]={d="l"}, + [0x1341]={d="l"}, + [0x1342]={d="l"}, + [0x1343]={d="l"}, + [0x1344]={d="l"}, + [0x1345]={d="l"}, + [0x1346]={d="l"}, + [0x1347]={d="l"}, + [0x1348]={d="l"}, + [0x1349]={d="l"}, + [0x134A]={d="l"}, + [0x134B]={d="l"}, + [0x134C]={d="l"}, + [0x134D]={d="l"}, + [0x134E]={d="l"}, + [0x134F]={d="l"}, + [0x1350]={d="l"}, + [0x1351]={d="l"}, + [0x1352]={d="l"}, + [0x1353]={d="l"}, + [0x1354]={d="l"}, + [0x1355]={d="l"}, + [0x1356]={d="l"}, + [0x1357]={d="l"}, + [0x1358]={d="l"}, + [0x1359]={d="l"}, + [0x135A]={d="l"}, + [0x135D]={d="nsm"}, + [0x135E]={d="nsm"}, + [0x135F]={d="nsm"}, + [0x1360]={d="l"}, + [0x1361]={d="l"}, + [0x1362]={d="l"}, + [0x1363]={d="l"}, + [0x1364]={d="l"}, + [0x1365]={d="l"}, + [0x1366]={d="l"}, + [0x1367]={d="l"}, + [0x1368]={d="l"}, + [0x1369]={d="l"}, + [0x136A]={d="l"}, + [0x136B]={d="l"}, + [0x136C]={d="l"}, + [0x136D]={d="l"}, + [0x136E]={d="l"}, + [0x136F]={d="l"}, + [0x1370]={d="l"}, + [0x1371]={d="l"}, + [0x1372]={d="l"}, + [0x1373]={d="l"}, + [0x1374]={d="l"}, + [0x1375]={d="l"}, + [0x1376]={d="l"}, + [0x1377]={d="l"}, + [0x1378]={d="l"}, + [0x1379]={d="l"}, + [0x137A]={d="l"}, + [0x137B]={d="l"}, + [0x137C]={d="l"}, + [0x1380]={d="l"}, + [0x1381]={d="l"}, + [0x1382]={d="l"}, + [0x1383]={d="l"}, + [0x1384]={d="l"}, + [0x1385]={d="l"}, + [0x1386]={d="l"}, + [0x1387]={d="l"}, + [0x1388]={d="l"}, + [0x1389]={d="l"}, + [0x138A]={d="l"}, + [0x138B]={d="l"}, + [0x138C]={d="l"}, + [0x138D]={d="l"}, + [0x138E]={d="l"}, + [0x138F]={d="l"}, + [0x1390]={d="on"}, + [0x1391]={d="on"}, + [0x1392]={d="on"}, + [0x1393]={d="on"}, + [0x1394]={d="on"}, + [0x1395]={d="on"}, + [0x1396]={d="on"}, + [0x1397]={d="on"}, + [0x1398]={d="on"}, + [0x1399]={d="on"}, + [0x13A0]={d="l"}, + [0x13A1]={d="l"}, + [0x13A2]={d="l"}, + [0x13A3]={d="l"}, + [0x13A4]={d="l"}, + [0x13A5]={d="l"}, + [0x13A6]={d="l"}, + [0x13A7]={d="l"}, + [0x13A8]={d="l"}, + [0x13A9]={d="l"}, + [0x13AA]={d="l"}, + [0x13AB]={d="l"}, + [0x13AC]={d="l"}, + [0x13AD]={d="l"}, + [0x13AE]={d="l"}, + [0x13AF]={d="l"}, + [0x13B0]={d="l"}, + [0x13B1]={d="l"}, + [0x13B2]={d="l"}, + [0x13B3]={d="l"}, + [0x13B4]={d="l"}, + [0x13B5]={d="l"}, + [0x13B6]={d="l"}, + [0x13B7]={d="l"}, + [0x13B8]={d="l"}, + [0x13B9]={d="l"}, + [0x13BA]={d="l"}, + [0x13BB]={d="l"}, + [0x13BC]={d="l"}, + [0x13BD]={d="l"}, + [0x13BE]={d="l"}, + [0x13BF]={d="l"}, + [0x13C0]={d="l"}, + [0x13C1]={d="l"}, + [0x13C2]={d="l"}, + [0x13C3]={d="l"}, + [0x13C4]={d="l"}, + [0x13C5]={d="l"}, + [0x13C6]={d="l"}, + [0x13C7]={d="l"}, + [0x13C8]={d="l"}, + [0x13C9]={d="l"}, + [0x13CA]={d="l"}, + [0x13CB]={d="l"}, + [0x13CC]={d="l"}, + [0x13CD]={d="l"}, + [0x13CE]={d="l"}, + [0x13CF]={d="l"}, + [0x13D0]={d="l"}, + [0x13D1]={d="l"}, + [0x13D2]={d="l"}, + [0x13D3]={d="l"}, + [0x13D4]={d="l"}, + [0x13D5]={d="l"}, + [0x13D6]={d="l"}, + [0x13D7]={d="l"}, + [0x13D8]={d="l"}, + [0x13D9]={d="l"}, + [0x13DA]={d="l"}, + [0x13DB]={d="l"}, + [0x13DC]={d="l"}, + [0x13DD]={d="l"}, + [0x13DE]={d="l"}, + [0x13DF]={d="l"}, + [0x13E0]={d="l"}, + [0x13E1]={d="l"}, + [0x13E2]={d="l"}, + [0x13E3]={d="l"}, + [0x13E4]={d="l"}, + [0x13E5]={d="l"}, + [0x13E6]={d="l"}, + [0x13E7]={d="l"}, + [0x13E8]={d="l"}, + [0x13E9]={d="l"}, + [0x13EA]={d="l"}, + [0x13EB]={d="l"}, + [0x13EC]={d="l"}, + [0x13ED]={d="l"}, + [0x13EE]={d="l"}, + [0x13EF]={d="l"}, + [0x13F0]={d="l"}, + [0x13F1]={d="l"}, + [0x13F2]={d="l"}, + [0x13F3]={d="l"}, + [0x13F4]={d="l"}, + [0x13F5]={d="l"}, + [0x13F8]={d="l"}, + [0x13F9]={d="l"}, + [0x13FA]={d="l"}, + [0x13FB]={d="l"}, + [0x13FC]={d="l"}, + [0x13FD]={d="l"}, + [0x1400]={d="on"}, + [0x1401]={d="l"}, + [0x1402]={d="l"}, + [0x1403]={d="l"}, + [0x1404]={d="l"}, + [0x1405]={d="l"}, + [0x1406]={d="l"}, + [0x1407]={d="l"}, + [0x1408]={d="l"}, + [0x1409]={d="l"}, + [0x140A]={d="l"}, + [0x140B]={d="l"}, + [0x140C]={d="l"}, + [0x140D]={d="l"}, + [0x140E]={d="l"}, + [0x140F]={d="l"}, + [0x1410]={d="l"}, + [0x1411]={d="l"}, + [0x1412]={d="l"}, + [0x1413]={d="l"}, + [0x1414]={d="l"}, + [0x1415]={d="l"}, + [0x1416]={d="l"}, + [0x1417]={d="l"}, + [0x1418]={d="l"}, + [0x1419]={d="l"}, + [0x141A]={d="l"}, + [0x141B]={d="l"}, + [0x141C]={d="l"}, + [0x141D]={d="l"}, + [0x141E]={d="l"}, + [0x141F]={d="l"}, + [0x1420]={d="l"}, + [0x1421]={d="l"}, + [0x1422]={d="l"}, + [0x1423]={d="l"}, + [0x1424]={d="l"}, + [0x1425]={d="l"}, + [0x1426]={d="l"}, + [0x1427]={d="l"}, + [0x1428]={d="l"}, + [0x1429]={d="l"}, + [0x142A]={d="l"}, + [0x142B]={d="l"}, + [0x142C]={d="l"}, + [0x142D]={d="l"}, + [0x142E]={d="l"}, + [0x142F]={d="l"}, + [0x1430]={d="l"}, + [0x1431]={d="l"}, + [0x1432]={d="l"}, + [0x1433]={d="l"}, + [0x1434]={d="l"}, + [0x1435]={d="l"}, + [0x1436]={d="l"}, + [0x1437]={d="l"}, + [0x1438]={d="l"}, + [0x1439]={d="l"}, + [0x143A]={d="l"}, + [0x143B]={d="l"}, + [0x143C]={d="l"}, + [0x143D]={d="l"}, + [0x143E]={d="l"}, + [0x143F]={d="l"}, + [0x1440]={d="l"}, + [0x1441]={d="l"}, + [0x1442]={d="l"}, + [0x1443]={d="l"}, + [0x1444]={d="l"}, + [0x1445]={d="l"}, + [0x1446]={d="l"}, + [0x1447]={d="l"}, + [0x1448]={d="l"}, + [0x1449]={d="l"}, + [0x144A]={d="l"}, + [0x144B]={d="l"}, + [0x144C]={d="l"}, + [0x144D]={d="l"}, + [0x144E]={d="l"}, + [0x144F]={d="l"}, + [0x1450]={d="l"}, + [0x1451]={d="l"}, + [0x1452]={d="l"}, + [0x1453]={d="l"}, + [0x1454]={d="l"}, + [0x1455]={d="l"}, + [0x1456]={d="l"}, + [0x1457]={d="l"}, + [0x1458]={d="l"}, + [0x1459]={d="l"}, + [0x145A]={d="l"}, + [0x145B]={d="l"}, + [0x145C]={d="l"}, + [0x145D]={d="l"}, + [0x145E]={d="l"}, + [0x145F]={d="l"}, + [0x1460]={d="l"}, + [0x1461]={d="l"}, + [0x1462]={d="l"}, + [0x1463]={d="l"}, + [0x1464]={d="l"}, + [0x1465]={d="l"}, + [0x1466]={d="l"}, + [0x1467]={d="l"}, + [0x1468]={d="l"}, + [0x1469]={d="l"}, + [0x146A]={d="l"}, + [0x146B]={d="l"}, + [0x146C]={d="l"}, + [0x146D]={d="l"}, + [0x146E]={d="l"}, + [0x146F]={d="l"}, + [0x1470]={d="l"}, + [0x1471]={d="l"}, + [0x1472]={d="l"}, + [0x1473]={d="l"}, + [0x1474]={d="l"}, + [0x1475]={d="l"}, + [0x1476]={d="l"}, + [0x1477]={d="l"}, + [0x1478]={d="l"}, + [0x1479]={d="l"}, + [0x147A]={d="l"}, + [0x147B]={d="l"}, + [0x147C]={d="l"}, + [0x147D]={d="l"}, + [0x147E]={d="l"}, + [0x147F]={d="l"}, + [0x1480]={d="l"}, + [0x1481]={d="l"}, + [0x1482]={d="l"}, + [0x1483]={d="l"}, + [0x1484]={d="l"}, + [0x1485]={d="l"}, + [0x1486]={d="l"}, + [0x1487]={d="l"}, + [0x1488]={d="l"}, + [0x1489]={d="l"}, + [0x148A]={d="l"}, + [0x148B]={d="l"}, + [0x148C]={d="l"}, + [0x148D]={d="l"}, + [0x148E]={d="l"}, + [0x148F]={d="l"}, + [0x1490]={d="l"}, + [0x1491]={d="l"}, + [0x1492]={d="l"}, + [0x1493]={d="l"}, + [0x1494]={d="l"}, + [0x1495]={d="l"}, + [0x1496]={d="l"}, + [0x1497]={d="l"}, + [0x1498]={d="l"}, + [0x1499]={d="l"}, + [0x149A]={d="l"}, + [0x149B]={d="l"}, + [0x149C]={d="l"}, + [0x149D]={d="l"}, + [0x149E]={d="l"}, + [0x149F]={d="l"}, + [0x14A0]={d="l"}, + [0x14A1]={d="l"}, + [0x14A2]={d="l"}, + [0x14A3]={d="l"}, + [0x14A4]={d="l"}, + [0x14A5]={d="l"}, + [0x14A6]={d="l"}, + [0x14A7]={d="l"}, + [0x14A8]={d="l"}, + [0x14A9]={d="l"}, + [0x14AA]={d="l"}, + [0x14AB]={d="l"}, + [0x14AC]={d="l"}, + [0x14AD]={d="l"}, + [0x14AE]={d="l"}, + [0x14AF]={d="l"}, + [0x14B0]={d="l"}, + [0x14B1]={d="l"}, + [0x14B2]={d="l"}, + [0x14B3]={d="l"}, + [0x14B4]={d="l"}, + [0x14B5]={d="l"}, + [0x14B6]={d="l"}, + [0x14B7]={d="l"}, + [0x14B8]={d="l"}, + [0x14B9]={d="l"}, + [0x14BA]={d="l"}, + [0x14BB]={d="l"}, + [0x14BC]={d="l"}, + [0x14BD]={d="l"}, + [0x14BE]={d="l"}, + [0x14BF]={d="l"}, + [0x14C0]={d="l"}, + [0x14C1]={d="l"}, + [0x14C2]={d="l"}, + [0x14C3]={d="l"}, + [0x14C4]={d="l"}, + [0x14C5]={d="l"}, + [0x14C6]={d="l"}, + [0x14C7]={d="l"}, + [0x14C8]={d="l"}, + [0x14C9]={d="l"}, + [0x14CA]={d="l"}, + [0x14CB]={d="l"}, + [0x14CC]={d="l"}, + [0x14CD]={d="l"}, + [0x14CE]={d="l"}, + [0x14CF]={d="l"}, + [0x14D0]={d="l"}, + [0x14D1]={d="l"}, + [0x14D2]={d="l"}, + [0x14D3]={d="l"}, + [0x14D4]={d="l"}, + [0x14D5]={d="l"}, + [0x14D6]={d="l"}, + [0x14D7]={d="l"}, + [0x14D8]={d="l"}, + [0x14D9]={d="l"}, + [0x14DA]={d="l"}, + [0x14DB]={d="l"}, + [0x14DC]={d="l"}, + [0x14DD]={d="l"}, + [0x14DE]={d="l"}, + [0x14DF]={d="l"}, + [0x14E0]={d="l"}, + [0x14E1]={d="l"}, + [0x14E2]={d="l"}, + [0x14E3]={d="l"}, + [0x14E4]={d="l"}, + [0x14E5]={d="l"}, + [0x14E6]={d="l"}, + [0x14E7]={d="l"}, + [0x14E8]={d="l"}, + [0x14E9]={d="l"}, + [0x14EA]={d="l"}, + [0x14EB]={d="l"}, + [0x14EC]={d="l"}, + [0x14ED]={d="l"}, + [0x14EE]={d="l"}, + [0x14EF]={d="l"}, + [0x14F0]={d="l"}, + [0x14F1]={d="l"}, + [0x14F2]={d="l"}, + [0x14F3]={d="l"}, + [0x14F4]={d="l"}, + [0x14F5]={d="l"}, + [0x14F6]={d="l"}, + [0x14F7]={d="l"}, + [0x14F8]={d="l"}, + [0x14F9]={d="l"}, + [0x14FA]={d="l"}, + [0x14FB]={d="l"}, + [0x14FC]={d="l"}, + [0x14FD]={d="l"}, + [0x14FE]={d="l"}, + [0x14FF]={d="l"}, + [0x1500]={d="l"}, + [0x1501]={d="l"}, + [0x1502]={d="l"}, + [0x1503]={d="l"}, + [0x1504]={d="l"}, + [0x1505]={d="l"}, + [0x1506]={d="l"}, + [0x1507]={d="l"}, + [0x1508]={d="l"}, + [0x1509]={d="l"}, + [0x150A]={d="l"}, + [0x150B]={d="l"}, + [0x150C]={d="l"}, + [0x150D]={d="l"}, + [0x150E]={d="l"}, + [0x150F]={d="l"}, + [0x1510]={d="l"}, + [0x1511]={d="l"}, + [0x1512]={d="l"}, + [0x1513]={d="l"}, + [0x1514]={d="l"}, + [0x1515]={d="l"}, + [0x1516]={d="l"}, + [0x1517]={d="l"}, + [0x1518]={d="l"}, + [0x1519]={d="l"}, + [0x151A]={d="l"}, + [0x151B]={d="l"}, + [0x151C]={d="l"}, + [0x151D]={d="l"}, + [0x151E]={d="l"}, + [0x151F]={d="l"}, + [0x1520]={d="l"}, + [0x1521]={d="l"}, + [0x1522]={d="l"}, + [0x1523]={d="l"}, + [0x1524]={d="l"}, + [0x1525]={d="l"}, + [0x1526]={d="l"}, + [0x1527]={d="l"}, + [0x1528]={d="l"}, + [0x1529]={d="l"}, + [0x152A]={d="l"}, + [0x152B]={d="l"}, + [0x152C]={d="l"}, + [0x152D]={d="l"}, + [0x152E]={d="l"}, + [0x152F]={d="l"}, + [0x1530]={d="l"}, + [0x1531]={d="l"}, + [0x1532]={d="l"}, + [0x1533]={d="l"}, + [0x1534]={d="l"}, + [0x1535]={d="l"}, + [0x1536]={d="l"}, + [0x1537]={d="l"}, + [0x1538]={d="l"}, + [0x1539]={d="l"}, + [0x153A]={d="l"}, + [0x153B]={d="l"}, + [0x153C]={d="l"}, + [0x153D]={d="l"}, + [0x153E]={d="l"}, + [0x153F]={d="l"}, + [0x1540]={d="l"}, + [0x1541]={d="l"}, + [0x1542]={d="l"}, + [0x1543]={d="l"}, + [0x1544]={d="l"}, + [0x1545]={d="l"}, + [0x1546]={d="l"}, + [0x1547]={d="l"}, + [0x1548]={d="l"}, + [0x1549]={d="l"}, + [0x154A]={d="l"}, + [0x154B]={d="l"}, + [0x154C]={d="l"}, + [0x154D]={d="l"}, + [0x154E]={d="l"}, + [0x154F]={d="l"}, + [0x1550]={d="l"}, + [0x1551]={d="l"}, + [0x1552]={d="l"}, + [0x1553]={d="l"}, + [0x1554]={d="l"}, + [0x1555]={d="l"}, + [0x1556]={d="l"}, + [0x1557]={d="l"}, + [0x1558]={d="l"}, + [0x1559]={d="l"}, + [0x155A]={d="l"}, + [0x155B]={d="l"}, + [0x155C]={d="l"}, + [0x155D]={d="l"}, + [0x155E]={d="l"}, + [0x155F]={d="l"}, + [0x1560]={d="l"}, + [0x1561]={d="l"}, + [0x1562]={d="l"}, + [0x1563]={d="l"}, + [0x1564]={d="l"}, + [0x1565]={d="l"}, + [0x1566]={d="l"}, + [0x1567]={d="l"}, + [0x1568]={d="l"}, + [0x1569]={d="l"}, + [0x156A]={d="l"}, + [0x156B]={d="l"}, + [0x156C]={d="l"}, + [0x156D]={d="l"}, + [0x156E]={d="l"}, + [0x156F]={d="l"}, + [0x1570]={d="l"}, + [0x1571]={d="l"}, + [0x1572]={d="l"}, + [0x1573]={d="l"}, + [0x1574]={d="l"}, + [0x1575]={d="l"}, + [0x1576]={d="l"}, + [0x1577]={d="l"}, + [0x1578]={d="l"}, + [0x1579]={d="l"}, + [0x157A]={d="l"}, + [0x157B]={d="l"}, + [0x157C]={d="l"}, + [0x157D]={d="l"}, + [0x157E]={d="l"}, + [0x157F]={d="l"}, + [0x1580]={d="l"}, + [0x1581]={d="l"}, + [0x1582]={d="l"}, + [0x1583]={d="l"}, + [0x1584]={d="l"}, + [0x1585]={d="l"}, + [0x1586]={d="l"}, + [0x1587]={d="l"}, + [0x1588]={d="l"}, + [0x1589]={d="l"}, + [0x158A]={d="l"}, + [0x158B]={d="l"}, + [0x158C]={d="l"}, + [0x158D]={d="l"}, + [0x158E]={d="l"}, + [0x158F]={d="l"}, + [0x1590]={d="l"}, + [0x1591]={d="l"}, + [0x1592]={d="l"}, + [0x1593]={d="l"}, + [0x1594]={d="l"}, + [0x1595]={d="l"}, + [0x1596]={d="l"}, + [0x1597]={d="l"}, + [0x1598]={d="l"}, + [0x1599]={d="l"}, + [0x159A]={d="l"}, + [0x159B]={d="l"}, + [0x159C]={d="l"}, + [0x159D]={d="l"}, + [0x159E]={d="l"}, + [0x159F]={d="l"}, + [0x15A0]={d="l"}, + [0x15A1]={d="l"}, + [0x15A2]={d="l"}, + [0x15A3]={d="l"}, + [0x15A4]={d="l"}, + [0x15A5]={d="l"}, + [0x15A6]={d="l"}, + [0x15A7]={d="l"}, + [0x15A8]={d="l"}, + [0x15A9]={d="l"}, + [0x15AA]={d="l"}, + [0x15AB]={d="l"}, + [0x15AC]={d="l"}, + [0x15AD]={d="l"}, + [0x15AE]={d="l"}, + [0x15AF]={d="l"}, + [0x15B0]={d="l"}, + [0x15B1]={d="l"}, + [0x15B2]={d="l"}, + [0x15B3]={d="l"}, + [0x15B4]={d="l"}, + [0x15B5]={d="l"}, + [0x15B6]={d="l"}, + [0x15B7]={d="l"}, + [0x15B8]={d="l"}, + [0x15B9]={d="l"}, + [0x15BA]={d="l"}, + [0x15BB]={d="l"}, + [0x15BC]={d="l"}, + [0x15BD]={d="l"}, + [0x15BE]={d="l"}, + [0x15BF]={d="l"}, + [0x15C0]={d="l"}, + [0x15C1]={d="l"}, + [0x15C2]={d="l"}, + [0x15C3]={d="l"}, + [0x15C4]={d="l"}, + [0x15C5]={d="l"}, + [0x15C6]={d="l"}, + [0x15C7]={d="l"}, + [0x15C8]={d="l"}, + [0x15C9]={d="l"}, + [0x15CA]={d="l"}, + [0x15CB]={d="l"}, + [0x15CC]={d="l"}, + [0x15CD]={d="l"}, + [0x15CE]={d="l"}, + [0x15CF]={d="l"}, + [0x15D0]={d="l"}, + [0x15D1]={d="l"}, + [0x15D2]={d="l"}, + [0x15D3]={d="l"}, + [0x15D4]={d="l"}, + [0x15D5]={d="l"}, + [0x15D6]={d="l"}, + [0x15D7]={d="l"}, + [0x15D8]={d="l"}, + [0x15D9]={d="l"}, + [0x15DA]={d="l"}, + [0x15DB]={d="l"}, + [0x15DC]={d="l"}, + [0x15DD]={d="l"}, + [0x15DE]={d="l"}, + [0x15DF]={d="l"}, + [0x15E0]={d="l"}, + [0x15E1]={d="l"}, + [0x15E2]={d="l"}, + [0x15E3]={d="l"}, + [0x15E4]={d="l"}, + [0x15E5]={d="l"}, + [0x15E6]={d="l"}, + [0x15E7]={d="l"}, + [0x15E8]={d="l"}, + [0x15E9]={d="l"}, + [0x15EA]={d="l"}, + [0x15EB]={d="l"}, + [0x15EC]={d="l"}, + [0x15ED]={d="l"}, + [0x15EE]={d="l"}, + [0x15EF]={d="l"}, + [0x15F0]={d="l"}, + [0x15F1]={d="l"}, + [0x15F2]={d="l"}, + [0x15F3]={d="l"}, + [0x15F4]={d="l"}, + [0x15F5]={d="l"}, + [0x15F6]={d="l"}, + [0x15F7]={d="l"}, + [0x15F8]={d="l"}, + [0x15F9]={d="l"}, + [0x15FA]={d="l"}, + [0x15FB]={d="l"}, + [0x15FC]={d="l"}, + [0x15FD]={d="l"}, + [0x15FE]={d="l"}, + [0x15FF]={d="l"}, + [0x1600]={d="l"}, + [0x1601]={d="l"}, + [0x1602]={d="l"}, + [0x1603]={d="l"}, + [0x1604]={d="l"}, + [0x1605]={d="l"}, + [0x1606]={d="l"}, + [0x1607]={d="l"}, + [0x1608]={d="l"}, + [0x1609]={d="l"}, + [0x160A]={d="l"}, + [0x160B]={d="l"}, + [0x160C]={d="l"}, + [0x160D]={d="l"}, + [0x160E]={d="l"}, + [0x160F]={d="l"}, + [0x1610]={d="l"}, + [0x1611]={d="l"}, + [0x1612]={d="l"}, + [0x1613]={d="l"}, + [0x1614]={d="l"}, + [0x1615]={d="l"}, + [0x1616]={d="l"}, + [0x1617]={d="l"}, + [0x1618]={d="l"}, + [0x1619]={d="l"}, + [0x161A]={d="l"}, + [0x161B]={d="l"}, + [0x161C]={d="l"}, + [0x161D]={d="l"}, + [0x161E]={d="l"}, + [0x161F]={d="l"}, + [0x1620]={d="l"}, + [0x1621]={d="l"}, + [0x1622]={d="l"}, + [0x1623]={d="l"}, + [0x1624]={d="l"}, + [0x1625]={d="l"}, + [0x1626]={d="l"}, + [0x1627]={d="l"}, + [0x1628]={d="l"}, + [0x1629]={d="l"}, + [0x162A]={d="l"}, + [0x162B]={d="l"}, + [0x162C]={d="l"}, + [0x162D]={d="l"}, + [0x162E]={d="l"}, + [0x162F]={d="l"}, + [0x1630]={d="l"}, + [0x1631]={d="l"}, + [0x1632]={d="l"}, + [0x1633]={d="l"}, + [0x1634]={d="l"}, + [0x1635]={d="l"}, + [0x1636]={d="l"}, + [0x1637]={d="l"}, + [0x1638]={d="l"}, + [0x1639]={d="l"}, + [0x163A]={d="l"}, + [0x163B]={d="l"}, + [0x163C]={d="l"}, + [0x163D]={d="l"}, + [0x163E]={d="l"}, + [0x163F]={d="l"}, + [0x1640]={d="l"}, + [0x1641]={d="l"}, + [0x1642]={d="l"}, + [0x1643]={d="l"}, + [0x1644]={d="l"}, + [0x1645]={d="l"}, + [0x1646]={d="l"}, + [0x1647]={d="l"}, + [0x1648]={d="l"}, + [0x1649]={d="l"}, + [0x164A]={d="l"}, + [0x164B]={d="l"}, + [0x164C]={d="l"}, + [0x164D]={d="l"}, + [0x164E]={d="l"}, + [0x164F]={d="l"}, + [0x1650]={d="l"}, + [0x1651]={d="l"}, + [0x1652]={d="l"}, + [0x1653]={d="l"}, + [0x1654]={d="l"}, + [0x1655]={d="l"}, + [0x1656]={d="l"}, + [0x1657]={d="l"}, + [0x1658]={d="l"}, + [0x1659]={d="l"}, + [0x165A]={d="l"}, + [0x165B]={d="l"}, + [0x165C]={d="l"}, + [0x165D]={d="l"}, + [0x165E]={d="l"}, + [0x165F]={d="l"}, + [0x1660]={d="l"}, + [0x1661]={d="l"}, + [0x1662]={d="l"}, + [0x1663]={d="l"}, + [0x1664]={d="l"}, + [0x1665]={d="l"}, + [0x1666]={d="l"}, + [0x1667]={d="l"}, + [0x1668]={d="l"}, + [0x1669]={d="l"}, + [0x166A]={d="l"}, + [0x166B]={d="l"}, + [0x166C]={d="l"}, + [0x166D]={d="l"}, + [0x166E]={d="l"}, + [0x166F]={d="l"}, + [0x1670]={d="l"}, + [0x1671]={d="l"}, + [0x1672]={d="l"}, + [0x1673]={d="l"}, + [0x1674]={d="l"}, + [0x1675]={d="l"}, + [0x1676]={d="l"}, + [0x1677]={d="l"}, + [0x1678]={d="l"}, + [0x1679]={d="l"}, + [0x167A]={d="l"}, + [0x167B]={d="l"}, + [0x167C]={d="l"}, + [0x167D]={d="l"}, + [0x167E]={d="l"}, + [0x167F]={d="l"}, + [0x1680]={d="ws"}, + [0x1681]={d="l"}, + [0x1682]={d="l"}, + [0x1683]={d="l"}, + [0x1684]={d="l"}, + [0x1685]={d="l"}, + [0x1686]={d="l"}, + [0x1687]={d="l"}, + [0x1688]={d="l"}, + [0x1689]={d="l"}, + [0x168A]={d="l"}, + [0x168B]={d="l"}, + [0x168C]={d="l"}, + [0x168D]={d="l"}, + [0x168E]={d="l"}, + [0x168F]={d="l"}, + [0x1690]={d="l"}, + [0x1691]={d="l"}, + [0x1692]={d="l"}, + [0x1693]={d="l"}, + [0x1694]={d="l"}, + [0x1695]={d="l"}, + [0x1696]={d="l"}, + [0x1697]={d="l"}, + [0x1698]={d="l"}, + [0x1699]={d="l"}, + [0x169A]={d="l"}, + [0x169B]={d="on", + m=0x169C}, + [0x169C]={d="on", + m=0x169B}, + [0x16A0]={d="l"}, + [0x16A1]={d="l"}, + [0x16A2]={d="l"}, + [0x16A3]={d="l"}, + [0x16A4]={d="l"}, + [0x16A5]={d="l"}, + [0x16A6]={d="l"}, + [0x16A7]={d="l"}, + [0x16A8]={d="l"}, + [0x16A9]={d="l"}, + [0x16AA]={d="l"}, + [0x16AB]={d="l"}, + [0x16AC]={d="l"}, + [0x16AD]={d="l"}, + [0x16AE]={d="l"}, + [0x16AF]={d="l"}, + [0x16B0]={d="l"}, + [0x16B1]={d="l"}, + [0x16B2]={d="l"}, + [0x16B3]={d="l"}, + [0x16B4]={d="l"}, + [0x16B5]={d="l"}, + [0x16B6]={d="l"}, + [0x16B7]={d="l"}, + [0x16B8]={d="l"}, + [0x16B9]={d="l"}, + [0x16BA]={d="l"}, + [0x16BB]={d="l"}, + [0x16BC]={d="l"}, + [0x16BD]={d="l"}, + [0x16BE]={d="l"}, + [0x16BF]={d="l"}, + [0x16C0]={d="l"}, + [0x16C1]={d="l"}, + [0x16C2]={d="l"}, + [0x16C3]={d="l"}, + [0x16C4]={d="l"}, + [0x16C5]={d="l"}, + [0x16C6]={d="l"}, + [0x16C7]={d="l"}, + [0x16C8]={d="l"}, + [0x16C9]={d="l"}, + [0x16CA]={d="l"}, + [0x16CB]={d="l"}, + [0x16CC]={d="l"}, + [0x16CD]={d="l"}, + [0x16CE]={d="l"}, + [0x16CF]={d="l"}, + [0x16D0]={d="l"}, + [0x16D1]={d="l"}, + [0x16D2]={d="l"}, + [0x16D3]={d="l"}, + [0x16D4]={d="l"}, + [0x16D5]={d="l"}, + [0x16D6]={d="l"}, + [0x16D7]={d="l"}, + [0x16D8]={d="l"}, + [0x16D9]={d="l"}, + [0x16DA]={d="l"}, + [0x16DB]={d="l"}, + [0x16DC]={d="l"}, + [0x16DD]={d="l"}, + [0x16DE]={d="l"}, + [0x16DF]={d="l"}, + [0x16E0]={d="l"}, + [0x16E1]={d="l"}, + [0x16E2]={d="l"}, + [0x16E3]={d="l"}, + [0x16E4]={d="l"}, + [0x16E5]={d="l"}, + [0x16E6]={d="l"}, + [0x16E7]={d="l"}, + [0x16E8]={d="l"}, + [0x16E9]={d="l"}, + [0x16EA]={d="l"}, + [0x16EB]={d="l"}, + [0x16EC]={d="l"}, + [0x16ED]={d="l"}, + [0x16EE]={d="l"}, + [0x16EF]={d="l"}, + [0x16F0]={d="l"}, + [0x16F1]={d="l"}, + [0x16F2]={d="l"}, + [0x16F3]={d="l"}, + [0x16F4]={d="l"}, + [0x16F5]={d="l"}, + [0x16F6]={d="l"}, + [0x16F7]={d="l"}, + [0x16F8]={d="l"}, + [0x1700]={d="l"}, + [0x1701]={d="l"}, + [0x1702]={d="l"}, + [0x1703]={d="l"}, + [0x1704]={d="l"}, + [0x1705]={d="l"}, + [0x1706]={d="l"}, + [0x1707]={d="l"}, + [0x1708]={d="l"}, + [0x1709]={d="l"}, + [0x170A]={d="l"}, + [0x170B]={d="l"}, + [0x170C]={d="l"}, + [0x170D]={d="l"}, + [0x170E]={d="l"}, + [0x170F]={d="l"}, + [0x1710]={d="l"}, + [0x1711]={d="l"}, + [0x1712]={d="nsm"}, + [0x1713]={d="nsm"}, + [0x1714]={d="nsm"}, + [0x1715]={d="l"}, + [0x171F]={d="l"}, + [0x1720]={d="l"}, + [0x1721]={d="l"}, + [0x1722]={d="l"}, + [0x1723]={d="l"}, + [0x1724]={d="l"}, + [0x1725]={d="l"}, + [0x1726]={d="l"}, + [0x1727]={d="l"}, + [0x1728]={d="l"}, + [0x1729]={d="l"}, + [0x172A]={d="l"}, + [0x172B]={d="l"}, + [0x172C]={d="l"}, + [0x172D]={d="l"}, + [0x172E]={d="l"}, + [0x172F]={d="l"}, + [0x1730]={d="l"}, + [0x1731]={d="l"}, + [0x1732]={d="nsm"}, + [0x1733]={d="nsm"}, + [0x1734]={d="l"}, + [0x1735]={d="l"}, + [0x1736]={d="l"}, + [0x1740]={d="l"}, + [0x1741]={d="l"}, + [0x1742]={d="l"}, + [0x1743]={d="l"}, + [0x1744]={d="l"}, + [0x1745]={d="l"}, + [0x1746]={d="l"}, + [0x1747]={d="l"}, + [0x1748]={d="l"}, + [0x1749]={d="l"}, + [0x174A]={d="l"}, + [0x174B]={d="l"}, + [0x174C]={d="l"}, + [0x174D]={d="l"}, + [0x174E]={d="l"}, + [0x174F]={d="l"}, + [0x1750]={d="l"}, + [0x1751]={d="l"}, + [0x1752]={d="nsm"}, + [0x1753]={d="nsm"}, + [0x1760]={d="l"}, + [0x1761]={d="l"}, + [0x1762]={d="l"}, + [0x1763]={d="l"}, + [0x1764]={d="l"}, + [0x1765]={d="l"}, + [0x1766]={d="l"}, + [0x1767]={d="l"}, + [0x1768]={d="l"}, + [0x1769]={d="l"}, + [0x176A]={d="l"}, + [0x176B]={d="l"}, + [0x176C]={d="l"}, + [0x176E]={d="l"}, + [0x176F]={d="l"}, + [0x1770]={d="l"}, + [0x1772]={d="nsm"}, + [0x1773]={d="nsm"}, + [0x1780]={d="l"}, + [0x1781]={d="l"}, + [0x1782]={d="l"}, + [0x1783]={d="l"}, + [0x1784]={d="l"}, + [0x1785]={d="l"}, + [0x1786]={d="l"}, + [0x1787]={d="l"}, + [0x1788]={d="l"}, + [0x1789]={d="l"}, + [0x178A]={d="l"}, + [0x178B]={d="l"}, + [0x178C]={d="l"}, + [0x178D]={d="l"}, + [0x178E]={d="l"}, + [0x178F]={d="l"}, + [0x1790]={d="l"}, + [0x1791]={d="l"}, + [0x1792]={d="l"}, + [0x1793]={d="l"}, + [0x1794]={d="l"}, + [0x1795]={d="l"}, + [0x1796]={d="l"}, + [0x1797]={d="l"}, + [0x1798]={d="l"}, + [0x1799]={d="l"}, + [0x179A]={d="l"}, + [0x179B]={d="l"}, + [0x179C]={d="l"}, + [0x179D]={d="l"}, + [0x179E]={d="l"}, + [0x179F]={d="l"}, + [0x17A0]={d="l"}, + [0x17A1]={d="l"}, + [0x17A2]={d="l"}, + [0x17A3]={d="l"}, + [0x17A4]={d="l"}, + [0x17A5]={d="l"}, + [0x17A6]={d="l"}, + [0x17A7]={d="l"}, + [0x17A8]={d="l"}, + [0x17A9]={d="l"}, + [0x17AA]={d="l"}, + [0x17AB]={d="l"}, + [0x17AC]={d="l"}, + [0x17AD]={d="l"}, + [0x17AE]={d="l"}, + [0x17AF]={d="l"}, + [0x17B0]={d="l"}, + [0x17B1]={d="l"}, + [0x17B2]={d="l"}, + [0x17B3]={d="l"}, + [0x17B4]={d="nsm"}, + [0x17B5]={d="nsm"}, + [0x17B6]={d="l"}, + [0x17B7]={d="nsm"}, + [0x17B8]={d="nsm"}, + [0x17B9]={d="nsm"}, + [0x17BA]={d="nsm"}, + [0x17BB]={d="nsm"}, + [0x17BC]={d="nsm"}, + [0x17BD]={d="nsm"}, + [0x17BE]={d="l"}, + [0x17BF]={d="l"}, + [0x17C0]={d="l"}, + [0x17C1]={d="l"}, + [0x17C2]={d="l"}, + [0x17C3]={d="l"}, + [0x17C4]={d="l"}, + [0x17C5]={d="l"}, + [0x17C6]={d="nsm"}, + [0x17C7]={d="l"}, + [0x17C8]={d="l"}, + [0x17C9]={d="nsm"}, + [0x17CA]={d="nsm"}, + [0x17CB]={d="nsm"}, + [0x17CC]={d="nsm"}, + [0x17CD]={d="nsm"}, + [0x17CE]={d="nsm"}, + [0x17CF]={d="nsm"}, + [0x17D0]={d="nsm"}, + [0x17D1]={d="nsm"}, + [0x17D2]={d="nsm"}, + [0x17D3]={d="nsm"}, + [0x17D4]={d="l"}, + [0x17D5]={d="l"}, + [0x17D6]={d="l"}, + [0x17D7]={d="l"}, + [0x17D8]={d="l"}, + [0x17D9]={d="l"}, + [0x17DA]={d="l"}, + [0x17DB]={d="et"}, + [0x17DC]={d="l"}, + [0x17DD]={d="nsm"}, + [0x17E0]={d="l"}, + [0x17E1]={d="l"}, + [0x17E2]={d="l"}, + [0x17E3]={d="l"}, + [0x17E4]={d="l"}, + [0x17E5]={d="l"}, + [0x17E6]={d="l"}, + [0x17E7]={d="l"}, + [0x17E8]={d="l"}, + [0x17E9]={d="l"}, + [0x17F0]={d="on"}, + [0x17F1]={d="on"}, + [0x17F2]={d="on"}, + [0x17F3]={d="on"}, + [0x17F4]={d="on"}, + [0x17F5]={d="on"}, + [0x17F6]={d="on"}, + [0x17F7]={d="on"}, + [0x17F8]={d="on"}, + [0x17F9]={d="on"}, + [0x1800]={d="on"}, + [0x1801]={d="on"}, + [0x1802]={d="on"}, + [0x1803]={d="on"}, + [0x1804]={d="on"}, + [0x1805]={d="on"}, + [0x1806]={d="on"}, + [0x1807]={d="on"}, + [0x1808]={d="on"}, + [0x1809]={d="on"}, + [0x180A]={d="on"}, + [0x180B]={d="nsm"}, + [0x180C]={d="nsm"}, + [0x180D]={d="nsm"}, + [0x180E]={d="bn"}, + [0x180F]={d="nsm"}, + [0x1810]={d="l"}, + [0x1811]={d="l"}, + [0x1812]={d="l"}, + [0x1813]={d="l"}, + [0x1814]={d="l"}, + [0x1815]={d="l"}, + [0x1816]={d="l"}, + [0x1817]={d="l"}, + [0x1818]={d="l"}, + [0x1819]={d="l"}, + [0x1820]={d="l"}, + [0x1821]={d="l"}, + [0x1822]={d="l"}, + [0x1823]={d="l"}, + [0x1824]={d="l"}, + [0x1825]={d="l"}, + [0x1826]={d="l"}, + [0x1827]={d="l"}, + [0x1828]={d="l"}, + [0x1829]={d="l"}, + [0x182A]={d="l"}, + [0x182B]={d="l"}, + [0x182C]={d="l"}, + [0x182D]={d="l"}, + [0x182E]={d="l"}, + [0x182F]={d="l"}, + [0x1830]={d="l"}, + [0x1831]={d="l"}, + [0x1832]={d="l"}, + [0x1833]={d="l"}, + [0x1834]={d="l"}, + [0x1835]={d="l"}, + [0x1836]={d="l"}, + [0x1837]={d="l"}, + [0x1838]={d="l"}, + [0x1839]={d="l"}, + [0x183A]={d="l"}, + [0x183B]={d="l"}, + [0x183C]={d="l"}, + [0x183D]={d="l"}, + [0x183E]={d="l"}, + [0x183F]={d="l"}, + [0x1840]={d="l"}, + [0x1841]={d="l"}, + [0x1842]={d="l"}, + [0x1843]={d="l"}, + [0x1844]={d="l"}, + [0x1845]={d="l"}, + [0x1846]={d="l"}, + [0x1847]={d="l"}, + [0x1848]={d="l"}, + [0x1849]={d="l"}, + [0x184A]={d="l"}, + [0x184B]={d="l"}, + [0x184C]={d="l"}, + [0x184D]={d="l"}, + [0x184E]={d="l"}, + [0x184F]={d="l"}, + [0x1850]={d="l"}, + [0x1851]={d="l"}, + [0x1852]={d="l"}, + [0x1853]={d="l"}, + [0x1854]={d="l"}, + [0x1855]={d="l"}, + [0x1856]={d="l"}, + [0x1857]={d="l"}, + [0x1858]={d="l"}, + [0x1859]={d="l"}, + [0x185A]={d="l"}, + [0x185B]={d="l"}, + [0x185C]={d="l"}, + [0x185D]={d="l"}, + [0x185E]={d="l"}, + [0x185F]={d="l"}, + [0x1860]={d="l"}, + [0x1861]={d="l"}, + [0x1862]={d="l"}, + [0x1863]={d="l"}, + [0x1864]={d="l"}, + [0x1865]={d="l"}, + [0x1866]={d="l"}, + [0x1867]={d="l"}, + [0x1868]={d="l"}, + [0x1869]={d="l"}, + [0x186A]={d="l"}, + [0x186B]={d="l"}, + [0x186C]={d="l"}, + [0x186D]={d="l"}, + [0x186E]={d="l"}, + [0x186F]={d="l"}, + [0x1870]={d="l"}, + [0x1871]={d="l"}, + [0x1872]={d="l"}, + [0x1873]={d="l"}, + [0x1874]={d="l"}, + [0x1875]={d="l"}, + [0x1876]={d="l"}, + [0x1877]={d="l"}, + [0x1878]={d="l"}, + [0x1880]={d="l"}, + [0x1881]={d="l"}, + [0x1882]={d="l"}, + [0x1883]={d="l"}, + [0x1884]={d="l"}, + [0x1885]={d="nsm"}, + [0x1886]={d="nsm"}, + [0x1887]={d="l"}, + [0x1888]={d="l"}, + [0x1889]={d="l"}, + [0x188A]={d="l"}, + [0x188B]={d="l"}, + [0x188C]={d="l"}, + [0x188D]={d="l"}, + [0x188E]={d="l"}, + [0x188F]={d="l"}, + [0x1890]={d="l"}, + [0x1891]={d="l"}, + [0x1892]={d="l"}, + [0x1893]={d="l"}, + [0x1894]={d="l"}, + [0x1895]={d="l"}, + [0x1896]={d="l"}, + [0x1897]={d="l"}, + [0x1898]={d="l"}, + [0x1899]={d="l"}, + [0x189A]={d="l"}, + [0x189B]={d="l"}, + [0x189C]={d="l"}, + [0x189D]={d="l"}, + [0x189E]={d="l"}, + [0x189F]={d="l"}, + [0x18A0]={d="l"}, + [0x18A1]={d="l"}, + [0x18A2]={d="l"}, + [0x18A3]={d="l"}, + [0x18A4]={d="l"}, + [0x18A5]={d="l"}, + [0x18A6]={d="l"}, + [0x18A7]={d="l"}, + [0x18A8]={d="l"}, + [0x18A9]={d="nsm"}, + [0x18AA]={d="l"}, + [0x18B0]={d="l"}, + [0x18B1]={d="l"}, + [0x18B2]={d="l"}, + [0x18B3]={d="l"}, + [0x18B4]={d="l"}, + [0x18B5]={d="l"}, + [0x18B6]={d="l"}, + [0x18B7]={d="l"}, + [0x18B8]={d="l"}, + [0x18B9]={d="l"}, + [0x18BA]={d="l"}, + [0x18BB]={d="l"}, + [0x18BC]={d="l"}, + [0x18BD]={d="l"}, + [0x18BE]={d="l"}, + [0x18BF]={d="l"}, + [0x18C0]={d="l"}, + [0x18C1]={d="l"}, + [0x18C2]={d="l"}, + [0x18C3]={d="l"}, + [0x18C4]={d="l"}, + [0x18C5]={d="l"}, + [0x18C6]={d="l"}, + [0x18C7]={d="l"}, + [0x18C8]={d="l"}, + [0x18C9]={d="l"}, + [0x18CA]={d="l"}, + [0x18CB]={d="l"}, + [0x18CC]={d="l"}, + [0x18CD]={d="l"}, + [0x18CE]={d="l"}, + [0x18CF]={d="l"}, + [0x18D0]={d="l"}, + [0x18D1]={d="l"}, + [0x18D2]={d="l"}, + [0x18D3]={d="l"}, + [0x18D4]={d="l"}, + [0x18D5]={d="l"}, + [0x18D6]={d="l"}, + [0x18D7]={d="l"}, + [0x18D8]={d="l"}, + [0x18D9]={d="l"}, + [0x18DA]={d="l"}, + [0x18DB]={d="l"}, + [0x18DC]={d="l"}, + [0x18DD]={d="l"}, + [0x18DE]={d="l"}, + [0x18DF]={d="l"}, + [0x18E0]={d="l"}, + [0x18E1]={d="l"}, + [0x18E2]={d="l"}, + [0x18E3]={d="l"}, + [0x18E4]={d="l"}, + [0x18E5]={d="l"}, + [0x18E6]={d="l"}, + [0x18E7]={d="l"}, + [0x18E8]={d="l"}, + [0x18E9]={d="l"}, + [0x18EA]={d="l"}, + [0x18EB]={d="l"}, + [0x18EC]={d="l"}, + [0x18ED]={d="l"}, + [0x18EE]={d="l"}, + [0x18EF]={d="l"}, + [0x18F0]={d="l"}, + [0x18F1]={d="l"}, + [0x18F2]={d="l"}, + [0x18F3]={d="l"}, + [0x18F4]={d="l"}, + [0x18F5]={d="l"}, + [0x1900]={d="l"}, + [0x1901]={d="l"}, + [0x1902]={d="l"}, + [0x1903]={d="l"}, + [0x1904]={d="l"}, + [0x1905]={d="l"}, + [0x1906]={d="l"}, + [0x1907]={d="l"}, + [0x1908]={d="l"}, + [0x1909]={d="l"}, + [0x190A]={d="l"}, + [0x190B]={d="l"}, + [0x190C]={d="l"}, + [0x190D]={d="l"}, + [0x190E]={d="l"}, + [0x190F]={d="l"}, + [0x1910]={d="l"}, + [0x1911]={d="l"}, + [0x1912]={d="l"}, + [0x1913]={d="l"}, + [0x1914]={d="l"}, + [0x1915]={d="l"}, + [0x1916]={d="l"}, + [0x1917]={d="l"}, + [0x1918]={d="l"}, + [0x1919]={d="l"}, + [0x191A]={d="l"}, + [0x191B]={d="l"}, + [0x191C]={d="l"}, + [0x191D]={d="l"}, + [0x191E]={d="l"}, + [0x1920]={d="nsm"}, + [0x1921]={d="nsm"}, + [0x1922]={d="nsm"}, + [0x1923]={d="l"}, + [0x1924]={d="l"}, + [0x1925]={d="l"}, + [0x1926]={d="l"}, + [0x1927]={d="nsm"}, + [0x1928]={d="nsm"}, + [0x1929]={d="l"}, + [0x192A]={d="l"}, + [0x192B]={d="l"}, + [0x1930]={d="l"}, + [0x1931]={d="l"}, + [0x1932]={d="nsm"}, + [0x1933]={d="l"}, + [0x1934]={d="l"}, + [0x1935]={d="l"}, + [0x1936]={d="l"}, + [0x1937]={d="l"}, + [0x1938]={d="l"}, + [0x1939]={d="nsm"}, + [0x193A]={d="nsm"}, + [0x193B]={d="nsm"}, + [0x1940]={d="on"}, + [0x1944]={d="on"}, + [0x1945]={d="on"}, + [0x1946]={d="l"}, + [0x1947]={d="l"}, + [0x1948]={d="l"}, + [0x1949]={d="l"}, + [0x194A]={d="l"}, + [0x194B]={d="l"}, + [0x194C]={d="l"}, + [0x194D]={d="l"}, + [0x194E]={d="l"}, + [0x194F]={d="l"}, + [0x1950]={d="l"}, + [0x1951]={d="l"}, + [0x1952]={d="l"}, + [0x1953]={d="l"}, + [0x1954]={d="l"}, + [0x1955]={d="l"}, + [0x1956]={d="l"}, + [0x1957]={d="l"}, + [0x1958]={d="l"}, + [0x1959]={d="l"}, + [0x195A]={d="l"}, + [0x195B]={d="l"}, + [0x195C]={d="l"}, + [0x195D]={d="l"}, + [0x195E]={d="l"}, + [0x195F]={d="l"}, + [0x1960]={d="l"}, + [0x1961]={d="l"}, + [0x1962]={d="l"}, + [0x1963]={d="l"}, + [0x1964]={d="l"}, + [0x1965]={d="l"}, + [0x1966]={d="l"}, + [0x1967]={d="l"}, + [0x1968]={d="l"}, + [0x1969]={d="l"}, + [0x196A]={d="l"}, + [0x196B]={d="l"}, + [0x196C]={d="l"}, + [0x196D]={d="l"}, + [0x1970]={d="l"}, + [0x1971]={d="l"}, + [0x1972]={d="l"}, + [0x1973]={d="l"}, + [0x1974]={d="l"}, + [0x1980]={d="l"}, + [0x1981]={d="l"}, + [0x1982]={d="l"}, + [0x1983]={d="l"}, + [0x1984]={d="l"}, + [0x1985]={d="l"}, + [0x1986]={d="l"}, + [0x1987]={d="l"}, + [0x1988]={d="l"}, + [0x1989]={d="l"}, + [0x198A]={d="l"}, + [0x198B]={d="l"}, + [0x198C]={d="l"}, + [0x198D]={d="l"}, + [0x198E]={d="l"}, + [0x198F]={d="l"}, + [0x1990]={d="l"}, + [0x1991]={d="l"}, + [0x1992]={d="l"}, + [0x1993]={d="l"}, + [0x1994]={d="l"}, + [0x1995]={d="l"}, + [0x1996]={d="l"}, + [0x1997]={d="l"}, + [0x1998]={d="l"}, + [0x1999]={d="l"}, + [0x199A]={d="l"}, + [0x199B]={d="l"}, + [0x199C]={d="l"}, + [0x199D]={d="l"}, + [0x199E]={d="l"}, + [0x199F]={d="l"}, + [0x19A0]={d="l"}, + [0x19A1]={d="l"}, + [0x19A2]={d="l"}, + [0x19A3]={d="l"}, + [0x19A4]={d="l"}, + [0x19A5]={d="l"}, + [0x19A6]={d="l"}, + [0x19A7]={d="l"}, + [0x19A8]={d="l"}, + [0x19A9]={d="l"}, + [0x19AA]={d="l"}, + [0x19AB]={d="l"}, + [0x19B0]={d="l"}, + [0x19B1]={d="l"}, + [0x19B2]={d="l"}, + [0x19B3]={d="l"}, + [0x19B4]={d="l"}, + [0x19B5]={d="l"}, + [0x19B6]={d="l"}, + [0x19B7]={d="l"}, + [0x19B8]={d="l"}, + [0x19B9]={d="l"}, + [0x19BA]={d="l"}, + [0x19BB]={d="l"}, + [0x19BC]={d="l"}, + [0x19BD]={d="l"}, + [0x19BE]={d="l"}, + [0x19BF]={d="l"}, + [0x19C0]={d="l"}, + [0x19C1]={d="l"}, + [0x19C2]={d="l"}, + [0x19C3]={d="l"}, + [0x19C4]={d="l"}, + [0x19C5]={d="l"}, + [0x19C6]={d="l"}, + [0x19C7]={d="l"}, + [0x19C8]={d="l"}, + [0x19C9]={d="l"}, + [0x19D0]={d="l"}, + [0x19D1]={d="l"}, + [0x19D2]={d="l"}, + [0x19D3]={d="l"}, + [0x19D4]={d="l"}, + [0x19D5]={d="l"}, + [0x19D6]={d="l"}, + [0x19D7]={d="l"}, + [0x19D8]={d="l"}, + [0x19D9]={d="l"}, + [0x19DA]={d="l"}, + [0x19DE]={d="on"}, + [0x19DF]={d="on"}, + [0x19E0]={d="on"}, + [0x19E1]={d="on"}, + [0x19E2]={d="on"}, + [0x19E3]={d="on"}, + [0x19E4]={d="on"}, + [0x19E5]={d="on"}, + [0x19E6]={d="on"}, + [0x19E7]={d="on"}, + [0x19E8]={d="on"}, + [0x19E9]={d="on"}, + [0x19EA]={d="on"}, + [0x19EB]={d="on"}, + [0x19EC]={d="on"}, + [0x19ED]={d="on"}, + [0x19EE]={d="on"}, + [0x19EF]={d="on"}, + [0x19F0]={d="on"}, + [0x19F1]={d="on"}, + [0x19F2]={d="on"}, + [0x19F3]={d="on"}, + [0x19F4]={d="on"}, + [0x19F5]={d="on"}, + [0x19F6]={d="on"}, + [0x19F7]={d="on"}, + [0x19F8]={d="on"}, + [0x19F9]={d="on"}, + [0x19FA]={d="on"}, + [0x19FB]={d="on"}, + [0x19FC]={d="on"}, + [0x19FD]={d="on"}, + [0x19FE]={d="on"}, + [0x19FF]={d="on"}, + [0x1A00]={d="l"}, + [0x1A01]={d="l"}, + [0x1A02]={d="l"}, + [0x1A03]={d="l"}, + [0x1A04]={d="l"}, + [0x1A05]={d="l"}, + [0x1A06]={d="l"}, + [0x1A07]={d="l"}, + [0x1A08]={d="l"}, + [0x1A09]={d="l"}, + [0x1A0A]={d="l"}, + [0x1A0B]={d="l"}, + [0x1A0C]={d="l"}, + [0x1A0D]={d="l"}, + [0x1A0E]={d="l"}, + [0x1A0F]={d="l"}, + [0x1A10]={d="l"}, + [0x1A11]={d="l"}, + [0x1A12]={d="l"}, + [0x1A13]={d="l"}, + [0x1A14]={d="l"}, + [0x1A15]={d="l"}, + [0x1A16]={d="l"}, + [0x1A17]={d="nsm"}, + [0x1A18]={d="nsm"}, + [0x1A19]={d="l"}, + [0x1A1A]={d="l"}, + [0x1A1B]={d="nsm"}, + [0x1A1E]={d="l"}, + [0x1A1F]={d="l"}, + [0x1A20]={d="l"}, + [0x1A21]={d="l"}, + [0x1A22]={d="l"}, + [0x1A23]={d="l"}, + [0x1A24]={d="l"}, + [0x1A25]={d="l"}, + [0x1A26]={d="l"}, + [0x1A27]={d="l"}, + [0x1A28]={d="l"}, + [0x1A29]={d="l"}, + [0x1A2A]={d="l"}, + [0x1A2B]={d="l"}, + [0x1A2C]={d="l"}, + [0x1A2D]={d="l"}, + [0x1A2E]={d="l"}, + [0x1A2F]={d="l"}, + [0x1A30]={d="l"}, + [0x1A31]={d="l"}, + [0x1A32]={d="l"}, + [0x1A33]={d="l"}, + [0x1A34]={d="l"}, + [0x1A35]={d="l"}, + [0x1A36]={d="l"}, + [0x1A37]={d="l"}, + [0x1A38]={d="l"}, + [0x1A39]={d="l"}, + [0x1A3A]={d="l"}, + [0x1A3B]={d="l"}, + [0x1A3C]={d="l"}, + [0x1A3D]={d="l"}, + [0x1A3E]={d="l"}, + [0x1A3F]={d="l"}, + [0x1A40]={d="l"}, + [0x1A41]={d="l"}, + [0x1A42]={d="l"}, + [0x1A43]={d="l"}, + [0x1A44]={d="l"}, + [0x1A45]={d="l"}, + [0x1A46]={d="l"}, + [0x1A47]={d="l"}, + [0x1A48]={d="l"}, + [0x1A49]={d="l"}, + [0x1A4A]={d="l"}, + [0x1A4B]={d="l"}, + [0x1A4C]={d="l"}, + [0x1A4D]={d="l"}, + [0x1A4E]={d="l"}, + [0x1A4F]={d="l"}, + [0x1A50]={d="l"}, + [0x1A51]={d="l"}, + [0x1A52]={d="l"}, + [0x1A53]={d="l"}, + [0x1A54]={d="l"}, + [0x1A55]={d="l"}, + [0x1A56]={d="nsm"}, + [0x1A57]={d="l"}, + [0x1A58]={d="nsm"}, + [0x1A59]={d="nsm"}, + [0x1A5A]={d="nsm"}, + [0x1A5B]={d="nsm"}, + [0x1A5C]={d="nsm"}, + [0x1A5D]={d="nsm"}, + [0x1A5E]={d="nsm"}, + [0x1A60]={d="nsm"}, + [0x1A61]={d="l"}, + [0x1A62]={d="nsm"}, + [0x1A63]={d="l"}, + [0x1A64]={d="l"}, + [0x1A65]={d="nsm"}, + [0x1A66]={d="nsm"}, + [0x1A67]={d="nsm"}, + [0x1A68]={d="nsm"}, + [0x1A69]={d="nsm"}, + [0x1A6A]={d="nsm"}, + [0x1A6B]={d="nsm"}, + [0x1A6C]={d="nsm"}, + [0x1A6D]={d="l"}, + [0x1A6E]={d="l"}, + [0x1A6F]={d="l"}, + [0x1A70]={d="l"}, + [0x1A71]={d="l"}, + [0x1A72]={d="l"}, + [0x1A73]={d="nsm"}, + [0x1A74]={d="nsm"}, + [0x1A75]={d="nsm"}, + [0x1A76]={d="nsm"}, + [0x1A77]={d="nsm"}, + [0x1A78]={d="nsm"}, + [0x1A79]={d="nsm"}, + [0x1A7A]={d="nsm"}, + [0x1A7B]={d="nsm"}, + [0x1A7C]={d="nsm"}, + [0x1A7F]={d="nsm"}, + [0x1A80]={d="l"}, + [0x1A81]={d="l"}, + [0x1A82]={d="l"}, + [0x1A83]={d="l"}, + [0x1A84]={d="l"}, + [0x1A85]={d="l"}, + [0x1A86]={d="l"}, + [0x1A87]={d="l"}, + [0x1A88]={d="l"}, + [0x1A89]={d="l"}, + [0x1A90]={d="l"}, + [0x1A91]={d="l"}, + [0x1A92]={d="l"}, + [0x1A93]={d="l"}, + [0x1A94]={d="l"}, + [0x1A95]={d="l"}, + [0x1A96]={d="l"}, + [0x1A97]={d="l"}, + [0x1A98]={d="l"}, + [0x1A99]={d="l"}, + [0x1AA0]={d="l"}, + [0x1AA1]={d="l"}, + [0x1AA2]={d="l"}, + [0x1AA3]={d="l"}, + [0x1AA4]={d="l"}, + [0x1AA5]={d="l"}, + [0x1AA6]={d="l"}, + [0x1AA7]={d="l"}, + [0x1AA8]={d="l"}, + [0x1AA9]={d="l"}, + [0x1AAA]={d="l"}, + [0x1AAB]={d="l"}, + [0x1AAC]={d="l"}, + [0x1AAD]={d="l"}, + [0x1AB0]={d="nsm"}, + [0x1AB1]={d="nsm"}, + [0x1AB2]={d="nsm"}, + [0x1AB3]={d="nsm"}, + [0x1AB4]={d="nsm"}, + [0x1AB5]={d="nsm"}, + [0x1AB6]={d="nsm"}, + [0x1AB7]={d="nsm"}, + [0x1AB8]={d="nsm"}, + [0x1AB9]={d="nsm"}, + [0x1ABA]={d="nsm"}, + [0x1ABB]={d="nsm"}, + [0x1ABC]={d="nsm"}, + [0x1ABD]={d="nsm"}, + [0x1ABE]={d="nsm"}, + [0x1ABF]={d="nsm"}, + [0x1AC0]={d="nsm"}, + [0x1AC1]={d="nsm"}, + [0x1AC2]={d="nsm"}, + [0x1AC3]={d="nsm"}, + [0x1AC4]={d="nsm"}, + [0x1AC5]={d="nsm"}, + [0x1AC6]={d="nsm"}, + [0x1AC7]={d="nsm"}, + [0x1AC8]={d="nsm"}, + [0x1AC9]={d="nsm"}, + [0x1ACA]={d="nsm"}, + [0x1ACB]={d="nsm"}, + [0x1ACC]={d="nsm"}, + [0x1ACD]={d="nsm"}, + [0x1ACE]={d="nsm"}, + [0x1B00]={d="nsm"}, + [0x1B01]={d="nsm"}, + [0x1B02]={d="nsm"}, + [0x1B03]={d="nsm"}, + [0x1B04]={d="l"}, + [0x1B05]={d="l"}, + [0x1B06]={d="l"}, + [0x1B07]={d="l"}, + [0x1B08]={d="l"}, + [0x1B09]={d="l"}, + [0x1B0A]={d="l"}, + [0x1B0B]={d="l"}, + [0x1B0C]={d="l"}, + [0x1B0D]={d="l"}, + [0x1B0E]={d="l"}, + [0x1B0F]={d="l"}, + [0x1B10]={d="l"}, + [0x1B11]={d="l"}, + [0x1B12]={d="l"}, + [0x1B13]={d="l"}, + [0x1B14]={d="l"}, + [0x1B15]={d="l"}, + [0x1B16]={d="l"}, + [0x1B17]={d="l"}, + [0x1B18]={d="l"}, + [0x1B19]={d="l"}, + [0x1B1A]={d="l"}, + [0x1B1B]={d="l"}, + [0x1B1C]={d="l"}, + [0x1B1D]={d="l"}, + [0x1B1E]={d="l"}, + [0x1B1F]={d="l"}, + [0x1B20]={d="l"}, + [0x1B21]={d="l"}, + [0x1B22]={d="l"}, + [0x1B23]={d="l"}, + [0x1B24]={d="l"}, + [0x1B25]={d="l"}, + [0x1B26]={d="l"}, + [0x1B27]={d="l"}, + [0x1B28]={d="l"}, + [0x1B29]={d="l"}, + [0x1B2A]={d="l"}, + [0x1B2B]={d="l"}, + [0x1B2C]={d="l"}, + [0x1B2D]={d="l"}, + [0x1B2E]={d="l"}, + [0x1B2F]={d="l"}, + [0x1B30]={d="l"}, + [0x1B31]={d="l"}, + [0x1B32]={d="l"}, + [0x1B33]={d="l"}, + [0x1B34]={d="nsm"}, + [0x1B35]={d="l"}, + [0x1B36]={d="nsm"}, + [0x1B37]={d="nsm"}, + [0x1B38]={d="nsm"}, + [0x1B39]={d="nsm"}, + [0x1B3A]={d="nsm"}, + [0x1B3B]={d="l"}, + [0x1B3C]={d="nsm"}, + [0x1B3D]={d="l"}, + [0x1B3E]={d="l"}, + [0x1B3F]={d="l"}, + [0x1B40]={d="l"}, + [0x1B41]={d="l"}, + [0x1B42]={d="nsm"}, + [0x1B43]={d="l"}, + [0x1B44]={d="l"}, + [0x1B45]={d="l"}, + [0x1B46]={d="l"}, + [0x1B47]={d="l"}, + [0x1B48]={d="l"}, + [0x1B49]={d="l"}, + [0x1B4A]={d="l"}, + [0x1B4B]={d="l"}, + [0x1B4C]={d="l"}, + [0x1B50]={d="l"}, + [0x1B51]={d="l"}, + [0x1B52]={d="l"}, + [0x1B53]={d="l"}, + [0x1B54]={d="l"}, + [0x1B55]={d="l"}, + [0x1B56]={d="l"}, + [0x1B57]={d="l"}, + [0x1B58]={d="l"}, + [0x1B59]={d="l"}, + [0x1B5A]={d="l"}, + [0x1B5B]={d="l"}, + [0x1B5C]={d="l"}, + [0x1B5D]={d="l"}, + [0x1B5E]={d="l"}, + [0x1B5F]={d="l"}, + [0x1B60]={d="l"}, + [0x1B61]={d="l"}, + [0x1B62]={d="l"}, + [0x1B63]={d="l"}, + [0x1B64]={d="l"}, + [0x1B65]={d="l"}, + [0x1B66]={d="l"}, + [0x1B67]={d="l"}, + [0x1B68]={d="l"}, + [0x1B69]={d="l"}, + [0x1B6A]={d="l"}, + [0x1B6B]={d="nsm"}, + [0x1B6C]={d="nsm"}, + [0x1B6D]={d="nsm"}, + [0x1B6E]={d="nsm"}, + [0x1B6F]={d="nsm"}, + [0x1B70]={d="nsm"}, + [0x1B71]={d="nsm"}, + [0x1B72]={d="nsm"}, + [0x1B73]={d="nsm"}, + [0x1B74]={d="l"}, + [0x1B75]={d="l"}, + [0x1B76]={d="l"}, + [0x1B77]={d="l"}, + [0x1B78]={d="l"}, + [0x1B79]={d="l"}, + [0x1B7A]={d="l"}, + [0x1B7B]={d="l"}, + [0x1B7C]={d="l"}, + [0x1B7D]={d="l"}, + [0x1B7E]={d="l"}, + [0x1B80]={d="nsm"}, + [0x1B81]={d="nsm"}, + [0x1B82]={d="l"}, + [0x1B83]={d="l"}, + [0x1B84]={d="l"}, + [0x1B85]={d="l"}, + [0x1B86]={d="l"}, + [0x1B87]={d="l"}, + [0x1B88]={d="l"}, + [0x1B89]={d="l"}, + [0x1B8A]={d="l"}, + [0x1B8B]={d="l"}, + [0x1B8C]={d="l"}, + [0x1B8D]={d="l"}, + [0x1B8E]={d="l"}, + [0x1B8F]={d="l"}, + [0x1B90]={d="l"}, + [0x1B91]={d="l"}, + [0x1B92]={d="l"}, + [0x1B93]={d="l"}, + [0x1B94]={d="l"}, + [0x1B95]={d="l"}, + [0x1B96]={d="l"}, + [0x1B97]={d="l"}, + [0x1B98]={d="l"}, + [0x1B99]={d="l"}, + [0x1B9A]={d="l"}, + [0x1B9B]={d="l"}, + [0x1B9C]={d="l"}, + [0x1B9D]={d="l"}, + [0x1B9E]={d="l"}, + [0x1B9F]={d="l"}, + [0x1BA0]={d="l"}, + [0x1BA1]={d="l"}, + [0x1BA2]={d="nsm"}, + [0x1BA3]={d="nsm"}, + [0x1BA4]={d="nsm"}, + [0x1BA5]={d="nsm"}, + [0x1BA6]={d="l"}, + [0x1BA7]={d="l"}, + [0x1BA8]={d="nsm"}, + [0x1BA9]={d="nsm"}, + [0x1BAA]={d="l"}, + [0x1BAB]={d="nsm"}, + [0x1BAC]={d="nsm"}, + [0x1BAD]={d="nsm"}, + [0x1BAE]={d="l"}, + [0x1BAF]={d="l"}, + [0x1BB0]={d="l"}, + [0x1BB1]={d="l"}, + [0x1BB2]={d="l"}, + [0x1BB3]={d="l"}, + [0x1BB4]={d="l"}, + [0x1BB5]={d="l"}, + [0x1BB6]={d="l"}, + [0x1BB7]={d="l"}, + [0x1BB8]={d="l"}, + [0x1BB9]={d="l"}, + [0x1BBA]={d="l"}, + [0x1BBB]={d="l"}, + [0x1BBC]={d="l"}, + [0x1BBD]={d="l"}, + [0x1BBE]={d="l"}, + [0x1BBF]={d="l"}, + [0x1BC0]={d="l"}, + [0x1BC1]={d="l"}, + [0x1BC2]={d="l"}, + [0x1BC3]={d="l"}, + [0x1BC4]={d="l"}, + [0x1BC5]={d="l"}, + [0x1BC6]={d="l"}, + [0x1BC7]={d="l"}, + [0x1BC8]={d="l"}, + [0x1BC9]={d="l"}, + [0x1BCA]={d="l"}, + [0x1BCB]={d="l"}, + [0x1BCC]={d="l"}, + [0x1BCD]={d="l"}, + [0x1BCE]={d="l"}, + [0x1BCF]={d="l"}, + [0x1BD0]={d="l"}, + [0x1BD1]={d="l"}, + [0x1BD2]={d="l"}, + [0x1BD3]={d="l"}, + [0x1BD4]={d="l"}, + [0x1BD5]={d="l"}, + [0x1BD6]={d="l"}, + [0x1BD7]={d="l"}, + [0x1BD8]={d="l"}, + [0x1BD9]={d="l"}, + [0x1BDA]={d="l"}, + [0x1BDB]={d="l"}, + [0x1BDC]={d="l"}, + [0x1BDD]={d="l"}, + [0x1BDE]={d="l"}, + [0x1BDF]={d="l"}, + [0x1BE0]={d="l"}, + [0x1BE1]={d="l"}, + [0x1BE2]={d="l"}, + [0x1BE3]={d="l"}, + [0x1BE4]={d="l"}, + [0x1BE5]={d="l"}, + [0x1BE6]={d="nsm"}, + [0x1BE7]={d="l"}, + [0x1BE8]={d="nsm"}, + [0x1BE9]={d="nsm"}, + [0x1BEA]={d="l"}, + [0x1BEB]={d="l"}, + [0x1BEC]={d="l"}, + [0x1BED]={d="nsm"}, + [0x1BEE]={d="l"}, + [0x1BEF]={d="nsm"}, + [0x1BF0]={d="nsm"}, + [0x1BF1]={d="nsm"}, + [0x1BF2]={d="l"}, + [0x1BF3]={d="l"}, + [0x1BFC]={d="l"}, + [0x1BFD]={d="l"}, + [0x1BFE]={d="l"}, + [0x1BFF]={d="l"}, + [0x1C00]={d="l"}, + [0x1C01]={d="l"}, + [0x1C02]={d="l"}, + [0x1C03]={d="l"}, + [0x1C04]={d="l"}, + [0x1C05]={d="l"}, + [0x1C06]={d="l"}, + [0x1C07]={d="l"}, + [0x1C08]={d="l"}, + [0x1C09]={d="l"}, + [0x1C0A]={d="l"}, + [0x1C0B]={d="l"}, + [0x1C0C]={d="l"}, + [0x1C0D]={d="l"}, + [0x1C0E]={d="l"}, + [0x1C0F]={d="l"}, + [0x1C10]={d="l"}, + [0x1C11]={d="l"}, + [0x1C12]={d="l"}, + [0x1C13]={d="l"}, + [0x1C14]={d="l"}, + [0x1C15]={d="l"}, + [0x1C16]={d="l"}, + [0x1C17]={d="l"}, + [0x1C18]={d="l"}, + [0x1C19]={d="l"}, + [0x1C1A]={d="l"}, + [0x1C1B]={d="l"}, + [0x1C1C]={d="l"}, + [0x1C1D]={d="l"}, + [0x1C1E]={d="l"}, + [0x1C1F]={d="l"}, + [0x1C20]={d="l"}, + [0x1C21]={d="l"}, + [0x1C22]={d="l"}, + [0x1C23]={d="l"}, + [0x1C24]={d="l"}, + [0x1C25]={d="l"}, + [0x1C26]={d="l"}, + [0x1C27]={d="l"}, + [0x1C28]={d="l"}, + [0x1C29]={d="l"}, + [0x1C2A]={d="l"}, + [0x1C2B]={d="l"}, + [0x1C2C]={d="nsm"}, + [0x1C2D]={d="nsm"}, + [0x1C2E]={d="nsm"}, + [0x1C2F]={d="nsm"}, + [0x1C30]={d="nsm"}, + [0x1C31]={d="nsm"}, + [0x1C32]={d="nsm"}, + [0x1C33]={d="nsm"}, + [0x1C34]={d="l"}, + [0x1C35]={d="l"}, + [0x1C36]={d="nsm"}, + [0x1C37]={d="nsm"}, + [0x1C3B]={d="l"}, + [0x1C3C]={d="l"}, + [0x1C3D]={d="l"}, + [0x1C3E]={d="l"}, + [0x1C3F]={d="l"}, + [0x1C40]={d="l"}, + [0x1C41]={d="l"}, + [0x1C42]={d="l"}, + [0x1C43]={d="l"}, + [0x1C44]={d="l"}, + [0x1C45]={d="l"}, + [0x1C46]={d="l"}, + [0x1C47]={d="l"}, + [0x1C48]={d="l"}, + [0x1C49]={d="l"}, + [0x1C4D]={d="l"}, + [0x1C4E]={d="l"}, + [0x1C4F]={d="l"}, + [0x1C50]={d="l"}, + [0x1C51]={d="l"}, + [0x1C52]={d="l"}, + [0x1C53]={d="l"}, + [0x1C54]={d="l"}, + [0x1C55]={d="l"}, + [0x1C56]={d="l"}, + [0x1C57]={d="l"}, + [0x1C58]={d="l"}, + [0x1C59]={d="l"}, + [0x1C5A]={d="l"}, + [0x1C5B]={d="l"}, + [0x1C5C]={d="l"}, + [0x1C5D]={d="l"}, + [0x1C5E]={d="l"}, + [0x1C5F]={d="l"}, + [0x1C60]={d="l"}, + [0x1C61]={d="l"}, + [0x1C62]={d="l"}, + [0x1C63]={d="l"}, + [0x1C64]={d="l"}, + [0x1C65]={d="l"}, + [0x1C66]={d="l"}, + [0x1C67]={d="l"}, + [0x1C68]={d="l"}, + [0x1C69]={d="l"}, + [0x1C6A]={d="l"}, + [0x1C6B]={d="l"}, + [0x1C6C]={d="l"}, + [0x1C6D]={d="l"}, + [0x1C6E]={d="l"}, + [0x1C6F]={d="l"}, + [0x1C70]={d="l"}, + [0x1C71]={d="l"}, + [0x1C72]={d="l"}, + [0x1C73]={d="l"}, + [0x1C74]={d="l"}, + [0x1C75]={d="l"}, + [0x1C76]={d="l"}, + [0x1C77]={d="l"}, + [0x1C78]={d="l"}, + [0x1C79]={d="l"}, + [0x1C7A]={d="l"}, + [0x1C7B]={d="l"}, + [0x1C7C]={d="l"}, + [0x1C7D]={d="l"}, + [0x1C7E]={d="l"}, + [0x1C7F]={d="l"}, + [0x1C80]={d="l"}, + [0x1C81]={d="l"}, + [0x1C82]={d="l"}, + [0x1C83]={d="l"}, + [0x1C84]={d="l"}, + [0x1C85]={d="l"}, + [0x1C86]={d="l"}, + [0x1C87]={d="l"}, + [0x1C88]={d="l"}, + [0x1C90]={d="l"}, + [0x1C91]={d="l"}, + [0x1C92]={d="l"}, + [0x1C93]={d="l"}, + [0x1C94]={d="l"}, + [0x1C95]={d="l"}, + [0x1C96]={d="l"}, + [0x1C97]={d="l"}, + [0x1C98]={d="l"}, + [0x1C99]={d="l"}, + [0x1C9A]={d="l"}, + [0x1C9B]={d="l"}, + [0x1C9C]={d="l"}, + [0x1C9D]={d="l"}, + [0x1C9E]={d="l"}, + [0x1C9F]={d="l"}, + [0x1CA0]={d="l"}, + [0x1CA1]={d="l"}, + [0x1CA2]={d="l"}, + [0x1CA3]={d="l"}, + [0x1CA4]={d="l"}, + [0x1CA5]={d="l"}, + [0x1CA6]={d="l"}, + [0x1CA7]={d="l"}, + [0x1CA8]={d="l"}, + [0x1CA9]={d="l"}, + [0x1CAA]={d="l"}, + [0x1CAB]={d="l"}, + [0x1CAC]={d="l"}, + [0x1CAD]={d="l"}, + [0x1CAE]={d="l"}, + [0x1CAF]={d="l"}, + [0x1CB0]={d="l"}, + [0x1CB1]={d="l"}, + [0x1CB2]={d="l"}, + [0x1CB3]={d="l"}, + [0x1CB4]={d="l"}, + [0x1CB5]={d="l"}, + [0x1CB6]={d="l"}, + [0x1CB7]={d="l"}, + [0x1CB8]={d="l"}, + [0x1CB9]={d="l"}, + [0x1CBA]={d="l"}, + [0x1CBD]={d="l"}, + [0x1CBE]={d="l"}, + [0x1CBF]={d="l"}, + [0x1CC0]={d="l"}, + [0x1CC1]={d="l"}, + [0x1CC2]={d="l"}, + [0x1CC3]={d="l"}, + [0x1CC4]={d="l"}, + [0x1CC5]={d="l"}, + [0x1CC6]={d="l"}, + [0x1CC7]={d="l"}, + [0x1CD0]={d="nsm"}, + [0x1CD1]={d="nsm"}, + [0x1CD2]={d="nsm"}, + [0x1CD3]={d="l"}, + [0x1CD4]={d="nsm"}, + [0x1CD5]={d="nsm"}, + [0x1CD6]={d="nsm"}, + [0x1CD7]={d="nsm"}, + [0x1CD8]={d="nsm"}, + [0x1CD9]={d="nsm"}, + [0x1CDA]={d="nsm"}, + [0x1CDB]={d="nsm"}, + [0x1CDC]={d="nsm"}, + [0x1CDD]={d="nsm"}, + [0x1CDE]={d="nsm"}, + [0x1CDF]={d="nsm"}, + [0x1CE0]={d="nsm"}, + [0x1CE1]={d="l"}, + [0x1CE2]={d="nsm"}, + [0x1CE3]={d="nsm"}, + [0x1CE4]={d="nsm"}, + [0x1CE5]={d="nsm"}, + [0x1CE6]={d="nsm"}, + [0x1CE7]={d="nsm"}, + [0x1CE8]={d="nsm"}, + [0x1CE9]={d="l"}, + [0x1CEA]={d="l"}, + [0x1CEB]={d="l"}, + [0x1CEC]={d="l"}, + [0x1CED]={d="nsm"}, + [0x1CEE]={d="l"}, + [0x1CEF]={d="l"}, + [0x1CF0]={d="l"}, + [0x1CF1]={d="l"}, + [0x1CF2]={d="l"}, + [0x1CF3]={d="l"}, + [0x1CF4]={d="nsm"}, + [0x1CF5]={d="l"}, + [0x1CF6]={d="l"}, + [0x1CF7]={d="l"}, + [0x1CF8]={d="nsm"}, + [0x1CF9]={d="nsm"}, + [0x1CFA]={d="l"}, + [0x1D00]={d="l"}, + [0x1D01]={d="l"}, + [0x1D02]={d="l"}, + [0x1D03]={d="l"}, + [0x1D04]={d="l"}, + [0x1D05]={d="l"}, + [0x1D06]={d="l"}, + [0x1D07]={d="l"}, + [0x1D08]={d="l"}, + [0x1D09]={d="l"}, + [0x1D0A]={d="l"}, + [0x1D0B]={d="l"}, + [0x1D0C]={d="l"}, + [0x1D0D]={d="l"}, + [0x1D0E]={d="l"}, + [0x1D0F]={d="l"}, + [0x1D10]={d="l"}, + [0x1D11]={d="l"}, + [0x1D12]={d="l"}, + [0x1D13]={d="l"}, + [0x1D14]={d="l"}, + [0x1D15]={d="l"}, + [0x1D16]={d="l"}, + [0x1D17]={d="l"}, + [0x1D18]={d="l"}, + [0x1D19]={d="l"}, + [0x1D1A]={d="l"}, + [0x1D1B]={d="l"}, + [0x1D1C]={d="l"}, + [0x1D1D]={d="l"}, + [0x1D1E]={d="l"}, + [0x1D1F]={d="l"}, + [0x1D20]={d="l"}, + [0x1D21]={d="l"}, + [0x1D22]={d="l"}, + [0x1D23]={d="l"}, + [0x1D24]={d="l"}, + [0x1D25]={d="l"}, + [0x1D26]={d="l"}, + [0x1D27]={d="l"}, + [0x1D28]={d="l"}, + [0x1D29]={d="l"}, + [0x1D2A]={d="l"}, + [0x1D2B]={d="l"}, + [0x1D2C]={d="l"}, + [0x1D2D]={d="l"}, + [0x1D2E]={d="l"}, + [0x1D2F]={d="l"}, + [0x1D30]={d="l"}, + [0x1D31]={d="l"}, + [0x1D32]={d="l"}, + [0x1D33]={d="l"}, + [0x1D34]={d="l"}, + [0x1D35]={d="l"}, + [0x1D36]={d="l"}, + [0x1D37]={d="l"}, + [0x1D38]={d="l"}, + [0x1D39]={d="l"}, + [0x1D3A]={d="l"}, + [0x1D3B]={d="l"}, + [0x1D3C]={d="l"}, + [0x1D3D]={d="l"}, + [0x1D3E]={d="l"}, + [0x1D3F]={d="l"}, + [0x1D40]={d="l"}, + [0x1D41]={d="l"}, + [0x1D42]={d="l"}, + [0x1D43]={d="l"}, + [0x1D44]={d="l"}, + [0x1D45]={d="l"}, + [0x1D46]={d="l"}, + [0x1D47]={d="l"}, + [0x1D48]={d="l"}, + [0x1D49]={d="l"}, + [0x1D4A]={d="l"}, + [0x1D4B]={d="l"}, + [0x1D4C]={d="l"}, + [0x1D4D]={d="l"}, + [0x1D4E]={d="l"}, + [0x1D4F]={d="l"}, + [0x1D50]={d="l"}, + [0x1D51]={d="l"}, + [0x1D52]={d="l"}, + [0x1D53]={d="l"}, + [0x1D54]={d="l"}, + [0x1D55]={d="l"}, + [0x1D56]={d="l"}, + [0x1D57]={d="l"}, + [0x1D58]={d="l"}, + [0x1D59]={d="l"}, + [0x1D5A]={d="l"}, + [0x1D5B]={d="l"}, + [0x1D5C]={d="l"}, + [0x1D5D]={d="l"}, + [0x1D5E]={d="l"}, + [0x1D5F]={d="l"}, + [0x1D60]={d="l"}, + [0x1D61]={d="l"}, + [0x1D62]={d="l"}, + [0x1D63]={d="l"}, + [0x1D64]={d="l"}, + [0x1D65]={d="l"}, + [0x1D66]={d="l"}, + [0x1D67]={d="l"}, + [0x1D68]={d="l"}, + [0x1D69]={d="l"}, + [0x1D6A]={d="l"}, + [0x1D6B]={d="l"}, + [0x1D6C]={d="l"}, + [0x1D6D]={d="l"}, + [0x1D6E]={d="l"}, + [0x1D6F]={d="l"}, + [0x1D70]={d="l"}, + [0x1D71]={d="l"}, + [0x1D72]={d="l"}, + [0x1D73]={d="l"}, + [0x1D74]={d="l"}, + [0x1D75]={d="l"}, + [0x1D76]={d="l"}, + [0x1D77]={d="l"}, + [0x1D78]={d="l"}, + [0x1D79]={d="l"}, + [0x1D7A]={d="l"}, + [0x1D7B]={d="l"}, + [0x1D7C]={d="l"}, + [0x1D7D]={d="l"}, + [0x1D7E]={d="l"}, + [0x1D7F]={d="l"}, + [0x1D80]={d="l"}, + [0x1D81]={d="l"}, + [0x1D82]={d="l"}, + [0x1D83]={d="l"}, + [0x1D84]={d="l"}, + [0x1D85]={d="l"}, + [0x1D86]={d="l"}, + [0x1D87]={d="l"}, + [0x1D88]={d="l"}, + [0x1D89]={d="l"}, + [0x1D8A]={d="l"}, + [0x1D8B]={d="l"}, + [0x1D8C]={d="l"}, + [0x1D8D]={d="l"}, + [0x1D8E]={d="l"}, + [0x1D8F]={d="l"}, + [0x1D90]={d="l"}, + [0x1D91]={d="l"}, + [0x1D92]={d="l"}, + [0x1D93]={d="l"}, + [0x1D94]={d="l"}, + [0x1D95]={d="l"}, + [0x1D96]={d="l"}, + [0x1D97]={d="l"}, + [0x1D98]={d="l"}, + [0x1D99]={d="l"}, + [0x1D9A]={d="l"}, + [0x1D9B]={d="l"}, + [0x1D9C]={d="l"}, + [0x1D9D]={d="l"}, + [0x1D9E]={d="l"}, + [0x1D9F]={d="l"}, + [0x1DA0]={d="l"}, + [0x1DA1]={d="l"}, + [0x1DA2]={d="l"}, + [0x1DA3]={d="l"}, + [0x1DA4]={d="l"}, + [0x1DA5]={d="l"}, + [0x1DA6]={d="l"}, + [0x1DA7]={d="l"}, + [0x1DA8]={d="l"}, + [0x1DA9]={d="l"}, + [0x1DAA]={d="l"}, + [0x1DAB]={d="l"}, + [0x1DAC]={d="l"}, + [0x1DAD]={d="l"}, + [0x1DAE]={d="l"}, + [0x1DAF]={d="l"}, + [0x1DB0]={d="l"}, + [0x1DB1]={d="l"}, + [0x1DB2]={d="l"}, + [0x1DB3]={d="l"}, + [0x1DB4]={d="l"}, + [0x1DB5]={d="l"}, + [0x1DB6]={d="l"}, + [0x1DB7]={d="l"}, + [0x1DB8]={d="l"}, + [0x1DB9]={d="l"}, + [0x1DBA]={d="l"}, + [0x1DBB]={d="l"}, + [0x1DBC]={d="l"}, + [0x1DBD]={d="l"}, + [0x1DBE]={d="l"}, + [0x1DBF]={d="l"}, + [0x1DC0]={d="nsm"}, + [0x1DC1]={d="nsm"}, + [0x1DC2]={d="nsm"}, + [0x1DC3]={d="nsm"}, + [0x1DC4]={d="nsm"}, + [0x1DC5]={d="nsm"}, + [0x1DC6]={d="nsm"}, + [0x1DC7]={d="nsm"}, + [0x1DC8]={d="nsm"}, + [0x1DC9]={d="nsm"}, + [0x1DCA]={d="nsm"}, + [0x1DCB]={d="nsm"}, + [0x1DCC]={d="nsm"}, + [0x1DCD]={d="nsm"}, + [0x1DCE]={d="nsm"}, + [0x1DCF]={d="nsm"}, + [0x1DD0]={d="nsm"}, + [0x1DD1]={d="nsm"}, + [0x1DD2]={d="nsm"}, + [0x1DD3]={d="nsm"}, + [0x1DD4]={d="nsm"}, + [0x1DD5]={d="nsm"}, + [0x1DD6]={d="nsm"}, + [0x1DD7]={d="nsm"}, + [0x1DD8]={d="nsm"}, + [0x1DD9]={d="nsm"}, + [0x1DDA]={d="nsm"}, + [0x1DDB]={d="nsm"}, + [0x1DDC]={d="nsm"}, + [0x1DDD]={d="nsm"}, + [0x1DDE]={d="nsm"}, + [0x1DDF]={d="nsm"}, + [0x1DE0]={d="nsm"}, + [0x1DE1]={d="nsm"}, + [0x1DE2]={d="nsm"}, + [0x1DE3]={d="nsm"}, + [0x1DE4]={d="nsm"}, + [0x1DE5]={d="nsm"}, + [0x1DE6]={d="nsm"}, + [0x1DE7]={d="nsm"}, + [0x1DE8]={d="nsm"}, + [0x1DE9]={d="nsm"}, + [0x1DEA]={d="nsm"}, + [0x1DEB]={d="nsm"}, + [0x1DEC]={d="nsm"}, + [0x1DED]={d="nsm"}, + [0x1DEE]={d="nsm"}, + [0x1DEF]={d="nsm"}, + [0x1DF0]={d="nsm"}, + [0x1DF1]={d="nsm"}, + [0x1DF2]={d="nsm"}, + [0x1DF3]={d="nsm"}, + [0x1DF4]={d="nsm"}, + [0x1DF5]={d="nsm"}, + [0x1DF6]={d="nsm"}, + [0x1DF7]={d="nsm"}, + [0x1DF8]={d="nsm"}, + [0x1DF9]={d="nsm"}, + [0x1DFA]={d="nsm"}, + [0x1DFB]={d="nsm"}, + [0x1DFC]={d="nsm"}, + [0x1DFD]={d="nsm"}, + [0x1DFE]={d="nsm"}, + [0x1DFF]={d="nsm"}, + [0x1E00]={d="l"}, + [0x1E01]={d="l"}, + [0x1E02]={d="l"}, + [0x1E03]={d="l"}, + [0x1E04]={d="l"}, + [0x1E05]={d="l"}, + [0x1E06]={d="l"}, + [0x1E07]={d="l"}, + [0x1E08]={d="l"}, + [0x1E09]={d="l"}, + [0x1E0A]={d="l"}, + [0x1E0B]={d="l"}, + [0x1E0C]={d="l"}, + [0x1E0D]={d="l"}, + [0x1E0E]={d="l"}, + [0x1E0F]={d="l"}, + [0x1E10]={d="l"}, + [0x1E11]={d="l"}, + [0x1E12]={d="l"}, + [0x1E13]={d="l"}, + [0x1E14]={d="l"}, + [0x1E15]={d="l"}, + [0x1E16]={d="l"}, + [0x1E17]={d="l"}, + [0x1E18]={d="l"}, + [0x1E19]={d="l"}, + [0x1E1A]={d="l"}, + [0x1E1B]={d="l"}, + [0x1E1C]={d="l"}, + [0x1E1D]={d="l"}, + [0x1E1E]={d="l"}, + [0x1E1F]={d="l"}, + [0x1E20]={d="l"}, + [0x1E21]={d="l"}, + [0x1E22]={d="l"}, + [0x1E23]={d="l"}, + [0x1E24]={d="l"}, + [0x1E25]={d="l"}, + [0x1E26]={d="l"}, + [0x1E27]={d="l"}, + [0x1E28]={d="l"}, + [0x1E29]={d="l"}, + [0x1E2A]={d="l"}, + [0x1E2B]={d="l"}, + [0x1E2C]={d="l"}, + [0x1E2D]={d="l"}, + [0x1E2E]={d="l"}, + [0x1E2F]={d="l"}, + [0x1E30]={d="l"}, + [0x1E31]={d="l"}, + [0x1E32]={d="l"}, + [0x1E33]={d="l"}, + [0x1E34]={d="l"}, + [0x1E35]={d="l"}, + [0x1E36]={d="l"}, + [0x1E37]={d="l"}, + [0x1E38]={d="l"}, + [0x1E39]={d="l"}, + [0x1E3A]={d="l"}, + [0x1E3B]={d="l"}, + [0x1E3C]={d="l"}, + [0x1E3D]={d="l"}, + [0x1E3E]={d="l"}, + [0x1E3F]={d="l"}, + [0x1E40]={d="l"}, + [0x1E41]={d="l"}, + [0x1E42]={d="l"}, + [0x1E43]={d="l"}, + [0x1E44]={d="l"}, + [0x1E45]={d="l"}, + [0x1E46]={d="l"}, + [0x1E47]={d="l"}, + [0x1E48]={d="l"}, + [0x1E49]={d="l"}, + [0x1E4A]={d="l"}, + [0x1E4B]={d="l"}, + [0x1E4C]={d="l"}, + [0x1E4D]={d="l"}, + [0x1E4E]={d="l"}, + [0x1E4F]={d="l"}, + [0x1E50]={d="l"}, + [0x1E51]={d="l"}, + [0x1E52]={d="l"}, + [0x1E53]={d="l"}, + [0x1E54]={d="l"}, + [0x1E55]={d="l"}, + [0x1E56]={d="l"}, + [0x1E57]={d="l"}, + [0x1E58]={d="l"}, + [0x1E59]={d="l"}, + [0x1E5A]={d="l"}, + [0x1E5B]={d="l"}, + [0x1E5C]={d="l"}, + [0x1E5D]={d="l"}, + [0x1E5E]={d="l"}, + [0x1E5F]={d="l"}, + [0x1E60]={d="l"}, + [0x1E61]={d="l"}, + [0x1E62]={d="l"}, + [0x1E63]={d="l"}, + [0x1E64]={d="l"}, + [0x1E65]={d="l"}, + [0x1E66]={d="l"}, + [0x1E67]={d="l"}, + [0x1E68]={d="l"}, + [0x1E69]={d="l"}, + [0x1E6A]={d="l"}, + [0x1E6B]={d="l"}, + [0x1E6C]={d="l"}, + [0x1E6D]={d="l"}, + [0x1E6E]={d="l"}, + [0x1E6F]={d="l"}, + [0x1E70]={d="l"}, + [0x1E71]={d="l"}, + [0x1E72]={d="l"}, + [0x1E73]={d="l"}, + [0x1E74]={d="l"}, + [0x1E75]={d="l"}, + [0x1E76]={d="l"}, + [0x1E77]={d="l"}, + [0x1E78]={d="l"}, + [0x1E79]={d="l"}, + [0x1E7A]={d="l"}, + [0x1E7B]={d="l"}, + [0x1E7C]={d="l"}, + [0x1E7D]={d="l"}, + [0x1E7E]={d="l"}, + [0x1E7F]={d="l"}, + [0x1E80]={d="l"}, + [0x1E81]={d="l"}, + [0x1E82]={d="l"}, + [0x1E83]={d="l"}, + [0x1E84]={d="l"}, + [0x1E85]={d="l"}, + [0x1E86]={d="l"}, + [0x1E87]={d="l"}, + [0x1E88]={d="l"}, + [0x1E89]={d="l"}, + [0x1E8A]={d="l"}, + [0x1E8B]={d="l"}, + [0x1E8C]={d="l"}, + [0x1E8D]={d="l"}, + [0x1E8E]={d="l"}, + [0x1E8F]={d="l"}, + [0x1E90]={d="l"}, + [0x1E91]={d="l"}, + [0x1E92]={d="l"}, + [0x1E93]={d="l"}, + [0x1E94]={d="l"}, + [0x1E95]={d="l"}, + [0x1E96]={d="l"}, + [0x1E97]={d="l"}, + [0x1E98]={d="l"}, + [0x1E99]={d="l"}, + [0x1E9A]={d="l"}, + [0x1E9B]={d="l"}, + [0x1E9C]={d="l"}, + [0x1E9D]={d="l"}, + [0x1E9E]={d="l"}, + [0x1E9F]={d="l"}, + [0x1EA0]={d="l"}, + [0x1EA1]={d="l"}, + [0x1EA2]={d="l"}, + [0x1EA3]={d="l"}, + [0x1EA4]={d="l"}, + [0x1EA5]={d="l"}, + [0x1EA6]={d="l"}, + [0x1EA7]={d="l"}, + [0x1EA8]={d="l"}, + [0x1EA9]={d="l"}, + [0x1EAA]={d="l"}, + [0x1EAB]={d="l"}, + [0x1EAC]={d="l"}, + [0x1EAD]={d="l"}, + [0x1EAE]={d="l"}, + [0x1EAF]={d="l"}, + [0x1EB0]={d="l"}, + [0x1EB1]={d="l"}, + [0x1EB2]={d="l"}, + [0x1EB3]={d="l"}, + [0x1EB4]={d="l"}, + [0x1EB5]={d="l"}, + [0x1EB6]={d="l"}, + [0x1EB7]={d="l"}, + [0x1EB8]={d="l"}, + [0x1EB9]={d="l"}, + [0x1EBA]={d="l"}, + [0x1EBB]={d="l"}, + [0x1EBC]={d="l"}, + [0x1EBD]={d="l"}, + [0x1EBE]={d="l"}, + [0x1EBF]={d="l"}, + [0x1EC0]={d="l"}, + [0x1EC1]={d="l"}, + [0x1EC2]={d="l"}, + [0x1EC3]={d="l"}, + [0x1EC4]={d="l"}, + [0x1EC5]={d="l"}, + [0x1EC6]={d="l"}, + [0x1EC7]={d="l"}, + [0x1EC8]={d="l"}, + [0x1EC9]={d="l"}, + [0x1ECA]={d="l"}, + [0x1ECB]={d="l"}, + [0x1ECC]={d="l"}, + [0x1ECD]={d="l"}, + [0x1ECE]={d="l"}, + [0x1ECF]={d="l"}, + [0x1ED0]={d="l"}, + [0x1ED1]={d="l"}, + [0x1ED2]={d="l"}, + [0x1ED3]={d="l"}, + [0x1ED4]={d="l"}, + [0x1ED5]={d="l"}, + [0x1ED6]={d="l"}, + [0x1ED7]={d="l"}, + [0x1ED8]={d="l"}, + [0x1ED9]={d="l"}, + [0x1EDA]={d="l"}, + [0x1EDB]={d="l"}, + [0x1EDC]={d="l"}, + [0x1EDD]={d="l"}, + [0x1EDE]={d="l"}, + [0x1EDF]={d="l"}, + [0x1EE0]={d="l"}, + [0x1EE1]={d="l"}, + [0x1EE2]={d="l"}, + [0x1EE3]={d="l"}, + [0x1EE4]={d="l"}, + [0x1EE5]={d="l"}, + [0x1EE6]={d="l"}, + [0x1EE7]={d="l"}, + [0x1EE8]={d="l"}, + [0x1EE9]={d="l"}, + [0x1EEA]={d="l"}, + [0x1EEB]={d="l"}, + [0x1EEC]={d="l"}, + [0x1EED]={d="l"}, + [0x1EEE]={d="l"}, + [0x1EEF]={d="l"}, + [0x1EF0]={d="l"}, + [0x1EF1]={d="l"}, + [0x1EF2]={d="l"}, + [0x1EF3]={d="l"}, + [0x1EF4]={d="l"}, + [0x1EF5]={d="l"}, + [0x1EF6]={d="l"}, + [0x1EF7]={d="l"}, + [0x1EF8]={d="l"}, + [0x1EF9]={d="l"}, + [0x1EFA]={d="l"}, + [0x1EFB]={d="l"}, + [0x1EFC]={d="l"}, + [0x1EFD]={d="l"}, + [0x1EFE]={d="l"}, + [0x1EFF]={d="l"}, + [0x1F00]={d="l"}, + [0x1F01]={d="l"}, + [0x1F02]={d="l"}, + [0x1F03]={d="l"}, + [0x1F04]={d="l"}, + [0x1F05]={d="l"}, + [0x1F06]={d="l"}, + [0x1F07]={d="l"}, + [0x1F08]={d="l"}, + [0x1F09]={d="l"}, + [0x1F0A]={d="l"}, + [0x1F0B]={d="l"}, + [0x1F0C]={d="l"}, + [0x1F0D]={d="l"}, + [0x1F0E]={d="l"}, + [0x1F0F]={d="l"}, + [0x1F10]={d="l"}, + [0x1F11]={d="l"}, + [0x1F12]={d="l"}, + [0x1F13]={d="l"}, + [0x1F14]={d="l"}, + [0x1F15]={d="l"}, + [0x1F18]={d="l"}, + [0x1F19]={d="l"}, + [0x1F1A]={d="l"}, + [0x1F1B]={d="l"}, + [0x1F1C]={d="l"}, + [0x1F1D]={d="l"}, + [0x1F20]={d="l"}, + [0x1F21]={d="l"}, + [0x1F22]={d="l"}, + [0x1F23]={d="l"}, + [0x1F24]={d="l"}, + [0x1F25]={d="l"}, + [0x1F26]={d="l"}, + [0x1F27]={d="l"}, + [0x1F28]={d="l"}, + [0x1F29]={d="l"}, + [0x1F2A]={d="l"}, + [0x1F2B]={d="l"}, + [0x1F2C]={d="l"}, + [0x1F2D]={d="l"}, + [0x1F2E]={d="l"}, + [0x1F2F]={d="l"}, + [0x1F30]={d="l"}, + [0x1F31]={d="l"}, + [0x1F32]={d="l"}, + [0x1F33]={d="l"}, + [0x1F34]={d="l"}, + [0x1F35]={d="l"}, + [0x1F36]={d="l"}, + [0x1F37]={d="l"}, + [0x1F38]={d="l"}, + [0x1F39]={d="l"}, + [0x1F3A]={d="l"}, + [0x1F3B]={d="l"}, + [0x1F3C]={d="l"}, + [0x1F3D]={d="l"}, + [0x1F3E]={d="l"}, + [0x1F3F]={d="l"}, + [0x1F40]={d="l"}, + [0x1F41]={d="l"}, + [0x1F42]={d="l"}, + [0x1F43]={d="l"}, + [0x1F44]={d="l"}, + [0x1F45]={d="l"}, + [0x1F48]={d="l"}, + [0x1F49]={d="l"}, + [0x1F4A]={d="l"}, + [0x1F4B]={d="l"}, + [0x1F4C]={d="l"}, + [0x1F4D]={d="l"}, + [0x1F50]={d="l"}, + [0x1F51]={d="l"}, + [0x1F52]={d="l"}, + [0x1F53]={d="l"}, + [0x1F54]={d="l"}, + [0x1F55]={d="l"}, + [0x1F56]={d="l"}, + [0x1F57]={d="l"}, + [0x1F59]={d="l"}, + [0x1F5B]={d="l"}, + [0x1F5D]={d="l"}, + [0x1F5F]={d="l"}, + [0x1F60]={d="l"}, + [0x1F61]={d="l"}, + [0x1F62]={d="l"}, + [0x1F63]={d="l"}, + [0x1F64]={d="l"}, + [0x1F65]={d="l"}, + [0x1F66]={d="l"}, + [0x1F67]={d="l"}, + [0x1F68]={d="l"}, + [0x1F69]={d="l"}, + [0x1F6A]={d="l"}, + [0x1F6B]={d="l"}, + [0x1F6C]={d="l"}, + [0x1F6D]={d="l"}, + [0x1F6E]={d="l"}, + [0x1F6F]={d="l"}, + [0x1F70]={d="l"}, + [0x1F71]={d="l"}, + [0x1F72]={d="l"}, + [0x1F73]={d="l"}, + [0x1F74]={d="l"}, + [0x1F75]={d="l"}, + [0x1F76]={d="l"}, + [0x1F77]={d="l"}, + [0x1F78]={d="l"}, + [0x1F79]={d="l"}, + [0x1F7A]={d="l"}, + [0x1F7B]={d="l"}, + [0x1F7C]={d="l"}, + [0x1F7D]={d="l"}, + [0x1F80]={d="l"}, + [0x1F81]={d="l"}, + [0x1F82]={d="l"}, + [0x1F83]={d="l"}, + [0x1F84]={d="l"}, + [0x1F85]={d="l"}, + [0x1F86]={d="l"}, + [0x1F87]={d="l"}, + [0x1F88]={d="l"}, + [0x1F89]={d="l"}, + [0x1F8A]={d="l"}, + [0x1F8B]={d="l"}, + [0x1F8C]={d="l"}, + [0x1F8D]={d="l"}, + [0x1F8E]={d="l"}, + [0x1F8F]={d="l"}, + [0x1F90]={d="l"}, + [0x1F91]={d="l"}, + [0x1F92]={d="l"}, + [0x1F93]={d="l"}, + [0x1F94]={d="l"}, + [0x1F95]={d="l"}, + [0x1F96]={d="l"}, + [0x1F97]={d="l"}, + [0x1F98]={d="l"}, + [0x1F99]={d="l"}, + [0x1F9A]={d="l"}, + [0x1F9B]={d="l"}, + [0x1F9C]={d="l"}, + [0x1F9D]={d="l"}, + [0x1F9E]={d="l"}, + [0x1F9F]={d="l"}, + [0x1FA0]={d="l"}, + [0x1FA1]={d="l"}, + [0x1FA2]={d="l"}, + [0x1FA3]={d="l"}, + [0x1FA4]={d="l"}, + [0x1FA5]={d="l"}, + [0x1FA6]={d="l"}, + [0x1FA7]={d="l"}, + [0x1FA8]={d="l"}, + [0x1FA9]={d="l"}, + [0x1FAA]={d="l"}, + [0x1FAB]={d="l"}, + [0x1FAC]={d="l"}, + [0x1FAD]={d="l"}, + [0x1FAE]={d="l"}, + [0x1FAF]={d="l"}, + [0x1FB0]={d="l"}, + [0x1FB1]={d="l"}, + [0x1FB2]={d="l"}, + [0x1FB3]={d="l"}, + [0x1FB4]={d="l"}, + [0x1FB6]={d="l"}, + [0x1FB7]={d="l"}, + [0x1FB8]={d="l"}, + [0x1FB9]={d="l"}, + [0x1FBA]={d="l"}, + [0x1FBB]={d="l"}, + [0x1FBC]={d="l"}, + [0x1FBD]={d="on"}, + [0x1FBE]={d="l"}, + [0x1FBF]={d="on"}, + [0x1FC0]={d="on"}, + [0x1FC1]={d="on"}, + [0x1FC2]={d="l"}, + [0x1FC3]={d="l"}, + [0x1FC4]={d="l"}, + [0x1FC6]={d="l"}, + [0x1FC7]={d="l"}, + [0x1FC8]={d="l"}, + [0x1FC9]={d="l"}, + [0x1FCA]={d="l"}, + [0x1FCB]={d="l"}, + [0x1FCC]={d="l"}, + [0x1FCD]={d="on"}, + [0x1FCE]={d="on"}, + [0x1FCF]={d="on"}, + [0x1FD0]={d="l"}, + [0x1FD1]={d="l"}, + [0x1FD2]={d="l"}, + [0x1FD3]={d="l"}, + [0x1FD6]={d="l"}, + [0x1FD7]={d="l"}, + [0x1FD8]={d="l"}, + [0x1FD9]={d="l"}, + [0x1FDA]={d="l"}, + [0x1FDB]={d="l"}, + [0x1FDD]={d="on"}, + [0x1FDE]={d="on"}, + [0x1FDF]={d="on"}, + [0x1FE0]={d="l"}, + [0x1FE1]={d="l"}, + [0x1FE2]={d="l"}, + [0x1FE3]={d="l"}, + [0x1FE4]={d="l"}, + [0x1FE5]={d="l"}, + [0x1FE6]={d="l"}, + [0x1FE7]={d="l"}, + [0x1FE8]={d="l"}, + [0x1FE9]={d="l"}, + [0x1FEA]={d="l"}, + [0x1FEB]={d="l"}, + [0x1FEC]={d="l"}, + [0x1FED]={d="on"}, + [0x1FEE]={d="on"}, + [0x1FEF]={d="on"}, + [0x1FF2]={d="l"}, + [0x1FF3]={d="l"}, + [0x1FF4]={d="l"}, + [0x1FF6]={d="l"}, + [0x1FF7]={d="l"}, + [0x1FF8]={d="l"}, + [0x1FF9]={d="l"}, + [0x1FFA]={d="l"}, + [0x1FFB]={d="l"}, + [0x1FFC]={d="l"}, + [0x1FFD]={d="on"}, + [0x1FFE]={d="on"}, + [0x2000]={d="ws"}, + [0x2001]={d="ws"}, + [0x2002]={d="ws"}, + [0x2003]={d="ws"}, + [0x2004]={d="ws"}, + [0x2005]={d="ws"}, + [0x2006]={d="ws"}, + [0x2007]={d="ws"}, + [0x2008]={d="ws"}, + [0x2009]={d="ws"}, + [0x200A]={d="ws"}, + [0x200B]={d="bn"}, + [0x200C]={d="bn"}, + [0x200D]={d="bn"}, + [0x200E]={d="l"}, + [0x200F]={d="r"}, + [0x2010]={d="on"}, + [0x2011]={d="on"}, + [0x2012]={d="on"}, + [0x2013]={d="on"}, + [0x2014]={d="on"}, + [0x2015]={d="on"}, + [0x2016]={d="on"}, + [0x2017]={d="on"}, + [0x2018]={d="on"}, + [0x2019]={d="on"}, + [0x201A]={d="on"}, + [0x201B]={d="on"}, + [0x201C]={d="on"}, + [0x201D]={d="on"}, + [0x201E]={d="on"}, + [0x201F]={d="on"}, + [0x2020]={d="on"}, + [0x2021]={d="on"}, + [0x2022]={d="on"}, + [0x2023]={d="on"}, + [0x2024]={d="on"}, + [0x2025]={d="on"}, + [0x2026]={d="on"}, + [0x2027]={d="on"}, + [0x2028]={d="ws"}, + [0x2029]={d="b"}, + [0x202A]={d="lre"}, + [0x202B]={d="rle"}, + [0x202C]={d="pdf"}, + [0x202D]={d="lro"}, + [0x202E]={d="rlo"}, + [0x202F]={d="cs"}, + [0x2030]={d="et"}, + [0x2031]={d="et"}, + [0x2032]={d="et"}, + [0x2033]={d="et"}, + [0x2034]={d="et"}, + [0x2035]={d="on"}, + [0x2036]={d="on"}, + [0x2037]={d="on"}, + [0x2038]={d="on"}, + [0x2039]={d="on", + m=0x203A, + tc="open"}, + [0x203A]={d="on", + m=0x2039, + tc="close"}, + [0x203B]={d="on"}, + [0x203C]={d="on"}, + [0x203D]={d="on"}, + [0x203E]={d="on"}, + [0x203F]={d="on"}, + [0x2040]={d="on"}, + [0x2041]={d="on"}, + [0x2042]={d="on"}, + [0x2043]={d="on"}, + [0x2044]={d="cs"}, + [0x2045]={d="on", + m=0x2046}, + [0x2046]={d="on", + m=0x2045}, + [0x2047]={d="on"}, + [0x2048]={d="on"}, + [0x2049]={d="on"}, + [0x204A]={d="on"}, + [0x204B]={d="on"}, + [0x204C]={d="on"}, + [0x204D]={d="on"}, + [0x204E]={d="on"}, + [0x204F]={d="on"}, + [0x2050]={d="on"}, + [0x2051]={d="on"}, + [0x2052]={d="on"}, + [0x2053]={d="on"}, + [0x2054]={d="on"}, + [0x2055]={d="on"}, + [0x2056]={d="on"}, + [0x2057]={d="on"}, + [0x2058]={d="on"}, + [0x2059]={d="on"}, + [0x205A]={d="on"}, + [0x205B]={d="on"}, + [0x205C]={d="on"}, + [0x205D]={d="on"}, + [0x205E]={d="on"}, + [0x205F]={d="ws"}, + [0x2060]={d="bn"}, + [0x2061]={d="bn"}, + [0x2062]={d="bn"}, + [0x2063]={d="bn"}, + [0x2064]={d="bn"}, + [0x2066]={d="lri"}, + [0x2067]={d="rli"}, + [0x2068]={d="fsi"}, + [0x2069]={d="pdi"}, + [0x206A]={d="bn"}, + [0x206B]={d="bn"}, + [0x206C]={d="bn"}, + [0x206D]={d="bn"}, + [0x206E]={d="bn"}, + [0x206F]={d="bn"}, + [0x2070]={d="en"}, + [0x2071]={d="l"}, + [0x2074]={d="en"}, + [0x2075]={d="en"}, + [0x2076]={d="en"}, + [0x2077]={d="en"}, + [0x2078]={d="en"}, + [0x2079]={d="en"}, + [0x207A]={d="es"}, + [0x207B]={d="es"}, + [0x207C]={d="on"}, + [0x207D]={d="on", + m=0x207E, + tc="open"}, + [0x207E]={d="on", + m=0x207D, + tc="close"}, + [0x207F]={d="l"}, + [0x2080]={d="en"}, + [0x2081]={d="en"}, + [0x2082]={d="en"}, + [0x2083]={d="en"}, + [0x2084]={d="en"}, + [0x2085]={d="en"}, + [0x2086]={d="en"}, + [0x2087]={d="en"}, + [0x2088]={d="en"}, + [0x2089]={d="en"}, + [0x208A]={d="es"}, + [0x208B]={d="es"}, + [0x208C]={d="on"}, + [0x208D]={d="on", + m=0x208E, + tc="open"}, + [0x208E]={d="on", + m=0x208D, + tc="close"}, + [0x2090]={d="l"}, + [0x2091]={d="l"}, + [0x2092]={d="l"}, + [0x2093]={d="l"}, + [0x2094]={d="l"}, + [0x2095]={d="l"}, + [0x2096]={d="l"}, + [0x2097]={d="l"}, + [0x2098]={d="l"}, + [0x2099]={d="l"}, + [0x209A]={d="l"}, + [0x209B]={d="l"}, + [0x209C]={d="l"}, + [0x20A0]={d="et"}, + [0x20A1]={d="et"}, + [0x20A2]={d="et"}, + [0x20A3]={d="et"}, + [0x20A4]={d="et"}, + [0x20A5]={d="et"}, + [0x20A6]={d="et"}, + [0x20A7]={d="et"}, + [0x20A8]={d="et"}, + [0x20A9]={d="et"}, + [0x20AA]={d="et"}, + [0x20AB]={d="et"}, + [0x20AC]={d="et"}, + [0x20AD]={d="et"}, + [0x20AE]={d="et"}, + [0x20AF]={d="et"}, + [0x20B0]={d="et"}, + [0x20B1]={d="et"}, + [0x20B2]={d="et"}, + [0x20B3]={d="et"}, + [0x20B4]={d="et"}, + [0x20B5]={d="et"}, + [0x20B6]={d="et"}, + [0x20B7]={d="et"}, + [0x20B8]={d="et"}, + [0x20B9]={d="et"}, + [0x20BA]={d="et"}, + [0x20BB]={d="et"}, + [0x20BC]={d="et"}, + [0x20BD]={d="et"}, + [0x20BE]={d="et"}, + [0x20BF]={d="et"}, + [0x20C0]={d="et"}, + [0x20D0]={d="nsm"}, + [0x20D1]={d="nsm"}, + [0x20D2]={d="nsm"}, + [0x20D3]={d="nsm"}, + [0x20D4]={d="nsm"}, + [0x20D5]={d="nsm"}, + [0x20D6]={d="nsm"}, + [0x20D7]={d="nsm"}, + [0x20D8]={d="nsm"}, + [0x20D9]={d="nsm"}, + [0x20DA]={d="nsm"}, + [0x20DB]={d="nsm"}, + [0x20DC]={d="nsm"}, + [0x20DD]={d="nsm"}, + [0x20DE]={d="nsm"}, + [0x20DF]={d="nsm"}, + [0x20E0]={d="nsm"}, + [0x20E1]={d="nsm"}, + [0x20E2]={d="nsm"}, + [0x20E3]={d="nsm"}, + [0x20E4]={d="nsm"}, + [0x20E5]={d="nsm"}, + [0x20E6]={d="nsm"}, + [0x20E7]={d="nsm"}, + [0x20E8]={d="nsm"}, + [0x20E9]={d="nsm"}, + [0x20EA]={d="nsm"}, + [0x20EB]={d="nsm"}, + [0x20EC]={d="nsm"}, + [0x20ED]={d="nsm"}, + [0x20EE]={d="nsm"}, + [0x20EF]={d="nsm"}, + [0x20F0]={d="nsm"}, + [0x2100]={d="on"}, + [0x2101]={d="on"}, + [0x2102]={d="l"}, + [0x2103]={d="on"}, + [0x2104]={d="on"}, + [0x2105]={d="on"}, + [0x2106]={d="on"}, + [0x2107]={d="l"}, + [0x2108]={d="on"}, + [0x2109]={d="on"}, + [0x210A]={d="l"}, + [0x210B]={d="l"}, + [0x210C]={d="l"}, + [0x210D]={d="l"}, + [0x210E]={d="l"}, + [0x210F]={d="l"}, + [0x2110]={d="l"}, + [0x2111]={d="l"}, + [0x2112]={d="l"}, + [0x2113]={d="l"}, + [0x2114]={d="on"}, + [0x2115]={d="l"}, + [0x2116]={d="on"}, + [0x2117]={d="on"}, + [0x2118]={d="on"}, + [0x2119]={d="l"}, + [0x211A]={d="l"}, + [0x211B]={d="l"}, + [0x211C]={d="l"}, + [0x211D]={d="l"}, + [0x211E]={d="on"}, + [0x211F]={d="on"}, + [0x2120]={d="on"}, + [0x2121]={d="on"}, + [0x2122]={d="on"}, + [0x2123]={d="on"}, + [0x2124]={d="l"}, + [0x2125]={d="on"}, + [0x2126]={d="l"}, + [0x2127]={d="on"}, + [0x2128]={d="l"}, + [0x2129]={d="on"}, + [0x212A]={d="l"}, + [0x212B]={d="l"}, + [0x212C]={d="l"}, + [0x212D]={d="l"}, + [0x212E]={d="et"}, + [0x212F]={d="l"}, + [0x2130]={d="l"}, + [0x2131]={d="l"}, + [0x2132]={d="l"}, + [0x2133]={d="l"}, + [0x2134]={d="l"}, + [0x2135]={d="l"}, + [0x2136]={d="l"}, + [0x2137]={d="l"}, + [0x2138]={d="l"}, + [0x2139]={d="l"}, + [0x213A]={d="on"}, + [0x213B]={d="on"}, + [0x213C]={d="l"}, + [0x213D]={d="l"}, + [0x213E]={d="l"}, + [0x213F]={d="l"}, + [0x2140]={d="on"}, + [0x2141]={d="on"}, + [0x2142]={d="on"}, + [0x2143]={d="on"}, + [0x2144]={d="on"}, + [0x2145]={d="l"}, + [0x2146]={d="l"}, + [0x2147]={d="l"}, + [0x2148]={d="l"}, + [0x2149]={d="l"}, + [0x214A]={d="on"}, + [0x214B]={d="on"}, + [0x214C]={d="on"}, + [0x214D]={d="on"}, + [0x214E]={d="l"}, + [0x214F]={d="l"}, + [0x2150]={d="on"}, + [0x2151]={d="on"}, + [0x2152]={d="on"}, + [0x2153]={d="on"}, + [0x2154]={d="on"}, + [0x2155]={d="on"}, + [0x2156]={d="on"}, + [0x2157]={d="on"}, + [0x2158]={d="on"}, + [0x2159]={d="on"}, + [0x215A]={d="on"}, + [0x215B]={d="on"}, + [0x215C]={d="on"}, + [0x215D]={d="on"}, + [0x215E]={d="on"}, + [0x215F]={d="on"}, + [0x2160]={d="l"}, + [0x2161]={d="l"}, + [0x2162]={d="l"}, + [0x2163]={d="l"}, + [0x2164]={d="l"}, + [0x2165]={d="l"}, + [0x2166]={d="l"}, + [0x2167]={d="l"}, + [0x2168]={d="l"}, + [0x2169]={d="l"}, + [0x216A]={d="l"}, + [0x216B]={d="l"}, + [0x216C]={d="l"}, + [0x216D]={d="l"}, + [0x216E]={d="l"}, + [0x216F]={d="l"}, + [0x2170]={d="l"}, + [0x2171]={d="l"}, + [0x2172]={d="l"}, + [0x2173]={d="l"}, + [0x2174]={d="l"}, + [0x2175]={d="l"}, + [0x2176]={d="l"}, + [0x2177]={d="l"}, + [0x2178]={d="l"}, + [0x2179]={d="l"}, + [0x217A]={d="l"}, + [0x217B]={d="l"}, + [0x217C]={d="l"}, + [0x217D]={d="l"}, + [0x217E]={d="l"}, + [0x217F]={d="l"}, + [0x2180]={d="l"}, + [0x2181]={d="l"}, + [0x2182]={d="l"}, + [0x2183]={d="l"}, + [0x2184]={d="l"}, + [0x2185]={d="l"}, + [0x2186]={d="l"}, + [0x2187]={d="l"}, + [0x2188]={d="l"}, + [0x2189]={d="on"}, + [0x218A]={d="on"}, + [0x218B]={d="on"}, + [0x2190]={d="on"}, + [0x2191]={d="on"}, + [0x2192]={d="on"}, + [0x2193]={d="on"}, + [0x2194]={d="on"}, + [0x2195]={d="on"}, + [0x2196]={d="on"}, + [0x2197]={d="on"}, + [0x2198]={d="on"}, + [0x2199]={d="on"}, + [0x219A]={d="on"}, + [0x219B]={d="on"}, + [0x219C]={d="on"}, + [0x219D]={d="on"}, + [0x219E]={d="on"}, + [0x219F]={d="on"}, + [0x21A0]={d="on"}, + [0x21A1]={d="on"}, + [0x21A2]={d="on"}, + [0x21A3]={d="on"}, + [0x21A4]={d="on"}, + [0x21A5]={d="on"}, + [0x21A6]={d="on"}, + [0x21A7]={d="on"}, + [0x21A8]={d="on"}, + [0x21A9]={d="on"}, + [0x21AA]={d="on"}, + [0x21AB]={d="on"}, + [0x21AC]={d="on"}, + [0x21AD]={d="on"}, + [0x21AE]={d="on"}, + [0x21AF]={d="on"}, + [0x21B0]={d="on"}, + [0x21B1]={d="on"}, + [0x21B2]={d="on"}, + [0x21B3]={d="on"}, + [0x21B4]={d="on"}, + [0x21B5]={d="on"}, + [0x21B6]={d="on"}, + [0x21B7]={d="on"}, + [0x21B8]={d="on"}, + [0x21B9]={d="on"}, + [0x21BA]={d="on"}, + [0x21BB]={d="on"}, + [0x21BC]={d="on"}, + [0x21BD]={d="on"}, + [0x21BE]={d="on"}, + [0x21BF]={d="on"}, + [0x21C0]={d="on"}, + [0x21C1]={d="on"}, + [0x21C2]={d="on"}, + [0x21C3]={d="on"}, + [0x21C4]={d="on"}, + [0x21C5]={d="on"}, + [0x21C6]={d="on"}, + [0x21C7]={d="on"}, + [0x21C8]={d="on"}, + [0x21C9]={d="on"}, + [0x21CA]={d="on"}, + [0x21CB]={d="on"}, + [0x21CC]={d="on"}, + [0x21CD]={d="on"}, + [0x21CE]={d="on"}, + [0x21CF]={d="on"}, + [0x21D0]={d="on"}, + [0x21D1]={d="on"}, + [0x21D2]={d="on"}, + [0x21D3]={d="on"}, + [0x21D4]={d="on"}, + [0x21D5]={d="on"}, + [0x21D6]={d="on"}, + [0x21D7]={d="on"}, + [0x21D8]={d="on"}, + [0x21D9]={d="on"}, + [0x21DA]={d="on"}, + [0x21DB]={d="on"}, + [0x21DC]={d="on"}, + [0x21DD]={d="on"}, + [0x21DE]={d="on"}, + [0x21DF]={d="on"}, + [0x21E0]={d="on"}, + [0x21E1]={d="on"}, + [0x21E2]={d="on"}, + [0x21E3]={d="on"}, + [0x21E4]={d="on"}, + [0x21E5]={d="on"}, + [0x21E6]={d="on"}, + [0x21E7]={d="on"}, + [0x21E8]={d="on"}, + [0x21E9]={d="on"}, + [0x21EA]={d="on"}, + [0x21EB]={d="on"}, + [0x21EC]={d="on"}, + [0x21ED]={d="on"}, + [0x21EE]={d="on"}, + [0x21EF]={d="on"}, + [0x21F0]={d="on"}, + [0x21F1]={d="on"}, + [0x21F2]={d="on"}, + [0x21F3]={d="on"}, + [0x21F4]={d="on"}, + [0x21F5]={d="on"}, + [0x21F6]={d="on"}, + [0x21F7]={d="on"}, + [0x21F8]={d="on"}, + [0x21F9]={d="on"}, + [0x21FA]={d="on"}, + [0x21FB]={d="on"}, + [0x21FC]={d="on"}, + [0x21FD]={d="on"}, + [0x21FE]={d="on"}, + [0x21FF]={d="on"}, + [0x2200]={d="on"}, + [0x2201]={d="on"}, + [0x2202]={d="on"}, + [0x2203]={d="on"}, + [0x2204]={d="on"}, + [0x2205]={d="on"}, + [0x2206]={d="on"}, + [0x2207]={d="on"}, + [0x2208]={d="on", + m=0x220B}, + [0x2209]={d="on", + m=0x220C}, + [0x220A]={d="on", + m=0x220D}, + [0x220B]={d="on", + m=0x2208}, + [0x220C]={d="on", + m=0x2209}, + [0x220D]={d="on", + m=0x220A}, + [0x220E]={d="on"}, + [0x220F]={d="on"}, + [0x2210]={d="on"}, + [0x2211]={d="on"}, + [0x2212]={d="es"}, + [0x2213]={d="et"}, + [0x2214]={d="on"}, + [0x2215]={d="on", + m=0x29F5}, + [0x2216]={d="on"}, + [0x2217]={d="on"}, + [0x2218]={d="on"}, + [0x2219]={d="on"}, + [0x221A]={d="on"}, + [0x221B]={d="on"}, + [0x221C]={d="on"}, + [0x221D]={d="on"}, + [0x221E]={d="on"}, + [0x221F]={d="on", + m=0x2BFE}, + [0x2220]={d="on", + m=0x29A3}, + [0x2221]={d="on", + m=0x299B}, + [0x2222]={d="on", + m=0x29A0}, + [0x2223]={d="on"}, + [0x2224]={d="on", + m=0x2AEE}, + [0x2225]={d="on"}, + [0x2226]={d="on"}, + [0x2227]={d="on"}, + [0x2228]={d="on"}, + [0x2229]={d="on"}, + [0x222A]={d="on"}, + [0x222B]={d="on"}, + [0x222C]={d="on"}, + [0x222D]={d="on"}, + [0x222E]={d="on"}, + [0x222F]={d="on"}, + [0x2230]={d="on"}, + [0x2231]={d="on"}, + [0x2232]={d="on"}, + [0x2233]={d="on"}, + [0x2234]={d="on"}, + [0x2235]={d="on"}, + [0x2236]={d="on"}, + [0x2237]={d="on"}, + [0x2238]={d="on"}, + [0x2239]={d="on"}, + [0x223A]={d="on"}, + [0x223B]={d="on"}, + [0x223C]={d="on", + m=0x223D}, + [0x223D]={d="on", + m=0x223C}, + [0x223E]={d="on"}, + [0x223F]={d="on"}, + [0x2240]={d="on"}, + [0x2241]={d="on"}, + [0x2242]={d="on"}, + [0x2243]={d="on", + m=0x22CD}, + [0x2244]={d="on"}, + [0x2245]={d="on", + m=0x224C}, + [0x2246]={d="on"}, + [0x2247]={d="on"}, + [0x2248]={d="on"}, + [0x2249]={d="on"}, + [0x224A]={d="on"}, + [0x224B]={d="on"}, + [0x224C]={d="on", + m=0x2245}, + [0x224D]={d="on"}, + [0x224E]={d="on"}, + [0x224F]={d="on"}, + [0x2250]={d="on"}, + [0x2251]={d="on"}, + [0x2252]={d="on", + m=0x2253}, + [0x2253]={d="on", + m=0x2252}, + [0x2254]={d="on", + m=0x2255}, + [0x2255]={d="on", + m=0x2254}, + [0x2256]={d="on"}, + [0x2257]={d="on"}, + [0x2258]={d="on"}, + [0x2259]={d="on"}, + [0x225A]={d="on"}, + [0x225B]={d="on"}, + [0x225C]={d="on"}, + [0x225D]={d="on"}, + [0x225E]={d="on"}, + [0x225F]={d="on"}, + [0x2260]={d="on"}, + [0x2261]={d="on"}, + [0x2262]={d="on"}, + [0x2263]={d="on"}, + [0x2264]={d="on", + m=0x2265}, + [0x2265]={d="on", + m=0x2264}, + [0x2266]={d="on", + m=0x2267}, + [0x2267]={d="on", + m=0x2266}, + [0x2268]={d="on", + m=0x2269}, + [0x2269]={d="on", + m=0x2268}, + [0x226A]={d="on", + m=0x226B}, + [0x226B]={d="on", + m=0x226A}, + [0x226C]={d="on"}, + [0x226D]={d="on"}, + [0x226E]={d="on", + m=0x226F}, + [0x226F]={d="on", + m=0x226E}, + [0x2270]={d="on", + m=0x2271}, + [0x2271]={d="on", + m=0x2270}, + [0x2272]={d="on", + m=0x2273}, + [0x2273]={d="on", + m=0x2272}, + [0x2274]={d="on", + m=0x2275}, + [0x2275]={d="on", + m=0x2274}, + [0x2276]={d="on", + m=0x2277}, + [0x2277]={d="on", + m=0x2276}, + [0x2278]={d="on", + m=0x2279}, + [0x2279]={d="on", + m=0x2278}, + [0x227A]={d="on", + m=0x227B}, + [0x227B]={d="on", + m=0x227A}, + [0x227C]={d="on", + m=0x227D}, + [0x227D]={d="on", + m=0x227C}, + [0x227E]={d="on", + m=0x227F}, + [0x227F]={d="on", + m=0x227E}, + [0x2280]={d="on", + m=0x2281}, + [0x2281]={d="on", + m=0x2280}, + [0x2282]={d="on", + m=0x2283}, + [0x2283]={d="on", + m=0x2282}, + [0x2284]={d="on", + m=0x2285}, + [0x2285]={d="on", + m=0x2284}, + [0x2286]={d="on", + m=0x2287}, + [0x2287]={d="on", + m=0x2286}, + [0x2288]={d="on", + m=0x2289}, + [0x2289]={d="on", + m=0x2288}, + [0x228A]={d="on", + m=0x228B}, + [0x228B]={d="on", + m=0x228A}, + [0x228C]={d="on"}, + [0x228D]={d="on"}, + [0x228E]={d="on"}, + [0x228F]={d="on", + m=0x2290}, + [0x2290]={d="on", + m=0x228F}, + [0x2291]={d="on", + m=0x2292}, + [0x2292]={d="on", + m=0x2291}, + [0x2293]={d="on"}, + [0x2294]={d="on"}, + [0x2295]={d="on"}, + [0x2296]={d="on"}, + [0x2297]={d="on"}, + [0x2298]={d="on", + m=0x29B8}, + [0x2299]={d="on"}, + [0x229A]={d="on"}, + [0x229B]={d="on"}, + [0x229C]={d="on"}, + [0x229D]={d="on"}, + [0x229E]={d="on"}, + [0x229F]={d="on"}, + [0x22A0]={d="on"}, + [0x22A1]={d="on"}, + [0x22A2]={d="on", + m=0x22A3}, + [0x22A3]={d="on", + m=0x22A2}, + [0x22A4]={d="on"}, + [0x22A5]={d="on"}, + [0x22A6]={d="on", + m=0x2ADE}, + [0x22A7]={d="on"}, + [0x22A8]={d="on", + m=0x2AE4}, + [0x22A9]={d="on", + m=0x2AE3}, + [0x22AA]={d="on"}, + [0x22AB]={d="on", + m=0x2AE5}, + [0x22AC]={d="on"}, + [0x22AD]={d="on"}, + [0x22AE]={d="on"}, + [0x22AF]={d="on"}, + [0x22B0]={d="on", + m=0x22B1}, + [0x22B1]={d="on", + m=0x22B0}, + [0x22B2]={d="on", + m=0x22B3}, + [0x22B3]={d="on", + m=0x22B2}, + [0x22B4]={d="on", + m=0x22B5}, + [0x22B5]={d="on", + m=0x22B4}, + [0x22B6]={d="on", + m=0x22B7}, + [0x22B7]={d="on", + m=0x22B6}, + [0x22B8]={d="on", + m=0x27DC}, + [0x22B9]={d="on"}, + [0x22BA]={d="on"}, + [0x22BB]={d="on"}, + [0x22BC]={d="on"}, + [0x22BD]={d="on"}, + [0x22BE]={d="on"}, + [0x22BF]={d="on"}, + [0x22C0]={d="on"}, + [0x22C1]={d="on"}, + [0x22C2]={d="on"}, + [0x22C3]={d="on"}, + [0x22C4]={d="on"}, + [0x22C5]={d="on"}, + [0x22C6]={d="on"}, + [0x22C7]={d="on"}, + [0x22C8]={d="on"}, + [0x22C9]={d="on", + m=0x22CA}, + [0x22CA]={d="on", + m=0x22C9}, + [0x22CB]={d="on", + m=0x22CC}, + [0x22CC]={d="on", + m=0x22CB}, + [0x22CD]={d="on", + m=0x2243}, + [0x22CE]={d="on"}, + [0x22CF]={d="on"}, + [0x22D0]={d="on", + m=0x22D1}, + [0x22D1]={d="on", + m=0x22D0}, + [0x22D2]={d="on"}, + [0x22D3]={d="on"}, + [0x22D4]={d="on"}, + [0x22D5]={d="on"}, + [0x22D6]={d="on", + m=0x22D7}, + [0x22D7]={d="on", + m=0x22D6}, + [0x22D8]={d="on", + m=0x22D9}, + [0x22D9]={d="on", + m=0x22D8}, + [0x22DA]={d="on", + m=0x22DB}, + [0x22DB]={d="on", + m=0x22DA}, + [0x22DC]={d="on", + m=0x22DD}, + [0x22DD]={d="on", + m=0x22DC}, + [0x22DE]={d="on", + m=0x22DF}, + [0x22DF]={d="on", + m=0x22DE}, + [0x22E0]={d="on", + m=0x22E1}, + [0x22E1]={d="on", + m=0x22E0}, + [0x22E2]={d="on", + m=0x22E3}, + [0x22E3]={d="on", + m=0x22E2}, + [0x22E4]={d="on", + m=0x22E5}, + [0x22E5]={d="on", + m=0x22E4}, + [0x22E6]={d="on", + m=0x22E7}, + [0x22E7]={d="on", + m=0x22E6}, + [0x22E8]={d="on", + m=0x22E9}, + [0x22E9]={d="on", + m=0x22E8}, + [0x22EA]={d="on", + m=0x22EB}, + [0x22EB]={d="on", + m=0x22EA}, + [0x22EC]={d="on", + m=0x22ED}, + [0x22ED]={d="on", + m=0x22EC}, + [0x22EE]={d="on"}, + [0x22EF]={d="on"}, + [0x22F0]={d="on", + m=0x22F1}, + [0x22F1]={d="on", + m=0x22F0}, + [0x22F2]={d="on", + m=0x22FA}, + [0x22F3]={d="on", + m=0x22FB}, + [0x22F4]={d="on", + m=0x22FC}, + [0x22F5]={d="on"}, + [0x22F6]={d="on", + m=0x22FD}, + [0x22F7]={d="on", + m=0x22FE}, + [0x22F8]={d="on"}, + [0x22F9]={d="on"}, + [0x22FA]={d="on", + m=0x22F2}, + [0x22FB]={d="on", + m=0x22F3}, + [0x22FC]={d="on", + m=0x22F4}, + [0x22FD]={d="on", + m=0x22F6}, + [0x22FE]={d="on", + m=0x22F7}, + [0x22FF]={d="on"}, + [0x2300]={d="on"}, + [0x2301]={d="on"}, + [0x2302]={d="on"}, + [0x2303]={d="on"}, + [0x2304]={d="on"}, + [0x2305]={d="on"}, + [0x2306]={d="on"}, + [0x2307]={d="on"}, + [0x2308]={d="on", + m=0x2309}, + [0x2309]={d="on", + m=0x2308}, + [0x230A]={d="on", + m=0x230B}, + [0x230B]={d="on", + m=0x230A}, + [0x230C]={d="on"}, + [0x230D]={d="on"}, + [0x230E]={d="on"}, + [0x230F]={d="on"}, + [0x2310]={d="on"}, + [0x2311]={d="on"}, + [0x2312]={d="on"}, + [0x2313]={d="on"}, + [0x2314]={d="on"}, + [0x2315]={d="on"}, + [0x2316]={d="on"}, + [0x2317]={d="on"}, + [0x2318]={d="on"}, + [0x2319]={d="on"}, + [0x231A]={d="on"}, + [0x231B]={d="on"}, + [0x231C]={d="on"}, + [0x231D]={d="on"}, + [0x231E]={d="on"}, + [0x231F]={d="on"}, + [0x2320]={d="on"}, + [0x2321]={d="on"}, + [0x2322]={d="on"}, + [0x2323]={d="on"}, + [0x2324]={d="on"}, + [0x2325]={d="on"}, + [0x2326]={d="on"}, + [0x2327]={d="on"}, + [0x2328]={d="on"}, + [0x2329]={d="on", + m=0x232A}, + [0x232A]={d="on", + m=0x2329}, + [0x232B]={d="on"}, + [0x232C]={d="on"}, + [0x232D]={d="on"}, + [0x232E]={d="on"}, + [0x232F]={d="on"}, + [0x2330]={d="on"}, + [0x2331]={d="on"}, + [0x2332]={d="on"}, + [0x2333]={d="on"}, + [0x2334]={d="on"}, + [0x2335]={d="on"}, + [0x2336]={d="l"}, + [0x2337]={d="l"}, + [0x2338]={d="l"}, + [0x2339]={d="l"}, + [0x233A]={d="l"}, + [0x233B]={d="l"}, + [0x233C]={d="l"}, + [0x233D]={d="l"}, + [0x233E]={d="l"}, + [0x233F]={d="l"}, + [0x2340]={d="l"}, + [0x2341]={d="l"}, + [0x2342]={d="l"}, + [0x2343]={d="l"}, + [0x2344]={d="l"}, + [0x2345]={d="l"}, + [0x2346]={d="l"}, + [0x2347]={d="l"}, + [0x2348]={d="l"}, + [0x2349]={d="l"}, + [0x234A]={d="l"}, + [0x234B]={d="l"}, + [0x234C]={d="l"}, + [0x234D]={d="l"}, + [0x234E]={d="l"}, + [0x234F]={d="l"}, + [0x2350]={d="l"}, + [0x2351]={d="l"}, + [0x2352]={d="l"}, + [0x2353]={d="l"}, + [0x2354]={d="l"}, + [0x2355]={d="l"}, + [0x2356]={d="l"}, + [0x2357]={d="l"}, + [0x2358]={d="l"}, + [0x2359]={d="l"}, + [0x235A]={d="l"}, + [0x235B]={d="l"}, + [0x235C]={d="l"}, + [0x235D]={d="l"}, + [0x235E]={d="l"}, + [0x235F]={d="l"}, + [0x2360]={d="l"}, + [0x2361]={d="l"}, + [0x2362]={d="l"}, + [0x2363]={d="l"}, + [0x2364]={d="l"}, + [0x2365]={d="l"}, + [0x2366]={d="l"}, + [0x2367]={d="l"}, + [0x2368]={d="l"}, + [0x2369]={d="l"}, + [0x236A]={d="l"}, + [0x236B]={d="l"}, + [0x236C]={d="l"}, + [0x236D]={d="l"}, + [0x236E]={d="l"}, + [0x236F]={d="l"}, + [0x2370]={d="l"}, + [0x2371]={d="l"}, + [0x2372]={d="l"}, + [0x2373]={d="l"}, + [0x2374]={d="l"}, + [0x2375]={d="l"}, + [0x2376]={d="l"}, + [0x2377]={d="l"}, + [0x2378]={d="l"}, + [0x2379]={d="l"}, + [0x237A]={d="l"}, + [0x237B]={d="on"}, + [0x237C]={d="on"}, + [0x237D]={d="on"}, + [0x237E]={d="on"}, + [0x237F]={d="on"}, + [0x2380]={d="on"}, + [0x2381]={d="on"}, + [0x2382]={d="on"}, + [0x2383]={d="on"}, + [0x2384]={d="on"}, + [0x2385]={d="on"}, + [0x2386]={d="on"}, + [0x2387]={d="on"}, + [0x2388]={d="on"}, + [0x2389]={d="on"}, + [0x238A]={d="on"}, + [0x238B]={d="on"}, + [0x238C]={d="on"}, + [0x238D]={d="on"}, + [0x238E]={d="on"}, + [0x238F]={d="on"}, + [0x2390]={d="on"}, + [0x2391]={d="on"}, + [0x2392]={d="on"}, + [0x2393]={d="on"}, + [0x2394]={d="on"}, + [0x2395]={d="l"}, + [0x2396]={d="on"}, + [0x2397]={d="on"}, + [0x2398]={d="on"}, + [0x2399]={d="on"}, + [0x239A]={d="on"}, + [0x239B]={d="on"}, + [0x239C]={d="on"}, + [0x239D]={d="on"}, + [0x239E]={d="on"}, + [0x239F]={d="on"}, + [0x23A0]={d="on"}, + [0x23A1]={d="on"}, + [0x23A2]={d="on"}, + [0x23A3]={d="on"}, + [0x23A4]={d="on"}, + [0x23A5]={d="on"}, + [0x23A6]={d="on"}, + [0x23A7]={d="on"}, + [0x23A8]={d="on"}, + [0x23A9]={d="on"}, + [0x23AA]={d="on"}, + [0x23AB]={d="on"}, + [0x23AC]={d="on"}, + [0x23AD]={d="on"}, + [0x23AE]={d="on"}, + [0x23AF]={d="on"}, + [0x23B0]={d="on"}, + [0x23B1]={d="on"}, + [0x23B2]={d="on"}, + [0x23B3]={d="on"}, + [0x23B4]={d="on"}, + [0x23B5]={d="on"}, + [0x23B6]={d="on"}, + [0x23B7]={d="on"}, + [0x23B8]={d="on"}, + [0x23B9]={d="on"}, + [0x23BA]={d="on"}, + [0x23BB]={d="on"}, + [0x23BC]={d="on"}, + [0x23BD]={d="on"}, + [0x23BE]={d="on"}, + [0x23BF]={d="on"}, + [0x23C0]={d="on"}, + [0x23C1]={d="on"}, + [0x23C2]={d="on"}, + [0x23C3]={d="on"}, + [0x23C4]={d="on"}, + [0x23C5]={d="on"}, + [0x23C6]={d="on"}, + [0x23C7]={d="on"}, + [0x23C8]={d="on"}, + [0x23C9]={d="on"}, + [0x23CA]={d="on"}, + [0x23CB]={d="on"}, + [0x23CC]={d="on"}, + [0x23CD]={d="on"}, + [0x23CE]={d="on"}, + [0x23CF]={d="on"}, + [0x23D0]={d="on"}, + [0x23D1]={d="on"}, + [0x23D2]={d="on"}, + [0x23D3]={d="on"}, + [0x23D4]={d="on"}, + [0x23D5]={d="on"}, + [0x23D6]={d="on"}, + [0x23D7]={d="on"}, + [0x23D8]={d="on"}, + [0x23D9]={d="on"}, + [0x23DA]={d="on"}, + [0x23DB]={d="on"}, + [0x23DC]={d="on"}, + [0x23DD]={d="on"}, + [0x23DE]={d="on"}, + [0x23DF]={d="on"}, + [0x23E0]={d="on"}, + [0x23E1]={d="on"}, + [0x23E2]={d="on"}, + [0x23E3]={d="on"}, + [0x23E4]={d="on"}, + [0x23E5]={d="on"}, + [0x23E6]={d="on"}, + [0x23E7]={d="on"}, + [0x23E8]={d="on"}, + [0x23E9]={d="on"}, + [0x23EA]={d="on"}, + [0x23EB]={d="on"}, + [0x23EC]={d="on"}, + [0x23ED]={d="on"}, + [0x23EE]={d="on"}, + [0x23EF]={d="on"}, + [0x23F0]={d="on"}, + [0x23F1]={d="on"}, + [0x23F2]={d="on"}, + [0x23F3]={d="on"}, + [0x23F4]={d="on"}, + [0x23F5]={d="on"}, + [0x23F6]={d="on"}, + [0x23F7]={d="on"}, + [0x23F8]={d="on"}, + [0x23F9]={d="on"}, + [0x23FA]={d="on"}, + [0x23FB]={d="on"}, + [0x23FC]={d="on"}, + [0x23FD]={d="on"}, + [0x23FE]={d="on"}, + [0x23FF]={d="on"}, + [0x2400]={d="on"}, + [0x2401]={d="on"}, + [0x2402]={d="on"}, + [0x2403]={d="on"}, + [0x2404]={d="on"}, + [0x2405]={d="on"}, + [0x2406]={d="on"}, + [0x2407]={d="on"}, + [0x2408]={d="on"}, + [0x2409]={d="on"}, + [0x240A]={d="on"}, + [0x240B]={d="on"}, + [0x240C]={d="on"}, + [0x240D]={d="on"}, + [0x240E]={d="on"}, + [0x240F]={d="on"}, + [0x2410]={d="on"}, + [0x2411]={d="on"}, + [0x2412]={d="on"}, + [0x2413]={d="on"}, + [0x2414]={d="on"}, + [0x2415]={d="on"}, + [0x2416]={d="on"}, + [0x2417]={d="on"}, + [0x2418]={d="on"}, + [0x2419]={d="on"}, + [0x241A]={d="on"}, + [0x241B]={d="on"}, + [0x241C]={d="on"}, + [0x241D]={d="on"}, + [0x241E]={d="on"}, + [0x241F]={d="on"}, + [0x2420]={d="on"}, + [0x2421]={d="on"}, + [0x2422]={d="on"}, + [0x2423]={d="on"}, + [0x2424]={d="on"}, + [0x2425]={d="on"}, + [0x2426]={d="on"}, + [0x2440]={d="on"}, + [0x2441]={d="on"}, + [0x2442]={d="on"}, + [0x2443]={d="on"}, + [0x2444]={d="on"}, + [0x2445]={d="on"}, + [0x2446]={d="on"}, + [0x2447]={d="on"}, + [0x2448]={d="on"}, + [0x2449]={d="on"}, + [0x244A]={d="on"}, + [0x2460]={d="on"}, + [0x2461]={d="on"}, + [0x2462]={d="on"}, + [0x2463]={d="on"}, + [0x2464]={d="on"}, + [0x2465]={d="on"}, + [0x2466]={d="on"}, + [0x2467]={d="on"}, + [0x2468]={d="on"}, + [0x2469]={d="on"}, + [0x246A]={d="on"}, + [0x246B]={d="on"}, + [0x246C]={d="on"}, + [0x246D]={d="on"}, + [0x246E]={d="on"}, + [0x246F]={d="on"}, + [0x2470]={d="on"}, + [0x2471]={d="on"}, + [0x2472]={d="on"}, + [0x2473]={d="on"}, + [0x2474]={d="on"}, + [0x2475]={d="on"}, + [0x2476]={d="on"}, + [0x2477]={d="on"}, + [0x2478]={d="on"}, + [0x2479]={d="on"}, + [0x247A]={d="on"}, + [0x247B]={d="on"}, + [0x247C]={d="on"}, + [0x247D]={d="on"}, + [0x247E]={d="on"}, + [0x247F]={d="on"}, + [0x2480]={d="on"}, + [0x2481]={d="on"}, + [0x2482]={d="on"}, + [0x2483]={d="on"}, + [0x2484]={d="on"}, + [0x2485]={d="on"}, + [0x2486]={d="on"}, + [0x2487]={d="on"}, + [0x2488]={d="en"}, + [0x2489]={d="en"}, + [0x248A]={d="en"}, + [0x248B]={d="en"}, + [0x248C]={d="en"}, + [0x248D]={d="en"}, + [0x248E]={d="en"}, + [0x248F]={d="en"}, + [0x2490]={d="en"}, + [0x2491]={d="en"}, + [0x2492]={d="en"}, + [0x2493]={d="en"}, + [0x2494]={d="en"}, + [0x2495]={d="en"}, + [0x2496]={d="en"}, + [0x2497]={d="en"}, + [0x2498]={d="en"}, + [0x2499]={d="en"}, + [0x249A]={d="en"}, + [0x249B]={d="en"}, + [0x249C]={d="l"}, + [0x249D]={d="l"}, + [0x249E]={d="l"}, + [0x249F]={d="l"}, + [0x24A0]={d="l"}, + [0x24A1]={d="l"}, + [0x24A2]={d="l"}, + [0x24A3]={d="l"}, + [0x24A4]={d="l"}, + [0x24A5]={d="l"}, + [0x24A6]={d="l"}, + [0x24A7]={d="l"}, + [0x24A8]={d="l"}, + [0x24A9]={d="l"}, + [0x24AA]={d="l"}, + [0x24AB]={d="l"}, + [0x24AC]={d="l"}, + [0x24AD]={d="l"}, + [0x24AE]={d="l"}, + [0x24AF]={d="l"}, + [0x24B0]={d="l"}, + [0x24B1]={d="l"}, + [0x24B2]={d="l"}, + [0x24B3]={d="l"}, + [0x24B4]={d="l"}, + [0x24B5]={d="l"}, + [0x24B6]={d="l"}, + [0x24B7]={d="l"}, + [0x24B8]={d="l"}, + [0x24B9]={d="l"}, + [0x24BA]={d="l"}, + [0x24BB]={d="l"}, + [0x24BC]={d="l"}, + [0x24BD]={d="l"}, + [0x24BE]={d="l"}, + [0x24BF]={d="l"}, + [0x24C0]={d="l"}, + [0x24C1]={d="l"}, + [0x24C2]={d="l"}, + [0x24C3]={d="l"}, + [0x24C4]={d="l"}, + [0x24C5]={d="l"}, + [0x24C6]={d="l"}, + [0x24C7]={d="l"}, + [0x24C8]={d="l"}, + [0x24C9]={d="l"}, + [0x24CA]={d="l"}, + [0x24CB]={d="l"}, + [0x24CC]={d="l"}, + [0x24CD]={d="l"}, + [0x24CE]={d="l"}, + [0x24CF]={d="l"}, + [0x24D0]={d="l"}, + [0x24D1]={d="l"}, + [0x24D2]={d="l"}, + [0x24D3]={d="l"}, + [0x24D4]={d="l"}, + [0x24D5]={d="l"}, + [0x24D6]={d="l"}, + [0x24D7]={d="l"}, + [0x24D8]={d="l"}, + [0x24D9]={d="l"}, + [0x24DA]={d="l"}, + [0x24DB]={d="l"}, + [0x24DC]={d="l"}, + [0x24DD]={d="l"}, + [0x24DE]={d="l"}, + [0x24DF]={d="l"}, + [0x24E0]={d="l"}, + [0x24E1]={d="l"}, + [0x24E2]={d="l"}, + [0x24E3]={d="l"}, + [0x24E4]={d="l"}, + [0x24E5]={d="l"}, + [0x24E6]={d="l"}, + [0x24E7]={d="l"}, + [0x24E8]={d="l"}, + [0x24E9]={d="l"}, + [0x24EA]={d="on"}, + [0x24EB]={d="on"}, + [0x24EC]={d="on"}, + [0x24ED]={d="on"}, + [0x24EE]={d="on"}, + [0x24EF]={d="on"}, + [0x24F0]={d="on"}, + [0x24F1]={d="on"}, + [0x24F2]={d="on"}, + [0x24F3]={d="on"}, + [0x24F4]={d="on"}, + [0x24F5]={d="on"}, + [0x24F6]={d="on"}, + [0x24F7]={d="on"}, + [0x24F8]={d="on"}, + [0x24F9]={d="on"}, + [0x24FA]={d="on"}, + [0x24FB]={d="on"}, + [0x24FC]={d="on"}, + [0x24FD]={d="on"}, + [0x24FE]={d="on"}, + [0x24FF]={d="on"}, + [0x2500]={d="on"}, + [0x2501]={d="on"}, + [0x2502]={d="on"}, + [0x2503]={d="on"}, + [0x2504]={d="on"}, + [0x2505]={d="on"}, + [0x2506]={d="on"}, + [0x2507]={d="on"}, + [0x2508]={d="on"}, + [0x2509]={d="on"}, + [0x250A]={d="on"}, + [0x250B]={d="on"}, + [0x250C]={d="on"}, + [0x250D]={d="on"}, + [0x250E]={d="on"}, + [0x250F]={d="on"}, + [0x2510]={d="on"}, + [0x2511]={d="on"}, + [0x2512]={d="on"}, + [0x2513]={d="on"}, + [0x2514]={d="on"}, + [0x2515]={d="on"}, + [0x2516]={d="on"}, + [0x2517]={d="on"}, + [0x2518]={d="on"}, + [0x2519]={d="on"}, + [0x251A]={d="on"}, + [0x251B]={d="on"}, + [0x251C]={d="on"}, + [0x251D]={d="on"}, + [0x251E]={d="on"}, + [0x251F]={d="on"}, + [0x2520]={d="on"}, + [0x2521]={d="on"}, + [0x2522]={d="on"}, + [0x2523]={d="on"}, + [0x2524]={d="on"}, + [0x2525]={d="on"}, + [0x2526]={d="on"}, + [0x2527]={d="on"}, + [0x2528]={d="on"}, + [0x2529]={d="on"}, + [0x252A]={d="on"}, + [0x252B]={d="on"}, + [0x252C]={d="on"}, + [0x252D]={d="on"}, + [0x252E]={d="on"}, + [0x252F]={d="on"}, + [0x2530]={d="on"}, + [0x2531]={d="on"}, + [0x2532]={d="on"}, + [0x2533]={d="on"}, + [0x2534]={d="on"}, + [0x2535]={d="on"}, + [0x2536]={d="on"}, + [0x2537]={d="on"}, + [0x2538]={d="on"}, + [0x2539]={d="on"}, + [0x253A]={d="on"}, + [0x253B]={d="on"}, + [0x253C]={d="on"}, + [0x253D]={d="on"}, + [0x253E]={d="on"}, + [0x253F]={d="on"}, + [0x2540]={d="on"}, + [0x2541]={d="on"}, + [0x2542]={d="on"}, + [0x2543]={d="on"}, + [0x2544]={d="on"}, + [0x2545]={d="on"}, + [0x2546]={d="on"}, + [0x2547]={d="on"}, + [0x2548]={d="on"}, + [0x2549]={d="on"}, + [0x254A]={d="on"}, + [0x254B]={d="on"}, + [0x254C]={d="on"}, + [0x254D]={d="on"}, + [0x254E]={d="on"}, + [0x254F]={d="on"}, + [0x2550]={d="on"}, + [0x2551]={d="on"}, + [0x2552]={d="on"}, + [0x2553]={d="on"}, + [0x2554]={d="on"}, + [0x2555]={d="on"}, + [0x2556]={d="on"}, + [0x2557]={d="on"}, + [0x2558]={d="on"}, + [0x2559]={d="on"}, + [0x255A]={d="on"}, + [0x255B]={d="on"}, + [0x255C]={d="on"}, + [0x255D]={d="on"}, + [0x255E]={d="on"}, + [0x255F]={d="on"}, + [0x2560]={d="on"}, + [0x2561]={d="on"}, + [0x2562]={d="on"}, + [0x2563]={d="on"}, + [0x2564]={d="on"}, + [0x2565]={d="on"}, + [0x2566]={d="on"}, + [0x2567]={d="on"}, + [0x2568]={d="on"}, + [0x2569]={d="on"}, + [0x256A]={d="on"}, + [0x256B]={d="on"}, + [0x256C]={d="on"}, + [0x256D]={d="on"}, + [0x256E]={d="on"}, + [0x256F]={d="on"}, + [0x2570]={d="on"}, + [0x2571]={d="on"}, + [0x2572]={d="on"}, + [0x2573]={d="on"}, + [0x2574]={d="on"}, + [0x2575]={d="on"}, + [0x2576]={d="on"}, + [0x2577]={d="on"}, + [0x2578]={d="on"}, + [0x2579]={d="on"}, + [0x257A]={d="on"}, + [0x257B]={d="on"}, + [0x257C]={d="on"}, + [0x257D]={d="on"}, + [0x257E]={d="on"}, + [0x257F]={d="on"}, + [0x2580]={d="on"}, + [0x2581]={d="on"}, + [0x2582]={d="on"}, + [0x2583]={d="on"}, + [0x2584]={d="on"}, + [0x2585]={d="on"}, + [0x2586]={d="on"}, + [0x2587]={d="on"}, + [0x2588]={d="on"}, + [0x2589]={d="on"}, + [0x258A]={d="on"}, + [0x258B]={d="on"}, + [0x258C]={d="on"}, + [0x258D]={d="on"}, + [0x258E]={d="on"}, + [0x258F]={d="on"}, + [0x2590]={d="on"}, + [0x2591]={d="on"}, + [0x2592]={d="on"}, + [0x2593]={d="on"}, + [0x2594]={d="on"}, + [0x2595]={d="on"}, + [0x2596]={d="on"}, + [0x2597]={d="on"}, + [0x2598]={d="on"}, + [0x2599]={d="on"}, + [0x259A]={d="on"}, + [0x259B]={d="on"}, + [0x259C]={d="on"}, + [0x259D]={d="on"}, + [0x259E]={d="on"}, + [0x259F]={d="on"}, + [0x25A0]={d="on"}, + [0x25A1]={d="on"}, + [0x25A2]={d="on"}, + [0x25A3]={d="on"}, + [0x25A4]={d="on"}, + [0x25A5]={d="on"}, + [0x25A6]={d="on"}, + [0x25A7]={d="on"}, + [0x25A8]={d="on"}, + [0x25A9]={d="on"}, + [0x25AA]={d="on"}, + [0x25AB]={d="on"}, + [0x25AC]={d="on"}, + [0x25AD]={d="on"}, + [0x25AE]={d="on"}, + [0x25AF]={d="on"}, + [0x25B0]={d="on"}, + [0x25B1]={d="on"}, + [0x25B2]={d="on"}, + [0x25B3]={d="on"}, + [0x25B4]={d="on"}, + [0x25B5]={d="on"}, + [0x25B6]={d="on"}, + [0x25B7]={d="on"}, + [0x25B8]={d="on"}, + [0x25B9]={d="on"}, + [0x25BA]={d="on"}, + [0x25BB]={d="on"}, + [0x25BC]={d="on"}, + [0x25BD]={d="on"}, + [0x25BE]={d="on"}, + [0x25BF]={d="on"}, + [0x25C0]={d="on"}, + [0x25C1]={d="on"}, + [0x25C2]={d="on"}, + [0x25C3]={d="on"}, + [0x25C4]={d="on"}, + [0x25C5]={d="on"}, + [0x25C6]={d="on"}, + [0x25C7]={d="on"}, + [0x25C8]={d="on"}, + [0x25C9]={d="on"}, + [0x25CA]={d="on"}, + [0x25CB]={d="on"}, + [0x25CC]={d="on"}, + [0x25CD]={d="on"}, + [0x25CE]={d="on"}, + [0x25CF]={d="on"}, + [0x25D0]={d="on"}, + [0x25D1]={d="on"}, + [0x25D2]={d="on"}, + [0x25D3]={d="on"}, + [0x25D4]={d="on"}, + [0x25D5]={d="on"}, + [0x25D6]={d="on"}, + [0x25D7]={d="on"}, + [0x25D8]={d="on"}, + [0x25D9]={d="on"}, + [0x25DA]={d="on"}, + [0x25DB]={d="on"}, + [0x25DC]={d="on"}, + [0x25DD]={d="on"}, + [0x25DE]={d="on"}, + [0x25DF]={d="on"}, + [0x25E0]={d="on"}, + [0x25E1]={d="on"}, + [0x25E2]={d="on"}, + [0x25E3]={d="on"}, + [0x25E4]={d="on"}, + [0x25E5]={d="on"}, + [0x25E6]={d="on"}, + [0x25E7]={d="on"}, + [0x25E8]={d="on"}, + [0x25E9]={d="on"}, + [0x25EA]={d="on"}, + [0x25EB]={d="on"}, + [0x25EC]={d="on"}, + [0x25ED]={d="on"}, + [0x25EE]={d="on"}, + [0x25EF]={d="on"}, + [0x25F0]={d="on"}, + [0x25F1]={d="on"}, + [0x25F2]={d="on"}, + [0x25F3]={d="on"}, + [0x25F4]={d="on"}, + [0x25F5]={d="on"}, + [0x25F6]={d="on"}, + [0x25F7]={d="on"}, + [0x25F8]={d="on"}, + [0x25F9]={d="on"}, + [0x25FA]={d="on"}, + [0x25FB]={d="on"}, + [0x25FC]={d="on"}, + [0x25FD]={d="on"}, + [0x25FE]={d="on"}, + [0x25FF]={d="on"}, + [0x2600]={d="on"}, + [0x2601]={d="on"}, + [0x2602]={d="on"}, + [0x2603]={d="on"}, + [0x2604]={d="on"}, + [0x2605]={d="on"}, + [0x2606]={d="on"}, + [0x2607]={d="on"}, + [0x2608]={d="on"}, + [0x2609]={d="on"}, + [0x260A]={d="on"}, + [0x260B]={d="on"}, + [0x260C]={d="on"}, + [0x260D]={d="on"}, + [0x260E]={d="on"}, + [0x260F]={d="on"}, + [0x2610]={d="on"}, + [0x2611]={d="on"}, + [0x2612]={d="on"}, + [0x2613]={d="on"}, + [0x2614]={d="on"}, + [0x2615]={d="on"}, + [0x2616]={d="on"}, + [0x2617]={d="on"}, + [0x2618]={d="on"}, + [0x2619]={d="on"}, + [0x261A]={d="on"}, + [0x261B]={d="on"}, + [0x261C]={d="on"}, + [0x261D]={d="on"}, + [0x261E]={d="on"}, + [0x261F]={d="on"}, + [0x2620]={d="on"}, + [0x2621]={d="on"}, + [0x2622]={d="on"}, + [0x2623]={d="on"}, + [0x2624]={d="on"}, + [0x2625]={d="on"}, + [0x2626]={d="on"}, + [0x2627]={d="on"}, + [0x2628]={d="on"}, + [0x2629]={d="on"}, + [0x262A]={d="on"}, + [0x262B]={d="on"}, + [0x262C]={d="on"}, + [0x262D]={d="on"}, + [0x262E]={d="on"}, + [0x262F]={d="on"}, + [0x2630]={d="on"}, + [0x2631]={d="on"}, + [0x2632]={d="on"}, + [0x2633]={d="on"}, + [0x2634]={d="on"}, + [0x2635]={d="on"}, + [0x2636]={d="on"}, + [0x2637]={d="on"}, + [0x2638]={d="on"}, + [0x2639]={d="on"}, + [0x263A]={d="on"}, + [0x263B]={d="on"}, + [0x263C]={d="on"}, + [0x263D]={d="on"}, + [0x263E]={d="on"}, + [0x263F]={d="on"}, + [0x2640]={d="on"}, + [0x2641]={d="on"}, + [0x2642]={d="on"}, + [0x2643]={d="on"}, + [0x2644]={d="on"}, + [0x2645]={d="on"}, + [0x2646]={d="on"}, + [0x2647]={d="on"}, + [0x2648]={d="on"}, + [0x2649]={d="on"}, + [0x264A]={d="on"}, + [0x264B]={d="on"}, + [0x264C]={d="on"}, + [0x264D]={d="on"}, + [0x264E]={d="on"}, + [0x264F]={d="on"}, + [0x2650]={d="on"}, + [0x2651]={d="on"}, + [0x2652]={d="on"}, + [0x2653]={d="on"}, + [0x2654]={d="on"}, + [0x2655]={d="on"}, + [0x2656]={d="on"}, + [0x2657]={d="on"}, + [0x2658]={d="on"}, + [0x2659]={d="on"}, + [0x265A]={d="on"}, + [0x265B]={d="on"}, + [0x265C]={d="on"}, + [0x265D]={d="on"}, + [0x265E]={d="on"}, + [0x265F]={d="on"}, + [0x2660]={d="on"}, + [0x2661]={d="on"}, + [0x2662]={d="on"}, + [0x2663]={d="on"}, + [0x2664]={d="on"}, + [0x2665]={d="on"}, + [0x2666]={d="on"}, + [0x2667]={d="on"}, + [0x2668]={d="on"}, + [0x2669]={d="on"}, + [0x266A]={d="on"}, + [0x266B]={d="on"}, + [0x266C]={d="on"}, + [0x266D]={d="on"}, + [0x266E]={d="on"}, + [0x266F]={d="on"}, + [0x2670]={d="on"}, + [0x2671]={d="on"}, + [0x2672]={d="on"}, + [0x2673]={d="on"}, + [0x2674]={d="on"}, + [0x2675]={d="on"}, + [0x2676]={d="on"}, + [0x2677]={d="on"}, + [0x2678]={d="on"}, + [0x2679]={d="on"}, + [0x267A]={d="on"}, + [0x267B]={d="on"}, + [0x267C]={d="on"}, + [0x267D]={d="on"}, + [0x267E]={d="on"}, + [0x267F]={d="on"}, + [0x2680]={d="on"}, + [0x2681]={d="on"}, + [0x2682]={d="on"}, + [0x2683]={d="on"}, + [0x2684]={d="on"}, + [0x2685]={d="on"}, + [0x2686]={d="on"}, + [0x2687]={d="on"}, + [0x2688]={d="on"}, + [0x2689]={d="on"}, + [0x268A]={d="on"}, + [0x268B]={d="on"}, + [0x268C]={d="on"}, + [0x268D]={d="on"}, + [0x268E]={d="on"}, + [0x268F]={d="on"}, + [0x2690]={d="on"}, + [0x2691]={d="on"}, + [0x2692]={d="on"}, + [0x2693]={d="on"}, + [0x2694]={d="on"}, + [0x2695]={d="on"}, + [0x2696]={d="on"}, + [0x2697]={d="on"}, + [0x2698]={d="on"}, + [0x2699]={d="on"}, + [0x269A]={d="on"}, + [0x269B]={d="on"}, + [0x269C]={d="on"}, + [0x269D]={d="on"}, + [0x269E]={d="on"}, + [0x269F]={d="on"}, + [0x26A0]={d="on"}, + [0x26A1]={d="on"}, + [0x26A2]={d="on"}, + [0x26A3]={d="on"}, + [0x26A4]={d="on"}, + [0x26A5]={d="on"}, + [0x26A6]={d="on"}, + [0x26A7]={d="on"}, + [0x26A8]={d="on"}, + [0x26A9]={d="on"}, + [0x26AA]={d="on"}, + [0x26AB]={d="on"}, + [0x26AC]={d="l"}, + [0x26AD]={d="on"}, + [0x26AE]={d="on"}, + [0x26AF]={d="on"}, + [0x26B0]={d="on"}, + [0x26B1]={d="on"}, + [0x26B2]={d="on"}, + [0x26B3]={d="on"}, + [0x26B4]={d="on"}, + [0x26B5]={d="on"}, + [0x26B6]={d="on"}, + [0x26B7]={d="on"}, + [0x26B8]={d="on"}, + [0x26B9]={d="on"}, + [0x26BA]={d="on"}, + [0x26BB]={d="on"}, + [0x26BC]={d="on"}, + [0x26BD]={d="on"}, + [0x26BE]={d="on"}, + [0x26BF]={d="on"}, + [0x26C0]={d="on"}, + [0x26C1]={d="on"}, + [0x26C2]={d="on"}, + [0x26C3]={d="on"}, + [0x26C4]={d="on"}, + [0x26C5]={d="on"}, + [0x26C6]={d="on"}, + [0x26C7]={d="on"}, + [0x26C8]={d="on"}, + [0x26C9]={d="on"}, + [0x26CA]={d="on"}, + [0x26CB]={d="on"}, + [0x26CC]={d="on"}, + [0x26CD]={d="on"}, + [0x26CE]={d="on"}, + [0x26CF]={d="on"}, + [0x26D0]={d="on"}, + [0x26D1]={d="on"}, + [0x26D2]={d="on"}, + [0x26D3]={d="on"}, + [0x26D4]={d="on"}, + [0x26D5]={d="on"}, + [0x26D6]={d="on"}, + [0x26D7]={d="on"}, + [0x26D8]={d="on"}, + [0x26D9]={d="on"}, + [0x26DA]={d="on"}, + [0x26DB]={d="on"}, + [0x26DC]={d="on"}, + [0x26DD]={d="on"}, + [0x26DE]={d="on"}, + [0x26DF]={d="on"}, + [0x26E0]={d="on"}, + [0x26E1]={d="on"}, + [0x26E2]={d="on"}, + [0x26E3]={d="on"}, + [0x26E4]={d="on"}, + [0x26E5]={d="on"}, + [0x26E6]={d="on"}, + [0x26E7]={d="on"}, + [0x26E8]={d="on"}, + [0x26E9]={d="on"}, + [0x26EA]={d="on"}, + [0x26EB]={d="on"}, + [0x26EC]={d="on"}, + [0x26ED]={d="on"}, + [0x26EE]={d="on"}, + [0x26EF]={d="on"}, + [0x26F0]={d="on"}, + [0x26F1]={d="on"}, + [0x26F2]={d="on"}, + [0x26F3]={d="on"}, + [0x26F4]={d="on"}, + [0x26F5]={d="on"}, + [0x26F6]={d="on"}, + [0x26F7]={d="on"}, + [0x26F8]={d="on"}, + [0x26F9]={d="on"}, + [0x26FA]={d="on"}, + [0x26FB]={d="on"}, + [0x26FC]={d="on"}, + [0x26FD]={d="on"}, + [0x26FE]={d="on"}, + [0x26FF]={d="on"}, + [0x2700]={d="on"}, + [0x2701]={d="on"}, + [0x2702]={d="on"}, + [0x2703]={d="on"}, + [0x2704]={d="on"}, + [0x2705]={d="on"}, + [0x2706]={d="on"}, + [0x2707]={d="on"}, + [0x2708]={d="on"}, + [0x2709]={d="on"}, + [0x270A]={d="on"}, + [0x270B]={d="on"}, + [0x270C]={d="on"}, + [0x270D]={d="on"}, + [0x270E]={d="on"}, + [0x270F]={d="on"}, + [0x2710]={d="on"}, + [0x2711]={d="on"}, + [0x2712]={d="on"}, + [0x2713]={d="on"}, + [0x2714]={d="on"}, + [0x2715]={d="on"}, + [0x2716]={d="on"}, + [0x2717]={d="on"}, + [0x2718]={d="on"}, + [0x2719]={d="on"}, + [0x271A]={d="on"}, + [0x271B]={d="on"}, + [0x271C]={d="on"}, + [0x271D]={d="on"}, + [0x271E]={d="on"}, + [0x271F]={d="on"}, + [0x2720]={d="on"}, + [0x2721]={d="on"}, + [0x2722]={d="on"}, + [0x2723]={d="on"}, + [0x2724]={d="on"}, + [0x2725]={d="on"}, + [0x2726]={d="on"}, + [0x2727]={d="on"}, + [0x2728]={d="on"}, + [0x2729]={d="on"}, + [0x272A]={d="on"}, + [0x272B]={d="on"}, + [0x272C]={d="on"}, + [0x272D]={d="on"}, + [0x272E]={d="on"}, + [0x272F]={d="on"}, + [0x2730]={d="on"}, + [0x2731]={d="on"}, + [0x2732]={d="on"}, + [0x2733]={d="on"}, + [0x2734]={d="on"}, + [0x2735]={d="on"}, + [0x2736]={d="on"}, + [0x2737]={d="on"}, + [0x2738]={d="on"}, + [0x2739]={d="on"}, + [0x273A]={d="on"}, + [0x273B]={d="on"}, + [0x273C]={d="on"}, + [0x273D]={d="on"}, + [0x273E]={d="on"}, + [0x273F]={d="on"}, + [0x2740]={d="on"}, + [0x2741]={d="on"}, + [0x2742]={d="on"}, + [0x2743]={d="on"}, + [0x2744]={d="on"}, + [0x2745]={d="on"}, + [0x2746]={d="on"}, + [0x2747]={d="on"}, + [0x2748]={d="on"}, + [0x2749]={d="on"}, + [0x274A]={d="on"}, + [0x274B]={d="on"}, + [0x274C]={d="on"}, + [0x274D]={d="on"}, + [0x274E]={d="on"}, + [0x274F]={d="on"}, + [0x2750]={d="on"}, + [0x2751]={d="on"}, + [0x2752]={d="on"}, + [0x2753]={d="on"}, + [0x2754]={d="on"}, + [0x2755]={d="on"}, + [0x2756]={d="on"}, + [0x2757]={d="on"}, + [0x2758]={d="on"}, + [0x2759]={d="on"}, + [0x275A]={d="on"}, + [0x275B]={d="on"}, + [0x275C]={d="on"}, + [0x275D]={d="on"}, + [0x275E]={d="on"}, + [0x275F]={d="on"}, + [0x2760]={d="on"}, + [0x2761]={d="on"}, + [0x2762]={d="on"}, + [0x2763]={d="on"}, + [0x2764]={d="on"}, + [0x2765]={d="on"}, + [0x2766]={d="on"}, + [0x2767]={d="on"}, + [0x2768]={d="on", + m=0x2769}, + [0x2769]={d="on", + m=0x2768}, + [0x276A]={d="on", + m=0x276B}, + [0x276B]={d="on", + m=0x276A}, + [0x276C]={d="on", + m=0x276D}, + [0x276D]={d="on", + m=0x276C}, + [0x276E]={d="on", + m=0x276F}, + [0x276F]={d="on", + m=0x276E}, + [0x2770]={d="on", + m=0x2771}, + [0x2771]={d="on", + m=0x2770}, + [0x2772]={d="on", + m=0x2773}, + [0x2773]={d="on", + m=0x2772}, + [0x2774]={d="on", + m=0x2775}, + [0x2775]={d="on", + m=0x2774}, + [0x2776]={d="on"}, + [0x2777]={d="on"}, + [0x2778]={d="on"}, + [0x2779]={d="on"}, + [0x277A]={d="on"}, + [0x277B]={d="on"}, + [0x277C]={d="on"}, + [0x277D]={d="on"}, + [0x277E]={d="on"}, + [0x277F]={d="on"}, + [0x2780]={d="on"}, + [0x2781]={d="on"}, + [0x2782]={d="on"}, + [0x2783]={d="on"}, + [0x2784]={d="on"}, + [0x2785]={d="on"}, + [0x2786]={d="on"}, + [0x2787]={d="on"}, + [0x2788]={d="on"}, + [0x2789]={d="on"}, + [0x278A]={d="on"}, + [0x278B]={d="on"}, + [0x278C]={d="on"}, + [0x278D]={d="on"}, + [0x278E]={d="on"}, + [0x278F]={d="on"}, + [0x2790]={d="on"}, + [0x2791]={d="on"}, + [0x2792]={d="on"}, + [0x2793]={d="on"}, + [0x2794]={d="on"}, + [0x2795]={d="on"}, + [0x2796]={d="on"}, + [0x2797]={d="on"}, + [0x2798]={d="on"}, + [0x2799]={d="on"}, + [0x279A]={d="on"}, + [0x279B]={d="on"}, + [0x279C]={d="on"}, + [0x279D]={d="on"}, + [0x279E]={d="on"}, + [0x279F]={d="on"}, + [0x27A0]={d="on"}, + [0x27A1]={d="on"}, + [0x27A2]={d="on"}, + [0x27A3]={d="on"}, + [0x27A4]={d="on"}, + [0x27A5]={d="on"}, + [0x27A6]={d="on"}, + [0x27A7]={d="on"}, + [0x27A8]={d="on"}, + [0x27A9]={d="on"}, + [0x27AA]={d="on"}, + [0x27AB]={d="on"}, + [0x27AC]={d="on"}, + [0x27AD]={d="on"}, + [0x27AE]={d="on"}, + [0x27AF]={d="on"}, + [0x27B0]={d="on"}, + [0x27B1]={d="on"}, + [0x27B2]={d="on"}, + [0x27B3]={d="on"}, + [0x27B4]={d="on"}, + [0x27B5]={d="on"}, + [0x27B6]={d="on"}, + [0x27B7]={d="on"}, + [0x27B8]={d="on"}, + [0x27B9]={d="on"}, + [0x27BA]={d="on"}, + [0x27BB]={d="on"}, + [0x27BC]={d="on"}, + [0x27BD]={d="on"}, + [0x27BE]={d="on"}, + [0x27BF]={d="on"}, + [0x27C0]={d="on"}, + [0x27C1]={d="on"}, + [0x27C2]={d="on"}, + [0x27C3]={d="on", + m=0x27C4}, + [0x27C4]={d="on", + m=0x27C3}, + [0x27C5]={d="on", + m=0x27C6}, + [0x27C6]={d="on", + m=0x27C5}, + [0x27C7]={d="on"}, + [0x27C8]={d="on", + m=0x27C9}, + [0x27C9]={d="on", + m=0x27C8}, + [0x27CA]={d="on"}, + [0x27CB]={d="on", + m=0x27CD}, + [0x27CC]={d="on"}, + [0x27CD]={d="on", + m=0x27CB}, + [0x27CE]={d="on"}, + [0x27CF]={d="on"}, + [0x27D0]={d="on"}, + [0x27D1]={d="on"}, + [0x27D2]={d="on"}, + [0x27D3]={d="on"}, + [0x27D4]={d="on"}, + [0x27D5]={d="on", + m=0x27D6}, + [0x27D6]={d="on", + m=0x27D5}, + [0x27D7]={d="on"}, + [0x27D8]={d="on"}, + [0x27D9]={d="on"}, + [0x27DA]={d="on"}, + [0x27DB]={d="on"}, + [0x27DC]={d="on", + m=0x22B8}, + [0x27DD]={d="on", + m=0x27DE}, + [0x27DE]={d="on", + m=0x27DD}, + [0x27DF]={d="on"}, + [0x27E0]={d="on"}, + [0x27E1]={d="on"}, + [0x27E2]={d="on", + m=0x27E3}, + [0x27E3]={d="on", + m=0x27E2}, + [0x27E4]={d="on", + m=0x27E5}, + [0x27E5]={d="on", + m=0x27E4}, + [0x27E6]={d="on", + m=0x27E7}, + [0x27E7]={d="on", + m=0x27E6}, + [0x27E8]={d="on", + m=0x27E9}, + [0x27E9]={d="on", + m=0x27E8}, + [0x27EA]={d="on", + m=0x27EB}, + [0x27EB]={d="on", + m=0x27EA}, + [0x27EC]={d="on", + m=0x27ED}, + [0x27ED]={d="on", + m=0x27EC}, + [0x27EE]={d="on", + m=0x27EF}, + [0x27EF]={d="on", + m=0x27EE}, + [0x27F0]={d="on"}, + [0x27F1]={d="on"}, + [0x27F2]={d="on"}, + [0x27F3]={d="on"}, + [0x27F4]={d="on"}, + [0x27F5]={d="on"}, + [0x27F6]={d="on"}, + [0x27F7]={d="on"}, + [0x27F8]={d="on"}, + [0x27F9]={d="on"}, + [0x27FA]={d="on"}, + [0x27FB]={d="on"}, + [0x27FC]={d="on"}, + [0x27FD]={d="on"}, + [0x27FE]={d="on"}, + [0x27FF]={d="on"}, + [0x2800]={d="l"}, + [0x2801]={d="l"}, + [0x2802]={d="l"}, + [0x2803]={d="l"}, + [0x2804]={d="l"}, + [0x2805]={d="l"}, + [0x2806]={d="l"}, + [0x2807]={d="l"}, + [0x2808]={d="l"}, + [0x2809]={d="l"}, + [0x280A]={d="l"}, + [0x280B]={d="l"}, + [0x280C]={d="l"}, + [0x280D]={d="l"}, + [0x280E]={d="l"}, + [0x280F]={d="l"}, + [0x2810]={d="l"}, + [0x2811]={d="l"}, + [0x2812]={d="l"}, + [0x2813]={d="l"}, + [0x2814]={d="l"}, + [0x2815]={d="l"}, + [0x2816]={d="l"}, + [0x2817]={d="l"}, + [0x2818]={d="l"}, + [0x2819]={d="l"}, + [0x281A]={d="l"}, + [0x281B]={d="l"}, + [0x281C]={d="l"}, + [0x281D]={d="l"}, + [0x281E]={d="l"}, + [0x281F]={d="l"}, + [0x2820]={d="l"}, + [0x2821]={d="l"}, + [0x2822]={d="l"}, + [0x2823]={d="l"}, + [0x2824]={d="l"}, + [0x2825]={d="l"}, + [0x2826]={d="l"}, + [0x2827]={d="l"}, + [0x2828]={d="l"}, + [0x2829]={d="l"}, + [0x282A]={d="l"}, + [0x282B]={d="l"}, + [0x282C]={d="l"}, + [0x282D]={d="l"}, + [0x282E]={d="l"}, + [0x282F]={d="l"}, + [0x2830]={d="l"}, + [0x2831]={d="l"}, + [0x2832]={d="l"}, + [0x2833]={d="l"}, + [0x2834]={d="l"}, + [0x2835]={d="l"}, + [0x2836]={d="l"}, + [0x2837]={d="l"}, + [0x2838]={d="l"}, + [0x2839]={d="l"}, + [0x283A]={d="l"}, + [0x283B]={d="l"}, + [0x283C]={d="l"}, + [0x283D]={d="l"}, + [0x283E]={d="l"}, + [0x283F]={d="l"}, + [0x2840]={d="l"}, + [0x2841]={d="l"}, + [0x2842]={d="l"}, + [0x2843]={d="l"}, + [0x2844]={d="l"}, + [0x2845]={d="l"}, + [0x2846]={d="l"}, + [0x2847]={d="l"}, + [0x2848]={d="l"}, + [0x2849]={d="l"}, + [0x284A]={d="l"}, + [0x284B]={d="l"}, + [0x284C]={d="l"}, + [0x284D]={d="l"}, + [0x284E]={d="l"}, + [0x284F]={d="l"}, + [0x2850]={d="l"}, + [0x2851]={d="l"}, + [0x2852]={d="l"}, + [0x2853]={d="l"}, + [0x2854]={d="l"}, + [0x2855]={d="l"}, + [0x2856]={d="l"}, + [0x2857]={d="l"}, + [0x2858]={d="l"}, + [0x2859]={d="l"}, + [0x285A]={d="l"}, + [0x285B]={d="l"}, + [0x285C]={d="l"}, + [0x285D]={d="l"}, + [0x285E]={d="l"}, + [0x285F]={d="l"}, + [0x2860]={d="l"}, + [0x2861]={d="l"}, + [0x2862]={d="l"}, + [0x2863]={d="l"}, + [0x2864]={d="l"}, + [0x2865]={d="l"}, + [0x2866]={d="l"}, + [0x2867]={d="l"}, + [0x2868]={d="l"}, + [0x2869]={d="l"}, + [0x286A]={d="l"}, + [0x286B]={d="l"}, + [0x286C]={d="l"}, + [0x286D]={d="l"}, + [0x286E]={d="l"}, + [0x286F]={d="l"}, + [0x2870]={d="l"}, + [0x2871]={d="l"}, + [0x2872]={d="l"}, + [0x2873]={d="l"}, + [0x2874]={d="l"}, + [0x2875]={d="l"}, + [0x2876]={d="l"}, + [0x2877]={d="l"}, + [0x2878]={d="l"}, + [0x2879]={d="l"}, + [0x287A]={d="l"}, + [0x287B]={d="l"}, + [0x287C]={d="l"}, + [0x287D]={d="l"}, + [0x287E]={d="l"}, + [0x287F]={d="l"}, + [0x2880]={d="l"}, + [0x2881]={d="l"}, + [0x2882]={d="l"}, + [0x2883]={d="l"}, + [0x2884]={d="l"}, + [0x2885]={d="l"}, + [0x2886]={d="l"}, + [0x2887]={d="l"}, + [0x2888]={d="l"}, + [0x2889]={d="l"}, + [0x288A]={d="l"}, + [0x288B]={d="l"}, + [0x288C]={d="l"}, + [0x288D]={d="l"}, + [0x288E]={d="l"}, + [0x288F]={d="l"}, + [0x2890]={d="l"}, + [0x2891]={d="l"}, + [0x2892]={d="l"}, + [0x2893]={d="l"}, + [0x2894]={d="l"}, + [0x2895]={d="l"}, + [0x2896]={d="l"}, + [0x2897]={d="l"}, + [0x2898]={d="l"}, + [0x2899]={d="l"}, + [0x289A]={d="l"}, + [0x289B]={d="l"}, + [0x289C]={d="l"}, + [0x289D]={d="l"}, + [0x289E]={d="l"}, + [0x289F]={d="l"}, + [0x28A0]={d="l"}, + [0x28A1]={d="l"}, + [0x28A2]={d="l"}, + [0x28A3]={d="l"}, + [0x28A4]={d="l"}, + [0x28A5]={d="l"}, + [0x28A6]={d="l"}, + [0x28A7]={d="l"}, + [0x28A8]={d="l"}, + [0x28A9]={d="l"}, + [0x28AA]={d="l"}, + [0x28AB]={d="l"}, + [0x28AC]={d="l"}, + [0x28AD]={d="l"}, + [0x28AE]={d="l"}, + [0x28AF]={d="l"}, + [0x28B0]={d="l"}, + [0x28B1]={d="l"}, + [0x28B2]={d="l"}, + [0x28B3]={d="l"}, + [0x28B4]={d="l"}, + [0x28B5]={d="l"}, + [0x28B6]={d="l"}, + [0x28B7]={d="l"}, + [0x28B8]={d="l"}, + [0x28B9]={d="l"}, + [0x28BA]={d="l"}, + [0x28BB]={d="l"}, + [0x28BC]={d="l"}, + [0x28BD]={d="l"}, + [0x28BE]={d="l"}, + [0x28BF]={d="l"}, + [0x28C0]={d="l"}, + [0x28C1]={d="l"}, + [0x28C2]={d="l"}, + [0x28C3]={d="l"}, + [0x28C4]={d="l"}, + [0x28C5]={d="l"}, + [0x28C6]={d="l"}, + [0x28C7]={d="l"}, + [0x28C8]={d="l"}, + [0x28C9]={d="l"}, + [0x28CA]={d="l"}, + [0x28CB]={d="l"}, + [0x28CC]={d="l"}, + [0x28CD]={d="l"}, + [0x28CE]={d="l"}, + [0x28CF]={d="l"}, + [0x28D0]={d="l"}, + [0x28D1]={d="l"}, + [0x28D2]={d="l"}, + [0x28D3]={d="l"}, + [0x28D4]={d="l"}, + [0x28D5]={d="l"}, + [0x28D6]={d="l"}, + [0x28D7]={d="l"}, + [0x28D8]={d="l"}, + [0x28D9]={d="l"}, + [0x28DA]={d="l"}, + [0x28DB]={d="l"}, + [0x28DC]={d="l"}, + [0x28DD]={d="l"}, + [0x28DE]={d="l"}, + [0x28DF]={d="l"}, + [0x28E0]={d="l"}, + [0x28E1]={d="l"}, + [0x28E2]={d="l"}, + [0x28E3]={d="l"}, + [0x28E4]={d="l"}, + [0x28E5]={d="l"}, + [0x28E6]={d="l"}, + [0x28E7]={d="l"}, + [0x28E8]={d="l"}, + [0x28E9]={d="l"}, + [0x28EA]={d="l"}, + [0x28EB]={d="l"}, + [0x28EC]={d="l"}, + [0x28ED]={d="l"}, + [0x28EE]={d="l"}, + [0x28EF]={d="l"}, + [0x28F0]={d="l"}, + [0x28F1]={d="l"}, + [0x28F2]={d="l"}, + [0x28F3]={d="l"}, + [0x28F4]={d="l"}, + [0x28F5]={d="l"}, + [0x28F6]={d="l"}, + [0x28F7]={d="l"}, + [0x28F8]={d="l"}, + [0x28F9]={d="l"}, + [0x28FA]={d="l"}, + [0x28FB]={d="l"}, + [0x28FC]={d="l"}, + [0x28FD]={d="l"}, + [0x28FE]={d="l"}, + [0x28FF]={d="l"}, + [0x2900]={d="on"}, + [0x2901]={d="on"}, + [0x2902]={d="on"}, + [0x2903]={d="on"}, + [0x2904]={d="on"}, + [0x2905]={d="on"}, + [0x2906]={d="on"}, + [0x2907]={d="on"}, + [0x2908]={d="on"}, + [0x2909]={d="on"}, + [0x290A]={d="on"}, + [0x290B]={d="on"}, + [0x290C]={d="on"}, + [0x290D]={d="on"}, + [0x290E]={d="on"}, + [0x290F]={d="on"}, + [0x2910]={d="on"}, + [0x2911]={d="on"}, + [0x2912]={d="on"}, + [0x2913]={d="on"}, + [0x2914]={d="on"}, + [0x2915]={d="on"}, + [0x2916]={d="on"}, + [0x2917]={d="on"}, + [0x2918]={d="on"}, + [0x2919]={d="on"}, + [0x291A]={d="on"}, + [0x291B]={d="on"}, + [0x291C]={d="on"}, + [0x291D]={d="on"}, + [0x291E]={d="on"}, + [0x291F]={d="on"}, + [0x2920]={d="on"}, + [0x2921]={d="on"}, + [0x2922]={d="on"}, + [0x2923]={d="on"}, + [0x2924]={d="on"}, + [0x2925]={d="on"}, + [0x2926]={d="on"}, + [0x2927]={d="on"}, + [0x2928]={d="on"}, + [0x2929]={d="on"}, + [0x292A]={d="on"}, + [0x292B]={d="on"}, + [0x292C]={d="on"}, + [0x292D]={d="on"}, + [0x292E]={d="on"}, + [0x292F]={d="on"}, + [0x2930]={d="on"}, + [0x2931]={d="on"}, + [0x2932]={d="on"}, + [0x2933]={d="on"}, + [0x2934]={d="on"}, + [0x2935]={d="on"}, + [0x2936]={d="on"}, + [0x2937]={d="on"}, + [0x2938]={d="on"}, + [0x2939]={d="on"}, + [0x293A]={d="on"}, + [0x293B]={d="on"}, + [0x293C]={d="on"}, + [0x293D]={d="on"}, + [0x293E]={d="on"}, + [0x293F]={d="on"}, + [0x2940]={d="on"}, + [0x2941]={d="on"}, + [0x2942]={d="on"}, + [0x2943]={d="on"}, + [0x2944]={d="on"}, + [0x2945]={d="on"}, + [0x2946]={d="on"}, + [0x2947]={d="on"}, + [0x2948]={d="on"}, + [0x2949]={d="on"}, + [0x294A]={d="on"}, + [0x294B]={d="on"}, + [0x294C]={d="on"}, + [0x294D]={d="on"}, + [0x294E]={d="on"}, + [0x294F]={d="on"}, + [0x2950]={d="on"}, + [0x2951]={d="on"}, + [0x2952]={d="on"}, + [0x2953]={d="on"}, + [0x2954]={d="on"}, + [0x2955]={d="on"}, + [0x2956]={d="on"}, + [0x2957]={d="on"}, + [0x2958]={d="on"}, + [0x2959]={d="on"}, + [0x295A]={d="on"}, + [0x295B]={d="on"}, + [0x295C]={d="on"}, + [0x295D]={d="on"}, + [0x295E]={d="on"}, + [0x295F]={d="on"}, + [0x2960]={d="on"}, + [0x2961]={d="on"}, + [0x2962]={d="on"}, + [0x2963]={d="on"}, + [0x2964]={d="on"}, + [0x2965]={d="on"}, + [0x2966]={d="on"}, + [0x2967]={d="on"}, + [0x2968]={d="on"}, + [0x2969]={d="on"}, + [0x296A]={d="on"}, + [0x296B]={d="on"}, + [0x296C]={d="on"}, + [0x296D]={d="on"}, + [0x296E]={d="on"}, + [0x296F]={d="on"}, + [0x2970]={d="on"}, + [0x2971]={d="on"}, + [0x2972]={d="on"}, + [0x2973]={d="on"}, + [0x2974]={d="on"}, + [0x2975]={d="on"}, + [0x2976]={d="on"}, + [0x2977]={d="on"}, + [0x2978]={d="on"}, + [0x2979]={d="on"}, + [0x297A]={d="on"}, + [0x297B]={d="on"}, + [0x297C]={d="on"}, + [0x297D]={d="on"}, + [0x297E]={d="on"}, + [0x297F]={d="on"}, + [0x2980]={d="on"}, + [0x2981]={d="on"}, + [0x2982]={d="on"}, + [0x2983]={d="on", + m=0x2984}, + [0x2984]={d="on", + m=0x2983}, + [0x2985]={d="on", + m=0x2986}, + [0x2986]={d="on", + m=0x2985}, + [0x2987]={d="on", + m=0x2988}, + [0x2988]={d="on", + m=0x2987}, + [0x2989]={d="on", + m=0x298A}, + [0x298A]={d="on", + m=0x2989}, + [0x298B]={d="on", + m=0x298C}, + [0x298C]={d="on", + m=0x298B}, + [0x298D]={d="on", + m=0x2990}, + [0x298E]={d="on", + m=0x298F}, + [0x298F]={d="on", + m=0x298E}, + [0x2990]={d="on", + m=0x298D}, + [0x2991]={d="on", + m=0x2992}, + [0x2992]={d="on", + m=0x2991}, + [0x2993]={d="on", + m=0x2994}, + [0x2994]={d="on", + m=0x2993}, + [0x2995]={d="on", + m=0x2996}, + [0x2996]={d="on", + m=0x2995}, + [0x2997]={d="on", + m=0x2998, + tc="open"}, + [0x2998]={d="on", + m=0x2997, + tc="close"}, + [0x2999]={d="on"}, + [0x299A]={d="on"}, + [0x299B]={d="on", + m=0x2221}, + [0x299C]={d="on"}, + [0x299D]={d="on"}, + [0x299E]={d="on"}, + [0x299F]={d="on"}, + [0x29A0]={d="on", + m=0x2222}, + [0x29A1]={d="on"}, + [0x29A2]={d="on"}, + [0x29A3]={d="on", + m=0x2220}, + [0x29A4]={d="on", + m=0x29A5}, + [0x29A5]={d="on", + m=0x29A4}, + [0x29A6]={d="on"}, + [0x29A7]={d="on"}, + [0x29A8]={d="on", + m=0x29A9}, + [0x29A9]={d="on", + m=0x29A8}, + [0x29AA]={d="on", + m=0x29AB}, + [0x29AB]={d="on", + m=0x29AA}, + [0x29AC]={d="on", + m=0x29AD}, + [0x29AD]={d="on", + m=0x29AC}, + [0x29AE]={d="on", + m=0x29AF}, + [0x29AF]={d="on", + m=0x29AE}, + [0x29B0]={d="on"}, + [0x29B1]={d="on"}, + [0x29B2]={d="on"}, + [0x29B3]={d="on"}, + [0x29B4]={d="on"}, + [0x29B5]={d="on"}, + [0x29B6]={d="on"}, + [0x29B7]={d="on"}, + [0x29B8]={d="on", + m=0x2298}, + [0x29B9]={d="on"}, + [0x29BA]={d="on"}, + [0x29BB]={d="on"}, + [0x29BC]={d="on"}, + [0x29BD]={d="on"}, + [0x29BE]={d="on"}, + [0x29BF]={d="on"}, + [0x29C0]={d="on", + m=0x29C1}, + [0x29C1]={d="on", + m=0x29C0}, + [0x29C2]={d="on"}, + [0x29C3]={d="on"}, + [0x29C4]={d="on", + m=0x29C5}, + [0x29C5]={d="on", + m=0x29C4}, + [0x29C6]={d="on"}, + [0x29C7]={d="on"}, + [0x29C8]={d="on"}, + [0x29C9]={d="on"}, + [0x29CA]={d="on"}, + [0x29CB]={d="on"}, + [0x29CC]={d="on"}, + [0x29CD]={d="on"}, + [0x29CE]={d="on"}, + [0x29CF]={d="on", + m=0x29D0}, + [0x29D0]={d="on", + m=0x29CF}, + [0x29D1]={d="on", + m=0x29D2}, + [0x29D2]={d="on", + m=0x29D1}, + [0x29D3]={d="on"}, + [0x29D4]={d="on", + m=0x29D5}, + [0x29D5]={d="on", + m=0x29D4}, + [0x29D6]={d="on"}, + [0x29D7]={d="on"}, + [0x29D8]={d="on", + m=0x29D9}, + [0x29D9]={d="on", + m=0x29D8}, + [0x29DA]={d="on", + m=0x29DB}, + [0x29DB]={d="on", + m=0x29DA}, + [0x29DC]={d="on"}, + [0x29DD]={d="on"}, + [0x29DE]={d="on"}, + [0x29DF]={d="on"}, + [0x29E0]={d="on"}, + [0x29E1]={d="on"}, + [0x29E2]={d="on"}, + [0x29E3]={d="on"}, + [0x29E4]={d="on"}, + [0x29E5]={d="on"}, + [0x29E6]={d="on"}, + [0x29E7]={d="on"}, + [0x29E8]={d="on", + m=0x29E9}, + [0x29E9]={d="on", + m=0x29E8}, + [0x29EA]={d="on"}, + [0x29EB]={d="on"}, + [0x29EC]={d="on"}, + [0x29ED]={d="on"}, + [0x29EE]={d="on"}, + [0x29EF]={d="on"}, + [0x29F0]={d="on"}, + [0x29F1]={d="on"}, + [0x29F2]={d="on"}, + [0x29F3]={d="on"}, + [0x29F4]={d="on"}, + [0x29F5]={d="on", + m=0x2215}, + [0x29F6]={d="on"}, + [0x29F7]={d="on"}, + [0x29F8]={d="on", + m=0x29F9}, + [0x29F9]={d="on", + m=0x29F8}, + [0x29FA]={d="on"}, + [0x29FB]={d="on"}, + [0x29FC]={d="on", + m=0x29FD}, + [0x29FD]={d="on", + m=0x29FC}, + [0x29FE]={d="on"}, + [0x29FF]={d="on"}, + [0x2A00]={d="on"}, + [0x2A01]={d="on"}, + [0x2A02]={d="on"}, + [0x2A03]={d="on"}, + [0x2A04]={d="on"}, + [0x2A05]={d="on"}, + [0x2A06]={d="on"}, + [0x2A07]={d="on"}, + [0x2A08]={d="on"}, + [0x2A09]={d="on"}, + [0x2A0A]={d="on"}, + [0x2A0B]={d="on"}, + [0x2A0C]={d="on"}, + [0x2A0D]={d="on"}, + [0x2A0E]={d="on"}, + [0x2A0F]={d="on"}, + [0x2A10]={d="on"}, + [0x2A11]={d="on"}, + [0x2A12]={d="on"}, + [0x2A13]={d="on"}, + [0x2A14]={d="on"}, + [0x2A15]={d="on"}, + [0x2A16]={d="on"}, + [0x2A17]={d="on"}, + [0x2A18]={d="on"}, + [0x2A19]={d="on"}, + [0x2A1A]={d="on"}, + [0x2A1B]={d="on"}, + [0x2A1C]={d="on"}, + [0x2A1D]={d="on"}, + [0x2A1E]={d="on"}, + [0x2A1F]={d="on"}, + [0x2A20]={d="on"}, + [0x2A21]={d="on"}, + [0x2A22]={d="on"}, + [0x2A23]={d="on"}, + [0x2A24]={d="on"}, + [0x2A25]={d="on"}, + [0x2A26]={d="on"}, + [0x2A27]={d="on"}, + [0x2A28]={d="on"}, + [0x2A29]={d="on"}, + [0x2A2A]={d="on"}, + [0x2A2B]={d="on", + m=0x2A2C}, + [0x2A2C]={d="on", + m=0x2A2B}, + [0x2A2D]={d="on", + m=0x2A2E}, + [0x2A2E]={d="on", + m=0x2A2D}, + [0x2A2F]={d="on"}, + [0x2A30]={d="on"}, + [0x2A31]={d="on"}, + [0x2A32]={d="on"}, + [0x2A33]={d="on"}, + [0x2A34]={d="on", + m=0x2A35}, + [0x2A35]={d="on", + m=0x2A34}, + [0x2A36]={d="on"}, + [0x2A37]={d="on"}, + [0x2A38]={d="on"}, + [0x2A39]={d="on"}, + [0x2A3A]={d="on"}, + [0x2A3B]={d="on"}, + [0x2A3C]={d="on", + m=0x2A3D}, + [0x2A3D]={d="on", + m=0x2A3C}, + [0x2A3E]={d="on"}, + [0x2A3F]={d="on"}, + [0x2A40]={d="on"}, + [0x2A41]={d="on"}, + [0x2A42]={d="on"}, + [0x2A43]={d="on"}, + [0x2A44]={d="on"}, + [0x2A45]={d="on"}, + [0x2A46]={d="on"}, + [0x2A47]={d="on"}, + [0x2A48]={d="on"}, + [0x2A49]={d="on"}, + [0x2A4A]={d="on"}, + [0x2A4B]={d="on"}, + [0x2A4C]={d="on"}, + [0x2A4D]={d="on"}, + [0x2A4E]={d="on"}, + [0x2A4F]={d="on"}, + [0x2A50]={d="on"}, + [0x2A51]={d="on"}, + [0x2A52]={d="on"}, + [0x2A53]={d="on"}, + [0x2A54]={d="on"}, + [0x2A55]={d="on"}, + [0x2A56]={d="on"}, + [0x2A57]={d="on"}, + [0x2A58]={d="on"}, + [0x2A59]={d="on"}, + [0x2A5A]={d="on"}, + [0x2A5B]={d="on"}, + [0x2A5C]={d="on"}, + [0x2A5D]={d="on"}, + [0x2A5E]={d="on"}, + [0x2A5F]={d="on"}, + [0x2A60]={d="on"}, + [0x2A61]={d="on"}, + [0x2A62]={d="on"}, + [0x2A63]={d="on"}, + [0x2A64]={d="on", + m=0x2A65}, + [0x2A65]={d="on", + m=0x2A64}, + [0x2A66]={d="on"}, + [0x2A67]={d="on"}, + [0x2A68]={d="on"}, + [0x2A69]={d="on"}, + [0x2A6A]={d="on"}, + [0x2A6B]={d="on"}, + [0x2A6C]={d="on"}, + [0x2A6D]={d="on"}, + [0x2A6E]={d="on"}, + [0x2A6F]={d="on"}, + [0x2A70]={d="on"}, + [0x2A71]={d="on"}, + [0x2A72]={d="on"}, + [0x2A73]={d="on"}, + [0x2A74]={d="on"}, + [0x2A75]={d="on"}, + [0x2A76]={d="on"}, + [0x2A77]={d="on"}, + [0x2A78]={d="on"}, + [0x2A79]={d="on", + m=0x2A7A}, + [0x2A7A]={d="on", + m=0x2A79}, + [0x2A7B]={d="on", + m=0x2A7C}, + [0x2A7C]={d="on", + m=0x2A7B}, + [0x2A7D]={d="on", + m=0x2A7E}, + [0x2A7E]={d="on", + m=0x2A7D}, + [0x2A7F]={d="on", + m=0x2A80}, + [0x2A80]={d="on", + m=0x2A7F}, + [0x2A81]={d="on", + m=0x2A82}, + [0x2A82]={d="on", + m=0x2A81}, + [0x2A83]={d="on", + m=0x2A84}, + [0x2A84]={d="on", + m=0x2A83}, + [0x2A85]={d="on", + m=0x2A86}, + [0x2A86]={d="on", + m=0x2A85}, + [0x2A87]={d="on", + m=0x2A88}, + [0x2A88]={d="on", + m=0x2A87}, + [0x2A89]={d="on", + m=0x2A8A}, + [0x2A8A]={d="on", + m=0x2A89}, + [0x2A8B]={d="on", + m=0x2A8C}, + [0x2A8C]={d="on", + m=0x2A8B}, + [0x2A8D]={d="on", + m=0x2A8E}, + [0x2A8E]={d="on", + m=0x2A8D}, + [0x2A8F]={d="on", + m=0x2A90}, + [0x2A90]={d="on", + m=0x2A8F}, + [0x2A91]={d="on", + m=0x2A92}, + [0x2A92]={d="on", + m=0x2A91}, + [0x2A93]={d="on", + m=0x2A94}, + [0x2A94]={d="on", + m=0x2A93}, + [0x2A95]={d="on", + m=0x2A96}, + [0x2A96]={d="on", + m=0x2A95}, + [0x2A97]={d="on", + m=0x2A98}, + [0x2A98]={d="on", + m=0x2A97}, + [0x2A99]={d="on", + m=0x2A9A}, + [0x2A9A]={d="on", + m=0x2A99}, + [0x2A9B]={d="on", + m=0x2A9C}, + [0x2A9C]={d="on", + m=0x2A9B}, + [0x2A9D]={d="on", + m=0x2A9E}, + [0x2A9E]={d="on", + m=0x2A9D}, + [0x2A9F]={d="on", + m=0x2AA0}, + [0x2AA0]={d="on", + m=0x2A9F}, + [0x2AA1]={d="on", + m=0x2AA2}, + [0x2AA2]={d="on", + m=0x2AA1}, + [0x2AA3]={d="on"}, + [0x2AA4]={d="on"}, + [0x2AA5]={d="on"}, + [0x2AA6]={d="on", + m=0x2AA7}, + [0x2AA7]={d="on", + m=0x2AA6}, + [0x2AA8]={d="on", + m=0x2AA9}, + [0x2AA9]={d="on", + m=0x2AA8}, + [0x2AAA]={d="on", + m=0x2AAB}, + [0x2AAB]={d="on", + m=0x2AAA}, + [0x2AAC]={d="on", + m=0x2AAD}, + [0x2AAD]={d="on", + m=0x2AAC}, + [0x2AAE]={d="on"}, + [0x2AAF]={d="on", + m=0x2AB0}, + [0x2AB0]={d="on", + m=0x2AAF}, + [0x2AB1]={d="on", + m=0x2AB2}, + [0x2AB2]={d="on", + m=0x2AB1}, + [0x2AB3]={d="on", + m=0x2AB4}, + [0x2AB4]={d="on", + m=0x2AB3}, + [0x2AB5]={d="on", + m=0x2AB6}, + [0x2AB6]={d="on", + m=0x2AB5}, + [0x2AB7]={d="on", + m=0x2AB8}, + [0x2AB8]={d="on", + m=0x2AB7}, + [0x2AB9]={d="on", + m=0x2ABA}, + [0x2ABA]={d="on", + m=0x2AB9}, + [0x2ABB]={d="on", + m=0x2ABC}, + [0x2ABC]={d="on", + m=0x2ABB}, + [0x2ABD]={d="on", + m=0x2ABE}, + [0x2ABE]={d="on", + m=0x2ABD}, + [0x2ABF]={d="on", + m=0x2AC0}, + [0x2AC0]={d="on", + m=0x2ABF}, + [0x2AC1]={d="on", + m=0x2AC2}, + [0x2AC2]={d="on", + m=0x2AC1}, + [0x2AC3]={d="on", + m=0x2AC4}, + [0x2AC4]={d="on", + m=0x2AC3}, + [0x2AC5]={d="on", + m=0x2AC6}, + [0x2AC6]={d="on", + m=0x2AC5}, + [0x2AC7]={d="on", + m=0x2AC8}, + [0x2AC8]={d="on", + m=0x2AC7}, + [0x2AC9]={d="on", + m=0x2ACA}, + [0x2ACA]={d="on", + m=0x2AC9}, + [0x2ACB]={d="on", + m=0x2ACC}, + [0x2ACC]={d="on", + m=0x2ACB}, + [0x2ACD]={d="on", + m=0x2ACE}, + [0x2ACE]={d="on", + m=0x2ACD}, + [0x2ACF]={d="on", + m=0x2AD0}, + [0x2AD0]={d="on", + m=0x2ACF}, + [0x2AD1]={d="on", + m=0x2AD2}, + [0x2AD2]={d="on", + m=0x2AD1}, + [0x2AD3]={d="on", + m=0x2AD4}, + [0x2AD4]={d="on", + m=0x2AD3}, + [0x2AD5]={d="on", + m=0x2AD6}, + [0x2AD6]={d="on", + m=0x2AD5}, + [0x2AD7]={d="on"}, + [0x2AD8]={d="on"}, + [0x2AD9]={d="on"}, + [0x2ADA]={d="on"}, + [0x2ADB]={d="on"}, + [0x2ADC]={d="on"}, + [0x2ADD]={d="on"}, + [0x2ADE]={d="on", + m=0x22A6}, + [0x2ADF]={d="on"}, + [0x2AE0]={d="on"}, + [0x2AE1]={d="on"}, + [0x2AE2]={d="on"}, + [0x2AE3]={d="on", + m=0x22A9}, + [0x2AE4]={d="on", + m=0x22A8}, + [0x2AE5]={d="on", + m=0x22AB}, + [0x2AE6]={d="on"}, + [0x2AE7]={d="on"}, + [0x2AE8]={d="on"}, + [0x2AE9]={d="on"}, + [0x2AEA]={d="on"}, + [0x2AEB]={d="on"}, + [0x2AEC]={d="on", + m=0x2AED}, + [0x2AED]={d="on", + m=0x2AEC}, + [0x2AEE]={d="on", + m=0x2224}, + [0x2AEF]={d="on"}, + [0x2AF0]={d="on"}, + [0x2AF1]={d="on"}, + [0x2AF2]={d="on"}, + [0x2AF3]={d="on"}, + [0x2AF4]={d="on"}, + [0x2AF5]={d="on"}, + [0x2AF6]={d="on"}, + [0x2AF7]={d="on", + m=0x2AF8}, + [0x2AF8]={d="on", + m=0x2AF7}, + [0x2AF9]={d="on", + m=0x2AFA}, + [0x2AFA]={d="on", + m=0x2AF9}, + [0x2AFB]={d="on"}, + [0x2AFC]={d="on"}, + [0x2AFD]={d="on"}, + [0x2AFE]={d="on"}, + [0x2AFF]={d="on"}, + [0x2B00]={d="on"}, + [0x2B01]={d="on"}, + [0x2B02]={d="on"}, + [0x2B03]={d="on"}, + [0x2B04]={d="on"}, + [0x2B05]={d="on"}, + [0x2B06]={d="on"}, + [0x2B07]={d="on"}, + [0x2B08]={d="on"}, + [0x2B09]={d="on"}, + [0x2B0A]={d="on"}, + [0x2B0B]={d="on"}, + [0x2B0C]={d="on"}, + [0x2B0D]={d="on"}, + [0x2B0E]={d="on"}, + [0x2B0F]={d="on"}, + [0x2B10]={d="on"}, + [0x2B11]={d="on"}, + [0x2B12]={d="on"}, + [0x2B13]={d="on"}, + [0x2B14]={d="on"}, + [0x2B15]={d="on"}, + [0x2B16]={d="on"}, + [0x2B17]={d="on"}, + [0x2B18]={d="on"}, + [0x2B19]={d="on"}, + [0x2B1A]={d="on"}, + [0x2B1B]={d="on"}, + [0x2B1C]={d="on"}, + [0x2B1D]={d="on"}, + [0x2B1E]={d="on"}, + [0x2B1F]={d="on"}, + [0x2B20]={d="on"}, + [0x2B21]={d="on"}, + [0x2B22]={d="on"}, + [0x2B23]={d="on"}, + [0x2B24]={d="on"}, + [0x2B25]={d="on"}, + [0x2B26]={d="on"}, + [0x2B27]={d="on"}, + [0x2B28]={d="on"}, + [0x2B29]={d="on"}, + [0x2B2A]={d="on"}, + [0x2B2B]={d="on"}, + [0x2B2C]={d="on"}, + [0x2B2D]={d="on"}, + [0x2B2E]={d="on"}, + [0x2B2F]={d="on"}, + [0x2B30]={d="on"}, + [0x2B31]={d="on"}, + [0x2B32]={d="on"}, + [0x2B33]={d="on"}, + [0x2B34]={d="on"}, + [0x2B35]={d="on"}, + [0x2B36]={d="on"}, + [0x2B37]={d="on"}, + [0x2B38]={d="on"}, + [0x2B39]={d="on"}, + [0x2B3A]={d="on"}, + [0x2B3B]={d="on"}, + [0x2B3C]={d="on"}, + [0x2B3D]={d="on"}, + [0x2B3E]={d="on"}, + [0x2B3F]={d="on"}, + [0x2B40]={d="on"}, + [0x2B41]={d="on"}, + [0x2B42]={d="on"}, + [0x2B43]={d="on"}, + [0x2B44]={d="on"}, + [0x2B45]={d="on"}, + [0x2B46]={d="on"}, + [0x2B47]={d="on"}, + [0x2B48]={d="on"}, + [0x2B49]={d="on"}, + [0x2B4A]={d="on"}, + [0x2B4B]={d="on"}, + [0x2B4C]={d="on"}, + [0x2B4D]={d="on"}, + [0x2B4E]={d="on"}, + [0x2B4F]={d="on"}, + [0x2B50]={d="on"}, + [0x2B51]={d="on"}, + [0x2B52]={d="on"}, + [0x2B53]={d="on"}, + [0x2B54]={d="on"}, + [0x2B55]={d="on"}, + [0x2B56]={d="on"}, + [0x2B57]={d="on"}, + [0x2B58]={d="on"}, + [0x2B59]={d="on"}, + [0x2B5A]={d="on"}, + [0x2B5B]={d="on"}, + [0x2B5C]={d="on"}, + [0x2B5D]={d="on"}, + [0x2B5E]={d="on"}, + [0x2B5F]={d="on"}, + [0x2B60]={d="on"}, + [0x2B61]={d="on"}, + [0x2B62]={d="on"}, + [0x2B63]={d="on"}, + [0x2B64]={d="on"}, + [0x2B65]={d="on"}, + [0x2B66]={d="on"}, + [0x2B67]={d="on"}, + [0x2B68]={d="on"}, + [0x2B69]={d="on"}, + [0x2B6A]={d="on"}, + [0x2B6B]={d="on"}, + [0x2B6C]={d="on"}, + [0x2B6D]={d="on"}, + [0x2B6E]={d="on"}, + [0x2B6F]={d="on"}, + [0x2B70]={d="on"}, + [0x2B71]={d="on"}, + [0x2B72]={d="on"}, + [0x2B73]={d="on"}, + [0x2B76]={d="on"}, + [0x2B77]={d="on"}, + [0x2B78]={d="on"}, + [0x2B79]={d="on"}, + [0x2B7A]={d="on"}, + [0x2B7B]={d="on"}, + [0x2B7C]={d="on"}, + [0x2B7D]={d="on"}, + [0x2B7E]={d="on"}, + [0x2B7F]={d="on"}, + [0x2B80]={d="on"}, + [0x2B81]={d="on"}, + [0x2B82]={d="on"}, + [0x2B83]={d="on"}, + [0x2B84]={d="on"}, + [0x2B85]={d="on"}, + [0x2B86]={d="on"}, + [0x2B87]={d="on"}, + [0x2B88]={d="on"}, + [0x2B89]={d="on"}, + [0x2B8A]={d="on"}, + [0x2B8B]={d="on"}, + [0x2B8C]={d="on"}, + [0x2B8D]={d="on"}, + [0x2B8E]={d="on"}, + [0x2B8F]={d="on"}, + [0x2B90]={d="on"}, + [0x2B91]={d="on"}, + [0x2B92]={d="on"}, + [0x2B93]={d="on"}, + [0x2B94]={d="on"}, + [0x2B95]={d="on"}, + [0x2B97]={d="on"}, + [0x2B98]={d="on"}, + [0x2B99]={d="on"}, + [0x2B9A]={d="on"}, + [0x2B9B]={d="on"}, + [0x2B9C]={d="on"}, + [0x2B9D]={d="on"}, + [0x2B9E]={d="on"}, + [0x2B9F]={d="on"}, + [0x2BA0]={d="on"}, + [0x2BA1]={d="on"}, + [0x2BA2]={d="on"}, + [0x2BA3]={d="on"}, + [0x2BA4]={d="on"}, + [0x2BA5]={d="on"}, + [0x2BA6]={d="on"}, + [0x2BA7]={d="on"}, + [0x2BA8]={d="on"}, + [0x2BA9]={d="on"}, + [0x2BAA]={d="on"}, + [0x2BAB]={d="on"}, + [0x2BAC]={d="on"}, + [0x2BAD]={d="on"}, + [0x2BAE]={d="on"}, + [0x2BAF]={d="on"}, + [0x2BB0]={d="on"}, + [0x2BB1]={d="on"}, + [0x2BB2]={d="on"}, + [0x2BB3]={d="on"}, + [0x2BB4]={d="on"}, + [0x2BB5]={d="on"}, + [0x2BB6]={d="on"}, + [0x2BB7]={d="on"}, + [0x2BB8]={d="on"}, + [0x2BB9]={d="on"}, + [0x2BBA]={d="on"}, + [0x2BBB]={d="on"}, + [0x2BBC]={d="on"}, + [0x2BBD]={d="on"}, + [0x2BBE]={d="on"}, + [0x2BBF]={d="on"}, + [0x2BC0]={d="on"}, + [0x2BC1]={d="on"}, + [0x2BC2]={d="on"}, + [0x2BC3]={d="on"}, + [0x2BC4]={d="on"}, + [0x2BC5]={d="on"}, + [0x2BC6]={d="on"}, + [0x2BC7]={d="on"}, + [0x2BC8]={d="on"}, + [0x2BC9]={d="on"}, + [0x2BCA]={d="on"}, + [0x2BCB]={d="on"}, + [0x2BCC]={d="on"}, + [0x2BCD]={d="on"}, + [0x2BCE]={d="on"}, + [0x2BCF]={d="on"}, + [0x2BD0]={d="on"}, + [0x2BD1]={d="on"}, + [0x2BD2]={d="on"}, + [0x2BD3]={d="on"}, + [0x2BD4]={d="on"}, + [0x2BD5]={d="on"}, + [0x2BD6]={d="on"}, + [0x2BD7]={d="on"}, + [0x2BD8]={d="on"}, + [0x2BD9]={d="on"}, + [0x2BDA]={d="on"}, + [0x2BDB]={d="on"}, + [0x2BDC]={d="on"}, + [0x2BDD]={d="on"}, + [0x2BDE]={d="on"}, + [0x2BDF]={d="on"}, + [0x2BE0]={d="on"}, + [0x2BE1]={d="on"}, + [0x2BE2]={d="on"}, + [0x2BE3]={d="on"}, + [0x2BE4]={d="on"}, + [0x2BE5]={d="on"}, + [0x2BE6]={d="on"}, + [0x2BE7]={d="on"}, + [0x2BE8]={d="on"}, + [0x2BE9]={d="on"}, + [0x2BEA]={d="on"}, + [0x2BEB]={d="on"}, + [0x2BEC]={d="on"}, + [0x2BED]={d="on"}, + [0x2BEE]={d="on"}, + [0x2BEF]={d="on"}, + [0x2BF0]={d="on"}, + [0x2BF1]={d="on"}, + [0x2BF2]={d="on"}, + [0x2BF3]={d="on"}, + [0x2BF4]={d="on"}, + [0x2BF5]={d="on"}, + [0x2BF6]={d="on"}, + [0x2BF7]={d="on"}, + [0x2BF8]={d="on"}, + [0x2BF9]={d="on"}, + [0x2BFA]={d="on"}, + [0x2BFB]={d="on"}, + [0x2BFC]={d="on"}, + [0x2BFD]={d="on"}, + [0x2BFE]={d="on", + m=0x221F}, + [0x2BFF]={d="on"}, + [0x2C00]={d="l"}, + [0x2C01]={d="l"}, + [0x2C02]={d="l"}, + [0x2C03]={d="l"}, + [0x2C04]={d="l"}, + [0x2C05]={d="l"}, + [0x2C06]={d="l"}, + [0x2C07]={d="l"}, + [0x2C08]={d="l"}, + [0x2C09]={d="l"}, + [0x2C0A]={d="l"}, + [0x2C0B]={d="l"}, + [0x2C0C]={d="l"}, + [0x2C0D]={d="l"}, + [0x2C0E]={d="l"}, + [0x2C0F]={d="l"}, + [0x2C10]={d="l"}, + [0x2C11]={d="l"}, + [0x2C12]={d="l"}, + [0x2C13]={d="l"}, + [0x2C14]={d="l"}, + [0x2C15]={d="l"}, + [0x2C16]={d="l"}, + [0x2C17]={d="l"}, + [0x2C18]={d="l"}, + [0x2C19]={d="l"}, + [0x2C1A]={d="l"}, + [0x2C1B]={d="l"}, + [0x2C1C]={d="l"}, + [0x2C1D]={d="l"}, + [0x2C1E]={d="l"}, + [0x2C1F]={d="l"}, + [0x2C20]={d="l"}, + [0x2C21]={d="l"}, + [0x2C22]={d="l"}, + [0x2C23]={d="l"}, + [0x2C24]={d="l"}, + [0x2C25]={d="l"}, + [0x2C26]={d="l"}, + [0x2C27]={d="l"}, + [0x2C28]={d="l"}, + [0x2C29]={d="l"}, + [0x2C2A]={d="l"}, + [0x2C2B]={d="l"}, + [0x2C2C]={d="l"}, + [0x2C2D]={d="l"}, + [0x2C2E]={d="l"}, + [0x2C2F]={d="l"}, + [0x2C30]={d="l"}, + [0x2C31]={d="l"}, + [0x2C32]={d="l"}, + [0x2C33]={d="l"}, + [0x2C34]={d="l"}, + [0x2C35]={d="l"}, + [0x2C36]={d="l"}, + [0x2C37]={d="l"}, + [0x2C38]={d="l"}, + [0x2C39]={d="l"}, + [0x2C3A]={d="l"}, + [0x2C3B]={d="l"}, + [0x2C3C]={d="l"}, + [0x2C3D]={d="l"}, + [0x2C3E]={d="l"}, + [0x2C3F]={d="l"}, + [0x2C40]={d="l"}, + [0x2C41]={d="l"}, + [0x2C42]={d="l"}, + [0x2C43]={d="l"}, + [0x2C44]={d="l"}, + [0x2C45]={d="l"}, + [0x2C46]={d="l"}, + [0x2C47]={d="l"}, + [0x2C48]={d="l"}, + [0x2C49]={d="l"}, + [0x2C4A]={d="l"}, + [0x2C4B]={d="l"}, + [0x2C4C]={d="l"}, + [0x2C4D]={d="l"}, + [0x2C4E]={d="l"}, + [0x2C4F]={d="l"}, + [0x2C50]={d="l"}, + [0x2C51]={d="l"}, + [0x2C52]={d="l"}, + [0x2C53]={d="l"}, + [0x2C54]={d="l"}, + [0x2C55]={d="l"}, + [0x2C56]={d="l"}, + [0x2C57]={d="l"}, + [0x2C58]={d="l"}, + [0x2C59]={d="l"}, + [0x2C5A]={d="l"}, + [0x2C5B]={d="l"}, + [0x2C5C]={d="l"}, + [0x2C5D]={d="l"}, + [0x2C5E]={d="l"}, + [0x2C5F]={d="l"}, + [0x2C60]={d="l"}, + [0x2C61]={d="l"}, + [0x2C62]={d="l"}, + [0x2C63]={d="l"}, + [0x2C64]={d="l"}, + [0x2C65]={d="l"}, + [0x2C66]={d="l"}, + [0x2C67]={d="l"}, + [0x2C68]={d="l"}, + [0x2C69]={d="l"}, + [0x2C6A]={d="l"}, + [0x2C6B]={d="l"}, + [0x2C6C]={d="l"}, + [0x2C6D]={d="l"}, + [0x2C6E]={d="l"}, + [0x2C6F]={d="l"}, + [0x2C70]={d="l"}, + [0x2C71]={d="l"}, + [0x2C72]={d="l"}, + [0x2C73]={d="l"}, + [0x2C74]={d="l"}, + [0x2C75]={d="l"}, + [0x2C76]={d="l"}, + [0x2C77]={d="l"}, + [0x2C78]={d="l"}, + [0x2C79]={d="l"}, + [0x2C7A]={d="l"}, + [0x2C7B]={d="l"}, + [0x2C7C]={d="l"}, + [0x2C7D]={d="l"}, + [0x2C7E]={d="l"}, + [0x2C7F]={d="l"}, + [0x2C80]={d="l"}, + [0x2C81]={d="l"}, + [0x2C82]={d="l"}, + [0x2C83]={d="l"}, + [0x2C84]={d="l"}, + [0x2C85]={d="l"}, + [0x2C86]={d="l"}, + [0x2C87]={d="l"}, + [0x2C88]={d="l"}, + [0x2C89]={d="l"}, + [0x2C8A]={d="l"}, + [0x2C8B]={d="l"}, + [0x2C8C]={d="l"}, + [0x2C8D]={d="l"}, + [0x2C8E]={d="l"}, + [0x2C8F]={d="l"}, + [0x2C90]={d="l"}, + [0x2C91]={d="l"}, + [0x2C92]={d="l"}, + [0x2C93]={d="l"}, + [0x2C94]={d="l"}, + [0x2C95]={d="l"}, + [0x2C96]={d="l"}, + [0x2C97]={d="l"}, + [0x2C98]={d="l"}, + [0x2C99]={d="l"}, + [0x2C9A]={d="l"}, + [0x2C9B]={d="l"}, + [0x2C9C]={d="l"}, + [0x2C9D]={d="l"}, + [0x2C9E]={d="l"}, + [0x2C9F]={d="l"}, + [0x2CA0]={d="l"}, + [0x2CA1]={d="l"}, + [0x2CA2]={d="l"}, + [0x2CA3]={d="l"}, + [0x2CA4]={d="l"}, + [0x2CA5]={d="l"}, + [0x2CA6]={d="l"}, + [0x2CA7]={d="l"}, + [0x2CA8]={d="l"}, + [0x2CA9]={d="l"}, + [0x2CAA]={d="l"}, + [0x2CAB]={d="l"}, + [0x2CAC]={d="l"}, + [0x2CAD]={d="l"}, + [0x2CAE]={d="l"}, + [0x2CAF]={d="l"}, + [0x2CB0]={d="l"}, + [0x2CB1]={d="l"}, + [0x2CB2]={d="l"}, + [0x2CB3]={d="l"}, + [0x2CB4]={d="l"}, + [0x2CB5]={d="l"}, + [0x2CB6]={d="l"}, + [0x2CB7]={d="l"}, + [0x2CB8]={d="l"}, + [0x2CB9]={d="l"}, + [0x2CBA]={d="l"}, + [0x2CBB]={d="l"}, + [0x2CBC]={d="l"}, + [0x2CBD]={d="l"}, + [0x2CBE]={d="l"}, + [0x2CBF]={d="l"}, + [0x2CC0]={d="l"}, + [0x2CC1]={d="l"}, + [0x2CC2]={d="l"}, + [0x2CC3]={d="l"}, + [0x2CC4]={d="l"}, + [0x2CC5]={d="l"}, + [0x2CC6]={d="l"}, + [0x2CC7]={d="l"}, + [0x2CC8]={d="l"}, + [0x2CC9]={d="l"}, + [0x2CCA]={d="l"}, + [0x2CCB]={d="l"}, + [0x2CCC]={d="l"}, + [0x2CCD]={d="l"}, + [0x2CCE]={d="l"}, + [0x2CCF]={d="l"}, + [0x2CD0]={d="l"}, + [0x2CD1]={d="l"}, + [0x2CD2]={d="l"}, + [0x2CD3]={d="l"}, + [0x2CD4]={d="l"}, + [0x2CD5]={d="l"}, + [0x2CD6]={d="l"}, + [0x2CD7]={d="l"}, + [0x2CD8]={d="l"}, + [0x2CD9]={d="l"}, + [0x2CDA]={d="l"}, + [0x2CDB]={d="l"}, + [0x2CDC]={d="l"}, + [0x2CDD]={d="l"}, + [0x2CDE]={d="l"}, + [0x2CDF]={d="l"}, + [0x2CE0]={d="l"}, + [0x2CE1]={d="l"}, + [0x2CE2]={d="l"}, + [0x2CE3]={d="l"}, + [0x2CE4]={d="l"}, + [0x2CE5]={d="on"}, + [0x2CE6]={d="on"}, + [0x2CE7]={d="on"}, + [0x2CE8]={d="on"}, + [0x2CE9]={d="on"}, + [0x2CEA]={d="on"}, + [0x2CEB]={d="l"}, + [0x2CEC]={d="l"}, + [0x2CED]={d="l"}, + [0x2CEE]={d="l"}, + [0x2CEF]={d="nsm"}, + [0x2CF0]={d="nsm"}, + [0x2CF1]={d="nsm"}, + [0x2CF2]={d="l"}, + [0x2CF3]={d="l"}, + [0x2CF9]={d="on"}, + [0x2CFA]={d="on"}, + [0x2CFB]={d="on"}, + [0x2CFC]={d="on"}, + [0x2CFD]={d="on"}, + [0x2CFE]={d="on"}, + [0x2CFF]={d="on"}, + [0x2D00]={d="l"}, + [0x2D01]={d="l"}, + [0x2D02]={d="l"}, + [0x2D03]={d="l"}, + [0x2D04]={d="l"}, + [0x2D05]={d="l"}, + [0x2D06]={d="l"}, + [0x2D07]={d="l"}, + [0x2D08]={d="l"}, + [0x2D09]={d="l"}, + [0x2D0A]={d="l"}, + [0x2D0B]={d="l"}, + [0x2D0C]={d="l"}, + [0x2D0D]={d="l"}, + [0x2D0E]={d="l"}, + [0x2D0F]={d="l"}, + [0x2D10]={d="l"}, + [0x2D11]={d="l"}, + [0x2D12]={d="l"}, + [0x2D13]={d="l"}, + [0x2D14]={d="l"}, + [0x2D15]={d="l"}, + [0x2D16]={d="l"}, + [0x2D17]={d="l"}, + [0x2D18]={d="l"}, + [0x2D19]={d="l"}, + [0x2D1A]={d="l"}, + [0x2D1B]={d="l"}, + [0x2D1C]={d="l"}, + [0x2D1D]={d="l"}, + [0x2D1E]={d="l"}, + [0x2D1F]={d="l"}, + [0x2D20]={d="l"}, + [0x2D21]={d="l"}, + [0x2D22]={d="l"}, + [0x2D23]={d="l"}, + [0x2D24]={d="l"}, + [0x2D25]={d="l"}, + [0x2D27]={d="l"}, + [0x2D2D]={d="l"}, + [0x2D30]={d="l"}, + [0x2D31]={d="l"}, + [0x2D32]={d="l"}, + [0x2D33]={d="l"}, + [0x2D34]={d="l"}, + [0x2D35]={d="l"}, + [0x2D36]={d="l"}, + [0x2D37]={d="l"}, + [0x2D38]={d="l"}, + [0x2D39]={d="l"}, + [0x2D3A]={d="l"}, + [0x2D3B]={d="l"}, + [0x2D3C]={d="l"}, + [0x2D3D]={d="l"}, + [0x2D3E]={d="l"}, + [0x2D3F]={d="l"}, + [0x2D40]={d="l"}, + [0x2D41]={d="l"}, + [0x2D42]={d="l"}, + [0x2D43]={d="l"}, + [0x2D44]={d="l"}, + [0x2D45]={d="l"}, + [0x2D46]={d="l"}, + [0x2D47]={d="l"}, + [0x2D48]={d="l"}, + [0x2D49]={d="l"}, + [0x2D4A]={d="l"}, + [0x2D4B]={d="l"}, + [0x2D4C]={d="l"}, + [0x2D4D]={d="l"}, + [0x2D4E]={d="l"}, + [0x2D4F]={d="l"}, + [0x2D50]={d="l"}, + [0x2D51]={d="l"}, + [0x2D52]={d="l"}, + [0x2D53]={d="l"}, + [0x2D54]={d="l"}, + [0x2D55]={d="l"}, + [0x2D56]={d="l"}, + [0x2D57]={d="l"}, + [0x2D58]={d="l"}, + [0x2D59]={d="l"}, + [0x2D5A]={d="l"}, + [0x2D5B]={d="l"}, + [0x2D5C]={d="l"}, + [0x2D5D]={d="l"}, + [0x2D5E]={d="l"}, + [0x2D5F]={d="l"}, + [0x2D60]={d="l"}, + [0x2D61]={d="l"}, + [0x2D62]={d="l"}, + [0x2D63]={d="l"}, + [0x2D64]={d="l"}, + [0x2D65]={d="l"}, + [0x2D66]={d="l"}, + [0x2D67]={d="l"}, + [0x2D6F]={d="l"}, + [0x2D70]={d="l"}, + [0x2D7F]={d="nsm"}, + [0x2D80]={d="l"}, + [0x2D81]={d="l"}, + [0x2D82]={d="l"}, + [0x2D83]={d="l"}, + [0x2D84]={d="l"}, + [0x2D85]={d="l"}, + [0x2D86]={d="l"}, + [0x2D87]={d="l"}, + [0x2D88]={d="l"}, + [0x2D89]={d="l"}, + [0x2D8A]={d="l"}, + [0x2D8B]={d="l"}, + [0x2D8C]={d="l"}, + [0x2D8D]={d="l"}, + [0x2D8E]={d="l"}, + [0x2D8F]={d="l"}, + [0x2D90]={d="l"}, + [0x2D91]={d="l"}, + [0x2D92]={d="l"}, + [0x2D93]={d="l"}, + [0x2D94]={d="l"}, + [0x2D95]={d="l"}, + [0x2D96]={d="l"}, + [0x2DA0]={d="l"}, + [0x2DA1]={d="l"}, + [0x2DA2]={d="l"}, + [0x2DA3]={d="l"}, + [0x2DA4]={d="l"}, + [0x2DA5]={d="l"}, + [0x2DA6]={d="l"}, + [0x2DA8]={d="l"}, + [0x2DA9]={d="l"}, + [0x2DAA]={d="l"}, + [0x2DAB]={d="l"}, + [0x2DAC]={d="l"}, + [0x2DAD]={d="l"}, + [0x2DAE]={d="l"}, + [0x2DB0]={d="l"}, + [0x2DB1]={d="l"}, + [0x2DB2]={d="l"}, + [0x2DB3]={d="l"}, + [0x2DB4]={d="l"}, + [0x2DB5]={d="l"}, + [0x2DB6]={d="l"}, + [0x2DB8]={d="l"}, + [0x2DB9]={d="l"}, + [0x2DBA]={d="l"}, + [0x2DBB]={d="l"}, + [0x2DBC]={d="l"}, + [0x2DBD]={d="l"}, + [0x2DBE]={d="l"}, + [0x2DC0]={d="l"}, + [0x2DC1]={d="l"}, + [0x2DC2]={d="l"}, + [0x2DC3]={d="l"}, + [0x2DC4]={d="l"}, + [0x2DC5]={d="l"}, + [0x2DC6]={d="l"}, + [0x2DC8]={d="l"}, + [0x2DC9]={d="l"}, + [0x2DCA]={d="l"}, + [0x2DCB]={d="l"}, + [0x2DCC]={d="l"}, + [0x2DCD]={d="l"}, + [0x2DCE]={d="l"}, + [0x2DD0]={d="l"}, + [0x2DD1]={d="l"}, + [0x2DD2]={d="l"}, + [0x2DD3]={d="l"}, + [0x2DD4]={d="l"}, + [0x2DD5]={d="l"}, + [0x2DD6]={d="l"}, + [0x2DD8]={d="l"}, + [0x2DD9]={d="l"}, + [0x2DDA]={d="l"}, + [0x2DDB]={d="l"}, + [0x2DDC]={d="l"}, + [0x2DDD]={d="l"}, + [0x2DDE]={d="l"}, + [0x2DE0]={d="nsm"}, + [0x2DE1]={d="nsm"}, + [0x2DE2]={d="nsm"}, + [0x2DE3]={d="nsm"}, + [0x2DE4]={d="nsm"}, + [0x2DE5]={d="nsm"}, + [0x2DE6]={d="nsm"}, + [0x2DE7]={d="nsm"}, + [0x2DE8]={d="nsm"}, + [0x2DE9]={d="nsm"}, + [0x2DEA]={d="nsm"}, + [0x2DEB]={d="nsm"}, + [0x2DEC]={d="nsm"}, + [0x2DED]={d="nsm"}, + [0x2DEE]={d="nsm"}, + [0x2DEF]={d="nsm"}, + [0x2DF0]={d="nsm"}, + [0x2DF1]={d="nsm"}, + [0x2DF2]={d="nsm"}, + [0x2DF3]={d="nsm"}, + [0x2DF4]={d="nsm"}, + [0x2DF5]={d="nsm"}, + [0x2DF6]={d="nsm"}, + [0x2DF7]={d="nsm"}, + [0x2DF8]={d="nsm"}, + [0x2DF9]={d="nsm"}, + [0x2DFA]={d="nsm"}, + [0x2DFB]={d="nsm"}, + [0x2DFC]={d="nsm"}, + [0x2DFD]={d="nsm"}, + [0x2DFE]={d="nsm"}, + [0x2DFF]={d="nsm"}, + [0x2E00]={d="on"}, + [0x2E01]={d="on"}, + [0x2E02]={d="on", + m=0x2E03}, + [0x2E03]={d="on", + m=0x2E02}, + [0x2E04]={d="on", + m=0x2E05}, + [0x2E05]={d="on", + m=0x2E04}, + [0x2E06]={d="on"}, + [0x2E07]={d="on"}, + [0x2E08]={d="on"}, + [0x2E09]={d="on", + m=0x2E0A}, + [0x2E0A]={d="on", + m=0x2E09}, + [0x2E0B]={d="on"}, + [0x2E0C]={d="on", + m=0x2E0D}, + [0x2E0D]={d="on", + m=0x2E0C}, + [0x2E0E]={d="on"}, + [0x2E0F]={d="on"}, + [0x2E10]={d="on"}, + [0x2E11]={d="on"}, + [0x2E12]={d="on"}, + [0x2E13]={d="on"}, + [0x2E14]={d="on"}, + [0x2E15]={d="on"}, + [0x2E16]={d="on"}, + [0x2E17]={d="on"}, + [0x2E18]={d="on"}, + [0x2E19]={d="on"}, + [0x2E1A]={d="on"}, + [0x2E1B]={d="on"}, + [0x2E1C]={d="on", + m=0x2E1D}, + [0x2E1D]={d="on", + m=0x2E1C}, + [0x2E1E]={d="on"}, + [0x2E1F]={d="on"}, + [0x2E20]={d="on", + m=0x2E21}, + [0x2E21]={d="on", + m=0x2E20}, + [0x2E22]={d="on", + m=0x2E23}, + [0x2E23]={d="on", + m=0x2E22}, + [0x2E24]={d="on", + m=0x2E25}, + [0x2E25]={d="on", + m=0x2E24}, + [0x2E26]={d="on", + m=0x2E27}, + [0x2E27]={d="on", + m=0x2E26}, + [0x2E28]={d="on", + m=0x2E29}, + [0x2E29]={d="on", + m=0x2E28}, + [0x2E2A]={d="on"}, + [0x2E2B]={d="on"}, + [0x2E2C]={d="on"}, + [0x2E2D]={d="on"}, + [0x2E2E]={d="on"}, + [0x2E2F]={d="on"}, + [0x2E30]={d="on"}, + [0x2E31]={d="on"}, + [0x2E32]={d="on"}, + [0x2E33]={d="on"}, + [0x2E34]={d="on"}, + [0x2E35]={d="on"}, + [0x2E36]={d="on"}, + [0x2E37]={d="on"}, + [0x2E38]={d="on"}, + [0x2E39]={d="on"}, + [0x2E3A]={d="on"}, + [0x2E3B]={d="on"}, + [0x2E3C]={d="on"}, + [0x2E3D]={d="on"}, + [0x2E3E]={d="on"}, + [0x2E3F]={d="on"}, + [0x2E40]={d="on"}, + [0x2E41]={d="on"}, + [0x2E42]={d="on"}, + [0x2E43]={d="on"}, + [0x2E44]={d="on"}, + [0x2E45]={d="on"}, + [0x2E46]={d="on"}, + [0x2E47]={d="on"}, + [0x2E48]={d="on"}, + [0x2E49]={d="on"}, + [0x2E4A]={d="on"}, + [0x2E4B]={d="on"}, + [0x2E4C]={d="on"}, + [0x2E4D]={d="on"}, + [0x2E4E]={d="on"}, + [0x2E4F]={d="on"}, + [0x2E50]={d="on"}, + [0x2E51]={d="on"}, + [0x2E52]={d="on"}, + [0x2E53]={d="on"}, + [0x2E54]={d="on"}, + [0x2E55]={d="on", + m=0x2E56}, + [0x2E56]={d="on", + m=0x2E55}, + [0x2E57]={d="on", + m=0x2E58}, + [0x2E58]={d="on", + m=0x2E57}, + [0x2E59]={d="on", + m=0x2E5A}, + [0x2E5A]={d="on", + m=0x2E59}, + [0x2E5B]={d="on", + m=0x2E5C}, + [0x2E5C]={d="on", + m=0x2E5B}, + [0x2E5D]={d="on"}, + [0x2E80]={d="on"}, + [0x2E81]={d="on"}, + [0x2E82]={d="on"}, + [0x2E83]={d="on"}, + [0x2E84]={d="on"}, + [0x2E85]={d="on"}, + [0x2E86]={d="on"}, + [0x2E87]={d="on"}, + [0x2E88]={d="on"}, + [0x2E89]={d="on"}, + [0x2E8A]={d="on"}, + [0x2E8B]={d="on"}, + [0x2E8C]={d="on"}, + [0x2E8D]={d="on"}, + [0x2E8E]={d="on"}, + [0x2E8F]={d="on"}, + [0x2E90]={d="on"}, + [0x2E91]={d="on"}, + [0x2E92]={d="on"}, + [0x2E93]={d="on"}, + [0x2E94]={d="on"}, + [0x2E95]={d="on"}, + [0x2E96]={d="on"}, + [0x2E97]={d="on"}, + [0x2E98]={d="on"}, + [0x2E99]={d="on"}, + [0x2E9B]={d="on"}, + [0x2E9C]={d="on"}, + [0x2E9D]={d="on"}, + [0x2E9E]={d="on"}, + [0x2E9F]={d="on"}, + [0x2EA0]={d="on"}, + [0x2EA1]={d="on"}, + [0x2EA2]={d="on"}, + [0x2EA3]={d="on"}, + [0x2EA4]={d="on"}, + [0x2EA5]={d="on"}, + [0x2EA6]={d="on"}, + [0x2EA7]={d="on"}, + [0x2EA8]={d="on"}, + [0x2EA9]={d="on"}, + [0x2EAA]={d="on"}, + [0x2EAB]={d="on"}, + [0x2EAC]={d="on"}, + [0x2EAD]={d="on"}, + [0x2EAE]={d="on"}, + [0x2EAF]={d="on"}, + [0x2EB0]={d="on"}, + [0x2EB1]={d="on"}, + [0x2EB2]={d="on"}, + [0x2EB3]={d="on"}, + [0x2EB4]={d="on"}, + [0x2EB5]={d="on"}, + [0x2EB6]={d="on"}, + [0x2EB7]={d="on"}, + [0x2EB8]={d="on"}, + [0x2EB9]={d="on"}, + [0x2EBA]={d="on"}, + [0x2EBB]={d="on"}, + [0x2EBC]={d="on"}, + [0x2EBD]={d="on"}, + [0x2EBE]={d="on"}, + [0x2EBF]={d="on"}, + [0x2EC0]={d="on"}, + [0x2EC1]={d="on"}, + [0x2EC2]={d="on"}, + [0x2EC3]={d="on"}, + [0x2EC4]={d="on"}, + [0x2EC5]={d="on"}, + [0x2EC6]={d="on"}, + [0x2EC7]={d="on"}, + [0x2EC8]={d="on"}, + [0x2EC9]={d="on"}, + [0x2ECA]={d="on"}, + [0x2ECB]={d="on"}, + [0x2ECC]={d="on"}, + [0x2ECD]={d="on"}, + [0x2ECE]={d="on"}, + [0x2ECF]={d="on"}, + [0x2ED0]={d="on"}, + [0x2ED1]={d="on"}, + [0x2ED2]={d="on"}, + [0x2ED3]={d="on"}, + [0x2ED4]={d="on"}, + [0x2ED5]={d="on"}, + [0x2ED6]={d="on"}, + [0x2ED7]={d="on"}, + [0x2ED8]={d="on"}, + [0x2ED9]={d="on"}, + [0x2EDA]={d="on"}, + [0x2EDB]={d="on"}, + [0x2EDC]={d="on"}, + [0x2EDD]={d="on"}, + [0x2EDE]={d="on"}, + [0x2EDF]={d="on"}, + [0x2EE0]={d="on"}, + [0x2EE1]={d="on"}, + [0x2EE2]={d="on"}, + [0x2EE3]={d="on"}, + [0x2EE4]={d="on"}, + [0x2EE5]={d="on"}, + [0x2EE6]={d="on"}, + [0x2EE7]={d="on"}, + [0x2EE8]={d="on"}, + [0x2EE9]={d="on"}, + [0x2EEA]={d="on"}, + [0x2EEB]={d="on"}, + [0x2EEC]={d="on"}, + [0x2EED]={d="on"}, + [0x2EEE]={d="on"}, + [0x2EEF]={d="on"}, + [0x2EF0]={d="on"}, + [0x2EF1]={d="on"}, + [0x2EF2]={d="on"}, + [0x2EF3]={d="on"}, + [0x2F00]={d="on"}, + [0x2F01]={d="on"}, + [0x2F02]={d="on"}, + [0x2F03]={d="on"}, + [0x2F04]={d="on"}, + [0x2F05]={d="on"}, + [0x2F06]={d="on"}, + [0x2F07]={d="on"}, + [0x2F08]={d="on"}, + [0x2F09]={d="on"}, + [0x2F0A]={d="on"}, + [0x2F0B]={d="on"}, + [0x2F0C]={d="on"}, + [0x2F0D]={d="on"}, + [0x2F0E]={d="on"}, + [0x2F0F]={d="on"}, + [0x2F10]={d="on"}, + [0x2F11]={d="on"}, + [0x2F12]={d="on"}, + [0x2F13]={d="on"}, + [0x2F14]={d="on"}, + [0x2F15]={d="on"}, + [0x2F16]={d="on"}, + [0x2F17]={d="on"}, + [0x2F18]={d="on"}, + [0x2F19]={d="on"}, + [0x2F1A]={d="on"}, + [0x2F1B]={d="on"}, + [0x2F1C]={d="on"}, + [0x2F1D]={d="on"}, + [0x2F1E]={d="on"}, + [0x2F1F]={d="on"}, + [0x2F20]={d="on"}, + [0x2F21]={d="on"}, + [0x2F22]={d="on"}, + [0x2F23]={d="on"}, + [0x2F24]={d="on"}, + [0x2F25]={d="on"}, + [0x2F26]={d="on"}, + [0x2F27]={d="on"}, + [0x2F28]={d="on"}, + [0x2F29]={d="on"}, + [0x2F2A]={d="on"}, + [0x2F2B]={d="on"}, + [0x2F2C]={d="on"}, + [0x2F2D]={d="on"}, + [0x2F2E]={d="on"}, + [0x2F2F]={d="on"}, + [0x2F30]={d="on"}, + [0x2F31]={d="on"}, + [0x2F32]={d="on"}, + [0x2F33]={d="on"}, + [0x2F34]={d="on"}, + [0x2F35]={d="on"}, + [0x2F36]={d="on"}, + [0x2F37]={d="on"}, + [0x2F38]={d="on"}, + [0x2F39]={d="on"}, + [0x2F3A]={d="on"}, + [0x2F3B]={d="on"}, + [0x2F3C]={d="on"}, + [0x2F3D]={d="on"}, + [0x2F3E]={d="on"}, + [0x2F3F]={d="on"}, + [0x2F40]={d="on"}, + [0x2F41]={d="on"}, + [0x2F42]={d="on"}, + [0x2F43]={d="on"}, + [0x2F44]={d="on"}, + [0x2F45]={d="on"}, + [0x2F46]={d="on"}, + [0x2F47]={d="on"}, + [0x2F48]={d="on"}, + [0x2F49]={d="on"}, + [0x2F4A]={d="on"}, + [0x2F4B]={d="on"}, + [0x2F4C]={d="on"}, + [0x2F4D]={d="on"}, + [0x2F4E]={d="on"}, + [0x2F4F]={d="on"}, + [0x2F50]={d="on"}, + [0x2F51]={d="on"}, + [0x2F52]={d="on"}, + [0x2F53]={d="on"}, + [0x2F54]={d="on"}, + [0x2F55]={d="on"}, + [0x2F56]={d="on"}, + [0x2F57]={d="on"}, + [0x2F58]={d="on"}, + [0x2F59]={d="on"}, + [0x2F5A]={d="on"}, + [0x2F5B]={d="on"}, + [0x2F5C]={d="on"}, + [0x2F5D]={d="on"}, + [0x2F5E]={d="on"}, + [0x2F5F]={d="on"}, + [0x2F60]={d="on"}, + [0x2F61]={d="on"}, + [0x2F62]={d="on"}, + [0x2F63]={d="on"}, + [0x2F64]={d="on"}, + [0x2F65]={d="on"}, + [0x2F66]={d="on"}, + [0x2F67]={d="on"}, + [0x2F68]={d="on"}, + [0x2F69]={d="on"}, + [0x2F6A]={d="on"}, + [0x2F6B]={d="on"}, + [0x2F6C]={d="on"}, + [0x2F6D]={d="on"}, + [0x2F6E]={d="on"}, + [0x2F6F]={d="on"}, + [0x2F70]={d="on"}, + [0x2F71]={d="on"}, + [0x2F72]={d="on"}, + [0x2F73]={d="on"}, + [0x2F74]={d="on"}, + [0x2F75]={d="on"}, + [0x2F76]={d="on"}, + [0x2F77]={d="on"}, + [0x2F78]={d="on"}, + [0x2F79]={d="on"}, + [0x2F7A]={d="on"}, + [0x2F7B]={d="on"}, + [0x2F7C]={d="on"}, + [0x2F7D]={d="on"}, + [0x2F7E]={d="on"}, + [0x2F7F]={d="on"}, + [0x2F80]={d="on"}, + [0x2F81]={d="on"}, + [0x2F82]={d="on"}, + [0x2F83]={d="on"}, + [0x2F84]={d="on"}, + [0x2F85]={d="on"}, + [0x2F86]={d="on"}, + [0x2F87]={d="on"}, + [0x2F88]={d="on"}, + [0x2F89]={d="on"}, + [0x2F8A]={d="on"}, + [0x2F8B]={d="on"}, + [0x2F8C]={d="on"}, + [0x2F8D]={d="on"}, + [0x2F8E]={d="on"}, + [0x2F8F]={d="on"}, + [0x2F90]={d="on"}, + [0x2F91]={d="on"}, + [0x2F92]={d="on"}, + [0x2F93]={d="on"}, + [0x2F94]={d="on"}, + [0x2F95]={d="on"}, + [0x2F96]={d="on"}, + [0x2F97]={d="on"}, + [0x2F98]={d="on"}, + [0x2F99]={d="on"}, + [0x2F9A]={d="on"}, + [0x2F9B]={d="on"}, + [0x2F9C]={d="on"}, + [0x2F9D]={d="on"}, + [0x2F9E]={d="on"}, + [0x2F9F]={d="on"}, + [0x2FA0]={d="on"}, + [0x2FA1]={d="on"}, + [0x2FA2]={d="on"}, + [0x2FA3]={d="on"}, + [0x2FA4]={d="on"}, + [0x2FA5]={d="on"}, + [0x2FA6]={d="on"}, + [0x2FA7]={d="on"}, + [0x2FA8]={d="on"}, + [0x2FA9]={d="on"}, + [0x2FAA]={d="on"}, + [0x2FAB]={d="on"}, + [0x2FAC]={d="on"}, + [0x2FAD]={d="on"}, + [0x2FAE]={d="on"}, + [0x2FAF]={d="on"}, + [0x2FB0]={d="on"}, + [0x2FB1]={d="on"}, + [0x2FB2]={d="on"}, + [0x2FB3]={d="on"}, + [0x2FB4]={d="on"}, + [0x2FB5]={d="on"}, + [0x2FB6]={d="on"}, + [0x2FB7]={d="on"}, + [0x2FB8]={d="on"}, + [0x2FB9]={d="on"}, + [0x2FBA]={d="on"}, + [0x2FBB]={d="on"}, + [0x2FBC]={d="on"}, + [0x2FBD]={d="on"}, + [0x2FBE]={d="on"}, + [0x2FBF]={d="on"}, + [0x2FC0]={d="on"}, + [0x2FC1]={d="on"}, + [0x2FC2]={d="on"}, + [0x2FC3]={d="on"}, + [0x2FC4]={d="on"}, + [0x2FC5]={d="on"}, + [0x2FC6]={d="on"}, + [0x2FC7]={d="on"}, + [0x2FC8]={d="on"}, + [0x2FC9]={d="on"}, + [0x2FCA]={d="on"}, + [0x2FCB]={d="on"}, + [0x2FCC]={d="on"}, + [0x2FCD]={d="on"}, + [0x2FCE]={d="on"}, + [0x2FCF]={d="on"}, + [0x2FD0]={d="on"}, + [0x2FD1]={d="on"}, + [0x2FD2]={d="on"}, + [0x2FD3]={d="on"}, + [0x2FD4]={d="on"}, + [0x2FD5]={d="on"}, + [0x2FF0]={d="on"}, + [0x2FF1]={d="on"}, + [0x2FF2]={d="on"}, + [0x2FF3]={d="on"}, + [0x2FF4]={d="on"}, + [0x2FF5]={d="on"}, + [0x2FF6]={d="on"}, + [0x2FF7]={d="on"}, + [0x2FF8]={d="on"}, + [0x2FF9]={d="on"}, + [0x2FFA]={d="on"}, + [0x2FFB]={d="on"}, + [0x2FFC]={d="on"}, + [0x2FFD]={d="on"}, + [0x2FFE]={d="on"}, + [0x2FFF]={d="on"}, + [0x3000]={d="ws"}, + [0x3001]={d="on"}, + [0x3002]={d="on"}, + [0x3003]={d="on"}, + [0x3004]={d="on"}, + [0x3005]={d="l"}, + [0x3006]={d="l"}, + [0x3007]={d="l"}, + [0x3008]={d="on", + m=0x3009}, + [0x3009]={d="on", + m=0x3008}, + [0x300A]={d="on", + m=0x300B}, + [0x300B]={d="on", + m=0x300A}, + [0x300C]={d="on", + m=0x300D}, + [0x300D]={d="on", + m=0x300C}, + [0x300E]={d="on", + m=0x300F}, + [0x300F]={d="on", + m=0x300E}, + [0x3010]={d="on", + m=0x3011}, + [0x3011]={d="on", + m=0x3010}, + [0x3012]={d="on"}, + [0x3013]={d="on"}, + [0x3014]={d="on", + m=0x3015}, + [0x3015]={d="on", + m=0x3014}, + [0x3016]={d="on", + m=0x3017}, + [0x3017]={d="on", + m=0x3016}, + [0x3018]={d="on", + m=0x3019}, + [0x3019]={d="on", + m=0x3018}, + [0x301A]={d="on", + m=0x301B}, + [0x301B]={d="on", + m=0x301A}, + [0x301C]={d="on"}, + [0x301D]={d="on"}, + [0x301E]={d="on"}, + [0x301F]={d="on"}, + [0x3020]={d="on"}, + [0x3021]={d="l"}, + [0x3022]={d="l"}, + [0x3023]={d="l"}, + [0x3024]={d="l"}, + [0x3025]={d="l"}, + [0x3026]={d="l"}, + [0x3027]={d="l"}, + [0x3028]={d="l"}, + [0x3029]={d="l"}, + [0x302A]={d="nsm"}, + [0x302B]={d="nsm"}, + [0x302C]={d="nsm"}, + [0x302D]={d="nsm"}, + [0x302E]={d="l"}, + [0x302F]={d="l"}, + [0x3030]={d="on"}, + [0x3031]={d="l"}, + [0x3032]={d="l"}, + [0x3033]={d="l"}, + [0x3034]={d="l"}, + [0x3035]={d="l"}, + [0x3036]={d="on"}, + [0x3037]={d="on"}, + [0x3038]={d="l"}, + [0x3039]={d="l"}, + [0x303A]={d="l"}, + [0x303B]={d="l"}, + [0x303C]={d="l"}, + [0x303D]={d="on"}, + [0x303E]={d="on"}, + [0x303F]={d="on"}, + [0x3041]={d="l"}, + [0x3042]={d="l"}, + [0x3043]={d="l"}, + [0x3044]={d="l"}, + [0x3045]={d="l"}, + [0x3046]={d="l"}, + [0x3047]={d="l"}, + [0x3048]={d="l"}, + [0x3049]={d="l"}, + [0x304A]={d="l"}, + [0x304B]={d="l"}, + [0x304C]={d="l"}, + [0x304D]={d="l"}, + [0x304E]={d="l"}, + [0x304F]={d="l"}, + [0x3050]={d="l"}, + [0x3051]={d="l"}, + [0x3052]={d="l"}, + [0x3053]={d="l"}, + [0x3054]={d="l"}, + [0x3055]={d="l"}, + [0x3056]={d="l"}, + [0x3057]={d="l"}, + [0x3058]={d="l"}, + [0x3059]={d="l"}, + [0x305A]={d="l"}, + [0x305B]={d="l"}, + [0x305C]={d="l"}, + [0x305D]={d="l"}, + [0x305E]={d="l"}, + [0x305F]={d="l"}, + [0x3060]={d="l"}, + [0x3061]={d="l"}, + [0x3062]={d="l"}, + [0x3063]={d="l"}, + [0x3064]={d="l"}, + [0x3065]={d="l"}, + [0x3066]={d="l"}, + [0x3067]={d="l"}, + [0x3068]={d="l"}, + [0x3069]={d="l"}, + [0x306A]={d="l"}, + [0x306B]={d="l"}, + [0x306C]={d="l"}, + [0x306D]={d="l"}, + [0x306E]={d="l"}, + [0x306F]={d="l"}, + [0x3070]={d="l"}, + [0x3071]={d="l"}, + [0x3072]={d="l"}, + [0x3073]={d="l"}, + [0x3074]={d="l"}, + [0x3075]={d="l"}, + [0x3076]={d="l"}, + [0x3077]={d="l"}, + [0x3078]={d="l"}, + [0x3079]={d="l"}, + [0x307A]={d="l"}, + [0x307B]={d="l"}, + [0x307C]={d="l"}, + [0x307D]={d="l"}, + [0x307E]={d="l"}, + [0x307F]={d="l"}, + [0x3080]={d="l"}, + [0x3081]={d="l"}, + [0x3082]={d="l"}, + [0x3083]={d="l"}, + [0x3084]={d="l"}, + [0x3085]={d="l"}, + [0x3086]={d="l"}, + [0x3087]={d="l"}, + [0x3088]={d="l"}, + [0x3089]={d="l"}, + [0x308A]={d="l"}, + [0x308B]={d="l"}, + [0x308C]={d="l"}, + [0x308D]={d="l"}, + [0x308E]={d="l"}, + [0x308F]={d="l"}, + [0x3090]={d="l"}, + [0x3091]={d="l"}, + [0x3092]={d="l"}, + [0x3093]={d="l"}, + [0x3094]={d="l"}, + [0x3095]={d="l"}, + [0x3096]={d="l"}, + [0x3099]={d="nsm"}, + [0x309A]={d="nsm"}, + [0x309B]={d="on"}, + [0x309C]={d="on"}, + [0x309D]={d="l"}, + [0x309E]={d="l"}, + [0x309F]={d="l"}, + [0x30A0]={d="on"}, + [0x30A1]={d="l"}, + [0x30A2]={d="l"}, + [0x30A3]={d="l"}, + [0x30A4]={d="l"}, + [0x30A5]={d="l"}, + [0x30A6]={d="l"}, + [0x30A7]={d="l"}, + [0x30A8]={d="l"}, + [0x30A9]={d="l"}, + [0x30AA]={d="l"}, + [0x30AB]={d="l"}, + [0x30AC]={d="l"}, + [0x30AD]={d="l"}, + [0x30AE]={d="l"}, + [0x30AF]={d="l"}, + [0x30B0]={d="l"}, + [0x30B1]={d="l"}, + [0x30B2]={d="l"}, + [0x30B3]={d="l"}, + [0x30B4]={d="l"}, + [0x30B5]={d="l"}, + [0x30B6]={d="l"}, + [0x30B7]={d="l"}, + [0x30B8]={d="l"}, + [0x30B9]={d="l"}, + [0x30BA]={d="l"}, + [0x30BB]={d="l"}, + [0x30BC]={d="l"}, + [0x30BD]={d="l"}, + [0x30BE]={d="l"}, + [0x30BF]={d="l"}, + [0x30C0]={d="l"}, + [0x30C1]={d="l"}, + [0x30C2]={d="l"}, + [0x30C3]={d="l"}, + [0x30C4]={d="l"}, + [0x30C5]={d="l"}, + [0x30C6]={d="l"}, + [0x30C7]={d="l"}, + [0x30C8]={d="l"}, + [0x30C9]={d="l"}, + [0x30CA]={d="l"}, + [0x30CB]={d="l"}, + [0x30CC]={d="l"}, + [0x30CD]={d="l"}, + [0x30CE]={d="l"}, + [0x30CF]={d="l"}, + [0x30D0]={d="l"}, + [0x30D1]={d="l"}, + [0x30D2]={d="l"}, + [0x30D3]={d="l"}, + [0x30D4]={d="l"}, + [0x30D5]={d="l"}, + [0x30D6]={d="l"}, + [0x30D7]={d="l"}, + [0x30D8]={d="l"}, + [0x30D9]={d="l"}, + [0x30DA]={d="l"}, + [0x30DB]={d="l"}, + [0x30DC]={d="l"}, + [0x30DD]={d="l"}, + [0x30DE]={d="l"}, + [0x30DF]={d="l"}, + [0x30E0]={d="l"}, + [0x30E1]={d="l"}, + [0x30E2]={d="l"}, + [0x30E3]={d="l"}, + [0x30E4]={d="l"}, + [0x30E5]={d="l"}, + [0x30E6]={d="l"}, + [0x30E7]={d="l"}, + [0x30E8]={d="l"}, + [0x30E9]={d="l"}, + [0x30EA]={d="l"}, + [0x30EB]={d="l"}, + [0x30EC]={d="l"}, + [0x30ED]={d="l"}, + [0x30EE]={d="l"}, + [0x30EF]={d="l"}, + [0x30F0]={d="l"}, + [0x30F1]={d="l"}, + [0x30F2]={d="l"}, + [0x30F3]={d="l"}, + [0x30F4]={d="l"}, + [0x30F5]={d="l"}, + [0x30F6]={d="l"}, + [0x30F7]={d="l"}, + [0x30F8]={d="l"}, + [0x30F9]={d="l"}, + [0x30FA]={d="l"}, + [0x30FB]={d="on"}, + [0x30FC]={d="l"}, + [0x30FD]={d="l"}, + [0x30FE]={d="l"}, + [0x30FF]={d="l"}, + [0x3105]={d="l"}, + [0x3106]={d="l"}, + [0x3107]={d="l"}, + [0x3108]={d="l"}, + [0x3109]={d="l"}, + [0x310A]={d="l"}, + [0x310B]={d="l"}, + [0x310C]={d="l"}, + [0x310D]={d="l"}, + [0x310E]={d="l"}, + [0x310F]={d="l"}, + [0x3110]={d="l"}, + [0x3111]={d="l"}, + [0x3112]={d="l"}, + [0x3113]={d="l"}, + [0x3114]={d="l"}, + [0x3115]={d="l"}, + [0x3116]={d="l"}, + [0x3117]={d="l"}, + [0x3118]={d="l"}, + [0x3119]={d="l"}, + [0x311A]={d="l"}, + [0x311B]={d="l"}, + [0x311C]={d="l"}, + [0x311D]={d="l"}, + [0x311E]={d="l"}, + [0x311F]={d="l"}, + [0x3120]={d="l"}, + [0x3121]={d="l"}, + [0x3122]={d="l"}, + [0x3123]={d="l"}, + [0x3124]={d="l"}, + [0x3125]={d="l"}, + [0x3126]={d="l"}, + [0x3127]={d="l"}, + [0x3128]={d="l"}, + [0x3129]={d="l"}, + [0x312A]={d="l"}, + [0x312B]={d="l"}, + [0x312C]={d="l"}, + [0x312D]={d="l"}, + [0x312E]={d="l"}, + [0x312F]={d="l"}, + [0x3131]={d="l"}, + [0x3132]={d="l"}, + [0x3133]={d="l"}, + [0x3134]={d="l"}, + [0x3135]={d="l"}, + [0x3136]={d="l"}, + [0x3137]={d="l"}, + [0x3138]={d="l"}, + [0x3139]={d="l"}, + [0x313A]={d="l"}, + [0x313B]={d="l"}, + [0x313C]={d="l"}, + [0x313D]={d="l"}, + [0x313E]={d="l"}, + [0x313F]={d="l"}, + [0x3140]={d="l"}, + [0x3141]={d="l"}, + [0x3142]={d="l"}, + [0x3143]={d="l"}, + [0x3144]={d="l"}, + [0x3145]={d="l"}, + [0x3146]={d="l"}, + [0x3147]={d="l"}, + [0x3148]={d="l"}, + [0x3149]={d="l"}, + [0x314A]={d="l"}, + [0x314B]={d="l"}, + [0x314C]={d="l"}, + [0x314D]={d="l"}, + [0x314E]={d="l"}, + [0x314F]={d="l"}, + [0x3150]={d="l"}, + [0x3151]={d="l"}, + [0x3152]={d="l"}, + [0x3153]={d="l"}, + [0x3154]={d="l"}, + [0x3155]={d="l"}, + [0x3156]={d="l"}, + [0x3157]={d="l"}, + [0x3158]={d="l"}, + [0x3159]={d="l"}, + [0x315A]={d="l"}, + [0x315B]={d="l"}, + [0x315C]={d="l"}, + [0x315D]={d="l"}, + [0x315E]={d="l"}, + [0x315F]={d="l"}, + [0x3160]={d="l"}, + [0x3161]={d="l"}, + [0x3162]={d="l"}, + [0x3163]={d="l"}, + [0x3164]={d="l"}, + [0x3165]={d="l"}, + [0x3166]={d="l"}, + [0x3167]={d="l"}, + [0x3168]={d="l"}, + [0x3169]={d="l"}, + [0x316A]={d="l"}, + [0x316B]={d="l"}, + [0x316C]={d="l"}, + [0x316D]={d="l"}, + [0x316E]={d="l"}, + [0x316F]={d="l"}, + [0x3170]={d="l"}, + [0x3171]={d="l"}, + [0x3172]={d="l"}, + [0x3173]={d="l"}, + [0x3174]={d="l"}, + [0x3175]={d="l"}, + [0x3176]={d="l"}, + [0x3177]={d="l"}, + [0x3178]={d="l"}, + [0x3179]={d="l"}, + [0x317A]={d="l"}, + [0x317B]={d="l"}, + [0x317C]={d="l"}, + [0x317D]={d="l"}, + [0x317E]={d="l"}, + [0x317F]={d="l"}, + [0x3180]={d="l"}, + [0x3181]={d="l"}, + [0x3182]={d="l"}, + [0x3183]={d="l"}, + [0x3184]={d="l"}, + [0x3185]={d="l"}, + [0x3186]={d="l"}, + [0x3187]={d="l"}, + [0x3188]={d="l"}, + [0x3189]={d="l"}, + [0x318A]={d="l"}, + [0x318B]={d="l"}, + [0x318C]={d="l"}, + [0x318D]={d="l"}, + [0x318E]={d="l"}, + [0x3190]={d="l"}, + [0x3191]={d="l"}, + [0x3192]={d="l"}, + [0x3193]={d="l"}, + [0x3194]={d="l"}, + [0x3195]={d="l"}, + [0x3196]={d="l"}, + [0x3197]={d="l"}, + [0x3198]={d="l"}, + [0x3199]={d="l"}, + [0x319A]={d="l"}, + [0x319B]={d="l"}, + [0x319C]={d="l"}, + [0x319D]={d="l"}, + [0x319E]={d="l"}, + [0x319F]={d="l"}, + [0x31A0]={d="l"}, + [0x31A1]={d="l"}, + [0x31A2]={d="l"}, + [0x31A3]={d="l"}, + [0x31A4]={d="l"}, + [0x31A5]={d="l"}, + [0x31A6]={d="l"}, + [0x31A7]={d="l"}, + [0x31A8]={d="l"}, + [0x31A9]={d="l"}, + [0x31AA]={d="l"}, + [0x31AB]={d="l"}, + [0x31AC]={d="l"}, + [0x31AD]={d="l"}, + [0x31AE]={d="l"}, + [0x31AF]={d="l"}, + [0x31B0]={d="l"}, + [0x31B1]={d="l"}, + [0x31B2]={d="l"}, + [0x31B3]={d="l"}, + [0x31B4]={d="l"}, + [0x31B5]={d="l"}, + [0x31B6]={d="l"}, + [0x31B7]={d="l"}, + [0x31B8]={d="l"}, + [0x31B9]={d="l"}, + [0x31BA]={d="l"}, + [0x31BB]={d="l"}, + [0x31BC]={d="l"}, + [0x31BD]={d="l"}, + [0x31BE]={d="l"}, + [0x31BF]={d="l"}, + [0x31C0]={d="on"}, + [0x31C1]={d="on"}, + [0x31C2]={d="on"}, + [0x31C3]={d="on"}, + [0x31C4]={d="on"}, + [0x31C5]={d="on"}, + [0x31C6]={d="on"}, + [0x31C7]={d="on"}, + [0x31C8]={d="on"}, + [0x31C9]={d="on"}, + [0x31CA]={d="on"}, + [0x31CB]={d="on"}, + [0x31CC]={d="on"}, + [0x31CD]={d="on"}, + [0x31CE]={d="on"}, + [0x31CF]={d="on"}, + [0x31D0]={d="on"}, + [0x31D1]={d="on"}, + [0x31D2]={d="on"}, + [0x31D3]={d="on"}, + [0x31D4]={d="on"}, + [0x31D5]={d="on"}, + [0x31D6]={d="on"}, + [0x31D7]={d="on"}, + [0x31D8]={d="on"}, + [0x31D9]={d="on"}, + [0x31DA]={d="on"}, + [0x31DB]={d="on"}, + [0x31DC]={d="on"}, + [0x31DD]={d="on"}, + [0x31DE]={d="on"}, + [0x31DF]={d="on"}, + [0x31E0]={d="on"}, + [0x31E1]={d="on"}, + [0x31E2]={d="on"}, + [0x31E3]={d="on"}, + [0x31EF]={d="on"}, + [0x31F0]={d="l"}, + [0x31F1]={d="l"}, + [0x31F2]={d="l"}, + [0x31F3]={d="l"}, + [0x31F4]={d="l"}, + [0x31F5]={d="l"}, + [0x31F6]={d="l"}, + [0x31F7]={d="l"}, + [0x31F8]={d="l"}, + [0x31F9]={d="l"}, + [0x31FA]={d="l"}, + [0x31FB]={d="l"}, + [0x31FC]={d="l"}, + [0x31FD]={d="l"}, + [0x31FE]={d="l"}, + [0x31FF]={d="l"}, + [0x3200]={d="l"}, + [0x3201]={d="l"}, + [0x3202]={d="l"}, + [0x3203]={d="l"}, + [0x3204]={d="l"}, + [0x3205]={d="l"}, + [0x3206]={d="l"}, + [0x3207]={d="l"}, + [0x3208]={d="l"}, + [0x3209]={d="l"}, + [0x320A]={d="l"}, + [0x320B]={d="l"}, + [0x320C]={d="l"}, + [0x320D]={d="l"}, + [0x320E]={d="l"}, + [0x320F]={d="l"}, + [0x3210]={d="l"}, + [0x3211]={d="l"}, + [0x3212]={d="l"}, + [0x3213]={d="l"}, + [0x3214]={d="l"}, + [0x3215]={d="l"}, + [0x3216]={d="l"}, + [0x3217]={d="l"}, + [0x3218]={d="l"}, + [0x3219]={d="l"}, + [0x321A]={d="l"}, + [0x321B]={d="l"}, + [0x321C]={d="l"}, + [0x321D]={d="on"}, + [0x321E]={d="on"}, + [0x3220]={d="l"}, + [0x3221]={d="l"}, + [0x3222]={d="l"}, + [0x3223]={d="l"}, + [0x3224]={d="l"}, + [0x3225]={d="l"}, + [0x3226]={d="l"}, + [0x3227]={d="l"}, + [0x3228]={d="l"}, + [0x3229]={d="l"}, + [0x322A]={d="l"}, + [0x322B]={d="l"}, + [0x322C]={d="l"}, + [0x322D]={d="l"}, + [0x322E]={d="l"}, + [0x322F]={d="l"}, + [0x3230]={d="l"}, + [0x3231]={d="l"}, + [0x3232]={d="l"}, + [0x3233]={d="l"}, + [0x3234]={d="l"}, + [0x3235]={d="l"}, + [0x3236]={d="l"}, + [0x3237]={d="l"}, + [0x3238]={d="l"}, + [0x3239]={d="l"}, + [0x323A]={d="l"}, + [0x323B]={d="l"}, + [0x323C]={d="l"}, + [0x323D]={d="l"}, + [0x323E]={d="l"}, + [0x323F]={d="l"}, + [0x3240]={d="l"}, + [0x3241]={d="l"}, + [0x3242]={d="l"}, + [0x3243]={d="l"}, + [0x3244]={d="l"}, + [0x3245]={d="l"}, + [0x3246]={d="l"}, + [0x3247]={d="l"}, + [0x3248]={d="l"}, + [0x3249]={d="l"}, + [0x324A]={d="l"}, + [0x324B]={d="l"}, + [0x324C]={d="l"}, + [0x324D]={d="l"}, + [0x324E]={d="l"}, + [0x324F]={d="l"}, + [0x3250]={d="on"}, + [0x3251]={d="on"}, + [0x3252]={d="on"}, + [0x3253]={d="on"}, + [0x3254]={d="on"}, + [0x3255]={d="on"}, + [0x3256]={d="on"}, + [0x3257]={d="on"}, + [0x3258]={d="on"}, + [0x3259]={d="on"}, + [0x325A]={d="on"}, + [0x325B]={d="on"}, + [0x325C]={d="on"}, + [0x325D]={d="on"}, + [0x325E]={d="on"}, + [0x325F]={d="on"}, + [0x3260]={d="l"}, + [0x3261]={d="l"}, + [0x3262]={d="l"}, + [0x3263]={d="l"}, + [0x3264]={d="l"}, + [0x3265]={d="l"}, + [0x3266]={d="l"}, + [0x3267]={d="l"}, + [0x3268]={d="l"}, + [0x3269]={d="l"}, + [0x326A]={d="l"}, + [0x326B]={d="l"}, + [0x326C]={d="l"}, + [0x326D]={d="l"}, + [0x326E]={d="l"}, + [0x326F]={d="l"}, + [0x3270]={d="l"}, + [0x3271]={d="l"}, + [0x3272]={d="l"}, + [0x3273]={d="l"}, + [0x3274]={d="l"}, + [0x3275]={d="l"}, + [0x3276]={d="l"}, + [0x3277]={d="l"}, + [0x3278]={d="l"}, + [0x3279]={d="l"}, + [0x327A]={d="l"}, + [0x327B]={d="l"}, + [0x327C]={d="on"}, + [0x327D]={d="on"}, + [0x327E]={d="on"}, + [0x327F]={d="l"}, + [0x3280]={d="l"}, + [0x3281]={d="l"}, + [0x3282]={d="l"}, + [0x3283]={d="l"}, + [0x3284]={d="l"}, + [0x3285]={d="l"}, + [0x3286]={d="l"}, + [0x3287]={d="l"}, + [0x3288]={d="l"}, + [0x3289]={d="l"}, + [0x328A]={d="l"}, + [0x328B]={d="l"}, + [0x328C]={d="l"}, + [0x328D]={d="l"}, + [0x328E]={d="l"}, + [0x328F]={d="l"}, + [0x3290]={d="l"}, + [0x3291]={d="l"}, + [0x3292]={d="l"}, + [0x3293]={d="l"}, + [0x3294]={d="l"}, + [0x3295]={d="l"}, + [0x3296]={d="l"}, + [0x3297]={d="l"}, + [0x3298]={d="l"}, + [0x3299]={d="l"}, + [0x329A]={d="l"}, + [0x329B]={d="l"}, + [0x329C]={d="l"}, + [0x329D]={d="l"}, + [0x329E]={d="l"}, + [0x329F]={d="l"}, + [0x32A0]={d="l"}, + [0x32A1]={d="l"}, + [0x32A2]={d="l"}, + [0x32A3]={d="l"}, + [0x32A4]={d="l"}, + [0x32A5]={d="l"}, + [0x32A6]={d="l"}, + [0x32A7]={d="l"}, + [0x32A8]={d="l"}, + [0x32A9]={d="l"}, + [0x32AA]={d="l"}, + [0x32AB]={d="l"}, + [0x32AC]={d="l"}, + [0x32AD]={d="l"}, + [0x32AE]={d="l"}, + [0x32AF]={d="l"}, + [0x32B0]={d="l"}, + [0x32B1]={d="on"}, + [0x32B2]={d="on"}, + [0x32B3]={d="on"}, + [0x32B4]={d="on"}, + [0x32B5]={d="on"}, + [0x32B6]={d="on"}, + [0x32B7]={d="on"}, + [0x32B8]={d="on"}, + [0x32B9]={d="on"}, + [0x32BA]={d="on"}, + [0x32BB]={d="on"}, + [0x32BC]={d="on"}, + [0x32BD]={d="on"}, + [0x32BE]={d="on"}, + [0x32BF]={d="on"}, + [0x32C0]={d="l"}, + [0x32C1]={d="l"}, + [0x32C2]={d="l"}, + [0x32C3]={d="l"}, + [0x32C4]={d="l"}, + [0x32C5]={d="l"}, + [0x32C6]={d="l"}, + [0x32C7]={d="l"}, + [0x32C8]={d="l"}, + [0x32C9]={d="l"}, + [0x32CA]={d="l"}, + [0x32CB]={d="l"}, + [0x32CC]={d="on"}, + [0x32CD]={d="on"}, + [0x32CE]={d="on"}, + [0x32CF]={d="on"}, + [0x32D0]={d="l"}, + [0x32D1]={d="l"}, + [0x32D2]={d="l"}, + [0x32D3]={d="l"}, + [0x32D4]={d="l"}, + [0x32D5]={d="l"}, + [0x32D6]={d="l"}, + [0x32D7]={d="l"}, + [0x32D8]={d="l"}, + [0x32D9]={d="l"}, + [0x32DA]={d="l"}, + [0x32DB]={d="l"}, + [0x32DC]={d="l"}, + [0x32DD]={d="l"}, + [0x32DE]={d="l"}, + [0x32DF]={d="l"}, + [0x32E0]={d="l"}, + [0x32E1]={d="l"}, + [0x32E2]={d="l"}, + [0x32E3]={d="l"}, + [0x32E4]={d="l"}, + [0x32E5]={d="l"}, + [0x32E6]={d="l"}, + [0x32E7]={d="l"}, + [0x32E8]={d="l"}, + [0x32E9]={d="l"}, + [0x32EA]={d="l"}, + [0x32EB]={d="l"}, + [0x32EC]={d="l"}, + [0x32ED]={d="l"}, + [0x32EE]={d="l"}, + [0x32EF]={d="l"}, + [0x32F0]={d="l"}, + [0x32F1]={d="l"}, + [0x32F2]={d="l"}, + [0x32F3]={d="l"}, + [0x32F4]={d="l"}, + [0x32F5]={d="l"}, + [0x32F6]={d="l"}, + [0x32F7]={d="l"}, + [0x32F8]={d="l"}, + [0x32F9]={d="l"}, + [0x32FA]={d="l"}, + [0x32FB]={d="l"}, + [0x32FC]={d="l"}, + [0x32FD]={d="l"}, + [0x32FE]={d="l"}, + [0x32FF]={d="l"}, + [0x3300]={d="l"}, + [0x3301]={d="l"}, + [0x3302]={d="l"}, + [0x3303]={d="l"}, + [0x3304]={d="l"}, + [0x3305]={d="l"}, + [0x3306]={d="l"}, + [0x3307]={d="l"}, + [0x3308]={d="l"}, + [0x3309]={d="l"}, + [0x330A]={d="l"}, + [0x330B]={d="l"}, + [0x330C]={d="l"}, + [0x330D]={d="l"}, + [0x330E]={d="l"}, + [0x330F]={d="l"}, + [0x3310]={d="l"}, + [0x3311]={d="l"}, + [0x3312]={d="l"}, + [0x3313]={d="l"}, + [0x3314]={d="l"}, + [0x3315]={d="l"}, + [0x3316]={d="l"}, + [0x3317]={d="l"}, + [0x3318]={d="l"}, + [0x3319]={d="l"}, + [0x331A]={d="l"}, + [0x331B]={d="l"}, + [0x331C]={d="l"}, + [0x331D]={d="l"}, + [0x331E]={d="l"}, + [0x331F]={d="l"}, + [0x3320]={d="l"}, + [0x3321]={d="l"}, + [0x3322]={d="l"}, + [0x3323]={d="l"}, + [0x3324]={d="l"}, + [0x3325]={d="l"}, + [0x3326]={d="l"}, + [0x3327]={d="l"}, + [0x3328]={d="l"}, + [0x3329]={d="l"}, + [0x332A]={d="l"}, + [0x332B]={d="l"}, + [0x332C]={d="l"}, + [0x332D]={d="l"}, + [0x332E]={d="l"}, + [0x332F]={d="l"}, + [0x3330]={d="l"}, + [0x3331]={d="l"}, + [0x3332]={d="l"}, + [0x3333]={d="l"}, + [0x3334]={d="l"}, + [0x3335]={d="l"}, + [0x3336]={d="l"}, + [0x3337]={d="l"}, + [0x3338]={d="l"}, + [0x3339]={d="l"}, + [0x333A]={d="l"}, + [0x333B]={d="l"}, + [0x333C]={d="l"}, + [0x333D]={d="l"}, + [0x333E]={d="l"}, + [0x333F]={d="l"}, + [0x3340]={d="l"}, + [0x3341]={d="l"}, + [0x3342]={d="l"}, + [0x3343]={d="l"}, + [0x3344]={d="l"}, + [0x3345]={d="l"}, + [0x3346]={d="l"}, + [0x3347]={d="l"}, + [0x3348]={d="l"}, + [0x3349]={d="l"}, + [0x334A]={d="l"}, + [0x334B]={d="l"}, + [0x334C]={d="l"}, + [0x334D]={d="l"}, + [0x334E]={d="l"}, + [0x334F]={d="l"}, + [0x3350]={d="l"}, + [0x3351]={d="l"}, + [0x3352]={d="l"}, + [0x3353]={d="l"}, + [0x3354]={d="l"}, + [0x3355]={d="l"}, + [0x3356]={d="l"}, + [0x3357]={d="l"}, + [0x3358]={d="l"}, + [0x3359]={d="l"}, + [0x335A]={d="l"}, + [0x335B]={d="l"}, + [0x335C]={d="l"}, + [0x335D]={d="l"}, + [0x335E]={d="l"}, + [0x335F]={d="l"}, + [0x3360]={d="l"}, + [0x3361]={d="l"}, + [0x3362]={d="l"}, + [0x3363]={d="l"}, + [0x3364]={d="l"}, + [0x3365]={d="l"}, + [0x3366]={d="l"}, + [0x3367]={d="l"}, + [0x3368]={d="l"}, + [0x3369]={d="l"}, + [0x336A]={d="l"}, + [0x336B]={d="l"}, + [0x336C]={d="l"}, + [0x336D]={d="l"}, + [0x336E]={d="l"}, + [0x336F]={d="l"}, + [0x3370]={d="l"}, + [0x3371]={d="l"}, + [0x3372]={d="l"}, + [0x3373]={d="l"}, + [0x3374]={d="l"}, + [0x3375]={d="l"}, + [0x3376]={d="l"}, + [0x3377]={d="on"}, + [0x3378]={d="on"}, + [0x3379]={d="on"}, + [0x337A]={d="on"}, + [0x337B]={d="l"}, + [0x337C]={d="l"}, + [0x337D]={d="l"}, + [0x337E]={d="l"}, + [0x337F]={d="l"}, + [0x3380]={d="l"}, + [0x3381]={d="l"}, + [0x3382]={d="l"}, + [0x3383]={d="l"}, + [0x3384]={d="l"}, + [0x3385]={d="l"}, + [0x3386]={d="l"}, + [0x3387]={d="l"}, + [0x3388]={d="l"}, + [0x3389]={d="l"}, + [0x338A]={d="l"}, + [0x338B]={d="l"}, + [0x338C]={d="l"}, + [0x338D]={d="l"}, + [0x338E]={d="l"}, + [0x338F]={d="l"}, + [0x3390]={d="l"}, + [0x3391]={d="l"}, + [0x3392]={d="l"}, + [0x3393]={d="l"}, + [0x3394]={d="l"}, + [0x3395]={d="l"}, + [0x3396]={d="l"}, + [0x3397]={d="l"}, + [0x3398]={d="l"}, + [0x3399]={d="l"}, + [0x339A]={d="l"}, + [0x339B]={d="l"}, + [0x339C]={d="l"}, + [0x339D]={d="l"}, + [0x339E]={d="l"}, + [0x339F]={d="l"}, + [0x33A0]={d="l"}, + [0x33A1]={d="l"}, + [0x33A2]={d="l"}, + [0x33A3]={d="l"}, + [0x33A4]={d="l"}, + [0x33A5]={d="l"}, + [0x33A6]={d="l"}, + [0x33A7]={d="l"}, + [0x33A8]={d="l"}, + [0x33A9]={d="l"}, + [0x33AA]={d="l"}, + [0x33AB]={d="l"}, + [0x33AC]={d="l"}, + [0x33AD]={d="l"}, + [0x33AE]={d="l"}, + [0x33AF]={d="l"}, + [0x33B0]={d="l"}, + [0x33B1]={d="l"}, + [0x33B2]={d="l"}, + [0x33B3]={d="l"}, + [0x33B4]={d="l"}, + [0x33B5]={d="l"}, + [0x33B6]={d="l"}, + [0x33B7]={d="l"}, + [0x33B8]={d="l"}, + [0x33B9]={d="l"}, + [0x33BA]={d="l"}, + [0x33BB]={d="l"}, + [0x33BC]={d="l"}, + [0x33BD]={d="l"}, + [0x33BE]={d="l"}, + [0x33BF]={d="l"}, + [0x33C0]={d="l"}, + [0x33C1]={d="l"}, + [0x33C2]={d="l"}, + [0x33C3]={d="l"}, + [0x33C4]={d="l"}, + [0x33C5]={d="l"}, + [0x33C6]={d="l"}, + [0x33C7]={d="l"}, + [0x33C8]={d="l"}, + [0x33C9]={d="l"}, + [0x33CA]={d="l"}, + [0x33CB]={d="l"}, + [0x33CC]={d="l"}, + [0x33CD]={d="l"}, + [0x33CE]={d="l"}, + [0x33CF]={d="l"}, + [0x33D0]={d="l"}, + [0x33D1]={d="l"}, + [0x33D2]={d="l"}, + [0x33D3]={d="l"}, + [0x33D4]={d="l"}, + [0x33D5]={d="l"}, + [0x33D6]={d="l"}, + [0x33D7]={d="l"}, + [0x33D8]={d="l"}, + [0x33D9]={d="l"}, + [0x33DA]={d="l"}, + [0x33DB]={d="l"}, + [0x33DC]={d="l"}, + [0x33DD]={d="l"}, + [0x33DE]={d="on"}, + [0x33DF]={d="on"}, + [0x33E0]={d="l"}, + [0x33E1]={d="l"}, + [0x33E2]={d="l"}, + [0x33E3]={d="l"}, + [0x33E4]={d="l"}, + [0x33E5]={d="l"}, + [0x33E6]={d="l"}, + [0x33E7]={d="l"}, + [0x33E8]={d="l"}, + [0x33E9]={d="l"}, + [0x33EA]={d="l"}, + [0x33EB]={d="l"}, + [0x33EC]={d="l"}, + [0x33ED]={d="l"}, + [0x33EE]={d="l"}, + [0x33EF]={d="l"}, + [0x33F0]={d="l"}, + [0x33F1]={d="l"}, + [0x33F2]={d="l"}, + [0x33F3]={d="l"}, + [0x33F4]={d="l"}, + [0x33F5]={d="l"}, + [0x33F6]={d="l"}, + [0x33F7]={d="l"}, + [0x33F8]={d="l"}, + [0x33F9]={d="l"}, + [0x33FA]={d="l"}, + [0x33FB]={d="l"}, + [0x33FC]={d="l"}, + [0x33FD]={d="l"}, + [0x33FE]={d="l"}, + [0x33FF]={d="on"}, + [0x4DC0]={d="on"}, + [0x4DC1]={d="on"}, + [0x4DC2]={d="on"}, + [0x4DC3]={d="on"}, + [0x4DC4]={d="on"}, + [0x4DC5]={d="on"}, + [0x4DC6]={d="on"}, + [0x4DC7]={d="on"}, + [0x4DC8]={d="on"}, + [0x4DC9]={d="on"}, + [0x4DCA]={d="on"}, + [0x4DCB]={d="on"}, + [0x4DCC]={d="on"}, + [0x4DCD]={d="on"}, + [0x4DCE]={d="on"}, + [0x4DCF]={d="on"}, + [0x4DD0]={d="on"}, + [0x4DD1]={d="on"}, + [0x4DD2]={d="on"}, + [0x4DD3]={d="on"}, + [0x4DD4]={d="on"}, + [0x4DD5]={d="on"}, + [0x4DD6]={d="on"}, + [0x4DD7]={d="on"}, + [0x4DD8]={d="on"}, + [0x4DD9]={d="on"}, + [0x4DDA]={d="on"}, + [0x4DDB]={d="on"}, + [0x4DDC]={d="on"}, + [0x4DDD]={d="on"}, + [0x4DDE]={d="on"}, + [0x4DDF]={d="on"}, + [0x4DE0]={d="on"}, + [0x4DE1]={d="on"}, + [0x4DE2]={d="on"}, + [0x4DE3]={d="on"}, + [0x4DE4]={d="on"}, + [0x4DE5]={d="on"}, + [0x4DE6]={d="on"}, + [0x4DE7]={d="on"}, + [0x4DE8]={d="on"}, + [0x4DE9]={d="on"}, + [0x4DEA]={d="on"}, + [0x4DEB]={d="on"}, + [0x4DEC]={d="on"}, + [0x4DED]={d="on"}, + [0x4DEE]={d="on"}, + [0x4DEF]={d="on"}, + [0x4DF0]={d="on"}, + [0x4DF1]={d="on"}, + [0x4DF2]={d="on"}, + [0x4DF3]={d="on"}, + [0x4DF4]={d="on"}, + [0x4DF5]={d="on"}, + [0x4DF6]={d="on"}, + [0x4DF7]={d="on"}, + [0x4DF8]={d="on"}, + [0x4DF9]={d="on"}, + [0x4DFA]={d="on"}, + [0x4DFB]={d="on"}, + [0x4DFC]={d="on"}, + [0x4DFD]={d="on"}, + [0x4DFE]={d="on"}, + [0x4DFF]={d="on"}, + [0xA000]={d="l"}, + [0xA001]={d="l"}, + [0xA002]={d="l"}, + [0xA003]={d="l"}, + [0xA004]={d="l"}, + [0xA005]={d="l"}, + [0xA006]={d="l"}, + [0xA007]={d="l"}, + [0xA008]={d="l"}, + [0xA009]={d="l"}, + [0xA00A]={d="l"}, + [0xA00B]={d="l"}, + [0xA00C]={d="l"}, + [0xA00D]={d="l"}, + [0xA00E]={d="l"}, + [0xA00F]={d="l"}, + [0xA010]={d="l"}, + [0xA011]={d="l"}, + [0xA012]={d="l"}, + [0xA013]={d="l"}, + [0xA014]={d="l"}, + [0xA015]={d="l"}, + [0xA016]={d="l"}, + [0xA017]={d="l"}, + [0xA018]={d="l"}, + [0xA019]={d="l"}, + [0xA01A]={d="l"}, + [0xA01B]={d="l"}, + [0xA01C]={d="l"}, + [0xA01D]={d="l"}, + [0xA01E]={d="l"}, + [0xA01F]={d="l"}, + [0xA020]={d="l"}, + [0xA021]={d="l"}, + [0xA022]={d="l"}, + [0xA023]={d="l"}, + [0xA024]={d="l"}, + [0xA025]={d="l"}, + [0xA026]={d="l"}, + [0xA027]={d="l"}, + [0xA028]={d="l"}, + [0xA029]={d="l"}, + [0xA02A]={d="l"}, + [0xA02B]={d="l"}, + [0xA02C]={d="l"}, + [0xA02D]={d="l"}, + [0xA02E]={d="l"}, + [0xA02F]={d="l"}, + [0xA030]={d="l"}, + [0xA031]={d="l"}, + [0xA032]={d="l"}, + [0xA033]={d="l"}, + [0xA034]={d="l"}, + [0xA035]={d="l"}, + [0xA036]={d="l"}, + [0xA037]={d="l"}, + [0xA038]={d="l"}, + [0xA039]={d="l"}, + [0xA03A]={d="l"}, + [0xA03B]={d="l"}, + [0xA03C]={d="l"}, + [0xA03D]={d="l"}, + [0xA03E]={d="l"}, + [0xA03F]={d="l"}, + [0xA040]={d="l"}, + [0xA041]={d="l"}, + [0xA042]={d="l"}, + [0xA043]={d="l"}, + [0xA044]={d="l"}, + [0xA045]={d="l"}, + [0xA046]={d="l"}, + [0xA047]={d="l"}, + [0xA048]={d="l"}, + [0xA049]={d="l"}, + [0xA04A]={d="l"}, + [0xA04B]={d="l"}, + [0xA04C]={d="l"}, + [0xA04D]={d="l"}, + [0xA04E]={d="l"}, + [0xA04F]={d="l"}, + [0xA050]={d="l"}, + [0xA051]={d="l"}, + [0xA052]={d="l"}, + [0xA053]={d="l"}, + [0xA054]={d="l"}, + [0xA055]={d="l"}, + [0xA056]={d="l"}, + [0xA057]={d="l"}, + [0xA058]={d="l"}, + [0xA059]={d="l"}, + [0xA05A]={d="l"}, + [0xA05B]={d="l"}, + [0xA05C]={d="l"}, + [0xA05D]={d="l"}, + [0xA05E]={d="l"}, + [0xA05F]={d="l"}, + [0xA060]={d="l"}, + [0xA061]={d="l"}, + [0xA062]={d="l"}, + [0xA063]={d="l"}, + [0xA064]={d="l"}, + [0xA065]={d="l"}, + [0xA066]={d="l"}, + [0xA067]={d="l"}, + [0xA068]={d="l"}, + [0xA069]={d="l"}, + [0xA06A]={d="l"}, + [0xA06B]={d="l"}, + [0xA06C]={d="l"}, + [0xA06D]={d="l"}, + [0xA06E]={d="l"}, + [0xA06F]={d="l"}, + [0xA070]={d="l"}, + [0xA071]={d="l"}, + [0xA072]={d="l"}, + [0xA073]={d="l"}, + [0xA074]={d="l"}, + [0xA075]={d="l"}, + [0xA076]={d="l"}, + [0xA077]={d="l"}, + [0xA078]={d="l"}, + [0xA079]={d="l"}, + [0xA07A]={d="l"}, + [0xA07B]={d="l"}, + [0xA07C]={d="l"}, + [0xA07D]={d="l"}, + [0xA07E]={d="l"}, + [0xA07F]={d="l"}, + [0xA080]={d="l"}, + [0xA081]={d="l"}, + [0xA082]={d="l"}, + [0xA083]={d="l"}, + [0xA084]={d="l"}, + [0xA085]={d="l"}, + [0xA086]={d="l"}, + [0xA087]={d="l"}, + [0xA088]={d="l"}, + [0xA089]={d="l"}, + [0xA08A]={d="l"}, + [0xA08B]={d="l"}, + [0xA08C]={d="l"}, + [0xA08D]={d="l"}, + [0xA08E]={d="l"}, + [0xA08F]={d="l"}, + [0xA090]={d="l"}, + [0xA091]={d="l"}, + [0xA092]={d="l"}, + [0xA093]={d="l"}, + [0xA094]={d="l"}, + [0xA095]={d="l"}, + [0xA096]={d="l"}, + [0xA097]={d="l"}, + [0xA098]={d="l"}, + [0xA099]={d="l"}, + [0xA09A]={d="l"}, + [0xA09B]={d="l"}, + [0xA09C]={d="l"}, + [0xA09D]={d="l"}, + [0xA09E]={d="l"}, + [0xA09F]={d="l"}, + [0xA0A0]={d="l"}, + [0xA0A1]={d="l"}, + [0xA0A2]={d="l"}, + [0xA0A3]={d="l"}, + [0xA0A4]={d="l"}, + [0xA0A5]={d="l"}, + [0xA0A6]={d="l"}, + [0xA0A7]={d="l"}, + [0xA0A8]={d="l"}, + [0xA0A9]={d="l"}, + [0xA0AA]={d="l"}, + [0xA0AB]={d="l"}, + [0xA0AC]={d="l"}, + [0xA0AD]={d="l"}, + [0xA0AE]={d="l"}, + [0xA0AF]={d="l"}, + [0xA0B0]={d="l"}, + [0xA0B1]={d="l"}, + [0xA0B2]={d="l"}, + [0xA0B3]={d="l"}, + [0xA0B4]={d="l"}, + [0xA0B5]={d="l"}, + [0xA0B6]={d="l"}, + [0xA0B7]={d="l"}, + [0xA0B8]={d="l"}, + [0xA0B9]={d="l"}, + [0xA0BA]={d="l"}, + [0xA0BB]={d="l"}, + [0xA0BC]={d="l"}, + [0xA0BD]={d="l"}, + [0xA0BE]={d="l"}, + [0xA0BF]={d="l"}, + [0xA0C0]={d="l"}, + [0xA0C1]={d="l"}, + [0xA0C2]={d="l"}, + [0xA0C3]={d="l"}, + [0xA0C4]={d="l"}, + [0xA0C5]={d="l"}, + [0xA0C6]={d="l"}, + [0xA0C7]={d="l"}, + [0xA0C8]={d="l"}, + [0xA0C9]={d="l"}, + [0xA0CA]={d="l"}, + [0xA0CB]={d="l"}, + [0xA0CC]={d="l"}, + [0xA0CD]={d="l"}, + [0xA0CE]={d="l"}, + [0xA0CF]={d="l"}, + [0xA0D0]={d="l"}, + [0xA0D1]={d="l"}, + [0xA0D2]={d="l"}, + [0xA0D3]={d="l"}, + [0xA0D4]={d="l"}, + [0xA0D5]={d="l"}, + [0xA0D6]={d="l"}, + [0xA0D7]={d="l"}, + [0xA0D8]={d="l"}, + [0xA0D9]={d="l"}, + [0xA0DA]={d="l"}, + [0xA0DB]={d="l"}, + [0xA0DC]={d="l"}, + [0xA0DD]={d="l"}, + [0xA0DE]={d="l"}, + [0xA0DF]={d="l"}, + [0xA0E0]={d="l"}, + [0xA0E1]={d="l"}, + [0xA0E2]={d="l"}, + [0xA0E3]={d="l"}, + [0xA0E4]={d="l"}, + [0xA0E5]={d="l"}, + [0xA0E6]={d="l"}, + [0xA0E7]={d="l"}, + [0xA0E8]={d="l"}, + [0xA0E9]={d="l"}, + [0xA0EA]={d="l"}, + [0xA0EB]={d="l"}, + [0xA0EC]={d="l"}, + [0xA0ED]={d="l"}, + [0xA0EE]={d="l"}, + [0xA0EF]={d="l"}, + [0xA0F0]={d="l"}, + [0xA0F1]={d="l"}, + [0xA0F2]={d="l"}, + [0xA0F3]={d="l"}, + [0xA0F4]={d="l"}, + [0xA0F5]={d="l"}, + [0xA0F6]={d="l"}, + [0xA0F7]={d="l"}, + [0xA0F8]={d="l"}, + [0xA0F9]={d="l"}, + [0xA0FA]={d="l"}, + [0xA0FB]={d="l"}, + [0xA0FC]={d="l"}, + [0xA0FD]={d="l"}, + [0xA0FE]={d="l"}, + [0xA0FF]={d="l"}, + [0xA100]={d="l"}, + [0xA101]={d="l"}, + [0xA102]={d="l"}, + [0xA103]={d="l"}, + [0xA104]={d="l"}, + [0xA105]={d="l"}, + [0xA106]={d="l"}, + [0xA107]={d="l"}, + [0xA108]={d="l"}, + [0xA109]={d="l"}, + [0xA10A]={d="l"}, + [0xA10B]={d="l"}, + [0xA10C]={d="l"}, + [0xA10D]={d="l"}, + [0xA10E]={d="l"}, + [0xA10F]={d="l"}, + [0xA110]={d="l"}, + [0xA111]={d="l"}, + [0xA112]={d="l"}, + [0xA113]={d="l"}, + [0xA114]={d="l"}, + [0xA115]={d="l"}, + [0xA116]={d="l"}, + [0xA117]={d="l"}, + [0xA118]={d="l"}, + [0xA119]={d="l"}, + [0xA11A]={d="l"}, + [0xA11B]={d="l"}, + [0xA11C]={d="l"}, + [0xA11D]={d="l"}, + [0xA11E]={d="l"}, + [0xA11F]={d="l"}, + [0xA120]={d="l"}, + [0xA121]={d="l"}, + [0xA122]={d="l"}, + [0xA123]={d="l"}, + [0xA124]={d="l"}, + [0xA125]={d="l"}, + [0xA126]={d="l"}, + [0xA127]={d="l"}, + [0xA128]={d="l"}, + [0xA129]={d="l"}, + [0xA12A]={d="l"}, + [0xA12B]={d="l"}, + [0xA12C]={d="l"}, + [0xA12D]={d="l"}, + [0xA12E]={d="l"}, + [0xA12F]={d="l"}, + [0xA130]={d="l"}, + [0xA131]={d="l"}, + [0xA132]={d="l"}, + [0xA133]={d="l"}, + [0xA134]={d="l"}, + [0xA135]={d="l"}, + [0xA136]={d="l"}, + [0xA137]={d="l"}, + [0xA138]={d="l"}, + [0xA139]={d="l"}, + [0xA13A]={d="l"}, + [0xA13B]={d="l"}, + [0xA13C]={d="l"}, + [0xA13D]={d="l"}, + [0xA13E]={d="l"}, + [0xA13F]={d="l"}, + [0xA140]={d="l"}, + [0xA141]={d="l"}, + [0xA142]={d="l"}, + [0xA143]={d="l"}, + [0xA144]={d="l"}, + [0xA145]={d="l"}, + [0xA146]={d="l"}, + [0xA147]={d="l"}, + [0xA148]={d="l"}, + [0xA149]={d="l"}, + [0xA14A]={d="l"}, + [0xA14B]={d="l"}, + [0xA14C]={d="l"}, + [0xA14D]={d="l"}, + [0xA14E]={d="l"}, + [0xA14F]={d="l"}, + [0xA150]={d="l"}, + [0xA151]={d="l"}, + [0xA152]={d="l"}, + [0xA153]={d="l"}, + [0xA154]={d="l"}, + [0xA155]={d="l"}, + [0xA156]={d="l"}, + [0xA157]={d="l"}, + [0xA158]={d="l"}, + [0xA159]={d="l"}, + [0xA15A]={d="l"}, + [0xA15B]={d="l"}, + [0xA15C]={d="l"}, + [0xA15D]={d="l"}, + [0xA15E]={d="l"}, + [0xA15F]={d="l"}, + [0xA160]={d="l"}, + [0xA161]={d="l"}, + [0xA162]={d="l"}, + [0xA163]={d="l"}, + [0xA164]={d="l"}, + [0xA165]={d="l"}, + [0xA166]={d="l"}, + [0xA167]={d="l"}, + [0xA168]={d="l"}, + [0xA169]={d="l"}, + [0xA16A]={d="l"}, + [0xA16B]={d="l"}, + [0xA16C]={d="l"}, + [0xA16D]={d="l"}, + [0xA16E]={d="l"}, + [0xA16F]={d="l"}, + [0xA170]={d="l"}, + [0xA171]={d="l"}, + [0xA172]={d="l"}, + [0xA173]={d="l"}, + [0xA174]={d="l"}, + [0xA175]={d="l"}, + [0xA176]={d="l"}, + [0xA177]={d="l"}, + [0xA178]={d="l"}, + [0xA179]={d="l"}, + [0xA17A]={d="l"}, + [0xA17B]={d="l"}, + [0xA17C]={d="l"}, + [0xA17D]={d="l"}, + [0xA17E]={d="l"}, + [0xA17F]={d="l"}, + [0xA180]={d="l"}, + [0xA181]={d="l"}, + [0xA182]={d="l"}, + [0xA183]={d="l"}, + [0xA184]={d="l"}, + [0xA185]={d="l"}, + [0xA186]={d="l"}, + [0xA187]={d="l"}, + [0xA188]={d="l"}, + [0xA189]={d="l"}, + [0xA18A]={d="l"}, + [0xA18B]={d="l"}, + [0xA18C]={d="l"}, + [0xA18D]={d="l"}, + [0xA18E]={d="l"}, + [0xA18F]={d="l"}, + [0xA190]={d="l"}, + [0xA191]={d="l"}, + [0xA192]={d="l"}, + [0xA193]={d="l"}, + [0xA194]={d="l"}, + [0xA195]={d="l"}, + [0xA196]={d="l"}, + [0xA197]={d="l"}, + [0xA198]={d="l"}, + [0xA199]={d="l"}, + [0xA19A]={d="l"}, + [0xA19B]={d="l"}, + [0xA19C]={d="l"}, + [0xA19D]={d="l"}, + [0xA19E]={d="l"}, + [0xA19F]={d="l"}, + [0xA1A0]={d="l"}, + [0xA1A1]={d="l"}, + [0xA1A2]={d="l"}, + [0xA1A3]={d="l"}, + [0xA1A4]={d="l"}, + [0xA1A5]={d="l"}, + [0xA1A6]={d="l"}, + [0xA1A7]={d="l"}, + [0xA1A8]={d="l"}, + [0xA1A9]={d="l"}, + [0xA1AA]={d="l"}, + [0xA1AB]={d="l"}, + [0xA1AC]={d="l"}, + [0xA1AD]={d="l"}, + [0xA1AE]={d="l"}, + [0xA1AF]={d="l"}, + [0xA1B0]={d="l"}, + [0xA1B1]={d="l"}, + [0xA1B2]={d="l"}, + [0xA1B3]={d="l"}, + [0xA1B4]={d="l"}, + [0xA1B5]={d="l"}, + [0xA1B6]={d="l"}, + [0xA1B7]={d="l"}, + [0xA1B8]={d="l"}, + [0xA1B9]={d="l"}, + [0xA1BA]={d="l"}, + [0xA1BB]={d="l"}, + [0xA1BC]={d="l"}, + [0xA1BD]={d="l"}, + [0xA1BE]={d="l"}, + [0xA1BF]={d="l"}, + [0xA1C0]={d="l"}, + [0xA1C1]={d="l"}, + [0xA1C2]={d="l"}, + [0xA1C3]={d="l"}, + [0xA1C4]={d="l"}, + [0xA1C5]={d="l"}, + [0xA1C6]={d="l"}, + [0xA1C7]={d="l"}, + [0xA1C8]={d="l"}, + [0xA1C9]={d="l"}, + [0xA1CA]={d="l"}, + [0xA1CB]={d="l"}, + [0xA1CC]={d="l"}, + [0xA1CD]={d="l"}, + [0xA1CE]={d="l"}, + [0xA1CF]={d="l"}, + [0xA1D0]={d="l"}, + [0xA1D1]={d="l"}, + [0xA1D2]={d="l"}, + [0xA1D3]={d="l"}, + [0xA1D4]={d="l"}, + [0xA1D5]={d="l"}, + [0xA1D6]={d="l"}, + [0xA1D7]={d="l"}, + [0xA1D8]={d="l"}, + [0xA1D9]={d="l"}, + [0xA1DA]={d="l"}, + [0xA1DB]={d="l"}, + [0xA1DC]={d="l"}, + [0xA1DD]={d="l"}, + [0xA1DE]={d="l"}, + [0xA1DF]={d="l"}, + [0xA1E0]={d="l"}, + [0xA1E1]={d="l"}, + [0xA1E2]={d="l"}, + [0xA1E3]={d="l"}, + [0xA1E4]={d="l"}, + [0xA1E5]={d="l"}, + [0xA1E6]={d="l"}, + [0xA1E7]={d="l"}, + [0xA1E8]={d="l"}, + [0xA1E9]={d="l"}, + [0xA1EA]={d="l"}, + [0xA1EB]={d="l"}, + [0xA1EC]={d="l"}, + [0xA1ED]={d="l"}, + [0xA1EE]={d="l"}, + [0xA1EF]={d="l"}, + [0xA1F0]={d="l"}, + [0xA1F1]={d="l"}, + [0xA1F2]={d="l"}, + [0xA1F3]={d="l"}, + [0xA1F4]={d="l"}, + [0xA1F5]={d="l"}, + [0xA1F6]={d="l"}, + [0xA1F7]={d="l"}, + [0xA1F8]={d="l"}, + [0xA1F9]={d="l"}, + [0xA1FA]={d="l"}, + [0xA1FB]={d="l"}, + [0xA1FC]={d="l"}, + [0xA1FD]={d="l"}, + [0xA1FE]={d="l"}, + [0xA1FF]={d="l"}, + [0xA200]={d="l"}, + [0xA201]={d="l"}, + [0xA202]={d="l"}, + [0xA203]={d="l"}, + [0xA204]={d="l"}, + [0xA205]={d="l"}, + [0xA206]={d="l"}, + [0xA207]={d="l"}, + [0xA208]={d="l"}, + [0xA209]={d="l"}, + [0xA20A]={d="l"}, + [0xA20B]={d="l"}, + [0xA20C]={d="l"}, + [0xA20D]={d="l"}, + [0xA20E]={d="l"}, + [0xA20F]={d="l"}, + [0xA210]={d="l"}, + [0xA211]={d="l"}, + [0xA212]={d="l"}, + [0xA213]={d="l"}, + [0xA214]={d="l"}, + [0xA215]={d="l"}, + [0xA216]={d="l"}, + [0xA217]={d="l"}, + [0xA218]={d="l"}, + [0xA219]={d="l"}, + [0xA21A]={d="l"}, + [0xA21B]={d="l"}, + [0xA21C]={d="l"}, + [0xA21D]={d="l"}, + [0xA21E]={d="l"}, + [0xA21F]={d="l"}, + [0xA220]={d="l"}, + [0xA221]={d="l"}, + [0xA222]={d="l"}, + [0xA223]={d="l"}, + [0xA224]={d="l"}, + [0xA225]={d="l"}, + [0xA226]={d="l"}, + [0xA227]={d="l"}, + [0xA228]={d="l"}, + [0xA229]={d="l"}, + [0xA22A]={d="l"}, + [0xA22B]={d="l"}, + [0xA22C]={d="l"}, + [0xA22D]={d="l"}, + [0xA22E]={d="l"}, + [0xA22F]={d="l"}, + [0xA230]={d="l"}, + [0xA231]={d="l"}, + [0xA232]={d="l"}, + [0xA233]={d="l"}, + [0xA234]={d="l"}, + [0xA235]={d="l"}, + [0xA236]={d="l"}, + [0xA237]={d="l"}, + [0xA238]={d="l"}, + [0xA239]={d="l"}, + [0xA23A]={d="l"}, + [0xA23B]={d="l"}, + [0xA23C]={d="l"}, + [0xA23D]={d="l"}, + [0xA23E]={d="l"}, + [0xA23F]={d="l"}, + [0xA240]={d="l"}, + [0xA241]={d="l"}, + [0xA242]={d="l"}, + [0xA243]={d="l"}, + [0xA244]={d="l"}, + [0xA245]={d="l"}, + [0xA246]={d="l"}, + [0xA247]={d="l"}, + [0xA248]={d="l"}, + [0xA249]={d="l"}, + [0xA24A]={d="l"}, + [0xA24B]={d="l"}, + [0xA24C]={d="l"}, + [0xA24D]={d="l"}, + [0xA24E]={d="l"}, + [0xA24F]={d="l"}, + [0xA250]={d="l"}, + [0xA251]={d="l"}, + [0xA252]={d="l"}, + [0xA253]={d="l"}, + [0xA254]={d="l"}, + [0xA255]={d="l"}, + [0xA256]={d="l"}, + [0xA257]={d="l"}, + [0xA258]={d="l"}, + [0xA259]={d="l"}, + [0xA25A]={d="l"}, + [0xA25B]={d="l"}, + [0xA25C]={d="l"}, + [0xA25D]={d="l"}, + [0xA25E]={d="l"}, + [0xA25F]={d="l"}, + [0xA260]={d="l"}, + [0xA261]={d="l"}, + [0xA262]={d="l"}, + [0xA263]={d="l"}, + [0xA264]={d="l"}, + [0xA265]={d="l"}, + [0xA266]={d="l"}, + [0xA267]={d="l"}, + [0xA268]={d="l"}, + [0xA269]={d="l"}, + [0xA26A]={d="l"}, + [0xA26B]={d="l"}, + [0xA26C]={d="l"}, + [0xA26D]={d="l"}, + [0xA26E]={d="l"}, + [0xA26F]={d="l"}, + [0xA270]={d="l"}, + [0xA271]={d="l"}, + [0xA272]={d="l"}, + [0xA273]={d="l"}, + [0xA274]={d="l"}, + [0xA275]={d="l"}, + [0xA276]={d="l"}, + [0xA277]={d="l"}, + [0xA278]={d="l"}, + [0xA279]={d="l"}, + [0xA27A]={d="l"}, + [0xA27B]={d="l"}, + [0xA27C]={d="l"}, + [0xA27D]={d="l"}, + [0xA27E]={d="l"}, + [0xA27F]={d="l"}, + [0xA280]={d="l"}, + [0xA281]={d="l"}, + [0xA282]={d="l"}, + [0xA283]={d="l"}, + [0xA284]={d="l"}, + [0xA285]={d="l"}, + [0xA286]={d="l"}, + [0xA287]={d="l"}, + [0xA288]={d="l"}, + [0xA289]={d="l"}, + [0xA28A]={d="l"}, + [0xA28B]={d="l"}, + [0xA28C]={d="l"}, + [0xA28D]={d="l"}, + [0xA28E]={d="l"}, + [0xA28F]={d="l"}, + [0xA290]={d="l"}, + [0xA291]={d="l"}, + [0xA292]={d="l"}, + [0xA293]={d="l"}, + [0xA294]={d="l"}, + [0xA295]={d="l"}, + [0xA296]={d="l"}, + [0xA297]={d="l"}, + [0xA298]={d="l"}, + [0xA299]={d="l"}, + [0xA29A]={d="l"}, + [0xA29B]={d="l"}, + [0xA29C]={d="l"}, + [0xA29D]={d="l"}, + [0xA29E]={d="l"}, + [0xA29F]={d="l"}, + [0xA2A0]={d="l"}, + [0xA2A1]={d="l"}, + [0xA2A2]={d="l"}, + [0xA2A3]={d="l"}, + [0xA2A4]={d="l"}, + [0xA2A5]={d="l"}, + [0xA2A6]={d="l"}, + [0xA2A7]={d="l"}, + [0xA2A8]={d="l"}, + [0xA2A9]={d="l"}, + [0xA2AA]={d="l"}, + [0xA2AB]={d="l"}, + [0xA2AC]={d="l"}, + [0xA2AD]={d="l"}, + [0xA2AE]={d="l"}, + [0xA2AF]={d="l"}, + [0xA2B0]={d="l"}, + [0xA2B1]={d="l"}, + [0xA2B2]={d="l"}, + [0xA2B3]={d="l"}, + [0xA2B4]={d="l"}, + [0xA2B5]={d="l"}, + [0xA2B6]={d="l"}, + [0xA2B7]={d="l"}, + [0xA2B8]={d="l"}, + [0xA2B9]={d="l"}, + [0xA2BA]={d="l"}, + [0xA2BB]={d="l"}, + [0xA2BC]={d="l"}, + [0xA2BD]={d="l"}, + [0xA2BE]={d="l"}, + [0xA2BF]={d="l"}, + [0xA2C0]={d="l"}, + [0xA2C1]={d="l"}, + [0xA2C2]={d="l"}, + [0xA2C3]={d="l"}, + [0xA2C4]={d="l"}, + [0xA2C5]={d="l"}, + [0xA2C6]={d="l"}, + [0xA2C7]={d="l"}, + [0xA2C8]={d="l"}, + [0xA2C9]={d="l"}, + [0xA2CA]={d="l"}, + [0xA2CB]={d="l"}, + [0xA2CC]={d="l"}, + [0xA2CD]={d="l"}, + [0xA2CE]={d="l"}, + [0xA2CF]={d="l"}, + [0xA2D0]={d="l"}, + [0xA2D1]={d="l"}, + [0xA2D2]={d="l"}, + [0xA2D3]={d="l"}, + [0xA2D4]={d="l"}, + [0xA2D5]={d="l"}, + [0xA2D6]={d="l"}, + [0xA2D7]={d="l"}, + [0xA2D8]={d="l"}, + [0xA2D9]={d="l"}, + [0xA2DA]={d="l"}, + [0xA2DB]={d="l"}, + [0xA2DC]={d="l"}, + [0xA2DD]={d="l"}, + [0xA2DE]={d="l"}, + [0xA2DF]={d="l"}, + [0xA2E0]={d="l"}, + [0xA2E1]={d="l"}, + [0xA2E2]={d="l"}, + [0xA2E3]={d="l"}, + [0xA2E4]={d="l"}, + [0xA2E5]={d="l"}, + [0xA2E6]={d="l"}, + [0xA2E7]={d="l"}, + [0xA2E8]={d="l"}, + [0xA2E9]={d="l"}, + [0xA2EA]={d="l"}, + [0xA2EB]={d="l"}, + [0xA2EC]={d="l"}, + [0xA2ED]={d="l"}, + [0xA2EE]={d="l"}, + [0xA2EF]={d="l"}, + [0xA2F0]={d="l"}, + [0xA2F1]={d="l"}, + [0xA2F2]={d="l"}, + [0xA2F3]={d="l"}, + [0xA2F4]={d="l"}, + [0xA2F5]={d="l"}, + [0xA2F6]={d="l"}, + [0xA2F7]={d="l"}, + [0xA2F8]={d="l"}, + [0xA2F9]={d="l"}, + [0xA2FA]={d="l"}, + [0xA2FB]={d="l"}, + [0xA2FC]={d="l"}, + [0xA2FD]={d="l"}, + [0xA2FE]={d="l"}, + [0xA2FF]={d="l"}, + [0xA300]={d="l"}, + [0xA301]={d="l"}, + [0xA302]={d="l"}, + [0xA303]={d="l"}, + [0xA304]={d="l"}, + [0xA305]={d="l"}, + [0xA306]={d="l"}, + [0xA307]={d="l"}, + [0xA308]={d="l"}, + [0xA309]={d="l"}, + [0xA30A]={d="l"}, + [0xA30B]={d="l"}, + [0xA30C]={d="l"}, + [0xA30D]={d="l"}, + [0xA30E]={d="l"}, + [0xA30F]={d="l"}, + [0xA310]={d="l"}, + [0xA311]={d="l"}, + [0xA312]={d="l"}, + [0xA313]={d="l"}, + [0xA314]={d="l"}, + [0xA315]={d="l"}, + [0xA316]={d="l"}, + [0xA317]={d="l"}, + [0xA318]={d="l"}, + [0xA319]={d="l"}, + [0xA31A]={d="l"}, + [0xA31B]={d="l"}, + [0xA31C]={d="l"}, + [0xA31D]={d="l"}, + [0xA31E]={d="l"}, + [0xA31F]={d="l"}, + [0xA320]={d="l"}, + [0xA321]={d="l"}, + [0xA322]={d="l"}, + [0xA323]={d="l"}, + [0xA324]={d="l"}, + [0xA325]={d="l"}, + [0xA326]={d="l"}, + [0xA327]={d="l"}, + [0xA328]={d="l"}, + [0xA329]={d="l"}, + [0xA32A]={d="l"}, + [0xA32B]={d="l"}, + [0xA32C]={d="l"}, + [0xA32D]={d="l"}, + [0xA32E]={d="l"}, + [0xA32F]={d="l"}, + [0xA330]={d="l"}, + [0xA331]={d="l"}, + [0xA332]={d="l"}, + [0xA333]={d="l"}, + [0xA334]={d="l"}, + [0xA335]={d="l"}, + [0xA336]={d="l"}, + [0xA337]={d="l"}, + [0xA338]={d="l"}, + [0xA339]={d="l"}, + [0xA33A]={d="l"}, + [0xA33B]={d="l"}, + [0xA33C]={d="l"}, + [0xA33D]={d="l"}, + [0xA33E]={d="l"}, + [0xA33F]={d="l"}, + [0xA340]={d="l"}, + [0xA341]={d="l"}, + [0xA342]={d="l"}, + [0xA343]={d="l"}, + [0xA344]={d="l"}, + [0xA345]={d="l"}, + [0xA346]={d="l"}, + [0xA347]={d="l"}, + [0xA348]={d="l"}, + [0xA349]={d="l"}, + [0xA34A]={d="l"}, + [0xA34B]={d="l"}, + [0xA34C]={d="l"}, + [0xA34D]={d="l"}, + [0xA34E]={d="l"}, + [0xA34F]={d="l"}, + [0xA350]={d="l"}, + [0xA351]={d="l"}, + [0xA352]={d="l"}, + [0xA353]={d="l"}, + [0xA354]={d="l"}, + [0xA355]={d="l"}, + [0xA356]={d="l"}, + [0xA357]={d="l"}, + [0xA358]={d="l"}, + [0xA359]={d="l"}, + [0xA35A]={d="l"}, + [0xA35B]={d="l"}, + [0xA35C]={d="l"}, + [0xA35D]={d="l"}, + [0xA35E]={d="l"}, + [0xA35F]={d="l"}, + [0xA360]={d="l"}, + [0xA361]={d="l"}, + [0xA362]={d="l"}, + [0xA363]={d="l"}, + [0xA364]={d="l"}, + [0xA365]={d="l"}, + [0xA366]={d="l"}, + [0xA367]={d="l"}, + [0xA368]={d="l"}, + [0xA369]={d="l"}, + [0xA36A]={d="l"}, + [0xA36B]={d="l"}, + [0xA36C]={d="l"}, + [0xA36D]={d="l"}, + [0xA36E]={d="l"}, + [0xA36F]={d="l"}, + [0xA370]={d="l"}, + [0xA371]={d="l"}, + [0xA372]={d="l"}, + [0xA373]={d="l"}, + [0xA374]={d="l"}, + [0xA375]={d="l"}, + [0xA376]={d="l"}, + [0xA377]={d="l"}, + [0xA378]={d="l"}, + [0xA379]={d="l"}, + [0xA37A]={d="l"}, + [0xA37B]={d="l"}, + [0xA37C]={d="l"}, + [0xA37D]={d="l"}, + [0xA37E]={d="l"}, + [0xA37F]={d="l"}, + [0xA380]={d="l"}, + [0xA381]={d="l"}, + [0xA382]={d="l"}, + [0xA383]={d="l"}, + [0xA384]={d="l"}, + [0xA385]={d="l"}, + [0xA386]={d="l"}, + [0xA387]={d="l"}, + [0xA388]={d="l"}, + [0xA389]={d="l"}, + [0xA38A]={d="l"}, + [0xA38B]={d="l"}, + [0xA38C]={d="l"}, + [0xA38D]={d="l"}, + [0xA38E]={d="l"}, + [0xA38F]={d="l"}, + [0xA390]={d="l"}, + [0xA391]={d="l"}, + [0xA392]={d="l"}, + [0xA393]={d="l"}, + [0xA394]={d="l"}, + [0xA395]={d="l"}, + [0xA396]={d="l"}, + [0xA397]={d="l"}, + [0xA398]={d="l"}, + [0xA399]={d="l"}, + [0xA39A]={d="l"}, + [0xA39B]={d="l"}, + [0xA39C]={d="l"}, + [0xA39D]={d="l"}, + [0xA39E]={d="l"}, + [0xA39F]={d="l"}, + [0xA3A0]={d="l"}, + [0xA3A1]={d="l"}, + [0xA3A2]={d="l"}, + [0xA3A3]={d="l"}, + [0xA3A4]={d="l"}, + [0xA3A5]={d="l"}, + [0xA3A6]={d="l"}, + [0xA3A7]={d="l"}, + [0xA3A8]={d="l"}, + [0xA3A9]={d="l"}, + [0xA3AA]={d="l"}, + [0xA3AB]={d="l"}, + [0xA3AC]={d="l"}, + [0xA3AD]={d="l"}, + [0xA3AE]={d="l"}, + [0xA3AF]={d="l"}, + [0xA3B0]={d="l"}, + [0xA3B1]={d="l"}, + [0xA3B2]={d="l"}, + [0xA3B3]={d="l"}, + [0xA3B4]={d="l"}, + [0xA3B5]={d="l"}, + [0xA3B6]={d="l"}, + [0xA3B7]={d="l"}, + [0xA3B8]={d="l"}, + [0xA3B9]={d="l"}, + [0xA3BA]={d="l"}, + [0xA3BB]={d="l"}, + [0xA3BC]={d="l"}, + [0xA3BD]={d="l"}, + [0xA3BE]={d="l"}, + [0xA3BF]={d="l"}, + [0xA3C0]={d="l"}, + [0xA3C1]={d="l"}, + [0xA3C2]={d="l"}, + [0xA3C3]={d="l"}, + [0xA3C4]={d="l"}, + [0xA3C5]={d="l"}, + [0xA3C6]={d="l"}, + [0xA3C7]={d="l"}, + [0xA3C8]={d="l"}, + [0xA3C9]={d="l"}, + [0xA3CA]={d="l"}, + [0xA3CB]={d="l"}, + [0xA3CC]={d="l"}, + [0xA3CD]={d="l"}, + [0xA3CE]={d="l"}, + [0xA3CF]={d="l"}, + [0xA3D0]={d="l"}, + [0xA3D1]={d="l"}, + [0xA3D2]={d="l"}, + [0xA3D3]={d="l"}, + [0xA3D4]={d="l"}, + [0xA3D5]={d="l"}, + [0xA3D6]={d="l"}, + [0xA3D7]={d="l"}, + [0xA3D8]={d="l"}, + [0xA3D9]={d="l"}, + [0xA3DA]={d="l"}, + [0xA3DB]={d="l"}, + [0xA3DC]={d="l"}, + [0xA3DD]={d="l"}, + [0xA3DE]={d="l"}, + [0xA3DF]={d="l"}, + [0xA3E0]={d="l"}, + [0xA3E1]={d="l"}, + [0xA3E2]={d="l"}, + [0xA3E3]={d="l"}, + [0xA3E4]={d="l"}, + [0xA3E5]={d="l"}, + [0xA3E6]={d="l"}, + [0xA3E7]={d="l"}, + [0xA3E8]={d="l"}, + [0xA3E9]={d="l"}, + [0xA3EA]={d="l"}, + [0xA3EB]={d="l"}, + [0xA3EC]={d="l"}, + [0xA3ED]={d="l"}, + [0xA3EE]={d="l"}, + [0xA3EF]={d="l"}, + [0xA3F0]={d="l"}, + [0xA3F1]={d="l"}, + [0xA3F2]={d="l"}, + [0xA3F3]={d="l"}, + [0xA3F4]={d="l"}, + [0xA3F5]={d="l"}, + [0xA3F6]={d="l"}, + [0xA3F7]={d="l"}, + [0xA3F8]={d="l"}, + [0xA3F9]={d="l"}, + [0xA3FA]={d="l"}, + [0xA3FB]={d="l"}, + [0xA3FC]={d="l"}, + [0xA3FD]={d="l"}, + [0xA3FE]={d="l"}, + [0xA3FF]={d="l"}, + [0xA400]={d="l"}, + [0xA401]={d="l"}, + [0xA402]={d="l"}, + [0xA403]={d="l"}, + [0xA404]={d="l"}, + [0xA405]={d="l"}, + [0xA406]={d="l"}, + [0xA407]={d="l"}, + [0xA408]={d="l"}, + [0xA409]={d="l"}, + [0xA40A]={d="l"}, + [0xA40B]={d="l"}, + [0xA40C]={d="l"}, + [0xA40D]={d="l"}, + [0xA40E]={d="l"}, + [0xA40F]={d="l"}, + [0xA410]={d="l"}, + [0xA411]={d="l"}, + [0xA412]={d="l"}, + [0xA413]={d="l"}, + [0xA414]={d="l"}, + [0xA415]={d="l"}, + [0xA416]={d="l"}, + [0xA417]={d="l"}, + [0xA418]={d="l"}, + [0xA419]={d="l"}, + [0xA41A]={d="l"}, + [0xA41B]={d="l"}, + [0xA41C]={d="l"}, + [0xA41D]={d="l"}, + [0xA41E]={d="l"}, + [0xA41F]={d="l"}, + [0xA420]={d="l"}, + [0xA421]={d="l"}, + [0xA422]={d="l"}, + [0xA423]={d="l"}, + [0xA424]={d="l"}, + [0xA425]={d="l"}, + [0xA426]={d="l"}, + [0xA427]={d="l"}, + [0xA428]={d="l"}, + [0xA429]={d="l"}, + [0xA42A]={d="l"}, + [0xA42B]={d="l"}, + [0xA42C]={d="l"}, + [0xA42D]={d="l"}, + [0xA42E]={d="l"}, + [0xA42F]={d="l"}, + [0xA430]={d="l"}, + [0xA431]={d="l"}, + [0xA432]={d="l"}, + [0xA433]={d="l"}, + [0xA434]={d="l"}, + [0xA435]={d="l"}, + [0xA436]={d="l"}, + [0xA437]={d="l"}, + [0xA438]={d="l"}, + [0xA439]={d="l"}, + [0xA43A]={d="l"}, + [0xA43B]={d="l"}, + [0xA43C]={d="l"}, + [0xA43D]={d="l"}, + [0xA43E]={d="l"}, + [0xA43F]={d="l"}, + [0xA440]={d="l"}, + [0xA441]={d="l"}, + [0xA442]={d="l"}, + [0xA443]={d="l"}, + [0xA444]={d="l"}, + [0xA445]={d="l"}, + [0xA446]={d="l"}, + [0xA447]={d="l"}, + [0xA448]={d="l"}, + [0xA449]={d="l"}, + [0xA44A]={d="l"}, + [0xA44B]={d="l"}, + [0xA44C]={d="l"}, + [0xA44D]={d="l"}, + [0xA44E]={d="l"}, + [0xA44F]={d="l"}, + [0xA450]={d="l"}, + [0xA451]={d="l"}, + [0xA452]={d="l"}, + [0xA453]={d="l"}, + [0xA454]={d="l"}, + [0xA455]={d="l"}, + [0xA456]={d="l"}, + [0xA457]={d="l"}, + [0xA458]={d="l"}, + [0xA459]={d="l"}, + [0xA45A]={d="l"}, + [0xA45B]={d="l"}, + [0xA45C]={d="l"}, + [0xA45D]={d="l"}, + [0xA45E]={d="l"}, + [0xA45F]={d="l"}, + [0xA460]={d="l"}, + [0xA461]={d="l"}, + [0xA462]={d="l"}, + [0xA463]={d="l"}, + [0xA464]={d="l"}, + [0xA465]={d="l"}, + [0xA466]={d="l"}, + [0xA467]={d="l"}, + [0xA468]={d="l"}, + [0xA469]={d="l"}, + [0xA46A]={d="l"}, + [0xA46B]={d="l"}, + [0xA46C]={d="l"}, + [0xA46D]={d="l"}, + [0xA46E]={d="l"}, + [0xA46F]={d="l"}, + [0xA470]={d="l"}, + [0xA471]={d="l"}, + [0xA472]={d="l"}, + [0xA473]={d="l"}, + [0xA474]={d="l"}, + [0xA475]={d="l"}, + [0xA476]={d="l"}, + [0xA477]={d="l"}, + [0xA478]={d="l"}, + [0xA479]={d="l"}, + [0xA47A]={d="l"}, + [0xA47B]={d="l"}, + [0xA47C]={d="l"}, + [0xA47D]={d="l"}, + [0xA47E]={d="l"}, + [0xA47F]={d="l"}, + [0xA480]={d="l"}, + [0xA481]={d="l"}, + [0xA482]={d="l"}, + [0xA483]={d="l"}, + [0xA484]={d="l"}, + [0xA485]={d="l"}, + [0xA486]={d="l"}, + [0xA487]={d="l"}, + [0xA488]={d="l"}, + [0xA489]={d="l"}, + [0xA48A]={d="l"}, + [0xA48B]={d="l"}, + [0xA48C]={d="l"}, + [0xA490]={d="on"}, + [0xA491]={d="on"}, + [0xA492]={d="on"}, + [0xA493]={d="on"}, + [0xA494]={d="on"}, + [0xA495]={d="on"}, + [0xA496]={d="on"}, + [0xA497]={d="on"}, + [0xA498]={d="on"}, + [0xA499]={d="on"}, + [0xA49A]={d="on"}, + [0xA49B]={d="on"}, + [0xA49C]={d="on"}, + [0xA49D]={d="on"}, + [0xA49E]={d="on"}, + [0xA49F]={d="on"}, + [0xA4A0]={d="on"}, + [0xA4A1]={d="on"}, + [0xA4A2]={d="on"}, + [0xA4A3]={d="on"}, + [0xA4A4]={d="on"}, + [0xA4A5]={d="on"}, + [0xA4A6]={d="on"}, + [0xA4A7]={d="on"}, + [0xA4A8]={d="on"}, + [0xA4A9]={d="on"}, + [0xA4AA]={d="on"}, + [0xA4AB]={d="on"}, + [0xA4AC]={d="on"}, + [0xA4AD]={d="on"}, + [0xA4AE]={d="on"}, + [0xA4AF]={d="on"}, + [0xA4B0]={d="on"}, + [0xA4B1]={d="on"}, + [0xA4B2]={d="on"}, + [0xA4B3]={d="on"}, + [0xA4B4]={d="on"}, + [0xA4B5]={d="on"}, + [0xA4B6]={d="on"}, + [0xA4B7]={d="on"}, + [0xA4B8]={d="on"}, + [0xA4B9]={d="on"}, + [0xA4BA]={d="on"}, + [0xA4BB]={d="on"}, + [0xA4BC]={d="on"}, + [0xA4BD]={d="on"}, + [0xA4BE]={d="on"}, + [0xA4BF]={d="on"}, + [0xA4C0]={d="on"}, + [0xA4C1]={d="on"}, + [0xA4C2]={d="on"}, + [0xA4C3]={d="on"}, + [0xA4C4]={d="on"}, + [0xA4C5]={d="on"}, + [0xA4C6]={d="on"}, + [0xA4D0]={d="l"}, + [0xA4D1]={d="l"}, + [0xA4D2]={d="l"}, + [0xA4D3]={d="l"}, + [0xA4D4]={d="l"}, + [0xA4D5]={d="l"}, + [0xA4D6]={d="l"}, + [0xA4D7]={d="l"}, + [0xA4D8]={d="l"}, + [0xA4D9]={d="l"}, + [0xA4DA]={d="l"}, + [0xA4DB]={d="l"}, + [0xA4DC]={d="l"}, + [0xA4DD]={d="l"}, + [0xA4DE]={d="l"}, + [0xA4DF]={d="l"}, + [0xA4E0]={d="l"}, + [0xA4E1]={d="l"}, + [0xA4E2]={d="l"}, + [0xA4E3]={d="l"}, + [0xA4E4]={d="l"}, + [0xA4E5]={d="l"}, + [0xA4E6]={d="l"}, + [0xA4E7]={d="l"}, + [0xA4E8]={d="l"}, + [0xA4E9]={d="l"}, + [0xA4EA]={d="l"}, + [0xA4EB]={d="l"}, + [0xA4EC]={d="l"}, + [0xA4ED]={d="l"}, + [0xA4EE]={d="l"}, + [0xA4EF]={d="l"}, + [0xA4F0]={d="l"}, + [0xA4F1]={d="l"}, + [0xA4F2]={d="l"}, + [0xA4F3]={d="l"}, + [0xA4F4]={d="l"}, + [0xA4F5]={d="l"}, + [0xA4F6]={d="l"}, + [0xA4F7]={d="l"}, + [0xA4F8]={d="l"}, + [0xA4F9]={d="l"}, + [0xA4FA]={d="l"}, + [0xA4FB]={d="l"}, + [0xA4FC]={d="l"}, + [0xA4FD]={d="l"}, + [0xA4FE]={d="l"}, + [0xA4FF]={d="l"}, + [0xA500]={d="l"}, + [0xA501]={d="l"}, + [0xA502]={d="l"}, + [0xA503]={d="l"}, + [0xA504]={d="l"}, + [0xA505]={d="l"}, + [0xA506]={d="l"}, + [0xA507]={d="l"}, + [0xA508]={d="l"}, + [0xA509]={d="l"}, + [0xA50A]={d="l"}, + [0xA50B]={d="l"}, + [0xA50C]={d="l"}, + [0xA50D]={d="l"}, + [0xA50E]={d="l"}, + [0xA50F]={d="l"}, + [0xA510]={d="l"}, + [0xA511]={d="l"}, + [0xA512]={d="l"}, + [0xA513]={d="l"}, + [0xA514]={d="l"}, + [0xA515]={d="l"}, + [0xA516]={d="l"}, + [0xA517]={d="l"}, + [0xA518]={d="l"}, + [0xA519]={d="l"}, + [0xA51A]={d="l"}, + [0xA51B]={d="l"}, + [0xA51C]={d="l"}, + [0xA51D]={d="l"}, + [0xA51E]={d="l"}, + [0xA51F]={d="l"}, + [0xA520]={d="l"}, + [0xA521]={d="l"}, + [0xA522]={d="l"}, + [0xA523]={d="l"}, + [0xA524]={d="l"}, + [0xA525]={d="l"}, + [0xA526]={d="l"}, + [0xA527]={d="l"}, + [0xA528]={d="l"}, + [0xA529]={d="l"}, + [0xA52A]={d="l"}, + [0xA52B]={d="l"}, + [0xA52C]={d="l"}, + [0xA52D]={d="l"}, + [0xA52E]={d="l"}, + [0xA52F]={d="l"}, + [0xA530]={d="l"}, + [0xA531]={d="l"}, + [0xA532]={d="l"}, + [0xA533]={d="l"}, + [0xA534]={d="l"}, + [0xA535]={d="l"}, + [0xA536]={d="l"}, + [0xA537]={d="l"}, + [0xA538]={d="l"}, + [0xA539]={d="l"}, + [0xA53A]={d="l"}, + [0xA53B]={d="l"}, + [0xA53C]={d="l"}, + [0xA53D]={d="l"}, + [0xA53E]={d="l"}, + [0xA53F]={d="l"}, + [0xA540]={d="l"}, + [0xA541]={d="l"}, + [0xA542]={d="l"}, + [0xA543]={d="l"}, + [0xA544]={d="l"}, + [0xA545]={d="l"}, + [0xA546]={d="l"}, + [0xA547]={d="l"}, + [0xA548]={d="l"}, + [0xA549]={d="l"}, + [0xA54A]={d="l"}, + [0xA54B]={d="l"}, + [0xA54C]={d="l"}, + [0xA54D]={d="l"}, + [0xA54E]={d="l"}, + [0xA54F]={d="l"}, + [0xA550]={d="l"}, + [0xA551]={d="l"}, + [0xA552]={d="l"}, + [0xA553]={d="l"}, + [0xA554]={d="l"}, + [0xA555]={d="l"}, + [0xA556]={d="l"}, + [0xA557]={d="l"}, + [0xA558]={d="l"}, + [0xA559]={d="l"}, + [0xA55A]={d="l"}, + [0xA55B]={d="l"}, + [0xA55C]={d="l"}, + [0xA55D]={d="l"}, + [0xA55E]={d="l"}, + [0xA55F]={d="l"}, + [0xA560]={d="l"}, + [0xA561]={d="l"}, + [0xA562]={d="l"}, + [0xA563]={d="l"}, + [0xA564]={d="l"}, + [0xA565]={d="l"}, + [0xA566]={d="l"}, + [0xA567]={d="l"}, + [0xA568]={d="l"}, + [0xA569]={d="l"}, + [0xA56A]={d="l"}, + [0xA56B]={d="l"}, + [0xA56C]={d="l"}, + [0xA56D]={d="l"}, + [0xA56E]={d="l"}, + [0xA56F]={d="l"}, + [0xA570]={d="l"}, + [0xA571]={d="l"}, + [0xA572]={d="l"}, + [0xA573]={d="l"}, + [0xA574]={d="l"}, + [0xA575]={d="l"}, + [0xA576]={d="l"}, + [0xA577]={d="l"}, + [0xA578]={d="l"}, + [0xA579]={d="l"}, + [0xA57A]={d="l"}, + [0xA57B]={d="l"}, + [0xA57C]={d="l"}, + [0xA57D]={d="l"}, + [0xA57E]={d="l"}, + [0xA57F]={d="l"}, + [0xA580]={d="l"}, + [0xA581]={d="l"}, + [0xA582]={d="l"}, + [0xA583]={d="l"}, + [0xA584]={d="l"}, + [0xA585]={d="l"}, + [0xA586]={d="l"}, + [0xA587]={d="l"}, + [0xA588]={d="l"}, + [0xA589]={d="l"}, + [0xA58A]={d="l"}, + [0xA58B]={d="l"}, + [0xA58C]={d="l"}, + [0xA58D]={d="l"}, + [0xA58E]={d="l"}, + [0xA58F]={d="l"}, + [0xA590]={d="l"}, + [0xA591]={d="l"}, + [0xA592]={d="l"}, + [0xA593]={d="l"}, + [0xA594]={d="l"}, + [0xA595]={d="l"}, + [0xA596]={d="l"}, + [0xA597]={d="l"}, + [0xA598]={d="l"}, + [0xA599]={d="l"}, + [0xA59A]={d="l"}, + [0xA59B]={d="l"}, + [0xA59C]={d="l"}, + [0xA59D]={d="l"}, + [0xA59E]={d="l"}, + [0xA59F]={d="l"}, + [0xA5A0]={d="l"}, + [0xA5A1]={d="l"}, + [0xA5A2]={d="l"}, + [0xA5A3]={d="l"}, + [0xA5A4]={d="l"}, + [0xA5A5]={d="l"}, + [0xA5A6]={d="l"}, + [0xA5A7]={d="l"}, + [0xA5A8]={d="l"}, + [0xA5A9]={d="l"}, + [0xA5AA]={d="l"}, + [0xA5AB]={d="l"}, + [0xA5AC]={d="l"}, + [0xA5AD]={d="l"}, + [0xA5AE]={d="l"}, + [0xA5AF]={d="l"}, + [0xA5B0]={d="l"}, + [0xA5B1]={d="l"}, + [0xA5B2]={d="l"}, + [0xA5B3]={d="l"}, + [0xA5B4]={d="l"}, + [0xA5B5]={d="l"}, + [0xA5B6]={d="l"}, + [0xA5B7]={d="l"}, + [0xA5B8]={d="l"}, + [0xA5B9]={d="l"}, + [0xA5BA]={d="l"}, + [0xA5BB]={d="l"}, + [0xA5BC]={d="l"}, + [0xA5BD]={d="l"}, + [0xA5BE]={d="l"}, + [0xA5BF]={d="l"}, + [0xA5C0]={d="l"}, + [0xA5C1]={d="l"}, + [0xA5C2]={d="l"}, + [0xA5C3]={d="l"}, + [0xA5C4]={d="l"}, + [0xA5C5]={d="l"}, + [0xA5C6]={d="l"}, + [0xA5C7]={d="l"}, + [0xA5C8]={d="l"}, + [0xA5C9]={d="l"}, + [0xA5CA]={d="l"}, + [0xA5CB]={d="l"}, + [0xA5CC]={d="l"}, + [0xA5CD]={d="l"}, + [0xA5CE]={d="l"}, + [0xA5CF]={d="l"}, + [0xA5D0]={d="l"}, + [0xA5D1]={d="l"}, + [0xA5D2]={d="l"}, + [0xA5D3]={d="l"}, + [0xA5D4]={d="l"}, + [0xA5D5]={d="l"}, + [0xA5D6]={d="l"}, + [0xA5D7]={d="l"}, + [0xA5D8]={d="l"}, + [0xA5D9]={d="l"}, + [0xA5DA]={d="l"}, + [0xA5DB]={d="l"}, + [0xA5DC]={d="l"}, + [0xA5DD]={d="l"}, + [0xA5DE]={d="l"}, + [0xA5DF]={d="l"}, + [0xA5E0]={d="l"}, + [0xA5E1]={d="l"}, + [0xA5E2]={d="l"}, + [0xA5E3]={d="l"}, + [0xA5E4]={d="l"}, + [0xA5E5]={d="l"}, + [0xA5E6]={d="l"}, + [0xA5E7]={d="l"}, + [0xA5E8]={d="l"}, + [0xA5E9]={d="l"}, + [0xA5EA]={d="l"}, + [0xA5EB]={d="l"}, + [0xA5EC]={d="l"}, + [0xA5ED]={d="l"}, + [0xA5EE]={d="l"}, + [0xA5EF]={d="l"}, + [0xA5F0]={d="l"}, + [0xA5F1]={d="l"}, + [0xA5F2]={d="l"}, + [0xA5F3]={d="l"}, + [0xA5F4]={d="l"}, + [0xA5F5]={d="l"}, + [0xA5F6]={d="l"}, + [0xA5F7]={d="l"}, + [0xA5F8]={d="l"}, + [0xA5F9]={d="l"}, + [0xA5FA]={d="l"}, + [0xA5FB]={d="l"}, + [0xA5FC]={d="l"}, + [0xA5FD]={d="l"}, + [0xA5FE]={d="l"}, + [0xA5FF]={d="l"}, + [0xA600]={d="l"}, + [0xA601]={d="l"}, + [0xA602]={d="l"}, + [0xA603]={d="l"}, + [0xA604]={d="l"}, + [0xA605]={d="l"}, + [0xA606]={d="l"}, + [0xA607]={d="l"}, + [0xA608]={d="l"}, + [0xA609]={d="l"}, + [0xA60A]={d="l"}, + [0xA60B]={d="l"}, + [0xA60C]={d="l"}, + [0xA60D]={d="on"}, + [0xA60E]={d="on"}, + [0xA60F]={d="on"}, + [0xA610]={d="l"}, + [0xA611]={d="l"}, + [0xA612]={d="l"}, + [0xA613]={d="l"}, + [0xA614]={d="l"}, + [0xA615]={d="l"}, + [0xA616]={d="l"}, + [0xA617]={d="l"}, + [0xA618]={d="l"}, + [0xA619]={d="l"}, + [0xA61A]={d="l"}, + [0xA61B]={d="l"}, + [0xA61C]={d="l"}, + [0xA61D]={d="l"}, + [0xA61E]={d="l"}, + [0xA61F]={d="l"}, + [0xA620]={d="l"}, + [0xA621]={d="l"}, + [0xA622]={d="l"}, + [0xA623]={d="l"}, + [0xA624]={d="l"}, + [0xA625]={d="l"}, + [0xA626]={d="l"}, + [0xA627]={d="l"}, + [0xA628]={d="l"}, + [0xA629]={d="l"}, + [0xA62A]={d="l"}, + [0xA62B]={d="l"}, + [0xA640]={d="l"}, + [0xA641]={d="l"}, + [0xA642]={d="l"}, + [0xA643]={d="l"}, + [0xA644]={d="l"}, + [0xA645]={d="l"}, + [0xA646]={d="l"}, + [0xA647]={d="l"}, + [0xA648]={d="l"}, + [0xA649]={d="l"}, + [0xA64A]={d="l"}, + [0xA64B]={d="l"}, + [0xA64C]={d="l"}, + [0xA64D]={d="l"}, + [0xA64E]={d="l"}, + [0xA64F]={d="l"}, + [0xA650]={d="l"}, + [0xA651]={d="l"}, + [0xA652]={d="l"}, + [0xA653]={d="l"}, + [0xA654]={d="l"}, + [0xA655]={d="l"}, + [0xA656]={d="l"}, + [0xA657]={d="l"}, + [0xA658]={d="l"}, + [0xA659]={d="l"}, + [0xA65A]={d="l"}, + [0xA65B]={d="l"}, + [0xA65C]={d="l"}, + [0xA65D]={d="l"}, + [0xA65E]={d="l"}, + [0xA65F]={d="l"}, + [0xA660]={d="l"}, + [0xA661]={d="l"}, + [0xA662]={d="l"}, + [0xA663]={d="l"}, + [0xA664]={d="l"}, + [0xA665]={d="l"}, + [0xA666]={d="l"}, + [0xA667]={d="l"}, + [0xA668]={d="l"}, + [0xA669]={d="l"}, + [0xA66A]={d="l"}, + [0xA66B]={d="l"}, + [0xA66C]={d="l"}, + [0xA66D]={d="l"}, + [0xA66E]={d="l"}, + [0xA66F]={d="nsm"}, + [0xA670]={d="nsm"}, + [0xA671]={d="nsm"}, + [0xA672]={d="nsm"}, + [0xA673]={d="on"}, + [0xA674]={d="nsm"}, + [0xA675]={d="nsm"}, + [0xA676]={d="nsm"}, + [0xA677]={d="nsm"}, + [0xA678]={d="nsm"}, + [0xA679]={d="nsm"}, + [0xA67A]={d="nsm"}, + [0xA67B]={d="nsm"}, + [0xA67C]={d="nsm"}, + [0xA67D]={d="nsm"}, + [0xA67E]={d="on"}, + [0xA67F]={d="on"}, + [0xA680]={d="l"}, + [0xA681]={d="l"}, + [0xA682]={d="l"}, + [0xA683]={d="l"}, + [0xA684]={d="l"}, + [0xA685]={d="l"}, + [0xA686]={d="l"}, + [0xA687]={d="l"}, + [0xA688]={d="l"}, + [0xA689]={d="l"}, + [0xA68A]={d="l"}, + [0xA68B]={d="l"}, + [0xA68C]={d="l"}, + [0xA68D]={d="l"}, + [0xA68E]={d="l"}, + [0xA68F]={d="l"}, + [0xA690]={d="l"}, + [0xA691]={d="l"}, + [0xA692]={d="l"}, + [0xA693]={d="l"}, + [0xA694]={d="l"}, + [0xA695]={d="l"}, + [0xA696]={d="l"}, + [0xA697]={d="l"}, + [0xA698]={d="l"}, + [0xA699]={d="l"}, + [0xA69A]={d="l"}, + [0xA69B]={d="l"}, + [0xA69C]={d="l"}, + [0xA69D]={d="l"}, + [0xA69E]={d="nsm"}, + [0xA69F]={d="nsm"}, + [0xA6A0]={d="l"}, + [0xA6A1]={d="l"}, + [0xA6A2]={d="l"}, + [0xA6A3]={d="l"}, + [0xA6A4]={d="l"}, + [0xA6A5]={d="l"}, + [0xA6A6]={d="l"}, + [0xA6A7]={d="l"}, + [0xA6A8]={d="l"}, + [0xA6A9]={d="l"}, + [0xA6AA]={d="l"}, + [0xA6AB]={d="l"}, + [0xA6AC]={d="l"}, + [0xA6AD]={d="l"}, + [0xA6AE]={d="l"}, + [0xA6AF]={d="l"}, + [0xA6B0]={d="l"}, + [0xA6B1]={d="l"}, + [0xA6B2]={d="l"}, + [0xA6B3]={d="l"}, + [0xA6B4]={d="l"}, + [0xA6B5]={d="l"}, + [0xA6B6]={d="l"}, + [0xA6B7]={d="l"}, + [0xA6B8]={d="l"}, + [0xA6B9]={d="l"}, + [0xA6BA]={d="l"}, + [0xA6BB]={d="l"}, + [0xA6BC]={d="l"}, + [0xA6BD]={d="l"}, + [0xA6BE]={d="l"}, + [0xA6BF]={d="l"}, + [0xA6C0]={d="l"}, + [0xA6C1]={d="l"}, + [0xA6C2]={d="l"}, + [0xA6C3]={d="l"}, + [0xA6C4]={d="l"}, + [0xA6C5]={d="l"}, + [0xA6C6]={d="l"}, + [0xA6C7]={d="l"}, + [0xA6C8]={d="l"}, + [0xA6C9]={d="l"}, + [0xA6CA]={d="l"}, + [0xA6CB]={d="l"}, + [0xA6CC]={d="l"}, + [0xA6CD]={d="l"}, + [0xA6CE]={d="l"}, + [0xA6CF]={d="l"}, + [0xA6D0]={d="l"}, + [0xA6D1]={d="l"}, + [0xA6D2]={d="l"}, + [0xA6D3]={d="l"}, + [0xA6D4]={d="l"}, + [0xA6D5]={d="l"}, + [0xA6D6]={d="l"}, + [0xA6D7]={d="l"}, + [0xA6D8]={d="l"}, + [0xA6D9]={d="l"}, + [0xA6DA]={d="l"}, + [0xA6DB]={d="l"}, + [0xA6DC]={d="l"}, + [0xA6DD]={d="l"}, + [0xA6DE]={d="l"}, + [0xA6DF]={d="l"}, + [0xA6E0]={d="l"}, + [0xA6E1]={d="l"}, + [0xA6E2]={d="l"}, + [0xA6E3]={d="l"}, + [0xA6E4]={d="l"}, + [0xA6E5]={d="l"}, + [0xA6E6]={d="l"}, + [0xA6E7]={d="l"}, + [0xA6E8]={d="l"}, + [0xA6E9]={d="l"}, + [0xA6EA]={d="l"}, + [0xA6EB]={d="l"}, + [0xA6EC]={d="l"}, + [0xA6ED]={d="l"}, + [0xA6EE]={d="l"}, + [0xA6EF]={d="l"}, + [0xA6F0]={d="nsm"}, + [0xA6F1]={d="nsm"}, + [0xA6F2]={d="l"}, + [0xA6F3]={d="l"}, + [0xA6F4]={d="l"}, + [0xA6F5]={d="l"}, + [0xA6F6]={d="l"}, + [0xA6F7]={d="l"}, + [0xA700]={d="on"}, + [0xA701]={d="on"}, + [0xA702]={d="on"}, + [0xA703]={d="on"}, + [0xA704]={d="on"}, + [0xA705]={d="on"}, + [0xA706]={d="on"}, + [0xA707]={d="on"}, + [0xA708]={d="on"}, + [0xA709]={d="on"}, + [0xA70A]={d="on"}, + [0xA70B]={d="on"}, + [0xA70C]={d="on"}, + [0xA70D]={d="on"}, + [0xA70E]={d="on"}, + [0xA70F]={d="on"}, + [0xA710]={d="on"}, + [0xA711]={d="on"}, + [0xA712]={d="on"}, + [0xA713]={d="on"}, + [0xA714]={d="on"}, + [0xA715]={d="on"}, + [0xA716]={d="on"}, + [0xA717]={d="on"}, + [0xA718]={d="on"}, + [0xA719]={d="on"}, + [0xA71A]={d="on"}, + [0xA71B]={d="on"}, + [0xA71C]={d="on"}, + [0xA71D]={d="on"}, + [0xA71E]={d="on"}, + [0xA71F]={d="on"}, + [0xA720]={d="on"}, + [0xA721]={d="on"}, + [0xA722]={d="l"}, + [0xA723]={d="l"}, + [0xA724]={d="l"}, + [0xA725]={d="l"}, + [0xA726]={d="l"}, + [0xA727]={d="l"}, + [0xA728]={d="l"}, + [0xA729]={d="l"}, + [0xA72A]={d="l"}, + [0xA72B]={d="l"}, + [0xA72C]={d="l"}, + [0xA72D]={d="l"}, + [0xA72E]={d="l"}, + [0xA72F]={d="l"}, + [0xA730]={d="l"}, + [0xA731]={d="l"}, + [0xA732]={d="l"}, + [0xA733]={d="l"}, + [0xA734]={d="l"}, + [0xA735]={d="l"}, + [0xA736]={d="l"}, + [0xA737]={d="l"}, + [0xA738]={d="l"}, + [0xA739]={d="l"}, + [0xA73A]={d="l"}, + [0xA73B]={d="l"}, + [0xA73C]={d="l"}, + [0xA73D]={d="l"}, + [0xA73E]={d="l"}, + [0xA73F]={d="l"}, + [0xA740]={d="l"}, + [0xA741]={d="l"}, + [0xA742]={d="l"}, + [0xA743]={d="l"}, + [0xA744]={d="l"}, + [0xA745]={d="l"}, + [0xA746]={d="l"}, + [0xA747]={d="l"}, + [0xA748]={d="l"}, + [0xA749]={d="l"}, + [0xA74A]={d="l"}, + [0xA74B]={d="l"}, + [0xA74C]={d="l"}, + [0xA74D]={d="l"}, + [0xA74E]={d="l"}, + [0xA74F]={d="l"}, + [0xA750]={d="l"}, + [0xA751]={d="l"}, + [0xA752]={d="l"}, + [0xA753]={d="l"}, + [0xA754]={d="l"}, + [0xA755]={d="l"}, + [0xA756]={d="l"}, + [0xA757]={d="l"}, + [0xA758]={d="l"}, + [0xA759]={d="l"}, + [0xA75A]={d="l"}, + [0xA75B]={d="l"}, + [0xA75C]={d="l"}, + [0xA75D]={d="l"}, + [0xA75E]={d="l"}, + [0xA75F]={d="l"}, + [0xA760]={d="l"}, + [0xA761]={d="l"}, + [0xA762]={d="l"}, + [0xA763]={d="l"}, + [0xA764]={d="l"}, + [0xA765]={d="l"}, + [0xA766]={d="l"}, + [0xA767]={d="l"}, + [0xA768]={d="l"}, + [0xA769]={d="l"}, + [0xA76A]={d="l"}, + [0xA76B]={d="l"}, + [0xA76C]={d="l"}, + [0xA76D]={d="l"}, + [0xA76E]={d="l"}, + [0xA76F]={d="l"}, + [0xA770]={d="l"}, + [0xA771]={d="l"}, + [0xA772]={d="l"}, + [0xA773]={d="l"}, + [0xA774]={d="l"}, + [0xA775]={d="l"}, + [0xA776]={d="l"}, + [0xA777]={d="l"}, + [0xA778]={d="l"}, + [0xA779]={d="l"}, + [0xA77A]={d="l"}, + [0xA77B]={d="l"}, + [0xA77C]={d="l"}, + [0xA77D]={d="l"}, + [0xA77E]={d="l"}, + [0xA77F]={d="l"}, + [0xA780]={d="l"}, + [0xA781]={d="l"}, + [0xA782]={d="l"}, + [0xA783]={d="l"}, + [0xA784]={d="l"}, + [0xA785]={d="l"}, + [0xA786]={d="l"}, + [0xA787]={d="l"}, + [0xA788]={d="on"}, + [0xA789]={d="l"}, + [0xA78A]={d="l"}, + [0xA78B]={d="l"}, + [0xA78C]={d="l"}, + [0xA78D]={d="l"}, + [0xA78E]={d="l"}, + [0xA78F]={d="l"}, + [0xA790]={d="l"}, + [0xA791]={d="l"}, + [0xA792]={d="l"}, + [0xA793]={d="l"}, + [0xA794]={d="l"}, + [0xA795]={d="l"}, + [0xA796]={d="l"}, + [0xA797]={d="l"}, + [0xA798]={d="l"}, + [0xA799]={d="l"}, + [0xA79A]={d="l"}, + [0xA79B]={d="l"}, + [0xA79C]={d="l"}, + [0xA79D]={d="l"}, + [0xA79E]={d="l"}, + [0xA79F]={d="l"}, + [0xA7A0]={d="l"}, + [0xA7A1]={d="l"}, + [0xA7A2]={d="l"}, + [0xA7A3]={d="l"}, + [0xA7A4]={d="l"}, + [0xA7A5]={d="l"}, + [0xA7A6]={d="l"}, + [0xA7A7]={d="l"}, + [0xA7A8]={d="l"}, + [0xA7A9]={d="l"}, + [0xA7AA]={d="l"}, + [0xA7AB]={d="l"}, + [0xA7AC]={d="l"}, + [0xA7AD]={d="l"}, + [0xA7AE]={d="l"}, + [0xA7AF]={d="l"}, + [0xA7B0]={d="l"}, + [0xA7B1]={d="l"}, + [0xA7B2]={d="l"}, + [0xA7B3]={d="l"}, + [0xA7B4]={d="l"}, + [0xA7B5]={d="l"}, + [0xA7B6]={d="l"}, + [0xA7B7]={d="l"}, + [0xA7B8]={d="l"}, + [0xA7B9]={d="l"}, + [0xA7BA]={d="l"}, + [0xA7BB]={d="l"}, + [0xA7BC]={d="l"}, + [0xA7BD]={d="l"}, + [0xA7BE]={d="l"}, + [0xA7BF]={d="l"}, + [0xA7C0]={d="l"}, + [0xA7C1]={d="l"}, + [0xA7C2]={d="l"}, + [0xA7C3]={d="l"}, + [0xA7C4]={d="l"}, + [0xA7C5]={d="l"}, + [0xA7C6]={d="l"}, + [0xA7C7]={d="l"}, + [0xA7C8]={d="l"}, + [0xA7C9]={d="l"}, + [0xA7CA]={d="l"}, + [0xA7D0]={d="l"}, + [0xA7D1]={d="l"}, + [0xA7D3]={d="l"}, + [0xA7D5]={d="l"}, + [0xA7D6]={d="l"}, + [0xA7D7]={d="l"}, + [0xA7D8]={d="l"}, + [0xA7D9]={d="l"}, + [0xA7F2]={d="l"}, + [0xA7F3]={d="l"}, + [0xA7F4]={d="l"}, + [0xA7F5]={d="l"}, + [0xA7F6]={d="l"}, + [0xA7F7]={d="l"}, + [0xA7F8]={d="l"}, + [0xA7F9]={d="l"}, + [0xA7FA]={d="l"}, + [0xA7FB]={d="l"}, + [0xA7FC]={d="l"}, + [0xA7FD]={d="l"}, + [0xA7FE]={d="l"}, + [0xA7FF]={d="l"}, + [0xA800]={d="l"}, + [0xA801]={d="l"}, + [0xA802]={d="nsm"}, + [0xA803]={d="l"}, + [0xA804]={d="l"}, + [0xA805]={d="l"}, + [0xA806]={d="nsm"}, + [0xA807]={d="l"}, + [0xA808]={d="l"}, + [0xA809]={d="l"}, + [0xA80A]={d="l"}, + [0xA80B]={d="nsm"}, + [0xA80C]={d="l"}, + [0xA80D]={d="l"}, + [0xA80E]={d="l"}, + [0xA80F]={d="l"}, + [0xA810]={d="l"}, + [0xA811]={d="l"}, + [0xA812]={d="l"}, + [0xA813]={d="l"}, + [0xA814]={d="l"}, + [0xA815]={d="l"}, + [0xA816]={d="l"}, + [0xA817]={d="l"}, + [0xA818]={d="l"}, + [0xA819]={d="l"}, + [0xA81A]={d="l"}, + [0xA81B]={d="l"}, + [0xA81C]={d="l"}, + [0xA81D]={d="l"}, + [0xA81E]={d="l"}, + [0xA81F]={d="l"}, + [0xA820]={d="l"}, + [0xA821]={d="l"}, + [0xA822]={d="l"}, + [0xA823]={d="l"}, + [0xA824]={d="l"}, + [0xA825]={d="nsm"}, + [0xA826]={d="nsm"}, + [0xA827]={d="l"}, + [0xA828]={d="on"}, + [0xA829]={d="on"}, + [0xA82A]={d="on"}, + [0xA82B]={d="on"}, + [0xA82C]={d="nsm"}, + [0xA830]={d="l"}, + [0xA831]={d="l"}, + [0xA832]={d="l"}, + [0xA833]={d="l"}, + [0xA834]={d="l"}, + [0xA835]={d="l"}, + [0xA836]={d="l"}, + [0xA837]={d="l"}, + [0xA838]={d="et"}, + [0xA839]={d="et"}, + [0xA840]={d="l"}, + [0xA841]={d="l"}, + [0xA842]={d="l"}, + [0xA843]={d="l"}, + [0xA844]={d="l"}, + [0xA845]={d="l"}, + [0xA846]={d="l"}, + [0xA847]={d="l"}, + [0xA848]={d="l"}, + [0xA849]={d="l"}, + [0xA84A]={d="l"}, + [0xA84B]={d="l"}, + [0xA84C]={d="l"}, + [0xA84D]={d="l"}, + [0xA84E]={d="l"}, + [0xA84F]={d="l"}, + [0xA850]={d="l"}, + [0xA851]={d="l"}, + [0xA852]={d="l"}, + [0xA853]={d="l"}, + [0xA854]={d="l"}, + [0xA855]={d="l"}, + [0xA856]={d="l"}, + [0xA857]={d="l"}, + [0xA858]={d="l"}, + [0xA859]={d="l"}, + [0xA85A]={d="l"}, + [0xA85B]={d="l"}, + [0xA85C]={d="l"}, + [0xA85D]={d="l"}, + [0xA85E]={d="l"}, + [0xA85F]={d="l"}, + [0xA860]={d="l"}, + [0xA861]={d="l"}, + [0xA862]={d="l"}, + [0xA863]={d="l"}, + [0xA864]={d="l"}, + [0xA865]={d="l"}, + [0xA866]={d="l"}, + [0xA867]={d="l"}, + [0xA868]={d="l"}, + [0xA869]={d="l"}, + [0xA86A]={d="l"}, + [0xA86B]={d="l"}, + [0xA86C]={d="l"}, + [0xA86D]={d="l"}, + [0xA86E]={d="l"}, + [0xA86F]={d="l"}, + [0xA870]={d="l"}, + [0xA871]={d="l"}, + [0xA872]={d="l"}, + [0xA873]={d="l"}, + [0xA874]={d="on"}, + [0xA875]={d="on"}, + [0xA876]={d="on"}, + [0xA877]={d="on"}, + [0xA880]={d="l"}, + [0xA881]={d="l"}, + [0xA882]={d="l"}, + [0xA883]={d="l"}, + [0xA884]={d="l"}, + [0xA885]={d="l"}, + [0xA886]={d="l"}, + [0xA887]={d="l"}, + [0xA888]={d="l"}, + [0xA889]={d="l"}, + [0xA88A]={d="l"}, + [0xA88B]={d="l"}, + [0xA88C]={d="l"}, + [0xA88D]={d="l"}, + [0xA88E]={d="l"}, + [0xA88F]={d="l"}, + [0xA890]={d="l"}, + [0xA891]={d="l"}, + [0xA892]={d="l"}, + [0xA893]={d="l"}, + [0xA894]={d="l"}, + [0xA895]={d="l"}, + [0xA896]={d="l"}, + [0xA897]={d="l"}, + [0xA898]={d="l"}, + [0xA899]={d="l"}, + [0xA89A]={d="l"}, + [0xA89B]={d="l"}, + [0xA89C]={d="l"}, + [0xA89D]={d="l"}, + [0xA89E]={d="l"}, + [0xA89F]={d="l"}, + [0xA8A0]={d="l"}, + [0xA8A1]={d="l"}, + [0xA8A2]={d="l"}, + [0xA8A3]={d="l"}, + [0xA8A4]={d="l"}, + [0xA8A5]={d="l"}, + [0xA8A6]={d="l"}, + [0xA8A7]={d="l"}, + [0xA8A8]={d="l"}, + [0xA8A9]={d="l"}, + [0xA8AA]={d="l"}, + [0xA8AB]={d="l"}, + [0xA8AC]={d="l"}, + [0xA8AD]={d="l"}, + [0xA8AE]={d="l"}, + [0xA8AF]={d="l"}, + [0xA8B0]={d="l"}, + [0xA8B1]={d="l"}, + [0xA8B2]={d="l"}, + [0xA8B3]={d="l"}, + [0xA8B4]={d="l"}, + [0xA8B5]={d="l"}, + [0xA8B6]={d="l"}, + [0xA8B7]={d="l"}, + [0xA8B8]={d="l"}, + [0xA8B9]={d="l"}, + [0xA8BA]={d="l"}, + [0xA8BB]={d="l"}, + [0xA8BC]={d="l"}, + [0xA8BD]={d="l"}, + [0xA8BE]={d="l"}, + [0xA8BF]={d="l"}, + [0xA8C0]={d="l"}, + [0xA8C1]={d="l"}, + [0xA8C2]={d="l"}, + [0xA8C3]={d="l"}, + [0xA8C4]={d="nsm"}, + [0xA8C5]={d="nsm"}, + [0xA8CE]={d="l"}, + [0xA8CF]={d="l"}, + [0xA8D0]={d="l"}, + [0xA8D1]={d="l"}, + [0xA8D2]={d="l"}, + [0xA8D3]={d="l"}, + [0xA8D4]={d="l"}, + [0xA8D5]={d="l"}, + [0xA8D6]={d="l"}, + [0xA8D7]={d="l"}, + [0xA8D8]={d="l"}, + [0xA8D9]={d="l"}, + [0xA8E0]={d="nsm"}, + [0xA8E1]={d="nsm"}, + [0xA8E2]={d="nsm"}, + [0xA8E3]={d="nsm"}, + [0xA8E4]={d="nsm"}, + [0xA8E5]={d="nsm"}, + [0xA8E6]={d="nsm"}, + [0xA8E7]={d="nsm"}, + [0xA8E8]={d="nsm"}, + [0xA8E9]={d="nsm"}, + [0xA8EA]={d="nsm"}, + [0xA8EB]={d="nsm"}, + [0xA8EC]={d="nsm"}, + [0xA8ED]={d="nsm"}, + [0xA8EE]={d="nsm"}, + [0xA8EF]={d="nsm"}, + [0xA8F0]={d="nsm"}, + [0xA8F1]={d="nsm"}, + [0xA8F2]={d="l"}, + [0xA8F3]={d="l"}, + [0xA8F4]={d="l"}, + [0xA8F5]={d="l"}, + [0xA8F6]={d="l"}, + [0xA8F7]={d="l"}, + [0xA8F8]={d="l"}, + [0xA8F9]={d="l"}, + [0xA8FA]={d="l"}, + [0xA8FB]={d="l"}, + [0xA8FC]={d="l"}, + [0xA8FD]={d="l"}, + [0xA8FE]={d="l"}, + [0xA8FF]={d="nsm"}, + [0xA900]={d="l"}, + [0xA901]={d="l"}, + [0xA902]={d="l"}, + [0xA903]={d="l"}, + [0xA904]={d="l"}, + [0xA905]={d="l"}, + [0xA906]={d="l"}, + [0xA907]={d="l"}, + [0xA908]={d="l"}, + [0xA909]={d="l"}, + [0xA90A]={d="l"}, + [0xA90B]={d="l"}, + [0xA90C]={d="l"}, + [0xA90D]={d="l"}, + [0xA90E]={d="l"}, + [0xA90F]={d="l"}, + [0xA910]={d="l"}, + [0xA911]={d="l"}, + [0xA912]={d="l"}, + [0xA913]={d="l"}, + [0xA914]={d="l"}, + [0xA915]={d="l"}, + [0xA916]={d="l"}, + [0xA917]={d="l"}, + [0xA918]={d="l"}, + [0xA919]={d="l"}, + [0xA91A]={d="l"}, + [0xA91B]={d="l"}, + [0xA91C]={d="l"}, + [0xA91D]={d="l"}, + [0xA91E]={d="l"}, + [0xA91F]={d="l"}, + [0xA920]={d="l"}, + [0xA921]={d="l"}, + [0xA922]={d="l"}, + [0xA923]={d="l"}, + [0xA924]={d="l"}, + [0xA925]={d="l"}, + [0xA926]={d="nsm"}, + [0xA927]={d="nsm"}, + [0xA928]={d="nsm"}, + [0xA929]={d="nsm"}, + [0xA92A]={d="nsm"}, + [0xA92B]={d="nsm"}, + [0xA92C]={d="nsm"}, + [0xA92D]={d="nsm"}, + [0xA92E]={d="l"}, + [0xA92F]={d="l"}, + [0xA930]={d="l"}, + [0xA931]={d="l"}, + [0xA932]={d="l"}, + [0xA933]={d="l"}, + [0xA934]={d="l"}, + [0xA935]={d="l"}, + [0xA936]={d="l"}, + [0xA937]={d="l"}, + [0xA938]={d="l"}, + [0xA939]={d="l"}, + [0xA93A]={d="l"}, + [0xA93B]={d="l"}, + [0xA93C]={d="l"}, + [0xA93D]={d="l"}, + [0xA93E]={d="l"}, + [0xA93F]={d="l"}, + [0xA940]={d="l"}, + [0xA941]={d="l"}, + [0xA942]={d="l"}, + [0xA943]={d="l"}, + [0xA944]={d="l"}, + [0xA945]={d="l"}, + [0xA946]={d="l"}, + [0xA947]={d="nsm"}, + [0xA948]={d="nsm"}, + [0xA949]={d="nsm"}, + [0xA94A]={d="nsm"}, + [0xA94B]={d="nsm"}, + [0xA94C]={d="nsm"}, + [0xA94D]={d="nsm"}, + [0xA94E]={d="nsm"}, + [0xA94F]={d="nsm"}, + [0xA950]={d="nsm"}, + [0xA951]={d="nsm"}, + [0xA952]={d="l"}, + [0xA953]={d="l"}, + [0xA95F]={d="l"}, + [0xA960]={d="l"}, + [0xA961]={d="l"}, + [0xA962]={d="l"}, + [0xA963]={d="l"}, + [0xA964]={d="l"}, + [0xA965]={d="l"}, + [0xA966]={d="l"}, + [0xA967]={d="l"}, + [0xA968]={d="l"}, + [0xA969]={d="l"}, + [0xA96A]={d="l"}, + [0xA96B]={d="l"}, + [0xA96C]={d="l"}, + [0xA96D]={d="l"}, + [0xA96E]={d="l"}, + [0xA96F]={d="l"}, + [0xA970]={d="l"}, + [0xA971]={d="l"}, + [0xA972]={d="l"}, + [0xA973]={d="l"}, + [0xA974]={d="l"}, + [0xA975]={d="l"}, + [0xA976]={d="l"}, + [0xA977]={d="l"}, + [0xA978]={d="l"}, + [0xA979]={d="l"}, + [0xA97A]={d="l"}, + [0xA97B]={d="l"}, + [0xA97C]={d="l"}, + [0xA980]={d="nsm"}, + [0xA981]={d="nsm"}, + [0xA982]={d="nsm"}, + [0xA983]={d="l"}, + [0xA984]={d="l"}, + [0xA985]={d="l"}, + [0xA986]={d="l"}, + [0xA987]={d="l"}, + [0xA988]={d="l"}, + [0xA989]={d="l"}, + [0xA98A]={d="l"}, + [0xA98B]={d="l"}, + [0xA98C]={d="l"}, + [0xA98D]={d="l"}, + [0xA98E]={d="l"}, + [0xA98F]={d="l"}, + [0xA990]={d="l"}, + [0xA991]={d="l"}, + [0xA992]={d="l"}, + [0xA993]={d="l"}, + [0xA994]={d="l"}, + [0xA995]={d="l"}, + [0xA996]={d="l"}, + [0xA997]={d="l"}, + [0xA998]={d="l"}, + [0xA999]={d="l"}, + [0xA99A]={d="l"}, + [0xA99B]={d="l"}, + [0xA99C]={d="l"}, + [0xA99D]={d="l"}, + [0xA99E]={d="l"}, + [0xA99F]={d="l"}, + [0xA9A0]={d="l"}, + [0xA9A1]={d="l"}, + [0xA9A2]={d="l"}, + [0xA9A3]={d="l"}, + [0xA9A4]={d="l"}, + [0xA9A5]={d="l"}, + [0xA9A6]={d="l"}, + [0xA9A7]={d="l"}, + [0xA9A8]={d="l"}, + [0xA9A9]={d="l"}, + [0xA9AA]={d="l"}, + [0xA9AB]={d="l"}, + [0xA9AC]={d="l"}, + [0xA9AD]={d="l"}, + [0xA9AE]={d="l"}, + [0xA9AF]={d="l"}, + [0xA9B0]={d="l"}, + [0xA9B1]={d="l"}, + [0xA9B2]={d="l"}, + [0xA9B3]={d="nsm"}, + [0xA9B4]={d="l"}, + [0xA9B5]={d="l"}, + [0xA9B6]={d="nsm"}, + [0xA9B7]={d="nsm"}, + [0xA9B8]={d="nsm"}, + [0xA9B9]={d="nsm"}, + [0xA9BA]={d="l"}, + [0xA9BB]={d="l"}, + [0xA9BC]={d="nsm"}, + [0xA9BD]={d="nsm"}, + [0xA9BE]={d="l"}, + [0xA9BF]={d="l"}, + [0xA9C0]={d="l"}, + [0xA9C1]={d="l"}, + [0xA9C2]={d="l"}, + [0xA9C3]={d="l"}, + [0xA9C4]={d="l"}, + [0xA9C5]={d="l"}, + [0xA9C6]={d="l"}, + [0xA9C7]={d="l"}, + [0xA9C8]={d="l"}, + [0xA9C9]={d="l"}, + [0xA9CA]={d="l"}, + [0xA9CB]={d="l"}, + [0xA9CC]={d="l"}, + [0xA9CD]={d="l"}, + [0xA9CF]={d="l"}, + [0xA9D0]={d="l"}, + [0xA9D1]={d="l"}, + [0xA9D2]={d="l"}, + [0xA9D3]={d="l"}, + [0xA9D4]={d="l"}, + [0xA9D5]={d="l"}, + [0xA9D6]={d="l"}, + [0xA9D7]={d="l"}, + [0xA9D8]={d="l"}, + [0xA9D9]={d="l"}, + [0xA9DE]={d="l"}, + [0xA9DF]={d="l"}, + [0xA9E0]={d="l"}, + [0xA9E1]={d="l"}, + [0xA9E2]={d="l"}, + [0xA9E3]={d="l"}, + [0xA9E4]={d="l"}, + [0xA9E5]={d="nsm"}, + [0xA9E6]={d="l"}, + [0xA9E7]={d="l"}, + [0xA9E8]={d="l"}, + [0xA9E9]={d="l"}, + [0xA9EA]={d="l"}, + [0xA9EB]={d="l"}, + [0xA9EC]={d="l"}, + [0xA9ED]={d="l"}, + [0xA9EE]={d="l"}, + [0xA9EF]={d="l"}, + [0xA9F0]={d="l"}, + [0xA9F1]={d="l"}, + [0xA9F2]={d="l"}, + [0xA9F3]={d="l"}, + [0xA9F4]={d="l"}, + [0xA9F5]={d="l"}, + [0xA9F6]={d="l"}, + [0xA9F7]={d="l"}, + [0xA9F8]={d="l"}, + [0xA9F9]={d="l"}, + [0xA9FA]={d="l"}, + [0xA9FB]={d="l"}, + [0xA9FC]={d="l"}, + [0xA9FD]={d="l"}, + [0xA9FE]={d="l"}, + [0xAA00]={d="l"}, + [0xAA01]={d="l"}, + [0xAA02]={d="l"}, + [0xAA03]={d="l"}, + [0xAA04]={d="l"}, + [0xAA05]={d="l"}, + [0xAA06]={d="l"}, + [0xAA07]={d="l"}, + [0xAA08]={d="l"}, + [0xAA09]={d="l"}, + [0xAA0A]={d="l"}, + [0xAA0B]={d="l"}, + [0xAA0C]={d="l"}, + [0xAA0D]={d="l"}, + [0xAA0E]={d="l"}, + [0xAA0F]={d="l"}, + [0xAA10]={d="l"}, + [0xAA11]={d="l"}, + [0xAA12]={d="l"}, + [0xAA13]={d="l"}, + [0xAA14]={d="l"}, + [0xAA15]={d="l"}, + [0xAA16]={d="l"}, + [0xAA17]={d="l"}, + [0xAA18]={d="l"}, + [0xAA19]={d="l"}, + [0xAA1A]={d="l"}, + [0xAA1B]={d="l"}, + [0xAA1C]={d="l"}, + [0xAA1D]={d="l"}, + [0xAA1E]={d="l"}, + [0xAA1F]={d="l"}, + [0xAA20]={d="l"}, + [0xAA21]={d="l"}, + [0xAA22]={d="l"}, + [0xAA23]={d="l"}, + [0xAA24]={d="l"}, + [0xAA25]={d="l"}, + [0xAA26]={d="l"}, + [0xAA27]={d="l"}, + [0xAA28]={d="l"}, + [0xAA29]={d="nsm"}, + [0xAA2A]={d="nsm"}, + [0xAA2B]={d="nsm"}, + [0xAA2C]={d="nsm"}, + [0xAA2D]={d="nsm"}, + [0xAA2E]={d="nsm"}, + [0xAA2F]={d="l"}, + [0xAA30]={d="l"}, + [0xAA31]={d="nsm"}, + [0xAA32]={d="nsm"}, + [0xAA33]={d="l"}, + [0xAA34]={d="l"}, + [0xAA35]={d="nsm"}, + [0xAA36]={d="nsm"}, + [0xAA40]={d="l"}, + [0xAA41]={d="l"}, + [0xAA42]={d="l"}, + [0xAA43]={d="nsm"}, + [0xAA44]={d="l"}, + [0xAA45]={d="l"}, + [0xAA46]={d="l"}, + [0xAA47]={d="l"}, + [0xAA48]={d="l"}, + [0xAA49]={d="l"}, + [0xAA4A]={d="l"}, + [0xAA4B]={d="l"}, + [0xAA4C]={d="nsm"}, + [0xAA4D]={d="l"}, + [0xAA50]={d="l"}, + [0xAA51]={d="l"}, + [0xAA52]={d="l"}, + [0xAA53]={d="l"}, + [0xAA54]={d="l"}, + [0xAA55]={d="l"}, + [0xAA56]={d="l"}, + [0xAA57]={d="l"}, + [0xAA58]={d="l"}, + [0xAA59]={d="l"}, + [0xAA5C]={d="l"}, + [0xAA5D]={d="l"}, + [0xAA5E]={d="l"}, + [0xAA5F]={d="l"}, + [0xAA60]={d="l"}, + [0xAA61]={d="l"}, + [0xAA62]={d="l"}, + [0xAA63]={d="l"}, + [0xAA64]={d="l"}, + [0xAA65]={d="l"}, + [0xAA66]={d="l"}, + [0xAA67]={d="l"}, + [0xAA68]={d="l"}, + [0xAA69]={d="l"}, + [0xAA6A]={d="l"}, + [0xAA6B]={d="l"}, + [0xAA6C]={d="l"}, + [0xAA6D]={d="l"}, + [0xAA6E]={d="l"}, + [0xAA6F]={d="l"}, + [0xAA70]={d="l"}, + [0xAA71]={d="l"}, + [0xAA72]={d="l"}, + [0xAA73]={d="l"}, + [0xAA74]={d="l"}, + [0xAA75]={d="l"}, + [0xAA76]={d="l"}, + [0xAA77]={d="l"}, + [0xAA78]={d="l"}, + [0xAA79]={d="l"}, + [0xAA7A]={d="l"}, + [0xAA7B]={d="l"}, + [0xAA7C]={d="nsm"}, + [0xAA7D]={d="l"}, + [0xAA7E]={d="l"}, + [0xAA7F]={d="l"}, + [0xAA80]={d="l"}, + [0xAA81]={d="l"}, + [0xAA82]={d="l"}, + [0xAA83]={d="l"}, + [0xAA84]={d="l"}, + [0xAA85]={d="l"}, + [0xAA86]={d="l"}, + [0xAA87]={d="l"}, + [0xAA88]={d="l"}, + [0xAA89]={d="l"}, + [0xAA8A]={d="l"}, + [0xAA8B]={d="l"}, + [0xAA8C]={d="l"}, + [0xAA8D]={d="l"}, + [0xAA8E]={d="l"}, + [0xAA8F]={d="l"}, + [0xAA90]={d="l"}, + [0xAA91]={d="l"}, + [0xAA92]={d="l"}, + [0xAA93]={d="l"}, + [0xAA94]={d="l"}, + [0xAA95]={d="l"}, + [0xAA96]={d="l"}, + [0xAA97]={d="l"}, + [0xAA98]={d="l"}, + [0xAA99]={d="l"}, + [0xAA9A]={d="l"}, + [0xAA9B]={d="l"}, + [0xAA9C]={d="l"}, + [0xAA9D]={d="l"}, + [0xAA9E]={d="l"}, + [0xAA9F]={d="l"}, + [0xAAA0]={d="l"}, + [0xAAA1]={d="l"}, + [0xAAA2]={d="l"}, + [0xAAA3]={d="l"}, + [0xAAA4]={d="l"}, + [0xAAA5]={d="l"}, + [0xAAA6]={d="l"}, + [0xAAA7]={d="l"}, + [0xAAA8]={d="l"}, + [0xAAA9]={d="l"}, + [0xAAAA]={d="l"}, + [0xAAAB]={d="l"}, + [0xAAAC]={d="l"}, + [0xAAAD]={d="l"}, + [0xAAAE]={d="l"}, + [0xAAAF]={d="l"}, + [0xAAB0]={d="nsm"}, + [0xAAB1]={d="l"}, + [0xAAB2]={d="nsm"}, + [0xAAB3]={d="nsm"}, + [0xAAB4]={d="nsm"}, + [0xAAB5]={d="l"}, + [0xAAB6]={d="l"}, + [0xAAB7]={d="nsm"}, + [0xAAB8]={d="nsm"}, + [0xAAB9]={d="l"}, + [0xAABA]={d="l"}, + [0xAABB]={d="l"}, + [0xAABC]={d="l"}, + [0xAABD]={d="l"}, + [0xAABE]={d="nsm"}, + [0xAABF]={d="nsm"}, + [0xAAC0]={d="l"}, + [0xAAC1]={d="nsm"}, + [0xAAC2]={d="l"}, + [0xAADB]={d="l"}, + [0xAADC]={d="l"}, + [0xAADD]={d="l"}, + [0xAADE]={d="l"}, + [0xAADF]={d="l"}, + [0xAAE0]={d="l"}, + [0xAAE1]={d="l"}, + [0xAAE2]={d="l"}, + [0xAAE3]={d="l"}, + [0xAAE4]={d="l"}, + [0xAAE5]={d="l"}, + [0xAAE6]={d="l"}, + [0xAAE7]={d="l"}, + [0xAAE8]={d="l"}, + [0xAAE9]={d="l"}, + [0xAAEA]={d="l"}, + [0xAAEB]={d="l"}, + [0xAAEC]={d="nsm"}, + [0xAAED]={d="nsm"}, + [0xAAEE]={d="l"}, + [0xAAEF]={d="l"}, + [0xAAF0]={d="l"}, + [0xAAF1]={d="l"}, + [0xAAF2]={d="l"}, + [0xAAF3]={d="l"}, + [0xAAF4]={d="l"}, + [0xAAF5]={d="l"}, + [0xAAF6]={d="nsm"}, + [0xAB01]={d="l"}, + [0xAB02]={d="l"}, + [0xAB03]={d="l"}, + [0xAB04]={d="l"}, + [0xAB05]={d="l"}, + [0xAB06]={d="l"}, + [0xAB09]={d="l"}, + [0xAB0A]={d="l"}, + [0xAB0B]={d="l"}, + [0xAB0C]={d="l"}, + [0xAB0D]={d="l"}, + [0xAB0E]={d="l"}, + [0xAB11]={d="l"}, + [0xAB12]={d="l"}, + [0xAB13]={d="l"}, + [0xAB14]={d="l"}, + [0xAB15]={d="l"}, + [0xAB16]={d="l"}, + [0xAB20]={d="l"}, + [0xAB21]={d="l"}, + [0xAB22]={d="l"}, + [0xAB23]={d="l"}, + [0xAB24]={d="l"}, + [0xAB25]={d="l"}, + [0xAB26]={d="l"}, + [0xAB28]={d="l"}, + [0xAB29]={d="l"}, + [0xAB2A]={d="l"}, + [0xAB2B]={d="l"}, + [0xAB2C]={d="l"}, + [0xAB2D]={d="l"}, + [0xAB2E]={d="l"}, + [0xAB30]={d="l"}, + [0xAB31]={d="l"}, + [0xAB32]={d="l"}, + [0xAB33]={d="l"}, + [0xAB34]={d="l"}, + [0xAB35]={d="l"}, + [0xAB36]={d="l"}, + [0xAB37]={d="l"}, + [0xAB38]={d="l"}, + [0xAB39]={d="l"}, + [0xAB3A]={d="l"}, + [0xAB3B]={d="l"}, + [0xAB3C]={d="l"}, + [0xAB3D]={d="l"}, + [0xAB3E]={d="l"}, + [0xAB3F]={d="l"}, + [0xAB40]={d="l"}, + [0xAB41]={d="l"}, + [0xAB42]={d="l"}, + [0xAB43]={d="l"}, + [0xAB44]={d="l"}, + [0xAB45]={d="l"}, + [0xAB46]={d="l"}, + [0xAB47]={d="l"}, + [0xAB48]={d="l"}, + [0xAB49]={d="l"}, + [0xAB4A]={d="l"}, + [0xAB4B]={d="l"}, + [0xAB4C]={d="l"}, + [0xAB4D]={d="l"}, + [0xAB4E]={d="l"}, + [0xAB4F]={d="l"}, + [0xAB50]={d="l"}, + [0xAB51]={d="l"}, + [0xAB52]={d="l"}, + [0xAB53]={d="l"}, + [0xAB54]={d="l"}, + [0xAB55]={d="l"}, + [0xAB56]={d="l"}, + [0xAB57]={d="l"}, + [0xAB58]={d="l"}, + [0xAB59]={d="l"}, + [0xAB5A]={d="l"}, + [0xAB5B]={d="l"}, + [0xAB5C]={d="l"}, + [0xAB5D]={d="l"}, + [0xAB5E]={d="l"}, + [0xAB5F]={d="l"}, + [0xAB60]={d="l"}, + [0xAB61]={d="l"}, + [0xAB62]={d="l"}, + [0xAB63]={d="l"}, + [0xAB64]={d="l"}, + [0xAB65]={d="l"}, + [0xAB66]={d="l"}, + [0xAB67]={d="l"}, + [0xAB68]={d="l"}, + [0xAB69]={d="l"}, + [0xAB6A]={d="on"}, + [0xAB6B]={d="on"}, + [0xAB70]={d="l"}, + [0xAB71]={d="l"}, + [0xAB72]={d="l"}, + [0xAB73]={d="l"}, + [0xAB74]={d="l"}, + [0xAB75]={d="l"}, + [0xAB76]={d="l"}, + [0xAB77]={d="l"}, + [0xAB78]={d="l"}, + [0xAB79]={d="l"}, + [0xAB7A]={d="l"}, + [0xAB7B]={d="l"}, + [0xAB7C]={d="l"}, + [0xAB7D]={d="l"}, + [0xAB7E]={d="l"}, + [0xAB7F]={d="l"}, + [0xAB80]={d="l"}, + [0xAB81]={d="l"}, + [0xAB82]={d="l"}, + [0xAB83]={d="l"}, + [0xAB84]={d="l"}, + [0xAB85]={d="l"}, + [0xAB86]={d="l"}, + [0xAB87]={d="l"}, + [0xAB88]={d="l"}, + [0xAB89]={d="l"}, + [0xAB8A]={d="l"}, + [0xAB8B]={d="l"}, + [0xAB8C]={d="l"}, + [0xAB8D]={d="l"}, + [0xAB8E]={d="l"}, + [0xAB8F]={d="l"}, + [0xAB90]={d="l"}, + [0xAB91]={d="l"}, + [0xAB92]={d="l"}, + [0xAB93]={d="l"}, + [0xAB94]={d="l"}, + [0xAB95]={d="l"}, + [0xAB96]={d="l"}, + [0xAB97]={d="l"}, + [0xAB98]={d="l"}, + [0xAB99]={d="l"}, + [0xAB9A]={d="l"}, + [0xAB9B]={d="l"}, + [0xAB9C]={d="l"}, + [0xAB9D]={d="l"}, + [0xAB9E]={d="l"}, + [0xAB9F]={d="l"}, + [0xABA0]={d="l"}, + [0xABA1]={d="l"}, + [0xABA2]={d="l"}, + [0xABA3]={d="l"}, + [0xABA4]={d="l"}, + [0xABA5]={d="l"}, + [0xABA6]={d="l"}, + [0xABA7]={d="l"}, + [0xABA8]={d="l"}, + [0xABA9]={d="l"}, + [0xABAA]={d="l"}, + [0xABAB]={d="l"}, + [0xABAC]={d="l"}, + [0xABAD]={d="l"}, + [0xABAE]={d="l"}, + [0xABAF]={d="l"}, + [0xABB0]={d="l"}, + [0xABB1]={d="l"}, + [0xABB2]={d="l"}, + [0xABB3]={d="l"}, + [0xABB4]={d="l"}, + [0xABB5]={d="l"}, + [0xABB6]={d="l"}, + [0xABB7]={d="l"}, + [0xABB8]={d="l"}, + [0xABB9]={d="l"}, + [0xABBA]={d="l"}, + [0xABBB]={d="l"}, + [0xABBC]={d="l"}, + [0xABBD]={d="l"}, + [0xABBE]={d="l"}, + [0xABBF]={d="l"}, + [0xABC0]={d="l"}, + [0xABC1]={d="l"}, + [0xABC2]={d="l"}, + [0xABC3]={d="l"}, + [0xABC4]={d="l"}, + [0xABC5]={d="l"}, + [0xABC6]={d="l"}, + [0xABC7]={d="l"}, + [0xABC8]={d="l"}, + [0xABC9]={d="l"}, + [0xABCA]={d="l"}, + [0xABCB]={d="l"}, + [0xABCC]={d="l"}, + [0xABCD]={d="l"}, + [0xABCE]={d="l"}, + [0xABCF]={d="l"}, + [0xABD0]={d="l"}, + [0xABD1]={d="l"}, + [0xABD2]={d="l"}, + [0xABD3]={d="l"}, + [0xABD4]={d="l"}, + [0xABD5]={d="l"}, + [0xABD6]={d="l"}, + [0xABD7]={d="l"}, + [0xABD8]={d="l"}, + [0xABD9]={d="l"}, + [0xABDA]={d="l"}, + [0xABDB]={d="l"}, + [0xABDC]={d="l"}, + [0xABDD]={d="l"}, + [0xABDE]={d="l"}, + [0xABDF]={d="l"}, + [0xABE0]={d="l"}, + [0xABE1]={d="l"}, + [0xABE2]={d="l"}, + [0xABE3]={d="l"}, + [0xABE4]={d="l"}, + [0xABE5]={d="nsm"}, + [0xABE6]={d="l"}, + [0xABE7]={d="l"}, + [0xABE8]={d="nsm"}, + [0xABE9]={d="l"}, + [0xABEA]={d="l"}, + [0xABEB]={d="l"}, + [0xABEC]={d="l"}, + [0xABED]={d="nsm"}, + [0xABF0]={d="l"}, + [0xABF1]={d="l"}, + [0xABF2]={d="l"}, + [0xABF3]={d="l"}, + [0xABF4]={d="l"}, + [0xABF5]={d="l"}, + [0xABF6]={d="l"}, + [0xABF7]={d="l"}, + [0xABF8]={d="l"}, + [0xABF9]={d="l"}, + [0xD7B0]={d="l"}, + [0xD7B1]={d="l"}, + [0xD7B2]={d="l"}, + [0xD7B3]={d="l"}, + [0xD7B4]={d="l"}, + [0xD7B5]={d="l"}, + [0xD7B6]={d="l"}, + [0xD7B7]={d="l"}, + [0xD7B8]={d="l"}, + [0xD7B9]={d="l"}, + [0xD7BA]={d="l"}, + [0xD7BB]={d="l"}, + [0xD7BC]={d="l"}, + [0xD7BD]={d="l"}, + [0xD7BE]={d="l"}, + [0xD7BF]={d="l"}, + [0xD7C0]={d="l"}, + [0xD7C1]={d="l"}, + [0xD7C2]={d="l"}, + [0xD7C3]={d="l"}, + [0xD7C4]={d="l"}, + [0xD7C5]={d="l"}, + [0xD7C6]={d="l"}, + [0xD7CB]={d="l"}, + [0xD7CC]={d="l"}, + [0xD7CD]={d="l"}, + [0xD7CE]={d="l"}, + [0xD7CF]={d="l"}, + [0xD7D0]={d="l"}, + [0xD7D1]={d="l"}, + [0xD7D2]={d="l"}, + [0xD7D3]={d="l"}, + [0xD7D4]={d="l"}, + [0xD7D5]={d="l"}, + [0xD7D6]={d="l"}, + [0xD7D7]={d="l"}, + [0xD7D8]={d="l"}, + [0xD7D9]={d="l"}, + [0xD7DA]={d="l"}, + [0xD7DB]={d="l"}, + [0xD7DC]={d="l"}, + [0xD7DD]={d="l"}, + [0xD7DE]={d="l"}, + [0xD7DF]={d="l"}, + [0xD7E0]={d="l"}, + [0xD7E1]={d="l"}, + [0xD7E2]={d="l"}, + [0xD7E3]={d="l"}, + [0xD7E4]={d="l"}, + [0xD7E5]={d="l"}, + [0xD7E6]={d="l"}, + [0xD7E7]={d="l"}, + [0xD7E8]={d="l"}, + [0xD7E9]={d="l"}, + [0xD7EA]={d="l"}, + [0xD7EB]={d="l"}, + [0xD7EC]={d="l"}, + [0xD7ED]={d="l"}, + [0xD7EE]={d="l"}, + [0xD7EF]={d="l"}, + [0xD7F0]={d="l"}, + [0xD7F1]={d="l"}, + [0xD7F2]={d="l"}, + [0xD7F3]={d="l"}, + [0xD7F4]={d="l"}, + [0xD7F5]={d="l"}, + [0xD7F6]={d="l"}, + [0xD7F7]={d="l"}, + [0xD7F8]={d="l"}, + [0xD7F9]={d="l"}, + [0xD7FA]={d="l"}, + [0xD7FB]={d="l"}, + [0xD800]={d="l"}, + [0xDB7F]={d="l"}, + [0xDB80]={d="l"}, + [0xDBFF]={d="l"}, + [0xDC00]={d="l"}, + [0xDFFF]={d="l"}, + [0xE000]={d="l"}, + [0xF8FF]={d="l"}, + [0xF900]={d="l"}, + [0xF901]={d="l"}, + [0xF902]={d="l"}, + [0xF903]={d="l"}, + [0xF904]={d="l"}, + [0xF905]={d="l"}, + [0xF906]={d="l"}, + [0xF907]={d="l"}, + [0xF908]={d="l"}, + [0xF909]={d="l"}, + [0xF90A]={d="l"}, + [0xF90B]={d="l"}, + [0xF90C]={d="l"}, + [0xF90D]={d="l"}, + [0xF90E]={d="l"}, + [0xF90F]={d="l"}, + [0xF910]={d="l"}, + [0xF911]={d="l"}, + [0xF912]={d="l"}, + [0xF913]={d="l"}, + [0xF914]={d="l"}, + [0xF915]={d="l"}, + [0xF916]={d="l"}, + [0xF917]={d="l"}, + [0xF918]={d="l"}, + [0xF919]={d="l"}, + [0xF91A]={d="l"}, + [0xF91B]={d="l"}, + [0xF91C]={d="l"}, + [0xF91D]={d="l"}, + [0xF91E]={d="l"}, + [0xF91F]={d="l"}, + [0xF920]={d="l"}, + [0xF921]={d="l"}, + [0xF922]={d="l"}, + [0xF923]={d="l"}, + [0xF924]={d="l"}, + [0xF925]={d="l"}, + [0xF926]={d="l"}, + [0xF927]={d="l"}, + [0xF928]={d="l"}, + [0xF929]={d="l"}, + [0xF92A]={d="l"}, + [0xF92B]={d="l"}, + [0xF92C]={d="l"}, + [0xF92D]={d="l"}, + [0xF92E]={d="l"}, + [0xF92F]={d="l"}, + [0xF930]={d="l"}, + [0xF931]={d="l"}, + [0xF932]={d="l"}, + [0xF933]={d="l"}, + [0xF934]={d="l"}, + [0xF935]={d="l"}, + [0xF936]={d="l"}, + [0xF937]={d="l"}, + [0xF938]={d="l"}, + [0xF939]={d="l"}, + [0xF93A]={d="l"}, + [0xF93B]={d="l"}, + [0xF93C]={d="l"}, + [0xF93D]={d="l"}, + [0xF93E]={d="l"}, + [0xF93F]={d="l"}, + [0xF940]={d="l"}, + [0xF941]={d="l"}, + [0xF942]={d="l"}, + [0xF943]={d="l"}, + [0xF944]={d="l"}, + [0xF945]={d="l"}, + [0xF946]={d="l"}, + [0xF947]={d="l"}, + [0xF948]={d="l"}, + [0xF949]={d="l"}, + [0xF94A]={d="l"}, + [0xF94B]={d="l"}, + [0xF94C]={d="l"}, + [0xF94D]={d="l"}, + [0xF94E]={d="l"}, + [0xF94F]={d="l"}, + [0xF950]={d="l"}, + [0xF951]={d="l"}, + [0xF952]={d="l"}, + [0xF953]={d="l"}, + [0xF954]={d="l"}, + [0xF955]={d="l"}, + [0xF956]={d="l"}, + [0xF957]={d="l"}, + [0xF958]={d="l"}, + [0xF959]={d="l"}, + [0xF95A]={d="l"}, + [0xF95B]={d="l"}, + [0xF95C]={d="l"}, + [0xF95D]={d="l"}, + [0xF95E]={d="l"}, + [0xF95F]={d="l"}, + [0xF960]={d="l"}, + [0xF961]={d="l"}, + [0xF962]={d="l"}, + [0xF963]={d="l"}, + [0xF964]={d="l"}, + [0xF965]={d="l"}, + [0xF966]={d="l"}, + [0xF967]={d="l"}, + [0xF968]={d="l"}, + [0xF969]={d="l"}, + [0xF96A]={d="l"}, + [0xF96B]={d="l"}, + [0xF96C]={d="l"}, + [0xF96D]={d="l"}, + [0xF96E]={d="l"}, + [0xF96F]={d="l"}, + [0xF970]={d="l"}, + [0xF971]={d="l"}, + [0xF972]={d="l"}, + [0xF973]={d="l"}, + [0xF974]={d="l"}, + [0xF975]={d="l"}, + [0xF976]={d="l"}, + [0xF977]={d="l"}, + [0xF978]={d="l"}, + [0xF979]={d="l"}, + [0xF97A]={d="l"}, + [0xF97B]={d="l"}, + [0xF97C]={d="l"}, + [0xF97D]={d="l"}, + [0xF97E]={d="l"}, + [0xF97F]={d="l"}, + [0xF980]={d="l"}, + [0xF981]={d="l"}, + [0xF982]={d="l"}, + [0xF983]={d="l"}, + [0xF984]={d="l"}, + [0xF985]={d="l"}, + [0xF986]={d="l"}, + [0xF987]={d="l"}, + [0xF988]={d="l"}, + [0xF989]={d="l"}, + [0xF98A]={d="l"}, + [0xF98B]={d="l"}, + [0xF98C]={d="l"}, + [0xF98D]={d="l"}, + [0xF98E]={d="l"}, + [0xF98F]={d="l"}, + [0xF990]={d="l"}, + [0xF991]={d="l"}, + [0xF992]={d="l"}, + [0xF993]={d="l"}, + [0xF994]={d="l"}, + [0xF995]={d="l"}, + [0xF996]={d="l"}, + [0xF997]={d="l"}, + [0xF998]={d="l"}, + [0xF999]={d="l"}, + [0xF99A]={d="l"}, + [0xF99B]={d="l"}, + [0xF99C]={d="l"}, + [0xF99D]={d="l"}, + [0xF99E]={d="l"}, + [0xF99F]={d="l"}, + [0xF9A0]={d="l"}, + [0xF9A1]={d="l"}, + [0xF9A2]={d="l"}, + [0xF9A3]={d="l"}, + [0xF9A4]={d="l"}, + [0xF9A5]={d="l"}, + [0xF9A6]={d="l"}, + [0xF9A7]={d="l"}, + [0xF9A8]={d="l"}, + [0xF9A9]={d="l"}, + [0xF9AA]={d="l"}, + [0xF9AB]={d="l"}, + [0xF9AC]={d="l"}, + [0xF9AD]={d="l"}, + [0xF9AE]={d="l"}, + [0xF9AF]={d="l"}, + [0xF9B0]={d="l"}, + [0xF9B1]={d="l"}, + [0xF9B2]={d="l"}, + [0xF9B3]={d="l"}, + [0xF9B4]={d="l"}, + [0xF9B5]={d="l"}, + [0xF9B6]={d="l"}, + [0xF9B7]={d="l"}, + [0xF9B8]={d="l"}, + [0xF9B9]={d="l"}, + [0xF9BA]={d="l"}, + [0xF9BB]={d="l"}, + [0xF9BC]={d="l"}, + [0xF9BD]={d="l"}, + [0xF9BE]={d="l"}, + [0xF9BF]={d="l"}, + [0xF9C0]={d="l"}, + [0xF9C1]={d="l"}, + [0xF9C2]={d="l"}, + [0xF9C3]={d="l"}, + [0xF9C4]={d="l"}, + [0xF9C5]={d="l"}, + [0xF9C6]={d="l"}, + [0xF9C7]={d="l"}, + [0xF9C8]={d="l"}, + [0xF9C9]={d="l"}, + [0xF9CA]={d="l"}, + [0xF9CB]={d="l"}, + [0xF9CC]={d="l"}, + [0xF9CD]={d="l"}, + [0xF9CE]={d="l"}, + [0xF9CF]={d="l"}, + [0xF9D0]={d="l"}, + [0xF9D1]={d="l"}, + [0xF9D2]={d="l"}, + [0xF9D3]={d="l"}, + [0xF9D4]={d="l"}, + [0xF9D5]={d="l"}, + [0xF9D6]={d="l"}, + [0xF9D7]={d="l"}, + [0xF9D8]={d="l"}, + [0xF9D9]={d="l"}, + [0xF9DA]={d="l"}, + [0xF9DB]={d="l"}, + [0xF9DC]={d="l"}, + [0xF9DD]={d="l"}, + [0xF9DE]={d="l"}, + [0xF9DF]={d="l"}, + [0xF9E0]={d="l"}, + [0xF9E1]={d="l"}, + [0xF9E2]={d="l"}, + [0xF9E3]={d="l"}, + [0xF9E4]={d="l"}, + [0xF9E5]={d="l"}, + [0xF9E6]={d="l"}, + [0xF9E7]={d="l"}, + [0xF9E8]={d="l"}, + [0xF9E9]={d="l"}, + [0xF9EA]={d="l"}, + [0xF9EB]={d="l"}, + [0xF9EC]={d="l"}, + [0xF9ED]={d="l"}, + [0xF9EE]={d="l"}, + [0xF9EF]={d="l"}, + [0xF9F0]={d="l"}, + [0xF9F1]={d="l"}, + [0xF9F2]={d="l"}, + [0xF9F3]={d="l"}, + [0xF9F4]={d="l"}, + [0xF9F5]={d="l"}, + [0xF9F6]={d="l"}, + [0xF9F7]={d="l"}, + [0xF9F8]={d="l"}, + [0xF9F9]={d="l"}, + [0xF9FA]={d="l"}, + [0xF9FB]={d="l"}, + [0xF9FC]={d="l"}, + [0xF9FD]={d="l"}, + [0xF9FE]={d="l"}, + [0xF9FF]={d="l"}, + [0xFA00]={d="l"}, + [0xFA01]={d="l"}, + [0xFA02]={d="l"}, + [0xFA03]={d="l"}, + [0xFA04]={d="l"}, + [0xFA05]={d="l"}, + [0xFA06]={d="l"}, + [0xFA07]={d="l"}, + [0xFA08]={d="l"}, + [0xFA09]={d="l"}, + [0xFA0A]={d="l"}, + [0xFA0B]={d="l"}, + [0xFA0C]={d="l"}, + [0xFA0D]={d="l"}, + [0xFA0E]={d="l"}, + [0xFA0F]={d="l"}, + [0xFA10]={d="l"}, + [0xFA11]={d="l"}, + [0xFA12]={d="l"}, + [0xFA13]={d="l"}, + [0xFA14]={d="l"}, + [0xFA15]={d="l"}, + [0xFA16]={d="l"}, + [0xFA17]={d="l"}, + [0xFA18]={d="l"}, + [0xFA19]={d="l"}, + [0xFA1A]={d="l"}, + [0xFA1B]={d="l"}, + [0xFA1C]={d="l"}, + [0xFA1D]={d="l"}, + [0xFA1E]={d="l"}, + [0xFA1F]={d="l"}, + [0xFA20]={d="l"}, + [0xFA21]={d="l"}, + [0xFA22]={d="l"}, + [0xFA23]={d="l"}, + [0xFA24]={d="l"}, + [0xFA25]={d="l"}, + [0xFA26]={d="l"}, + [0xFA27]={d="l"}, + [0xFA28]={d="l"}, + [0xFA29]={d="l"}, + [0xFA2A]={d="l"}, + [0xFA2B]={d="l"}, + [0xFA2C]={d="l"}, + [0xFA2D]={d="l"}, + [0xFA2E]={d="l"}, + [0xFA2F]={d="l"}, + [0xFA30]={d="l"}, + [0xFA31]={d="l"}, + [0xFA32]={d="l"}, + [0xFA33]={d="l"}, + [0xFA34]={d="l"}, + [0xFA35]={d="l"}, + [0xFA36]={d="l"}, + [0xFA37]={d="l"}, + [0xFA38]={d="l"}, + [0xFA39]={d="l"}, + [0xFA3A]={d="l"}, + [0xFA3B]={d="l"}, + [0xFA3C]={d="l"}, + [0xFA3D]={d="l"}, + [0xFA3E]={d="l"}, + [0xFA3F]={d="l"}, + [0xFA40]={d="l"}, + [0xFA41]={d="l"}, + [0xFA42]={d="l"}, + [0xFA43]={d="l"}, + [0xFA44]={d="l"}, + [0xFA45]={d="l"}, + [0xFA46]={d="l"}, + [0xFA47]={d="l"}, + [0xFA48]={d="l"}, + [0xFA49]={d="l"}, + [0xFA4A]={d="l"}, + [0xFA4B]={d="l"}, + [0xFA4C]={d="l"}, + [0xFA4D]={d="l"}, + [0xFA4E]={d="l"}, + [0xFA4F]={d="l"}, + [0xFA50]={d="l"}, + [0xFA51]={d="l"}, + [0xFA52]={d="l"}, + [0xFA53]={d="l"}, + [0xFA54]={d="l"}, + [0xFA55]={d="l"}, + [0xFA56]={d="l"}, + [0xFA57]={d="l"}, + [0xFA58]={d="l"}, + [0xFA59]={d="l"}, + [0xFA5A]={d="l"}, + [0xFA5B]={d="l"}, + [0xFA5C]={d="l"}, + [0xFA5D]={d="l"}, + [0xFA5E]={d="l"}, + [0xFA5F]={d="l"}, + [0xFA60]={d="l"}, + [0xFA61]={d="l"}, + [0xFA62]={d="l"}, + [0xFA63]={d="l"}, + [0xFA64]={d="l"}, + [0xFA65]={d="l"}, + [0xFA66]={d="l"}, + [0xFA67]={d="l"}, + [0xFA68]={d="l"}, + [0xFA69]={d="l"}, + [0xFA6A]={d="l"}, + [0xFA6B]={d="l"}, + [0xFA6C]={d="l"}, + [0xFA6D]={d="l"}, + [0xFA70]={d="l"}, + [0xFA71]={d="l"}, + [0xFA72]={d="l"}, + [0xFA73]={d="l"}, + [0xFA74]={d="l"}, + [0xFA75]={d="l"}, + [0xFA76]={d="l"}, + [0xFA77]={d="l"}, + [0xFA78]={d="l"}, + [0xFA79]={d="l"}, + [0xFA7A]={d="l"}, + [0xFA7B]={d="l"}, + [0xFA7C]={d="l"}, + [0xFA7D]={d="l"}, + [0xFA7E]={d="l"}, + [0xFA7F]={d="l"}, + [0xFA80]={d="l"}, + [0xFA81]={d="l"}, + [0xFA82]={d="l"}, + [0xFA83]={d="l"}, + [0xFA84]={d="l"}, + [0xFA85]={d="l"}, + [0xFA86]={d="l"}, + [0xFA87]={d="l"}, + [0xFA88]={d="l"}, + [0xFA89]={d="l"}, + [0xFA8A]={d="l"}, + [0xFA8B]={d="l"}, + [0xFA8C]={d="l"}, + [0xFA8D]={d="l"}, + [0xFA8E]={d="l"}, + [0xFA8F]={d="l"}, + [0xFA90]={d="l"}, + [0xFA91]={d="l"}, + [0xFA92]={d="l"}, + [0xFA93]={d="l"}, + [0xFA94]={d="l"}, + [0xFA95]={d="l"}, + [0xFA96]={d="l"}, + [0xFA97]={d="l"}, + [0xFA98]={d="l"}, + [0xFA99]={d="l"}, + [0xFA9A]={d="l"}, + [0xFA9B]={d="l"}, + [0xFA9C]={d="l"}, + [0xFA9D]={d="l"}, + [0xFA9E]={d="l"}, + [0xFA9F]={d="l"}, + [0xFAA0]={d="l"}, + [0xFAA1]={d="l"}, + [0xFAA2]={d="l"}, + [0xFAA3]={d="l"}, + [0xFAA4]={d="l"}, + [0xFAA5]={d="l"}, + [0xFAA6]={d="l"}, + [0xFAA7]={d="l"}, + [0xFAA8]={d="l"}, + [0xFAA9]={d="l"}, + [0xFAAA]={d="l"}, + [0xFAAB]={d="l"}, + [0xFAAC]={d="l"}, + [0xFAAD]={d="l"}, + [0xFAAE]={d="l"}, + [0xFAAF]={d="l"}, + [0xFAB0]={d="l"}, + [0xFAB1]={d="l"}, + [0xFAB2]={d="l"}, + [0xFAB3]={d="l"}, + [0xFAB4]={d="l"}, + [0xFAB5]={d="l"}, + [0xFAB6]={d="l"}, + [0xFAB7]={d="l"}, + [0xFAB8]={d="l"}, + [0xFAB9]={d="l"}, + [0xFABA]={d="l"}, + [0xFABB]={d="l"}, + [0xFABC]={d="l"}, + [0xFABD]={d="l"}, + [0xFABE]={d="l"}, + [0xFABF]={d="l"}, + [0xFAC0]={d="l"}, + [0xFAC1]={d="l"}, + [0xFAC2]={d="l"}, + [0xFAC3]={d="l"}, + [0xFAC4]={d="l"}, + [0xFAC5]={d="l"}, + [0xFAC6]={d="l"}, + [0xFAC7]={d="l"}, + [0xFAC8]={d="l"}, + [0xFAC9]={d="l"}, + [0xFACA]={d="l"}, + [0xFACB]={d="l"}, + [0xFACC]={d="l"}, + [0xFACD]={d="l"}, + [0xFACE]={d="l"}, + [0xFACF]={d="l"}, + [0xFAD0]={d="l"}, + [0xFAD1]={d="l"}, + [0xFAD2]={d="l"}, + [0xFAD3]={d="l"}, + [0xFAD4]={d="l"}, + [0xFAD5]={d="l"}, + [0xFAD6]={d="l"}, + [0xFAD7]={d="l"}, + [0xFAD8]={d="l"}, + [0xFAD9]={d="l"}, + [0xFB00]={d="l"}, + [0xFB01]={d="l"}, + [0xFB02]={d="l"}, + [0xFB03]={d="l"}, + [0xFB04]={d="l"}, + [0xFB05]={d="l"}, + [0xFB06]={d="l"}, + [0xFB13]={d="l"}, + [0xFB14]={d="l"}, + [0xFB15]={d="l"}, + [0xFB16]={d="l"}, + [0xFB17]={d="l"}, + [0xFB1D]={d="r"}, + [0xFB1E]={d="nsm"}, + [0xFB1F]={d="r"}, + [0xFB20]={d="r"}, + [0xFB21]={d="r"}, + [0xFB22]={d="r"}, + [0xFB23]={d="r"}, + [0xFB24]={d="r"}, + [0xFB25]={d="r"}, + [0xFB26]={d="r"}, + [0xFB27]={d="r"}, + [0xFB28]={d="r"}, + [0xFB29]={d="es"}, + [0xFB2A]={d="r"}, + [0xFB2B]={d="r"}, + [0xFB2C]={d="r"}, + [0xFB2D]={d="r"}, + [0xFB2E]={d="r"}, + [0xFB2F]={d="r"}, + [0xFB30]={d="r"}, + [0xFB31]={d="r"}, + [0xFB32]={d="r"}, + [0xFB33]={d="r"}, + [0xFB34]={d="r"}, + [0xFB35]={d="r"}, + [0xFB36]={d="r"}, + [0xFB38]={d="r"}, + [0xFB39]={d="r"}, + [0xFB3A]={d="r"}, + [0xFB3B]={d="r"}, + [0xFB3C]={d="r"}, + [0xFB3E]={d="r"}, + [0xFB40]={d="r"}, + [0xFB41]={d="r"}, + [0xFB43]={d="r"}, + [0xFB44]={d="r"}, + [0xFB46]={d="r"}, + [0xFB47]={d="r"}, + [0xFB48]={d="r"}, + [0xFB49]={d="r"}, + [0xFB4A]={d="r"}, + [0xFB4B]={d="r"}, + [0xFB4C]={d="r"}, + [0xFB4D]={d="r"}, + [0xFB4E]={d="r"}, + [0xFB4F]={d="r"}, + [0xFB50]={d="al"}, + [0xFB51]={d="al"}, + [0xFB52]={d="al"}, + [0xFB53]={d="al"}, + [0xFB54]={d="al"}, + [0xFB55]={d="al"}, + [0xFB56]={d="al"}, + [0xFB57]={d="al"}, + [0xFB58]={d="al"}, + [0xFB59]={d="al"}, + [0xFB5A]={d="al"}, + [0xFB5B]={d="al"}, + [0xFB5C]={d="al"}, + [0xFB5D]={d="al"}, + [0xFB5E]={d="al"}, + [0xFB5F]={d="al"}, + [0xFB60]={d="al"}, + [0xFB61]={d="al"}, + [0xFB62]={d="al"}, + [0xFB63]={d="al"}, + [0xFB64]={d="al"}, + [0xFB65]={d="al"}, + [0xFB66]={d="al"}, + [0xFB67]={d="al"}, + [0xFB68]={d="al"}, + [0xFB69]={d="al"}, + [0xFB6A]={d="al"}, + [0xFB6B]={d="al"}, + [0xFB6C]={d="al"}, + [0xFB6D]={d="al"}, + [0xFB6E]={d="al"}, + [0xFB6F]={d="al"}, + [0xFB70]={d="al"}, + [0xFB71]={d="al"}, + [0xFB72]={d="al"}, + [0xFB73]={d="al"}, + [0xFB74]={d="al"}, + [0xFB75]={d="al"}, + [0xFB76]={d="al"}, + [0xFB77]={d="al"}, + [0xFB78]={d="al"}, + [0xFB79]={d="al"}, + [0xFB7A]={d="al"}, + [0xFB7B]={d="al"}, + [0xFB7C]={d="al"}, + [0xFB7D]={d="al"}, + [0xFB7E]={d="al"}, + [0xFB7F]={d="al"}, + [0xFB80]={d="al"}, + [0xFB81]={d="al"}, + [0xFB82]={d="al"}, + [0xFB83]={d="al"}, + [0xFB84]={d="al"}, + [0xFB85]={d="al"}, + [0xFB86]={d="al"}, + [0xFB87]={d="al"}, + [0xFB88]={d="al"}, + [0xFB89]={d="al"}, + [0xFB8A]={d="al"}, + [0xFB8B]={d="al"}, + [0xFB8C]={d="al"}, + [0xFB8D]={d="al"}, + [0xFB8E]={d="al"}, + [0xFB8F]={d="al"}, + [0xFB90]={d="al"}, + [0xFB91]={d="al"}, + [0xFB92]={d="al"}, + [0xFB93]={d="al"}, + [0xFB94]={d="al"}, + [0xFB95]={d="al"}, + [0xFB96]={d="al"}, + [0xFB97]={d="al"}, + [0xFB98]={d="al"}, + [0xFB99]={d="al"}, + [0xFB9A]={d="al"}, + [0xFB9B]={d="al"}, + [0xFB9C]={d="al"}, + [0xFB9D]={d="al"}, + [0xFB9E]={d="al"}, + [0xFB9F]={d="al"}, + [0xFBA0]={d="al"}, + [0xFBA1]={d="al"}, + [0xFBA2]={d="al"}, + [0xFBA3]={d="al"}, + [0xFBA4]={d="al"}, + [0xFBA5]={d="al"}, + [0xFBA6]={d="al"}, + [0xFBA7]={d="al"}, + [0xFBA8]={d="al"}, + [0xFBA9]={d="al"}, + [0xFBAA]={d="al"}, + [0xFBAB]={d="al"}, + [0xFBAC]={d="al"}, + [0xFBAD]={d="al"}, + [0xFBAE]={d="al"}, + [0xFBAF]={d="al"}, + [0xFBB0]={d="al"}, + [0xFBB1]={d="al"}, + [0xFBB2]={d="al"}, + [0xFBB3]={d="al"}, + [0xFBB4]={d="al"}, + [0xFBB5]={d="al"}, + [0xFBB6]={d="al"}, + [0xFBB7]={d="al"}, + [0xFBB8]={d="al"}, + [0xFBB9]={d="al"}, + [0xFBBA]={d="al"}, + [0xFBBB]={d="al"}, + [0xFBBC]={d="al"}, + [0xFBBD]={d="al"}, + [0xFBBE]={d="al"}, + [0xFBBF]={d="al"}, + [0xFBC0]={d="al"}, + [0xFBC1]={d="al"}, + [0xFBC2]={d="al"}, + [0xFBD3]={d="al"}, + [0xFBD4]={d="al"}, + [0xFBD5]={d="al"}, + [0xFBD6]={d="al"}, + [0xFBD7]={d="al"}, + [0xFBD8]={d="al"}, + [0xFBD9]={d="al"}, + [0xFBDA]={d="al"}, + [0xFBDB]={d="al"}, + [0xFBDC]={d="al"}, + [0xFBDD]={d="al"}, + [0xFBDE]={d="al"}, + [0xFBDF]={d="al"}, + [0xFBE0]={d="al"}, + [0xFBE1]={d="al"}, + [0xFBE2]={d="al"}, + [0xFBE3]={d="al"}, + [0xFBE4]={d="al"}, + [0xFBE5]={d="al"}, + [0xFBE6]={d="al"}, + [0xFBE7]={d="al"}, + [0xFBE8]={d="al"}, + [0xFBE9]={d="al"}, + [0xFBEA]={d="al"}, + [0xFBEB]={d="al"}, + [0xFBEC]={d="al"}, + [0xFBED]={d="al"}, + [0xFBEE]={d="al"}, + [0xFBEF]={d="al"}, + [0xFBF0]={d="al"}, + [0xFBF1]={d="al"}, + [0xFBF2]={d="al"}, + [0xFBF3]={d="al"}, + [0xFBF4]={d="al"}, + [0xFBF5]={d="al"}, + [0xFBF6]={d="al"}, + [0xFBF7]={d="al"}, + [0xFBF8]={d="al"}, + [0xFBF9]={d="al"}, + [0xFBFA]={d="al"}, + [0xFBFB]={d="al"}, + [0xFBFC]={d="al"}, + [0xFBFD]={d="al"}, + [0xFBFE]={d="al"}, + [0xFBFF]={d="al"}, + [0xFC00]={d="al"}, + [0xFC01]={d="al"}, + [0xFC02]={d="al"}, + [0xFC03]={d="al"}, + [0xFC04]={d="al"}, + [0xFC05]={d="al"}, + [0xFC06]={d="al"}, + [0xFC07]={d="al"}, + [0xFC08]={d="al"}, + [0xFC09]={d="al"}, + [0xFC0A]={d="al"}, + [0xFC0B]={d="al"}, + [0xFC0C]={d="al"}, + [0xFC0D]={d="al"}, + [0xFC0E]={d="al"}, + [0xFC0F]={d="al"}, + [0xFC10]={d="al"}, + [0xFC11]={d="al"}, + [0xFC12]={d="al"}, + [0xFC13]={d="al"}, + [0xFC14]={d="al"}, + [0xFC15]={d="al"}, + [0xFC16]={d="al"}, + [0xFC17]={d="al"}, + [0xFC18]={d="al"}, + [0xFC19]={d="al"}, + [0xFC1A]={d="al"}, + [0xFC1B]={d="al"}, + [0xFC1C]={d="al"}, + [0xFC1D]={d="al"}, + [0xFC1E]={d="al"}, + [0xFC1F]={d="al"}, + [0xFC20]={d="al"}, + [0xFC21]={d="al"}, + [0xFC22]={d="al"}, + [0xFC23]={d="al"}, + [0xFC24]={d="al"}, + [0xFC25]={d="al"}, + [0xFC26]={d="al"}, + [0xFC27]={d="al"}, + [0xFC28]={d="al"}, + [0xFC29]={d="al"}, + [0xFC2A]={d="al"}, + [0xFC2B]={d="al"}, + [0xFC2C]={d="al"}, + [0xFC2D]={d="al"}, + [0xFC2E]={d="al"}, + [0xFC2F]={d="al"}, + [0xFC30]={d="al"}, + [0xFC31]={d="al"}, + [0xFC32]={d="al"}, + [0xFC33]={d="al"}, + [0xFC34]={d="al"}, + [0xFC35]={d="al"}, + [0xFC36]={d="al"}, + [0xFC37]={d="al"}, + [0xFC38]={d="al"}, + [0xFC39]={d="al"}, + [0xFC3A]={d="al"}, + [0xFC3B]={d="al"}, + [0xFC3C]={d="al"}, + [0xFC3D]={d="al"}, + [0xFC3E]={d="al"}, + [0xFC3F]={d="al"}, + [0xFC40]={d="al"}, + [0xFC41]={d="al"}, + [0xFC42]={d="al"}, + [0xFC43]={d="al"}, + [0xFC44]={d="al"}, + [0xFC45]={d="al"}, + [0xFC46]={d="al"}, + [0xFC47]={d="al"}, + [0xFC48]={d="al"}, + [0xFC49]={d="al"}, + [0xFC4A]={d="al"}, + [0xFC4B]={d="al"}, + [0xFC4C]={d="al"}, + [0xFC4D]={d="al"}, + [0xFC4E]={d="al"}, + [0xFC4F]={d="al"}, + [0xFC50]={d="al"}, + [0xFC51]={d="al"}, + [0xFC52]={d="al"}, + [0xFC53]={d="al"}, + [0xFC54]={d="al"}, + [0xFC55]={d="al"}, + [0xFC56]={d="al"}, + [0xFC57]={d="al"}, + [0xFC58]={d="al"}, + [0xFC59]={d="al"}, + [0xFC5A]={d="al"}, + [0xFC5B]={d="al"}, + [0xFC5C]={d="al"}, + [0xFC5D]={d="al"}, + [0xFC5E]={d="al"}, + [0xFC5F]={d="al"}, + [0xFC60]={d="al"}, + [0xFC61]={d="al"}, + [0xFC62]={d="al"}, + [0xFC63]={d="al"}, + [0xFC64]={d="al"}, + [0xFC65]={d="al"}, + [0xFC66]={d="al"}, + [0xFC67]={d="al"}, + [0xFC68]={d="al"}, + [0xFC69]={d="al"}, + [0xFC6A]={d="al"}, + [0xFC6B]={d="al"}, + [0xFC6C]={d="al"}, + [0xFC6D]={d="al"}, + [0xFC6E]={d="al"}, + [0xFC6F]={d="al"}, + [0xFC70]={d="al"}, + [0xFC71]={d="al"}, + [0xFC72]={d="al"}, + [0xFC73]={d="al"}, + [0xFC74]={d="al"}, + [0xFC75]={d="al"}, + [0xFC76]={d="al"}, + [0xFC77]={d="al"}, + [0xFC78]={d="al"}, + [0xFC79]={d="al"}, + [0xFC7A]={d="al"}, + [0xFC7B]={d="al"}, + [0xFC7C]={d="al"}, + [0xFC7D]={d="al"}, + [0xFC7E]={d="al"}, + [0xFC7F]={d="al"}, + [0xFC80]={d="al"}, + [0xFC81]={d="al"}, + [0xFC82]={d="al"}, + [0xFC83]={d="al"}, + [0xFC84]={d="al"}, + [0xFC85]={d="al"}, + [0xFC86]={d="al"}, + [0xFC87]={d="al"}, + [0xFC88]={d="al"}, + [0xFC89]={d="al"}, + [0xFC8A]={d="al"}, + [0xFC8B]={d="al"}, + [0xFC8C]={d="al"}, + [0xFC8D]={d="al"}, + [0xFC8E]={d="al"}, + [0xFC8F]={d="al"}, + [0xFC90]={d="al"}, + [0xFC91]={d="al"}, + [0xFC92]={d="al"}, + [0xFC93]={d="al"}, + [0xFC94]={d="al"}, + [0xFC95]={d="al"}, + [0xFC96]={d="al"}, + [0xFC97]={d="al"}, + [0xFC98]={d="al"}, + [0xFC99]={d="al"}, + [0xFC9A]={d="al"}, + [0xFC9B]={d="al"}, + [0xFC9C]={d="al"}, + [0xFC9D]={d="al"}, + [0xFC9E]={d="al"}, + [0xFC9F]={d="al"}, + [0xFCA0]={d="al"}, + [0xFCA1]={d="al"}, + [0xFCA2]={d="al"}, + [0xFCA3]={d="al"}, + [0xFCA4]={d="al"}, + [0xFCA5]={d="al"}, + [0xFCA6]={d="al"}, + [0xFCA7]={d="al"}, + [0xFCA8]={d="al"}, + [0xFCA9]={d="al"}, + [0xFCAA]={d="al"}, + [0xFCAB]={d="al"}, + [0xFCAC]={d="al"}, + [0xFCAD]={d="al"}, + [0xFCAE]={d="al"}, + [0xFCAF]={d="al"}, + [0xFCB0]={d="al"}, + [0xFCB1]={d="al"}, + [0xFCB2]={d="al"}, + [0xFCB3]={d="al"}, + [0xFCB4]={d="al"}, + [0xFCB5]={d="al"}, + [0xFCB6]={d="al"}, + [0xFCB7]={d="al"}, + [0xFCB8]={d="al"}, + [0xFCB9]={d="al"}, + [0xFCBA]={d="al"}, + [0xFCBB]={d="al"}, + [0xFCBC]={d="al"}, + [0xFCBD]={d="al"}, + [0xFCBE]={d="al"}, + [0xFCBF]={d="al"}, + [0xFCC0]={d="al"}, + [0xFCC1]={d="al"}, + [0xFCC2]={d="al"}, + [0xFCC3]={d="al"}, + [0xFCC4]={d="al"}, + [0xFCC5]={d="al"}, + [0xFCC6]={d="al"}, + [0xFCC7]={d="al"}, + [0xFCC8]={d="al"}, + [0xFCC9]={d="al"}, + [0xFCCA]={d="al"}, + [0xFCCB]={d="al"}, + [0xFCCC]={d="al"}, + [0xFCCD]={d="al"}, + [0xFCCE]={d="al"}, + [0xFCCF]={d="al"}, + [0xFCD0]={d="al"}, + [0xFCD1]={d="al"}, + [0xFCD2]={d="al"}, + [0xFCD3]={d="al"}, + [0xFCD4]={d="al"}, + [0xFCD5]={d="al"}, + [0xFCD6]={d="al"}, + [0xFCD7]={d="al"}, + [0xFCD8]={d="al"}, + [0xFCD9]={d="al"}, + [0xFCDA]={d="al"}, + [0xFCDB]={d="al"}, + [0xFCDC]={d="al"}, + [0xFCDD]={d="al"}, + [0xFCDE]={d="al"}, + [0xFCDF]={d="al"}, + [0xFCE0]={d="al"}, + [0xFCE1]={d="al"}, + [0xFCE2]={d="al"}, + [0xFCE3]={d="al"}, + [0xFCE4]={d="al"}, + [0xFCE5]={d="al"}, + [0xFCE6]={d="al"}, + [0xFCE7]={d="al"}, + [0xFCE8]={d="al"}, + [0xFCE9]={d="al"}, + [0xFCEA]={d="al"}, + [0xFCEB]={d="al"}, + [0xFCEC]={d="al"}, + [0xFCED]={d="al"}, + [0xFCEE]={d="al"}, + [0xFCEF]={d="al"}, + [0xFCF0]={d="al"}, + [0xFCF1]={d="al"}, + [0xFCF2]={d="al"}, + [0xFCF3]={d="al"}, + [0xFCF4]={d="al"}, + [0xFCF5]={d="al"}, + [0xFCF6]={d="al"}, + [0xFCF7]={d="al"}, + [0xFCF8]={d="al"}, + [0xFCF9]={d="al"}, + [0xFCFA]={d="al"}, + [0xFCFB]={d="al"}, + [0xFCFC]={d="al"}, + [0xFCFD]={d="al"}, + [0xFCFE]={d="al"}, + [0xFCFF]={d="al"}, + [0xFD00]={d="al"}, + [0xFD01]={d="al"}, + [0xFD02]={d="al"}, + [0xFD03]={d="al"}, + [0xFD04]={d="al"}, + [0xFD05]={d="al"}, + [0xFD06]={d="al"}, + [0xFD07]={d="al"}, + [0xFD08]={d="al"}, + [0xFD09]={d="al"}, + [0xFD0A]={d="al"}, + [0xFD0B]={d="al"}, + [0xFD0C]={d="al"}, + [0xFD0D]={d="al"}, + [0xFD0E]={d="al"}, + [0xFD0F]={d="al"}, + [0xFD10]={d="al"}, + [0xFD11]={d="al"}, + [0xFD12]={d="al"}, + [0xFD13]={d="al"}, + [0xFD14]={d="al"}, + [0xFD15]={d="al"}, + [0xFD16]={d="al"}, + [0xFD17]={d="al"}, + [0xFD18]={d="al"}, + [0xFD19]={d="al"}, + [0xFD1A]={d="al"}, + [0xFD1B]={d="al"}, + [0xFD1C]={d="al"}, + [0xFD1D]={d="al"}, + [0xFD1E]={d="al"}, + [0xFD1F]={d="al"}, + [0xFD20]={d="al"}, + [0xFD21]={d="al"}, + [0xFD22]={d="al"}, + [0xFD23]={d="al"}, + [0xFD24]={d="al"}, + [0xFD25]={d="al"}, + [0xFD26]={d="al"}, + [0xFD27]={d="al"}, + [0xFD28]={d="al"}, + [0xFD29]={d="al"}, + [0xFD2A]={d="al"}, + [0xFD2B]={d="al"}, + [0xFD2C]={d="al"}, + [0xFD2D]={d="al"}, + [0xFD2E]={d="al"}, + [0xFD2F]={d="al"}, + [0xFD30]={d="al"}, + [0xFD31]={d="al"}, + [0xFD32]={d="al"}, + [0xFD33]={d="al"}, + [0xFD34]={d="al"}, + [0xFD35]={d="al"}, + [0xFD36]={d="al"}, + [0xFD37]={d="al"}, + [0xFD38]={d="al"}, + [0xFD39]={d="al"}, + [0xFD3A]={d="al"}, + [0xFD3B]={d="al"}, + [0xFD3C]={d="al"}, + [0xFD3D]={d="al"}, + [0xFD3E]={d="on"}, + [0xFD3F]={d="on"}, + [0xFD40]={d="on"}, + [0xFD41]={d="on"}, + [0xFD42]={d="on"}, + [0xFD43]={d="on"}, + [0xFD44]={d="on"}, + [0xFD45]={d="on"}, + [0xFD46]={d="on"}, + [0xFD47]={d="on"}, + [0xFD48]={d="on"}, + [0xFD49]={d="on"}, + [0xFD4A]={d="on"}, + [0xFD4B]={d="on"}, + [0xFD4C]={d="on"}, + [0xFD4D]={d="on"}, + [0xFD4E]={d="on"}, + [0xFD4F]={d="on"}, + [0xFD50]={d="al"}, + [0xFD51]={d="al"}, + [0xFD52]={d="al"}, + [0xFD53]={d="al"}, + [0xFD54]={d="al"}, + [0xFD55]={d="al"}, + [0xFD56]={d="al"}, + [0xFD57]={d="al"}, + [0xFD58]={d="al"}, + [0xFD59]={d="al"}, + [0xFD5A]={d="al"}, + [0xFD5B]={d="al"}, + [0xFD5C]={d="al"}, + [0xFD5D]={d="al"}, + [0xFD5E]={d="al"}, + [0xFD5F]={d="al"}, + [0xFD60]={d="al"}, + [0xFD61]={d="al"}, + [0xFD62]={d="al"}, + [0xFD63]={d="al"}, + [0xFD64]={d="al"}, + [0xFD65]={d="al"}, + [0xFD66]={d="al"}, + [0xFD67]={d="al"}, + [0xFD68]={d="al"}, + [0xFD69]={d="al"}, + [0xFD6A]={d="al"}, + [0xFD6B]={d="al"}, + [0xFD6C]={d="al"}, + [0xFD6D]={d="al"}, + [0xFD6E]={d="al"}, + [0xFD6F]={d="al"}, + [0xFD70]={d="al"}, + [0xFD71]={d="al"}, + [0xFD72]={d="al"}, + [0xFD73]={d="al"}, + [0xFD74]={d="al"}, + [0xFD75]={d="al"}, + [0xFD76]={d="al"}, + [0xFD77]={d="al"}, + [0xFD78]={d="al"}, + [0xFD79]={d="al"}, + [0xFD7A]={d="al"}, + [0xFD7B]={d="al"}, + [0xFD7C]={d="al"}, + [0xFD7D]={d="al"}, + [0xFD7E]={d="al"}, + [0xFD7F]={d="al"}, + [0xFD80]={d="al"}, + [0xFD81]={d="al"}, + [0xFD82]={d="al"}, + [0xFD83]={d="al"}, + [0xFD84]={d="al"}, + [0xFD85]={d="al"}, + [0xFD86]={d="al"}, + [0xFD87]={d="al"}, + [0xFD88]={d="al"}, + [0xFD89]={d="al"}, + [0xFD8A]={d="al"}, + [0xFD8B]={d="al"}, + [0xFD8C]={d="al"}, + [0xFD8D]={d="al"}, + [0xFD8E]={d="al"}, + [0xFD8F]={d="al"}, + [0xFD92]={d="al"}, + [0xFD93]={d="al"}, + [0xFD94]={d="al"}, + [0xFD95]={d="al"}, + [0xFD96]={d="al"}, + [0xFD97]={d="al"}, + [0xFD98]={d="al"}, + [0xFD99]={d="al"}, + [0xFD9A]={d="al"}, + [0xFD9B]={d="al"}, + [0xFD9C]={d="al"}, + [0xFD9D]={d="al"}, + [0xFD9E]={d="al"}, + [0xFD9F]={d="al"}, + [0xFDA0]={d="al"}, + [0xFDA1]={d="al"}, + [0xFDA2]={d="al"}, + [0xFDA3]={d="al"}, + [0xFDA4]={d="al"}, + [0xFDA5]={d="al"}, + [0xFDA6]={d="al"}, + [0xFDA7]={d="al"}, + [0xFDA8]={d="al"}, + [0xFDA9]={d="al"}, + [0xFDAA]={d="al"}, + [0xFDAB]={d="al"}, + [0xFDAC]={d="al"}, + [0xFDAD]={d="al"}, + [0xFDAE]={d="al"}, + [0xFDAF]={d="al"}, + [0xFDB0]={d="al"}, + [0xFDB1]={d="al"}, + [0xFDB2]={d="al"}, + [0xFDB3]={d="al"}, + [0xFDB4]={d="al"}, + [0xFDB5]={d="al"}, + [0xFDB6]={d="al"}, + [0xFDB7]={d="al"}, + [0xFDB8]={d="al"}, + [0xFDB9]={d="al"}, + [0xFDBA]={d="al"}, + [0xFDBB]={d="al"}, + [0xFDBC]={d="al"}, + [0xFDBD]={d="al"}, + [0xFDBE]={d="al"}, + [0xFDBF]={d="al"}, + [0xFDC0]={d="al"}, + [0xFDC1]={d="al"}, + [0xFDC2]={d="al"}, + [0xFDC3]={d="al"}, + [0xFDC4]={d="al"}, + [0xFDC5]={d="al"}, + [0xFDC6]={d="al"}, + [0xFDC7]={d="al"}, + [0xFDCF]={d="on"}, + [0xFDF0]={d="al"}, + [0xFDF1]={d="al"}, + [0xFDF2]={d="al"}, + [0xFDF3]={d="al"}, + [0xFDF4]={d="al"}, + [0xFDF5]={d="al"}, + [0xFDF6]={d="al"}, + [0xFDF7]={d="al"}, + [0xFDF8]={d="al"}, + [0xFDF9]={d="al"}, + [0xFDFA]={d="al"}, + [0xFDFB]={d="al"}, + [0xFDFC]={d="al"}, + [0xFDFD]={d="on"}, + [0xFDFE]={d="on"}, + [0xFDFF]={d="on"}, + [0xFE00]={}, + [0xFE10]={d="on"}, + [0xFE11]={d="on"}, + [0xFE12]={d="on"}, + [0xFE13]={d="on"}, + [0xFE14]={d="on"}, + [0xFE15]={d="on"}, + [0xFE16]={d="on"}, + [0xFE17]={d="on"}, + [0xFE18]={d="on"}, + [0xFE19]={d="on"}, + [0xFE20]={d="nsm"}, + [0xFE21]={d="nsm"}, + [0xFE22]={d="nsm"}, + [0xFE23]={d="nsm"}, + [0xFE24]={d="nsm"}, + [0xFE25]={d="nsm"}, + [0xFE26]={d="nsm"}, + [0xFE27]={d="nsm"}, + [0xFE28]={d="nsm"}, + [0xFE29]={d="nsm"}, + [0xFE2A]={d="nsm"}, + [0xFE2B]={d="nsm"}, + [0xFE2C]={d="nsm"}, + [0xFE2D]={d="nsm"}, + [0xFE2E]={d="nsm"}, + [0xFE2F]={d="nsm"}, + [0xFE30]={d="on"}, + [0xFE31]={d="on"}, + [0xFE32]={d="on"}, + [0xFE33]={d="on"}, + [0xFE34]={d="on"}, + [0xFE35]={d="on"}, + [0xFE36]={d="on"}, + [0xFE37]={d="on"}, + [0xFE38]={d="on"}, + [0xFE39]={d="on"}, + [0xFE3A]={d="on"}, + [0xFE3B]={d="on"}, + [0xFE3C]={d="on"}, + [0xFE3D]={d="on"}, + [0xFE3E]={d="on"}, + [0xFE3F]={d="on"}, + [0xFE40]={d="on"}, + [0xFE41]={d="on"}, + [0xFE42]={d="on"}, + [0xFE43]={d="on"}, + [0xFE44]={d="on"}, + [0xFE45]={d="on"}, + [0xFE46]={d="on"}, + [0xFE47]={d="on"}, + [0xFE48]={d="on"}, + [0xFE49]={d="on"}, + [0xFE4A]={d="on"}, + [0xFE4B]={d="on"}, + [0xFE4C]={d="on"}, + [0xFE4D]={d="on"}, + [0xFE4E]={d="on"}, + [0xFE4F]={d="on"}, + [0xFE50]={d="cs"}, + [0xFE51]={d="on"}, + [0xFE52]={d="cs"}, + [0xFE54]={d="on"}, + [0xFE55]={d="cs"}, + [0xFE56]={d="on"}, + [0xFE57]={d="on"}, + [0xFE58]={d="on"}, + [0xFE59]={d="on", + m=0xFE5A, + tc="open"}, + [0xFE5A]={d="on", + m=0xFE59, + tc="close"}, + [0xFE5B]={d="on", + m=0xFE5C, + tc="open"}, + [0xFE5C]={d="on", + m=0xFE5B, + tc="close"}, + [0xFE5D]={d="on", + m=0xFE5E, + tc="open"}, + [0xFE5E]={d="on", + m=0xFE5D, + tc="close"}, + [0xFE5F]={d="et"}, + [0xFE60]={d="on"}, + [0xFE61]={d="on"}, + [0xFE62]={d="es"}, + [0xFE63]={d="es"}, + [0xFE64]={d="on", + m=0xFE65, + tc="open"}, + [0xFE65]={d="on", + m=0xFE64, + tc="close"}, + [0xFE66]={d="on"}, + [0xFE68]={d="on"}, + [0xFE69]={d="et"}, + [0xFE6A]={d="et"}, + [0xFE6B]={d="on"}, + [0xFE70]={d="al"}, + [0xFE71]={d="al"}, + [0xFE72]={d="al"}, + [0xFE73]={d="al"}, + [0xFE74]={d="al"}, + [0xFE76]={d="al"}, + [0xFE77]={d="al"}, + [0xFE78]={d="al"}, + [0xFE79]={d="al"}, + [0xFE7A]={d="al"}, + [0xFE7B]={d="al"}, + [0xFE7C]={d="al"}, + [0xFE7D]={d="al"}, + [0xFE7E]={d="al"}, + [0xFE7F]={d="al"}, + [0xFE80]={d="al"}, + [0xFE81]={d="al"}, + [0xFE82]={d="al"}, + [0xFE83]={d="al"}, + [0xFE84]={d="al"}, + [0xFE85]={d="al"}, + [0xFE86]={d="al"}, + [0xFE87]={d="al"}, + [0xFE88]={d="al"}, + [0xFE89]={d="al"}, + [0xFE8A]={d="al"}, + [0xFE8B]={d="al"}, + [0xFE8C]={d="al"}, + [0xFE8D]={d="al"}, + [0xFE8E]={d="al"}, + [0xFE8F]={d="al"}, + [0xFE90]={d="al"}, + [0xFE91]={d="al"}, + [0xFE92]={d="al"}, + [0xFE93]={d="al"}, + [0xFE94]={d="al"}, + [0xFE95]={d="al"}, + [0xFE96]={d="al"}, + [0xFE97]={d="al"}, + [0xFE98]={d="al"}, + [0xFE99]={d="al"}, + [0xFE9A]={d="al"}, + [0xFE9B]={d="al"}, + [0xFE9C]={d="al"}, + [0xFE9D]={d="al"}, + [0xFE9E]={d="al"}, + [0xFE9F]={d="al"}, + [0xFEA0]={d="al"}, + [0xFEA1]={d="al"}, + [0xFEA2]={d="al"}, + [0xFEA3]={d="al"}, + [0xFEA4]={d="al"}, + [0xFEA5]={d="al"}, + [0xFEA6]={d="al"}, + [0xFEA7]={d="al"}, + [0xFEA8]={d="al"}, + [0xFEA9]={d="al"}, + [0xFEAA]={d="al"}, + [0xFEAB]={d="al"}, + [0xFEAC]={d="al"}, + [0xFEAD]={d="al"}, + [0xFEAE]={d="al"}, + [0xFEAF]={d="al"}, + [0xFEB0]={d="al"}, + [0xFEB1]={d="al"}, + [0xFEB2]={d="al"}, + [0xFEB3]={d="al"}, + [0xFEB4]={d="al"}, + [0xFEB5]={d="al"}, + [0xFEB6]={d="al"}, + [0xFEB7]={d="al"}, + [0xFEB8]={d="al"}, + [0xFEB9]={d="al"}, + [0xFEBA]={d="al"}, + [0xFEBB]={d="al"}, + [0xFEBC]={d="al"}, + [0xFEBD]={d="al"}, + [0xFEBE]={d="al"}, + [0xFEBF]={d="al"}, + [0xFEC0]={d="al"}, + [0xFEC1]={d="al"}, + [0xFEC2]={d="al"}, + [0xFEC3]={d="al"}, + [0xFEC4]={d="al"}, + [0xFEC5]={d="al"}, + [0xFEC6]={d="al"}, + [0xFEC7]={d="al"}, + [0xFEC8]={d="al"}, + [0xFEC9]={d="al"}, + [0xFECA]={d="al"}, + [0xFECB]={d="al"}, + [0xFECC]={d="al"}, + [0xFECD]={d="al"}, + [0xFECE]={d="al"}, + [0xFECF]={d="al"}, + [0xFED0]={d="al"}, + [0xFED1]={d="al"}, + [0xFED2]={d="al"}, + [0xFED3]={d="al"}, + [0xFED4]={d="al"}, + [0xFED5]={d="al"}, + [0xFED6]={d="al"}, + [0xFED7]={d="al"}, + [0xFED8]={d="al"}, + [0xFED9]={d="al"}, + [0xFEDA]={d="al"}, + [0xFEDB]={d="al"}, + [0xFEDC]={d="al"}, + [0xFEDD]={d="al"}, + [0xFEDE]={d="al"}, + [0xFEDF]={d="al"}, + [0xFEE0]={d="al"}, + [0xFEE1]={d="al"}, + [0xFEE2]={d="al"}, + [0xFEE3]={d="al"}, + [0xFEE4]={d="al"}, + [0xFEE5]={d="al"}, + [0xFEE6]={d="al"}, + [0xFEE7]={d="al"}, + [0xFEE8]={d="al"}, + [0xFEE9]={d="al"}, + [0xFEEA]={d="al"}, + [0xFEEB]={d="al"}, + [0xFEEC]={d="al"}, + [0xFEED]={d="al"}, + [0xFEEE]={d="al"}, + [0xFEEF]={d="al"}, + [0xFEF0]={d="al"}, + [0xFEF1]={d="al"}, + [0xFEF2]={d="al"}, + [0xFEF3]={d="al"}, + [0xFEF4]={d="al"}, + [0xFEF5]={d="al"}, + [0xFEF6]={d="al"}, + [0xFEF7]={d="al"}, + [0xFEF8]={d="al"}, + [0xFEF9]={d="al"}, + [0xFEFA]={d="al"}, + [0xFEFB]={d="al"}, + [0xFEFC]={d="al"}, + [0xFEFF]={d="bn"}, + [0xFF01]={d="on"}, + [0xFF02]={d="on"}, + [0xFF03]={d="et"}, + [0xFF04]={d="et"}, + [0xFF05]={d="et"}, + [0xFF06]={d="on"}, + [0xFF07]={d="on"}, + [0xFF08]={d="on", + m=0xFF09, + tc="open"}, + [0xFF09]={d="on", + m=0xFF08, + tc="close"}, + [0xFF0A]={d="on"}, + [0xFF0B]={d="es"}, + [0xFF0C]={d="cs"}, + [0xFF0D]={d="es"}, + [0xFF0E]={d="cs"}, + [0xFF0F]={d="cs"}, + [0xFF10]={d="en"}, + [0xFF11]={d="en"}, + [0xFF12]={d="en"}, + [0xFF13]={d="en"}, + [0xFF14]={d="en"}, + [0xFF15]={d="en"}, + [0xFF16]={d="en"}, + [0xFF17]={d="en"}, + [0xFF18]={d="en"}, + [0xFF19]={d="en"}, + [0xFF1A]={d="cs"}, + [0xFF1B]={d="on"}, + [0xFF1C]={d="on", + m=0xFF1E, + tc="open"}, + [0xFF1D]={d="on"}, + [0xFF1E]={d="on", + m=0xFF1C, + tc="close"}, + [0xFF1F]={d="on"}, + [0xFF20]={d="on"}, + [0xFF21]={d="l"}, + [0xFF22]={d="l"}, + [0xFF23]={d="l"}, + [0xFF24]={d="l"}, + [0xFF25]={d="l"}, + [0xFF26]={d="l"}, + [0xFF27]={d="l"}, + [0xFF28]={d="l"}, + [0xFF29]={d="l"}, + [0xFF2A]={d="l"}, + [0xFF2B]={d="l"}, + [0xFF2C]={d="l"}, + [0xFF2D]={d="l"}, + [0xFF2E]={d="l"}, + [0xFF2F]={d="l"}, + [0xFF30]={d="l"}, + [0xFF31]={d="l"}, + [0xFF32]={d="l"}, + [0xFF33]={d="l"}, + [0xFF34]={d="l"}, + [0xFF35]={d="l"}, + [0xFF36]={d="l"}, + [0xFF37]={d="l"}, + [0xFF38]={d="l"}, + [0xFF39]={d="l"}, + [0xFF3A]={d="l"}, + [0xFF3B]={d="on", + m=0xFF3D, + tc="open"}, + [0xFF3C]={d="on"}, + [0xFF3D]={d="on", + m=0xFF3B, + tc="close"}, + [0xFF3E]={d="on"}, + [0xFF3F]={d="on"}, + [0xFF40]={d="on"}, + [0xFF41]={d="l"}, + [0xFF42]={d="l"}, + [0xFF43]={d="l"}, + [0xFF44]={d="l"}, + [0xFF45]={d="l"}, + [0xFF46]={d="l"}, + [0xFF47]={d="l"}, + [0xFF48]={d="l"}, + [0xFF49]={d="l"}, + [0xFF4A]={d="l"}, + [0xFF4B]={d="l"}, + [0xFF4C]={d="l"}, + [0xFF4D]={d="l"}, + [0xFF4E]={d="l"}, + [0xFF4F]={d="l"}, + [0xFF50]={d="l"}, + [0xFF51]={d="l"}, + [0xFF52]={d="l"}, + [0xFF53]={d="l"}, + [0xFF54]={d="l"}, + [0xFF55]={d="l"}, + [0xFF56]={d="l"}, + [0xFF57]={d="l"}, + [0xFF58]={d="l"}, + [0xFF59]={d="l"}, + [0xFF5A]={d="l"}, + [0xFF5B]={d="on", + m=0xFF5D, + tc="open"}, + [0xFF5C]={d="on"}, + [0xFF5D]={d="on", + m=0xFF5B, + tc="close"}, + [0xFF5E]={d="on"}, + [0xFF5F]={d="on", + m=0xFF60, + tc="open"}, + [0xFF60]={d="on", + m=0xFF5F, + tc="close"}, + [0xFF61]={d="on"}, + [0xFF62]={d="on", + m=0xFF63, + tc="open"}, + [0xFF63]={d="on", + m=0xFF62, + tc="close"}, + [0xFF64]={d="on"}, + [0xFF65]={d="on"}, + [0xFF66]={d="l"}, + [0xFF67]={d="l"}, + [0xFF68]={d="l"}, + [0xFF69]={d="l"}, + [0xFF6A]={d="l"}, + [0xFF6B]={d="l"}, + [0xFF6C]={d="l"}, + [0xFF6D]={d="l"}, + [0xFF6E]={d="l"}, + [0xFF6F]={d="l"}, + [0xFF70]={d="l"}, + [0xFF71]={d="l"}, + [0xFF72]={d="l"}, + [0xFF73]={d="l"}, + [0xFF74]={d="l"}, + [0xFF75]={d="l"}, + [0xFF76]={d="l"}, + [0xFF77]={d="l"}, + [0xFF78]={d="l"}, + [0xFF79]={d="l"}, + [0xFF7A]={d="l"}, + [0xFF7B]={d="l"}, + [0xFF7C]={d="l"}, + [0xFF7D]={d="l"}, + [0xFF7E]={d="l"}, + [0xFF7F]={d="l"}, + [0xFF80]={d="l"}, + [0xFF81]={d="l"}, + [0xFF82]={d="l"}, + [0xFF83]={d="l"}, + [0xFF84]={d="l"}, + [0xFF85]={d="l"}, + [0xFF86]={d="l"}, + [0xFF87]={d="l"}, + [0xFF88]={d="l"}, + [0xFF89]={d="l"}, + [0xFF8A]={d="l"}, + [0xFF8B]={d="l"}, + [0xFF8C]={d="l"}, + [0xFF8D]={d="l"}, + [0xFF8E]={d="l"}, + [0xFF8F]={d="l"}, + [0xFF90]={d="l"}, + [0xFF91]={d="l"}, + [0xFF92]={d="l"}, + [0xFF93]={d="l"}, + [0xFF94]={d="l"}, + [0xFF95]={d="l"}, + [0xFF96]={d="l"}, + [0xFF97]={d="l"}, + [0xFF98]={d="l"}, + [0xFF99]={d="l"}, + [0xFF9A]={d="l"}, + [0xFF9B]={d="l"}, + [0xFF9C]={d="l"}, + [0xFF9D]={d="l"}, + [0xFF9E]={d="l"}, + [0xFF9F]={d="l"}, + [0xFFA0]={d="l"}, + [0xFFA1]={d="l"}, + [0xFFA2]={d="l"}, + [0xFFA3]={d="l"}, + [0xFFA4]={d="l"}, + [0xFFA5]={d="l"}, + [0xFFA6]={d="l"}, + [0xFFA7]={d="l"}, + [0xFFA8]={d="l"}, + [0xFFA9]={d="l"}, + [0xFFAA]={d="l"}, + [0xFFAB]={d="l"}, + [0xFFAC]={d="l"}, + [0xFFAD]={d="l"}, + [0xFFAE]={d="l"}, + [0xFFAF]={d="l"}, + [0xFFB0]={d="l"}, + [0xFFB1]={d="l"}, + [0xFFB2]={d="l"}, + [0xFFB3]={d="l"}, + [0xFFB4]={d="l"}, + [0xFFB5]={d="l"}, + [0xFFB6]={d="l"}, + [0xFFB7]={d="l"}, + [0xFFB8]={d="l"}, + [0xFFB9]={d="l"}, + [0xFFBA]={d="l"}, + [0xFFBB]={d="l"}, + [0xFFBC]={d="l"}, + [0xFFBD]={d="l"}, + [0xFFBE]={d="l"}, + [0xFFC2]={d="l"}, + [0xFFC3]={d="l"}, + [0xFFC4]={d="l"}, + [0xFFC5]={d="l"}, + [0xFFC6]={d="l"}, + [0xFFC7]={d="l"}, + [0xFFCA]={d="l"}, + [0xFFCB]={d="l"}, + [0xFFCC]={d="l"}, + [0xFFCD]={d="l"}, + [0xFFCE]={d="l"}, + [0xFFCF]={d="l"}, + [0xFFD2]={d="l"}, + [0xFFD3]={d="l"}, + [0xFFD4]={d="l"}, + [0xFFD5]={d="l"}, + [0xFFD6]={d="l"}, + [0xFFD7]={d="l"}, + [0xFFDA]={d="l"}, + [0xFFDB]={d="l"}, + [0xFFDC]={d="l"}, + [0xFFE0]={d="et"}, + [0xFFE1]={d="et"}, + [0xFFE2]={d="on"}, + [0xFFE3]={d="on"}, + [0xFFE4]={d="on"}, + [0xFFE5]={d="et"}, + [0xFFE6]={d="et"}, + [0xFFE8]={d="on"}, + [0xFFE9]={d="on"}, + [0xFFEA]={d="on"}, + [0xFFEB]={d="on"}, + [0xFFEC]={d="on"}, + [0xFFED]={d="on"}, + [0xFFEE]={d="on"}, + [0xFFF9]={d="on"}, + [0xFFFA]={d="on"}, + [0xFFFB]={d="on"}, + [0xFFFC]={d="on"}, + [0xFFFD]={d="on"}, + [0x10000]={d="l"}, + [0x10001]={d="l"}, + [0x10002]={d="l"}, + [0x10003]={d="l"}, + [0x10004]={d="l"}, + [0x10005]={d="l"}, + [0x10006]={d="l"}, + [0x10007]={d="l"}, + [0x10008]={d="l"}, + [0x10009]={d="l"}, + [0x1000A]={d="l"}, + [0x1000B]={d="l"}, + [0x1000D]={d="l"}, + [0x1000E]={d="l"}, + [0x1000F]={d="l"}, + [0x10010]={d="l"}, + [0x10011]={d="l"}, + [0x10012]={d="l"}, + [0x10013]={d="l"}, + [0x10014]={d="l"}, + [0x10015]={d="l"}, + [0x10016]={d="l"}, + [0x10017]={d="l"}, + [0x10018]={d="l"}, + [0x10019]={d="l"}, + [0x1001A]={d="l"}, + [0x1001B]={d="l"}, + [0x1001C]={d="l"}, + [0x1001D]={d="l"}, + [0x1001E]={d="l"}, + [0x1001F]={d="l"}, + [0x10020]={d="l"}, + [0x10021]={d="l"}, + [0x10022]={d="l"}, + [0x10023]={d="l"}, + [0x10024]={d="l"}, + [0x10025]={d="l"}, + [0x10026]={d="l"}, + [0x10028]={d="l"}, + [0x10029]={d="l"}, + [0x1002A]={d="l"}, + [0x1002B]={d="l"}, + [0x1002C]={d="l"}, + [0x1002D]={d="l"}, + [0x1002E]={d="l"}, + [0x1002F]={d="l"}, + [0x10030]={d="l"}, + [0x10031]={d="l"}, + [0x10032]={d="l"}, + [0x10033]={d="l"}, + [0x10034]={d="l"}, + [0x10035]={d="l"}, + [0x10036]={d="l"}, + [0x10037]={d="l"}, + [0x10038]={d="l"}, + [0x10039]={d="l"}, + [0x1003A]={d="l"}, + [0x1003C]={d="l"}, + [0x1003D]={d="l"}, + [0x1003F]={d="l"}, + [0x10040]={d="l"}, + [0x10041]={d="l"}, + [0x10042]={d="l"}, + [0x10043]={d="l"}, + [0x10044]={d="l"}, + [0x10045]={d="l"}, + [0x10046]={d="l"}, + [0x10047]={d="l"}, + [0x10048]={d="l"}, + [0x10049]={d="l"}, + [0x1004A]={d="l"}, + [0x1004B]={d="l"}, + [0x1004C]={d="l"}, + [0x1004D]={d="l"}, + [0x10050]={d="l"}, + [0x10051]={d="l"}, + [0x10052]={d="l"}, + [0x10053]={d="l"}, + [0x10054]={d="l"}, + [0x10055]={d="l"}, + [0x10056]={d="l"}, + [0x10057]={d="l"}, + [0x10058]={d="l"}, + [0x10059]={d="l"}, + [0x1005A]={d="l"}, + [0x1005B]={d="l"}, + [0x1005C]={d="l"}, + [0x1005D]={d="l"}, + [0x10080]={d="l"}, + [0x10081]={d="l"}, + [0x10082]={d="l"}, + [0x10083]={d="l"}, + [0x10084]={d="l"}, + [0x10085]={d="l"}, + [0x10086]={d="l"}, + [0x10087]={d="l"}, + [0x10088]={d="l"}, + [0x10089]={d="l"}, + [0x1008A]={d="l"}, + [0x1008B]={d="l"}, + [0x1008C]={d="l"}, + [0x1008D]={d="l"}, + [0x1008E]={d="l"}, + [0x1008F]={d="l"}, + [0x10090]={d="l"}, + [0x10091]={d="l"}, + [0x10092]={d="l"}, + [0x10093]={d="l"}, + [0x10094]={d="l"}, + [0x10095]={d="l"}, + [0x10096]={d="l"}, + [0x10097]={d="l"}, + [0x10098]={d="l"}, + [0x10099]={d="l"}, + [0x1009A]={d="l"}, + [0x1009B]={d="l"}, + [0x1009C]={d="l"}, + [0x1009D]={d="l"}, + [0x1009E]={d="l"}, + [0x1009F]={d="l"}, + [0x100A0]={d="l"}, + [0x100A1]={d="l"}, + [0x100A2]={d="l"}, + [0x100A3]={d="l"}, + [0x100A4]={d="l"}, + [0x100A5]={d="l"}, + [0x100A6]={d="l"}, + [0x100A7]={d="l"}, + [0x100A8]={d="l"}, + [0x100A9]={d="l"}, + [0x100AA]={d="l"}, + [0x100AB]={d="l"}, + [0x100AC]={d="l"}, + [0x100AD]={d="l"}, + [0x100AE]={d="l"}, + [0x100AF]={d="l"}, + [0x100B0]={d="l"}, + [0x100B1]={d="l"}, + [0x100B2]={d="l"}, + [0x100B3]={d="l"}, + [0x100B4]={d="l"}, + [0x100B5]={d="l"}, + [0x100B6]={d="l"}, + [0x100B7]={d="l"}, + [0x100B8]={d="l"}, + [0x100B9]={d="l"}, + [0x100BA]={d="l"}, + [0x100BB]={d="l"}, + [0x100BC]={d="l"}, + [0x100BD]={d="l"}, + [0x100BE]={d="l"}, + [0x100BF]={d="l"}, + [0x100C0]={d="l"}, + [0x100C1]={d="l"}, + [0x100C2]={d="l"}, + [0x100C3]={d="l"}, + [0x100C4]={d="l"}, + [0x100C5]={d="l"}, + [0x100C6]={d="l"}, + [0x100C7]={d="l"}, + [0x100C8]={d="l"}, + [0x100C9]={d="l"}, + [0x100CA]={d="l"}, + [0x100CB]={d="l"}, + [0x100CC]={d="l"}, + [0x100CD]={d="l"}, + [0x100CE]={d="l"}, + [0x100CF]={d="l"}, + [0x100D0]={d="l"}, + [0x100D1]={d="l"}, + [0x100D2]={d="l"}, + [0x100D3]={d="l"}, + [0x100D4]={d="l"}, + [0x100D5]={d="l"}, + [0x100D6]={d="l"}, + [0x100D7]={d="l"}, + [0x100D8]={d="l"}, + [0x100D9]={d="l"}, + [0x100DA]={d="l"}, + [0x100DB]={d="l"}, + [0x100DC]={d="l"}, + [0x100DD]={d="l"}, + [0x100DE]={d="l"}, + [0x100DF]={d="l"}, + [0x100E0]={d="l"}, + [0x100E1]={d="l"}, + [0x100E2]={d="l"}, + [0x100E3]={d="l"}, + [0x100E4]={d="l"}, + [0x100E5]={d="l"}, + [0x100E6]={d="l"}, + [0x100E7]={d="l"}, + [0x100E8]={d="l"}, + [0x100E9]={d="l"}, + [0x100EA]={d="l"}, + [0x100EB]={d="l"}, + [0x100EC]={d="l"}, + [0x100ED]={d="l"}, + [0x100EE]={d="l"}, + [0x100EF]={d="l"}, + [0x100F0]={d="l"}, + [0x100F1]={d="l"}, + [0x100F2]={d="l"}, + [0x100F3]={d="l"}, + [0x100F4]={d="l"}, + [0x100F5]={d="l"}, + [0x100F6]={d="l"}, + [0x100F7]={d="l"}, + [0x100F8]={d="l"}, + [0x100F9]={d="l"}, + [0x100FA]={d="l"}, + [0x10100]={d="l"}, + [0x10101]={d="on"}, + [0x10102]={d="l"}, + [0x10107]={d="l"}, + [0x10108]={d="l"}, + [0x10109]={d="l"}, + [0x1010A]={d="l"}, + [0x1010B]={d="l"}, + [0x1010C]={d="l"}, + [0x1010D]={d="l"}, + [0x1010E]={d="l"}, + [0x1010F]={d="l"}, + [0x10110]={d="l"}, + [0x10111]={d="l"}, + [0x10112]={d="l"}, + [0x10113]={d="l"}, + [0x10114]={d="l"}, + [0x10115]={d="l"}, + [0x10116]={d="l"}, + [0x10117]={d="l"}, + [0x10118]={d="l"}, + [0x10119]={d="l"}, + [0x1011A]={d="l"}, + [0x1011B]={d="l"}, + [0x1011C]={d="l"}, + [0x1011D]={d="l"}, + [0x1011E]={d="l"}, + [0x1011F]={d="l"}, + [0x10120]={d="l"}, + [0x10121]={d="l"}, + [0x10122]={d="l"}, + [0x10123]={d="l"}, + [0x10124]={d="l"}, + [0x10125]={d="l"}, + [0x10126]={d="l"}, + [0x10127]={d="l"}, + [0x10128]={d="l"}, + [0x10129]={d="l"}, + [0x1012A]={d="l"}, + [0x1012B]={d="l"}, + [0x1012C]={d="l"}, + [0x1012D]={d="l"}, + [0x1012E]={d="l"}, + [0x1012F]={d="l"}, + [0x10130]={d="l"}, + [0x10131]={d="l"}, + [0x10132]={d="l"}, + [0x10133]={d="l"}, + [0x10137]={d="l"}, + [0x10138]={d="l"}, + [0x10139]={d="l"}, + [0x1013A]={d="l"}, + [0x1013B]={d="l"}, + [0x1013C]={d="l"}, + [0x1013D]={d="l"}, + [0x1013E]={d="l"}, + [0x1013F]={d="l"}, + [0x10140]={d="on"}, + [0x10141]={d="on"}, + [0x10142]={d="on"}, + [0x10143]={d="on"}, + [0x10144]={d="on"}, + [0x10145]={d="on"}, + [0x10146]={d="on"}, + [0x10147]={d="on"}, + [0x10148]={d="on"}, + [0x10149]={d="on"}, + [0x1014A]={d="on"}, + [0x1014B]={d="on"}, + [0x1014C]={d="on"}, + [0x1014D]={d="on"}, + [0x1014E]={d="on"}, + [0x1014F]={d="on"}, + [0x10150]={d="on"}, + [0x10151]={d="on"}, + [0x10152]={d="on"}, + [0x10153]={d="on"}, + [0x10154]={d="on"}, + [0x10155]={d="on"}, + [0x10156]={d="on"}, + [0x10157]={d="on"}, + [0x10158]={d="on"}, + [0x10159]={d="on"}, + [0x1015A]={d="on"}, + [0x1015B]={d="on"}, + [0x1015C]={d="on"}, + [0x1015D]={d="on"}, + [0x1015E]={d="on"}, + [0x1015F]={d="on"}, + [0x10160]={d="on"}, + [0x10161]={d="on"}, + [0x10162]={d="on"}, + [0x10163]={d="on"}, + [0x10164]={d="on"}, + [0x10165]={d="on"}, + [0x10166]={d="on"}, + [0x10167]={d="on"}, + [0x10168]={d="on"}, + [0x10169]={d="on"}, + [0x1016A]={d="on"}, + [0x1016B]={d="on"}, + [0x1016C]={d="on"}, + [0x1016D]={d="on"}, + [0x1016E]={d="on"}, + [0x1016F]={d="on"}, + [0x10170]={d="on"}, + [0x10171]={d="on"}, + [0x10172]={d="on"}, + [0x10173]={d="on"}, + [0x10174]={d="on"}, + [0x10175]={d="on"}, + [0x10176]={d="on"}, + [0x10177]={d="on"}, + [0x10178]={d="on"}, + [0x10179]={d="on"}, + [0x1017A]={d="on"}, + [0x1017B]={d="on"}, + [0x1017C]={d="on"}, + [0x1017D]={d="on"}, + [0x1017E]={d="on"}, + [0x1017F]={d="on"}, + [0x10180]={d="on"}, + [0x10181]={d="on"}, + [0x10182]={d="on"}, + [0x10183]={d="on"}, + [0x10184]={d="on"}, + [0x10185]={d="on"}, + [0x10186]={d="on"}, + [0x10187]={d="on"}, + [0x10188]={d="on"}, + [0x10189]={d="on"}, + [0x1018A]={d="on"}, + [0x1018B]={d="on"}, + [0x1018C]={d="on"}, + [0x1018D]={d="l"}, + [0x1018E]={d="l"}, + [0x10190]={d="on"}, + [0x10191]={d="on"}, + [0x10192]={d="on"}, + [0x10193]={d="on"}, + [0x10194]={d="on"}, + [0x10195]={d="on"}, + [0x10196]={d="on"}, + [0x10197]={d="on"}, + [0x10198]={d="on"}, + [0x10199]={d="on"}, + [0x1019A]={d="on"}, + [0x1019B]={d="on"}, + [0x1019C]={d="on"}, + [0x101A0]={d="on"}, + [0x101D0]={d="l"}, + [0x101D1]={d="l"}, + [0x101D2]={d="l"}, + [0x101D3]={d="l"}, + [0x101D4]={d="l"}, + [0x101D5]={d="l"}, + [0x101D6]={d="l"}, + [0x101D7]={d="l"}, + [0x101D8]={d="l"}, + [0x101D9]={d="l"}, + [0x101DA]={d="l"}, + [0x101DB]={d="l"}, + [0x101DC]={d="l"}, + [0x101DD]={d="l"}, + [0x101DE]={d="l"}, + [0x101DF]={d="l"}, + [0x101E0]={d="l"}, + [0x101E1]={d="l"}, + [0x101E2]={d="l"}, + [0x101E3]={d="l"}, + [0x101E4]={d="l"}, + [0x101E5]={d="l"}, + [0x101E6]={d="l"}, + [0x101E7]={d="l"}, + [0x101E8]={d="l"}, + [0x101E9]={d="l"}, + [0x101EA]={d="l"}, + [0x101EB]={d="l"}, + [0x101EC]={d="l"}, + [0x101ED]={d="l"}, + [0x101EE]={d="l"}, + [0x101EF]={d="l"}, + [0x101F0]={d="l"}, + [0x101F1]={d="l"}, + [0x101F2]={d="l"}, + [0x101F3]={d="l"}, + [0x101F4]={d="l"}, + [0x101F5]={d="l"}, + [0x101F6]={d="l"}, + [0x101F7]={d="l"}, + [0x101F8]={d="l"}, + [0x101F9]={d="l"}, + [0x101FA]={d="l"}, + [0x101FB]={d="l"}, + [0x101FC]={d="l"}, + [0x101FD]={d="nsm"}, + [0x10280]={d="l"}, + [0x10281]={d="l"}, + [0x10282]={d="l"}, + [0x10283]={d="l"}, + [0x10284]={d="l"}, + [0x10285]={d="l"}, + [0x10286]={d="l"}, + [0x10287]={d="l"}, + [0x10288]={d="l"}, + [0x10289]={d="l"}, + [0x1028A]={d="l"}, + [0x1028B]={d="l"}, + [0x1028C]={d="l"}, + [0x1028D]={d="l"}, + [0x1028E]={d="l"}, + [0x1028F]={d="l"}, + [0x10290]={d="l"}, + [0x10291]={d="l"}, + [0x10292]={d="l"}, + [0x10293]={d="l"}, + [0x10294]={d="l"}, + [0x10295]={d="l"}, + [0x10296]={d="l"}, + [0x10297]={d="l"}, + [0x10298]={d="l"}, + [0x10299]={d="l"}, + [0x1029A]={d="l"}, + [0x1029B]={d="l"}, + [0x1029C]={d="l"}, + [0x102A0]={d="l"}, + [0x102A1]={d="l"}, + [0x102A2]={d="l"}, + [0x102A3]={d="l"}, + [0x102A4]={d="l"}, + [0x102A5]={d="l"}, + [0x102A6]={d="l"}, + [0x102A7]={d="l"}, + [0x102A8]={d="l"}, + [0x102A9]={d="l"}, + [0x102AA]={d="l"}, + [0x102AB]={d="l"}, + [0x102AC]={d="l"}, + [0x102AD]={d="l"}, + [0x102AE]={d="l"}, + [0x102AF]={d="l"}, + [0x102B0]={d="l"}, + [0x102B1]={d="l"}, + [0x102B2]={d="l"}, + [0x102B3]={d="l"}, + [0x102B4]={d="l"}, + [0x102B5]={d="l"}, + [0x102B6]={d="l"}, + [0x102B7]={d="l"}, + [0x102B8]={d="l"}, + [0x102B9]={d="l"}, + [0x102BA]={d="l"}, + [0x102BB]={d="l"}, + [0x102BC]={d="l"}, + [0x102BD]={d="l"}, + [0x102BE]={d="l"}, + [0x102BF]={d="l"}, + [0x102C0]={d="l"}, + [0x102C1]={d="l"}, + [0x102C2]={d="l"}, + [0x102C3]={d="l"}, + [0x102C4]={d="l"}, + [0x102C5]={d="l"}, + [0x102C6]={d="l"}, + [0x102C7]={d="l"}, + [0x102C8]={d="l"}, + [0x102C9]={d="l"}, + [0x102CA]={d="l"}, + [0x102CB]={d="l"}, + [0x102CC]={d="l"}, + [0x102CD]={d="l"}, + [0x102CE]={d="l"}, + [0x102CF]={d="l"}, + [0x102D0]={d="l"}, + [0x102E0]={d="nsm"}, + [0x102E1]={d="en"}, + [0x102E2]={d="en"}, + [0x102E3]={d="en"}, + [0x102E4]={d="en"}, + [0x102E5]={d="en"}, + [0x102E6]={d="en"}, + [0x102E7]={d="en"}, + [0x102E8]={d="en"}, + [0x102E9]={d="en"}, + [0x102EA]={d="en"}, + [0x102EB]={d="en"}, + [0x102EC]={d="en"}, + [0x102ED]={d="en"}, + [0x102EE]={d="en"}, + [0x102EF]={d="en"}, + [0x102F0]={d="en"}, + [0x102F1]={d="en"}, + [0x102F2]={d="en"}, + [0x102F3]={d="en"}, + [0x102F4]={d="en"}, + [0x102F5]={d="en"}, + [0x102F6]={d="en"}, + [0x102F7]={d="en"}, + [0x102F8]={d="en"}, + [0x102F9]={d="en"}, + [0x102FA]={d="en"}, + [0x102FB]={d="en"}, + [0x10300]={d="l"}, + [0x10301]={d="l"}, + [0x10302]={d="l"}, + [0x10303]={d="l"}, + [0x10304]={d="l"}, + [0x10305]={d="l"}, + [0x10306]={d="l"}, + [0x10307]={d="l"}, + [0x10308]={d="l"}, + [0x10309]={d="l"}, + [0x1030A]={d="l"}, + [0x1030B]={d="l"}, + [0x1030C]={d="l"}, + [0x1030D]={d="l"}, + [0x1030E]={d="l"}, + [0x1030F]={d="l"}, + [0x10310]={d="l"}, + [0x10311]={d="l"}, + [0x10312]={d="l"}, + [0x10313]={d="l"}, + [0x10314]={d="l"}, + [0x10315]={d="l"}, + [0x10316]={d="l"}, + [0x10317]={d="l"}, + [0x10318]={d="l"}, + [0x10319]={d="l"}, + [0x1031A]={d="l"}, + [0x1031B]={d="l"}, + [0x1031C]={d="l"}, + [0x1031D]={d="l"}, + [0x1031E]={d="l"}, + [0x1031F]={d="l"}, + [0x10320]={d="l"}, + [0x10321]={d="l"}, + [0x10322]={d="l"}, + [0x10323]={d="l"}, + [0x1032D]={d="l"}, + [0x1032E]={d="l"}, + [0x1032F]={d="l"}, + [0x10330]={d="l"}, + [0x10331]={d="l"}, + [0x10332]={d="l"}, + [0x10333]={d="l"}, + [0x10334]={d="l"}, + [0x10335]={d="l"}, + [0x10336]={d="l"}, + [0x10337]={d="l"}, + [0x10338]={d="l"}, + [0x10339]={d="l"}, + [0x1033A]={d="l"}, + [0x1033B]={d="l"}, + [0x1033C]={d="l"}, + [0x1033D]={d="l"}, + [0x1033E]={d="l"}, + [0x1033F]={d="l"}, + [0x10340]={d="l"}, + [0x10341]={d="l"}, + [0x10342]={d="l"}, + [0x10343]={d="l"}, + [0x10344]={d="l"}, + [0x10345]={d="l"}, + [0x10346]={d="l"}, + [0x10347]={d="l"}, + [0x10348]={d="l"}, + [0x10349]={d="l"}, + [0x1034A]={d="l"}, + [0x10350]={d="l"}, + [0x10351]={d="l"}, + [0x10352]={d="l"}, + [0x10353]={d="l"}, + [0x10354]={d="l"}, + [0x10355]={d="l"}, + [0x10356]={d="l"}, + [0x10357]={d="l"}, + [0x10358]={d="l"}, + [0x10359]={d="l"}, + [0x1035A]={d="l"}, + [0x1035B]={d="l"}, + [0x1035C]={d="l"}, + [0x1035D]={d="l"}, + [0x1035E]={d="l"}, + [0x1035F]={d="l"}, + [0x10360]={d="l"}, + [0x10361]={d="l"}, + [0x10362]={d="l"}, + [0x10363]={d="l"}, + [0x10364]={d="l"}, + [0x10365]={d="l"}, + [0x10366]={d="l"}, + [0x10367]={d="l"}, + [0x10368]={d="l"}, + [0x10369]={d="l"}, + [0x1036A]={d="l"}, + [0x1036B]={d="l"}, + [0x1036C]={d="l"}, + [0x1036D]={d="l"}, + [0x1036E]={d="l"}, + [0x1036F]={d="l"}, + [0x10370]={d="l"}, + [0x10371]={d="l"}, + [0x10372]={d="l"}, + [0x10373]={d="l"}, + [0x10374]={d="l"}, + [0x10375]={d="l"}, + [0x10376]={d="nsm"}, + [0x10377]={d="nsm"}, + [0x10378]={d="nsm"}, + [0x10379]={d="nsm"}, + [0x1037A]={d="nsm"}, + [0x10380]={d="l"}, + [0x10381]={d="l"}, + [0x10382]={d="l"}, + [0x10383]={d="l"}, + [0x10384]={d="l"}, + [0x10385]={d="l"}, + [0x10386]={d="l"}, + [0x10387]={d="l"}, + [0x10388]={d="l"}, + [0x10389]={d="l"}, + [0x1038A]={d="l"}, + [0x1038B]={d="l"}, + [0x1038C]={d="l"}, + [0x1038D]={d="l"}, + [0x1038E]={d="l"}, + [0x1038F]={d="l"}, + [0x10390]={d="l"}, + [0x10391]={d="l"}, + [0x10392]={d="l"}, + [0x10393]={d="l"}, + [0x10394]={d="l"}, + [0x10395]={d="l"}, + [0x10396]={d="l"}, + [0x10397]={d="l"}, + [0x10398]={d="l"}, + [0x10399]={d="l"}, + [0x1039A]={d="l"}, + [0x1039B]={d="l"}, + [0x1039C]={d="l"}, + [0x1039D]={d="l"}, + [0x1039F]={d="l"}, + [0x103A0]={d="l"}, + [0x103A1]={d="l"}, + [0x103A2]={d="l"}, + [0x103A3]={d="l"}, + [0x103A4]={d="l"}, + [0x103A5]={d="l"}, + [0x103A6]={d="l"}, + [0x103A7]={d="l"}, + [0x103A8]={d="l"}, + [0x103A9]={d="l"}, + [0x103AA]={d="l"}, + [0x103AB]={d="l"}, + [0x103AC]={d="l"}, + [0x103AD]={d="l"}, + [0x103AE]={d="l"}, + [0x103AF]={d="l"}, + [0x103B0]={d="l"}, + [0x103B1]={d="l"}, + [0x103B2]={d="l"}, + [0x103B3]={d="l"}, + [0x103B4]={d="l"}, + [0x103B5]={d="l"}, + [0x103B6]={d="l"}, + [0x103B7]={d="l"}, + [0x103B8]={d="l"}, + [0x103B9]={d="l"}, + [0x103BA]={d="l"}, + [0x103BB]={d="l"}, + [0x103BC]={d="l"}, + [0x103BD]={d="l"}, + [0x103BE]={d="l"}, + [0x103BF]={d="l"}, + [0x103C0]={d="l"}, + [0x103C1]={d="l"}, + [0x103C2]={d="l"}, + [0x103C3]={d="l"}, + [0x103C8]={d="l"}, + [0x103C9]={d="l"}, + [0x103CA]={d="l"}, + [0x103CB]={d="l"}, + [0x103CC]={d="l"}, + [0x103CD]={d="l"}, + [0x103CE]={d="l"}, + [0x103CF]={d="l"}, + [0x103D0]={d="l"}, + [0x103D1]={d="l"}, + [0x103D2]={d="l"}, + [0x103D3]={d="l"}, + [0x103D4]={d="l"}, + [0x103D5]={d="l"}, + [0x10400]={d="l"}, + [0x10401]={d="l"}, + [0x10402]={d="l"}, + [0x10403]={d="l"}, + [0x10404]={d="l"}, + [0x10405]={d="l"}, + [0x10406]={d="l"}, + [0x10407]={d="l"}, + [0x10408]={d="l"}, + [0x10409]={d="l"}, + [0x1040A]={d="l"}, + [0x1040B]={d="l"}, + [0x1040C]={d="l"}, + [0x1040D]={d="l"}, + [0x1040E]={d="l"}, + [0x1040F]={d="l"}, + [0x10410]={d="l"}, + [0x10411]={d="l"}, + [0x10412]={d="l"}, + [0x10413]={d="l"}, + [0x10414]={d="l"}, + [0x10415]={d="l"}, + [0x10416]={d="l"}, + [0x10417]={d="l"}, + [0x10418]={d="l"}, + [0x10419]={d="l"}, + [0x1041A]={d="l"}, + [0x1041B]={d="l"}, + [0x1041C]={d="l"}, + [0x1041D]={d="l"}, + [0x1041E]={d="l"}, + [0x1041F]={d="l"}, + [0x10420]={d="l"}, + [0x10421]={d="l"}, + [0x10422]={d="l"}, + [0x10423]={d="l"}, + [0x10424]={d="l"}, + [0x10425]={d="l"}, + [0x10426]={d="l"}, + [0x10427]={d="l"}, + [0x10428]={d="l"}, + [0x10429]={d="l"}, + [0x1042A]={d="l"}, + [0x1042B]={d="l"}, + [0x1042C]={d="l"}, + [0x1042D]={d="l"}, + [0x1042E]={d="l"}, + [0x1042F]={d="l"}, + [0x10430]={d="l"}, + [0x10431]={d="l"}, + [0x10432]={d="l"}, + [0x10433]={d="l"}, + [0x10434]={d="l"}, + [0x10435]={d="l"}, + [0x10436]={d="l"}, + [0x10437]={d="l"}, + [0x10438]={d="l"}, + [0x10439]={d="l"}, + [0x1043A]={d="l"}, + [0x1043B]={d="l"}, + [0x1043C]={d="l"}, + [0x1043D]={d="l"}, + [0x1043E]={d="l"}, + [0x1043F]={d="l"}, + [0x10440]={d="l"}, + [0x10441]={d="l"}, + [0x10442]={d="l"}, + [0x10443]={d="l"}, + [0x10444]={d="l"}, + [0x10445]={d="l"}, + [0x10446]={d="l"}, + [0x10447]={d="l"}, + [0x10448]={d="l"}, + [0x10449]={d="l"}, + [0x1044A]={d="l"}, + [0x1044B]={d="l"}, + [0x1044C]={d="l"}, + [0x1044D]={d="l"}, + [0x1044E]={d="l"}, + [0x1044F]={d="l"}, + [0x10450]={d="l"}, + [0x10451]={d="l"}, + [0x10452]={d="l"}, + [0x10453]={d="l"}, + [0x10454]={d="l"}, + [0x10455]={d="l"}, + [0x10456]={d="l"}, + [0x10457]={d="l"}, + [0x10458]={d="l"}, + [0x10459]={d="l"}, + [0x1045A]={d="l"}, + [0x1045B]={d="l"}, + [0x1045C]={d="l"}, + [0x1045D]={d="l"}, + [0x1045E]={d="l"}, + [0x1045F]={d="l"}, + [0x10460]={d="l"}, + [0x10461]={d="l"}, + [0x10462]={d="l"}, + [0x10463]={d="l"}, + [0x10464]={d="l"}, + [0x10465]={d="l"}, + [0x10466]={d="l"}, + [0x10467]={d="l"}, + [0x10468]={d="l"}, + [0x10469]={d="l"}, + [0x1046A]={d="l"}, + [0x1046B]={d="l"}, + [0x1046C]={d="l"}, + [0x1046D]={d="l"}, + [0x1046E]={d="l"}, + [0x1046F]={d="l"}, + [0x10470]={d="l"}, + [0x10471]={d="l"}, + [0x10472]={d="l"}, + [0x10473]={d="l"}, + [0x10474]={d="l"}, + [0x10475]={d="l"}, + [0x10476]={d="l"}, + [0x10477]={d="l"}, + [0x10478]={d="l"}, + [0x10479]={d="l"}, + [0x1047A]={d="l"}, + [0x1047B]={d="l"}, + [0x1047C]={d="l"}, + [0x1047D]={d="l"}, + [0x1047E]={d="l"}, + [0x1047F]={d="l"}, + [0x10480]={d="l"}, + [0x10481]={d="l"}, + [0x10482]={d="l"}, + [0x10483]={d="l"}, + [0x10484]={d="l"}, + [0x10485]={d="l"}, + [0x10486]={d="l"}, + [0x10487]={d="l"}, + [0x10488]={d="l"}, + [0x10489]={d="l"}, + [0x1048A]={d="l"}, + [0x1048B]={d="l"}, + [0x1048C]={d="l"}, + [0x1048D]={d="l"}, + [0x1048E]={d="l"}, + [0x1048F]={d="l"}, + [0x10490]={d="l"}, + [0x10491]={d="l"}, + [0x10492]={d="l"}, + [0x10493]={d="l"}, + [0x10494]={d="l"}, + [0x10495]={d="l"}, + [0x10496]={d="l"}, + [0x10497]={d="l"}, + [0x10498]={d="l"}, + [0x10499]={d="l"}, + [0x1049A]={d="l"}, + [0x1049B]={d="l"}, + [0x1049C]={d="l"}, + [0x1049D]={d="l"}, + [0x104A0]={d="l"}, + [0x104A1]={d="l"}, + [0x104A2]={d="l"}, + [0x104A3]={d="l"}, + [0x104A4]={d="l"}, + [0x104A5]={d="l"}, + [0x104A6]={d="l"}, + [0x104A7]={d="l"}, + [0x104A8]={d="l"}, + [0x104A9]={d="l"}, + [0x104B0]={d="l"}, + [0x104B1]={d="l"}, + [0x104B2]={d="l"}, + [0x104B3]={d="l"}, + [0x104B4]={d="l"}, + [0x104B5]={d="l"}, + [0x104B6]={d="l"}, + [0x104B7]={d="l"}, + [0x104B8]={d="l"}, + [0x104B9]={d="l"}, + [0x104BA]={d="l"}, + [0x104BB]={d="l"}, + [0x104BC]={d="l"}, + [0x104BD]={d="l"}, + [0x104BE]={d="l"}, + [0x104BF]={d="l"}, + [0x104C0]={d="l"}, + [0x104C1]={d="l"}, + [0x104C2]={d="l"}, + [0x104C3]={d="l"}, + [0x104C4]={d="l"}, + [0x104C5]={d="l"}, + [0x104C6]={d="l"}, + [0x104C7]={d="l"}, + [0x104C8]={d="l"}, + [0x104C9]={d="l"}, + [0x104CA]={d="l"}, + [0x104CB]={d="l"}, + [0x104CC]={d="l"}, + [0x104CD]={d="l"}, + [0x104CE]={d="l"}, + [0x104CF]={d="l"}, + [0x104D0]={d="l"}, + [0x104D1]={d="l"}, + [0x104D2]={d="l"}, + [0x104D3]={d="l"}, + [0x104D8]={d="l"}, + [0x104D9]={d="l"}, + [0x104DA]={d="l"}, + [0x104DB]={d="l"}, + [0x104DC]={d="l"}, + [0x104DD]={d="l"}, + [0x104DE]={d="l"}, + [0x104DF]={d="l"}, + [0x104E0]={d="l"}, + [0x104E1]={d="l"}, + [0x104E2]={d="l"}, + [0x104E3]={d="l"}, + [0x104E4]={d="l"}, + [0x104E5]={d="l"}, + [0x104E6]={d="l"}, + [0x104E7]={d="l"}, + [0x104E8]={d="l"}, + [0x104E9]={d="l"}, + [0x104EA]={d="l"}, + [0x104EB]={d="l"}, + [0x104EC]={d="l"}, + [0x104ED]={d="l"}, + [0x104EE]={d="l"}, + [0x104EF]={d="l"}, + [0x104F0]={d="l"}, + [0x104F1]={d="l"}, + [0x104F2]={d="l"}, + [0x104F3]={d="l"}, + [0x104F4]={d="l"}, + [0x104F5]={d="l"}, + [0x104F6]={d="l"}, + [0x104F7]={d="l"}, + [0x104F8]={d="l"}, + [0x104F9]={d="l"}, + [0x104FA]={d="l"}, + [0x104FB]={d="l"}, + [0x10500]={d="l"}, + [0x10501]={d="l"}, + [0x10502]={d="l"}, + [0x10503]={d="l"}, + [0x10504]={d="l"}, + [0x10505]={d="l"}, + [0x10506]={d="l"}, + [0x10507]={d="l"}, + [0x10508]={d="l"}, + [0x10509]={d="l"}, + [0x1050A]={d="l"}, + [0x1050B]={d="l"}, + [0x1050C]={d="l"}, + [0x1050D]={d="l"}, + [0x1050E]={d="l"}, + [0x1050F]={d="l"}, + [0x10510]={d="l"}, + [0x10511]={d="l"}, + [0x10512]={d="l"}, + [0x10513]={d="l"}, + [0x10514]={d="l"}, + [0x10515]={d="l"}, + [0x10516]={d="l"}, + [0x10517]={d="l"}, + [0x10518]={d="l"}, + [0x10519]={d="l"}, + [0x1051A]={d="l"}, + [0x1051B]={d="l"}, + [0x1051C]={d="l"}, + [0x1051D]={d="l"}, + [0x1051E]={d="l"}, + [0x1051F]={d="l"}, + [0x10520]={d="l"}, + [0x10521]={d="l"}, + [0x10522]={d="l"}, + [0x10523]={d="l"}, + [0x10524]={d="l"}, + [0x10525]={d="l"}, + [0x10526]={d="l"}, + [0x10527]={d="l"}, + [0x10530]={d="l"}, + [0x10531]={d="l"}, + [0x10532]={d="l"}, + [0x10533]={d="l"}, + [0x10534]={d="l"}, + [0x10535]={d="l"}, + [0x10536]={d="l"}, + [0x10537]={d="l"}, + [0x10538]={d="l"}, + [0x10539]={d="l"}, + [0x1053A]={d="l"}, + [0x1053B]={d="l"}, + [0x1053C]={d="l"}, + [0x1053D]={d="l"}, + [0x1053E]={d="l"}, + [0x1053F]={d="l"}, + [0x10540]={d="l"}, + [0x10541]={d="l"}, + [0x10542]={d="l"}, + [0x10543]={d="l"}, + [0x10544]={d="l"}, + [0x10545]={d="l"}, + [0x10546]={d="l"}, + [0x10547]={d="l"}, + [0x10548]={d="l"}, + [0x10549]={d="l"}, + [0x1054A]={d="l"}, + [0x1054B]={d="l"}, + [0x1054C]={d="l"}, + [0x1054D]={d="l"}, + [0x1054E]={d="l"}, + [0x1054F]={d="l"}, + [0x10550]={d="l"}, + [0x10551]={d="l"}, + [0x10552]={d="l"}, + [0x10553]={d="l"}, + [0x10554]={d="l"}, + [0x10555]={d="l"}, + [0x10556]={d="l"}, + [0x10557]={d="l"}, + [0x10558]={d="l"}, + [0x10559]={d="l"}, + [0x1055A]={d="l"}, + [0x1055B]={d="l"}, + [0x1055C]={d="l"}, + [0x1055D]={d="l"}, + [0x1055E]={d="l"}, + [0x1055F]={d="l"}, + [0x10560]={d="l"}, + [0x10561]={d="l"}, + [0x10562]={d="l"}, + [0x10563]={d="l"}, + [0x1056F]={d="l"}, + [0x10570]={d="l"}, + [0x10571]={d="l"}, + [0x10572]={d="l"}, + [0x10573]={d="l"}, + [0x10574]={d="l"}, + [0x10575]={d="l"}, + [0x10576]={d="l"}, + [0x10577]={d="l"}, + [0x10578]={d="l"}, + [0x10579]={d="l"}, + [0x1057A]={d="l"}, + [0x1057C]={d="l"}, + [0x1057D]={d="l"}, + [0x1057E]={d="l"}, + [0x1057F]={d="l"}, + [0x10580]={d="l"}, + [0x10581]={d="l"}, + [0x10582]={d="l"}, + [0x10583]={d="l"}, + [0x10584]={d="l"}, + [0x10585]={d="l"}, + [0x10586]={d="l"}, + [0x10587]={d="l"}, + [0x10588]={d="l"}, + [0x10589]={d="l"}, + [0x1058A]={d="l"}, + [0x1058C]={d="l"}, + [0x1058D]={d="l"}, + [0x1058E]={d="l"}, + [0x1058F]={d="l"}, + [0x10590]={d="l"}, + [0x10591]={d="l"}, + [0x10592]={d="l"}, + [0x10594]={d="l"}, + [0x10595]={d="l"}, + [0x10597]={d="l"}, + [0x10598]={d="l"}, + [0x10599]={d="l"}, + [0x1059A]={d="l"}, + [0x1059B]={d="l"}, + [0x1059C]={d="l"}, + [0x1059D]={d="l"}, + [0x1059E]={d="l"}, + [0x1059F]={d="l"}, + [0x105A0]={d="l"}, + [0x105A1]={d="l"}, + [0x105A3]={d="l"}, + [0x105A4]={d="l"}, + [0x105A5]={d="l"}, + [0x105A6]={d="l"}, + [0x105A7]={d="l"}, + [0x105A8]={d="l"}, + [0x105A9]={d="l"}, + [0x105AA]={d="l"}, + [0x105AB]={d="l"}, + [0x105AC]={d="l"}, + [0x105AD]={d="l"}, + [0x105AE]={d="l"}, + [0x105AF]={d="l"}, + [0x105B0]={d="l"}, + [0x105B1]={d="l"}, + [0x105B3]={d="l"}, + [0x105B4]={d="l"}, + [0x105B5]={d="l"}, + [0x105B6]={d="l"}, + [0x105B7]={d="l"}, + [0x105B8]={d="l"}, + [0x105B9]={d="l"}, + [0x105BB]={d="l"}, + [0x105BC]={d="l"}, + [0x10600]={d="l"}, + [0x10601]={d="l"}, + [0x10602]={d="l"}, + [0x10603]={d="l"}, + [0x10604]={d="l"}, + [0x10605]={d="l"}, + [0x10606]={d="l"}, + [0x10607]={d="l"}, + [0x10608]={d="l"}, + [0x10609]={d="l"}, + [0x1060A]={d="l"}, + [0x1060B]={d="l"}, + [0x1060C]={d="l"}, + [0x1060D]={d="l"}, + [0x1060E]={d="l"}, + [0x1060F]={d="l"}, + [0x10610]={d="l"}, + [0x10611]={d="l"}, + [0x10612]={d="l"}, + [0x10613]={d="l"}, + [0x10614]={d="l"}, + [0x10615]={d="l"}, + [0x10616]={d="l"}, + [0x10617]={d="l"}, + [0x10618]={d="l"}, + [0x10619]={d="l"}, + [0x1061A]={d="l"}, + [0x1061B]={d="l"}, + [0x1061C]={d="l"}, + [0x1061D]={d="l"}, + [0x1061E]={d="l"}, + [0x1061F]={d="l"}, + [0x10620]={d="l"}, + [0x10621]={d="l"}, + [0x10622]={d="l"}, + [0x10623]={d="l"}, + [0x10624]={d="l"}, + [0x10625]={d="l"}, + [0x10626]={d="l"}, + [0x10627]={d="l"}, + [0x10628]={d="l"}, + [0x10629]={d="l"}, + [0x1062A]={d="l"}, + [0x1062B]={d="l"}, + [0x1062C]={d="l"}, + [0x1062D]={d="l"}, + [0x1062E]={d="l"}, + [0x1062F]={d="l"}, + [0x10630]={d="l"}, + [0x10631]={d="l"}, + [0x10632]={d="l"}, + [0x10633]={d="l"}, + [0x10634]={d="l"}, + [0x10635]={d="l"}, + [0x10636]={d="l"}, + [0x10637]={d="l"}, + [0x10638]={d="l"}, + [0x10639]={d="l"}, + [0x1063A]={d="l"}, + [0x1063B]={d="l"}, + [0x1063C]={d="l"}, + [0x1063D]={d="l"}, + [0x1063E]={d="l"}, + [0x1063F]={d="l"}, + [0x10640]={d="l"}, + [0x10641]={d="l"}, + [0x10642]={d="l"}, + [0x10643]={d="l"}, + [0x10644]={d="l"}, + [0x10645]={d="l"}, + [0x10646]={d="l"}, + [0x10647]={d="l"}, + [0x10648]={d="l"}, + [0x10649]={d="l"}, + [0x1064A]={d="l"}, + [0x1064B]={d="l"}, + [0x1064C]={d="l"}, + [0x1064D]={d="l"}, + [0x1064E]={d="l"}, + [0x1064F]={d="l"}, + [0x10650]={d="l"}, + [0x10651]={d="l"}, + [0x10652]={d="l"}, + [0x10653]={d="l"}, + [0x10654]={d="l"}, + [0x10655]={d="l"}, + [0x10656]={d="l"}, + [0x10657]={d="l"}, + [0x10658]={d="l"}, + [0x10659]={d="l"}, + [0x1065A]={d="l"}, + [0x1065B]={d="l"}, + [0x1065C]={d="l"}, + [0x1065D]={d="l"}, + [0x1065E]={d="l"}, + [0x1065F]={d="l"}, + [0x10660]={d="l"}, + [0x10661]={d="l"}, + [0x10662]={d="l"}, + [0x10663]={d="l"}, + [0x10664]={d="l"}, + [0x10665]={d="l"}, + [0x10666]={d="l"}, + [0x10667]={d="l"}, + [0x10668]={d="l"}, + [0x10669]={d="l"}, + [0x1066A]={d="l"}, + [0x1066B]={d="l"}, + [0x1066C]={d="l"}, + [0x1066D]={d="l"}, + [0x1066E]={d="l"}, + [0x1066F]={d="l"}, + [0x10670]={d="l"}, + [0x10671]={d="l"}, + [0x10672]={d="l"}, + [0x10673]={d="l"}, + [0x10674]={d="l"}, + [0x10675]={d="l"}, + [0x10676]={d="l"}, + [0x10677]={d="l"}, + [0x10678]={d="l"}, + [0x10679]={d="l"}, + [0x1067A]={d="l"}, + [0x1067B]={d="l"}, + [0x1067C]={d="l"}, + [0x1067D]={d="l"}, + [0x1067E]={d="l"}, + [0x1067F]={d="l"}, + [0x10680]={d="l"}, + [0x10681]={d="l"}, + [0x10682]={d="l"}, + [0x10683]={d="l"}, + [0x10684]={d="l"}, + [0x10685]={d="l"}, + [0x10686]={d="l"}, + [0x10687]={d="l"}, + [0x10688]={d="l"}, + [0x10689]={d="l"}, + [0x1068A]={d="l"}, + [0x1068B]={d="l"}, + [0x1068C]={d="l"}, + [0x1068D]={d="l"}, + [0x1068E]={d="l"}, + [0x1068F]={d="l"}, + [0x10690]={d="l"}, + [0x10691]={d="l"}, + [0x10692]={d="l"}, + [0x10693]={d="l"}, + [0x10694]={d="l"}, + [0x10695]={d="l"}, + [0x10696]={d="l"}, + [0x10697]={d="l"}, + [0x10698]={d="l"}, + [0x10699]={d="l"}, + [0x1069A]={d="l"}, + [0x1069B]={d="l"}, + [0x1069C]={d="l"}, + [0x1069D]={d="l"}, + [0x1069E]={d="l"}, + [0x1069F]={d="l"}, + [0x106A0]={d="l"}, + [0x106A1]={d="l"}, + [0x106A2]={d="l"}, + [0x106A3]={d="l"}, + [0x106A4]={d="l"}, + [0x106A5]={d="l"}, + [0x106A6]={d="l"}, + [0x106A7]={d="l"}, + [0x106A8]={d="l"}, + [0x106A9]={d="l"}, + [0x106AA]={d="l"}, + [0x106AB]={d="l"}, + [0x106AC]={d="l"}, + [0x106AD]={d="l"}, + [0x106AE]={d="l"}, + [0x106AF]={d="l"}, + [0x106B0]={d="l"}, + [0x106B1]={d="l"}, + [0x106B2]={d="l"}, + [0x106B3]={d="l"}, + [0x106B4]={d="l"}, + [0x106B5]={d="l"}, + [0x106B6]={d="l"}, + [0x106B7]={d="l"}, + [0x106B8]={d="l"}, + [0x106B9]={d="l"}, + [0x106BA]={d="l"}, + [0x106BB]={d="l"}, + [0x106BC]={d="l"}, + [0x106BD]={d="l"}, + [0x106BE]={d="l"}, + [0x106BF]={d="l"}, + [0x106C0]={d="l"}, + [0x106C1]={d="l"}, + [0x106C2]={d="l"}, + [0x106C3]={d="l"}, + [0x106C4]={d="l"}, + [0x106C5]={d="l"}, + [0x106C6]={d="l"}, + [0x106C7]={d="l"}, + [0x106C8]={d="l"}, + [0x106C9]={d="l"}, + [0x106CA]={d="l"}, + [0x106CB]={d="l"}, + [0x106CC]={d="l"}, + [0x106CD]={d="l"}, + [0x106CE]={d="l"}, + [0x106CF]={d="l"}, + [0x106D0]={d="l"}, + [0x106D1]={d="l"}, + [0x106D2]={d="l"}, + [0x106D3]={d="l"}, + [0x106D4]={d="l"}, + [0x106D5]={d="l"}, + [0x106D6]={d="l"}, + [0x106D7]={d="l"}, + [0x106D8]={d="l"}, + [0x106D9]={d="l"}, + [0x106DA]={d="l"}, + [0x106DB]={d="l"}, + [0x106DC]={d="l"}, + [0x106DD]={d="l"}, + [0x106DE]={d="l"}, + [0x106DF]={d="l"}, + [0x106E0]={d="l"}, + [0x106E1]={d="l"}, + [0x106E2]={d="l"}, + [0x106E3]={d="l"}, + [0x106E4]={d="l"}, + [0x106E5]={d="l"}, + [0x106E6]={d="l"}, + [0x106E7]={d="l"}, + [0x106E8]={d="l"}, + [0x106E9]={d="l"}, + [0x106EA]={d="l"}, + [0x106EB]={d="l"}, + [0x106EC]={d="l"}, + [0x106ED]={d="l"}, + [0x106EE]={d="l"}, + [0x106EF]={d="l"}, + [0x106F0]={d="l"}, + [0x106F1]={d="l"}, + [0x106F2]={d="l"}, + [0x106F3]={d="l"}, + [0x106F4]={d="l"}, + [0x106F5]={d="l"}, + [0x106F6]={d="l"}, + [0x106F7]={d="l"}, + [0x106F8]={d="l"}, + [0x106F9]={d="l"}, + [0x106FA]={d="l"}, + [0x106FB]={d="l"}, + [0x106FC]={d="l"}, + [0x106FD]={d="l"}, + [0x106FE]={d="l"}, + [0x106FF]={d="l"}, + [0x10700]={d="l"}, + [0x10701]={d="l"}, + [0x10702]={d="l"}, + [0x10703]={d="l"}, + [0x10704]={d="l"}, + [0x10705]={d="l"}, + [0x10706]={d="l"}, + [0x10707]={d="l"}, + [0x10708]={d="l"}, + [0x10709]={d="l"}, + [0x1070A]={d="l"}, + [0x1070B]={d="l"}, + [0x1070C]={d="l"}, + [0x1070D]={d="l"}, + [0x1070E]={d="l"}, + [0x1070F]={d="l"}, + [0x10710]={d="l"}, + [0x10711]={d="l"}, + [0x10712]={d="l"}, + [0x10713]={d="l"}, + [0x10714]={d="l"}, + [0x10715]={d="l"}, + [0x10716]={d="l"}, + [0x10717]={d="l"}, + [0x10718]={d="l"}, + [0x10719]={d="l"}, + [0x1071A]={d="l"}, + [0x1071B]={d="l"}, + [0x1071C]={d="l"}, + [0x1071D]={d="l"}, + [0x1071E]={d="l"}, + [0x1071F]={d="l"}, + [0x10720]={d="l"}, + [0x10721]={d="l"}, + [0x10722]={d="l"}, + [0x10723]={d="l"}, + [0x10724]={d="l"}, + [0x10725]={d="l"}, + [0x10726]={d="l"}, + [0x10727]={d="l"}, + [0x10728]={d="l"}, + [0x10729]={d="l"}, + [0x1072A]={d="l"}, + [0x1072B]={d="l"}, + [0x1072C]={d="l"}, + [0x1072D]={d="l"}, + [0x1072E]={d="l"}, + [0x1072F]={d="l"}, + [0x10730]={d="l"}, + [0x10731]={d="l"}, + [0x10732]={d="l"}, + [0x10733]={d="l"}, + [0x10734]={d="l"}, + [0x10735]={d="l"}, + [0x10736]={d="l"}, + [0x10740]={d="l"}, + [0x10741]={d="l"}, + [0x10742]={d="l"}, + [0x10743]={d="l"}, + [0x10744]={d="l"}, + [0x10745]={d="l"}, + [0x10746]={d="l"}, + [0x10747]={d="l"}, + [0x10748]={d="l"}, + [0x10749]={d="l"}, + [0x1074A]={d="l"}, + [0x1074B]={d="l"}, + [0x1074C]={d="l"}, + [0x1074D]={d="l"}, + [0x1074E]={d="l"}, + [0x1074F]={d="l"}, + [0x10750]={d="l"}, + [0x10751]={d="l"}, + [0x10752]={d="l"}, + [0x10753]={d="l"}, + [0x10754]={d="l"}, + [0x10755]={d="l"}, + [0x10760]={d="l"}, + [0x10761]={d="l"}, + [0x10762]={d="l"}, + [0x10763]={d="l"}, + [0x10764]={d="l"}, + [0x10765]={d="l"}, + [0x10766]={d="l"}, + [0x10767]={d="l"}, + [0x10780]={d="l"}, + [0x10781]={d="l"}, + [0x10782]={d="l"}, + [0x10783]={d="l"}, + [0x10784]={d="l"}, + [0x10785]={d="l"}, + [0x10787]={d="l"}, + [0x10788]={d="l"}, + [0x10789]={d="l"}, + [0x1078A]={d="l"}, + [0x1078B]={d="l"}, + [0x1078C]={d="l"}, + [0x1078D]={d="l"}, + [0x1078E]={d="l"}, + [0x1078F]={d="l"}, + [0x10790]={d="l"}, + [0x10791]={d="l"}, + [0x10792]={d="l"}, + [0x10793]={d="l"}, + [0x10794]={d="l"}, + [0x10795]={d="l"}, + [0x10796]={d="l"}, + [0x10797]={d="l"}, + [0x10798]={d="l"}, + [0x10799]={d="l"}, + [0x1079A]={d="l"}, + [0x1079B]={d="l"}, + [0x1079C]={d="l"}, + [0x1079D]={d="l"}, + [0x1079E]={d="l"}, + [0x1079F]={d="l"}, + [0x107A0]={d="l"}, + [0x107A1]={d="l"}, + [0x107A2]={d="l"}, + [0x107A3]={d="l"}, + [0x107A4]={d="l"}, + [0x107A5]={d="l"}, + [0x107A6]={d="l"}, + [0x107A7]={d="l"}, + [0x107A8]={d="l"}, + [0x107A9]={d="l"}, + [0x107AA]={d="l"}, + [0x107AB]={d="l"}, + [0x107AC]={d="l"}, + [0x107AD]={d="l"}, + [0x107AE]={d="l"}, + [0x107AF]={d="l"}, + [0x107B0]={d="l"}, + [0x107B2]={d="l"}, + [0x107B3]={d="l"}, + [0x107B4]={d="l"}, + [0x107B5]={d="l"}, + [0x107B6]={d="l"}, + [0x107B7]={d="l"}, + [0x107B8]={d="l"}, + [0x107B9]={d="l"}, + [0x107BA]={d="l"}, + [0x10800]={d="r"}, + [0x10801]={d="r"}, + [0x10802]={d="r"}, + [0x10803]={d="r"}, + [0x10804]={d="r"}, + [0x10805]={d="r"}, + [0x10808]={d="r"}, + [0x1080A]={d="r"}, + [0x1080B]={d="r"}, + [0x1080C]={d="r"}, + [0x1080D]={d="r"}, + [0x1080E]={d="r"}, + [0x1080F]={d="r"}, + [0x10810]={d="r"}, + [0x10811]={d="r"}, + [0x10812]={d="r"}, + [0x10813]={d="r"}, + [0x10814]={d="r"}, + [0x10815]={d="r"}, + [0x10816]={d="r"}, + [0x10817]={d="r"}, + [0x10818]={d="r"}, + [0x10819]={d="r"}, + [0x1081A]={d="r"}, + [0x1081B]={d="r"}, + [0x1081C]={d="r"}, + [0x1081D]={d="r"}, + [0x1081E]={d="r"}, + [0x1081F]={d="r"}, + [0x10820]={d="r"}, + [0x10821]={d="r"}, + [0x10822]={d="r"}, + [0x10823]={d="r"}, + [0x10824]={d="r"}, + [0x10825]={d="r"}, + [0x10826]={d="r"}, + [0x10827]={d="r"}, + [0x10828]={d="r"}, + [0x10829]={d="r"}, + [0x1082A]={d="r"}, + [0x1082B]={d="r"}, + [0x1082C]={d="r"}, + [0x1082D]={d="r"}, + [0x1082E]={d="r"}, + [0x1082F]={d="r"}, + [0x10830]={d="r"}, + [0x10831]={d="r"}, + [0x10832]={d="r"}, + [0x10833]={d="r"}, + [0x10834]={d="r"}, + [0x10835]={d="r"}, + [0x10837]={d="r"}, + [0x10838]={d="r"}, + [0x1083C]={d="r"}, + [0x1083F]={d="r"}, + [0x10840]={d="r"}, + [0x10841]={d="r"}, + [0x10842]={d="r"}, + [0x10843]={d="r"}, + [0x10844]={d="r"}, + [0x10845]={d="r"}, + [0x10846]={d="r"}, + [0x10847]={d="r"}, + [0x10848]={d="r"}, + [0x10849]={d="r"}, + [0x1084A]={d="r"}, + [0x1084B]={d="r"}, + [0x1084C]={d="r"}, + [0x1084D]={d="r"}, + [0x1084E]={d="r"}, + [0x1084F]={d="r"}, + [0x10850]={d="r"}, + [0x10851]={d="r"}, + [0x10852]={d="r"}, + [0x10853]={d="r"}, + [0x10854]={d="r"}, + [0x10855]={d="r"}, + [0x10857]={d="r"}, + [0x10858]={d="r"}, + [0x10859]={d="r"}, + [0x1085A]={d="r"}, + [0x1085B]={d="r"}, + [0x1085C]={d="r"}, + [0x1085D]={d="r"}, + [0x1085E]={d="r"}, + [0x1085F]={d="r"}, + [0x10860]={d="r"}, + [0x10861]={d="r"}, + [0x10862]={d="r"}, + [0x10863]={d="r"}, + [0x10864]={d="r"}, + [0x10865]={d="r"}, + [0x10866]={d="r"}, + [0x10867]={d="r"}, + [0x10868]={d="r"}, + [0x10869]={d="r"}, + [0x1086A]={d="r"}, + [0x1086B]={d="r"}, + [0x1086C]={d="r"}, + [0x1086D]={d="r"}, + [0x1086E]={d="r"}, + [0x1086F]={d="r"}, + [0x10870]={d="r"}, + [0x10871]={d="r"}, + [0x10872]={d="r"}, + [0x10873]={d="r"}, + [0x10874]={d="r"}, + [0x10875]={d="r"}, + [0x10876]={d="r"}, + [0x10877]={d="r"}, + [0x10878]={d="r"}, + [0x10879]={d="r"}, + [0x1087A]={d="r"}, + [0x1087B]={d="r"}, + [0x1087C]={d="r"}, + [0x1087D]={d="r"}, + [0x1087E]={d="r"}, + [0x1087F]={d="r"}, + [0x10880]={d="r"}, + [0x10881]={d="r"}, + [0x10882]={d="r"}, + [0x10883]={d="r"}, + [0x10884]={d="r"}, + [0x10885]={d="r"}, + [0x10886]={d="r"}, + [0x10887]={d="r"}, + [0x10888]={d="r"}, + [0x10889]={d="r"}, + [0x1088A]={d="r"}, + [0x1088B]={d="r"}, + [0x1088C]={d="r"}, + [0x1088D]={d="r"}, + [0x1088E]={d="r"}, + [0x1088F]={d="r"}, + [0x10890]={d="r"}, + [0x10891]={d="r"}, + [0x10892]={d="r"}, + [0x10893]={d="r"}, + [0x10894]={d="r"}, + [0x10895]={d="r"}, + [0x10896]={d="r"}, + [0x10897]={d="r"}, + [0x10898]={d="r"}, + [0x10899]={d="r"}, + [0x1089A]={d="r"}, + [0x1089B]={d="r"}, + [0x1089C]={d="r"}, + [0x1089D]={d="r"}, + [0x1089E]={d="r"}, + [0x108A7]={d="r"}, + [0x108A8]={d="r"}, + [0x108A9]={d="r"}, + [0x108AA]={d="r"}, + [0x108AB]={d="r"}, + [0x108AC]={d="r"}, + [0x108AD]={d="r"}, + [0x108AE]={d="r"}, + [0x108AF]={d="r"}, + [0x108E0]={d="r"}, + [0x108E1]={d="r"}, + [0x108E2]={d="r"}, + [0x108E3]={d="r"}, + [0x108E4]={d="r"}, + [0x108E5]={d="r"}, + [0x108E6]={d="r"}, + [0x108E7]={d="r"}, + [0x108E8]={d="r"}, + [0x108E9]={d="r"}, + [0x108EA]={d="r"}, + [0x108EB]={d="r"}, + [0x108EC]={d="r"}, + [0x108ED]={d="r"}, + [0x108EE]={d="r"}, + [0x108EF]={d="r"}, + [0x108F0]={d="r"}, + [0x108F1]={d="r"}, + [0x108F2]={d="r"}, + [0x108F4]={d="r"}, + [0x108F5]={d="r"}, + [0x108FB]={d="r"}, + [0x108FC]={d="r"}, + [0x108FD]={d="r"}, + [0x108FE]={d="r"}, + [0x108FF]={d="r"}, + [0x10900]={d="r"}, + [0x10901]={d="r"}, + [0x10902]={d="r"}, + [0x10903]={d="r"}, + [0x10904]={d="r"}, + [0x10905]={d="r"}, + [0x10906]={d="r"}, + [0x10907]={d="r"}, + [0x10908]={d="r"}, + [0x10909]={d="r"}, + [0x1090A]={d="r"}, + [0x1090B]={d="r"}, + [0x1090C]={d="r"}, + [0x1090D]={d="r"}, + [0x1090E]={d="r"}, + [0x1090F]={d="r"}, + [0x10910]={d="r"}, + [0x10911]={d="r"}, + [0x10912]={d="r"}, + [0x10913]={d="r"}, + [0x10914]={d="r"}, + [0x10915]={d="r"}, + [0x10916]={d="r"}, + [0x10917]={d="r"}, + [0x10918]={d="r"}, + [0x10919]={d="r"}, + [0x1091A]={d="r"}, + [0x1091B]={d="r"}, + [0x1091F]={d="on"}, + [0x10920]={d="r"}, + [0x10921]={d="r"}, + [0x10922]={d="r"}, + [0x10923]={d="r"}, + [0x10924]={d="r"}, + [0x10925]={d="r"}, + [0x10926]={d="r"}, + [0x10927]={d="r"}, + [0x10928]={d="r"}, + [0x10929]={d="r"}, + [0x1092A]={d="r"}, + [0x1092B]={d="r"}, + [0x1092C]={d="r"}, + [0x1092D]={d="r"}, + [0x1092E]={d="r"}, + [0x1092F]={d="r"}, + [0x10930]={d="r"}, + [0x10931]={d="r"}, + [0x10932]={d="r"}, + [0x10933]={d="r"}, + [0x10934]={d="r"}, + [0x10935]={d="r"}, + [0x10936]={d="r"}, + [0x10937]={d="r"}, + [0x10938]={d="r"}, + [0x10939]={d="r"}, + [0x1093F]={d="r"}, + [0x10980]={d="r"}, + [0x10981]={d="r"}, + [0x10982]={d="r"}, + [0x10983]={d="r"}, + [0x10984]={d="r"}, + [0x10985]={d="r"}, + [0x10986]={d="r"}, + [0x10987]={d="r"}, + [0x10988]={d="r"}, + [0x10989]={d="r"}, + [0x1098A]={d="r"}, + [0x1098B]={d="r"}, + [0x1098C]={d="r"}, + [0x1098D]={d="r"}, + [0x1098E]={d="r"}, + [0x1098F]={d="r"}, + [0x10990]={d="r"}, + [0x10991]={d="r"}, + [0x10992]={d="r"}, + [0x10993]={d="r"}, + [0x10994]={d="r"}, + [0x10995]={d="r"}, + [0x10996]={d="r"}, + [0x10997]={d="r"}, + [0x10998]={d="r"}, + [0x10999]={d="r"}, + [0x1099A]={d="r"}, + [0x1099B]={d="r"}, + [0x1099C]={d="r"}, + [0x1099D]={d="r"}, + [0x1099E]={d="r"}, + [0x1099F]={d="r"}, + [0x109A0]={d="r"}, + [0x109A1]={d="r"}, + [0x109A2]={d="r"}, + [0x109A3]={d="r"}, + [0x109A4]={d="r"}, + [0x109A5]={d="r"}, + [0x109A6]={d="r"}, + [0x109A7]={d="r"}, + [0x109A8]={d="r"}, + [0x109A9]={d="r"}, + [0x109AA]={d="r"}, + [0x109AB]={d="r"}, + [0x109AC]={d="r"}, + [0x109AD]={d="r"}, + [0x109AE]={d="r"}, + [0x109AF]={d="r"}, + [0x109B0]={d="r"}, + [0x109B1]={d="r"}, + [0x109B2]={d="r"}, + [0x109B3]={d="r"}, + [0x109B4]={d="r"}, + [0x109B5]={d="r"}, + [0x109B6]={d="r"}, + [0x109B7]={d="r"}, + [0x109BC]={d="r"}, + [0x109BD]={d="r"}, + [0x109BE]={d="r"}, + [0x109BF]={d="r"}, + [0x109C0]={d="r"}, + [0x109C1]={d="r"}, + [0x109C2]={d="r"}, + [0x109C3]={d="r"}, + [0x109C4]={d="r"}, + [0x109C5]={d="r"}, + [0x109C6]={d="r"}, + [0x109C7]={d="r"}, + [0x109C8]={d="r"}, + [0x109C9]={d="r"}, + [0x109CA]={d="r"}, + [0x109CB]={d="r"}, + [0x109CC]={d="r"}, + [0x109CD]={d="r"}, + [0x109CE]={d="r"}, + [0x109CF]={d="r"}, + [0x109D2]={d="r"}, + [0x109D3]={d="r"}, + [0x109D4]={d="r"}, + [0x109D5]={d="r"}, + [0x109D6]={d="r"}, + [0x109D7]={d="r"}, + [0x109D8]={d="r"}, + [0x109D9]={d="r"}, + [0x109DA]={d="r"}, + [0x109DB]={d="r"}, + [0x109DC]={d="r"}, + [0x109DD]={d="r"}, + [0x109DE]={d="r"}, + [0x109DF]={d="r"}, + [0x109E0]={d="r"}, + [0x109E1]={d="r"}, + [0x109E2]={d="r"}, + [0x109E3]={d="r"}, + [0x109E4]={d="r"}, + [0x109E5]={d="r"}, + [0x109E6]={d="r"}, + [0x109E7]={d="r"}, + [0x109E8]={d="r"}, + [0x109E9]={d="r"}, + [0x109EA]={d="r"}, + [0x109EB]={d="r"}, + [0x109EC]={d="r"}, + [0x109ED]={d="r"}, + [0x109EE]={d="r"}, + [0x109EF]={d="r"}, + [0x109F0]={d="r"}, + [0x109F1]={d="r"}, + [0x109F2]={d="r"}, + [0x109F3]={d="r"}, + [0x109F4]={d="r"}, + [0x109F5]={d="r"}, + [0x109F6]={d="r"}, + [0x109F7]={d="r"}, + [0x109F8]={d="r"}, + [0x109F9]={d="r"}, + [0x109FA]={d="r"}, + [0x109FB]={d="r"}, + [0x109FC]={d="r"}, + [0x109FD]={d="r"}, + [0x109FE]={d="r"}, + [0x109FF]={d="r"}, + [0x10A00]={d="r"}, + [0x10A01]={d="nsm"}, + [0x10A02]={d="nsm"}, + [0x10A03]={d="nsm"}, + [0x10A05]={d="nsm"}, + [0x10A06]={d="nsm"}, + [0x10A0C]={d="nsm"}, + [0x10A0D]={d="nsm"}, + [0x10A0E]={d="nsm"}, + [0x10A0F]={d="nsm"}, + [0x10A10]={d="r"}, + [0x10A11]={d="r"}, + [0x10A12]={d="r"}, + [0x10A13]={d="r"}, + [0x10A15]={d="r"}, + [0x10A16]={d="r"}, + [0x10A17]={d="r"}, + [0x10A19]={d="r"}, + [0x10A1A]={d="r"}, + [0x10A1B]={d="r"}, + [0x10A1C]={d="r"}, + [0x10A1D]={d="r"}, + [0x10A1E]={d="r"}, + [0x10A1F]={d="r"}, + [0x10A20]={d="r"}, + [0x10A21]={d="r"}, + [0x10A22]={d="r"}, + [0x10A23]={d="r"}, + [0x10A24]={d="r"}, + [0x10A25]={d="r"}, + [0x10A26]={d="r"}, + [0x10A27]={d="r"}, + [0x10A28]={d="r"}, + [0x10A29]={d="r"}, + [0x10A2A]={d="r"}, + [0x10A2B]={d="r"}, + [0x10A2C]={d="r"}, + [0x10A2D]={d="r"}, + [0x10A2E]={d="r"}, + [0x10A2F]={d="r"}, + [0x10A30]={d="r"}, + [0x10A31]={d="r"}, + [0x10A32]={d="r"}, + [0x10A33]={d="r"}, + [0x10A34]={d="r"}, + [0x10A35]={d="r"}, + [0x10A38]={d="nsm"}, + [0x10A39]={d="nsm"}, + [0x10A3A]={d="nsm"}, + [0x10A3F]={d="nsm"}, + [0x10A40]={d="r"}, + [0x10A41]={d="r"}, + [0x10A42]={d="r"}, + [0x10A43]={d="r"}, + [0x10A44]={d="r"}, + [0x10A45]={d="r"}, + [0x10A46]={d="r"}, + [0x10A47]={d="r"}, + [0x10A48]={d="r"}, + [0x10A50]={d="r"}, + [0x10A51]={d="r"}, + [0x10A52]={d="r"}, + [0x10A53]={d="r"}, + [0x10A54]={d="r"}, + [0x10A55]={d="r"}, + [0x10A56]={d="r"}, + [0x10A57]={d="r"}, + [0x10A58]={d="r"}, + [0x10A60]={d="r"}, + [0x10A61]={d="r"}, + [0x10A62]={d="r"}, + [0x10A63]={d="r"}, + [0x10A64]={d="r"}, + [0x10A65]={d="r"}, + [0x10A66]={d="r"}, + [0x10A67]={d="r"}, + [0x10A68]={d="r"}, + [0x10A69]={d="r"}, + [0x10A6A]={d="r"}, + [0x10A6B]={d="r"}, + [0x10A6C]={d="r"}, + [0x10A6D]={d="r"}, + [0x10A6E]={d="r"}, + [0x10A6F]={d="r"}, + [0x10A70]={d="r"}, + [0x10A71]={d="r"}, + [0x10A72]={d="r"}, + [0x10A73]={d="r"}, + [0x10A74]={d="r"}, + [0x10A75]={d="r"}, + [0x10A76]={d="r"}, + [0x10A77]={d="r"}, + [0x10A78]={d="r"}, + [0x10A79]={d="r"}, + [0x10A7A]={d="r"}, + [0x10A7B]={d="r"}, + [0x10A7C]={d="r"}, + [0x10A7D]={d="r"}, + [0x10A7E]={d="r"}, + [0x10A7F]={d="r"}, + [0x10A80]={d="r"}, + [0x10A81]={d="r"}, + [0x10A82]={d="r"}, + [0x10A83]={d="r"}, + [0x10A84]={d="r"}, + [0x10A85]={d="r"}, + [0x10A86]={d="r"}, + [0x10A87]={d="r"}, + [0x10A88]={d="r"}, + [0x10A89]={d="r"}, + [0x10A8A]={d="r"}, + [0x10A8B]={d="r"}, + [0x10A8C]={d="r"}, + [0x10A8D]={d="r"}, + [0x10A8E]={d="r"}, + [0x10A8F]={d="r"}, + [0x10A90]={d="r"}, + [0x10A91]={d="r"}, + [0x10A92]={d="r"}, + [0x10A93]={d="r"}, + [0x10A94]={d="r"}, + [0x10A95]={d="r"}, + [0x10A96]={d="r"}, + [0x10A97]={d="r"}, + [0x10A98]={d="r"}, + [0x10A99]={d="r"}, + [0x10A9A]={d="r"}, + [0x10A9B]={d="r"}, + [0x10A9C]={d="r"}, + [0x10A9D]={d="r"}, + [0x10A9E]={d="r"}, + [0x10A9F]={d="r"}, + [0x10AC0]={d="r"}, + [0x10AC1]={d="r"}, + [0x10AC2]={d="r"}, + [0x10AC3]={d="r"}, + [0x10AC4]={d="r"}, + [0x10AC5]={d="r"}, + [0x10AC6]={d="r"}, + [0x10AC7]={d="r"}, + [0x10AC8]={d="r"}, + [0x10AC9]={d="r"}, + [0x10ACA]={d="r"}, + [0x10ACB]={d="r"}, + [0x10ACC]={d="r"}, + [0x10ACD]={d="r"}, + [0x10ACE]={d="r"}, + [0x10ACF]={d="r"}, + [0x10AD0]={d="r"}, + [0x10AD1]={d="r"}, + [0x10AD2]={d="r"}, + [0x10AD3]={d="r"}, + [0x10AD4]={d="r"}, + [0x10AD5]={d="r"}, + [0x10AD6]={d="r"}, + [0x10AD7]={d="r"}, + [0x10AD8]={d="r"}, + [0x10AD9]={d="r"}, + [0x10ADA]={d="r"}, + [0x10ADB]={d="r"}, + [0x10ADC]={d="r"}, + [0x10ADD]={d="r"}, + [0x10ADE]={d="r"}, + [0x10ADF]={d="r"}, + [0x10AE0]={d="r"}, + [0x10AE1]={d="r"}, + [0x10AE2]={d="r"}, + [0x10AE3]={d="r"}, + [0x10AE4]={d="r"}, + [0x10AE5]={d="nsm"}, + [0x10AE6]={d="nsm"}, + [0x10AEB]={d="r"}, + [0x10AEC]={d="r"}, + [0x10AED]={d="r"}, + [0x10AEE]={d="r"}, + [0x10AEF]={d="r"}, + [0x10AF0]={d="r"}, + [0x10AF1]={d="r"}, + [0x10AF2]={d="r"}, + [0x10AF3]={d="r"}, + [0x10AF4]={d="r"}, + [0x10AF5]={d="r"}, + [0x10AF6]={d="r"}, + [0x10B00]={d="r"}, + [0x10B01]={d="r"}, + [0x10B02]={d="r"}, + [0x10B03]={d="r"}, + [0x10B04]={d="r"}, + [0x10B05]={d="r"}, + [0x10B06]={d="r"}, + [0x10B07]={d="r"}, + [0x10B08]={d="r"}, + [0x10B09]={d="r"}, + [0x10B0A]={d="r"}, + [0x10B0B]={d="r"}, + [0x10B0C]={d="r"}, + [0x10B0D]={d="r"}, + [0x10B0E]={d="r"}, + [0x10B0F]={d="r"}, + [0x10B10]={d="r"}, + [0x10B11]={d="r"}, + [0x10B12]={d="r"}, + [0x10B13]={d="r"}, + [0x10B14]={d="r"}, + [0x10B15]={d="r"}, + [0x10B16]={d="r"}, + [0x10B17]={d="r"}, + [0x10B18]={d="r"}, + [0x10B19]={d="r"}, + [0x10B1A]={d="r"}, + [0x10B1B]={d="r"}, + [0x10B1C]={d="r"}, + [0x10B1D]={d="r"}, + [0x10B1E]={d="r"}, + [0x10B1F]={d="r"}, + [0x10B20]={d="r"}, + [0x10B21]={d="r"}, + [0x10B22]={d="r"}, + [0x10B23]={d="r"}, + [0x10B24]={d="r"}, + [0x10B25]={d="r"}, + [0x10B26]={d="r"}, + [0x10B27]={d="r"}, + [0x10B28]={d="r"}, + [0x10B29]={d="r"}, + [0x10B2A]={d="r"}, + [0x10B2B]={d="r"}, + [0x10B2C]={d="r"}, + [0x10B2D]={d="r"}, + [0x10B2E]={d="r"}, + [0x10B2F]={d="r"}, + [0x10B30]={d="r"}, + [0x10B31]={d="r"}, + [0x10B32]={d="r"}, + [0x10B33]={d="r"}, + [0x10B34]={d="r"}, + [0x10B35]={d="r"}, + [0x10B39]={d="on"}, + [0x10B3A]={d="on"}, + [0x10B3B]={d="on"}, + [0x10B3C]={d="on"}, + [0x10B3D]={d="on"}, + [0x10B3E]={d="on"}, + [0x10B3F]={d="on"}, + [0x10B40]={d="r"}, + [0x10B41]={d="r"}, + [0x10B42]={d="r"}, + [0x10B43]={d="r"}, + [0x10B44]={d="r"}, + [0x10B45]={d="r"}, + [0x10B46]={d="r"}, + [0x10B47]={d="r"}, + [0x10B48]={d="r"}, + [0x10B49]={d="r"}, + [0x10B4A]={d="r"}, + [0x10B4B]={d="r"}, + [0x10B4C]={d="r"}, + [0x10B4D]={d="r"}, + [0x10B4E]={d="r"}, + [0x10B4F]={d="r"}, + [0x10B50]={d="r"}, + [0x10B51]={d="r"}, + [0x10B52]={d="r"}, + [0x10B53]={d="r"}, + [0x10B54]={d="r"}, + [0x10B55]={d="r"}, + [0x10B58]={d="r"}, + [0x10B59]={d="r"}, + [0x10B5A]={d="r"}, + [0x10B5B]={d="r"}, + [0x10B5C]={d="r"}, + [0x10B5D]={d="r"}, + [0x10B5E]={d="r"}, + [0x10B5F]={d="r"}, + [0x10B60]={d="r"}, + [0x10B61]={d="r"}, + [0x10B62]={d="r"}, + [0x10B63]={d="r"}, + [0x10B64]={d="r"}, + [0x10B65]={d="r"}, + [0x10B66]={d="r"}, + [0x10B67]={d="r"}, + [0x10B68]={d="r"}, + [0x10B69]={d="r"}, + [0x10B6A]={d="r"}, + [0x10B6B]={d="r"}, + [0x10B6C]={d="r"}, + [0x10B6D]={d="r"}, + [0x10B6E]={d="r"}, + [0x10B6F]={d="r"}, + [0x10B70]={d="r"}, + [0x10B71]={d="r"}, + [0x10B72]={d="r"}, + [0x10B78]={d="r"}, + [0x10B79]={d="r"}, + [0x10B7A]={d="r"}, + [0x10B7B]={d="r"}, + [0x10B7C]={d="r"}, + [0x10B7D]={d="r"}, + [0x10B7E]={d="r"}, + [0x10B7F]={d="r"}, + [0x10B80]={d="r"}, + [0x10B81]={d="r"}, + [0x10B82]={d="r"}, + [0x10B83]={d="r"}, + [0x10B84]={d="r"}, + [0x10B85]={d="r"}, + [0x10B86]={d="r"}, + [0x10B87]={d="r"}, + [0x10B88]={d="r"}, + [0x10B89]={d="r"}, + [0x10B8A]={d="r"}, + [0x10B8B]={d="r"}, + [0x10B8C]={d="r"}, + [0x10B8D]={d="r"}, + [0x10B8E]={d="r"}, + [0x10B8F]={d="r"}, + [0x10B90]={d="r"}, + [0x10B91]={d="r"}, + [0x10B99]={d="r"}, + [0x10B9A]={d="r"}, + [0x10B9B]={d="r"}, + [0x10B9C]={d="r"}, + [0x10BA9]={d="r"}, + [0x10BAA]={d="r"}, + [0x10BAB]={d="r"}, + [0x10BAC]={d="r"}, + [0x10BAD]={d="r"}, + [0x10BAE]={d="r"}, + [0x10BAF]={d="r"}, + [0x10C00]={d="r"}, + [0x10C01]={d="r"}, + [0x10C02]={d="r"}, + [0x10C03]={d="r"}, + [0x10C04]={d="r"}, + [0x10C05]={d="r"}, + [0x10C06]={d="r"}, + [0x10C07]={d="r"}, + [0x10C08]={d="r"}, + [0x10C09]={d="r"}, + [0x10C0A]={d="r"}, + [0x10C0B]={d="r"}, + [0x10C0C]={d="r"}, + [0x10C0D]={d="r"}, + [0x10C0E]={d="r"}, + [0x10C0F]={d="r"}, + [0x10C10]={d="r"}, + [0x10C11]={d="r"}, + [0x10C12]={d="r"}, + [0x10C13]={d="r"}, + [0x10C14]={d="r"}, + [0x10C15]={d="r"}, + [0x10C16]={d="r"}, + [0x10C17]={d="r"}, + [0x10C18]={d="r"}, + [0x10C19]={d="r"}, + [0x10C1A]={d="r"}, + [0x10C1B]={d="r"}, + [0x10C1C]={d="r"}, + [0x10C1D]={d="r"}, + [0x10C1E]={d="r"}, + [0x10C1F]={d="r"}, + [0x10C20]={d="r"}, + [0x10C21]={d="r"}, + [0x10C22]={d="r"}, + [0x10C23]={d="r"}, + [0x10C24]={d="r"}, + [0x10C25]={d="r"}, + [0x10C26]={d="r"}, + [0x10C27]={d="r"}, + [0x10C28]={d="r"}, + [0x10C29]={d="r"}, + [0x10C2A]={d="r"}, + [0x10C2B]={d="r"}, + [0x10C2C]={d="r"}, + [0x10C2D]={d="r"}, + [0x10C2E]={d="r"}, + [0x10C2F]={d="r"}, + [0x10C30]={d="r"}, + [0x10C31]={d="r"}, + [0x10C32]={d="r"}, + [0x10C33]={d="r"}, + [0x10C34]={d="r"}, + [0x10C35]={d="r"}, + [0x10C36]={d="r"}, + [0x10C37]={d="r"}, + [0x10C38]={d="r"}, + [0x10C39]={d="r"}, + [0x10C3A]={d="r"}, + [0x10C3B]={d="r"}, + [0x10C3C]={d="r"}, + [0x10C3D]={d="r"}, + [0x10C3E]={d="r"}, + [0x10C3F]={d="r"}, + [0x10C40]={d="r"}, + [0x10C41]={d="r"}, + [0x10C42]={d="r"}, + [0x10C43]={d="r"}, + [0x10C44]={d="r"}, + [0x10C45]={d="r"}, + [0x10C46]={d="r"}, + [0x10C47]={d="r"}, + [0x10C48]={d="r"}, + [0x10C80]={d="r"}, + [0x10C81]={d="r"}, + [0x10C82]={d="r"}, + [0x10C83]={d="r"}, + [0x10C84]={d="r"}, + [0x10C85]={d="r"}, + [0x10C86]={d="r"}, + [0x10C87]={d="r"}, + [0x10C88]={d="r"}, + [0x10C89]={d="r"}, + [0x10C8A]={d="r"}, + [0x10C8B]={d="r"}, + [0x10C8C]={d="r"}, + [0x10C8D]={d="r"}, + [0x10C8E]={d="r"}, + [0x10C8F]={d="r"}, + [0x10C90]={d="r"}, + [0x10C91]={d="r"}, + [0x10C92]={d="r"}, + [0x10C93]={d="r"}, + [0x10C94]={d="r"}, + [0x10C95]={d="r"}, + [0x10C96]={d="r"}, + [0x10C97]={d="r"}, + [0x10C98]={d="r"}, + [0x10C99]={d="r"}, + [0x10C9A]={d="r"}, + [0x10C9B]={d="r"}, + [0x10C9C]={d="r"}, + [0x10C9D]={d="r"}, + [0x10C9E]={d="r"}, + [0x10C9F]={d="r"}, + [0x10CA0]={d="r"}, + [0x10CA1]={d="r"}, + [0x10CA2]={d="r"}, + [0x10CA3]={d="r"}, + [0x10CA4]={d="r"}, + [0x10CA5]={d="r"}, + [0x10CA6]={d="r"}, + [0x10CA7]={d="r"}, + [0x10CA8]={d="r"}, + [0x10CA9]={d="r"}, + [0x10CAA]={d="r"}, + [0x10CAB]={d="r"}, + [0x10CAC]={d="r"}, + [0x10CAD]={d="r"}, + [0x10CAE]={d="r"}, + [0x10CAF]={d="r"}, + [0x10CB0]={d="r"}, + [0x10CB1]={d="r"}, + [0x10CB2]={d="r"}, + [0x10CC0]={d="r"}, + [0x10CC1]={d="r"}, + [0x10CC2]={d="r"}, + [0x10CC3]={d="r"}, + [0x10CC4]={d="r"}, + [0x10CC5]={d="r"}, + [0x10CC6]={d="r"}, + [0x10CC7]={d="r"}, + [0x10CC8]={d="r"}, + [0x10CC9]={d="r"}, + [0x10CCA]={d="r"}, + [0x10CCB]={d="r"}, + [0x10CCC]={d="r"}, + [0x10CCD]={d="r"}, + [0x10CCE]={d="r"}, + [0x10CCF]={d="r"}, + [0x10CD0]={d="r"}, + [0x10CD1]={d="r"}, + [0x10CD2]={d="r"}, + [0x10CD3]={d="r"}, + [0x10CD4]={d="r"}, + [0x10CD5]={d="r"}, + [0x10CD6]={d="r"}, + [0x10CD7]={d="r"}, + [0x10CD8]={d="r"}, + [0x10CD9]={d="r"}, + [0x10CDA]={d="r"}, + [0x10CDB]={d="r"}, + [0x10CDC]={d="r"}, + [0x10CDD]={d="r"}, + [0x10CDE]={d="r"}, + [0x10CDF]={d="r"}, + [0x10CE0]={d="r"}, + [0x10CE1]={d="r"}, + [0x10CE2]={d="r"}, + [0x10CE3]={d="r"}, + [0x10CE4]={d="r"}, + [0x10CE5]={d="r"}, + [0x10CE6]={d="r"}, + [0x10CE7]={d="r"}, + [0x10CE8]={d="r"}, + [0x10CE9]={d="r"}, + [0x10CEA]={d="r"}, + [0x10CEB]={d="r"}, + [0x10CEC]={d="r"}, + [0x10CED]={d="r"}, + [0x10CEE]={d="r"}, + [0x10CEF]={d="r"}, + [0x10CF0]={d="r"}, + [0x10CF1]={d="r"}, + [0x10CF2]={d="r"}, + [0x10CFA]={d="r"}, + [0x10CFB]={d="r"}, + [0x10CFC]={d="r"}, + [0x10CFD]={d="r"}, + [0x10CFE]={d="r"}, + [0x10CFF]={d="r"}, + [0x10D00]={d="al"}, + [0x10D01]={d="al"}, + [0x10D02]={d="al"}, + [0x10D03]={d="al"}, + [0x10D04]={d="al"}, + [0x10D05]={d="al"}, + [0x10D06]={d="al"}, + [0x10D07]={d="al"}, + [0x10D08]={d="al"}, + [0x10D09]={d="al"}, + [0x10D0A]={d="al"}, + [0x10D0B]={d="al"}, + [0x10D0C]={d="al"}, + [0x10D0D]={d="al"}, + [0x10D0E]={d="al"}, + [0x10D0F]={d="al"}, + [0x10D10]={d="al"}, + [0x10D11]={d="al"}, + [0x10D12]={d="al"}, + [0x10D13]={d="al"}, + [0x10D14]={d="al"}, + [0x10D15]={d="al"}, + [0x10D16]={d="al"}, + [0x10D17]={d="al"}, + [0x10D18]={d="al"}, + [0x10D19]={d="al"}, + [0x10D1A]={d="al"}, + [0x10D1B]={d="al"}, + [0x10D1C]={d="al"}, + [0x10D1D]={d="al"}, + [0x10D1E]={d="al"}, + [0x10D1F]={d="al"}, + [0x10D20]={d="al"}, + [0x10D21]={d="al"}, + [0x10D22]={d="al"}, + [0x10D23]={d="al"}, + [0x10D24]={d="nsm"}, + [0x10D25]={d="nsm"}, + [0x10D26]={d="nsm"}, + [0x10D27]={d="nsm"}, + [0x10D30]={d="an"}, + [0x10D31]={d="an"}, + [0x10D32]={d="an"}, + [0x10D33]={d="an"}, + [0x10D34]={d="an"}, + [0x10D35]={d="an"}, + [0x10D36]={d="an"}, + [0x10D37]={d="an"}, + [0x10D38]={d="an"}, + [0x10D39]={d="an"}, + [0x10E60]={d="an"}, + [0x10E61]={d="an"}, + [0x10E62]={d="an"}, + [0x10E63]={d="an"}, + [0x10E64]={d="an"}, + [0x10E65]={d="an"}, + [0x10E66]={d="an"}, + [0x10E67]={d="an"}, + [0x10E68]={d="an"}, + [0x10E69]={d="an"}, + [0x10E6A]={d="an"}, + [0x10E6B]={d="an"}, + [0x10E6C]={d="an"}, + [0x10E6D]={d="an"}, + [0x10E6E]={d="an"}, + [0x10E6F]={d="an"}, + [0x10E70]={d="an"}, + [0x10E71]={d="an"}, + [0x10E72]={d="an"}, + [0x10E73]={d="an"}, + [0x10E74]={d="an"}, + [0x10E75]={d="an"}, + [0x10E76]={d="an"}, + [0x10E77]={d="an"}, + [0x10E78]={d="an"}, + [0x10E79]={d="an"}, + [0x10E7A]={d="an"}, + [0x10E7B]={d="an"}, + [0x10E7C]={d="an"}, + [0x10E7D]={d="an"}, + [0x10E7E]={d="an"}, + [0x10E80]={d="r"}, + [0x10E81]={d="r"}, + [0x10E82]={d="r"}, + [0x10E83]={d="r"}, + [0x10E84]={d="r"}, + [0x10E85]={d="r"}, + [0x10E86]={d="r"}, + [0x10E87]={d="r"}, + [0x10E88]={d="r"}, + [0x10E89]={d="r"}, + [0x10E8A]={d="r"}, + [0x10E8B]={d="r"}, + [0x10E8C]={d="r"}, + [0x10E8D]={d="r"}, + [0x10E8E]={d="r"}, + [0x10E8F]={d="r"}, + [0x10E90]={d="r"}, + [0x10E91]={d="r"}, + [0x10E92]={d="r"}, + [0x10E93]={d="r"}, + [0x10E94]={d="r"}, + [0x10E95]={d="r"}, + [0x10E96]={d="r"}, + [0x10E97]={d="r"}, + [0x10E98]={d="r"}, + [0x10E99]={d="r"}, + [0x10E9A]={d="r"}, + [0x10E9B]={d="r"}, + [0x10E9C]={d="r"}, + [0x10E9D]={d="r"}, + [0x10E9E]={d="r"}, + [0x10E9F]={d="r"}, + [0x10EA0]={d="r"}, + [0x10EA1]={d="r"}, + [0x10EA2]={d="r"}, + [0x10EA3]={d="r"}, + [0x10EA4]={d="r"}, + [0x10EA5]={d="r"}, + [0x10EA6]={d="r"}, + [0x10EA7]={d="r"}, + [0x10EA8]={d="r"}, + [0x10EA9]={d="r"}, + [0x10EAB]={d="nsm"}, + [0x10EAC]={d="nsm"}, + [0x10EAD]={d="r"}, + [0x10EB0]={d="r"}, + [0x10EB1]={d="r"}, + [0x10EFD]={d="nsm"}, + [0x10EFE]={d="nsm"}, + [0x10EFF]={d="nsm"}, + [0x10F00]={d="r"}, + [0x10F01]={d="r"}, + [0x10F02]={d="r"}, + [0x10F03]={d="r"}, + [0x10F04]={d="r"}, + [0x10F05]={d="r"}, + [0x10F06]={d="r"}, + [0x10F07]={d="r"}, + [0x10F08]={d="r"}, + [0x10F09]={d="r"}, + [0x10F0A]={d="r"}, + [0x10F0B]={d="r"}, + [0x10F0C]={d="r"}, + [0x10F0D]={d="r"}, + [0x10F0E]={d="r"}, + [0x10F0F]={d="r"}, + [0x10F10]={d="r"}, + [0x10F11]={d="r"}, + [0x10F12]={d="r"}, + [0x10F13]={d="r"}, + [0x10F14]={d="r"}, + [0x10F15]={d="r"}, + [0x10F16]={d="r"}, + [0x10F17]={d="r"}, + [0x10F18]={d="r"}, + [0x10F19]={d="r"}, + [0x10F1A]={d="r"}, + [0x10F1B]={d="r"}, + [0x10F1C]={d="r"}, + [0x10F1D]={d="r"}, + [0x10F1E]={d="r"}, + [0x10F1F]={d="r"}, + [0x10F20]={d="r"}, + [0x10F21]={d="r"}, + [0x10F22]={d="r"}, + [0x10F23]={d="r"}, + [0x10F24]={d="r"}, + [0x10F25]={d="r"}, + [0x10F26]={d="r"}, + [0x10F27]={d="r"}, + [0x10F30]={d="al"}, + [0x10F31]={d="al"}, + [0x10F32]={d="al"}, + [0x10F33]={d="al"}, + [0x10F34]={d="al"}, + [0x10F35]={d="al"}, + [0x10F36]={d="al"}, + [0x10F37]={d="al"}, + [0x10F38]={d="al"}, + [0x10F39]={d="al"}, + [0x10F3A]={d="al"}, + [0x10F3B]={d="al"}, + [0x10F3C]={d="al"}, + [0x10F3D]={d="al"}, + [0x10F3E]={d="al"}, + [0x10F3F]={d="al"}, + [0x10F40]={d="al"}, + [0x10F41]={d="al"}, + [0x10F42]={d="al"}, + [0x10F43]={d="al"}, + [0x10F44]={d="al"}, + [0x10F45]={d="al"}, + [0x10F46]={d="nsm"}, + [0x10F47]={d="nsm"}, + [0x10F48]={d="nsm"}, + [0x10F49]={d="nsm"}, + [0x10F4A]={d="nsm"}, + [0x10F4B]={d="nsm"}, + [0x10F4C]={d="nsm"}, + [0x10F4D]={d="nsm"}, + [0x10F4E]={d="nsm"}, + [0x10F4F]={d="nsm"}, + [0x10F50]={d="nsm"}, + [0x10F51]={d="al"}, + [0x10F52]={d="al"}, + [0x10F53]={d="al"}, + [0x10F54]={d="al"}, + [0x10F55]={d="al"}, + [0x10F56]={d="al"}, + [0x10F57]={d="al"}, + [0x10F58]={d="al"}, + [0x10F59]={d="al"}, + [0x10F70]={d="r"}, + [0x10F71]={d="r"}, + [0x10F72]={d="r"}, + [0x10F73]={d="r"}, + [0x10F74]={d="r"}, + [0x10F75]={d="r"}, + [0x10F76]={d="r"}, + [0x10F77]={d="r"}, + [0x10F78]={d="r"}, + [0x10F79]={d="r"}, + [0x10F7A]={d="r"}, + [0x10F7B]={d="r"}, + [0x10F7C]={d="r"}, + [0x10F7D]={d="r"}, + [0x10F7E]={d="r"}, + [0x10F7F]={d="r"}, + [0x10F80]={d="r"}, + [0x10F81]={d="r"}, + [0x10F82]={d="nsm"}, + [0x10F83]={d="nsm"}, + [0x10F84]={d="nsm"}, + [0x10F85]={d="nsm"}, + [0x10F86]={d="r"}, + [0x10F87]={d="r"}, + [0x10F88]={d="r"}, + [0x10F89]={d="r"}, + [0x10FB0]={d="r"}, + [0x10FB1]={d="r"}, + [0x10FB2]={d="r"}, + [0x10FB3]={d="r"}, + [0x10FB4]={d="r"}, + [0x10FB5]={d="r"}, + [0x10FB6]={d="r"}, + [0x10FB7]={d="r"}, + [0x10FB8]={d="r"}, + [0x10FB9]={d="r"}, + [0x10FBA]={d="r"}, + [0x10FBB]={d="r"}, + [0x10FBC]={d="r"}, + [0x10FBD]={d="r"}, + [0x10FBE]={d="r"}, + [0x10FBF]={d="r"}, + [0x10FC0]={d="r"}, + [0x10FC1]={d="r"}, + [0x10FC2]={d="r"}, + [0x10FC3]={d="r"}, + [0x10FC4]={d="r"}, + [0x10FC5]={d="r"}, + [0x10FC6]={d="r"}, + [0x10FC7]={d="r"}, + [0x10FC8]={d="r"}, + [0x10FC9]={d="r"}, + [0x10FCA]={d="r"}, + [0x10FCB]={d="r"}, + [0x10FE0]={d="r"}, + [0x10FE1]={d="r"}, + [0x10FE2]={d="r"}, + [0x10FE3]={d="r"}, + [0x10FE4]={d="r"}, + [0x10FE5]={d="r"}, + [0x10FE6]={d="r"}, + [0x10FE7]={d="r"}, + [0x10FE8]={d="r"}, + [0x10FE9]={d="r"}, + [0x10FEA]={d="r"}, + [0x10FEB]={d="r"}, + [0x10FEC]={d="r"}, + [0x10FED]={d="r"}, + [0x10FEE]={d="r"}, + [0x10FEF]={d="r"}, + [0x10FF0]={d="r"}, + [0x10FF1]={d="r"}, + [0x10FF2]={d="r"}, + [0x10FF3]={d="r"}, + [0x10FF4]={d="r"}, + [0x10FF5]={d="r"}, + [0x10FF6]={d="r"}, + [0x11000]={d="l"}, + [0x11001]={d="nsm"}, + [0x11002]={d="l"}, + [0x11003]={d="l"}, + [0x11004]={d="l"}, + [0x11005]={d="l"}, + [0x11006]={d="l"}, + [0x11007]={d="l"}, + [0x11008]={d="l"}, + [0x11009]={d="l"}, + [0x1100A]={d="l"}, + [0x1100B]={d="l"}, + [0x1100C]={d="l"}, + [0x1100D]={d="l"}, + [0x1100E]={d="l"}, + [0x1100F]={d="l"}, + [0x11010]={d="l"}, + [0x11011]={d="l"}, + [0x11012]={d="l"}, + [0x11013]={d="l"}, + [0x11014]={d="l"}, + [0x11015]={d="l"}, + [0x11016]={d="l"}, + [0x11017]={d="l"}, + [0x11018]={d="l"}, + [0x11019]={d="l"}, + [0x1101A]={d="l"}, + [0x1101B]={d="l"}, + [0x1101C]={d="l"}, + [0x1101D]={d="l"}, + [0x1101E]={d="l"}, + [0x1101F]={d="l"}, + [0x11020]={d="l"}, + [0x11021]={d="l"}, + [0x11022]={d="l"}, + [0x11023]={d="l"}, + [0x11024]={d="l"}, + [0x11025]={d="l"}, + [0x11026]={d="l"}, + [0x11027]={d="l"}, + [0x11028]={d="l"}, + [0x11029]={d="l"}, + [0x1102A]={d="l"}, + [0x1102B]={d="l"}, + [0x1102C]={d="l"}, + [0x1102D]={d="l"}, + [0x1102E]={d="l"}, + [0x1102F]={d="l"}, + [0x11030]={d="l"}, + [0x11031]={d="l"}, + [0x11032]={d="l"}, + [0x11033]={d="l"}, + [0x11034]={d="l"}, + [0x11035]={d="l"}, + [0x11036]={d="l"}, + [0x11037]={d="l"}, + [0x11038]={d="nsm"}, + [0x11039]={d="nsm"}, + [0x1103A]={d="nsm"}, + [0x1103B]={d="nsm"}, + [0x1103C]={d="nsm"}, + [0x1103D]={d="nsm"}, + [0x1103E]={d="nsm"}, + [0x1103F]={d="nsm"}, + [0x11040]={d="nsm"}, + [0x11041]={d="nsm"}, + [0x11042]={d="nsm"}, + [0x11043]={d="nsm"}, + [0x11044]={d="nsm"}, + [0x11045]={d="nsm"}, + [0x11046]={d="nsm"}, + [0x11047]={d="l"}, + [0x11048]={d="l"}, + [0x11049]={d="l"}, + [0x1104A]={d="l"}, + [0x1104B]={d="l"}, + [0x1104C]={d="l"}, + [0x1104D]={d="l"}, + [0x11052]={d="on"}, + [0x11053]={d="on"}, + [0x11054]={d="on"}, + [0x11055]={d="on"}, + [0x11056]={d="on"}, + [0x11057]={d="on"}, + [0x11058]={d="on"}, + [0x11059]={d="on"}, + [0x1105A]={d="on"}, + [0x1105B]={d="on"}, + [0x1105C]={d="on"}, + [0x1105D]={d="on"}, + [0x1105E]={d="on"}, + [0x1105F]={d="on"}, + [0x11060]={d="on"}, + [0x11061]={d="on"}, + [0x11062]={d="on"}, + [0x11063]={d="on"}, + [0x11064]={d="on"}, + [0x11065]={d="on"}, + [0x11066]={d="l"}, + [0x11067]={d="l"}, + [0x11068]={d="l"}, + [0x11069]={d="l"}, + [0x1106A]={d="l"}, + [0x1106B]={d="l"}, + [0x1106C]={d="l"}, + [0x1106D]={d="l"}, + [0x1106E]={d="l"}, + [0x1106F]={d="l"}, + [0x11070]={d="nsm"}, + [0x11071]={d="l"}, + [0x11072]={d="l"}, + [0x11073]={d="nsm"}, + [0x11074]={d="nsm"}, + [0x11075]={d="l"}, + [0x1107F]={d="nsm"}, + [0x11080]={d="nsm"}, + [0x11081]={d="nsm"}, + [0x11082]={d="l"}, + [0x11083]={d="l"}, + [0x11084]={d="l"}, + [0x11085]={d="l"}, + [0x11086]={d="l"}, + [0x11087]={d="l"}, + [0x11088]={d="l"}, + [0x11089]={d="l"}, + [0x1108A]={d="l"}, + [0x1108B]={d="l"}, + [0x1108C]={d="l"}, + [0x1108D]={d="l"}, + [0x1108E]={d="l"}, + [0x1108F]={d="l"}, + [0x11090]={d="l"}, + [0x11091]={d="l"}, + [0x11092]={d="l"}, + [0x11093]={d="l"}, + [0x11094]={d="l"}, + [0x11095]={d="l"}, + [0x11096]={d="l"}, + [0x11097]={d="l"}, + [0x11098]={d="l"}, + [0x11099]={d="l"}, + [0x1109A]={d="l"}, + [0x1109B]={d="l"}, + [0x1109C]={d="l"}, + [0x1109D]={d="l"}, + [0x1109E]={d="l"}, + [0x1109F]={d="l"}, + [0x110A0]={d="l"}, + [0x110A1]={d="l"}, + [0x110A2]={d="l"}, + [0x110A3]={d="l"}, + [0x110A4]={d="l"}, + [0x110A5]={d="l"}, + [0x110A6]={d="l"}, + [0x110A7]={d="l"}, + [0x110A8]={d="l"}, + [0x110A9]={d="l"}, + [0x110AA]={d="l"}, + [0x110AB]={d="l"}, + [0x110AC]={d="l"}, + [0x110AD]={d="l"}, + [0x110AE]={d="l"}, + [0x110AF]={d="l"}, + [0x110B0]={d="l"}, + [0x110B1]={d="l"}, + [0x110B2]={d="l"}, + [0x110B3]={d="nsm"}, + [0x110B4]={d="nsm"}, + [0x110B5]={d="nsm"}, + [0x110B6]={d="nsm"}, + [0x110B7]={d="l"}, + [0x110B8]={d="l"}, + [0x110B9]={d="nsm"}, + [0x110BA]={d="nsm"}, + [0x110BB]={d="l"}, + [0x110BC]={d="l"}, + [0x110BD]={d="l"}, + [0x110BE]={d="l"}, + [0x110BF]={d="l"}, + [0x110C0]={d="l"}, + [0x110C1]={d="l"}, + [0x110C2]={d="nsm"}, + [0x110CD]={d="l"}, + [0x110D0]={d="l"}, + [0x110D1]={d="l"}, + [0x110D2]={d="l"}, + [0x110D3]={d="l"}, + [0x110D4]={d="l"}, + [0x110D5]={d="l"}, + [0x110D6]={d="l"}, + [0x110D7]={d="l"}, + [0x110D8]={d="l"}, + [0x110D9]={d="l"}, + [0x110DA]={d="l"}, + [0x110DB]={d="l"}, + [0x110DC]={d="l"}, + [0x110DD]={d="l"}, + [0x110DE]={d="l"}, + [0x110DF]={d="l"}, + [0x110E0]={d="l"}, + [0x110E1]={d="l"}, + [0x110E2]={d="l"}, + [0x110E3]={d="l"}, + [0x110E4]={d="l"}, + [0x110E5]={d="l"}, + [0x110E6]={d="l"}, + [0x110E7]={d="l"}, + [0x110E8]={d="l"}, + [0x110F0]={d="l"}, + [0x110F1]={d="l"}, + [0x110F2]={d="l"}, + [0x110F3]={d="l"}, + [0x110F4]={d="l"}, + [0x110F5]={d="l"}, + [0x110F6]={d="l"}, + [0x110F7]={d="l"}, + [0x110F8]={d="l"}, + [0x110F9]={d="l"}, + [0x11100]={d="nsm"}, + [0x11101]={d="nsm"}, + [0x11102]={d="nsm"}, + [0x11103]={d="l"}, + [0x11104]={d="l"}, + [0x11105]={d="l"}, + [0x11106]={d="l"}, + [0x11107]={d="l"}, + [0x11108]={d="l"}, + [0x11109]={d="l"}, + [0x1110A]={d="l"}, + [0x1110B]={d="l"}, + [0x1110C]={d="l"}, + [0x1110D]={d="l"}, + [0x1110E]={d="l"}, + [0x1110F]={d="l"}, + [0x11110]={d="l"}, + [0x11111]={d="l"}, + [0x11112]={d="l"}, + [0x11113]={d="l"}, + [0x11114]={d="l"}, + [0x11115]={d="l"}, + [0x11116]={d="l"}, + [0x11117]={d="l"}, + [0x11118]={d="l"}, + [0x11119]={d="l"}, + [0x1111A]={d="l"}, + [0x1111B]={d="l"}, + [0x1111C]={d="l"}, + [0x1111D]={d="l"}, + [0x1111E]={d="l"}, + [0x1111F]={d="l"}, + [0x11120]={d="l"}, + [0x11121]={d="l"}, + [0x11122]={d="l"}, + [0x11123]={d="l"}, + [0x11124]={d="l"}, + [0x11125]={d="l"}, + [0x11126]={d="l"}, + [0x11127]={d="nsm"}, + [0x11128]={d="nsm"}, + [0x11129]={d="nsm"}, + [0x1112A]={d="nsm"}, + [0x1112B]={d="nsm"}, + [0x1112C]={d="l"}, + [0x1112D]={d="nsm"}, + [0x1112E]={d="nsm"}, + [0x1112F]={d="nsm"}, + [0x11130]={d="nsm"}, + [0x11131]={d="nsm"}, + [0x11132]={d="nsm"}, + [0x11133]={d="nsm"}, + [0x11134]={d="nsm"}, + [0x11136]={d="l"}, + [0x11137]={d="l"}, + [0x11138]={d="l"}, + [0x11139]={d="l"}, + [0x1113A]={d="l"}, + [0x1113B]={d="l"}, + [0x1113C]={d="l"}, + [0x1113D]={d="l"}, + [0x1113E]={d="l"}, + [0x1113F]={d="l"}, + [0x11140]={d="l"}, + [0x11141]={d="l"}, + [0x11142]={d="l"}, + [0x11143]={d="l"}, + [0x11144]={d="l"}, + [0x11145]={d="l"}, + [0x11146]={d="l"}, + [0x11147]={d="l"}, + [0x11150]={d="l"}, + [0x11151]={d="l"}, + [0x11152]={d="l"}, + [0x11153]={d="l"}, + [0x11154]={d="l"}, + [0x11155]={d="l"}, + [0x11156]={d="l"}, + [0x11157]={d="l"}, + [0x11158]={d="l"}, + [0x11159]={d="l"}, + [0x1115A]={d="l"}, + [0x1115B]={d="l"}, + [0x1115C]={d="l"}, + [0x1115D]={d="l"}, + [0x1115E]={d="l"}, + [0x1115F]={d="l"}, + [0x11160]={d="l"}, + [0x11161]={d="l"}, + [0x11162]={d="l"}, + [0x11163]={d="l"}, + [0x11164]={d="l"}, + [0x11165]={d="l"}, + [0x11166]={d="l"}, + [0x11167]={d="l"}, + [0x11168]={d="l"}, + [0x11169]={d="l"}, + [0x1116A]={d="l"}, + [0x1116B]={d="l"}, + [0x1116C]={d="l"}, + [0x1116D]={d="l"}, + [0x1116E]={d="l"}, + [0x1116F]={d="l"}, + [0x11170]={d="l"}, + [0x11171]={d="l"}, + [0x11172]={d="l"}, + [0x11173]={d="nsm"}, + [0x11174]={d="l"}, + [0x11175]={d="l"}, + [0x11176]={d="l"}, + [0x11180]={d="nsm"}, + [0x11181]={d="nsm"}, + [0x11182]={d="l"}, + [0x11183]={d="l"}, + [0x11184]={d="l"}, + [0x11185]={d="l"}, + [0x11186]={d="l"}, + [0x11187]={d="l"}, + [0x11188]={d="l"}, + [0x11189]={d="l"}, + [0x1118A]={d="l"}, + [0x1118B]={d="l"}, + [0x1118C]={d="l"}, + [0x1118D]={d="l"}, + [0x1118E]={d="l"}, + [0x1118F]={d="l"}, + [0x11190]={d="l"}, + [0x11191]={d="l"}, + [0x11192]={d="l"}, + [0x11193]={d="l"}, + [0x11194]={d="l"}, + [0x11195]={d="l"}, + [0x11196]={d="l"}, + [0x11197]={d="l"}, + [0x11198]={d="l"}, + [0x11199]={d="l"}, + [0x1119A]={d="l"}, + [0x1119B]={d="l"}, + [0x1119C]={d="l"}, + [0x1119D]={d="l"}, + [0x1119E]={d="l"}, + [0x1119F]={d="l"}, + [0x111A0]={d="l"}, + [0x111A1]={d="l"}, + [0x111A2]={d="l"}, + [0x111A3]={d="l"}, + [0x111A4]={d="l"}, + [0x111A5]={d="l"}, + [0x111A6]={d="l"}, + [0x111A7]={d="l"}, + [0x111A8]={d="l"}, + [0x111A9]={d="l"}, + [0x111AA]={d="l"}, + [0x111AB]={d="l"}, + [0x111AC]={d="l"}, + [0x111AD]={d="l"}, + [0x111AE]={d="l"}, + [0x111AF]={d="l"}, + [0x111B0]={d="l"}, + [0x111B1]={d="l"}, + [0x111B2]={d="l"}, + [0x111B3]={d="l"}, + [0x111B4]={d="l"}, + [0x111B5]={d="l"}, + [0x111B6]={d="nsm"}, + [0x111B7]={d="nsm"}, + [0x111B8]={d="nsm"}, + [0x111B9]={d="nsm"}, + [0x111BA]={d="nsm"}, + [0x111BB]={d="nsm"}, + [0x111BC]={d="nsm"}, + [0x111BD]={d="nsm"}, + [0x111BE]={d="nsm"}, + [0x111BF]={d="l"}, + [0x111C0]={d="l"}, + [0x111C1]={d="l"}, + [0x111C2]={d="l"}, + [0x111C3]={d="l"}, + [0x111C4]={d="l"}, + [0x111C5]={d="l"}, + [0x111C6]={d="l"}, + [0x111C7]={d="l"}, + [0x111C8]={d="l"}, + [0x111C9]={d="nsm"}, + [0x111CA]={d="nsm"}, + [0x111CB]={d="nsm"}, + [0x111CC]={d="nsm"}, + [0x111CD]={d="l"}, + [0x111CE]={d="l"}, + [0x111CF]={d="nsm"}, + [0x111D0]={d="l"}, + [0x111D1]={d="l"}, + [0x111D2]={d="l"}, + [0x111D3]={d="l"}, + [0x111D4]={d="l"}, + [0x111D5]={d="l"}, + [0x111D6]={d="l"}, + [0x111D7]={d="l"}, + [0x111D8]={d="l"}, + [0x111D9]={d="l"}, + [0x111DA]={d="l"}, + [0x111DB]={d="l"}, + [0x111DC]={d="l"}, + [0x111DD]={d="l"}, + [0x111DE]={d="l"}, + [0x111DF]={d="l"}, + [0x111E1]={d="l"}, + [0x111E2]={d="l"}, + [0x111E3]={d="l"}, + [0x111E4]={d="l"}, + [0x111E5]={d="l"}, + [0x111E6]={d="l"}, + [0x111E7]={d="l"}, + [0x111E8]={d="l"}, + [0x111E9]={d="l"}, + [0x111EA]={d="l"}, + [0x111EB]={d="l"}, + [0x111EC]={d="l"}, + [0x111ED]={d="l"}, + [0x111EE]={d="l"}, + [0x111EF]={d="l"}, + [0x111F0]={d="l"}, + [0x111F1]={d="l"}, + [0x111F2]={d="l"}, + [0x111F3]={d="l"}, + [0x111F4]={d="l"}, + [0x11200]={d="l"}, + [0x11201]={d="l"}, + [0x11202]={d="l"}, + [0x11203]={d="l"}, + [0x11204]={d="l"}, + [0x11205]={d="l"}, + [0x11206]={d="l"}, + [0x11207]={d="l"}, + [0x11208]={d="l"}, + [0x11209]={d="l"}, + [0x1120A]={d="l"}, + [0x1120B]={d="l"}, + [0x1120C]={d="l"}, + [0x1120D]={d="l"}, + [0x1120E]={d="l"}, + [0x1120F]={d="l"}, + [0x11210]={d="l"}, + [0x11211]={d="l"}, + [0x11213]={d="l"}, + [0x11214]={d="l"}, + [0x11215]={d="l"}, + [0x11216]={d="l"}, + [0x11217]={d="l"}, + [0x11218]={d="l"}, + [0x11219]={d="l"}, + [0x1121A]={d="l"}, + [0x1121B]={d="l"}, + [0x1121C]={d="l"}, + [0x1121D]={d="l"}, + [0x1121E]={d="l"}, + [0x1121F]={d="l"}, + [0x11220]={d="l"}, + [0x11221]={d="l"}, + [0x11222]={d="l"}, + [0x11223]={d="l"}, + [0x11224]={d="l"}, + [0x11225]={d="l"}, + [0x11226]={d="l"}, + [0x11227]={d="l"}, + [0x11228]={d="l"}, + [0x11229]={d="l"}, + [0x1122A]={d="l"}, + [0x1122B]={d="l"}, + [0x1122C]={d="l"}, + [0x1122D]={d="l"}, + [0x1122E]={d="l"}, + [0x1122F]={d="nsm"}, + [0x11230]={d="nsm"}, + [0x11231]={d="nsm"}, + [0x11232]={d="l"}, + [0x11233]={d="l"}, + [0x11234]={d="nsm"}, + [0x11235]={d="l"}, + [0x11236]={d="nsm"}, + [0x11237]={d="nsm"}, + [0x11238]={d="l"}, + [0x11239]={d="l"}, + [0x1123A]={d="l"}, + [0x1123B]={d="l"}, + [0x1123C]={d="l"}, + [0x1123D]={d="l"}, + [0x1123E]={d="nsm"}, + [0x1123F]={d="l"}, + [0x11240]={d="l"}, + [0x11241]={d="nsm"}, + [0x11280]={d="l"}, + [0x11281]={d="l"}, + [0x11282]={d="l"}, + [0x11283]={d="l"}, + [0x11284]={d="l"}, + [0x11285]={d="l"}, + [0x11286]={d="l"}, + [0x11288]={d="l"}, + [0x1128A]={d="l"}, + [0x1128B]={d="l"}, + [0x1128C]={d="l"}, + [0x1128D]={d="l"}, + [0x1128F]={d="l"}, + [0x11290]={d="l"}, + [0x11291]={d="l"}, + [0x11292]={d="l"}, + [0x11293]={d="l"}, + [0x11294]={d="l"}, + [0x11295]={d="l"}, + [0x11296]={d="l"}, + [0x11297]={d="l"}, + [0x11298]={d="l"}, + [0x11299]={d="l"}, + [0x1129A]={d="l"}, + [0x1129B]={d="l"}, + [0x1129C]={d="l"}, + [0x1129D]={d="l"}, + [0x1129F]={d="l"}, + [0x112A0]={d="l"}, + [0x112A1]={d="l"}, + [0x112A2]={d="l"}, + [0x112A3]={d="l"}, + [0x112A4]={d="l"}, + [0x112A5]={d="l"}, + [0x112A6]={d="l"}, + [0x112A7]={d="l"}, + [0x112A8]={d="l"}, + [0x112A9]={d="l"}, + [0x112B0]={d="l"}, + [0x112B1]={d="l"}, + [0x112B2]={d="l"}, + [0x112B3]={d="l"}, + [0x112B4]={d="l"}, + [0x112B5]={d="l"}, + [0x112B6]={d="l"}, + [0x112B7]={d="l"}, + [0x112B8]={d="l"}, + [0x112B9]={d="l"}, + [0x112BA]={d="l"}, + [0x112BB]={d="l"}, + [0x112BC]={d="l"}, + [0x112BD]={d="l"}, + [0x112BE]={d="l"}, + [0x112BF]={d="l"}, + [0x112C0]={d="l"}, + [0x112C1]={d="l"}, + [0x112C2]={d="l"}, + [0x112C3]={d="l"}, + [0x112C4]={d="l"}, + [0x112C5]={d="l"}, + [0x112C6]={d="l"}, + [0x112C7]={d="l"}, + [0x112C8]={d="l"}, + [0x112C9]={d="l"}, + [0x112CA]={d="l"}, + [0x112CB]={d="l"}, + [0x112CC]={d="l"}, + [0x112CD]={d="l"}, + [0x112CE]={d="l"}, + [0x112CF]={d="l"}, + [0x112D0]={d="l"}, + [0x112D1]={d="l"}, + [0x112D2]={d="l"}, + [0x112D3]={d="l"}, + [0x112D4]={d="l"}, + [0x112D5]={d="l"}, + [0x112D6]={d="l"}, + [0x112D7]={d="l"}, + [0x112D8]={d="l"}, + [0x112D9]={d="l"}, + [0x112DA]={d="l"}, + [0x112DB]={d="l"}, + [0x112DC]={d="l"}, + [0x112DD]={d="l"}, + [0x112DE]={d="l"}, + [0x112DF]={d="nsm"}, + [0x112E0]={d="l"}, + [0x112E1]={d="l"}, + [0x112E2]={d="l"}, + [0x112E3]={d="nsm"}, + [0x112E4]={d="nsm"}, + [0x112E5]={d="nsm"}, + [0x112E6]={d="nsm"}, + [0x112E7]={d="nsm"}, + [0x112E8]={d="nsm"}, + [0x112E9]={d="nsm"}, + [0x112EA]={d="nsm"}, + [0x112F0]={d="l"}, + [0x112F1]={d="l"}, + [0x112F2]={d="l"}, + [0x112F3]={d="l"}, + [0x112F4]={d="l"}, + [0x112F5]={d="l"}, + [0x112F6]={d="l"}, + [0x112F7]={d="l"}, + [0x112F8]={d="l"}, + [0x112F9]={d="l"}, + [0x11300]={d="nsm"}, + [0x11301]={d="nsm"}, + [0x11302]={d="l"}, + [0x11303]={d="l"}, + [0x11305]={d="l"}, + [0x11306]={d="l"}, + [0x11307]={d="l"}, + [0x11308]={d="l"}, + [0x11309]={d="l"}, + [0x1130A]={d="l"}, + [0x1130B]={d="l"}, + [0x1130C]={d="l"}, + [0x1130F]={d="l"}, + [0x11310]={d="l"}, + [0x11313]={d="l"}, + [0x11314]={d="l"}, + [0x11315]={d="l"}, + [0x11316]={d="l"}, + [0x11317]={d="l"}, + [0x11318]={d="l"}, + [0x11319]={d="l"}, + [0x1131A]={d="l"}, + [0x1131B]={d="l"}, + [0x1131C]={d="l"}, + [0x1131D]={d="l"}, + [0x1131E]={d="l"}, + [0x1131F]={d="l"}, + [0x11320]={d="l"}, + [0x11321]={d="l"}, + [0x11322]={d="l"}, + [0x11323]={d="l"}, + [0x11324]={d="l"}, + [0x11325]={d="l"}, + [0x11326]={d="l"}, + [0x11327]={d="l"}, + [0x11328]={d="l"}, + [0x1132A]={d="l"}, + [0x1132B]={d="l"}, + [0x1132C]={d="l"}, + [0x1132D]={d="l"}, + [0x1132E]={d="l"}, + [0x1132F]={d="l"}, + [0x11330]={d="l"}, + [0x11332]={d="l"}, + [0x11333]={d="l"}, + [0x11335]={d="l"}, + [0x11336]={d="l"}, + [0x11337]={d="l"}, + [0x11338]={d="l"}, + [0x11339]={d="l"}, + [0x1133B]={d="nsm"}, + [0x1133C]={d="nsm"}, + [0x1133D]={d="l"}, + [0x1133E]={d="l"}, + [0x1133F]={d="l"}, + [0x11340]={d="nsm"}, + [0x11341]={d="l"}, + [0x11342]={d="l"}, + [0x11343]={d="l"}, + [0x11344]={d="l"}, + [0x11347]={d="l"}, + [0x11348]={d="l"}, + [0x1134B]={d="l"}, + [0x1134C]={d="l"}, + [0x1134D]={d="l"}, + [0x11350]={d="l"}, + [0x11357]={d="l"}, + [0x1135D]={d="l"}, + [0x1135E]={d="l"}, + [0x1135F]={d="l"}, + [0x11360]={d="l"}, + [0x11361]={d="l"}, + [0x11362]={d="l"}, + [0x11363]={d="l"}, + [0x11366]={d="nsm"}, + [0x11367]={d="nsm"}, + [0x11368]={d="nsm"}, + [0x11369]={d="nsm"}, + [0x1136A]={d="nsm"}, + [0x1136B]={d="nsm"}, + [0x1136C]={d="nsm"}, + [0x11370]={d="nsm"}, + [0x11371]={d="nsm"}, + [0x11372]={d="nsm"}, + [0x11373]={d="nsm"}, + [0x11374]={d="nsm"}, + [0x11400]={d="l"}, + [0x11401]={d="l"}, + [0x11402]={d="l"}, + [0x11403]={d="l"}, + [0x11404]={d="l"}, + [0x11405]={d="l"}, + [0x11406]={d="l"}, + [0x11407]={d="l"}, + [0x11408]={d="l"}, + [0x11409]={d="l"}, + [0x1140A]={d="l"}, + [0x1140B]={d="l"}, + [0x1140C]={d="l"}, + [0x1140D]={d="l"}, + [0x1140E]={d="l"}, + [0x1140F]={d="l"}, + [0x11410]={d="l"}, + [0x11411]={d="l"}, + [0x11412]={d="l"}, + [0x11413]={d="l"}, + [0x11414]={d="l"}, + [0x11415]={d="l"}, + [0x11416]={d="l"}, + [0x11417]={d="l"}, + [0x11418]={d="l"}, + [0x11419]={d="l"}, + [0x1141A]={d="l"}, + [0x1141B]={d="l"}, + [0x1141C]={d="l"}, + [0x1141D]={d="l"}, + [0x1141E]={d="l"}, + [0x1141F]={d="l"}, + [0x11420]={d="l"}, + [0x11421]={d="l"}, + [0x11422]={d="l"}, + [0x11423]={d="l"}, + [0x11424]={d="l"}, + [0x11425]={d="l"}, + [0x11426]={d="l"}, + [0x11427]={d="l"}, + [0x11428]={d="l"}, + [0x11429]={d="l"}, + [0x1142A]={d="l"}, + [0x1142B]={d="l"}, + [0x1142C]={d="l"}, + [0x1142D]={d="l"}, + [0x1142E]={d="l"}, + [0x1142F]={d="l"}, + [0x11430]={d="l"}, + [0x11431]={d="l"}, + [0x11432]={d="l"}, + [0x11433]={d="l"}, + [0x11434]={d="l"}, + [0x11435]={d="l"}, + [0x11436]={d="l"}, + [0x11437]={d="l"}, + [0x11438]={d="nsm"}, + [0x11439]={d="nsm"}, + [0x1143A]={d="nsm"}, + [0x1143B]={d="nsm"}, + [0x1143C]={d="nsm"}, + [0x1143D]={d="nsm"}, + [0x1143E]={d="nsm"}, + [0x1143F]={d="nsm"}, + [0x11440]={d="l"}, + [0x11441]={d="l"}, + [0x11442]={d="nsm"}, + [0x11443]={d="nsm"}, + [0x11444]={d="nsm"}, + [0x11445]={d="l"}, + [0x11446]={d="nsm"}, + [0x11447]={d="l"}, + [0x11448]={d="l"}, + [0x11449]={d="l"}, + [0x1144A]={d="l"}, + [0x1144B]={d="l"}, + [0x1144C]={d="l"}, + [0x1144D]={d="l"}, + [0x1144E]={d="l"}, + [0x1144F]={d="l"}, + [0x11450]={d="l"}, + [0x11451]={d="l"}, + [0x11452]={d="l"}, + [0x11453]={d="l"}, + [0x11454]={d="l"}, + [0x11455]={d="l"}, + [0x11456]={d="l"}, + [0x11457]={d="l"}, + [0x11458]={d="l"}, + [0x11459]={d="l"}, + [0x1145A]={d="l"}, + [0x1145B]={d="l"}, + [0x1145D]={d="l"}, + [0x1145E]={d="nsm"}, + [0x1145F]={d="l"}, + [0x11460]={d="l"}, + [0x11461]={d="l"}, + [0x11480]={d="l"}, + [0x11481]={d="l"}, + [0x11482]={d="l"}, + [0x11483]={d="l"}, + [0x11484]={d="l"}, + [0x11485]={d="l"}, + [0x11486]={d="l"}, + [0x11487]={d="l"}, + [0x11488]={d="l"}, + [0x11489]={d="l"}, + [0x1148A]={d="l"}, + [0x1148B]={d="l"}, + [0x1148C]={d="l"}, + [0x1148D]={d="l"}, + [0x1148E]={d="l"}, + [0x1148F]={d="l"}, + [0x11490]={d="l"}, + [0x11491]={d="l"}, + [0x11492]={d="l"}, + [0x11493]={d="l"}, + [0x11494]={d="l"}, + [0x11495]={d="l"}, + [0x11496]={d="l"}, + [0x11497]={d="l"}, + [0x11498]={d="l"}, + [0x11499]={d="l"}, + [0x1149A]={d="l"}, + [0x1149B]={d="l"}, + [0x1149C]={d="l"}, + [0x1149D]={d="l"}, + [0x1149E]={d="l"}, + [0x1149F]={d="l"}, + [0x114A0]={d="l"}, + [0x114A1]={d="l"}, + [0x114A2]={d="l"}, + [0x114A3]={d="l"}, + [0x114A4]={d="l"}, + [0x114A5]={d="l"}, + [0x114A6]={d="l"}, + [0x114A7]={d="l"}, + [0x114A8]={d="l"}, + [0x114A9]={d="l"}, + [0x114AA]={d="l"}, + [0x114AB]={d="l"}, + [0x114AC]={d="l"}, + [0x114AD]={d="l"}, + [0x114AE]={d="l"}, + [0x114AF]={d="l"}, + [0x114B0]={d="l"}, + [0x114B1]={d="l"}, + [0x114B2]={d="l"}, + [0x114B3]={d="nsm"}, + [0x114B4]={d="nsm"}, + [0x114B5]={d="nsm"}, + [0x114B6]={d="nsm"}, + [0x114B7]={d="nsm"}, + [0x114B8]={d="nsm"}, + [0x114B9]={d="l"}, + [0x114BA]={d="nsm"}, + [0x114BB]={d="l"}, + [0x114BC]={d="l"}, + [0x114BD]={d="l"}, + [0x114BE]={d="l"}, + [0x114BF]={d="nsm"}, + [0x114C0]={d="nsm"}, + [0x114C1]={d="l"}, + [0x114C2]={d="nsm"}, + [0x114C3]={d="nsm"}, + [0x114C4]={d="l"}, + [0x114C5]={d="l"}, + [0x114C6]={d="l"}, + [0x114C7]={d="l"}, + [0x114D0]={d="l"}, + [0x114D1]={d="l"}, + [0x114D2]={d="l"}, + [0x114D3]={d="l"}, + [0x114D4]={d="l"}, + [0x114D5]={d="l"}, + [0x114D6]={d="l"}, + [0x114D7]={d="l"}, + [0x114D8]={d="l"}, + [0x114D9]={d="l"}, + [0x11580]={d="l"}, + [0x11581]={d="l"}, + [0x11582]={d="l"}, + [0x11583]={d="l"}, + [0x11584]={d="l"}, + [0x11585]={d="l"}, + [0x11586]={d="l"}, + [0x11587]={d="l"}, + [0x11588]={d="l"}, + [0x11589]={d="l"}, + [0x1158A]={d="l"}, + [0x1158B]={d="l"}, + [0x1158C]={d="l"}, + [0x1158D]={d="l"}, + [0x1158E]={d="l"}, + [0x1158F]={d="l"}, + [0x11590]={d="l"}, + [0x11591]={d="l"}, + [0x11592]={d="l"}, + [0x11593]={d="l"}, + [0x11594]={d="l"}, + [0x11595]={d="l"}, + [0x11596]={d="l"}, + [0x11597]={d="l"}, + [0x11598]={d="l"}, + [0x11599]={d="l"}, + [0x1159A]={d="l"}, + [0x1159B]={d="l"}, + [0x1159C]={d="l"}, + [0x1159D]={d="l"}, + [0x1159E]={d="l"}, + [0x1159F]={d="l"}, + [0x115A0]={d="l"}, + [0x115A1]={d="l"}, + [0x115A2]={d="l"}, + [0x115A3]={d="l"}, + [0x115A4]={d="l"}, + [0x115A5]={d="l"}, + [0x115A6]={d="l"}, + [0x115A7]={d="l"}, + [0x115A8]={d="l"}, + [0x115A9]={d="l"}, + [0x115AA]={d="l"}, + [0x115AB]={d="l"}, + [0x115AC]={d="l"}, + [0x115AD]={d="l"}, + [0x115AE]={d="l"}, + [0x115AF]={d="l"}, + [0x115B0]={d="l"}, + [0x115B1]={d="l"}, + [0x115B2]={d="nsm"}, + [0x115B3]={d="nsm"}, + [0x115B4]={d="nsm"}, + [0x115B5]={d="nsm"}, + [0x115B8]={d="l"}, + [0x115B9]={d="l"}, + [0x115BA]={d="l"}, + [0x115BB]={d="l"}, + [0x115BC]={d="nsm"}, + [0x115BD]={d="nsm"}, + [0x115BE]={d="l"}, + [0x115BF]={d="nsm"}, + [0x115C0]={d="nsm"}, + [0x115C1]={d="l"}, + [0x115C2]={d="l"}, + [0x115C3]={d="l"}, + [0x115C4]={d="l"}, + [0x115C5]={d="l"}, + [0x115C6]={d="l"}, + [0x115C7]={d="l"}, + [0x115C8]={d="l"}, + [0x115C9]={d="l"}, + [0x115CA]={d="l"}, + [0x115CB]={d="l"}, + [0x115CC]={d="l"}, + [0x115CD]={d="l"}, + [0x115CE]={d="l"}, + [0x115CF]={d="l"}, + [0x115D0]={d="l"}, + [0x115D1]={d="l"}, + [0x115D2]={d="l"}, + [0x115D3]={d="l"}, + [0x115D4]={d="l"}, + [0x115D5]={d="l"}, + [0x115D6]={d="l"}, + [0x115D7]={d="l"}, + [0x115D8]={d="l"}, + [0x115D9]={d="l"}, + [0x115DA]={d="l"}, + [0x115DB]={d="l"}, + [0x115DC]={d="nsm"}, + [0x115DD]={d="nsm"}, + [0x11600]={d="l"}, + [0x11601]={d="l"}, + [0x11602]={d="l"}, + [0x11603]={d="l"}, + [0x11604]={d="l"}, + [0x11605]={d="l"}, + [0x11606]={d="l"}, + [0x11607]={d="l"}, + [0x11608]={d="l"}, + [0x11609]={d="l"}, + [0x1160A]={d="l"}, + [0x1160B]={d="l"}, + [0x1160C]={d="l"}, + [0x1160D]={d="l"}, + [0x1160E]={d="l"}, + [0x1160F]={d="l"}, + [0x11610]={d="l"}, + [0x11611]={d="l"}, + [0x11612]={d="l"}, + [0x11613]={d="l"}, + [0x11614]={d="l"}, + [0x11615]={d="l"}, + [0x11616]={d="l"}, + [0x11617]={d="l"}, + [0x11618]={d="l"}, + [0x11619]={d="l"}, + [0x1161A]={d="l"}, + [0x1161B]={d="l"}, + [0x1161C]={d="l"}, + [0x1161D]={d="l"}, + [0x1161E]={d="l"}, + [0x1161F]={d="l"}, + [0x11620]={d="l"}, + [0x11621]={d="l"}, + [0x11622]={d="l"}, + [0x11623]={d="l"}, + [0x11624]={d="l"}, + [0x11625]={d="l"}, + [0x11626]={d="l"}, + [0x11627]={d="l"}, + [0x11628]={d="l"}, + [0x11629]={d="l"}, + [0x1162A]={d="l"}, + [0x1162B]={d="l"}, + [0x1162C]={d="l"}, + [0x1162D]={d="l"}, + [0x1162E]={d="l"}, + [0x1162F]={d="l"}, + [0x11630]={d="l"}, + [0x11631]={d="l"}, + [0x11632]={d="l"}, + [0x11633]={d="nsm"}, + [0x11634]={d="nsm"}, + [0x11635]={d="nsm"}, + [0x11636]={d="nsm"}, + [0x11637]={d="nsm"}, + [0x11638]={d="nsm"}, + [0x11639]={d="nsm"}, + [0x1163A]={d="nsm"}, + [0x1163B]={d="l"}, + [0x1163C]={d="l"}, + [0x1163D]={d="nsm"}, + [0x1163E]={d="l"}, + [0x1163F]={d="nsm"}, + [0x11640]={d="nsm"}, + [0x11641]={d="l"}, + [0x11642]={d="l"}, + [0x11643]={d="l"}, + [0x11644]={d="l"}, + [0x11650]={d="l"}, + [0x11651]={d="l"}, + [0x11652]={d="l"}, + [0x11653]={d="l"}, + [0x11654]={d="l"}, + [0x11655]={d="l"}, + [0x11656]={d="l"}, + [0x11657]={d="l"}, + [0x11658]={d="l"}, + [0x11659]={d="l"}, + [0x11660]={d="on"}, + [0x11661]={d="on"}, + [0x11662]={d="on"}, + [0x11663]={d="on"}, + [0x11664]={d="on"}, + [0x11665]={d="on"}, + [0x11666]={d="on"}, + [0x11667]={d="on"}, + [0x11668]={d="on"}, + [0x11669]={d="on"}, + [0x1166A]={d="on"}, + [0x1166B]={d="on"}, + [0x1166C]={d="on"}, + [0x11680]={d="l"}, + [0x11681]={d="l"}, + [0x11682]={d="l"}, + [0x11683]={d="l"}, + [0x11684]={d="l"}, + [0x11685]={d="l"}, + [0x11686]={d="l"}, + [0x11687]={d="l"}, + [0x11688]={d="l"}, + [0x11689]={d="l"}, + [0x1168A]={d="l"}, + [0x1168B]={d="l"}, + [0x1168C]={d="l"}, + [0x1168D]={d="l"}, + [0x1168E]={d="l"}, + [0x1168F]={d="l"}, + [0x11690]={d="l"}, + [0x11691]={d="l"}, + [0x11692]={d="l"}, + [0x11693]={d="l"}, + [0x11694]={d="l"}, + [0x11695]={d="l"}, + [0x11696]={d="l"}, + [0x11697]={d="l"}, + [0x11698]={d="l"}, + [0x11699]={d="l"}, + [0x1169A]={d="l"}, + [0x1169B]={d="l"}, + [0x1169C]={d="l"}, + [0x1169D]={d="l"}, + [0x1169E]={d="l"}, + [0x1169F]={d="l"}, + [0x116A0]={d="l"}, + [0x116A1]={d="l"}, + [0x116A2]={d="l"}, + [0x116A3]={d="l"}, + [0x116A4]={d="l"}, + [0x116A5]={d="l"}, + [0x116A6]={d="l"}, + [0x116A7]={d="l"}, + [0x116A8]={d="l"}, + [0x116A9]={d="l"}, + [0x116AA]={d="l"}, + [0x116AB]={d="nsm"}, + [0x116AC]={d="l"}, + [0x116AD]={d="nsm"}, + [0x116AE]={d="l"}, + [0x116AF]={d="l"}, + [0x116B0]={d="nsm"}, + [0x116B1]={d="nsm"}, + [0x116B2]={d="nsm"}, + [0x116B3]={d="nsm"}, + [0x116B4]={d="nsm"}, + [0x116B5]={d="nsm"}, + [0x116B6]={d="l"}, + [0x116B7]={d="nsm"}, + [0x116B8]={d="l"}, + [0x116B9]={d="l"}, + [0x116C0]={d="l"}, + [0x116C1]={d="l"}, + [0x116C2]={d="l"}, + [0x116C3]={d="l"}, + [0x116C4]={d="l"}, + [0x116C5]={d="l"}, + [0x116C6]={d="l"}, + [0x116C7]={d="l"}, + [0x116C8]={d="l"}, + [0x116C9]={d="l"}, + [0x11700]={d="l"}, + [0x11701]={d="l"}, + [0x11702]={d="l"}, + [0x11703]={d="l"}, + [0x11704]={d="l"}, + [0x11705]={d="l"}, + [0x11706]={d="l"}, + [0x11707]={d="l"}, + [0x11708]={d="l"}, + [0x11709]={d="l"}, + [0x1170A]={d="l"}, + [0x1170B]={d="l"}, + [0x1170C]={d="l"}, + [0x1170D]={d="l"}, + [0x1170E]={d="l"}, + [0x1170F]={d="l"}, + [0x11710]={d="l"}, + [0x11711]={d="l"}, + [0x11712]={d="l"}, + [0x11713]={d="l"}, + [0x11714]={d="l"}, + [0x11715]={d="l"}, + [0x11716]={d="l"}, + [0x11717]={d="l"}, + [0x11718]={d="l"}, + [0x11719]={d="l"}, + [0x1171A]={d="l"}, + [0x1171D]={d="nsm"}, + [0x1171E]={d="nsm"}, + [0x1171F]={d="nsm"}, + [0x11720]={d="l"}, + [0x11721]={d="l"}, + [0x11722]={d="nsm"}, + [0x11723]={d="nsm"}, + [0x11724]={d="nsm"}, + [0x11725]={d="nsm"}, + [0x11726]={d="l"}, + [0x11727]={d="nsm"}, + [0x11728]={d="nsm"}, + [0x11729]={d="nsm"}, + [0x1172A]={d="nsm"}, + [0x1172B]={d="nsm"}, + [0x11730]={d="l"}, + [0x11731]={d="l"}, + [0x11732]={d="l"}, + [0x11733]={d="l"}, + [0x11734]={d="l"}, + [0x11735]={d="l"}, + [0x11736]={d="l"}, + [0x11737]={d="l"}, + [0x11738]={d="l"}, + [0x11739]={d="l"}, + [0x1173A]={d="l"}, + [0x1173B]={d="l"}, + [0x1173C]={d="l"}, + [0x1173D]={d="l"}, + [0x1173E]={d="l"}, + [0x1173F]={d="l"}, + [0x11740]={d="l"}, + [0x11741]={d="l"}, + [0x11742]={d="l"}, + [0x11743]={d="l"}, + [0x11744]={d="l"}, + [0x11745]={d="l"}, + [0x11746]={d="l"}, + [0x11800]={d="l"}, + [0x11801]={d="l"}, + [0x11802]={d="l"}, + [0x11803]={d="l"}, + [0x11804]={d="l"}, + [0x11805]={d="l"}, + [0x11806]={d="l"}, + [0x11807]={d="l"}, + [0x11808]={d="l"}, + [0x11809]={d="l"}, + [0x1180A]={d="l"}, + [0x1180B]={d="l"}, + [0x1180C]={d="l"}, + [0x1180D]={d="l"}, + [0x1180E]={d="l"}, + [0x1180F]={d="l"}, + [0x11810]={d="l"}, + [0x11811]={d="l"}, + [0x11812]={d="l"}, + [0x11813]={d="l"}, + [0x11814]={d="l"}, + [0x11815]={d="l"}, + [0x11816]={d="l"}, + [0x11817]={d="l"}, + [0x11818]={d="l"}, + [0x11819]={d="l"}, + [0x1181A]={d="l"}, + [0x1181B]={d="l"}, + [0x1181C]={d="l"}, + [0x1181D]={d="l"}, + [0x1181E]={d="l"}, + [0x1181F]={d="l"}, + [0x11820]={d="l"}, + [0x11821]={d="l"}, + [0x11822]={d="l"}, + [0x11823]={d="l"}, + [0x11824]={d="l"}, + [0x11825]={d="l"}, + [0x11826]={d="l"}, + [0x11827]={d="l"}, + [0x11828]={d="l"}, + [0x11829]={d="l"}, + [0x1182A]={d="l"}, + [0x1182B]={d="l"}, + [0x1182C]={d="l"}, + [0x1182D]={d="l"}, + [0x1182E]={d="l"}, + [0x1182F]={d="nsm"}, + [0x11830]={d="nsm"}, + [0x11831]={d="nsm"}, + [0x11832]={d="nsm"}, + [0x11833]={d="nsm"}, + [0x11834]={d="nsm"}, + [0x11835]={d="nsm"}, + [0x11836]={d="nsm"}, + [0x11837]={d="nsm"}, + [0x11838]={d="l"}, + [0x11839]={d="nsm"}, + [0x1183A]={d="nsm"}, + [0x1183B]={d="l"}, + [0x118A0]={d="l"}, + [0x118A1]={d="l"}, + [0x118A2]={d="l"}, + [0x118A3]={d="l"}, + [0x118A4]={d="l"}, + [0x118A5]={d="l"}, + [0x118A6]={d="l"}, + [0x118A7]={d="l"}, + [0x118A8]={d="l"}, + [0x118A9]={d="l"}, + [0x118AA]={d="l"}, + [0x118AB]={d="l"}, + [0x118AC]={d="l"}, + [0x118AD]={d="l"}, + [0x118AE]={d="l"}, + [0x118AF]={d="l"}, + [0x118B0]={d="l"}, + [0x118B1]={d="l"}, + [0x118B2]={d="l"}, + [0x118B3]={d="l"}, + [0x118B4]={d="l"}, + [0x118B5]={d="l"}, + [0x118B6]={d="l"}, + [0x118B7]={d="l"}, + [0x118B8]={d="l"}, + [0x118B9]={d="l"}, + [0x118BA]={d="l"}, + [0x118BB]={d="l"}, + [0x118BC]={d="l"}, + [0x118BD]={d="l"}, + [0x118BE]={d="l"}, + [0x118BF]={d="l"}, + [0x118C0]={d="l"}, + [0x118C1]={d="l"}, + [0x118C2]={d="l"}, + [0x118C3]={d="l"}, + [0x118C4]={d="l"}, + [0x118C5]={d="l"}, + [0x118C6]={d="l"}, + [0x118C7]={d="l"}, + [0x118C8]={d="l"}, + [0x118C9]={d="l"}, + [0x118CA]={d="l"}, + [0x118CB]={d="l"}, + [0x118CC]={d="l"}, + [0x118CD]={d="l"}, + [0x118CE]={d="l"}, + [0x118CF]={d="l"}, + [0x118D0]={d="l"}, + [0x118D1]={d="l"}, + [0x118D2]={d="l"}, + [0x118D3]={d="l"}, + [0x118D4]={d="l"}, + [0x118D5]={d="l"}, + [0x118D6]={d="l"}, + [0x118D7]={d="l"}, + [0x118D8]={d="l"}, + [0x118D9]={d="l"}, + [0x118DA]={d="l"}, + [0x118DB]={d="l"}, + [0x118DC]={d="l"}, + [0x118DD]={d="l"}, + [0x118DE]={d="l"}, + [0x118DF]={d="l"}, + [0x118E0]={d="l"}, + [0x118E1]={d="l"}, + [0x118E2]={d="l"}, + [0x118E3]={d="l"}, + [0x118E4]={d="l"}, + [0x118E5]={d="l"}, + [0x118E6]={d="l"}, + [0x118E7]={d="l"}, + [0x118E8]={d="l"}, + [0x118E9]={d="l"}, + [0x118EA]={d="l"}, + [0x118EB]={d="l"}, + [0x118EC]={d="l"}, + [0x118ED]={d="l"}, + [0x118EE]={d="l"}, + [0x118EF]={d="l"}, + [0x118F0]={d="l"}, + [0x118F1]={d="l"}, + [0x118F2]={d="l"}, + [0x118FF]={d="l"}, + [0x11900]={d="l"}, + [0x11901]={d="l"}, + [0x11902]={d="l"}, + [0x11903]={d="l"}, + [0x11904]={d="l"}, + [0x11905]={d="l"}, + [0x11906]={d="l"}, + [0x11909]={d="l"}, + [0x1190C]={d="l"}, + [0x1190D]={d="l"}, + [0x1190E]={d="l"}, + [0x1190F]={d="l"}, + [0x11910]={d="l"}, + [0x11911]={d="l"}, + [0x11912]={d="l"}, + [0x11913]={d="l"}, + [0x11915]={d="l"}, + [0x11916]={d="l"}, + [0x11918]={d="l"}, + [0x11919]={d="l"}, + [0x1191A]={d="l"}, + [0x1191B]={d="l"}, + [0x1191C]={d="l"}, + [0x1191D]={d="l"}, + [0x1191E]={d="l"}, + [0x1191F]={d="l"}, + [0x11920]={d="l"}, + [0x11921]={d="l"}, + [0x11922]={d="l"}, + [0x11923]={d="l"}, + [0x11924]={d="l"}, + [0x11925]={d="l"}, + [0x11926]={d="l"}, + [0x11927]={d="l"}, + [0x11928]={d="l"}, + [0x11929]={d="l"}, + [0x1192A]={d="l"}, + [0x1192B]={d="l"}, + [0x1192C]={d="l"}, + [0x1192D]={d="l"}, + [0x1192E]={d="l"}, + [0x1192F]={d="l"}, + [0x11930]={d="l"}, + [0x11931]={d="l"}, + [0x11932]={d="l"}, + [0x11933]={d="l"}, + [0x11934]={d="l"}, + [0x11935]={d="l"}, + [0x11937]={d="l"}, + [0x11938]={d="l"}, + [0x1193B]={d="nsm"}, + [0x1193C]={d="nsm"}, + [0x1193D]={d="l"}, + [0x1193E]={d="nsm"}, + [0x1193F]={d="l"}, + [0x11940]={d="l"}, + [0x11941]={d="l"}, + [0x11942]={d="l"}, + [0x11943]={d="nsm"}, + [0x11944]={d="l"}, + [0x11945]={d="l"}, + [0x11946]={d="l"}, + [0x11950]={d="l"}, + [0x11951]={d="l"}, + [0x11952]={d="l"}, + [0x11953]={d="l"}, + [0x11954]={d="l"}, + [0x11955]={d="l"}, + [0x11956]={d="l"}, + [0x11957]={d="l"}, + [0x11958]={d="l"}, + [0x11959]={d="l"}, + [0x119A0]={d="l"}, + [0x119A1]={d="l"}, + [0x119A2]={d="l"}, + [0x119A3]={d="l"}, + [0x119A4]={d="l"}, + [0x119A5]={d="l"}, + [0x119A6]={d="l"}, + [0x119A7]={d="l"}, + [0x119AA]={d="l"}, + [0x119AB]={d="l"}, + [0x119AC]={d="l"}, + [0x119AD]={d="l"}, + [0x119AE]={d="l"}, + [0x119AF]={d="l"}, + [0x119B0]={d="l"}, + [0x119B1]={d="l"}, + [0x119B2]={d="l"}, + [0x119B3]={d="l"}, + [0x119B4]={d="l"}, + [0x119B5]={d="l"}, + [0x119B6]={d="l"}, + [0x119B7]={d="l"}, + [0x119B8]={d="l"}, + [0x119B9]={d="l"}, + [0x119BA]={d="l"}, + [0x119BB]={d="l"}, + [0x119BC]={d="l"}, + [0x119BD]={d="l"}, + [0x119BE]={d="l"}, + [0x119BF]={d="l"}, + [0x119C0]={d="l"}, + [0x119C1]={d="l"}, + [0x119C2]={d="l"}, + [0x119C3]={d="l"}, + [0x119C4]={d="l"}, + [0x119C5]={d="l"}, + [0x119C6]={d="l"}, + [0x119C7]={d="l"}, + [0x119C8]={d="l"}, + [0x119C9]={d="l"}, + [0x119CA]={d="l"}, + [0x119CB]={d="l"}, + [0x119CC]={d="l"}, + [0x119CD]={d="l"}, + [0x119CE]={d="l"}, + [0x119CF]={d="l"}, + [0x119D0]={d="l"}, + [0x119D1]={d="l"}, + [0x119D2]={d="l"}, + [0x119D3]={d="l"}, + [0x119D4]={d="nsm"}, + [0x119D5]={d="nsm"}, + [0x119D6]={d="nsm"}, + [0x119D7]={d="nsm"}, + [0x119DA]={d="nsm"}, + [0x119DB]={d="nsm"}, + [0x119DC]={d="l"}, + [0x119DD]={d="l"}, + [0x119DE]={d="l"}, + [0x119DF]={d="l"}, + [0x119E0]={d="nsm"}, + [0x119E1]={d="l"}, + [0x119E2]={d="l"}, + [0x119E3]={d="l"}, + [0x119E4]={d="l"}, + [0x11A00]={d="l"}, + [0x11A01]={d="nsm"}, + [0x11A02]={d="nsm"}, + [0x11A03]={d="nsm"}, + [0x11A04]={d="nsm"}, + [0x11A05]={d="nsm"}, + [0x11A06]={d="nsm"}, + [0x11A07]={d="l"}, + [0x11A08]={d="l"}, + [0x11A09]={d="nsm"}, + [0x11A0A]={d="nsm"}, + [0x11A0B]={d="l"}, + [0x11A0C]={d="l"}, + [0x11A0D]={d="l"}, + [0x11A0E]={d="l"}, + [0x11A0F]={d="l"}, + [0x11A10]={d="l"}, + [0x11A11]={d="l"}, + [0x11A12]={d="l"}, + [0x11A13]={d="l"}, + [0x11A14]={d="l"}, + [0x11A15]={d="l"}, + [0x11A16]={d="l"}, + [0x11A17]={d="l"}, + [0x11A18]={d="l"}, + [0x11A19]={d="l"}, + [0x11A1A]={d="l"}, + [0x11A1B]={d="l"}, + [0x11A1C]={d="l"}, + [0x11A1D]={d="l"}, + [0x11A1E]={d="l"}, + [0x11A1F]={d="l"}, + [0x11A20]={d="l"}, + [0x11A21]={d="l"}, + [0x11A22]={d="l"}, + [0x11A23]={d="l"}, + [0x11A24]={d="l"}, + [0x11A25]={d="l"}, + [0x11A26]={d="l"}, + [0x11A27]={d="l"}, + [0x11A28]={d="l"}, + [0x11A29]={d="l"}, + [0x11A2A]={d="l"}, + [0x11A2B]={d="l"}, + [0x11A2C]={d="l"}, + [0x11A2D]={d="l"}, + [0x11A2E]={d="l"}, + [0x11A2F]={d="l"}, + [0x11A30]={d="l"}, + [0x11A31]={d="l"}, + [0x11A32]={d="l"}, + [0x11A33]={d="nsm"}, + [0x11A34]={d="nsm"}, + [0x11A35]={d="nsm"}, + [0x11A36]={d="nsm"}, + [0x11A37]={d="nsm"}, + [0x11A38]={d="nsm"}, + [0x11A39]={d="l"}, + [0x11A3A]={d="l"}, + [0x11A3B]={d="nsm"}, + [0x11A3C]={d="nsm"}, + [0x11A3D]={d="nsm"}, + [0x11A3E]={d="nsm"}, + [0x11A3F]={d="l"}, + [0x11A40]={d="l"}, + [0x11A41]={d="l"}, + [0x11A42]={d="l"}, + [0x11A43]={d="l"}, + [0x11A44]={d="l"}, + [0x11A45]={d="l"}, + [0x11A46]={d="l"}, + [0x11A47]={d="nsm"}, + [0x11A50]={d="l"}, + [0x11A51]={d="nsm"}, + [0x11A52]={d="nsm"}, + [0x11A53]={d="nsm"}, + [0x11A54]={d="nsm"}, + [0x11A55]={d="nsm"}, + [0x11A56]={d="nsm"}, + [0x11A57]={d="l"}, + [0x11A58]={d="l"}, + [0x11A59]={d="nsm"}, + [0x11A5A]={d="nsm"}, + [0x11A5B]={d="nsm"}, + [0x11A5C]={d="l"}, + [0x11A5D]={d="l"}, + [0x11A5E]={d="l"}, + [0x11A5F]={d="l"}, + [0x11A60]={d="l"}, + [0x11A61]={d="l"}, + [0x11A62]={d="l"}, + [0x11A63]={d="l"}, + [0x11A64]={d="l"}, + [0x11A65]={d="l"}, + [0x11A66]={d="l"}, + [0x11A67]={d="l"}, + [0x11A68]={d="l"}, + [0x11A69]={d="l"}, + [0x11A6A]={d="l"}, + [0x11A6B]={d="l"}, + [0x11A6C]={d="l"}, + [0x11A6D]={d="l"}, + [0x11A6E]={d="l"}, + [0x11A6F]={d="l"}, + [0x11A70]={d="l"}, + [0x11A71]={d="l"}, + [0x11A72]={d="l"}, + [0x11A73]={d="l"}, + [0x11A74]={d="l"}, + [0x11A75]={d="l"}, + [0x11A76]={d="l"}, + [0x11A77]={d="l"}, + [0x11A78]={d="l"}, + [0x11A79]={d="l"}, + [0x11A7A]={d="l"}, + [0x11A7B]={d="l"}, + [0x11A7C]={d="l"}, + [0x11A7D]={d="l"}, + [0x11A7E]={d="l"}, + [0x11A7F]={d="l"}, + [0x11A80]={d="l"}, + [0x11A81]={d="l"}, + [0x11A82]={d="l"}, + [0x11A83]={d="l"}, + [0x11A84]={d="l"}, + [0x11A85]={d="l"}, + [0x11A86]={d="l"}, + [0x11A87]={d="l"}, + [0x11A88]={d="l"}, + [0x11A89]={d="l"}, + [0x11A8A]={d="nsm"}, + [0x11A8B]={d="nsm"}, + [0x11A8C]={d="nsm"}, + [0x11A8D]={d="nsm"}, + [0x11A8E]={d="nsm"}, + [0x11A8F]={d="nsm"}, + [0x11A90]={d="nsm"}, + [0x11A91]={d="nsm"}, + [0x11A92]={d="nsm"}, + [0x11A93]={d="nsm"}, + [0x11A94]={d="nsm"}, + [0x11A95]={d="nsm"}, + [0x11A96]={d="nsm"}, + [0x11A97]={d="l"}, + [0x11A98]={d="nsm"}, + [0x11A99]={d="nsm"}, + [0x11A9A]={d="l"}, + [0x11A9B]={d="l"}, + [0x11A9C]={d="l"}, + [0x11A9D]={d="l"}, + [0x11A9E]={d="l"}, + [0x11A9F]={d="l"}, + [0x11AA0]={d="l"}, + [0x11AA1]={d="l"}, + [0x11AA2]={d="l"}, + [0x11AB0]={d="l"}, + [0x11AB1]={d="l"}, + [0x11AB2]={d="l"}, + [0x11AB3]={d="l"}, + [0x11AB4]={d="l"}, + [0x11AB5]={d="l"}, + [0x11AB6]={d="l"}, + [0x11AB7]={d="l"}, + [0x11AB8]={d="l"}, + [0x11AB9]={d="l"}, + [0x11ABA]={d="l"}, + [0x11ABB]={d="l"}, + [0x11ABC]={d="l"}, + [0x11ABD]={d="l"}, + [0x11ABE]={d="l"}, + [0x11ABF]={d="l"}, + [0x11AC0]={d="l"}, + [0x11AC1]={d="l"}, + [0x11AC2]={d="l"}, + [0x11AC3]={d="l"}, + [0x11AC4]={d="l"}, + [0x11AC5]={d="l"}, + [0x11AC6]={d="l"}, + [0x11AC7]={d="l"}, + [0x11AC8]={d="l"}, + [0x11AC9]={d="l"}, + [0x11ACA]={d="l"}, + [0x11ACB]={d="l"}, + [0x11ACC]={d="l"}, + [0x11ACD]={d="l"}, + [0x11ACE]={d="l"}, + [0x11ACF]={d="l"}, + [0x11AD0]={d="l"}, + [0x11AD1]={d="l"}, + [0x11AD2]={d="l"}, + [0x11AD3]={d="l"}, + [0x11AD4]={d="l"}, + [0x11AD5]={d="l"}, + [0x11AD6]={d="l"}, + [0x11AD7]={d="l"}, + [0x11AD8]={d="l"}, + [0x11AD9]={d="l"}, + [0x11ADA]={d="l"}, + [0x11ADB]={d="l"}, + [0x11ADC]={d="l"}, + [0x11ADD]={d="l"}, + [0x11ADE]={d="l"}, + [0x11ADF]={d="l"}, + [0x11AE0]={d="l"}, + [0x11AE1]={d="l"}, + [0x11AE2]={d="l"}, + [0x11AE3]={d="l"}, + [0x11AE4]={d="l"}, + [0x11AE5]={d="l"}, + [0x11AE6]={d="l"}, + [0x11AE7]={d="l"}, + [0x11AE8]={d="l"}, + [0x11AE9]={d="l"}, + [0x11AEA]={d="l"}, + [0x11AEB]={d="l"}, + [0x11AEC]={d="l"}, + [0x11AED]={d="l"}, + [0x11AEE]={d="l"}, + [0x11AEF]={d="l"}, + [0x11AF0]={d="l"}, + [0x11AF1]={d="l"}, + [0x11AF2]={d="l"}, + [0x11AF3]={d="l"}, + [0x11AF4]={d="l"}, + [0x11AF5]={d="l"}, + [0x11AF6]={d="l"}, + [0x11AF7]={d="l"}, + [0x11AF8]={d="l"}, + [0x11B00]={d="l"}, + [0x11B01]={d="l"}, + [0x11B02]={d="l"}, + [0x11B03]={d="l"}, + [0x11B04]={d="l"}, + [0x11B05]={d="l"}, + [0x11B06]={d="l"}, + [0x11B07]={d="l"}, + [0x11B08]={d="l"}, + [0x11B09]={d="l"}, + [0x11C00]={d="l"}, + [0x11C01]={d="l"}, + [0x11C02]={d="l"}, + [0x11C03]={d="l"}, + [0x11C04]={d="l"}, + [0x11C05]={d="l"}, + [0x11C06]={d="l"}, + [0x11C07]={d="l"}, + [0x11C08]={d="l"}, + [0x11C0A]={d="l"}, + [0x11C0B]={d="l"}, + [0x11C0C]={d="l"}, + [0x11C0D]={d="l"}, + [0x11C0E]={d="l"}, + [0x11C0F]={d="l"}, + [0x11C10]={d="l"}, + [0x11C11]={d="l"}, + [0x11C12]={d="l"}, + [0x11C13]={d="l"}, + [0x11C14]={d="l"}, + [0x11C15]={d="l"}, + [0x11C16]={d="l"}, + [0x11C17]={d="l"}, + [0x11C18]={d="l"}, + [0x11C19]={d="l"}, + [0x11C1A]={d="l"}, + [0x11C1B]={d="l"}, + [0x11C1C]={d="l"}, + [0x11C1D]={d="l"}, + [0x11C1E]={d="l"}, + [0x11C1F]={d="l"}, + [0x11C20]={d="l"}, + [0x11C21]={d="l"}, + [0x11C22]={d="l"}, + [0x11C23]={d="l"}, + [0x11C24]={d="l"}, + [0x11C25]={d="l"}, + [0x11C26]={d="l"}, + [0x11C27]={d="l"}, + [0x11C28]={d="l"}, + [0x11C29]={d="l"}, + [0x11C2A]={d="l"}, + [0x11C2B]={d="l"}, + [0x11C2C]={d="l"}, + [0x11C2D]={d="l"}, + [0x11C2E]={d="l"}, + [0x11C2F]={d="l"}, + [0x11C30]={d="nsm"}, + [0x11C31]={d="nsm"}, + [0x11C32]={d="nsm"}, + [0x11C33]={d="nsm"}, + [0x11C34]={d="nsm"}, + [0x11C35]={d="nsm"}, + [0x11C36]={d="nsm"}, + [0x11C38]={d="nsm"}, + [0x11C39]={d="nsm"}, + [0x11C3A]={d="nsm"}, + [0x11C3B]={d="nsm"}, + [0x11C3C]={d="nsm"}, + [0x11C3D]={d="nsm"}, + [0x11C3E]={d="l"}, + [0x11C3F]={d="l"}, + [0x11C40]={d="l"}, + [0x11C41]={d="l"}, + [0x11C42]={d="l"}, + [0x11C43]={d="l"}, + [0x11C44]={d="l"}, + [0x11C45]={d="l"}, + [0x11C50]={d="l"}, + [0x11C51]={d="l"}, + [0x11C52]={d="l"}, + [0x11C53]={d="l"}, + [0x11C54]={d="l"}, + [0x11C55]={d="l"}, + [0x11C56]={d="l"}, + [0x11C57]={d="l"}, + [0x11C58]={d="l"}, + [0x11C59]={d="l"}, + [0x11C5A]={d="l"}, + [0x11C5B]={d="l"}, + [0x11C5C]={d="l"}, + [0x11C5D]={d="l"}, + [0x11C5E]={d="l"}, + [0x11C5F]={d="l"}, + [0x11C60]={d="l"}, + [0x11C61]={d="l"}, + [0x11C62]={d="l"}, + [0x11C63]={d="l"}, + [0x11C64]={d="l"}, + [0x11C65]={d="l"}, + [0x11C66]={d="l"}, + [0x11C67]={d="l"}, + [0x11C68]={d="l"}, + [0x11C69]={d="l"}, + [0x11C6A]={d="l"}, + [0x11C6B]={d="l"}, + [0x11C6C]={d="l"}, + [0x11C70]={d="l"}, + [0x11C71]={d="l"}, + [0x11C72]={d="l"}, + [0x11C73]={d="l"}, + [0x11C74]={d="l"}, + [0x11C75]={d="l"}, + [0x11C76]={d="l"}, + [0x11C77]={d="l"}, + [0x11C78]={d="l"}, + [0x11C79]={d="l"}, + [0x11C7A]={d="l"}, + [0x11C7B]={d="l"}, + [0x11C7C]={d="l"}, + [0x11C7D]={d="l"}, + [0x11C7E]={d="l"}, + [0x11C7F]={d="l"}, + [0x11C80]={d="l"}, + [0x11C81]={d="l"}, + [0x11C82]={d="l"}, + [0x11C83]={d="l"}, + [0x11C84]={d="l"}, + [0x11C85]={d="l"}, + [0x11C86]={d="l"}, + [0x11C87]={d="l"}, + [0x11C88]={d="l"}, + [0x11C89]={d="l"}, + [0x11C8A]={d="l"}, + [0x11C8B]={d="l"}, + [0x11C8C]={d="l"}, + [0x11C8D]={d="l"}, + [0x11C8E]={d="l"}, + [0x11C8F]={d="l"}, + [0x11C92]={d="nsm"}, + [0x11C93]={d="nsm"}, + [0x11C94]={d="nsm"}, + [0x11C95]={d="nsm"}, + [0x11C96]={d="nsm"}, + [0x11C97]={d="nsm"}, + [0x11C98]={d="nsm"}, + [0x11C99]={d="nsm"}, + [0x11C9A]={d="nsm"}, + [0x11C9B]={d="nsm"}, + [0x11C9C]={d="nsm"}, + [0x11C9D]={d="nsm"}, + [0x11C9E]={d="nsm"}, + [0x11C9F]={d="nsm"}, + [0x11CA0]={d="nsm"}, + [0x11CA1]={d="nsm"}, + [0x11CA2]={d="nsm"}, + [0x11CA3]={d="nsm"}, + [0x11CA4]={d="nsm"}, + [0x11CA5]={d="nsm"}, + [0x11CA6]={d="nsm"}, + [0x11CA7]={d="nsm"}, + [0x11CA9]={d="l"}, + [0x11CAA]={d="nsm"}, + [0x11CAB]={d="nsm"}, + [0x11CAC]={d="nsm"}, + [0x11CAD]={d="nsm"}, + [0x11CAE]={d="nsm"}, + [0x11CAF]={d="nsm"}, + [0x11CB0]={d="nsm"}, + [0x11CB1]={d="l"}, + [0x11CB2]={d="nsm"}, + [0x11CB3]={d="nsm"}, + [0x11CB4]={d="l"}, + [0x11CB5]={d="nsm"}, + [0x11CB6]={d="nsm"}, + [0x11D00]={d="l"}, + [0x11D01]={d="l"}, + [0x11D02]={d="l"}, + [0x11D03]={d="l"}, + [0x11D04]={d="l"}, + [0x11D05]={d="l"}, + [0x11D06]={d="l"}, + [0x11D08]={d="l"}, + [0x11D09]={d="l"}, + [0x11D0B]={d="l"}, + [0x11D0C]={d="l"}, + [0x11D0D]={d="l"}, + [0x11D0E]={d="l"}, + [0x11D0F]={d="l"}, + [0x11D10]={d="l"}, + [0x11D11]={d="l"}, + [0x11D12]={d="l"}, + [0x11D13]={d="l"}, + [0x11D14]={d="l"}, + [0x11D15]={d="l"}, + [0x11D16]={d="l"}, + [0x11D17]={d="l"}, + [0x11D18]={d="l"}, + [0x11D19]={d="l"}, + [0x11D1A]={d="l"}, + [0x11D1B]={d="l"}, + [0x11D1C]={d="l"}, + [0x11D1D]={d="l"}, + [0x11D1E]={d="l"}, + [0x11D1F]={d="l"}, + [0x11D20]={d="l"}, + [0x11D21]={d="l"}, + [0x11D22]={d="l"}, + [0x11D23]={d="l"}, + [0x11D24]={d="l"}, + [0x11D25]={d="l"}, + [0x11D26]={d="l"}, + [0x11D27]={d="l"}, + [0x11D28]={d="l"}, + [0x11D29]={d="l"}, + [0x11D2A]={d="l"}, + [0x11D2B]={d="l"}, + [0x11D2C]={d="l"}, + [0x11D2D]={d="l"}, + [0x11D2E]={d="l"}, + [0x11D2F]={d="l"}, + [0x11D30]={d="l"}, + [0x11D31]={d="nsm"}, + [0x11D32]={d="nsm"}, + [0x11D33]={d="nsm"}, + [0x11D34]={d="nsm"}, + [0x11D35]={d="nsm"}, + [0x11D36]={d="nsm"}, + [0x11D3A]={d="nsm"}, + [0x11D3C]={d="nsm"}, + [0x11D3D]={d="nsm"}, + [0x11D3F]={d="nsm"}, + [0x11D40]={d="nsm"}, + [0x11D41]={d="nsm"}, + [0x11D42]={d="nsm"}, + [0x11D43]={d="nsm"}, + [0x11D44]={d="nsm"}, + [0x11D45]={d="nsm"}, + [0x11D46]={d="l"}, + [0x11D47]={d="nsm"}, + [0x11D50]={d="l"}, + [0x11D51]={d="l"}, + [0x11D52]={d="l"}, + [0x11D53]={d="l"}, + [0x11D54]={d="l"}, + [0x11D55]={d="l"}, + [0x11D56]={d="l"}, + [0x11D57]={d="l"}, + [0x11D58]={d="l"}, + [0x11D59]={d="l"}, + [0x11D60]={d="l"}, + [0x11D61]={d="l"}, + [0x11D62]={d="l"}, + [0x11D63]={d="l"}, + [0x11D64]={d="l"}, + [0x11D65]={d="l"}, + [0x11D67]={d="l"}, + [0x11D68]={d="l"}, + [0x11D6A]={d="l"}, + [0x11D6B]={d="l"}, + [0x11D6C]={d="l"}, + [0x11D6D]={d="l"}, + [0x11D6E]={d="l"}, + [0x11D6F]={d="l"}, + [0x11D70]={d="l"}, + [0x11D71]={d="l"}, + [0x11D72]={d="l"}, + [0x11D73]={d="l"}, + [0x11D74]={d="l"}, + [0x11D75]={d="l"}, + [0x11D76]={d="l"}, + [0x11D77]={d="l"}, + [0x11D78]={d="l"}, + [0x11D79]={d="l"}, + [0x11D7A]={d="l"}, + [0x11D7B]={d="l"}, + [0x11D7C]={d="l"}, + [0x11D7D]={d="l"}, + [0x11D7E]={d="l"}, + [0x11D7F]={d="l"}, + [0x11D80]={d="l"}, + [0x11D81]={d="l"}, + [0x11D82]={d="l"}, + [0x11D83]={d="l"}, + [0x11D84]={d="l"}, + [0x11D85]={d="l"}, + [0x11D86]={d="l"}, + [0x11D87]={d="l"}, + [0x11D88]={d="l"}, + [0x11D89]={d="l"}, + [0x11D8A]={d="l"}, + [0x11D8B]={d="l"}, + [0x11D8C]={d="l"}, + [0x11D8D]={d="l"}, + [0x11D8E]={d="l"}, + [0x11D90]={d="nsm"}, + [0x11D91]={d="nsm"}, + [0x11D93]={d="l"}, + [0x11D94]={d="l"}, + [0x11D95]={d="nsm"}, + [0x11D96]={d="l"}, + [0x11D97]={d="nsm"}, + [0x11D98]={d="l"}, + [0x11DA0]={d="l"}, + [0x11DA1]={d="l"}, + [0x11DA2]={d="l"}, + [0x11DA3]={d="l"}, + [0x11DA4]={d="l"}, + [0x11DA5]={d="l"}, + [0x11DA6]={d="l"}, + [0x11DA7]={d="l"}, + [0x11DA8]={d="l"}, + [0x11DA9]={d="l"}, + [0x11EE0]={d="l"}, + [0x11EE1]={d="l"}, + [0x11EE2]={d="l"}, + [0x11EE3]={d="l"}, + [0x11EE4]={d="l"}, + [0x11EE5]={d="l"}, + [0x11EE6]={d="l"}, + [0x11EE7]={d="l"}, + [0x11EE8]={d="l"}, + [0x11EE9]={d="l"}, + [0x11EEA]={d="l"}, + [0x11EEB]={d="l"}, + [0x11EEC]={d="l"}, + [0x11EED]={d="l"}, + [0x11EEE]={d="l"}, + [0x11EEF]={d="l"}, + [0x11EF0]={d="l"}, + [0x11EF1]={d="l"}, + [0x11EF2]={d="l"}, + [0x11EF3]={d="nsm"}, + [0x11EF4]={d="nsm"}, + [0x11EF5]={d="l"}, + [0x11EF6]={d="l"}, + [0x11EF7]={d="l"}, + [0x11EF8]={d="l"}, + [0x11F00]={d="nsm"}, + [0x11F01]={d="nsm"}, + [0x11F02]={d="l"}, + [0x11F03]={d="l"}, + [0x11F04]={d="l"}, + [0x11F05]={d="l"}, + [0x11F06]={d="l"}, + [0x11F07]={d="l"}, + [0x11F08]={d="l"}, + [0x11F09]={d="l"}, + [0x11F0A]={d="l"}, + [0x11F0B]={d="l"}, + [0x11F0C]={d="l"}, + [0x11F0D]={d="l"}, + [0x11F0E]={d="l"}, + [0x11F0F]={d="l"}, + [0x11F10]={d="l"}, + [0x11F12]={d="l"}, + [0x11F13]={d="l"}, + [0x11F14]={d="l"}, + [0x11F15]={d="l"}, + [0x11F16]={d="l"}, + [0x11F17]={d="l"}, + [0x11F18]={d="l"}, + [0x11F19]={d="l"}, + [0x11F1A]={d="l"}, + [0x11F1B]={d="l"}, + [0x11F1C]={d="l"}, + [0x11F1D]={d="l"}, + [0x11F1E]={d="l"}, + [0x11F1F]={d="l"}, + [0x11F20]={d="l"}, + [0x11F21]={d="l"}, + [0x11F22]={d="l"}, + [0x11F23]={d="l"}, + [0x11F24]={d="l"}, + [0x11F25]={d="l"}, + [0x11F26]={d="l"}, + [0x11F27]={d="l"}, + [0x11F28]={d="l"}, + [0x11F29]={d="l"}, + [0x11F2A]={d="l"}, + [0x11F2B]={d="l"}, + [0x11F2C]={d="l"}, + [0x11F2D]={d="l"}, + [0x11F2E]={d="l"}, + [0x11F2F]={d="l"}, + [0x11F30]={d="l"}, + [0x11F31]={d="l"}, + [0x11F32]={d="l"}, + [0x11F33]={d="l"}, + [0x11F34]={d="l"}, + [0x11F35]={d="l"}, + [0x11F36]={d="nsm"}, + [0x11F37]={d="nsm"}, + [0x11F38]={d="nsm"}, + [0x11F39]={d="nsm"}, + [0x11F3A]={d="nsm"}, + [0x11F3E]={d="l"}, + [0x11F3F]={d="l"}, + [0x11F40]={d="nsm"}, + [0x11F41]={d="l"}, + [0x11F42]={d="nsm"}, + [0x11F43]={d="l"}, + [0x11F44]={d="l"}, + [0x11F45]={d="l"}, + [0x11F46]={d="l"}, + [0x11F47]={d="l"}, + [0x11F48]={d="l"}, + [0x11F49]={d="l"}, + [0x11F4A]={d="l"}, + [0x11F4B]={d="l"}, + [0x11F4C]={d="l"}, + [0x11F4D]={d="l"}, + [0x11F4E]={d="l"}, + [0x11F4F]={d="l"}, + [0x11F50]={d="l"}, + [0x11F51]={d="l"}, + [0x11F52]={d="l"}, + [0x11F53]={d="l"}, + [0x11F54]={d="l"}, + [0x11F55]={d="l"}, + [0x11F56]={d="l"}, + [0x11F57]={d="l"}, + [0x11F58]={d="l"}, + [0x11F59]={d="l"}, + [0x11FB0]={d="l"}, + [0x11FC0]={d="l"}, + [0x11FC1]={d="l"}, + [0x11FC2]={d="l"}, + [0x11FC3]={d="l"}, + [0x11FC4]={d="l"}, + [0x11FC5]={d="l"}, + [0x11FC6]={d="l"}, + [0x11FC7]={d="l"}, + [0x11FC8]={d="l"}, + [0x11FC9]={d="l"}, + [0x11FCA]={d="l"}, + [0x11FCB]={d="l"}, + [0x11FCC]={d="l"}, + [0x11FCD]={d="l"}, + [0x11FCE]={d="l"}, + [0x11FCF]={d="l"}, + [0x11FD0]={d="l"}, + [0x11FD1]={d="l"}, + [0x11FD2]={d="l"}, + [0x11FD3]={d="l"}, + [0x11FD4]={d="l"}, + [0x11FD5]={d="on"}, + [0x11FD6]={d="on"}, + [0x11FD7]={d="on"}, + [0x11FD8]={d="on"}, + [0x11FD9]={d="on"}, + [0x11FDA]={d="on"}, + [0x11FDB]={d="on"}, + [0x11FDC]={d="on"}, + [0x11FDD]={d="et"}, + [0x11FDE]={d="et"}, + [0x11FDF]={d="et"}, + [0x11FE0]={d="et"}, + [0x11FE1]={d="on"}, + [0x11FE2]={d="on"}, + [0x11FE3]={d="on"}, + [0x11FE4]={d="on"}, + [0x11FE5]={d="on"}, + [0x11FE6]={d="on"}, + [0x11FE7]={d="on"}, + [0x11FE8]={d="on"}, + [0x11FE9]={d="on"}, + [0x11FEA]={d="on"}, + [0x11FEB]={d="on"}, + [0x11FEC]={d="on"}, + [0x11FED]={d="on"}, + [0x11FEE]={d="on"}, + [0x11FEF]={d="on"}, + [0x11FF0]={d="on"}, + [0x11FF1]={d="on"}, + [0x11FFF]={d="l"}, + [0x12000]={d="l"}, + [0x12001]={d="l"}, + [0x12002]={d="l"}, + [0x12003]={d="l"}, + [0x12004]={d="l"}, + [0x12005]={d="l"}, + [0x12006]={d="l"}, + [0x12007]={d="l"}, + [0x12008]={d="l"}, + [0x12009]={d="l"}, + [0x1200A]={d="l"}, + [0x1200B]={d="l"}, + [0x1200C]={d="l"}, + [0x1200D]={d="l"}, + [0x1200E]={d="l"}, + [0x1200F]={d="l"}, + [0x12010]={d="l"}, + [0x12011]={d="l"}, + [0x12012]={d="l"}, + [0x12013]={d="l"}, + [0x12014]={d="l"}, + [0x12015]={d="l"}, + [0x12016]={d="l"}, + [0x12017]={d="l"}, + [0x12018]={d="l"}, + [0x12019]={d="l"}, + [0x1201A]={d="l"}, + [0x1201B]={d="l"}, + [0x1201C]={d="l"}, + [0x1201D]={d="l"}, + [0x1201E]={d="l"}, + [0x1201F]={d="l"}, + [0x12020]={d="l"}, + [0x12021]={d="l"}, + [0x12022]={d="l"}, + [0x12023]={d="l"}, + [0x12024]={d="l"}, + [0x12025]={d="l"}, + [0x12026]={d="l"}, + [0x12027]={d="l"}, + [0x12028]={d="l"}, + [0x12029]={d="l"}, + [0x1202A]={d="l"}, + [0x1202B]={d="l"}, + [0x1202C]={d="l"}, + [0x1202D]={d="l"}, + [0x1202E]={d="l"}, + [0x1202F]={d="l"}, + [0x12030]={d="l"}, + [0x12031]={d="l"}, + [0x12032]={d="l"}, + [0x12033]={d="l"}, + [0x12034]={d="l"}, + [0x12035]={d="l"}, + [0x12036]={d="l"}, + [0x12037]={d="l"}, + [0x12038]={d="l"}, + [0x12039]={d="l"}, + [0x1203A]={d="l"}, + [0x1203B]={d="l"}, + [0x1203C]={d="l"}, + [0x1203D]={d="l"}, + [0x1203E]={d="l"}, + [0x1203F]={d="l"}, + [0x12040]={d="l"}, + [0x12041]={d="l"}, + [0x12042]={d="l"}, + [0x12043]={d="l"}, + [0x12044]={d="l"}, + [0x12045]={d="l"}, + [0x12046]={d="l"}, + [0x12047]={d="l"}, + [0x12048]={d="l"}, + [0x12049]={d="l"}, + [0x1204A]={d="l"}, + [0x1204B]={d="l"}, + [0x1204C]={d="l"}, + [0x1204D]={d="l"}, + [0x1204E]={d="l"}, + [0x1204F]={d="l"}, + [0x12050]={d="l"}, + [0x12051]={d="l"}, + [0x12052]={d="l"}, + [0x12053]={d="l"}, + [0x12054]={d="l"}, + [0x12055]={d="l"}, + [0x12056]={d="l"}, + [0x12057]={d="l"}, + [0x12058]={d="l"}, + [0x12059]={d="l"}, + [0x1205A]={d="l"}, + [0x1205B]={d="l"}, + [0x1205C]={d="l"}, + [0x1205D]={d="l"}, + [0x1205E]={d="l"}, + [0x1205F]={d="l"}, + [0x12060]={d="l"}, + [0x12061]={d="l"}, + [0x12062]={d="l"}, + [0x12063]={d="l"}, + [0x12064]={d="l"}, + [0x12065]={d="l"}, + [0x12066]={d="l"}, + [0x12067]={d="l"}, + [0x12068]={d="l"}, + [0x12069]={d="l"}, + [0x1206A]={d="l"}, + [0x1206B]={d="l"}, + [0x1206C]={d="l"}, + [0x1206D]={d="l"}, + [0x1206E]={d="l"}, + [0x1206F]={d="l"}, + [0x12070]={d="l"}, + [0x12071]={d="l"}, + [0x12072]={d="l"}, + [0x12073]={d="l"}, + [0x12074]={d="l"}, + [0x12075]={d="l"}, + [0x12076]={d="l"}, + [0x12077]={d="l"}, + [0x12078]={d="l"}, + [0x12079]={d="l"}, + [0x1207A]={d="l"}, + [0x1207B]={d="l"}, + [0x1207C]={d="l"}, + [0x1207D]={d="l"}, + [0x1207E]={d="l"}, + [0x1207F]={d="l"}, + [0x12080]={d="l"}, + [0x12081]={d="l"}, + [0x12082]={d="l"}, + [0x12083]={d="l"}, + [0x12084]={d="l"}, + [0x12085]={d="l"}, + [0x12086]={d="l"}, + [0x12087]={d="l"}, + [0x12088]={d="l"}, + [0x12089]={d="l"}, + [0x1208A]={d="l"}, + [0x1208B]={d="l"}, + [0x1208C]={d="l"}, + [0x1208D]={d="l"}, + [0x1208E]={d="l"}, + [0x1208F]={d="l"}, + [0x12090]={d="l"}, + [0x12091]={d="l"}, + [0x12092]={d="l"}, + [0x12093]={d="l"}, + [0x12094]={d="l"}, + [0x12095]={d="l"}, + [0x12096]={d="l"}, + [0x12097]={d="l"}, + [0x12098]={d="l"}, + [0x12099]={d="l"}, + [0x1209A]={d="l"}, + [0x1209B]={d="l"}, + [0x1209C]={d="l"}, + [0x1209D]={d="l"}, + [0x1209E]={d="l"}, + [0x1209F]={d="l"}, + [0x120A0]={d="l"}, + [0x120A1]={d="l"}, + [0x120A2]={d="l"}, + [0x120A3]={d="l"}, + [0x120A4]={d="l"}, + [0x120A5]={d="l"}, + [0x120A6]={d="l"}, + [0x120A7]={d="l"}, + [0x120A8]={d="l"}, + [0x120A9]={d="l"}, + [0x120AA]={d="l"}, + [0x120AB]={d="l"}, + [0x120AC]={d="l"}, + [0x120AD]={d="l"}, + [0x120AE]={d="l"}, + [0x120AF]={d="l"}, + [0x120B0]={d="l"}, + [0x120B1]={d="l"}, + [0x120B2]={d="l"}, + [0x120B3]={d="l"}, + [0x120B4]={d="l"}, + [0x120B5]={d="l"}, + [0x120B6]={d="l"}, + [0x120B7]={d="l"}, + [0x120B8]={d="l"}, + [0x120B9]={d="l"}, + [0x120BA]={d="l"}, + [0x120BB]={d="l"}, + [0x120BC]={d="l"}, + [0x120BD]={d="l"}, + [0x120BE]={d="l"}, + [0x120BF]={d="l"}, + [0x120C0]={d="l"}, + [0x120C1]={d="l"}, + [0x120C2]={d="l"}, + [0x120C3]={d="l"}, + [0x120C4]={d="l"}, + [0x120C5]={d="l"}, + [0x120C6]={d="l"}, + [0x120C7]={d="l"}, + [0x120C8]={d="l"}, + [0x120C9]={d="l"}, + [0x120CA]={d="l"}, + [0x120CB]={d="l"}, + [0x120CC]={d="l"}, + [0x120CD]={d="l"}, + [0x120CE]={d="l"}, + [0x120CF]={d="l"}, + [0x120D0]={d="l"}, + [0x120D1]={d="l"}, + [0x120D2]={d="l"}, + [0x120D3]={d="l"}, + [0x120D4]={d="l"}, + [0x120D5]={d="l"}, + [0x120D6]={d="l"}, + [0x120D7]={d="l"}, + [0x120D8]={d="l"}, + [0x120D9]={d="l"}, + [0x120DA]={d="l"}, + [0x120DB]={d="l"}, + [0x120DC]={d="l"}, + [0x120DD]={d="l"}, + [0x120DE]={d="l"}, + [0x120DF]={d="l"}, + [0x120E0]={d="l"}, + [0x120E1]={d="l"}, + [0x120E2]={d="l"}, + [0x120E3]={d="l"}, + [0x120E4]={d="l"}, + [0x120E5]={d="l"}, + [0x120E6]={d="l"}, + [0x120E7]={d="l"}, + [0x120E8]={d="l"}, + [0x120E9]={d="l"}, + [0x120EA]={d="l"}, + [0x120EB]={d="l"}, + [0x120EC]={d="l"}, + [0x120ED]={d="l"}, + [0x120EE]={d="l"}, + [0x120EF]={d="l"}, + [0x120F0]={d="l"}, + [0x120F1]={d="l"}, + [0x120F2]={d="l"}, + [0x120F3]={d="l"}, + [0x120F4]={d="l"}, + [0x120F5]={d="l"}, + [0x120F6]={d="l"}, + [0x120F7]={d="l"}, + [0x120F8]={d="l"}, + [0x120F9]={d="l"}, + [0x120FA]={d="l"}, + [0x120FB]={d="l"}, + [0x120FC]={d="l"}, + [0x120FD]={d="l"}, + [0x120FE]={d="l"}, + [0x120FF]={d="l"}, + [0x12100]={d="l"}, + [0x12101]={d="l"}, + [0x12102]={d="l"}, + [0x12103]={d="l"}, + [0x12104]={d="l"}, + [0x12105]={d="l"}, + [0x12106]={d="l"}, + [0x12107]={d="l"}, + [0x12108]={d="l"}, + [0x12109]={d="l"}, + [0x1210A]={d="l"}, + [0x1210B]={d="l"}, + [0x1210C]={d="l"}, + [0x1210D]={d="l"}, + [0x1210E]={d="l"}, + [0x1210F]={d="l"}, + [0x12110]={d="l"}, + [0x12111]={d="l"}, + [0x12112]={d="l"}, + [0x12113]={d="l"}, + [0x12114]={d="l"}, + [0x12115]={d="l"}, + [0x12116]={d="l"}, + [0x12117]={d="l"}, + [0x12118]={d="l"}, + [0x12119]={d="l"}, + [0x1211A]={d="l"}, + [0x1211B]={d="l"}, + [0x1211C]={d="l"}, + [0x1211D]={d="l"}, + [0x1211E]={d="l"}, + [0x1211F]={d="l"}, + [0x12120]={d="l"}, + [0x12121]={d="l"}, + [0x12122]={d="l"}, + [0x12123]={d="l"}, + [0x12124]={d="l"}, + [0x12125]={d="l"}, + [0x12126]={d="l"}, + [0x12127]={d="l"}, + [0x12128]={d="l"}, + [0x12129]={d="l"}, + [0x1212A]={d="l"}, + [0x1212B]={d="l"}, + [0x1212C]={d="l"}, + [0x1212D]={d="l"}, + [0x1212E]={d="l"}, + [0x1212F]={d="l"}, + [0x12130]={d="l"}, + [0x12131]={d="l"}, + [0x12132]={d="l"}, + [0x12133]={d="l"}, + [0x12134]={d="l"}, + [0x12135]={d="l"}, + [0x12136]={d="l"}, + [0x12137]={d="l"}, + [0x12138]={d="l"}, + [0x12139]={d="l"}, + [0x1213A]={d="l"}, + [0x1213B]={d="l"}, + [0x1213C]={d="l"}, + [0x1213D]={d="l"}, + [0x1213E]={d="l"}, + [0x1213F]={d="l"}, + [0x12140]={d="l"}, + [0x12141]={d="l"}, + [0x12142]={d="l"}, + [0x12143]={d="l"}, + [0x12144]={d="l"}, + [0x12145]={d="l"}, + [0x12146]={d="l"}, + [0x12147]={d="l"}, + [0x12148]={d="l"}, + [0x12149]={d="l"}, + [0x1214A]={d="l"}, + [0x1214B]={d="l"}, + [0x1214C]={d="l"}, + [0x1214D]={d="l"}, + [0x1214E]={d="l"}, + [0x1214F]={d="l"}, + [0x12150]={d="l"}, + [0x12151]={d="l"}, + [0x12152]={d="l"}, + [0x12153]={d="l"}, + [0x12154]={d="l"}, + [0x12155]={d="l"}, + [0x12156]={d="l"}, + [0x12157]={d="l"}, + [0x12158]={d="l"}, + [0x12159]={d="l"}, + [0x1215A]={d="l"}, + [0x1215B]={d="l"}, + [0x1215C]={d="l"}, + [0x1215D]={d="l"}, + [0x1215E]={d="l"}, + [0x1215F]={d="l"}, + [0x12160]={d="l"}, + [0x12161]={d="l"}, + [0x12162]={d="l"}, + [0x12163]={d="l"}, + [0x12164]={d="l"}, + [0x12165]={d="l"}, + [0x12166]={d="l"}, + [0x12167]={d="l"}, + [0x12168]={d="l"}, + [0x12169]={d="l"}, + [0x1216A]={d="l"}, + [0x1216B]={d="l"}, + [0x1216C]={d="l"}, + [0x1216D]={d="l"}, + [0x1216E]={d="l"}, + [0x1216F]={d="l"}, + [0x12170]={d="l"}, + [0x12171]={d="l"}, + [0x12172]={d="l"}, + [0x12173]={d="l"}, + [0x12174]={d="l"}, + [0x12175]={d="l"}, + [0x12176]={d="l"}, + [0x12177]={d="l"}, + [0x12178]={d="l"}, + [0x12179]={d="l"}, + [0x1217A]={d="l"}, + [0x1217B]={d="l"}, + [0x1217C]={d="l"}, + [0x1217D]={d="l"}, + [0x1217E]={d="l"}, + [0x1217F]={d="l"}, + [0x12180]={d="l"}, + [0x12181]={d="l"}, + [0x12182]={d="l"}, + [0x12183]={d="l"}, + [0x12184]={d="l"}, + [0x12185]={d="l"}, + [0x12186]={d="l"}, + [0x12187]={d="l"}, + [0x12188]={d="l"}, + [0x12189]={d="l"}, + [0x1218A]={d="l"}, + [0x1218B]={d="l"}, + [0x1218C]={d="l"}, + [0x1218D]={d="l"}, + [0x1218E]={d="l"}, + [0x1218F]={d="l"}, + [0x12190]={d="l"}, + [0x12191]={d="l"}, + [0x12192]={d="l"}, + [0x12193]={d="l"}, + [0x12194]={d="l"}, + [0x12195]={d="l"}, + [0x12196]={d="l"}, + [0x12197]={d="l"}, + [0x12198]={d="l"}, + [0x12199]={d="l"}, + [0x1219A]={d="l"}, + [0x1219B]={d="l"}, + [0x1219C]={d="l"}, + [0x1219D]={d="l"}, + [0x1219E]={d="l"}, + [0x1219F]={d="l"}, + [0x121A0]={d="l"}, + [0x121A1]={d="l"}, + [0x121A2]={d="l"}, + [0x121A3]={d="l"}, + [0x121A4]={d="l"}, + [0x121A5]={d="l"}, + [0x121A6]={d="l"}, + [0x121A7]={d="l"}, + [0x121A8]={d="l"}, + [0x121A9]={d="l"}, + [0x121AA]={d="l"}, + [0x121AB]={d="l"}, + [0x121AC]={d="l"}, + [0x121AD]={d="l"}, + [0x121AE]={d="l"}, + [0x121AF]={d="l"}, + [0x121B0]={d="l"}, + [0x121B1]={d="l"}, + [0x121B2]={d="l"}, + [0x121B3]={d="l"}, + [0x121B4]={d="l"}, + [0x121B5]={d="l"}, + [0x121B6]={d="l"}, + [0x121B7]={d="l"}, + [0x121B8]={d="l"}, + [0x121B9]={d="l"}, + [0x121BA]={d="l"}, + [0x121BB]={d="l"}, + [0x121BC]={d="l"}, + [0x121BD]={d="l"}, + [0x121BE]={d="l"}, + [0x121BF]={d="l"}, + [0x121C0]={d="l"}, + [0x121C1]={d="l"}, + [0x121C2]={d="l"}, + [0x121C3]={d="l"}, + [0x121C4]={d="l"}, + [0x121C5]={d="l"}, + [0x121C6]={d="l"}, + [0x121C7]={d="l"}, + [0x121C8]={d="l"}, + [0x121C9]={d="l"}, + [0x121CA]={d="l"}, + [0x121CB]={d="l"}, + [0x121CC]={d="l"}, + [0x121CD]={d="l"}, + [0x121CE]={d="l"}, + [0x121CF]={d="l"}, + [0x121D0]={d="l"}, + [0x121D1]={d="l"}, + [0x121D2]={d="l"}, + [0x121D3]={d="l"}, + [0x121D4]={d="l"}, + [0x121D5]={d="l"}, + [0x121D6]={d="l"}, + [0x121D7]={d="l"}, + [0x121D8]={d="l"}, + [0x121D9]={d="l"}, + [0x121DA]={d="l"}, + [0x121DB]={d="l"}, + [0x121DC]={d="l"}, + [0x121DD]={d="l"}, + [0x121DE]={d="l"}, + [0x121DF]={d="l"}, + [0x121E0]={d="l"}, + [0x121E1]={d="l"}, + [0x121E2]={d="l"}, + [0x121E3]={d="l"}, + [0x121E4]={d="l"}, + [0x121E5]={d="l"}, + [0x121E6]={d="l"}, + [0x121E7]={d="l"}, + [0x121E8]={d="l"}, + [0x121E9]={d="l"}, + [0x121EA]={d="l"}, + [0x121EB]={d="l"}, + [0x121EC]={d="l"}, + [0x121ED]={d="l"}, + [0x121EE]={d="l"}, + [0x121EF]={d="l"}, + [0x121F0]={d="l"}, + [0x121F1]={d="l"}, + [0x121F2]={d="l"}, + [0x121F3]={d="l"}, + [0x121F4]={d="l"}, + [0x121F5]={d="l"}, + [0x121F6]={d="l"}, + [0x121F7]={d="l"}, + [0x121F8]={d="l"}, + [0x121F9]={d="l"}, + [0x121FA]={d="l"}, + [0x121FB]={d="l"}, + [0x121FC]={d="l"}, + [0x121FD]={d="l"}, + [0x121FE]={d="l"}, + [0x121FF]={d="l"}, + [0x12200]={d="l"}, + [0x12201]={d="l"}, + [0x12202]={d="l"}, + [0x12203]={d="l"}, + [0x12204]={d="l"}, + [0x12205]={d="l"}, + [0x12206]={d="l"}, + [0x12207]={d="l"}, + [0x12208]={d="l"}, + [0x12209]={d="l"}, + [0x1220A]={d="l"}, + [0x1220B]={d="l"}, + [0x1220C]={d="l"}, + [0x1220D]={d="l"}, + [0x1220E]={d="l"}, + [0x1220F]={d="l"}, + [0x12210]={d="l"}, + [0x12211]={d="l"}, + [0x12212]={d="l"}, + [0x12213]={d="l"}, + [0x12214]={d="l"}, + [0x12215]={d="l"}, + [0x12216]={d="l"}, + [0x12217]={d="l"}, + [0x12218]={d="l"}, + [0x12219]={d="l"}, + [0x1221A]={d="l"}, + [0x1221B]={d="l"}, + [0x1221C]={d="l"}, + [0x1221D]={d="l"}, + [0x1221E]={d="l"}, + [0x1221F]={d="l"}, + [0x12220]={d="l"}, + [0x12221]={d="l"}, + [0x12222]={d="l"}, + [0x12223]={d="l"}, + [0x12224]={d="l"}, + [0x12225]={d="l"}, + [0x12226]={d="l"}, + [0x12227]={d="l"}, + [0x12228]={d="l"}, + [0x12229]={d="l"}, + [0x1222A]={d="l"}, + [0x1222B]={d="l"}, + [0x1222C]={d="l"}, + [0x1222D]={d="l"}, + [0x1222E]={d="l"}, + [0x1222F]={d="l"}, + [0x12230]={d="l"}, + [0x12231]={d="l"}, + [0x12232]={d="l"}, + [0x12233]={d="l"}, + [0x12234]={d="l"}, + [0x12235]={d="l"}, + [0x12236]={d="l"}, + [0x12237]={d="l"}, + [0x12238]={d="l"}, + [0x12239]={d="l"}, + [0x1223A]={d="l"}, + [0x1223B]={d="l"}, + [0x1223C]={d="l"}, + [0x1223D]={d="l"}, + [0x1223E]={d="l"}, + [0x1223F]={d="l"}, + [0x12240]={d="l"}, + [0x12241]={d="l"}, + [0x12242]={d="l"}, + [0x12243]={d="l"}, + [0x12244]={d="l"}, + [0x12245]={d="l"}, + [0x12246]={d="l"}, + [0x12247]={d="l"}, + [0x12248]={d="l"}, + [0x12249]={d="l"}, + [0x1224A]={d="l"}, + [0x1224B]={d="l"}, + [0x1224C]={d="l"}, + [0x1224D]={d="l"}, + [0x1224E]={d="l"}, + [0x1224F]={d="l"}, + [0x12250]={d="l"}, + [0x12251]={d="l"}, + [0x12252]={d="l"}, + [0x12253]={d="l"}, + [0x12254]={d="l"}, + [0x12255]={d="l"}, + [0x12256]={d="l"}, + [0x12257]={d="l"}, + [0x12258]={d="l"}, + [0x12259]={d="l"}, + [0x1225A]={d="l"}, + [0x1225B]={d="l"}, + [0x1225C]={d="l"}, + [0x1225D]={d="l"}, + [0x1225E]={d="l"}, + [0x1225F]={d="l"}, + [0x12260]={d="l"}, + [0x12261]={d="l"}, + [0x12262]={d="l"}, + [0x12263]={d="l"}, + [0x12264]={d="l"}, + [0x12265]={d="l"}, + [0x12266]={d="l"}, + [0x12267]={d="l"}, + [0x12268]={d="l"}, + [0x12269]={d="l"}, + [0x1226A]={d="l"}, + [0x1226B]={d="l"}, + [0x1226C]={d="l"}, + [0x1226D]={d="l"}, + [0x1226E]={d="l"}, + [0x1226F]={d="l"}, + [0x12270]={d="l"}, + [0x12271]={d="l"}, + [0x12272]={d="l"}, + [0x12273]={d="l"}, + [0x12274]={d="l"}, + [0x12275]={d="l"}, + [0x12276]={d="l"}, + [0x12277]={d="l"}, + [0x12278]={d="l"}, + [0x12279]={d="l"}, + [0x1227A]={d="l"}, + [0x1227B]={d="l"}, + [0x1227C]={d="l"}, + [0x1227D]={d="l"}, + [0x1227E]={d="l"}, + [0x1227F]={d="l"}, + [0x12280]={d="l"}, + [0x12281]={d="l"}, + [0x12282]={d="l"}, + [0x12283]={d="l"}, + [0x12284]={d="l"}, + [0x12285]={d="l"}, + [0x12286]={d="l"}, + [0x12287]={d="l"}, + [0x12288]={d="l"}, + [0x12289]={d="l"}, + [0x1228A]={d="l"}, + [0x1228B]={d="l"}, + [0x1228C]={d="l"}, + [0x1228D]={d="l"}, + [0x1228E]={d="l"}, + [0x1228F]={d="l"}, + [0x12290]={d="l"}, + [0x12291]={d="l"}, + [0x12292]={d="l"}, + [0x12293]={d="l"}, + [0x12294]={d="l"}, + [0x12295]={d="l"}, + [0x12296]={d="l"}, + [0x12297]={d="l"}, + [0x12298]={d="l"}, + [0x12299]={d="l"}, + [0x1229A]={d="l"}, + [0x1229B]={d="l"}, + [0x1229C]={d="l"}, + [0x1229D]={d="l"}, + [0x1229E]={d="l"}, + [0x1229F]={d="l"}, + [0x122A0]={d="l"}, + [0x122A1]={d="l"}, + [0x122A2]={d="l"}, + [0x122A3]={d="l"}, + [0x122A4]={d="l"}, + [0x122A5]={d="l"}, + [0x122A6]={d="l"}, + [0x122A7]={d="l"}, + [0x122A8]={d="l"}, + [0x122A9]={d="l"}, + [0x122AA]={d="l"}, + [0x122AB]={d="l"}, + [0x122AC]={d="l"}, + [0x122AD]={d="l"}, + [0x122AE]={d="l"}, + [0x122AF]={d="l"}, + [0x122B0]={d="l"}, + [0x122B1]={d="l"}, + [0x122B2]={d="l"}, + [0x122B3]={d="l"}, + [0x122B4]={d="l"}, + [0x122B5]={d="l"}, + [0x122B6]={d="l"}, + [0x122B7]={d="l"}, + [0x122B8]={d="l"}, + [0x122B9]={d="l"}, + [0x122BA]={d="l"}, + [0x122BB]={d="l"}, + [0x122BC]={d="l"}, + [0x122BD]={d="l"}, + [0x122BE]={d="l"}, + [0x122BF]={d="l"}, + [0x122C0]={d="l"}, + [0x122C1]={d="l"}, + [0x122C2]={d="l"}, + [0x122C3]={d="l"}, + [0x122C4]={d="l"}, + [0x122C5]={d="l"}, + [0x122C6]={d="l"}, + [0x122C7]={d="l"}, + [0x122C8]={d="l"}, + [0x122C9]={d="l"}, + [0x122CA]={d="l"}, + [0x122CB]={d="l"}, + [0x122CC]={d="l"}, + [0x122CD]={d="l"}, + [0x122CE]={d="l"}, + [0x122CF]={d="l"}, + [0x122D0]={d="l"}, + [0x122D1]={d="l"}, + [0x122D2]={d="l"}, + [0x122D3]={d="l"}, + [0x122D4]={d="l"}, + [0x122D5]={d="l"}, + [0x122D6]={d="l"}, + [0x122D7]={d="l"}, + [0x122D8]={d="l"}, + [0x122D9]={d="l"}, + [0x122DA]={d="l"}, + [0x122DB]={d="l"}, + [0x122DC]={d="l"}, + [0x122DD]={d="l"}, + [0x122DE]={d="l"}, + [0x122DF]={d="l"}, + [0x122E0]={d="l"}, + [0x122E1]={d="l"}, + [0x122E2]={d="l"}, + [0x122E3]={d="l"}, + [0x122E4]={d="l"}, + [0x122E5]={d="l"}, + [0x122E6]={d="l"}, + [0x122E7]={d="l"}, + [0x122E8]={d="l"}, + [0x122E9]={d="l"}, + [0x122EA]={d="l"}, + [0x122EB]={d="l"}, + [0x122EC]={d="l"}, + [0x122ED]={d="l"}, + [0x122EE]={d="l"}, + [0x122EF]={d="l"}, + [0x122F0]={d="l"}, + [0x122F1]={d="l"}, + [0x122F2]={d="l"}, + [0x122F3]={d="l"}, + [0x122F4]={d="l"}, + [0x122F5]={d="l"}, + [0x122F6]={d="l"}, + [0x122F7]={d="l"}, + [0x122F8]={d="l"}, + [0x122F9]={d="l"}, + [0x122FA]={d="l"}, + [0x122FB]={d="l"}, + [0x122FC]={d="l"}, + [0x122FD]={d="l"}, + [0x122FE]={d="l"}, + [0x122FF]={d="l"}, + [0x12300]={d="l"}, + [0x12301]={d="l"}, + [0x12302]={d="l"}, + [0x12303]={d="l"}, + [0x12304]={d="l"}, + [0x12305]={d="l"}, + [0x12306]={d="l"}, + [0x12307]={d="l"}, + [0x12308]={d="l"}, + [0x12309]={d="l"}, + [0x1230A]={d="l"}, + [0x1230B]={d="l"}, + [0x1230C]={d="l"}, + [0x1230D]={d="l"}, + [0x1230E]={d="l"}, + [0x1230F]={d="l"}, + [0x12310]={d="l"}, + [0x12311]={d="l"}, + [0x12312]={d="l"}, + [0x12313]={d="l"}, + [0x12314]={d="l"}, + [0x12315]={d="l"}, + [0x12316]={d="l"}, + [0x12317]={d="l"}, + [0x12318]={d="l"}, + [0x12319]={d="l"}, + [0x1231A]={d="l"}, + [0x1231B]={d="l"}, + [0x1231C]={d="l"}, + [0x1231D]={d="l"}, + [0x1231E]={d="l"}, + [0x1231F]={d="l"}, + [0x12320]={d="l"}, + [0x12321]={d="l"}, + [0x12322]={d="l"}, + [0x12323]={d="l"}, + [0x12324]={d="l"}, + [0x12325]={d="l"}, + [0x12326]={d="l"}, + [0x12327]={d="l"}, + [0x12328]={d="l"}, + [0x12329]={d="l"}, + [0x1232A]={d="l"}, + [0x1232B]={d="l"}, + [0x1232C]={d="l"}, + [0x1232D]={d="l"}, + [0x1232E]={d="l"}, + [0x1232F]={d="l"}, + [0x12330]={d="l"}, + [0x12331]={d="l"}, + [0x12332]={d="l"}, + [0x12333]={d="l"}, + [0x12334]={d="l"}, + [0x12335]={d="l"}, + [0x12336]={d="l"}, + [0x12337]={d="l"}, + [0x12338]={d="l"}, + [0x12339]={d="l"}, + [0x1233A]={d="l"}, + [0x1233B]={d="l"}, + [0x1233C]={d="l"}, + [0x1233D]={d="l"}, + [0x1233E]={d="l"}, + [0x1233F]={d="l"}, + [0x12340]={d="l"}, + [0x12341]={d="l"}, + [0x12342]={d="l"}, + [0x12343]={d="l"}, + [0x12344]={d="l"}, + [0x12345]={d="l"}, + [0x12346]={d="l"}, + [0x12347]={d="l"}, + [0x12348]={d="l"}, + [0x12349]={d="l"}, + [0x1234A]={d="l"}, + [0x1234B]={d="l"}, + [0x1234C]={d="l"}, + [0x1234D]={d="l"}, + [0x1234E]={d="l"}, + [0x1234F]={d="l"}, + [0x12350]={d="l"}, + [0x12351]={d="l"}, + [0x12352]={d="l"}, + [0x12353]={d="l"}, + [0x12354]={d="l"}, + [0x12355]={d="l"}, + [0x12356]={d="l"}, + [0x12357]={d="l"}, + [0x12358]={d="l"}, + [0x12359]={d="l"}, + [0x1235A]={d="l"}, + [0x1235B]={d="l"}, + [0x1235C]={d="l"}, + [0x1235D]={d="l"}, + [0x1235E]={d="l"}, + [0x1235F]={d="l"}, + [0x12360]={d="l"}, + [0x12361]={d="l"}, + [0x12362]={d="l"}, + [0x12363]={d="l"}, + [0x12364]={d="l"}, + [0x12365]={d="l"}, + [0x12366]={d="l"}, + [0x12367]={d="l"}, + [0x12368]={d="l"}, + [0x12369]={d="l"}, + [0x1236A]={d="l"}, + [0x1236B]={d="l"}, + [0x1236C]={d="l"}, + [0x1236D]={d="l"}, + [0x1236E]={d="l"}, + [0x1236F]={d="l"}, + [0x12370]={d="l"}, + [0x12371]={d="l"}, + [0x12372]={d="l"}, + [0x12373]={d="l"}, + [0x12374]={d="l"}, + [0x12375]={d="l"}, + [0x12376]={d="l"}, + [0x12377]={d="l"}, + [0x12378]={d="l"}, + [0x12379]={d="l"}, + [0x1237A]={d="l"}, + [0x1237B]={d="l"}, + [0x1237C]={d="l"}, + [0x1237D]={d="l"}, + [0x1237E]={d="l"}, + [0x1237F]={d="l"}, + [0x12380]={d="l"}, + [0x12381]={d="l"}, + [0x12382]={d="l"}, + [0x12383]={d="l"}, + [0x12384]={d="l"}, + [0x12385]={d="l"}, + [0x12386]={d="l"}, + [0x12387]={d="l"}, + [0x12388]={d="l"}, + [0x12389]={d="l"}, + [0x1238A]={d="l"}, + [0x1238B]={d="l"}, + [0x1238C]={d="l"}, + [0x1238D]={d="l"}, + [0x1238E]={d="l"}, + [0x1238F]={d="l"}, + [0x12390]={d="l"}, + [0x12391]={d="l"}, + [0x12392]={d="l"}, + [0x12393]={d="l"}, + [0x12394]={d="l"}, + [0x12395]={d="l"}, + [0x12396]={d="l"}, + [0x12397]={d="l"}, + [0x12398]={d="l"}, + [0x12399]={d="l"}, + [0x12400]={d="l"}, + [0x12401]={d="l"}, + [0x12402]={d="l"}, + [0x12403]={d="l"}, + [0x12404]={d="l"}, + [0x12405]={d="l"}, + [0x12406]={d="l"}, + [0x12407]={d="l"}, + [0x12408]={d="l"}, + [0x12409]={d="l"}, + [0x1240A]={d="l"}, + [0x1240B]={d="l"}, + [0x1240C]={d="l"}, + [0x1240D]={d="l"}, + [0x1240E]={d="l"}, + [0x1240F]={d="l"}, + [0x12410]={d="l"}, + [0x12411]={d="l"}, + [0x12412]={d="l"}, + [0x12413]={d="l"}, + [0x12414]={d="l"}, + [0x12415]={d="l"}, + [0x12416]={d="l"}, + [0x12417]={d="l"}, + [0x12418]={d="l"}, + [0x12419]={d="l"}, + [0x1241A]={d="l"}, + [0x1241B]={d="l"}, + [0x1241C]={d="l"}, + [0x1241D]={d="l"}, + [0x1241E]={d="l"}, + [0x1241F]={d="l"}, + [0x12420]={d="l"}, + [0x12421]={d="l"}, + [0x12422]={d="l"}, + [0x12423]={d="l"}, + [0x12424]={d="l"}, + [0x12425]={d="l"}, + [0x12426]={d="l"}, + [0x12427]={d="l"}, + [0x12428]={d="l"}, + [0x12429]={d="l"}, + [0x1242A]={d="l"}, + [0x1242B]={d="l"}, + [0x1242C]={d="l"}, + [0x1242D]={d="l"}, + [0x1242E]={d="l"}, + [0x1242F]={d="l"}, + [0x12430]={d="l"}, + [0x12431]={d="l"}, + [0x12432]={d="l"}, + [0x12433]={d="l"}, + [0x12434]={d="l"}, + [0x12435]={d="l"}, + [0x12436]={d="l"}, + [0x12437]={d="l"}, + [0x12438]={d="l"}, + [0x12439]={d="l"}, + [0x1243A]={d="l"}, + [0x1243B]={d="l"}, + [0x1243C]={d="l"}, + [0x1243D]={d="l"}, + [0x1243E]={d="l"}, + [0x1243F]={d="l"}, + [0x12440]={d="l"}, + [0x12441]={d="l"}, + [0x12442]={d="l"}, + [0x12443]={d="l"}, + [0x12444]={d="l"}, + [0x12445]={d="l"}, + [0x12446]={d="l"}, + [0x12447]={d="l"}, + [0x12448]={d="l"}, + [0x12449]={d="l"}, + [0x1244A]={d="l"}, + [0x1244B]={d="l"}, + [0x1244C]={d="l"}, + [0x1244D]={d="l"}, + [0x1244E]={d="l"}, + [0x1244F]={d="l"}, + [0x12450]={d="l"}, + [0x12451]={d="l"}, + [0x12452]={d="l"}, + [0x12453]={d="l"}, + [0x12454]={d="l"}, + [0x12455]={d="l"}, + [0x12456]={d="l"}, + [0x12457]={d="l"}, + [0x12458]={d="l"}, + [0x12459]={d="l"}, + [0x1245A]={d="l"}, + [0x1245B]={d="l"}, + [0x1245C]={d="l"}, + [0x1245D]={d="l"}, + [0x1245E]={d="l"}, + [0x1245F]={d="l"}, + [0x12460]={d="l"}, + [0x12461]={d="l"}, + [0x12462]={d="l"}, + [0x12463]={d="l"}, + [0x12464]={d="l"}, + [0x12465]={d="l"}, + [0x12466]={d="l"}, + [0x12467]={d="l"}, + [0x12468]={d="l"}, + [0x12469]={d="l"}, + [0x1246A]={d="l"}, + [0x1246B]={d="l"}, + [0x1246C]={d="l"}, + [0x1246D]={d="l"}, + [0x1246E]={d="l"}, + [0x12470]={d="l"}, + [0x12471]={d="l"}, + [0x12472]={d="l"}, + [0x12473]={d="l"}, + [0x12474]={d="l"}, + [0x12480]={d="l"}, + [0x12481]={d="l"}, + [0x12482]={d="l"}, + [0x12483]={d="l"}, + [0x12484]={d="l"}, + [0x12485]={d="l"}, + [0x12486]={d="l"}, + [0x12487]={d="l"}, + [0x12488]={d="l"}, + [0x12489]={d="l"}, + [0x1248A]={d="l"}, + [0x1248B]={d="l"}, + [0x1248C]={d="l"}, + [0x1248D]={d="l"}, + [0x1248E]={d="l"}, + [0x1248F]={d="l"}, + [0x12490]={d="l"}, + [0x12491]={d="l"}, + [0x12492]={d="l"}, + [0x12493]={d="l"}, + [0x12494]={d="l"}, + [0x12495]={d="l"}, + [0x12496]={d="l"}, + [0x12497]={d="l"}, + [0x12498]={d="l"}, + [0x12499]={d="l"}, + [0x1249A]={d="l"}, + [0x1249B]={d="l"}, + [0x1249C]={d="l"}, + [0x1249D]={d="l"}, + [0x1249E]={d="l"}, + [0x1249F]={d="l"}, + [0x124A0]={d="l"}, + [0x124A1]={d="l"}, + [0x124A2]={d="l"}, + [0x124A3]={d="l"}, + [0x124A4]={d="l"}, + [0x124A5]={d="l"}, + [0x124A6]={d="l"}, + [0x124A7]={d="l"}, + [0x124A8]={d="l"}, + [0x124A9]={d="l"}, + [0x124AA]={d="l"}, + [0x124AB]={d="l"}, + [0x124AC]={d="l"}, + [0x124AD]={d="l"}, + [0x124AE]={d="l"}, + [0x124AF]={d="l"}, + [0x124B0]={d="l"}, + [0x124B1]={d="l"}, + [0x124B2]={d="l"}, + [0x124B3]={d="l"}, + [0x124B4]={d="l"}, + [0x124B5]={d="l"}, + [0x124B6]={d="l"}, + [0x124B7]={d="l"}, + [0x124B8]={d="l"}, + [0x124B9]={d="l"}, + [0x124BA]={d="l"}, + [0x124BB]={d="l"}, + [0x124BC]={d="l"}, + [0x124BD]={d="l"}, + [0x124BE]={d="l"}, + [0x124BF]={d="l"}, + [0x124C0]={d="l"}, + [0x124C1]={d="l"}, + [0x124C2]={d="l"}, + [0x124C3]={d="l"}, + [0x124C4]={d="l"}, + [0x124C5]={d="l"}, + [0x124C6]={d="l"}, + [0x124C7]={d="l"}, + [0x124C8]={d="l"}, + [0x124C9]={d="l"}, + [0x124CA]={d="l"}, + [0x124CB]={d="l"}, + [0x124CC]={d="l"}, + [0x124CD]={d="l"}, + [0x124CE]={d="l"}, + [0x124CF]={d="l"}, + [0x124D0]={d="l"}, + [0x124D1]={d="l"}, + [0x124D2]={d="l"}, + [0x124D3]={d="l"}, + [0x124D4]={d="l"}, + [0x124D5]={d="l"}, + [0x124D6]={d="l"}, + [0x124D7]={d="l"}, + [0x124D8]={d="l"}, + [0x124D9]={d="l"}, + [0x124DA]={d="l"}, + [0x124DB]={d="l"}, + [0x124DC]={d="l"}, + [0x124DD]={d="l"}, + [0x124DE]={d="l"}, + [0x124DF]={d="l"}, + [0x124E0]={d="l"}, + [0x124E1]={d="l"}, + [0x124E2]={d="l"}, + [0x124E3]={d="l"}, + [0x124E4]={d="l"}, + [0x124E5]={d="l"}, + [0x124E6]={d="l"}, + [0x124E7]={d="l"}, + [0x124E8]={d="l"}, + [0x124E9]={d="l"}, + [0x124EA]={d="l"}, + [0x124EB]={d="l"}, + [0x124EC]={d="l"}, + [0x124ED]={d="l"}, + [0x124EE]={d="l"}, + [0x124EF]={d="l"}, + [0x124F0]={d="l"}, + [0x124F1]={d="l"}, + [0x124F2]={d="l"}, + [0x124F3]={d="l"}, + [0x124F4]={d="l"}, + [0x124F5]={d="l"}, + [0x124F6]={d="l"}, + [0x124F7]={d="l"}, + [0x124F8]={d="l"}, + [0x124F9]={d="l"}, + [0x124FA]={d="l"}, + [0x124FB]={d="l"}, + [0x124FC]={d="l"}, + [0x124FD]={d="l"}, + [0x124FE]={d="l"}, + [0x124FF]={d="l"}, + [0x12500]={d="l"}, + [0x12501]={d="l"}, + [0x12502]={d="l"}, + [0x12503]={d="l"}, + [0x12504]={d="l"}, + [0x12505]={d="l"}, + [0x12506]={d="l"}, + [0x12507]={d="l"}, + [0x12508]={d="l"}, + [0x12509]={d="l"}, + [0x1250A]={d="l"}, + [0x1250B]={d="l"}, + [0x1250C]={d="l"}, + [0x1250D]={d="l"}, + [0x1250E]={d="l"}, + [0x1250F]={d="l"}, + [0x12510]={d="l"}, + [0x12511]={d="l"}, + [0x12512]={d="l"}, + [0x12513]={d="l"}, + [0x12514]={d="l"}, + [0x12515]={d="l"}, + [0x12516]={d="l"}, + [0x12517]={d="l"}, + [0x12518]={d="l"}, + [0x12519]={d="l"}, + [0x1251A]={d="l"}, + [0x1251B]={d="l"}, + [0x1251C]={d="l"}, + [0x1251D]={d="l"}, + [0x1251E]={d="l"}, + [0x1251F]={d="l"}, + [0x12520]={d="l"}, + [0x12521]={d="l"}, + [0x12522]={d="l"}, + [0x12523]={d="l"}, + [0x12524]={d="l"}, + [0x12525]={d="l"}, + [0x12526]={d="l"}, + [0x12527]={d="l"}, + [0x12528]={d="l"}, + [0x12529]={d="l"}, + [0x1252A]={d="l"}, + [0x1252B]={d="l"}, + [0x1252C]={d="l"}, + [0x1252D]={d="l"}, + [0x1252E]={d="l"}, + [0x1252F]={d="l"}, + [0x12530]={d="l"}, + [0x12531]={d="l"}, + [0x12532]={d="l"}, + [0x12533]={d="l"}, + [0x12534]={d="l"}, + [0x12535]={d="l"}, + [0x12536]={d="l"}, + [0x12537]={d="l"}, + [0x12538]={d="l"}, + [0x12539]={d="l"}, + [0x1253A]={d="l"}, + [0x1253B]={d="l"}, + [0x1253C]={d="l"}, + [0x1253D]={d="l"}, + [0x1253E]={d="l"}, + [0x1253F]={d="l"}, + [0x12540]={d="l"}, + [0x12541]={d="l"}, + [0x12542]={d="l"}, + [0x12543]={d="l"}, + [0x12F90]={d="l"}, + [0x12F91]={d="l"}, + [0x12F92]={d="l"}, + [0x12F93]={d="l"}, + [0x12F94]={d="l"}, + [0x12F95]={d="l"}, + [0x12F96]={d="l"}, + [0x12F97]={d="l"}, + [0x12F98]={d="l"}, + [0x12F99]={d="l"}, + [0x12F9A]={d="l"}, + [0x12F9B]={d="l"}, + [0x12F9C]={d="l"}, + [0x12F9D]={d="l"}, + [0x12F9E]={d="l"}, + [0x12F9F]={d="l"}, + [0x12FA0]={d="l"}, + [0x12FA1]={d="l"}, + [0x12FA2]={d="l"}, + [0x12FA3]={d="l"}, + [0x12FA4]={d="l"}, + [0x12FA5]={d="l"}, + [0x12FA6]={d="l"}, + [0x12FA7]={d="l"}, + [0x12FA8]={d="l"}, + [0x12FA9]={d="l"}, + [0x12FAA]={d="l"}, + [0x12FAB]={d="l"}, + [0x12FAC]={d="l"}, + [0x12FAD]={d="l"}, + [0x12FAE]={d="l"}, + [0x12FAF]={d="l"}, + [0x12FB0]={d="l"}, + [0x12FB1]={d="l"}, + [0x12FB2]={d="l"}, + [0x12FB3]={d="l"}, + [0x12FB4]={d="l"}, + [0x12FB5]={d="l"}, + [0x12FB6]={d="l"}, + [0x12FB7]={d="l"}, + [0x12FB8]={d="l"}, + [0x12FB9]={d="l"}, + [0x12FBA]={d="l"}, + [0x12FBB]={d="l"}, + [0x12FBC]={d="l"}, + [0x12FBD]={d="l"}, + [0x12FBE]={d="l"}, + [0x12FBF]={d="l"}, + [0x12FC0]={d="l"}, + [0x12FC1]={d="l"}, + [0x12FC2]={d="l"}, + [0x12FC3]={d="l"}, + [0x12FC4]={d="l"}, + [0x12FC5]={d="l"}, + [0x12FC6]={d="l"}, + [0x12FC7]={d="l"}, + [0x12FC8]={d="l"}, + [0x12FC9]={d="l"}, + [0x12FCA]={d="l"}, + [0x12FCB]={d="l"}, + [0x12FCC]={d="l"}, + [0x12FCD]={d="l"}, + [0x12FCE]={d="l"}, + [0x12FCF]={d="l"}, + [0x12FD0]={d="l"}, + [0x12FD1]={d="l"}, + [0x12FD2]={d="l"}, + [0x12FD3]={d="l"}, + [0x12FD4]={d="l"}, + [0x12FD5]={d="l"}, + [0x12FD6]={d="l"}, + [0x12FD7]={d="l"}, + [0x12FD8]={d="l"}, + [0x12FD9]={d="l"}, + [0x12FDA]={d="l"}, + [0x12FDB]={d="l"}, + [0x12FDC]={d="l"}, + [0x12FDD]={d="l"}, + [0x12FDE]={d="l"}, + [0x12FDF]={d="l"}, + [0x12FE0]={d="l"}, + [0x12FE1]={d="l"}, + [0x12FE2]={d="l"}, + [0x12FE3]={d="l"}, + [0x12FE4]={d="l"}, + [0x12FE5]={d="l"}, + [0x12FE6]={d="l"}, + [0x12FE7]={d="l"}, + [0x12FE8]={d="l"}, + [0x12FE9]={d="l"}, + [0x12FEA]={d="l"}, + [0x12FEB]={d="l"}, + [0x12FEC]={d="l"}, + [0x12FED]={d="l"}, + [0x12FEE]={d="l"}, + [0x12FEF]={d="l"}, + [0x12FF0]={d="l"}, + [0x12FF1]={d="l"}, + [0x12FF2]={d="l"}, + [0x13000]={d="l"}, + [0x13001]={d="l"}, + [0x13002]={d="l"}, + [0x13003]={d="l"}, + [0x13004]={d="l"}, + [0x13005]={d="l"}, + [0x13006]={d="l"}, + [0x13007]={d="l"}, + [0x13008]={d="l"}, + [0x13009]={d="l"}, + [0x1300A]={d="l"}, + [0x1300B]={d="l"}, + [0x1300C]={d="l"}, + [0x1300D]={d="l"}, + [0x1300E]={d="l"}, + [0x1300F]={d="l"}, + [0x13010]={d="l"}, + [0x13011]={d="l"}, + [0x13012]={d="l"}, + [0x13013]={d="l"}, + [0x13014]={d="l"}, + [0x13015]={d="l"}, + [0x13016]={d="l"}, + [0x13017]={d="l"}, + [0x13018]={d="l"}, + [0x13019]={d="l"}, + [0x1301A]={d="l"}, + [0x1301B]={d="l"}, + [0x1301C]={d="l"}, + [0x1301D]={d="l"}, + [0x1301E]={d="l"}, + [0x1301F]={d="l"}, + [0x13020]={d="l"}, + [0x13021]={d="l"}, + [0x13022]={d="l"}, + [0x13023]={d="l"}, + [0x13024]={d="l"}, + [0x13025]={d="l"}, + [0x13026]={d="l"}, + [0x13027]={d="l"}, + [0x13028]={d="l"}, + [0x13029]={d="l"}, + [0x1302A]={d="l"}, + [0x1302B]={d="l"}, + [0x1302C]={d="l"}, + [0x1302D]={d="l"}, + [0x1302E]={d="l"}, + [0x1302F]={d="l"}, + [0x13030]={d="l"}, + [0x13031]={d="l"}, + [0x13032]={d="l"}, + [0x13033]={d="l"}, + [0x13034]={d="l"}, + [0x13035]={d="l"}, + [0x13036]={d="l"}, + [0x13037]={d="l"}, + [0x13038]={d="l"}, + [0x13039]={d="l"}, + [0x1303A]={d="l"}, + [0x1303B]={d="l"}, + [0x1303C]={d="l"}, + [0x1303D]={d="l"}, + [0x1303E]={d="l"}, + [0x1303F]={d="l"}, + [0x13040]={d="l"}, + [0x13041]={d="l"}, + [0x13042]={d="l"}, + [0x13043]={d="l"}, + [0x13044]={d="l"}, + [0x13045]={d="l"}, + [0x13046]={d="l"}, + [0x13047]={d="l"}, + [0x13048]={d="l"}, + [0x13049]={d="l"}, + [0x1304A]={d="l"}, + [0x1304B]={d="l"}, + [0x1304C]={d="l"}, + [0x1304D]={d="l"}, + [0x1304E]={d="l"}, + [0x1304F]={d="l"}, + [0x13050]={d="l"}, + [0x13051]={d="l"}, + [0x13052]={d="l"}, + [0x13053]={d="l"}, + [0x13054]={d="l"}, + [0x13055]={d="l"}, + [0x13056]={d="l"}, + [0x13057]={d="l"}, + [0x13058]={d="l"}, + [0x13059]={d="l"}, + [0x1305A]={d="l"}, + [0x1305B]={d="l"}, + [0x1305C]={d="l"}, + [0x1305D]={d="l"}, + [0x1305E]={d="l"}, + [0x1305F]={d="l"}, + [0x13060]={d="l"}, + [0x13061]={d="l"}, + [0x13062]={d="l"}, + [0x13063]={d="l"}, + [0x13064]={d="l"}, + [0x13065]={d="l"}, + [0x13066]={d="l"}, + [0x13067]={d="l"}, + [0x13068]={d="l"}, + [0x13069]={d="l"}, + [0x1306A]={d="l"}, + [0x1306B]={d="l"}, + [0x1306C]={d="l"}, + [0x1306D]={d="l"}, + [0x1306E]={d="l"}, + [0x1306F]={d="l"}, + [0x13070]={d="l"}, + [0x13071]={d="l"}, + [0x13072]={d="l"}, + [0x13073]={d="l"}, + [0x13074]={d="l"}, + [0x13075]={d="l"}, + [0x13076]={d="l"}, + [0x13077]={d="l"}, + [0x13078]={d="l"}, + [0x13079]={d="l"}, + [0x1307A]={d="l"}, + [0x1307B]={d="l"}, + [0x1307C]={d="l"}, + [0x1307D]={d="l"}, + [0x1307E]={d="l"}, + [0x1307F]={d="l"}, + [0x13080]={d="l"}, + [0x13081]={d="l"}, + [0x13082]={d="l"}, + [0x13083]={d="l"}, + [0x13084]={d="l"}, + [0x13085]={d="l"}, + [0x13086]={d="l"}, + [0x13087]={d="l"}, + [0x13088]={d="l"}, + [0x13089]={d="l"}, + [0x1308A]={d="l"}, + [0x1308B]={d="l"}, + [0x1308C]={d="l"}, + [0x1308D]={d="l"}, + [0x1308E]={d="l"}, + [0x1308F]={d="l"}, + [0x13090]={d="l"}, + [0x13091]={d="l"}, + [0x13092]={d="l"}, + [0x13093]={d="l"}, + [0x13094]={d="l"}, + [0x13095]={d="l"}, + [0x13096]={d="l"}, + [0x13097]={d="l"}, + [0x13098]={d="l"}, + [0x13099]={d="l"}, + [0x1309A]={d="l"}, + [0x1309B]={d="l"}, + [0x1309C]={d="l"}, + [0x1309D]={d="l"}, + [0x1309E]={d="l"}, + [0x1309F]={d="l"}, + [0x130A0]={d="l"}, + [0x130A1]={d="l"}, + [0x130A2]={d="l"}, + [0x130A3]={d="l"}, + [0x130A4]={d="l"}, + [0x130A5]={d="l"}, + [0x130A6]={d="l"}, + [0x130A7]={d="l"}, + [0x130A8]={d="l"}, + [0x130A9]={d="l"}, + [0x130AA]={d="l"}, + [0x130AB]={d="l"}, + [0x130AC]={d="l"}, + [0x130AD]={d="l"}, + [0x130AE]={d="l"}, + [0x130AF]={d="l"}, + [0x130B0]={d="l"}, + [0x130B1]={d="l"}, + [0x130B2]={d="l"}, + [0x130B3]={d="l"}, + [0x130B4]={d="l"}, + [0x130B5]={d="l"}, + [0x130B6]={d="l"}, + [0x130B7]={d="l"}, + [0x130B8]={d="l"}, + [0x130B9]={d="l"}, + [0x130BA]={d="l"}, + [0x130BB]={d="l"}, + [0x130BC]={d="l"}, + [0x130BD]={d="l"}, + [0x130BE]={d="l"}, + [0x130BF]={d="l"}, + [0x130C0]={d="l"}, + [0x130C1]={d="l"}, + [0x130C2]={d="l"}, + [0x130C3]={d="l"}, + [0x130C4]={d="l"}, + [0x130C5]={d="l"}, + [0x130C6]={d="l"}, + [0x130C7]={d="l"}, + [0x130C8]={d="l"}, + [0x130C9]={d="l"}, + [0x130CA]={d="l"}, + [0x130CB]={d="l"}, + [0x130CC]={d="l"}, + [0x130CD]={d="l"}, + [0x130CE]={d="l"}, + [0x130CF]={d="l"}, + [0x130D0]={d="l"}, + [0x130D1]={d="l"}, + [0x130D2]={d="l"}, + [0x130D3]={d="l"}, + [0x130D4]={d="l"}, + [0x130D5]={d="l"}, + [0x130D6]={d="l"}, + [0x130D7]={d="l"}, + [0x130D8]={d="l"}, + [0x130D9]={d="l"}, + [0x130DA]={d="l"}, + [0x130DB]={d="l"}, + [0x130DC]={d="l"}, + [0x130DD]={d="l"}, + [0x130DE]={d="l"}, + [0x130DF]={d="l"}, + [0x130E0]={d="l"}, + [0x130E1]={d="l"}, + [0x130E2]={d="l"}, + [0x130E3]={d="l"}, + [0x130E4]={d="l"}, + [0x130E5]={d="l"}, + [0x130E6]={d="l"}, + [0x130E7]={d="l"}, + [0x130E8]={d="l"}, + [0x130E9]={d="l"}, + [0x130EA]={d="l"}, + [0x130EB]={d="l"}, + [0x130EC]={d="l"}, + [0x130ED]={d="l"}, + [0x130EE]={d="l"}, + [0x130EF]={d="l"}, + [0x130F0]={d="l"}, + [0x130F1]={d="l"}, + [0x130F2]={d="l"}, + [0x130F3]={d="l"}, + [0x130F4]={d="l"}, + [0x130F5]={d="l"}, + [0x130F6]={d="l"}, + [0x130F7]={d="l"}, + [0x130F8]={d="l"}, + [0x130F9]={d="l"}, + [0x130FA]={d="l"}, + [0x130FB]={d="l"}, + [0x130FC]={d="l"}, + [0x130FD]={d="l"}, + [0x130FE]={d="l"}, + [0x130FF]={d="l"}, + [0x13100]={d="l"}, + [0x13101]={d="l"}, + [0x13102]={d="l"}, + [0x13103]={d="l"}, + [0x13104]={d="l"}, + [0x13105]={d="l"}, + [0x13106]={d="l"}, + [0x13107]={d="l"}, + [0x13108]={d="l"}, + [0x13109]={d="l"}, + [0x1310A]={d="l"}, + [0x1310B]={d="l"}, + [0x1310C]={d="l"}, + [0x1310D]={d="l"}, + [0x1310E]={d="l"}, + [0x1310F]={d="l"}, + [0x13110]={d="l"}, + [0x13111]={d="l"}, + [0x13112]={d="l"}, + [0x13113]={d="l"}, + [0x13114]={d="l"}, + [0x13115]={d="l"}, + [0x13116]={d="l"}, + [0x13117]={d="l"}, + [0x13118]={d="l"}, + [0x13119]={d="l"}, + [0x1311A]={d="l"}, + [0x1311B]={d="l"}, + [0x1311C]={d="l"}, + [0x1311D]={d="l"}, + [0x1311E]={d="l"}, + [0x1311F]={d="l"}, + [0x13120]={d="l"}, + [0x13121]={d="l"}, + [0x13122]={d="l"}, + [0x13123]={d="l"}, + [0x13124]={d="l"}, + [0x13125]={d="l"}, + [0x13126]={d="l"}, + [0x13127]={d="l"}, + [0x13128]={d="l"}, + [0x13129]={d="l"}, + [0x1312A]={d="l"}, + [0x1312B]={d="l"}, + [0x1312C]={d="l"}, + [0x1312D]={d="l"}, + [0x1312E]={d="l"}, + [0x1312F]={d="l"}, + [0x13130]={d="l"}, + [0x13131]={d="l"}, + [0x13132]={d="l"}, + [0x13133]={d="l"}, + [0x13134]={d="l"}, + [0x13135]={d="l"}, + [0x13136]={d="l"}, + [0x13137]={d="l"}, + [0x13138]={d="l"}, + [0x13139]={d="l"}, + [0x1313A]={d="l"}, + [0x1313B]={d="l"}, + [0x1313C]={d="l"}, + [0x1313D]={d="l"}, + [0x1313E]={d="l"}, + [0x1313F]={d="l"}, + [0x13140]={d="l"}, + [0x13141]={d="l"}, + [0x13142]={d="l"}, + [0x13143]={d="l"}, + [0x13144]={d="l"}, + [0x13145]={d="l"}, + [0x13146]={d="l"}, + [0x13147]={d="l"}, + [0x13148]={d="l"}, + [0x13149]={d="l"}, + [0x1314A]={d="l"}, + [0x1314B]={d="l"}, + [0x1314C]={d="l"}, + [0x1314D]={d="l"}, + [0x1314E]={d="l"}, + [0x1314F]={d="l"}, + [0x13150]={d="l"}, + [0x13151]={d="l"}, + [0x13152]={d="l"}, + [0x13153]={d="l"}, + [0x13154]={d="l"}, + [0x13155]={d="l"}, + [0x13156]={d="l"}, + [0x13157]={d="l"}, + [0x13158]={d="l"}, + [0x13159]={d="l"}, + [0x1315A]={d="l"}, + [0x1315B]={d="l"}, + [0x1315C]={d="l"}, + [0x1315D]={d="l"}, + [0x1315E]={d="l"}, + [0x1315F]={d="l"}, + [0x13160]={d="l"}, + [0x13161]={d="l"}, + [0x13162]={d="l"}, + [0x13163]={d="l"}, + [0x13164]={d="l"}, + [0x13165]={d="l"}, + [0x13166]={d="l"}, + [0x13167]={d="l"}, + [0x13168]={d="l"}, + [0x13169]={d="l"}, + [0x1316A]={d="l"}, + [0x1316B]={d="l"}, + [0x1316C]={d="l"}, + [0x1316D]={d="l"}, + [0x1316E]={d="l"}, + [0x1316F]={d="l"}, + [0x13170]={d="l"}, + [0x13171]={d="l"}, + [0x13172]={d="l"}, + [0x13173]={d="l"}, + [0x13174]={d="l"}, + [0x13175]={d="l"}, + [0x13176]={d="l"}, + [0x13177]={d="l"}, + [0x13178]={d="l"}, + [0x13179]={d="l"}, + [0x1317A]={d="l"}, + [0x1317B]={d="l"}, + [0x1317C]={d="l"}, + [0x1317D]={d="l"}, + [0x1317E]={d="l"}, + [0x1317F]={d="l"}, + [0x13180]={d="l"}, + [0x13181]={d="l"}, + [0x13182]={d="l"}, + [0x13183]={d="l"}, + [0x13184]={d="l"}, + [0x13185]={d="l"}, + [0x13186]={d="l"}, + [0x13187]={d="l"}, + [0x13188]={d="l"}, + [0x13189]={d="l"}, + [0x1318A]={d="l"}, + [0x1318B]={d="l"}, + [0x1318C]={d="l"}, + [0x1318D]={d="l"}, + [0x1318E]={d="l"}, + [0x1318F]={d="l"}, + [0x13190]={d="l"}, + [0x13191]={d="l"}, + [0x13192]={d="l"}, + [0x13193]={d="l"}, + [0x13194]={d="l"}, + [0x13195]={d="l"}, + [0x13196]={d="l"}, + [0x13197]={d="l"}, + [0x13198]={d="l"}, + [0x13199]={d="l"}, + [0x1319A]={d="l"}, + [0x1319B]={d="l"}, + [0x1319C]={d="l"}, + [0x1319D]={d="l"}, + [0x1319E]={d="l"}, + [0x1319F]={d="l"}, + [0x131A0]={d="l"}, + [0x131A1]={d="l"}, + [0x131A2]={d="l"}, + [0x131A3]={d="l"}, + [0x131A4]={d="l"}, + [0x131A5]={d="l"}, + [0x131A6]={d="l"}, + [0x131A7]={d="l"}, + [0x131A8]={d="l"}, + [0x131A9]={d="l"}, + [0x131AA]={d="l"}, + [0x131AB]={d="l"}, + [0x131AC]={d="l"}, + [0x131AD]={d="l"}, + [0x131AE]={d="l"}, + [0x131AF]={d="l"}, + [0x131B0]={d="l"}, + [0x131B1]={d="l"}, + [0x131B2]={d="l"}, + [0x131B3]={d="l"}, + [0x131B4]={d="l"}, + [0x131B5]={d="l"}, + [0x131B6]={d="l"}, + [0x131B7]={d="l"}, + [0x131B8]={d="l"}, + [0x131B9]={d="l"}, + [0x131BA]={d="l"}, + [0x131BB]={d="l"}, + [0x131BC]={d="l"}, + [0x131BD]={d="l"}, + [0x131BE]={d="l"}, + [0x131BF]={d="l"}, + [0x131C0]={d="l"}, + [0x131C1]={d="l"}, + [0x131C2]={d="l"}, + [0x131C3]={d="l"}, + [0x131C4]={d="l"}, + [0x131C5]={d="l"}, + [0x131C6]={d="l"}, + [0x131C7]={d="l"}, + [0x131C8]={d="l"}, + [0x131C9]={d="l"}, + [0x131CA]={d="l"}, + [0x131CB]={d="l"}, + [0x131CC]={d="l"}, + [0x131CD]={d="l"}, + [0x131CE]={d="l"}, + [0x131CF]={d="l"}, + [0x131D0]={d="l"}, + [0x131D1]={d="l"}, + [0x131D2]={d="l"}, + [0x131D3]={d="l"}, + [0x131D4]={d="l"}, + [0x131D5]={d="l"}, + [0x131D6]={d="l"}, + [0x131D7]={d="l"}, + [0x131D8]={d="l"}, + [0x131D9]={d="l"}, + [0x131DA]={d="l"}, + [0x131DB]={d="l"}, + [0x131DC]={d="l"}, + [0x131DD]={d="l"}, + [0x131DE]={d="l"}, + [0x131DF]={d="l"}, + [0x131E0]={d="l"}, + [0x131E1]={d="l"}, + [0x131E2]={d="l"}, + [0x131E3]={d="l"}, + [0x131E4]={d="l"}, + [0x131E5]={d="l"}, + [0x131E6]={d="l"}, + [0x131E7]={d="l"}, + [0x131E8]={d="l"}, + [0x131E9]={d="l"}, + [0x131EA]={d="l"}, + [0x131EB]={d="l"}, + [0x131EC]={d="l"}, + [0x131ED]={d="l"}, + [0x131EE]={d="l"}, + [0x131EF]={d="l"}, + [0x131F0]={d="l"}, + [0x131F1]={d="l"}, + [0x131F2]={d="l"}, + [0x131F3]={d="l"}, + [0x131F4]={d="l"}, + [0x131F5]={d="l"}, + [0x131F6]={d="l"}, + [0x131F7]={d="l"}, + [0x131F8]={d="l"}, + [0x131F9]={d="l"}, + [0x131FA]={d="l"}, + [0x131FB]={d="l"}, + [0x131FC]={d="l"}, + [0x131FD]={d="l"}, + [0x131FE]={d="l"}, + [0x131FF]={d="l"}, + [0x13200]={d="l"}, + [0x13201]={d="l"}, + [0x13202]={d="l"}, + [0x13203]={d="l"}, + [0x13204]={d="l"}, + [0x13205]={d="l"}, + [0x13206]={d="l"}, + [0x13207]={d="l"}, + [0x13208]={d="l"}, + [0x13209]={d="l"}, + [0x1320A]={d="l"}, + [0x1320B]={d="l"}, + [0x1320C]={d="l"}, + [0x1320D]={d="l"}, + [0x1320E]={d="l"}, + [0x1320F]={d="l"}, + [0x13210]={d="l"}, + [0x13211]={d="l"}, + [0x13212]={d="l"}, + [0x13213]={d="l"}, + [0x13214]={d="l"}, + [0x13215]={d="l"}, + [0x13216]={d="l"}, + [0x13217]={d="l"}, + [0x13218]={d="l"}, + [0x13219]={d="l"}, + [0x1321A]={d="l"}, + [0x1321B]={d="l"}, + [0x1321C]={d="l"}, + [0x1321D]={d="l"}, + [0x1321E]={d="l"}, + [0x1321F]={d="l"}, + [0x13220]={d="l"}, + [0x13221]={d="l"}, + [0x13222]={d="l"}, + [0x13223]={d="l"}, + [0x13224]={d="l"}, + [0x13225]={d="l"}, + [0x13226]={d="l"}, + [0x13227]={d="l"}, + [0x13228]={d="l"}, + [0x13229]={d="l"}, + [0x1322A]={d="l"}, + [0x1322B]={d="l"}, + [0x1322C]={d="l"}, + [0x1322D]={d="l"}, + [0x1322E]={d="l"}, + [0x1322F]={d="l"}, + [0x13230]={d="l"}, + [0x13231]={d="l"}, + [0x13232]={d="l"}, + [0x13233]={d="l"}, + [0x13234]={d="l"}, + [0x13235]={d="l"}, + [0x13236]={d="l"}, + [0x13237]={d="l"}, + [0x13238]={d="l"}, + [0x13239]={d="l"}, + [0x1323A]={d="l"}, + [0x1323B]={d="l"}, + [0x1323C]={d="l"}, + [0x1323D]={d="l"}, + [0x1323E]={d="l"}, + [0x1323F]={d="l"}, + [0x13240]={d="l"}, + [0x13241]={d="l"}, + [0x13242]={d="l"}, + [0x13243]={d="l"}, + [0x13244]={d="l"}, + [0x13245]={d="l"}, + [0x13246]={d="l"}, + [0x13247]={d="l"}, + [0x13248]={d="l"}, + [0x13249]={d="l"}, + [0x1324A]={d="l"}, + [0x1324B]={d="l"}, + [0x1324C]={d="l"}, + [0x1324D]={d="l"}, + [0x1324E]={d="l"}, + [0x1324F]={d="l"}, + [0x13250]={d="l"}, + [0x13251]={d="l"}, + [0x13252]={d="l"}, + [0x13253]={d="l"}, + [0x13254]={d="l"}, + [0x13255]={d="l"}, + [0x13256]={d="l"}, + [0x13257]={d="l"}, + [0x13258]={d="l"}, + [0x13259]={d="l"}, + [0x1325A]={d="l"}, + [0x1325B]={d="l"}, + [0x1325C]={d="l"}, + [0x1325D]={d="l"}, + [0x1325E]={d="l"}, + [0x1325F]={d="l"}, + [0x13260]={d="l"}, + [0x13261]={d="l"}, + [0x13262]={d="l"}, + [0x13263]={d="l"}, + [0x13264]={d="l"}, + [0x13265]={d="l"}, + [0x13266]={d="l"}, + [0x13267]={d="l"}, + [0x13268]={d="l"}, + [0x13269]={d="l"}, + [0x1326A]={d="l"}, + [0x1326B]={d="l"}, + [0x1326C]={d="l"}, + [0x1326D]={d="l"}, + [0x1326E]={d="l"}, + [0x1326F]={d="l"}, + [0x13270]={d="l"}, + [0x13271]={d="l"}, + [0x13272]={d="l"}, + [0x13273]={d="l"}, + [0x13274]={d="l"}, + [0x13275]={d="l"}, + [0x13276]={d="l"}, + [0x13277]={d="l"}, + [0x13278]={d="l"}, + [0x13279]={d="l"}, + [0x1327A]={d="l"}, + [0x1327B]={d="l"}, + [0x1327C]={d="l"}, + [0x1327D]={d="l"}, + [0x1327E]={d="l"}, + [0x1327F]={d="l"}, + [0x13280]={d="l"}, + [0x13281]={d="l"}, + [0x13282]={d="l"}, + [0x13283]={d="l"}, + [0x13284]={d="l"}, + [0x13285]={d="l"}, + [0x13286]={d="l"}, + [0x13287]={d="l"}, + [0x13288]={d="l"}, + [0x13289]={d="l"}, + [0x1328A]={d="l"}, + [0x1328B]={d="l"}, + [0x1328C]={d="l"}, + [0x1328D]={d="l"}, + [0x1328E]={d="l"}, + [0x1328F]={d="l"}, + [0x13290]={d="l"}, + [0x13291]={d="l"}, + [0x13292]={d="l"}, + [0x13293]={d="l"}, + [0x13294]={d="l"}, + [0x13295]={d="l"}, + [0x13296]={d="l"}, + [0x13297]={d="l"}, + [0x13298]={d="l"}, + [0x13299]={d="l"}, + [0x1329A]={d="l"}, + [0x1329B]={d="l"}, + [0x1329C]={d="l"}, + [0x1329D]={d="l"}, + [0x1329E]={d="l"}, + [0x1329F]={d="l"}, + [0x132A0]={d="l"}, + [0x132A1]={d="l"}, + [0x132A2]={d="l"}, + [0x132A3]={d="l"}, + [0x132A4]={d="l"}, + [0x132A5]={d="l"}, + [0x132A6]={d="l"}, + [0x132A7]={d="l"}, + [0x132A8]={d="l"}, + [0x132A9]={d="l"}, + [0x132AA]={d="l"}, + [0x132AB]={d="l"}, + [0x132AC]={d="l"}, + [0x132AD]={d="l"}, + [0x132AE]={d="l"}, + [0x132AF]={d="l"}, + [0x132B0]={d="l"}, + [0x132B1]={d="l"}, + [0x132B2]={d="l"}, + [0x132B3]={d="l"}, + [0x132B4]={d="l"}, + [0x132B5]={d="l"}, + [0x132B6]={d="l"}, + [0x132B7]={d="l"}, + [0x132B8]={d="l"}, + [0x132B9]={d="l"}, + [0x132BA]={d="l"}, + [0x132BB]={d="l"}, + [0x132BC]={d="l"}, + [0x132BD]={d="l"}, + [0x132BE]={d="l"}, + [0x132BF]={d="l"}, + [0x132C0]={d="l"}, + [0x132C1]={d="l"}, + [0x132C2]={d="l"}, + [0x132C3]={d="l"}, + [0x132C4]={d="l"}, + [0x132C5]={d="l"}, + [0x132C6]={d="l"}, + [0x132C7]={d="l"}, + [0x132C8]={d="l"}, + [0x132C9]={d="l"}, + [0x132CA]={d="l"}, + [0x132CB]={d="l"}, + [0x132CC]={d="l"}, + [0x132CD]={d="l"}, + [0x132CE]={d="l"}, + [0x132CF]={d="l"}, + [0x132D0]={d="l"}, + [0x132D1]={d="l"}, + [0x132D2]={d="l"}, + [0x132D3]={d="l"}, + [0x132D4]={d="l"}, + [0x132D5]={d="l"}, + [0x132D6]={d="l"}, + [0x132D7]={d="l"}, + [0x132D8]={d="l"}, + [0x132D9]={d="l"}, + [0x132DA]={d="l"}, + [0x132DB]={d="l"}, + [0x132DC]={d="l"}, + [0x132DD]={d="l"}, + [0x132DE]={d="l"}, + [0x132DF]={d="l"}, + [0x132E0]={d="l"}, + [0x132E1]={d="l"}, + [0x132E2]={d="l"}, + [0x132E3]={d="l"}, + [0x132E4]={d="l"}, + [0x132E5]={d="l"}, + [0x132E6]={d="l"}, + [0x132E7]={d="l"}, + [0x132E8]={d="l"}, + [0x132E9]={d="l"}, + [0x132EA]={d="l"}, + [0x132EB]={d="l"}, + [0x132EC]={d="l"}, + [0x132ED]={d="l"}, + [0x132EE]={d="l"}, + [0x132EF]={d="l"}, + [0x132F0]={d="l"}, + [0x132F1]={d="l"}, + [0x132F2]={d="l"}, + [0x132F3]={d="l"}, + [0x132F4]={d="l"}, + [0x132F5]={d="l"}, + [0x132F6]={d="l"}, + [0x132F7]={d="l"}, + [0x132F8]={d="l"}, + [0x132F9]={d="l"}, + [0x132FA]={d="l"}, + [0x132FB]={d="l"}, + [0x132FC]={d="l"}, + [0x132FD]={d="l"}, + [0x132FE]={d="l"}, + [0x132FF]={d="l"}, + [0x13300]={d="l"}, + [0x13301]={d="l"}, + [0x13302]={d="l"}, + [0x13303]={d="l"}, + [0x13304]={d="l"}, + [0x13305]={d="l"}, + [0x13306]={d="l"}, + [0x13307]={d="l"}, + [0x13308]={d="l"}, + [0x13309]={d="l"}, + [0x1330A]={d="l"}, + [0x1330B]={d="l"}, + [0x1330C]={d="l"}, + [0x1330D]={d="l"}, + [0x1330E]={d="l"}, + [0x1330F]={d="l"}, + [0x13310]={d="l"}, + [0x13311]={d="l"}, + [0x13312]={d="l"}, + [0x13313]={d="l"}, + [0x13314]={d="l"}, + [0x13315]={d="l"}, + [0x13316]={d="l"}, + [0x13317]={d="l"}, + [0x13318]={d="l"}, + [0x13319]={d="l"}, + [0x1331A]={d="l"}, + [0x1331B]={d="l"}, + [0x1331C]={d="l"}, + [0x1331D]={d="l"}, + [0x1331E]={d="l"}, + [0x1331F]={d="l"}, + [0x13320]={d="l"}, + [0x13321]={d="l"}, + [0x13322]={d="l"}, + [0x13323]={d="l"}, + [0x13324]={d="l"}, + [0x13325]={d="l"}, + [0x13326]={d="l"}, + [0x13327]={d="l"}, + [0x13328]={d="l"}, + [0x13329]={d="l"}, + [0x1332A]={d="l"}, + [0x1332B]={d="l"}, + [0x1332C]={d="l"}, + [0x1332D]={d="l"}, + [0x1332E]={d="l"}, + [0x1332F]={d="l"}, + [0x13330]={d="l"}, + [0x13331]={d="l"}, + [0x13332]={d="l"}, + [0x13333]={d="l"}, + [0x13334]={d="l"}, + [0x13335]={d="l"}, + [0x13336]={d="l"}, + [0x13337]={d="l"}, + [0x13338]={d="l"}, + [0x13339]={d="l"}, + [0x1333A]={d="l"}, + [0x1333B]={d="l"}, + [0x1333C]={d="l"}, + [0x1333D]={d="l"}, + [0x1333E]={d="l"}, + [0x1333F]={d="l"}, + [0x13340]={d="l"}, + [0x13341]={d="l"}, + [0x13342]={d="l"}, + [0x13343]={d="l"}, + [0x13344]={d="l"}, + [0x13345]={d="l"}, + [0x13346]={d="l"}, + [0x13347]={d="l"}, + [0x13348]={d="l"}, + [0x13349]={d="l"}, + [0x1334A]={d="l"}, + [0x1334B]={d="l"}, + [0x1334C]={d="l"}, + [0x1334D]={d="l"}, + [0x1334E]={d="l"}, + [0x1334F]={d="l"}, + [0x13350]={d="l"}, + [0x13351]={d="l"}, + [0x13352]={d="l"}, + [0x13353]={d="l"}, + [0x13354]={d="l"}, + [0x13355]={d="l"}, + [0x13356]={d="l"}, + [0x13357]={d="l"}, + [0x13358]={d="l"}, + [0x13359]={d="l"}, + [0x1335A]={d="l"}, + [0x1335B]={d="l"}, + [0x1335C]={d="l"}, + [0x1335D]={d="l"}, + [0x1335E]={d="l"}, + [0x1335F]={d="l"}, + [0x13360]={d="l"}, + [0x13361]={d="l"}, + [0x13362]={d="l"}, + [0x13363]={d="l"}, + [0x13364]={d="l"}, + [0x13365]={d="l"}, + [0x13366]={d="l"}, + [0x13367]={d="l"}, + [0x13368]={d="l"}, + [0x13369]={d="l"}, + [0x1336A]={d="l"}, + [0x1336B]={d="l"}, + [0x1336C]={d="l"}, + [0x1336D]={d="l"}, + [0x1336E]={d="l"}, + [0x1336F]={d="l"}, + [0x13370]={d="l"}, + [0x13371]={d="l"}, + [0x13372]={d="l"}, + [0x13373]={d="l"}, + [0x13374]={d="l"}, + [0x13375]={d="l"}, + [0x13376]={d="l"}, + [0x13377]={d="l"}, + [0x13378]={d="l"}, + [0x13379]={d="l"}, + [0x1337A]={d="l"}, + [0x1337B]={d="l"}, + [0x1337C]={d="l"}, + [0x1337D]={d="l"}, + [0x1337E]={d="l"}, + [0x1337F]={d="l"}, + [0x13380]={d="l"}, + [0x13381]={d="l"}, + [0x13382]={d="l"}, + [0x13383]={d="l"}, + [0x13384]={d="l"}, + [0x13385]={d="l"}, + [0x13386]={d="l"}, + [0x13387]={d="l"}, + [0x13388]={d="l"}, + [0x13389]={d="l"}, + [0x1338A]={d="l"}, + [0x1338B]={d="l"}, + [0x1338C]={d="l"}, + [0x1338D]={d="l"}, + [0x1338E]={d="l"}, + [0x1338F]={d="l"}, + [0x13390]={d="l"}, + [0x13391]={d="l"}, + [0x13392]={d="l"}, + [0x13393]={d="l"}, + [0x13394]={d="l"}, + [0x13395]={d="l"}, + [0x13396]={d="l"}, + [0x13397]={d="l"}, + [0x13398]={d="l"}, + [0x13399]={d="l"}, + [0x1339A]={d="l"}, + [0x1339B]={d="l"}, + [0x1339C]={d="l"}, + [0x1339D]={d="l"}, + [0x1339E]={d="l"}, + [0x1339F]={d="l"}, + [0x133A0]={d="l"}, + [0x133A1]={d="l"}, + [0x133A2]={d="l"}, + [0x133A3]={d="l"}, + [0x133A4]={d="l"}, + [0x133A5]={d="l"}, + [0x133A6]={d="l"}, + [0x133A7]={d="l"}, + [0x133A8]={d="l"}, + [0x133A9]={d="l"}, + [0x133AA]={d="l"}, + [0x133AB]={d="l"}, + [0x133AC]={d="l"}, + [0x133AD]={d="l"}, + [0x133AE]={d="l"}, + [0x133AF]={d="l"}, + [0x133B0]={d="l"}, + [0x133B1]={d="l"}, + [0x133B2]={d="l"}, + [0x133B3]={d="l"}, + [0x133B4]={d="l"}, + [0x133B5]={d="l"}, + [0x133B6]={d="l"}, + [0x133B7]={d="l"}, + [0x133B8]={d="l"}, + [0x133B9]={d="l"}, + [0x133BA]={d="l"}, + [0x133BB]={d="l"}, + [0x133BC]={d="l"}, + [0x133BD]={d="l"}, + [0x133BE]={d="l"}, + [0x133BF]={d="l"}, + [0x133C0]={d="l"}, + [0x133C1]={d="l"}, + [0x133C2]={d="l"}, + [0x133C3]={d="l"}, + [0x133C4]={d="l"}, + [0x133C5]={d="l"}, + [0x133C6]={d="l"}, + [0x133C7]={d="l"}, + [0x133C8]={d="l"}, + [0x133C9]={d="l"}, + [0x133CA]={d="l"}, + [0x133CB]={d="l"}, + [0x133CC]={d="l"}, + [0x133CD]={d="l"}, + [0x133CE]={d="l"}, + [0x133CF]={d="l"}, + [0x133D0]={d="l"}, + [0x133D1]={d="l"}, + [0x133D2]={d="l"}, + [0x133D3]={d="l"}, + [0x133D4]={d="l"}, + [0x133D5]={d="l"}, + [0x133D6]={d="l"}, + [0x133D7]={d="l"}, + [0x133D8]={d="l"}, + [0x133D9]={d="l"}, + [0x133DA]={d="l"}, + [0x133DB]={d="l"}, + [0x133DC]={d="l"}, + [0x133DD]={d="l"}, + [0x133DE]={d="l"}, + [0x133DF]={d="l"}, + [0x133E0]={d="l"}, + [0x133E1]={d="l"}, + [0x133E2]={d="l"}, + [0x133E3]={d="l"}, + [0x133E4]={d="l"}, + [0x133E5]={d="l"}, + [0x133E6]={d="l"}, + [0x133E7]={d="l"}, + [0x133E8]={d="l"}, + [0x133E9]={d="l"}, + [0x133EA]={d="l"}, + [0x133EB]={d="l"}, + [0x133EC]={d="l"}, + [0x133ED]={d="l"}, + [0x133EE]={d="l"}, + [0x133EF]={d="l"}, + [0x133F0]={d="l"}, + [0x133F1]={d="l"}, + [0x133F2]={d="l"}, + [0x133F3]={d="l"}, + [0x133F4]={d="l"}, + [0x133F5]={d="l"}, + [0x133F6]={d="l"}, + [0x133F7]={d="l"}, + [0x133F8]={d="l"}, + [0x133F9]={d="l"}, + [0x133FA]={d="l"}, + [0x133FB]={d="l"}, + [0x133FC]={d="l"}, + [0x133FD]={d="l"}, + [0x133FE]={d="l"}, + [0x133FF]={d="l"}, + [0x13400]={d="l"}, + [0x13401]={d="l"}, + [0x13402]={d="l"}, + [0x13403]={d="l"}, + [0x13404]={d="l"}, + [0x13405]={d="l"}, + [0x13406]={d="l"}, + [0x13407]={d="l"}, + [0x13408]={d="l"}, + [0x13409]={d="l"}, + [0x1340A]={d="l"}, + [0x1340B]={d="l"}, + [0x1340C]={d="l"}, + [0x1340D]={d="l"}, + [0x1340E]={d="l"}, + [0x1340F]={d="l"}, + [0x13410]={d="l"}, + [0x13411]={d="l"}, + [0x13412]={d="l"}, + [0x13413]={d="l"}, + [0x13414]={d="l"}, + [0x13415]={d="l"}, + [0x13416]={d="l"}, + [0x13417]={d="l"}, + [0x13418]={d="l"}, + [0x13419]={d="l"}, + [0x1341A]={d="l"}, + [0x1341B]={d="l"}, + [0x1341C]={d="l"}, + [0x1341D]={d="l"}, + [0x1341E]={d="l"}, + [0x1341F]={d="l"}, + [0x13420]={d="l"}, + [0x13421]={d="l"}, + [0x13422]={d="l"}, + [0x13423]={d="l"}, + [0x13424]={d="l"}, + [0x13425]={d="l"}, + [0x13426]={d="l"}, + [0x13427]={d="l"}, + [0x13428]={d="l"}, + [0x13429]={d="l"}, + [0x1342A]={d="l"}, + [0x1342B]={d="l"}, + [0x1342C]={d="l"}, + [0x1342D]={d="l"}, + [0x1342E]={d="l"}, + [0x1342F]={d="l"}, + [0x13430]={d="l"}, + [0x13431]={d="l"}, + [0x13432]={d="l"}, + [0x13433]={d="l"}, + [0x13434]={d="l"}, + [0x13435]={d="l"}, + [0x13436]={d="l"}, + [0x13437]={d="l"}, + [0x13438]={d="l"}, + [0x13439]={d="l"}, + [0x1343A]={d="l"}, + [0x1343B]={d="l"}, + [0x1343C]={d="l"}, + [0x1343D]={d="l"}, + [0x1343E]={d="l"}, + [0x1343F]={d="l"}, + [0x13440]={d="nsm"}, + [0x13441]={d="l"}, + [0x13442]={d="l"}, + [0x13443]={d="l"}, + [0x13444]={d="l"}, + [0x13445]={d="l"}, + [0x13446]={d="l"}, + [0x13447]={d="nsm"}, + [0x13448]={d="nsm"}, + [0x13449]={d="nsm"}, + [0x1344A]={d="nsm"}, + [0x1344B]={d="nsm"}, + [0x1344C]={d="nsm"}, + [0x1344D]={d="nsm"}, + [0x1344E]={d="nsm"}, + [0x1344F]={d="nsm"}, + [0x13450]={d="nsm"}, + [0x13451]={d="nsm"}, + [0x13452]={d="nsm"}, + [0x13453]={d="nsm"}, + [0x13454]={d="nsm"}, + [0x13455]={d="nsm"}, + [0x14400]={d="l"}, + [0x14401]={d="l"}, + [0x14402]={d="l"}, + [0x14403]={d="l"}, + [0x14404]={d="l"}, + [0x14405]={d="l"}, + [0x14406]={d="l"}, + [0x14407]={d="l"}, + [0x14408]={d="l"}, + [0x14409]={d="l"}, + [0x1440A]={d="l"}, + [0x1440B]={d="l"}, + [0x1440C]={d="l"}, + [0x1440D]={d="l"}, + [0x1440E]={d="l"}, + [0x1440F]={d="l"}, + [0x14410]={d="l"}, + [0x14411]={d="l"}, + [0x14412]={d="l"}, + [0x14413]={d="l"}, + [0x14414]={d="l"}, + [0x14415]={d="l"}, + [0x14416]={d="l"}, + [0x14417]={d="l"}, + [0x14418]={d="l"}, + [0x14419]={d="l"}, + [0x1441A]={d="l"}, + [0x1441B]={d="l"}, + [0x1441C]={d="l"}, + [0x1441D]={d="l"}, + [0x1441E]={d="l"}, + [0x1441F]={d="l"}, + [0x14420]={d="l"}, + [0x14421]={d="l"}, + [0x14422]={d="l"}, + [0x14423]={d="l"}, + [0x14424]={d="l"}, + [0x14425]={d="l"}, + [0x14426]={d="l"}, + [0x14427]={d="l"}, + [0x14428]={d="l"}, + [0x14429]={d="l"}, + [0x1442A]={d="l"}, + [0x1442B]={d="l"}, + [0x1442C]={d="l"}, + [0x1442D]={d="l"}, + [0x1442E]={d="l"}, + [0x1442F]={d="l"}, + [0x14430]={d="l"}, + [0x14431]={d="l"}, + [0x14432]={d="l"}, + [0x14433]={d="l"}, + [0x14434]={d="l"}, + [0x14435]={d="l"}, + [0x14436]={d="l"}, + [0x14437]={d="l"}, + [0x14438]={d="l"}, + [0x14439]={d="l"}, + [0x1443A]={d="l"}, + [0x1443B]={d="l"}, + [0x1443C]={d="l"}, + [0x1443D]={d="l"}, + [0x1443E]={d="l"}, + [0x1443F]={d="l"}, + [0x14440]={d="l"}, + [0x14441]={d="l"}, + [0x14442]={d="l"}, + [0x14443]={d="l"}, + [0x14444]={d="l"}, + [0x14445]={d="l"}, + [0x14446]={d="l"}, + [0x14447]={d="l"}, + [0x14448]={d="l"}, + [0x14449]={d="l"}, + [0x1444A]={d="l"}, + [0x1444B]={d="l"}, + [0x1444C]={d="l"}, + [0x1444D]={d="l"}, + [0x1444E]={d="l"}, + [0x1444F]={d="l"}, + [0x14450]={d="l"}, + [0x14451]={d="l"}, + [0x14452]={d="l"}, + [0x14453]={d="l"}, + [0x14454]={d="l"}, + [0x14455]={d="l"}, + [0x14456]={d="l"}, + [0x14457]={d="l"}, + [0x14458]={d="l"}, + [0x14459]={d="l"}, + [0x1445A]={d="l"}, + [0x1445B]={d="l"}, + [0x1445C]={d="l"}, + [0x1445D]={d="l"}, + [0x1445E]={d="l"}, + [0x1445F]={d="l"}, + [0x14460]={d="l"}, + [0x14461]={d="l"}, + [0x14462]={d="l"}, + [0x14463]={d="l"}, + [0x14464]={d="l"}, + [0x14465]={d="l"}, + [0x14466]={d="l"}, + [0x14467]={d="l"}, + [0x14468]={d="l"}, + [0x14469]={d="l"}, + [0x1446A]={d="l"}, + [0x1446B]={d="l"}, + [0x1446C]={d="l"}, + [0x1446D]={d="l"}, + [0x1446E]={d="l"}, + [0x1446F]={d="l"}, + [0x14470]={d="l"}, + [0x14471]={d="l"}, + [0x14472]={d="l"}, + [0x14473]={d="l"}, + [0x14474]={d="l"}, + [0x14475]={d="l"}, + [0x14476]={d="l"}, + [0x14477]={d="l"}, + [0x14478]={d="l"}, + [0x14479]={d="l"}, + [0x1447A]={d="l"}, + [0x1447B]={d="l"}, + [0x1447C]={d="l"}, + [0x1447D]={d="l"}, + [0x1447E]={d="l"}, + [0x1447F]={d="l"}, + [0x14480]={d="l"}, + [0x14481]={d="l"}, + [0x14482]={d="l"}, + [0x14483]={d="l"}, + [0x14484]={d="l"}, + [0x14485]={d="l"}, + [0x14486]={d="l"}, + [0x14487]={d="l"}, + [0x14488]={d="l"}, + [0x14489]={d="l"}, + [0x1448A]={d="l"}, + [0x1448B]={d="l"}, + [0x1448C]={d="l"}, + [0x1448D]={d="l"}, + [0x1448E]={d="l"}, + [0x1448F]={d="l"}, + [0x14490]={d="l"}, + [0x14491]={d="l"}, + [0x14492]={d="l"}, + [0x14493]={d="l"}, + [0x14494]={d="l"}, + [0x14495]={d="l"}, + [0x14496]={d="l"}, + [0x14497]={d="l"}, + [0x14498]={d="l"}, + [0x14499]={d="l"}, + [0x1449A]={d="l"}, + [0x1449B]={d="l"}, + [0x1449C]={d="l"}, + [0x1449D]={d="l"}, + [0x1449E]={d="l"}, + [0x1449F]={d="l"}, + [0x144A0]={d="l"}, + [0x144A1]={d="l"}, + [0x144A2]={d="l"}, + [0x144A3]={d="l"}, + [0x144A4]={d="l"}, + [0x144A5]={d="l"}, + [0x144A6]={d="l"}, + [0x144A7]={d="l"}, + [0x144A8]={d="l"}, + [0x144A9]={d="l"}, + [0x144AA]={d="l"}, + [0x144AB]={d="l"}, + [0x144AC]={d="l"}, + [0x144AD]={d="l"}, + [0x144AE]={d="l"}, + [0x144AF]={d="l"}, + [0x144B0]={d="l"}, + [0x144B1]={d="l"}, + [0x144B2]={d="l"}, + [0x144B3]={d="l"}, + [0x144B4]={d="l"}, + [0x144B5]={d="l"}, + [0x144B6]={d="l"}, + [0x144B7]={d="l"}, + [0x144B8]={d="l"}, + [0x144B9]={d="l"}, + [0x144BA]={d="l"}, + [0x144BB]={d="l"}, + [0x144BC]={d="l"}, + [0x144BD]={d="l"}, + [0x144BE]={d="l"}, + [0x144BF]={d="l"}, + [0x144C0]={d="l"}, + [0x144C1]={d="l"}, + [0x144C2]={d="l"}, + [0x144C3]={d="l"}, + [0x144C4]={d="l"}, + [0x144C5]={d="l"}, + [0x144C6]={d="l"}, + [0x144C7]={d="l"}, + [0x144C8]={d="l"}, + [0x144C9]={d="l"}, + [0x144CA]={d="l"}, + [0x144CB]={d="l"}, + [0x144CC]={d="l"}, + [0x144CD]={d="l"}, + [0x144CE]={d="l"}, + [0x144CF]={d="l"}, + [0x144D0]={d="l"}, + [0x144D1]={d="l"}, + [0x144D2]={d="l"}, + [0x144D3]={d="l"}, + [0x144D4]={d="l"}, + [0x144D5]={d="l"}, + [0x144D6]={d="l"}, + [0x144D7]={d="l"}, + [0x144D8]={d="l"}, + [0x144D9]={d="l"}, + [0x144DA]={d="l"}, + [0x144DB]={d="l"}, + [0x144DC]={d="l"}, + [0x144DD]={d="l"}, + [0x144DE]={d="l"}, + [0x144DF]={d="l"}, + [0x144E0]={d="l"}, + [0x144E1]={d="l"}, + [0x144E2]={d="l"}, + [0x144E3]={d="l"}, + [0x144E4]={d="l"}, + [0x144E5]={d="l"}, + [0x144E6]={d="l"}, + [0x144E7]={d="l"}, + [0x144E8]={d="l"}, + [0x144E9]={d="l"}, + [0x144EA]={d="l"}, + [0x144EB]={d="l"}, + [0x144EC]={d="l"}, + [0x144ED]={d="l"}, + [0x144EE]={d="l"}, + [0x144EF]={d="l"}, + [0x144F0]={d="l"}, + [0x144F1]={d="l"}, + [0x144F2]={d="l"}, + [0x144F3]={d="l"}, + [0x144F4]={d="l"}, + [0x144F5]={d="l"}, + [0x144F6]={d="l"}, + [0x144F7]={d="l"}, + [0x144F8]={d="l"}, + [0x144F9]={d="l"}, + [0x144FA]={d="l"}, + [0x144FB]={d="l"}, + [0x144FC]={d="l"}, + [0x144FD]={d="l"}, + [0x144FE]={d="l"}, + [0x144FF]={d="l"}, + [0x14500]={d="l"}, + [0x14501]={d="l"}, + [0x14502]={d="l"}, + [0x14503]={d="l"}, + [0x14504]={d="l"}, + [0x14505]={d="l"}, + [0x14506]={d="l"}, + [0x14507]={d="l"}, + [0x14508]={d="l"}, + [0x14509]={d="l"}, + [0x1450A]={d="l"}, + [0x1450B]={d="l"}, + [0x1450C]={d="l"}, + [0x1450D]={d="l"}, + [0x1450E]={d="l"}, + [0x1450F]={d="l"}, + [0x14510]={d="l"}, + [0x14511]={d="l"}, + [0x14512]={d="l"}, + [0x14513]={d="l"}, + [0x14514]={d="l"}, + [0x14515]={d="l"}, + [0x14516]={d="l"}, + [0x14517]={d="l"}, + [0x14518]={d="l"}, + [0x14519]={d="l"}, + [0x1451A]={d="l"}, + [0x1451B]={d="l"}, + [0x1451C]={d="l"}, + [0x1451D]={d="l"}, + [0x1451E]={d="l"}, + [0x1451F]={d="l"}, + [0x14520]={d="l"}, + [0x14521]={d="l"}, + [0x14522]={d="l"}, + [0x14523]={d="l"}, + [0x14524]={d="l"}, + [0x14525]={d="l"}, + [0x14526]={d="l"}, + [0x14527]={d="l"}, + [0x14528]={d="l"}, + [0x14529]={d="l"}, + [0x1452A]={d="l"}, + [0x1452B]={d="l"}, + [0x1452C]={d="l"}, + [0x1452D]={d="l"}, + [0x1452E]={d="l"}, + [0x1452F]={d="l"}, + [0x14530]={d="l"}, + [0x14531]={d="l"}, + [0x14532]={d="l"}, + [0x14533]={d="l"}, + [0x14534]={d="l"}, + [0x14535]={d="l"}, + [0x14536]={d="l"}, + [0x14537]={d="l"}, + [0x14538]={d="l"}, + [0x14539]={d="l"}, + [0x1453A]={d="l"}, + [0x1453B]={d="l"}, + [0x1453C]={d="l"}, + [0x1453D]={d="l"}, + [0x1453E]={d="l"}, + [0x1453F]={d="l"}, + [0x14540]={d="l"}, + [0x14541]={d="l"}, + [0x14542]={d="l"}, + [0x14543]={d="l"}, + [0x14544]={d="l"}, + [0x14545]={d="l"}, + [0x14546]={d="l"}, + [0x14547]={d="l"}, + [0x14548]={d="l"}, + [0x14549]={d="l"}, + [0x1454A]={d="l"}, + [0x1454B]={d="l"}, + [0x1454C]={d="l"}, + [0x1454D]={d="l"}, + [0x1454E]={d="l"}, + [0x1454F]={d="l"}, + [0x14550]={d="l"}, + [0x14551]={d="l"}, + [0x14552]={d="l"}, + [0x14553]={d="l"}, + [0x14554]={d="l"}, + [0x14555]={d="l"}, + [0x14556]={d="l"}, + [0x14557]={d="l"}, + [0x14558]={d="l"}, + [0x14559]={d="l"}, + [0x1455A]={d="l"}, + [0x1455B]={d="l"}, + [0x1455C]={d="l"}, + [0x1455D]={d="l"}, + [0x1455E]={d="l"}, + [0x1455F]={d="l"}, + [0x14560]={d="l"}, + [0x14561]={d="l"}, + [0x14562]={d="l"}, + [0x14563]={d="l"}, + [0x14564]={d="l"}, + [0x14565]={d="l"}, + [0x14566]={d="l"}, + [0x14567]={d="l"}, + [0x14568]={d="l"}, + [0x14569]={d="l"}, + [0x1456A]={d="l"}, + [0x1456B]={d="l"}, + [0x1456C]={d="l"}, + [0x1456D]={d="l"}, + [0x1456E]={d="l"}, + [0x1456F]={d="l"}, + [0x14570]={d="l"}, + [0x14571]={d="l"}, + [0x14572]={d="l"}, + [0x14573]={d="l"}, + [0x14574]={d="l"}, + [0x14575]={d="l"}, + [0x14576]={d="l"}, + [0x14577]={d="l"}, + [0x14578]={d="l"}, + [0x14579]={d="l"}, + [0x1457A]={d="l"}, + [0x1457B]={d="l"}, + [0x1457C]={d="l"}, + [0x1457D]={d="l"}, + [0x1457E]={d="l"}, + [0x1457F]={d="l"}, + [0x14580]={d="l"}, + [0x14581]={d="l"}, + [0x14582]={d="l"}, + [0x14583]={d="l"}, + [0x14584]={d="l"}, + [0x14585]={d="l"}, + [0x14586]={d="l"}, + [0x14587]={d="l"}, + [0x14588]={d="l"}, + [0x14589]={d="l"}, + [0x1458A]={d="l"}, + [0x1458B]={d="l"}, + [0x1458C]={d="l"}, + [0x1458D]={d="l"}, + [0x1458E]={d="l"}, + [0x1458F]={d="l"}, + [0x14590]={d="l"}, + [0x14591]={d="l"}, + [0x14592]={d="l"}, + [0x14593]={d="l"}, + [0x14594]={d="l"}, + [0x14595]={d="l"}, + [0x14596]={d="l"}, + [0x14597]={d="l"}, + [0x14598]={d="l"}, + [0x14599]={d="l"}, + [0x1459A]={d="l"}, + [0x1459B]={d="l"}, + [0x1459C]={d="l"}, + [0x1459D]={d="l"}, + [0x1459E]={d="l"}, + [0x1459F]={d="l"}, + [0x145A0]={d="l"}, + [0x145A1]={d="l"}, + [0x145A2]={d="l"}, + [0x145A3]={d="l"}, + [0x145A4]={d="l"}, + [0x145A5]={d="l"}, + [0x145A6]={d="l"}, + [0x145A7]={d="l"}, + [0x145A8]={d="l"}, + [0x145A9]={d="l"}, + [0x145AA]={d="l"}, + [0x145AB]={d="l"}, + [0x145AC]={d="l"}, + [0x145AD]={d="l"}, + [0x145AE]={d="l"}, + [0x145AF]={d="l"}, + [0x145B0]={d="l"}, + [0x145B1]={d="l"}, + [0x145B2]={d="l"}, + [0x145B3]={d="l"}, + [0x145B4]={d="l"}, + [0x145B5]={d="l"}, + [0x145B6]={d="l"}, + [0x145B7]={d="l"}, + [0x145B8]={d="l"}, + [0x145B9]={d="l"}, + [0x145BA]={d="l"}, + [0x145BB]={d="l"}, + [0x145BC]={d="l"}, + [0x145BD]={d="l"}, + [0x145BE]={d="l"}, + [0x145BF]={d="l"}, + [0x145C0]={d="l"}, + [0x145C1]={d="l"}, + [0x145C2]={d="l"}, + [0x145C3]={d="l"}, + [0x145C4]={d="l"}, + [0x145C5]={d="l"}, + [0x145C6]={d="l"}, + [0x145C7]={d="l"}, + [0x145C8]={d="l"}, + [0x145C9]={d="l"}, + [0x145CA]={d="l"}, + [0x145CB]={d="l"}, + [0x145CC]={d="l"}, + [0x145CD]={d="l"}, + [0x145CE]={d="l"}, + [0x145CF]={d="l"}, + [0x145D0]={d="l"}, + [0x145D1]={d="l"}, + [0x145D2]={d="l"}, + [0x145D3]={d="l"}, + [0x145D4]={d="l"}, + [0x145D5]={d="l"}, + [0x145D6]={d="l"}, + [0x145D7]={d="l"}, + [0x145D8]={d="l"}, + [0x145D9]={d="l"}, + [0x145DA]={d="l"}, + [0x145DB]={d="l"}, + [0x145DC]={d="l"}, + [0x145DD]={d="l"}, + [0x145DE]={d="l"}, + [0x145DF]={d="l"}, + [0x145E0]={d="l"}, + [0x145E1]={d="l"}, + [0x145E2]={d="l"}, + [0x145E3]={d="l"}, + [0x145E4]={d="l"}, + [0x145E5]={d="l"}, + [0x145E6]={d="l"}, + [0x145E7]={d="l"}, + [0x145E8]={d="l"}, + [0x145E9]={d="l"}, + [0x145EA]={d="l"}, + [0x145EB]={d="l"}, + [0x145EC]={d="l"}, + [0x145ED]={d="l"}, + [0x145EE]={d="l"}, + [0x145EF]={d="l"}, + [0x145F0]={d="l"}, + [0x145F1]={d="l"}, + [0x145F2]={d="l"}, + [0x145F3]={d="l"}, + [0x145F4]={d="l"}, + [0x145F5]={d="l"}, + [0x145F6]={d="l"}, + [0x145F7]={d="l"}, + [0x145F8]={d="l"}, + [0x145F9]={d="l"}, + [0x145FA]={d="l"}, + [0x145FB]={d="l"}, + [0x145FC]={d="l"}, + [0x145FD]={d="l"}, + [0x145FE]={d="l"}, + [0x145FF]={d="l"}, + [0x14600]={d="l"}, + [0x14601]={d="l"}, + [0x14602]={d="l"}, + [0x14603]={d="l"}, + [0x14604]={d="l"}, + [0x14605]={d="l"}, + [0x14606]={d="l"}, + [0x14607]={d="l"}, + [0x14608]={d="l"}, + [0x14609]={d="l"}, + [0x1460A]={d="l"}, + [0x1460B]={d="l"}, + [0x1460C]={d="l"}, + [0x1460D]={d="l"}, + [0x1460E]={d="l"}, + [0x1460F]={d="l"}, + [0x14610]={d="l"}, + [0x14611]={d="l"}, + [0x14612]={d="l"}, + [0x14613]={d="l"}, + [0x14614]={d="l"}, + [0x14615]={d="l"}, + [0x14616]={d="l"}, + [0x14617]={d="l"}, + [0x14618]={d="l"}, + [0x14619]={d="l"}, + [0x1461A]={d="l"}, + [0x1461B]={d="l"}, + [0x1461C]={d="l"}, + [0x1461D]={d="l"}, + [0x1461E]={d="l"}, + [0x1461F]={d="l"}, + [0x14620]={d="l"}, + [0x14621]={d="l"}, + [0x14622]={d="l"}, + [0x14623]={d="l"}, + [0x14624]={d="l"}, + [0x14625]={d="l"}, + [0x14626]={d="l"}, + [0x14627]={d="l"}, + [0x14628]={d="l"}, + [0x14629]={d="l"}, + [0x1462A]={d="l"}, + [0x1462B]={d="l"}, + [0x1462C]={d="l"}, + [0x1462D]={d="l"}, + [0x1462E]={d="l"}, + [0x1462F]={d="l"}, + [0x14630]={d="l"}, + [0x14631]={d="l"}, + [0x14632]={d="l"}, + [0x14633]={d="l"}, + [0x14634]={d="l"}, + [0x14635]={d="l"}, + [0x14636]={d="l"}, + [0x14637]={d="l"}, + [0x14638]={d="l"}, + [0x14639]={d="l"}, + [0x1463A]={d="l"}, + [0x1463B]={d="l"}, + [0x1463C]={d="l"}, + [0x1463D]={d="l"}, + [0x1463E]={d="l"}, + [0x1463F]={d="l"}, + [0x14640]={d="l"}, + [0x14641]={d="l"}, + [0x14642]={d="l"}, + [0x14643]={d="l"}, + [0x14644]={d="l"}, + [0x14645]={d="l"}, + [0x14646]={d="l"}, + [0x16800]={d="l"}, + [0x16801]={d="l"}, + [0x16802]={d="l"}, + [0x16803]={d="l"}, + [0x16804]={d="l"}, + [0x16805]={d="l"}, + [0x16806]={d="l"}, + [0x16807]={d="l"}, + [0x16808]={d="l"}, + [0x16809]={d="l"}, + [0x1680A]={d="l"}, + [0x1680B]={d="l"}, + [0x1680C]={d="l"}, + [0x1680D]={d="l"}, + [0x1680E]={d="l"}, + [0x1680F]={d="l"}, + [0x16810]={d="l"}, + [0x16811]={d="l"}, + [0x16812]={d="l"}, + [0x16813]={d="l"}, + [0x16814]={d="l"}, + [0x16815]={d="l"}, + [0x16816]={d="l"}, + [0x16817]={d="l"}, + [0x16818]={d="l"}, + [0x16819]={d="l"}, + [0x1681A]={d="l"}, + [0x1681B]={d="l"}, + [0x1681C]={d="l"}, + [0x1681D]={d="l"}, + [0x1681E]={d="l"}, + [0x1681F]={d="l"}, + [0x16820]={d="l"}, + [0x16821]={d="l"}, + [0x16822]={d="l"}, + [0x16823]={d="l"}, + [0x16824]={d="l"}, + [0x16825]={d="l"}, + [0x16826]={d="l"}, + [0x16827]={d="l"}, + [0x16828]={d="l"}, + [0x16829]={d="l"}, + [0x1682A]={d="l"}, + [0x1682B]={d="l"}, + [0x1682C]={d="l"}, + [0x1682D]={d="l"}, + [0x1682E]={d="l"}, + [0x1682F]={d="l"}, + [0x16830]={d="l"}, + [0x16831]={d="l"}, + [0x16832]={d="l"}, + [0x16833]={d="l"}, + [0x16834]={d="l"}, + [0x16835]={d="l"}, + [0x16836]={d="l"}, + [0x16837]={d="l"}, + [0x16838]={d="l"}, + [0x16839]={d="l"}, + [0x1683A]={d="l"}, + [0x1683B]={d="l"}, + [0x1683C]={d="l"}, + [0x1683D]={d="l"}, + [0x1683E]={d="l"}, + [0x1683F]={d="l"}, + [0x16840]={d="l"}, + [0x16841]={d="l"}, + [0x16842]={d="l"}, + [0x16843]={d="l"}, + [0x16844]={d="l"}, + [0x16845]={d="l"}, + [0x16846]={d="l"}, + [0x16847]={d="l"}, + [0x16848]={d="l"}, + [0x16849]={d="l"}, + [0x1684A]={d="l"}, + [0x1684B]={d="l"}, + [0x1684C]={d="l"}, + [0x1684D]={d="l"}, + [0x1684E]={d="l"}, + [0x1684F]={d="l"}, + [0x16850]={d="l"}, + [0x16851]={d="l"}, + [0x16852]={d="l"}, + [0x16853]={d="l"}, + [0x16854]={d="l"}, + [0x16855]={d="l"}, + [0x16856]={d="l"}, + [0x16857]={d="l"}, + [0x16858]={d="l"}, + [0x16859]={d="l"}, + [0x1685A]={d="l"}, + [0x1685B]={d="l"}, + [0x1685C]={d="l"}, + [0x1685D]={d="l"}, + [0x1685E]={d="l"}, + [0x1685F]={d="l"}, + [0x16860]={d="l"}, + [0x16861]={d="l"}, + [0x16862]={d="l"}, + [0x16863]={d="l"}, + [0x16864]={d="l"}, + [0x16865]={d="l"}, + [0x16866]={d="l"}, + [0x16867]={d="l"}, + [0x16868]={d="l"}, + [0x16869]={d="l"}, + [0x1686A]={d="l"}, + [0x1686B]={d="l"}, + [0x1686C]={d="l"}, + [0x1686D]={d="l"}, + [0x1686E]={d="l"}, + [0x1686F]={d="l"}, + [0x16870]={d="l"}, + [0x16871]={d="l"}, + [0x16872]={d="l"}, + [0x16873]={d="l"}, + [0x16874]={d="l"}, + [0x16875]={d="l"}, + [0x16876]={d="l"}, + [0x16877]={d="l"}, + [0x16878]={d="l"}, + [0x16879]={d="l"}, + [0x1687A]={d="l"}, + [0x1687B]={d="l"}, + [0x1687C]={d="l"}, + [0x1687D]={d="l"}, + [0x1687E]={d="l"}, + [0x1687F]={d="l"}, + [0x16880]={d="l"}, + [0x16881]={d="l"}, + [0x16882]={d="l"}, + [0x16883]={d="l"}, + [0x16884]={d="l"}, + [0x16885]={d="l"}, + [0x16886]={d="l"}, + [0x16887]={d="l"}, + [0x16888]={d="l"}, + [0x16889]={d="l"}, + [0x1688A]={d="l"}, + [0x1688B]={d="l"}, + [0x1688C]={d="l"}, + [0x1688D]={d="l"}, + [0x1688E]={d="l"}, + [0x1688F]={d="l"}, + [0x16890]={d="l"}, + [0x16891]={d="l"}, + [0x16892]={d="l"}, + [0x16893]={d="l"}, + [0x16894]={d="l"}, + [0x16895]={d="l"}, + [0x16896]={d="l"}, + [0x16897]={d="l"}, + [0x16898]={d="l"}, + [0x16899]={d="l"}, + [0x1689A]={d="l"}, + [0x1689B]={d="l"}, + [0x1689C]={d="l"}, + [0x1689D]={d="l"}, + [0x1689E]={d="l"}, + [0x1689F]={d="l"}, + [0x168A0]={d="l"}, + [0x168A1]={d="l"}, + [0x168A2]={d="l"}, + [0x168A3]={d="l"}, + [0x168A4]={d="l"}, + [0x168A5]={d="l"}, + [0x168A6]={d="l"}, + [0x168A7]={d="l"}, + [0x168A8]={d="l"}, + [0x168A9]={d="l"}, + [0x168AA]={d="l"}, + [0x168AB]={d="l"}, + [0x168AC]={d="l"}, + [0x168AD]={d="l"}, + [0x168AE]={d="l"}, + [0x168AF]={d="l"}, + [0x168B0]={d="l"}, + [0x168B1]={d="l"}, + [0x168B2]={d="l"}, + [0x168B3]={d="l"}, + [0x168B4]={d="l"}, + [0x168B5]={d="l"}, + [0x168B6]={d="l"}, + [0x168B7]={d="l"}, + [0x168B8]={d="l"}, + [0x168B9]={d="l"}, + [0x168BA]={d="l"}, + [0x168BB]={d="l"}, + [0x168BC]={d="l"}, + [0x168BD]={d="l"}, + [0x168BE]={d="l"}, + [0x168BF]={d="l"}, + [0x168C0]={d="l"}, + [0x168C1]={d="l"}, + [0x168C2]={d="l"}, + [0x168C3]={d="l"}, + [0x168C4]={d="l"}, + [0x168C5]={d="l"}, + [0x168C6]={d="l"}, + [0x168C7]={d="l"}, + [0x168C8]={d="l"}, + [0x168C9]={d="l"}, + [0x168CA]={d="l"}, + [0x168CB]={d="l"}, + [0x168CC]={d="l"}, + [0x168CD]={d="l"}, + [0x168CE]={d="l"}, + [0x168CF]={d="l"}, + [0x168D0]={d="l"}, + [0x168D1]={d="l"}, + [0x168D2]={d="l"}, + [0x168D3]={d="l"}, + [0x168D4]={d="l"}, + [0x168D5]={d="l"}, + [0x168D6]={d="l"}, + [0x168D7]={d="l"}, + [0x168D8]={d="l"}, + [0x168D9]={d="l"}, + [0x168DA]={d="l"}, + [0x168DB]={d="l"}, + [0x168DC]={d="l"}, + [0x168DD]={d="l"}, + [0x168DE]={d="l"}, + [0x168DF]={d="l"}, + [0x168E0]={d="l"}, + [0x168E1]={d="l"}, + [0x168E2]={d="l"}, + [0x168E3]={d="l"}, + [0x168E4]={d="l"}, + [0x168E5]={d="l"}, + [0x168E6]={d="l"}, + [0x168E7]={d="l"}, + [0x168E8]={d="l"}, + [0x168E9]={d="l"}, + [0x168EA]={d="l"}, + [0x168EB]={d="l"}, + [0x168EC]={d="l"}, + [0x168ED]={d="l"}, + [0x168EE]={d="l"}, + [0x168EF]={d="l"}, + [0x168F0]={d="l"}, + [0x168F1]={d="l"}, + [0x168F2]={d="l"}, + [0x168F3]={d="l"}, + [0x168F4]={d="l"}, + [0x168F5]={d="l"}, + [0x168F6]={d="l"}, + [0x168F7]={d="l"}, + [0x168F8]={d="l"}, + [0x168F9]={d="l"}, + [0x168FA]={d="l"}, + [0x168FB]={d="l"}, + [0x168FC]={d="l"}, + [0x168FD]={d="l"}, + [0x168FE]={d="l"}, + [0x168FF]={d="l"}, + [0x16900]={d="l"}, + [0x16901]={d="l"}, + [0x16902]={d="l"}, + [0x16903]={d="l"}, + [0x16904]={d="l"}, + [0x16905]={d="l"}, + [0x16906]={d="l"}, + [0x16907]={d="l"}, + [0x16908]={d="l"}, + [0x16909]={d="l"}, + [0x1690A]={d="l"}, + [0x1690B]={d="l"}, + [0x1690C]={d="l"}, + [0x1690D]={d="l"}, + [0x1690E]={d="l"}, + [0x1690F]={d="l"}, + [0x16910]={d="l"}, + [0x16911]={d="l"}, + [0x16912]={d="l"}, + [0x16913]={d="l"}, + [0x16914]={d="l"}, + [0x16915]={d="l"}, + [0x16916]={d="l"}, + [0x16917]={d="l"}, + [0x16918]={d="l"}, + [0x16919]={d="l"}, + [0x1691A]={d="l"}, + [0x1691B]={d="l"}, + [0x1691C]={d="l"}, + [0x1691D]={d="l"}, + [0x1691E]={d="l"}, + [0x1691F]={d="l"}, + [0x16920]={d="l"}, + [0x16921]={d="l"}, + [0x16922]={d="l"}, + [0x16923]={d="l"}, + [0x16924]={d="l"}, + [0x16925]={d="l"}, + [0x16926]={d="l"}, + [0x16927]={d="l"}, + [0x16928]={d="l"}, + [0x16929]={d="l"}, + [0x1692A]={d="l"}, + [0x1692B]={d="l"}, + [0x1692C]={d="l"}, + [0x1692D]={d="l"}, + [0x1692E]={d="l"}, + [0x1692F]={d="l"}, + [0x16930]={d="l"}, + [0x16931]={d="l"}, + [0x16932]={d="l"}, + [0x16933]={d="l"}, + [0x16934]={d="l"}, + [0x16935]={d="l"}, + [0x16936]={d="l"}, + [0x16937]={d="l"}, + [0x16938]={d="l"}, + [0x16939]={d="l"}, + [0x1693A]={d="l"}, + [0x1693B]={d="l"}, + [0x1693C]={d="l"}, + [0x1693D]={d="l"}, + [0x1693E]={d="l"}, + [0x1693F]={d="l"}, + [0x16940]={d="l"}, + [0x16941]={d="l"}, + [0x16942]={d="l"}, + [0x16943]={d="l"}, + [0x16944]={d="l"}, + [0x16945]={d="l"}, + [0x16946]={d="l"}, + [0x16947]={d="l"}, + [0x16948]={d="l"}, + [0x16949]={d="l"}, + [0x1694A]={d="l"}, + [0x1694B]={d="l"}, + [0x1694C]={d="l"}, + [0x1694D]={d="l"}, + [0x1694E]={d="l"}, + [0x1694F]={d="l"}, + [0x16950]={d="l"}, + [0x16951]={d="l"}, + [0x16952]={d="l"}, + [0x16953]={d="l"}, + [0x16954]={d="l"}, + [0x16955]={d="l"}, + [0x16956]={d="l"}, + [0x16957]={d="l"}, + [0x16958]={d="l"}, + [0x16959]={d="l"}, + [0x1695A]={d="l"}, + [0x1695B]={d="l"}, + [0x1695C]={d="l"}, + [0x1695D]={d="l"}, + [0x1695E]={d="l"}, + [0x1695F]={d="l"}, + [0x16960]={d="l"}, + [0x16961]={d="l"}, + [0x16962]={d="l"}, + [0x16963]={d="l"}, + [0x16964]={d="l"}, + [0x16965]={d="l"}, + [0x16966]={d="l"}, + [0x16967]={d="l"}, + [0x16968]={d="l"}, + [0x16969]={d="l"}, + [0x1696A]={d="l"}, + [0x1696B]={d="l"}, + [0x1696C]={d="l"}, + [0x1696D]={d="l"}, + [0x1696E]={d="l"}, + [0x1696F]={d="l"}, + [0x16970]={d="l"}, + [0x16971]={d="l"}, + [0x16972]={d="l"}, + [0x16973]={d="l"}, + [0x16974]={d="l"}, + [0x16975]={d="l"}, + [0x16976]={d="l"}, + [0x16977]={d="l"}, + [0x16978]={d="l"}, + [0x16979]={d="l"}, + [0x1697A]={d="l"}, + [0x1697B]={d="l"}, + [0x1697C]={d="l"}, + [0x1697D]={d="l"}, + [0x1697E]={d="l"}, + [0x1697F]={d="l"}, + [0x16980]={d="l"}, + [0x16981]={d="l"}, + [0x16982]={d="l"}, + [0x16983]={d="l"}, + [0x16984]={d="l"}, + [0x16985]={d="l"}, + [0x16986]={d="l"}, + [0x16987]={d="l"}, + [0x16988]={d="l"}, + [0x16989]={d="l"}, + [0x1698A]={d="l"}, + [0x1698B]={d="l"}, + [0x1698C]={d="l"}, + [0x1698D]={d="l"}, + [0x1698E]={d="l"}, + [0x1698F]={d="l"}, + [0x16990]={d="l"}, + [0x16991]={d="l"}, + [0x16992]={d="l"}, + [0x16993]={d="l"}, + [0x16994]={d="l"}, + [0x16995]={d="l"}, + [0x16996]={d="l"}, + [0x16997]={d="l"}, + [0x16998]={d="l"}, + [0x16999]={d="l"}, + [0x1699A]={d="l"}, + [0x1699B]={d="l"}, + [0x1699C]={d="l"}, + [0x1699D]={d="l"}, + [0x1699E]={d="l"}, + [0x1699F]={d="l"}, + [0x169A0]={d="l"}, + [0x169A1]={d="l"}, + [0x169A2]={d="l"}, + [0x169A3]={d="l"}, + [0x169A4]={d="l"}, + [0x169A5]={d="l"}, + [0x169A6]={d="l"}, + [0x169A7]={d="l"}, + [0x169A8]={d="l"}, + [0x169A9]={d="l"}, + [0x169AA]={d="l"}, + [0x169AB]={d="l"}, + [0x169AC]={d="l"}, + [0x169AD]={d="l"}, + [0x169AE]={d="l"}, + [0x169AF]={d="l"}, + [0x169B0]={d="l"}, + [0x169B1]={d="l"}, + [0x169B2]={d="l"}, + [0x169B3]={d="l"}, + [0x169B4]={d="l"}, + [0x169B5]={d="l"}, + [0x169B6]={d="l"}, + [0x169B7]={d="l"}, + [0x169B8]={d="l"}, + [0x169B9]={d="l"}, + [0x169BA]={d="l"}, + [0x169BB]={d="l"}, + [0x169BC]={d="l"}, + [0x169BD]={d="l"}, + [0x169BE]={d="l"}, + [0x169BF]={d="l"}, + [0x169C0]={d="l"}, + [0x169C1]={d="l"}, + [0x169C2]={d="l"}, + [0x169C3]={d="l"}, + [0x169C4]={d="l"}, + [0x169C5]={d="l"}, + [0x169C6]={d="l"}, + [0x169C7]={d="l"}, + [0x169C8]={d="l"}, + [0x169C9]={d="l"}, + [0x169CA]={d="l"}, + [0x169CB]={d="l"}, + [0x169CC]={d="l"}, + [0x169CD]={d="l"}, + [0x169CE]={d="l"}, + [0x169CF]={d="l"}, + [0x169D0]={d="l"}, + [0x169D1]={d="l"}, + [0x169D2]={d="l"}, + [0x169D3]={d="l"}, + [0x169D4]={d="l"}, + [0x169D5]={d="l"}, + [0x169D6]={d="l"}, + [0x169D7]={d="l"}, + [0x169D8]={d="l"}, + [0x169D9]={d="l"}, + [0x169DA]={d="l"}, + [0x169DB]={d="l"}, + [0x169DC]={d="l"}, + [0x169DD]={d="l"}, + [0x169DE]={d="l"}, + [0x169DF]={d="l"}, + [0x169E0]={d="l"}, + [0x169E1]={d="l"}, + [0x169E2]={d="l"}, + [0x169E3]={d="l"}, + [0x169E4]={d="l"}, + [0x169E5]={d="l"}, + [0x169E6]={d="l"}, + [0x169E7]={d="l"}, + [0x169E8]={d="l"}, + [0x169E9]={d="l"}, + [0x169EA]={d="l"}, + [0x169EB]={d="l"}, + [0x169EC]={d="l"}, + [0x169ED]={d="l"}, + [0x169EE]={d="l"}, + [0x169EF]={d="l"}, + [0x169F0]={d="l"}, + [0x169F1]={d="l"}, + [0x169F2]={d="l"}, + [0x169F3]={d="l"}, + [0x169F4]={d="l"}, + [0x169F5]={d="l"}, + [0x169F6]={d="l"}, + [0x169F7]={d="l"}, + [0x169F8]={d="l"}, + [0x169F9]={d="l"}, + [0x169FA]={d="l"}, + [0x169FB]={d="l"}, + [0x169FC]={d="l"}, + [0x169FD]={d="l"}, + [0x169FE]={d="l"}, + [0x169FF]={d="l"}, + [0x16A00]={d="l"}, + [0x16A01]={d="l"}, + [0x16A02]={d="l"}, + [0x16A03]={d="l"}, + [0x16A04]={d="l"}, + [0x16A05]={d="l"}, + [0x16A06]={d="l"}, + [0x16A07]={d="l"}, + [0x16A08]={d="l"}, + [0x16A09]={d="l"}, + [0x16A0A]={d="l"}, + [0x16A0B]={d="l"}, + [0x16A0C]={d="l"}, + [0x16A0D]={d="l"}, + [0x16A0E]={d="l"}, + [0x16A0F]={d="l"}, + [0x16A10]={d="l"}, + [0x16A11]={d="l"}, + [0x16A12]={d="l"}, + [0x16A13]={d="l"}, + [0x16A14]={d="l"}, + [0x16A15]={d="l"}, + [0x16A16]={d="l"}, + [0x16A17]={d="l"}, + [0x16A18]={d="l"}, + [0x16A19]={d="l"}, + [0x16A1A]={d="l"}, + [0x16A1B]={d="l"}, + [0x16A1C]={d="l"}, + [0x16A1D]={d="l"}, + [0x16A1E]={d="l"}, + [0x16A1F]={d="l"}, + [0x16A20]={d="l"}, + [0x16A21]={d="l"}, + [0x16A22]={d="l"}, + [0x16A23]={d="l"}, + [0x16A24]={d="l"}, + [0x16A25]={d="l"}, + [0x16A26]={d="l"}, + [0x16A27]={d="l"}, + [0x16A28]={d="l"}, + [0x16A29]={d="l"}, + [0x16A2A]={d="l"}, + [0x16A2B]={d="l"}, + [0x16A2C]={d="l"}, + [0x16A2D]={d="l"}, + [0x16A2E]={d="l"}, + [0x16A2F]={d="l"}, + [0x16A30]={d="l"}, + [0x16A31]={d="l"}, + [0x16A32]={d="l"}, + [0x16A33]={d="l"}, + [0x16A34]={d="l"}, + [0x16A35]={d="l"}, + [0x16A36]={d="l"}, + [0x16A37]={d="l"}, + [0x16A38]={d="l"}, + [0x16A40]={d="l"}, + [0x16A41]={d="l"}, + [0x16A42]={d="l"}, + [0x16A43]={d="l"}, + [0x16A44]={d="l"}, + [0x16A45]={d="l"}, + [0x16A46]={d="l"}, + [0x16A47]={d="l"}, + [0x16A48]={d="l"}, + [0x16A49]={d="l"}, + [0x16A4A]={d="l"}, + [0x16A4B]={d="l"}, + [0x16A4C]={d="l"}, + [0x16A4D]={d="l"}, + [0x16A4E]={d="l"}, + [0x16A4F]={d="l"}, + [0x16A50]={d="l"}, + [0x16A51]={d="l"}, + [0x16A52]={d="l"}, + [0x16A53]={d="l"}, + [0x16A54]={d="l"}, + [0x16A55]={d="l"}, + [0x16A56]={d="l"}, + [0x16A57]={d="l"}, + [0x16A58]={d="l"}, + [0x16A59]={d="l"}, + [0x16A5A]={d="l"}, + [0x16A5B]={d="l"}, + [0x16A5C]={d="l"}, + [0x16A5D]={d="l"}, + [0x16A5E]={d="l"}, + [0x16A60]={d="l"}, + [0x16A61]={d="l"}, + [0x16A62]={d="l"}, + [0x16A63]={d="l"}, + [0x16A64]={d="l"}, + [0x16A65]={d="l"}, + [0x16A66]={d="l"}, + [0x16A67]={d="l"}, + [0x16A68]={d="l"}, + [0x16A69]={d="l"}, + [0x16A6E]={d="l"}, + [0x16A6F]={d="l"}, + [0x16A70]={d="l"}, + [0x16A71]={d="l"}, + [0x16A72]={d="l"}, + [0x16A73]={d="l"}, + [0x16A74]={d="l"}, + [0x16A75]={d="l"}, + [0x16A76]={d="l"}, + [0x16A77]={d="l"}, + [0x16A78]={d="l"}, + [0x16A79]={d="l"}, + [0x16A7A]={d="l"}, + [0x16A7B]={d="l"}, + [0x16A7C]={d="l"}, + [0x16A7D]={d="l"}, + [0x16A7E]={d="l"}, + [0x16A7F]={d="l"}, + [0x16A80]={d="l"}, + [0x16A81]={d="l"}, + [0x16A82]={d="l"}, + [0x16A83]={d="l"}, + [0x16A84]={d="l"}, + [0x16A85]={d="l"}, + [0x16A86]={d="l"}, + [0x16A87]={d="l"}, + [0x16A88]={d="l"}, + [0x16A89]={d="l"}, + [0x16A8A]={d="l"}, + [0x16A8B]={d="l"}, + [0x16A8C]={d="l"}, + [0x16A8D]={d="l"}, + [0x16A8E]={d="l"}, + [0x16A8F]={d="l"}, + [0x16A90]={d="l"}, + [0x16A91]={d="l"}, + [0x16A92]={d="l"}, + [0x16A93]={d="l"}, + [0x16A94]={d="l"}, + [0x16A95]={d="l"}, + [0x16A96]={d="l"}, + [0x16A97]={d="l"}, + [0x16A98]={d="l"}, + [0x16A99]={d="l"}, + [0x16A9A]={d="l"}, + [0x16A9B]={d="l"}, + [0x16A9C]={d="l"}, + [0x16A9D]={d="l"}, + [0x16A9E]={d="l"}, + [0x16A9F]={d="l"}, + [0x16AA0]={d="l"}, + [0x16AA1]={d="l"}, + [0x16AA2]={d="l"}, + [0x16AA3]={d="l"}, + [0x16AA4]={d="l"}, + [0x16AA5]={d="l"}, + [0x16AA6]={d="l"}, + [0x16AA7]={d="l"}, + [0x16AA8]={d="l"}, + [0x16AA9]={d="l"}, + [0x16AAA]={d="l"}, + [0x16AAB]={d="l"}, + [0x16AAC]={d="l"}, + [0x16AAD]={d="l"}, + [0x16AAE]={d="l"}, + [0x16AAF]={d="l"}, + [0x16AB0]={d="l"}, + [0x16AB1]={d="l"}, + [0x16AB2]={d="l"}, + [0x16AB3]={d="l"}, + [0x16AB4]={d="l"}, + [0x16AB5]={d="l"}, + [0x16AB6]={d="l"}, + [0x16AB7]={d="l"}, + [0x16AB8]={d="l"}, + [0x16AB9]={d="l"}, + [0x16ABA]={d="l"}, + [0x16ABB]={d="l"}, + [0x16ABC]={d="l"}, + [0x16ABD]={d="l"}, + [0x16ABE]={d="l"}, + [0x16AC0]={d="l"}, + [0x16AC1]={d="l"}, + [0x16AC2]={d="l"}, + [0x16AC3]={d="l"}, + [0x16AC4]={d="l"}, + [0x16AC5]={d="l"}, + [0x16AC6]={d="l"}, + [0x16AC7]={d="l"}, + [0x16AC8]={d="l"}, + [0x16AC9]={d="l"}, + [0x16AD0]={d="l"}, + [0x16AD1]={d="l"}, + [0x16AD2]={d="l"}, + [0x16AD3]={d="l"}, + [0x16AD4]={d="l"}, + [0x16AD5]={d="l"}, + [0x16AD6]={d="l"}, + [0x16AD7]={d="l"}, + [0x16AD8]={d="l"}, + [0x16AD9]={d="l"}, + [0x16ADA]={d="l"}, + [0x16ADB]={d="l"}, + [0x16ADC]={d="l"}, + [0x16ADD]={d="l"}, + [0x16ADE]={d="l"}, + [0x16ADF]={d="l"}, + [0x16AE0]={d="l"}, + [0x16AE1]={d="l"}, + [0x16AE2]={d="l"}, + [0x16AE3]={d="l"}, + [0x16AE4]={d="l"}, + [0x16AE5]={d="l"}, + [0x16AE6]={d="l"}, + [0x16AE7]={d="l"}, + [0x16AE8]={d="l"}, + [0x16AE9]={d="l"}, + [0x16AEA]={d="l"}, + [0x16AEB]={d="l"}, + [0x16AEC]={d="l"}, + [0x16AED]={d="l"}, + [0x16AF0]={d="nsm"}, + [0x16AF1]={d="nsm"}, + [0x16AF2]={d="nsm"}, + [0x16AF3]={d="nsm"}, + [0x16AF4]={d="nsm"}, + [0x16AF5]={d="l"}, + [0x16B00]={d="l"}, + [0x16B01]={d="l"}, + [0x16B02]={d="l"}, + [0x16B03]={d="l"}, + [0x16B04]={d="l"}, + [0x16B05]={d="l"}, + [0x16B06]={d="l"}, + [0x16B07]={d="l"}, + [0x16B08]={d="l"}, + [0x16B09]={d="l"}, + [0x16B0A]={d="l"}, + [0x16B0B]={d="l"}, + [0x16B0C]={d="l"}, + [0x16B0D]={d="l"}, + [0x16B0E]={d="l"}, + [0x16B0F]={d="l"}, + [0x16B10]={d="l"}, + [0x16B11]={d="l"}, + [0x16B12]={d="l"}, + [0x16B13]={d="l"}, + [0x16B14]={d="l"}, + [0x16B15]={d="l"}, + [0x16B16]={d="l"}, + [0x16B17]={d="l"}, + [0x16B18]={d="l"}, + [0x16B19]={d="l"}, + [0x16B1A]={d="l"}, + [0x16B1B]={d="l"}, + [0x16B1C]={d="l"}, + [0x16B1D]={d="l"}, + [0x16B1E]={d="l"}, + [0x16B1F]={d="l"}, + [0x16B20]={d="l"}, + [0x16B21]={d="l"}, + [0x16B22]={d="l"}, + [0x16B23]={d="l"}, + [0x16B24]={d="l"}, + [0x16B25]={d="l"}, + [0x16B26]={d="l"}, + [0x16B27]={d="l"}, + [0x16B28]={d="l"}, + [0x16B29]={d="l"}, + [0x16B2A]={d="l"}, + [0x16B2B]={d="l"}, + [0x16B2C]={d="l"}, + [0x16B2D]={d="l"}, + [0x16B2E]={d="l"}, + [0x16B2F]={d="l"}, + [0x16B30]={d="nsm"}, + [0x16B31]={d="nsm"}, + [0x16B32]={d="nsm"}, + [0x16B33]={d="nsm"}, + [0x16B34]={d="nsm"}, + [0x16B35]={d="nsm"}, + [0x16B36]={d="nsm"}, + [0x16B37]={d="l"}, + [0x16B38]={d="l"}, + [0x16B39]={d="l"}, + [0x16B3A]={d="l"}, + [0x16B3B]={d="l"}, + [0x16B3C]={d="l"}, + [0x16B3D]={d="l"}, + [0x16B3E]={d="l"}, + [0x16B3F]={d="l"}, + [0x16B40]={d="l"}, + [0x16B41]={d="l"}, + [0x16B42]={d="l"}, + [0x16B43]={d="l"}, + [0x16B44]={d="l"}, + [0x16B45]={d="l"}, + [0x16B50]={d="l"}, + [0x16B51]={d="l"}, + [0x16B52]={d="l"}, + [0x16B53]={d="l"}, + [0x16B54]={d="l"}, + [0x16B55]={d="l"}, + [0x16B56]={d="l"}, + [0x16B57]={d="l"}, + [0x16B58]={d="l"}, + [0x16B59]={d="l"}, + [0x16B5B]={d="l"}, + [0x16B5C]={d="l"}, + [0x16B5D]={d="l"}, + [0x16B5E]={d="l"}, + [0x16B5F]={d="l"}, + [0x16B60]={d="l"}, + [0x16B61]={d="l"}, + [0x16B63]={d="l"}, + [0x16B64]={d="l"}, + [0x16B65]={d="l"}, + [0x16B66]={d="l"}, + [0x16B67]={d="l"}, + [0x16B68]={d="l"}, + [0x16B69]={d="l"}, + [0x16B6A]={d="l"}, + [0x16B6B]={d="l"}, + [0x16B6C]={d="l"}, + [0x16B6D]={d="l"}, + [0x16B6E]={d="l"}, + [0x16B6F]={d="l"}, + [0x16B70]={d="l"}, + [0x16B71]={d="l"}, + [0x16B72]={d="l"}, + [0x16B73]={d="l"}, + [0x16B74]={d="l"}, + [0x16B75]={d="l"}, + [0x16B76]={d="l"}, + [0x16B77]={d="l"}, + [0x16B7D]={d="l"}, + [0x16B7E]={d="l"}, + [0x16B7F]={d="l"}, + [0x16B80]={d="l"}, + [0x16B81]={d="l"}, + [0x16B82]={d="l"}, + [0x16B83]={d="l"}, + [0x16B84]={d="l"}, + [0x16B85]={d="l"}, + [0x16B86]={d="l"}, + [0x16B87]={d="l"}, + [0x16B88]={d="l"}, + [0x16B89]={d="l"}, + [0x16B8A]={d="l"}, + [0x16B8B]={d="l"}, + [0x16B8C]={d="l"}, + [0x16B8D]={d="l"}, + [0x16B8E]={d="l"}, + [0x16B8F]={d="l"}, + [0x16E40]={d="l"}, + [0x16E41]={d="l"}, + [0x16E42]={d="l"}, + [0x16E43]={d="l"}, + [0x16E44]={d="l"}, + [0x16E45]={d="l"}, + [0x16E46]={d="l"}, + [0x16E47]={d="l"}, + [0x16E48]={d="l"}, + [0x16E49]={d="l"}, + [0x16E4A]={d="l"}, + [0x16E4B]={d="l"}, + [0x16E4C]={d="l"}, + [0x16E4D]={d="l"}, + [0x16E4E]={d="l"}, + [0x16E4F]={d="l"}, + [0x16E50]={d="l"}, + [0x16E51]={d="l"}, + [0x16E52]={d="l"}, + [0x16E53]={d="l"}, + [0x16E54]={d="l"}, + [0x16E55]={d="l"}, + [0x16E56]={d="l"}, + [0x16E57]={d="l"}, + [0x16E58]={d="l"}, + [0x16E59]={d="l"}, + [0x16E5A]={d="l"}, + [0x16E5B]={d="l"}, + [0x16E5C]={d="l"}, + [0x16E5D]={d="l"}, + [0x16E5E]={d="l"}, + [0x16E5F]={d="l"}, + [0x16E60]={d="l"}, + [0x16E61]={d="l"}, + [0x16E62]={d="l"}, + [0x16E63]={d="l"}, + [0x16E64]={d="l"}, + [0x16E65]={d="l"}, + [0x16E66]={d="l"}, + [0x16E67]={d="l"}, + [0x16E68]={d="l"}, + [0x16E69]={d="l"}, + [0x16E6A]={d="l"}, + [0x16E6B]={d="l"}, + [0x16E6C]={d="l"}, + [0x16E6D]={d="l"}, + [0x16E6E]={d="l"}, + [0x16E6F]={d="l"}, + [0x16E70]={d="l"}, + [0x16E71]={d="l"}, + [0x16E72]={d="l"}, + [0x16E73]={d="l"}, + [0x16E74]={d="l"}, + [0x16E75]={d="l"}, + [0x16E76]={d="l"}, + [0x16E77]={d="l"}, + [0x16E78]={d="l"}, + [0x16E79]={d="l"}, + [0x16E7A]={d="l"}, + [0x16E7B]={d="l"}, + [0x16E7C]={d="l"}, + [0x16E7D]={d="l"}, + [0x16E7E]={d="l"}, + [0x16E7F]={d="l"}, + [0x16E80]={d="l"}, + [0x16E81]={d="l"}, + [0x16E82]={d="l"}, + [0x16E83]={d="l"}, + [0x16E84]={d="l"}, + [0x16E85]={d="l"}, + [0x16E86]={d="l"}, + [0x16E87]={d="l"}, + [0x16E88]={d="l"}, + [0x16E89]={d="l"}, + [0x16E8A]={d="l"}, + [0x16E8B]={d="l"}, + [0x16E8C]={d="l"}, + [0x16E8D]={d="l"}, + [0x16E8E]={d="l"}, + [0x16E8F]={d="l"}, + [0x16E90]={d="l"}, + [0x16E91]={d="l"}, + [0x16E92]={d="l"}, + [0x16E93]={d="l"}, + [0x16E94]={d="l"}, + [0x16E95]={d="l"}, + [0x16E96]={d="l"}, + [0x16E97]={d="l"}, + [0x16E98]={d="l"}, + [0x16E99]={d="l"}, + [0x16E9A]={d="l"}, + [0x16F00]={d="l"}, + [0x16F01]={d="l"}, + [0x16F02]={d="l"}, + [0x16F03]={d="l"}, + [0x16F04]={d="l"}, + [0x16F05]={d="l"}, + [0x16F06]={d="l"}, + [0x16F07]={d="l"}, + [0x16F08]={d="l"}, + [0x16F09]={d="l"}, + [0x16F0A]={d="l"}, + [0x16F0B]={d="l"}, + [0x16F0C]={d="l"}, + [0x16F0D]={d="l"}, + [0x16F0E]={d="l"}, + [0x16F0F]={d="l"}, + [0x16F10]={d="l"}, + [0x16F11]={d="l"}, + [0x16F12]={d="l"}, + [0x16F13]={d="l"}, + [0x16F14]={d="l"}, + [0x16F15]={d="l"}, + [0x16F16]={d="l"}, + [0x16F17]={d="l"}, + [0x16F18]={d="l"}, + [0x16F19]={d="l"}, + [0x16F1A]={d="l"}, + [0x16F1B]={d="l"}, + [0x16F1C]={d="l"}, + [0x16F1D]={d="l"}, + [0x16F1E]={d="l"}, + [0x16F1F]={d="l"}, + [0x16F20]={d="l"}, + [0x16F21]={d="l"}, + [0x16F22]={d="l"}, + [0x16F23]={d="l"}, + [0x16F24]={d="l"}, + [0x16F25]={d="l"}, + [0x16F26]={d="l"}, + [0x16F27]={d="l"}, + [0x16F28]={d="l"}, + [0x16F29]={d="l"}, + [0x16F2A]={d="l"}, + [0x16F2B]={d="l"}, + [0x16F2C]={d="l"}, + [0x16F2D]={d="l"}, + [0x16F2E]={d="l"}, + [0x16F2F]={d="l"}, + [0x16F30]={d="l"}, + [0x16F31]={d="l"}, + [0x16F32]={d="l"}, + [0x16F33]={d="l"}, + [0x16F34]={d="l"}, + [0x16F35]={d="l"}, + [0x16F36]={d="l"}, + [0x16F37]={d="l"}, + [0x16F38]={d="l"}, + [0x16F39]={d="l"}, + [0x16F3A]={d="l"}, + [0x16F3B]={d="l"}, + [0x16F3C]={d="l"}, + [0x16F3D]={d="l"}, + [0x16F3E]={d="l"}, + [0x16F3F]={d="l"}, + [0x16F40]={d="l"}, + [0x16F41]={d="l"}, + [0x16F42]={d="l"}, + [0x16F43]={d="l"}, + [0x16F44]={d="l"}, + [0x16F45]={d="l"}, + [0x16F46]={d="l"}, + [0x16F47]={d="l"}, + [0x16F48]={d="l"}, + [0x16F49]={d="l"}, + [0x16F4A]={d="l"}, + [0x16F4F]={d="nsm"}, + [0x16F50]={d="l"}, + [0x16F51]={d="l"}, + [0x16F52]={d="l"}, + [0x16F53]={d="l"}, + [0x16F54]={d="l"}, + [0x16F55]={d="l"}, + [0x16F56]={d="l"}, + [0x16F57]={d="l"}, + [0x16F58]={d="l"}, + [0x16F59]={d="l"}, + [0x16F5A]={d="l"}, + [0x16F5B]={d="l"}, + [0x16F5C]={d="l"}, + [0x16F5D]={d="l"}, + [0x16F5E]={d="l"}, + [0x16F5F]={d="l"}, + [0x16F60]={d="l"}, + [0x16F61]={d="l"}, + [0x16F62]={d="l"}, + [0x16F63]={d="l"}, + [0x16F64]={d="l"}, + [0x16F65]={d="l"}, + [0x16F66]={d="l"}, + [0x16F67]={d="l"}, + [0x16F68]={d="l"}, + [0x16F69]={d="l"}, + [0x16F6A]={d="l"}, + [0x16F6B]={d="l"}, + [0x16F6C]={d="l"}, + [0x16F6D]={d="l"}, + [0x16F6E]={d="l"}, + [0x16F6F]={d="l"}, + [0x16F70]={d="l"}, + [0x16F71]={d="l"}, + [0x16F72]={d="l"}, + [0x16F73]={d="l"}, + [0x16F74]={d="l"}, + [0x16F75]={d="l"}, + [0x16F76]={d="l"}, + [0x16F77]={d="l"}, + [0x16F78]={d="l"}, + [0x16F79]={d="l"}, + [0x16F7A]={d="l"}, + [0x16F7B]={d="l"}, + [0x16F7C]={d="l"}, + [0x16F7D]={d="l"}, + [0x16F7E]={d="l"}, + [0x16F7F]={d="l"}, + [0x16F80]={d="l"}, + [0x16F81]={d="l"}, + [0x16F82]={d="l"}, + [0x16F83]={d="l"}, + [0x16F84]={d="l"}, + [0x16F85]={d="l"}, + [0x16F86]={d="l"}, + [0x16F87]={d="l"}, + [0x16F8F]={d="nsm"}, + [0x16F90]={d="nsm"}, + [0x16F91]={d="nsm"}, + [0x16F92]={d="nsm"}, + [0x16F93]={d="l"}, + [0x16F94]={d="l"}, + [0x16F95]={d="l"}, + [0x16F96]={d="l"}, + [0x16F97]={d="l"}, + [0x16F98]={d="l"}, + [0x16F99]={d="l"}, + [0x16F9A]={d="l"}, + [0x16F9B]={d="l"}, + [0x16F9C]={d="l"}, + [0x16F9D]={d="l"}, + [0x16F9E]={d="l"}, + [0x16F9F]={d="l"}, + [0x16FE0]={d="l"}, + [0x16FE1]={d="l"}, + [0x16FE2]={d="on"}, + [0x16FE3]={d="l"}, + [0x16FE4]={d="nsm"}, + [0x16FF0]={d="l"}, + [0x16FF1]={d="l"}, + [0x18800]={d="l"}, + [0x18801]={d="l"}, + [0x18802]={d="l"}, + [0x18803]={d="l"}, + [0x18804]={d="l"}, + [0x18805]={d="l"}, + [0x18806]={d="l"}, + [0x18807]={d="l"}, + [0x18808]={d="l"}, + [0x18809]={d="l"}, + [0x1880A]={d="l"}, + [0x1880B]={d="l"}, + [0x1880C]={d="l"}, + [0x1880D]={d="l"}, + [0x1880E]={d="l"}, + [0x1880F]={d="l"}, + [0x18810]={d="l"}, + [0x18811]={d="l"}, + [0x18812]={d="l"}, + [0x18813]={d="l"}, + [0x18814]={d="l"}, + [0x18815]={d="l"}, + [0x18816]={d="l"}, + [0x18817]={d="l"}, + [0x18818]={d="l"}, + [0x18819]={d="l"}, + [0x1881A]={d="l"}, + [0x1881B]={d="l"}, + [0x1881C]={d="l"}, + [0x1881D]={d="l"}, + [0x1881E]={d="l"}, + [0x1881F]={d="l"}, + [0x18820]={d="l"}, + [0x18821]={d="l"}, + [0x18822]={d="l"}, + [0x18823]={d="l"}, + [0x18824]={d="l"}, + [0x18825]={d="l"}, + [0x18826]={d="l"}, + [0x18827]={d="l"}, + [0x18828]={d="l"}, + [0x18829]={d="l"}, + [0x1882A]={d="l"}, + [0x1882B]={d="l"}, + [0x1882C]={d="l"}, + [0x1882D]={d="l"}, + [0x1882E]={d="l"}, + [0x1882F]={d="l"}, + [0x18830]={d="l"}, + [0x18831]={d="l"}, + [0x18832]={d="l"}, + [0x18833]={d="l"}, + [0x18834]={d="l"}, + [0x18835]={d="l"}, + [0x18836]={d="l"}, + [0x18837]={d="l"}, + [0x18838]={d="l"}, + [0x18839]={d="l"}, + [0x1883A]={d="l"}, + [0x1883B]={d="l"}, + [0x1883C]={d="l"}, + [0x1883D]={d="l"}, + [0x1883E]={d="l"}, + [0x1883F]={d="l"}, + [0x18840]={d="l"}, + [0x18841]={d="l"}, + [0x18842]={d="l"}, + [0x18843]={d="l"}, + [0x18844]={d="l"}, + [0x18845]={d="l"}, + [0x18846]={d="l"}, + [0x18847]={d="l"}, + [0x18848]={d="l"}, + [0x18849]={d="l"}, + [0x1884A]={d="l"}, + [0x1884B]={d="l"}, + [0x1884C]={d="l"}, + [0x1884D]={d="l"}, + [0x1884E]={d="l"}, + [0x1884F]={d="l"}, + [0x18850]={d="l"}, + [0x18851]={d="l"}, + [0x18852]={d="l"}, + [0x18853]={d="l"}, + [0x18854]={d="l"}, + [0x18855]={d="l"}, + [0x18856]={d="l"}, + [0x18857]={d="l"}, + [0x18858]={d="l"}, + [0x18859]={d="l"}, + [0x1885A]={d="l"}, + [0x1885B]={d="l"}, + [0x1885C]={d="l"}, + [0x1885D]={d="l"}, + [0x1885E]={d="l"}, + [0x1885F]={d="l"}, + [0x18860]={d="l"}, + [0x18861]={d="l"}, + [0x18862]={d="l"}, + [0x18863]={d="l"}, + [0x18864]={d="l"}, + [0x18865]={d="l"}, + [0x18866]={d="l"}, + [0x18867]={d="l"}, + [0x18868]={d="l"}, + [0x18869]={d="l"}, + [0x1886A]={d="l"}, + [0x1886B]={d="l"}, + [0x1886C]={d="l"}, + [0x1886D]={d="l"}, + [0x1886E]={d="l"}, + [0x1886F]={d="l"}, + [0x18870]={d="l"}, + [0x18871]={d="l"}, + [0x18872]={d="l"}, + [0x18873]={d="l"}, + [0x18874]={d="l"}, + [0x18875]={d="l"}, + [0x18876]={d="l"}, + [0x18877]={d="l"}, + [0x18878]={d="l"}, + [0x18879]={d="l"}, + [0x1887A]={d="l"}, + [0x1887B]={d="l"}, + [0x1887C]={d="l"}, + [0x1887D]={d="l"}, + [0x1887E]={d="l"}, + [0x1887F]={d="l"}, + [0x18880]={d="l"}, + [0x18881]={d="l"}, + [0x18882]={d="l"}, + [0x18883]={d="l"}, + [0x18884]={d="l"}, + [0x18885]={d="l"}, + [0x18886]={d="l"}, + [0x18887]={d="l"}, + [0x18888]={d="l"}, + [0x18889]={d="l"}, + [0x1888A]={d="l"}, + [0x1888B]={d="l"}, + [0x1888C]={d="l"}, + [0x1888D]={d="l"}, + [0x1888E]={d="l"}, + [0x1888F]={d="l"}, + [0x18890]={d="l"}, + [0x18891]={d="l"}, + [0x18892]={d="l"}, + [0x18893]={d="l"}, + [0x18894]={d="l"}, + [0x18895]={d="l"}, + [0x18896]={d="l"}, + [0x18897]={d="l"}, + [0x18898]={d="l"}, + [0x18899]={d="l"}, + [0x1889A]={d="l"}, + [0x1889B]={d="l"}, + [0x1889C]={d="l"}, + [0x1889D]={d="l"}, + [0x1889E]={d="l"}, + [0x1889F]={d="l"}, + [0x188A0]={d="l"}, + [0x188A1]={d="l"}, + [0x188A2]={d="l"}, + [0x188A3]={d="l"}, + [0x188A4]={d="l"}, + [0x188A5]={d="l"}, + [0x188A6]={d="l"}, + [0x188A7]={d="l"}, + [0x188A8]={d="l"}, + [0x188A9]={d="l"}, + [0x188AA]={d="l"}, + [0x188AB]={d="l"}, + [0x188AC]={d="l"}, + [0x188AD]={d="l"}, + [0x188AE]={d="l"}, + [0x188AF]={d="l"}, + [0x188B0]={d="l"}, + [0x188B1]={d="l"}, + [0x188B2]={d="l"}, + [0x188B3]={d="l"}, + [0x188B4]={d="l"}, + [0x188B5]={d="l"}, + [0x188B6]={d="l"}, + [0x188B7]={d="l"}, + [0x188B8]={d="l"}, + [0x188B9]={d="l"}, + [0x188BA]={d="l"}, + [0x188BB]={d="l"}, + [0x188BC]={d="l"}, + [0x188BD]={d="l"}, + [0x188BE]={d="l"}, + [0x188BF]={d="l"}, + [0x188C0]={d="l"}, + [0x188C1]={d="l"}, + [0x188C2]={d="l"}, + [0x188C3]={d="l"}, + [0x188C4]={d="l"}, + [0x188C5]={d="l"}, + [0x188C6]={d="l"}, + [0x188C7]={d="l"}, + [0x188C8]={d="l"}, + [0x188C9]={d="l"}, + [0x188CA]={d="l"}, + [0x188CB]={d="l"}, + [0x188CC]={d="l"}, + [0x188CD]={d="l"}, + [0x188CE]={d="l"}, + [0x188CF]={d="l"}, + [0x188D0]={d="l"}, + [0x188D1]={d="l"}, + [0x188D2]={d="l"}, + [0x188D3]={d="l"}, + [0x188D4]={d="l"}, + [0x188D5]={d="l"}, + [0x188D6]={d="l"}, + [0x188D7]={d="l"}, + [0x188D8]={d="l"}, + [0x188D9]={d="l"}, + [0x188DA]={d="l"}, + [0x188DB]={d="l"}, + [0x188DC]={d="l"}, + [0x188DD]={d="l"}, + [0x188DE]={d="l"}, + [0x188DF]={d="l"}, + [0x188E0]={d="l"}, + [0x188E1]={d="l"}, + [0x188E2]={d="l"}, + [0x188E3]={d="l"}, + [0x188E4]={d="l"}, + [0x188E5]={d="l"}, + [0x188E6]={d="l"}, + [0x188E7]={d="l"}, + [0x188E8]={d="l"}, + [0x188E9]={d="l"}, + [0x188EA]={d="l"}, + [0x188EB]={d="l"}, + [0x188EC]={d="l"}, + [0x188ED]={d="l"}, + [0x188EE]={d="l"}, + [0x188EF]={d="l"}, + [0x188F0]={d="l"}, + [0x188F1]={d="l"}, + [0x188F2]={d="l"}, + [0x188F3]={d="l"}, + [0x188F4]={d="l"}, + [0x188F5]={d="l"}, + [0x188F6]={d="l"}, + [0x188F7]={d="l"}, + [0x188F8]={d="l"}, + [0x188F9]={d="l"}, + [0x188FA]={d="l"}, + [0x188FB]={d="l"}, + [0x188FC]={d="l"}, + [0x188FD]={d="l"}, + [0x188FE]={d="l"}, + [0x188FF]={d="l"}, + [0x18900]={d="l"}, + [0x18901]={d="l"}, + [0x18902]={d="l"}, + [0x18903]={d="l"}, + [0x18904]={d="l"}, + [0x18905]={d="l"}, + [0x18906]={d="l"}, + [0x18907]={d="l"}, + [0x18908]={d="l"}, + [0x18909]={d="l"}, + [0x1890A]={d="l"}, + [0x1890B]={d="l"}, + [0x1890C]={d="l"}, + [0x1890D]={d="l"}, + [0x1890E]={d="l"}, + [0x1890F]={d="l"}, + [0x18910]={d="l"}, + [0x18911]={d="l"}, + [0x18912]={d="l"}, + [0x18913]={d="l"}, + [0x18914]={d="l"}, + [0x18915]={d="l"}, + [0x18916]={d="l"}, + [0x18917]={d="l"}, + [0x18918]={d="l"}, + [0x18919]={d="l"}, + [0x1891A]={d="l"}, + [0x1891B]={d="l"}, + [0x1891C]={d="l"}, + [0x1891D]={d="l"}, + [0x1891E]={d="l"}, + [0x1891F]={d="l"}, + [0x18920]={d="l"}, + [0x18921]={d="l"}, + [0x18922]={d="l"}, + [0x18923]={d="l"}, + [0x18924]={d="l"}, + [0x18925]={d="l"}, + [0x18926]={d="l"}, + [0x18927]={d="l"}, + [0x18928]={d="l"}, + [0x18929]={d="l"}, + [0x1892A]={d="l"}, + [0x1892B]={d="l"}, + [0x1892C]={d="l"}, + [0x1892D]={d="l"}, + [0x1892E]={d="l"}, + [0x1892F]={d="l"}, + [0x18930]={d="l"}, + [0x18931]={d="l"}, + [0x18932]={d="l"}, + [0x18933]={d="l"}, + [0x18934]={d="l"}, + [0x18935]={d="l"}, + [0x18936]={d="l"}, + [0x18937]={d="l"}, + [0x18938]={d="l"}, + [0x18939]={d="l"}, + [0x1893A]={d="l"}, + [0x1893B]={d="l"}, + [0x1893C]={d="l"}, + [0x1893D]={d="l"}, + [0x1893E]={d="l"}, + [0x1893F]={d="l"}, + [0x18940]={d="l"}, + [0x18941]={d="l"}, + [0x18942]={d="l"}, + [0x18943]={d="l"}, + [0x18944]={d="l"}, + [0x18945]={d="l"}, + [0x18946]={d="l"}, + [0x18947]={d="l"}, + [0x18948]={d="l"}, + [0x18949]={d="l"}, + [0x1894A]={d="l"}, + [0x1894B]={d="l"}, + [0x1894C]={d="l"}, + [0x1894D]={d="l"}, + [0x1894E]={d="l"}, + [0x1894F]={d="l"}, + [0x18950]={d="l"}, + [0x18951]={d="l"}, + [0x18952]={d="l"}, + [0x18953]={d="l"}, + [0x18954]={d="l"}, + [0x18955]={d="l"}, + [0x18956]={d="l"}, + [0x18957]={d="l"}, + [0x18958]={d="l"}, + [0x18959]={d="l"}, + [0x1895A]={d="l"}, + [0x1895B]={d="l"}, + [0x1895C]={d="l"}, + [0x1895D]={d="l"}, + [0x1895E]={d="l"}, + [0x1895F]={d="l"}, + [0x18960]={d="l"}, + [0x18961]={d="l"}, + [0x18962]={d="l"}, + [0x18963]={d="l"}, + [0x18964]={d="l"}, + [0x18965]={d="l"}, + [0x18966]={d="l"}, + [0x18967]={d="l"}, + [0x18968]={d="l"}, + [0x18969]={d="l"}, + [0x1896A]={d="l"}, + [0x1896B]={d="l"}, + [0x1896C]={d="l"}, + [0x1896D]={d="l"}, + [0x1896E]={d="l"}, + [0x1896F]={d="l"}, + [0x18970]={d="l"}, + [0x18971]={d="l"}, + [0x18972]={d="l"}, + [0x18973]={d="l"}, + [0x18974]={d="l"}, + [0x18975]={d="l"}, + [0x18976]={d="l"}, + [0x18977]={d="l"}, + [0x18978]={d="l"}, + [0x18979]={d="l"}, + [0x1897A]={d="l"}, + [0x1897B]={d="l"}, + [0x1897C]={d="l"}, + [0x1897D]={d="l"}, + [0x1897E]={d="l"}, + [0x1897F]={d="l"}, + [0x18980]={d="l"}, + [0x18981]={d="l"}, + [0x18982]={d="l"}, + [0x18983]={d="l"}, + [0x18984]={d="l"}, + [0x18985]={d="l"}, + [0x18986]={d="l"}, + [0x18987]={d="l"}, + [0x18988]={d="l"}, + [0x18989]={d="l"}, + [0x1898A]={d="l"}, + [0x1898B]={d="l"}, + [0x1898C]={d="l"}, + [0x1898D]={d="l"}, + [0x1898E]={d="l"}, + [0x1898F]={d="l"}, + [0x18990]={d="l"}, + [0x18991]={d="l"}, + [0x18992]={d="l"}, + [0x18993]={d="l"}, + [0x18994]={d="l"}, + [0x18995]={d="l"}, + [0x18996]={d="l"}, + [0x18997]={d="l"}, + [0x18998]={d="l"}, + [0x18999]={d="l"}, + [0x1899A]={d="l"}, + [0x1899B]={d="l"}, + [0x1899C]={d="l"}, + [0x1899D]={d="l"}, + [0x1899E]={d="l"}, + [0x1899F]={d="l"}, + [0x189A0]={d="l"}, + [0x189A1]={d="l"}, + [0x189A2]={d="l"}, + [0x189A3]={d="l"}, + [0x189A4]={d="l"}, + [0x189A5]={d="l"}, + [0x189A6]={d="l"}, + [0x189A7]={d="l"}, + [0x189A8]={d="l"}, + [0x189A9]={d="l"}, + [0x189AA]={d="l"}, + [0x189AB]={d="l"}, + [0x189AC]={d="l"}, + [0x189AD]={d="l"}, + [0x189AE]={d="l"}, + [0x189AF]={d="l"}, + [0x189B0]={d="l"}, + [0x189B1]={d="l"}, + [0x189B2]={d="l"}, + [0x189B3]={d="l"}, + [0x189B4]={d="l"}, + [0x189B5]={d="l"}, + [0x189B6]={d="l"}, + [0x189B7]={d="l"}, + [0x189B8]={d="l"}, + [0x189B9]={d="l"}, + [0x189BA]={d="l"}, + [0x189BB]={d="l"}, + [0x189BC]={d="l"}, + [0x189BD]={d="l"}, + [0x189BE]={d="l"}, + [0x189BF]={d="l"}, + [0x189C0]={d="l"}, + [0x189C1]={d="l"}, + [0x189C2]={d="l"}, + [0x189C3]={d="l"}, + [0x189C4]={d="l"}, + [0x189C5]={d="l"}, + [0x189C6]={d="l"}, + [0x189C7]={d="l"}, + [0x189C8]={d="l"}, + [0x189C9]={d="l"}, + [0x189CA]={d="l"}, + [0x189CB]={d="l"}, + [0x189CC]={d="l"}, + [0x189CD]={d="l"}, + [0x189CE]={d="l"}, + [0x189CF]={d="l"}, + [0x189D0]={d="l"}, + [0x189D1]={d="l"}, + [0x189D2]={d="l"}, + [0x189D3]={d="l"}, + [0x189D4]={d="l"}, + [0x189D5]={d="l"}, + [0x189D6]={d="l"}, + [0x189D7]={d="l"}, + [0x189D8]={d="l"}, + [0x189D9]={d="l"}, + [0x189DA]={d="l"}, + [0x189DB]={d="l"}, + [0x189DC]={d="l"}, + [0x189DD]={d="l"}, + [0x189DE]={d="l"}, + [0x189DF]={d="l"}, + [0x189E0]={d="l"}, + [0x189E1]={d="l"}, + [0x189E2]={d="l"}, + [0x189E3]={d="l"}, + [0x189E4]={d="l"}, + [0x189E5]={d="l"}, + [0x189E6]={d="l"}, + [0x189E7]={d="l"}, + [0x189E8]={d="l"}, + [0x189E9]={d="l"}, + [0x189EA]={d="l"}, + [0x189EB]={d="l"}, + [0x189EC]={d="l"}, + [0x189ED]={d="l"}, + [0x189EE]={d="l"}, + [0x189EF]={d="l"}, + [0x189F0]={d="l"}, + [0x189F1]={d="l"}, + [0x189F2]={d="l"}, + [0x189F3]={d="l"}, + [0x189F4]={d="l"}, + [0x189F5]={d="l"}, + [0x189F6]={d="l"}, + [0x189F7]={d="l"}, + [0x189F8]={d="l"}, + [0x189F9]={d="l"}, + [0x189FA]={d="l"}, + [0x189FB]={d="l"}, + [0x189FC]={d="l"}, + [0x189FD]={d="l"}, + [0x189FE]={d="l"}, + [0x189FF]={d="l"}, + [0x18A00]={d="l"}, + [0x18A01]={d="l"}, + [0x18A02]={d="l"}, + [0x18A03]={d="l"}, + [0x18A04]={d="l"}, + [0x18A05]={d="l"}, + [0x18A06]={d="l"}, + [0x18A07]={d="l"}, + [0x18A08]={d="l"}, + [0x18A09]={d="l"}, + [0x18A0A]={d="l"}, + [0x18A0B]={d="l"}, + [0x18A0C]={d="l"}, + [0x18A0D]={d="l"}, + [0x18A0E]={d="l"}, + [0x18A0F]={d="l"}, + [0x18A10]={d="l"}, + [0x18A11]={d="l"}, + [0x18A12]={d="l"}, + [0x18A13]={d="l"}, + [0x18A14]={d="l"}, + [0x18A15]={d="l"}, + [0x18A16]={d="l"}, + [0x18A17]={d="l"}, + [0x18A18]={d="l"}, + [0x18A19]={d="l"}, + [0x18A1A]={d="l"}, + [0x18A1B]={d="l"}, + [0x18A1C]={d="l"}, + [0x18A1D]={d="l"}, + [0x18A1E]={d="l"}, + [0x18A1F]={d="l"}, + [0x18A20]={d="l"}, + [0x18A21]={d="l"}, + [0x18A22]={d="l"}, + [0x18A23]={d="l"}, + [0x18A24]={d="l"}, + [0x18A25]={d="l"}, + [0x18A26]={d="l"}, + [0x18A27]={d="l"}, + [0x18A28]={d="l"}, + [0x18A29]={d="l"}, + [0x18A2A]={d="l"}, + [0x18A2B]={d="l"}, + [0x18A2C]={d="l"}, + [0x18A2D]={d="l"}, + [0x18A2E]={d="l"}, + [0x18A2F]={d="l"}, + [0x18A30]={d="l"}, + [0x18A31]={d="l"}, + [0x18A32]={d="l"}, + [0x18A33]={d="l"}, + [0x18A34]={d="l"}, + [0x18A35]={d="l"}, + [0x18A36]={d="l"}, + [0x18A37]={d="l"}, + [0x18A38]={d="l"}, + [0x18A39]={d="l"}, + [0x18A3A]={d="l"}, + [0x18A3B]={d="l"}, + [0x18A3C]={d="l"}, + [0x18A3D]={d="l"}, + [0x18A3E]={d="l"}, + [0x18A3F]={d="l"}, + [0x18A40]={d="l"}, + [0x18A41]={d="l"}, + [0x18A42]={d="l"}, + [0x18A43]={d="l"}, + [0x18A44]={d="l"}, + [0x18A45]={d="l"}, + [0x18A46]={d="l"}, + [0x18A47]={d="l"}, + [0x18A48]={d="l"}, + [0x18A49]={d="l"}, + [0x18A4A]={d="l"}, + [0x18A4B]={d="l"}, + [0x18A4C]={d="l"}, + [0x18A4D]={d="l"}, + [0x18A4E]={d="l"}, + [0x18A4F]={d="l"}, + [0x18A50]={d="l"}, + [0x18A51]={d="l"}, + [0x18A52]={d="l"}, + [0x18A53]={d="l"}, + [0x18A54]={d="l"}, + [0x18A55]={d="l"}, + [0x18A56]={d="l"}, + [0x18A57]={d="l"}, + [0x18A58]={d="l"}, + [0x18A59]={d="l"}, + [0x18A5A]={d="l"}, + [0x18A5B]={d="l"}, + [0x18A5C]={d="l"}, + [0x18A5D]={d="l"}, + [0x18A5E]={d="l"}, + [0x18A5F]={d="l"}, + [0x18A60]={d="l"}, + [0x18A61]={d="l"}, + [0x18A62]={d="l"}, + [0x18A63]={d="l"}, + [0x18A64]={d="l"}, + [0x18A65]={d="l"}, + [0x18A66]={d="l"}, + [0x18A67]={d="l"}, + [0x18A68]={d="l"}, + [0x18A69]={d="l"}, + [0x18A6A]={d="l"}, + [0x18A6B]={d="l"}, + [0x18A6C]={d="l"}, + [0x18A6D]={d="l"}, + [0x18A6E]={d="l"}, + [0x18A6F]={d="l"}, + [0x18A70]={d="l"}, + [0x18A71]={d="l"}, + [0x18A72]={d="l"}, + [0x18A73]={d="l"}, + [0x18A74]={d="l"}, + [0x18A75]={d="l"}, + [0x18A76]={d="l"}, + [0x18A77]={d="l"}, + [0x18A78]={d="l"}, + [0x18A79]={d="l"}, + [0x18A7A]={d="l"}, + [0x18A7B]={d="l"}, + [0x18A7C]={d="l"}, + [0x18A7D]={d="l"}, + [0x18A7E]={d="l"}, + [0x18A7F]={d="l"}, + [0x18A80]={d="l"}, + [0x18A81]={d="l"}, + [0x18A82]={d="l"}, + [0x18A83]={d="l"}, + [0x18A84]={d="l"}, + [0x18A85]={d="l"}, + [0x18A86]={d="l"}, + [0x18A87]={d="l"}, + [0x18A88]={d="l"}, + [0x18A89]={d="l"}, + [0x18A8A]={d="l"}, + [0x18A8B]={d="l"}, + [0x18A8C]={d="l"}, + [0x18A8D]={d="l"}, + [0x18A8E]={d="l"}, + [0x18A8F]={d="l"}, + [0x18A90]={d="l"}, + [0x18A91]={d="l"}, + [0x18A92]={d="l"}, + [0x18A93]={d="l"}, + [0x18A94]={d="l"}, + [0x18A95]={d="l"}, + [0x18A96]={d="l"}, + [0x18A97]={d="l"}, + [0x18A98]={d="l"}, + [0x18A99]={d="l"}, + [0x18A9A]={d="l"}, + [0x18A9B]={d="l"}, + [0x18A9C]={d="l"}, + [0x18A9D]={d="l"}, + [0x18A9E]={d="l"}, + [0x18A9F]={d="l"}, + [0x18AA0]={d="l"}, + [0x18AA1]={d="l"}, + [0x18AA2]={d="l"}, + [0x18AA3]={d="l"}, + [0x18AA4]={d="l"}, + [0x18AA5]={d="l"}, + [0x18AA6]={d="l"}, + [0x18AA7]={d="l"}, + [0x18AA8]={d="l"}, + [0x18AA9]={d="l"}, + [0x18AAA]={d="l"}, + [0x18AAB]={d="l"}, + [0x18AAC]={d="l"}, + [0x18AAD]={d="l"}, + [0x18AAE]={d="l"}, + [0x18AAF]={d="l"}, + [0x18AB0]={d="l"}, + [0x18AB1]={d="l"}, + [0x18AB2]={d="l"}, + [0x18AB3]={d="l"}, + [0x18AB4]={d="l"}, + [0x18AB5]={d="l"}, + [0x18AB6]={d="l"}, + [0x18AB7]={d="l"}, + [0x18AB8]={d="l"}, + [0x18AB9]={d="l"}, + [0x18ABA]={d="l"}, + [0x18ABB]={d="l"}, + [0x18ABC]={d="l"}, + [0x18ABD]={d="l"}, + [0x18ABE]={d="l"}, + [0x18ABF]={d="l"}, + [0x18AC0]={d="l"}, + [0x18AC1]={d="l"}, + [0x18AC2]={d="l"}, + [0x18AC3]={d="l"}, + [0x18AC4]={d="l"}, + [0x18AC5]={d="l"}, + [0x18AC6]={d="l"}, + [0x18AC7]={d="l"}, + [0x18AC8]={d="l"}, + [0x18AC9]={d="l"}, + [0x18ACA]={d="l"}, + [0x18ACB]={d="l"}, + [0x18ACC]={d="l"}, + [0x18ACD]={d="l"}, + [0x18ACE]={d="l"}, + [0x18ACF]={d="l"}, + [0x18AD0]={d="l"}, + [0x18AD1]={d="l"}, + [0x18AD2]={d="l"}, + [0x18AD3]={d="l"}, + [0x18AD4]={d="l"}, + [0x18AD5]={d="l"}, + [0x18AD6]={d="l"}, + [0x18AD7]={d="l"}, + [0x18AD8]={d="l"}, + [0x18AD9]={d="l"}, + [0x18ADA]={d="l"}, + [0x18ADB]={d="l"}, + [0x18ADC]={d="l"}, + [0x18ADD]={d="l"}, + [0x18ADE]={d="l"}, + [0x18ADF]={d="l"}, + [0x18AE0]={d="l"}, + [0x18AE1]={d="l"}, + [0x18AE2]={d="l"}, + [0x18AE3]={d="l"}, + [0x18AE4]={d="l"}, + [0x18AE5]={d="l"}, + [0x18AE6]={d="l"}, + [0x18AE7]={d="l"}, + [0x18AE8]={d="l"}, + [0x18AE9]={d="l"}, + [0x18AEA]={d="l"}, + [0x18AEB]={d="l"}, + [0x18AEC]={d="l"}, + [0x18AED]={d="l"}, + [0x18AEE]={d="l"}, + [0x18AEF]={d="l"}, + [0x18AF0]={d="l"}, + [0x18AF1]={d="l"}, + [0x18AF2]={d="l"}, + [0x18AF3]={d="l"}, + [0x18AF4]={d="l"}, + [0x18AF5]={d="l"}, + [0x18AF6]={d="l"}, + [0x18AF7]={d="l"}, + [0x18AF8]={d="l"}, + [0x18AF9]={d="l"}, + [0x18AFA]={d="l"}, + [0x18AFB]={d="l"}, + [0x18AFC]={d="l"}, + [0x18AFD]={d="l"}, + [0x18AFE]={d="l"}, + [0x18AFF]={d="l"}, + [0x18B00]={d="l"}, + [0x18B01]={d="l"}, + [0x18B02]={d="l"}, + [0x18B03]={d="l"}, + [0x18B04]={d="l"}, + [0x18B05]={d="l"}, + [0x18B06]={d="l"}, + [0x18B07]={d="l"}, + [0x18B08]={d="l"}, + [0x18B09]={d="l"}, + [0x18B0A]={d="l"}, + [0x18B0B]={d="l"}, + [0x18B0C]={d="l"}, + [0x18B0D]={d="l"}, + [0x18B0E]={d="l"}, + [0x18B0F]={d="l"}, + [0x18B10]={d="l"}, + [0x18B11]={d="l"}, + [0x18B12]={d="l"}, + [0x18B13]={d="l"}, + [0x18B14]={d="l"}, + [0x18B15]={d="l"}, + [0x18B16]={d="l"}, + [0x18B17]={d="l"}, + [0x18B18]={d="l"}, + [0x18B19]={d="l"}, + [0x18B1A]={d="l"}, + [0x18B1B]={d="l"}, + [0x18B1C]={d="l"}, + [0x18B1D]={d="l"}, + [0x18B1E]={d="l"}, + [0x18B1F]={d="l"}, + [0x18B20]={d="l"}, + [0x18B21]={d="l"}, + [0x18B22]={d="l"}, + [0x18B23]={d="l"}, + [0x18B24]={d="l"}, + [0x18B25]={d="l"}, + [0x18B26]={d="l"}, + [0x18B27]={d="l"}, + [0x18B28]={d="l"}, + [0x18B29]={d="l"}, + [0x18B2A]={d="l"}, + [0x18B2B]={d="l"}, + [0x18B2C]={d="l"}, + [0x18B2D]={d="l"}, + [0x18B2E]={d="l"}, + [0x18B2F]={d="l"}, + [0x18B30]={d="l"}, + [0x18B31]={d="l"}, + [0x18B32]={d="l"}, + [0x18B33]={d="l"}, + [0x18B34]={d="l"}, + [0x18B35]={d="l"}, + [0x18B36]={d="l"}, + [0x18B37]={d="l"}, + [0x18B38]={d="l"}, + [0x18B39]={d="l"}, + [0x18B3A]={d="l"}, + [0x18B3B]={d="l"}, + [0x18B3C]={d="l"}, + [0x18B3D]={d="l"}, + [0x18B3E]={d="l"}, + [0x18B3F]={d="l"}, + [0x18B40]={d="l"}, + [0x18B41]={d="l"}, + [0x18B42]={d="l"}, + [0x18B43]={d="l"}, + [0x18B44]={d="l"}, + [0x18B45]={d="l"}, + [0x18B46]={d="l"}, + [0x18B47]={d="l"}, + [0x18B48]={d="l"}, + [0x18B49]={d="l"}, + [0x18B4A]={d="l"}, + [0x18B4B]={d="l"}, + [0x18B4C]={d="l"}, + [0x18B4D]={d="l"}, + [0x18B4E]={d="l"}, + [0x18B4F]={d="l"}, + [0x18B50]={d="l"}, + [0x18B51]={d="l"}, + [0x18B52]={d="l"}, + [0x18B53]={d="l"}, + [0x18B54]={d="l"}, + [0x18B55]={d="l"}, + [0x18B56]={d="l"}, + [0x18B57]={d="l"}, + [0x18B58]={d="l"}, + [0x18B59]={d="l"}, + [0x18B5A]={d="l"}, + [0x18B5B]={d="l"}, + [0x18B5C]={d="l"}, + [0x18B5D]={d="l"}, + [0x18B5E]={d="l"}, + [0x18B5F]={d="l"}, + [0x18B60]={d="l"}, + [0x18B61]={d="l"}, + [0x18B62]={d="l"}, + [0x18B63]={d="l"}, + [0x18B64]={d="l"}, + [0x18B65]={d="l"}, + [0x18B66]={d="l"}, + [0x18B67]={d="l"}, + [0x18B68]={d="l"}, + [0x18B69]={d="l"}, + [0x18B6A]={d="l"}, + [0x18B6B]={d="l"}, + [0x18B6C]={d="l"}, + [0x18B6D]={d="l"}, + [0x18B6E]={d="l"}, + [0x18B6F]={d="l"}, + [0x18B70]={d="l"}, + [0x18B71]={d="l"}, + [0x18B72]={d="l"}, + [0x18B73]={d="l"}, + [0x18B74]={d="l"}, + [0x18B75]={d="l"}, + [0x18B76]={d="l"}, + [0x18B77]={d="l"}, + [0x18B78]={d="l"}, + [0x18B79]={d="l"}, + [0x18B7A]={d="l"}, + [0x18B7B]={d="l"}, + [0x18B7C]={d="l"}, + [0x18B7D]={d="l"}, + [0x18B7E]={d="l"}, + [0x18B7F]={d="l"}, + [0x18B80]={d="l"}, + [0x18B81]={d="l"}, + [0x18B82]={d="l"}, + [0x18B83]={d="l"}, + [0x18B84]={d="l"}, + [0x18B85]={d="l"}, + [0x18B86]={d="l"}, + [0x18B87]={d="l"}, + [0x18B88]={d="l"}, + [0x18B89]={d="l"}, + [0x18B8A]={d="l"}, + [0x18B8B]={d="l"}, + [0x18B8C]={d="l"}, + [0x18B8D]={d="l"}, + [0x18B8E]={d="l"}, + [0x18B8F]={d="l"}, + [0x18B90]={d="l"}, + [0x18B91]={d="l"}, + [0x18B92]={d="l"}, + [0x18B93]={d="l"}, + [0x18B94]={d="l"}, + [0x18B95]={d="l"}, + [0x18B96]={d="l"}, + [0x18B97]={d="l"}, + [0x18B98]={d="l"}, + [0x18B99]={d="l"}, + [0x18B9A]={d="l"}, + [0x18B9B]={d="l"}, + [0x18B9C]={d="l"}, + [0x18B9D]={d="l"}, + [0x18B9E]={d="l"}, + [0x18B9F]={d="l"}, + [0x18BA0]={d="l"}, + [0x18BA1]={d="l"}, + [0x18BA2]={d="l"}, + [0x18BA3]={d="l"}, + [0x18BA4]={d="l"}, + [0x18BA5]={d="l"}, + [0x18BA6]={d="l"}, + [0x18BA7]={d="l"}, + [0x18BA8]={d="l"}, + [0x18BA9]={d="l"}, + [0x18BAA]={d="l"}, + [0x18BAB]={d="l"}, + [0x18BAC]={d="l"}, + [0x18BAD]={d="l"}, + [0x18BAE]={d="l"}, + [0x18BAF]={d="l"}, + [0x18BB0]={d="l"}, + [0x18BB1]={d="l"}, + [0x18BB2]={d="l"}, + [0x18BB3]={d="l"}, + [0x18BB4]={d="l"}, + [0x18BB5]={d="l"}, + [0x18BB6]={d="l"}, + [0x18BB7]={d="l"}, + [0x18BB8]={d="l"}, + [0x18BB9]={d="l"}, + [0x18BBA]={d="l"}, + [0x18BBB]={d="l"}, + [0x18BBC]={d="l"}, + [0x18BBD]={d="l"}, + [0x18BBE]={d="l"}, + [0x18BBF]={d="l"}, + [0x18BC0]={d="l"}, + [0x18BC1]={d="l"}, + [0x18BC2]={d="l"}, + [0x18BC3]={d="l"}, + [0x18BC4]={d="l"}, + [0x18BC5]={d="l"}, + [0x18BC6]={d="l"}, + [0x18BC7]={d="l"}, + [0x18BC8]={d="l"}, + [0x18BC9]={d="l"}, + [0x18BCA]={d="l"}, + [0x18BCB]={d="l"}, + [0x18BCC]={d="l"}, + [0x18BCD]={d="l"}, + [0x18BCE]={d="l"}, + [0x18BCF]={d="l"}, + [0x18BD0]={d="l"}, + [0x18BD1]={d="l"}, + [0x18BD2]={d="l"}, + [0x18BD3]={d="l"}, + [0x18BD4]={d="l"}, + [0x18BD5]={d="l"}, + [0x18BD6]={d="l"}, + [0x18BD7]={d="l"}, + [0x18BD8]={d="l"}, + [0x18BD9]={d="l"}, + [0x18BDA]={d="l"}, + [0x18BDB]={d="l"}, + [0x18BDC]={d="l"}, + [0x18BDD]={d="l"}, + [0x18BDE]={d="l"}, + [0x18BDF]={d="l"}, + [0x18BE0]={d="l"}, + [0x18BE1]={d="l"}, + [0x18BE2]={d="l"}, + [0x18BE3]={d="l"}, + [0x18BE4]={d="l"}, + [0x18BE5]={d="l"}, + [0x18BE6]={d="l"}, + [0x18BE7]={d="l"}, + [0x18BE8]={d="l"}, + [0x18BE9]={d="l"}, + [0x18BEA]={d="l"}, + [0x18BEB]={d="l"}, + [0x18BEC]={d="l"}, + [0x18BED]={d="l"}, + [0x18BEE]={d="l"}, + [0x18BEF]={d="l"}, + [0x18BF0]={d="l"}, + [0x18BF1]={d="l"}, + [0x18BF2]={d="l"}, + [0x18BF3]={d="l"}, + [0x18BF4]={d="l"}, + [0x18BF5]={d="l"}, + [0x18BF6]={d="l"}, + [0x18BF7]={d="l"}, + [0x18BF8]={d="l"}, + [0x18BF9]={d="l"}, + [0x18BFA]={d="l"}, + [0x18BFB]={d="l"}, + [0x18BFC]={d="l"}, + [0x18BFD]={d="l"}, + [0x18BFE]={d="l"}, + [0x18BFF]={d="l"}, + [0x18C00]={d="l"}, + [0x18C01]={d="l"}, + [0x18C02]={d="l"}, + [0x18C03]={d="l"}, + [0x18C04]={d="l"}, + [0x18C05]={d="l"}, + [0x18C06]={d="l"}, + [0x18C07]={d="l"}, + [0x18C08]={d="l"}, + [0x18C09]={d="l"}, + [0x18C0A]={d="l"}, + [0x18C0B]={d="l"}, + [0x18C0C]={d="l"}, + [0x18C0D]={d="l"}, + [0x18C0E]={d="l"}, + [0x18C0F]={d="l"}, + [0x18C10]={d="l"}, + [0x18C11]={d="l"}, + [0x18C12]={d="l"}, + [0x18C13]={d="l"}, + [0x18C14]={d="l"}, + [0x18C15]={d="l"}, + [0x18C16]={d="l"}, + [0x18C17]={d="l"}, + [0x18C18]={d="l"}, + [0x18C19]={d="l"}, + [0x18C1A]={d="l"}, + [0x18C1B]={d="l"}, + [0x18C1C]={d="l"}, + [0x18C1D]={d="l"}, + [0x18C1E]={d="l"}, + [0x18C1F]={d="l"}, + [0x18C20]={d="l"}, + [0x18C21]={d="l"}, + [0x18C22]={d="l"}, + [0x18C23]={d="l"}, + [0x18C24]={d="l"}, + [0x18C25]={d="l"}, + [0x18C26]={d="l"}, + [0x18C27]={d="l"}, + [0x18C28]={d="l"}, + [0x18C29]={d="l"}, + [0x18C2A]={d="l"}, + [0x18C2B]={d="l"}, + [0x18C2C]={d="l"}, + [0x18C2D]={d="l"}, + [0x18C2E]={d="l"}, + [0x18C2F]={d="l"}, + [0x18C30]={d="l"}, + [0x18C31]={d="l"}, + [0x18C32]={d="l"}, + [0x18C33]={d="l"}, + [0x18C34]={d="l"}, + [0x18C35]={d="l"}, + [0x18C36]={d="l"}, + [0x18C37]={d="l"}, + [0x18C38]={d="l"}, + [0x18C39]={d="l"}, + [0x18C3A]={d="l"}, + [0x18C3B]={d="l"}, + [0x18C3C]={d="l"}, + [0x18C3D]={d="l"}, + [0x18C3E]={d="l"}, + [0x18C3F]={d="l"}, + [0x18C40]={d="l"}, + [0x18C41]={d="l"}, + [0x18C42]={d="l"}, + [0x18C43]={d="l"}, + [0x18C44]={d="l"}, + [0x18C45]={d="l"}, + [0x18C46]={d="l"}, + [0x18C47]={d="l"}, + [0x18C48]={d="l"}, + [0x18C49]={d="l"}, + [0x18C4A]={d="l"}, + [0x18C4B]={d="l"}, + [0x18C4C]={d="l"}, + [0x18C4D]={d="l"}, + [0x18C4E]={d="l"}, + [0x18C4F]={d="l"}, + [0x18C50]={d="l"}, + [0x18C51]={d="l"}, + [0x18C52]={d="l"}, + [0x18C53]={d="l"}, + [0x18C54]={d="l"}, + [0x18C55]={d="l"}, + [0x18C56]={d="l"}, + [0x18C57]={d="l"}, + [0x18C58]={d="l"}, + [0x18C59]={d="l"}, + [0x18C5A]={d="l"}, + [0x18C5B]={d="l"}, + [0x18C5C]={d="l"}, + [0x18C5D]={d="l"}, + [0x18C5E]={d="l"}, + [0x18C5F]={d="l"}, + [0x18C60]={d="l"}, + [0x18C61]={d="l"}, + [0x18C62]={d="l"}, + [0x18C63]={d="l"}, + [0x18C64]={d="l"}, + [0x18C65]={d="l"}, + [0x18C66]={d="l"}, + [0x18C67]={d="l"}, + [0x18C68]={d="l"}, + [0x18C69]={d="l"}, + [0x18C6A]={d="l"}, + [0x18C6B]={d="l"}, + [0x18C6C]={d="l"}, + [0x18C6D]={d="l"}, + [0x18C6E]={d="l"}, + [0x18C6F]={d="l"}, + [0x18C70]={d="l"}, + [0x18C71]={d="l"}, + [0x18C72]={d="l"}, + [0x18C73]={d="l"}, + [0x18C74]={d="l"}, + [0x18C75]={d="l"}, + [0x18C76]={d="l"}, + [0x18C77]={d="l"}, + [0x18C78]={d="l"}, + [0x18C79]={d="l"}, + [0x18C7A]={d="l"}, + [0x18C7B]={d="l"}, + [0x18C7C]={d="l"}, + [0x18C7D]={d="l"}, + [0x18C7E]={d="l"}, + [0x18C7F]={d="l"}, + [0x18C80]={d="l"}, + [0x18C81]={d="l"}, + [0x18C82]={d="l"}, + [0x18C83]={d="l"}, + [0x18C84]={d="l"}, + [0x18C85]={d="l"}, + [0x18C86]={d="l"}, + [0x18C87]={d="l"}, + [0x18C88]={d="l"}, + [0x18C89]={d="l"}, + [0x18C8A]={d="l"}, + [0x18C8B]={d="l"}, + [0x18C8C]={d="l"}, + [0x18C8D]={d="l"}, + [0x18C8E]={d="l"}, + [0x18C8F]={d="l"}, + [0x18C90]={d="l"}, + [0x18C91]={d="l"}, + [0x18C92]={d="l"}, + [0x18C93]={d="l"}, + [0x18C94]={d="l"}, + [0x18C95]={d="l"}, + [0x18C96]={d="l"}, + [0x18C97]={d="l"}, + [0x18C98]={d="l"}, + [0x18C99]={d="l"}, + [0x18C9A]={d="l"}, + [0x18C9B]={d="l"}, + [0x18C9C]={d="l"}, + [0x18C9D]={d="l"}, + [0x18C9E]={d="l"}, + [0x18C9F]={d="l"}, + [0x18CA0]={d="l"}, + [0x18CA1]={d="l"}, + [0x18CA2]={d="l"}, + [0x18CA3]={d="l"}, + [0x18CA4]={d="l"}, + [0x18CA5]={d="l"}, + [0x18CA6]={d="l"}, + [0x18CA7]={d="l"}, + [0x18CA8]={d="l"}, + [0x18CA9]={d="l"}, + [0x18CAA]={d="l"}, + [0x18CAB]={d="l"}, + [0x18CAC]={d="l"}, + [0x18CAD]={d="l"}, + [0x18CAE]={d="l"}, + [0x18CAF]={d="l"}, + [0x18CB0]={d="l"}, + [0x18CB1]={d="l"}, + [0x18CB2]={d="l"}, + [0x18CB3]={d="l"}, + [0x18CB4]={d="l"}, + [0x18CB5]={d="l"}, + [0x18CB6]={d="l"}, + [0x18CB7]={d="l"}, + [0x18CB8]={d="l"}, + [0x18CB9]={d="l"}, + [0x18CBA]={d="l"}, + [0x18CBB]={d="l"}, + [0x18CBC]={d="l"}, + [0x18CBD]={d="l"}, + [0x18CBE]={d="l"}, + [0x18CBF]={d="l"}, + [0x18CC0]={d="l"}, + [0x18CC1]={d="l"}, + [0x18CC2]={d="l"}, + [0x18CC3]={d="l"}, + [0x18CC4]={d="l"}, + [0x18CC5]={d="l"}, + [0x18CC6]={d="l"}, + [0x18CC7]={d="l"}, + [0x18CC8]={d="l"}, + [0x18CC9]={d="l"}, + [0x18CCA]={d="l"}, + [0x18CCB]={d="l"}, + [0x18CCC]={d="l"}, + [0x18CCD]={d="l"}, + [0x18CCE]={d="l"}, + [0x18CCF]={d="l"}, + [0x18CD0]={d="l"}, + [0x18CD1]={d="l"}, + [0x18CD2]={d="l"}, + [0x18CD3]={d="l"}, + [0x18CD4]={d="l"}, + [0x18CD5]={d="l"}, + [0x1AFF0]={d="l"}, + [0x1AFF1]={d="l"}, + [0x1AFF2]={d="l"}, + [0x1AFF3]={d="l"}, + [0x1AFF5]={d="l"}, + [0x1AFF6]={d="l"}, + [0x1AFF7]={d="l"}, + [0x1AFF8]={d="l"}, + [0x1AFF9]={d="l"}, + [0x1AFFA]={d="l"}, + [0x1AFFB]={d="l"}, + [0x1AFFD]={d="l"}, + [0x1AFFE]={d="l"}, + [0x1B000]={d="l"}, + [0x1B001]={d="l"}, + [0x1B002]={d="l"}, + [0x1B003]={d="l"}, + [0x1B004]={d="l"}, + [0x1B005]={d="l"}, + [0x1B006]={d="l"}, + [0x1B007]={d="l"}, + [0x1B008]={d="l"}, + [0x1B009]={d="l"}, + [0x1B00A]={d="l"}, + [0x1B00B]={d="l"}, + [0x1B00C]={d="l"}, + [0x1B00D]={d="l"}, + [0x1B00E]={d="l"}, + [0x1B00F]={d="l"}, + [0x1B010]={d="l"}, + [0x1B011]={d="l"}, + [0x1B012]={d="l"}, + [0x1B013]={d="l"}, + [0x1B014]={d="l"}, + [0x1B015]={d="l"}, + [0x1B016]={d="l"}, + [0x1B017]={d="l"}, + [0x1B018]={d="l"}, + [0x1B019]={d="l"}, + [0x1B01A]={d="l"}, + [0x1B01B]={d="l"}, + [0x1B01C]={d="l"}, + [0x1B01D]={d="l"}, + [0x1B01E]={d="l"}, + [0x1B01F]={d="l"}, + [0x1B020]={d="l"}, + [0x1B021]={d="l"}, + [0x1B022]={d="l"}, + [0x1B023]={d="l"}, + [0x1B024]={d="l"}, + [0x1B025]={d="l"}, + [0x1B026]={d="l"}, + [0x1B027]={d="l"}, + [0x1B028]={d="l"}, + [0x1B029]={d="l"}, + [0x1B02A]={d="l"}, + [0x1B02B]={d="l"}, + [0x1B02C]={d="l"}, + [0x1B02D]={d="l"}, + [0x1B02E]={d="l"}, + [0x1B02F]={d="l"}, + [0x1B030]={d="l"}, + [0x1B031]={d="l"}, + [0x1B032]={d="l"}, + [0x1B033]={d="l"}, + [0x1B034]={d="l"}, + [0x1B035]={d="l"}, + [0x1B036]={d="l"}, + [0x1B037]={d="l"}, + [0x1B038]={d="l"}, + [0x1B039]={d="l"}, + [0x1B03A]={d="l"}, + [0x1B03B]={d="l"}, + [0x1B03C]={d="l"}, + [0x1B03D]={d="l"}, + [0x1B03E]={d="l"}, + [0x1B03F]={d="l"}, + [0x1B040]={d="l"}, + [0x1B041]={d="l"}, + [0x1B042]={d="l"}, + [0x1B043]={d="l"}, + [0x1B044]={d="l"}, + [0x1B045]={d="l"}, + [0x1B046]={d="l"}, + [0x1B047]={d="l"}, + [0x1B048]={d="l"}, + [0x1B049]={d="l"}, + [0x1B04A]={d="l"}, + [0x1B04B]={d="l"}, + [0x1B04C]={d="l"}, + [0x1B04D]={d="l"}, + [0x1B04E]={d="l"}, + [0x1B04F]={d="l"}, + [0x1B050]={d="l"}, + [0x1B051]={d="l"}, + [0x1B052]={d="l"}, + [0x1B053]={d="l"}, + [0x1B054]={d="l"}, + [0x1B055]={d="l"}, + [0x1B056]={d="l"}, + [0x1B057]={d="l"}, + [0x1B058]={d="l"}, + [0x1B059]={d="l"}, + [0x1B05A]={d="l"}, + [0x1B05B]={d="l"}, + [0x1B05C]={d="l"}, + [0x1B05D]={d="l"}, + [0x1B05E]={d="l"}, + [0x1B05F]={d="l"}, + [0x1B060]={d="l"}, + [0x1B061]={d="l"}, + [0x1B062]={d="l"}, + [0x1B063]={d="l"}, + [0x1B064]={d="l"}, + [0x1B065]={d="l"}, + [0x1B066]={d="l"}, + [0x1B067]={d="l"}, + [0x1B068]={d="l"}, + [0x1B069]={d="l"}, + [0x1B06A]={d="l"}, + [0x1B06B]={d="l"}, + [0x1B06C]={d="l"}, + [0x1B06D]={d="l"}, + [0x1B06E]={d="l"}, + [0x1B06F]={d="l"}, + [0x1B070]={d="l"}, + [0x1B071]={d="l"}, + [0x1B072]={d="l"}, + [0x1B073]={d="l"}, + [0x1B074]={d="l"}, + [0x1B075]={d="l"}, + [0x1B076]={d="l"}, + [0x1B077]={d="l"}, + [0x1B078]={d="l"}, + [0x1B079]={d="l"}, + [0x1B07A]={d="l"}, + [0x1B07B]={d="l"}, + [0x1B07C]={d="l"}, + [0x1B07D]={d="l"}, + [0x1B07E]={d="l"}, + [0x1B07F]={d="l"}, + [0x1B080]={d="l"}, + [0x1B081]={d="l"}, + [0x1B082]={d="l"}, + [0x1B083]={d="l"}, + [0x1B084]={d="l"}, + [0x1B085]={d="l"}, + [0x1B086]={d="l"}, + [0x1B087]={d="l"}, + [0x1B088]={d="l"}, + [0x1B089]={d="l"}, + [0x1B08A]={d="l"}, + [0x1B08B]={d="l"}, + [0x1B08C]={d="l"}, + [0x1B08D]={d="l"}, + [0x1B08E]={d="l"}, + [0x1B08F]={d="l"}, + [0x1B090]={d="l"}, + [0x1B091]={d="l"}, + [0x1B092]={d="l"}, + [0x1B093]={d="l"}, + [0x1B094]={d="l"}, + [0x1B095]={d="l"}, + [0x1B096]={d="l"}, + [0x1B097]={d="l"}, + [0x1B098]={d="l"}, + [0x1B099]={d="l"}, + [0x1B09A]={d="l"}, + [0x1B09B]={d="l"}, + [0x1B09C]={d="l"}, + [0x1B09D]={d="l"}, + [0x1B09E]={d="l"}, + [0x1B09F]={d="l"}, + [0x1B0A0]={d="l"}, + [0x1B0A1]={d="l"}, + [0x1B0A2]={d="l"}, + [0x1B0A3]={d="l"}, + [0x1B0A4]={d="l"}, + [0x1B0A5]={d="l"}, + [0x1B0A6]={d="l"}, + [0x1B0A7]={d="l"}, + [0x1B0A8]={d="l"}, + [0x1B0A9]={d="l"}, + [0x1B0AA]={d="l"}, + [0x1B0AB]={d="l"}, + [0x1B0AC]={d="l"}, + [0x1B0AD]={d="l"}, + [0x1B0AE]={d="l"}, + [0x1B0AF]={d="l"}, + [0x1B0B0]={d="l"}, + [0x1B0B1]={d="l"}, + [0x1B0B2]={d="l"}, + [0x1B0B3]={d="l"}, + [0x1B0B4]={d="l"}, + [0x1B0B5]={d="l"}, + [0x1B0B6]={d="l"}, + [0x1B0B7]={d="l"}, + [0x1B0B8]={d="l"}, + [0x1B0B9]={d="l"}, + [0x1B0BA]={d="l"}, + [0x1B0BB]={d="l"}, + [0x1B0BC]={d="l"}, + [0x1B0BD]={d="l"}, + [0x1B0BE]={d="l"}, + [0x1B0BF]={d="l"}, + [0x1B0C0]={d="l"}, + [0x1B0C1]={d="l"}, + [0x1B0C2]={d="l"}, + [0x1B0C3]={d="l"}, + [0x1B0C4]={d="l"}, + [0x1B0C5]={d="l"}, + [0x1B0C6]={d="l"}, + [0x1B0C7]={d="l"}, + [0x1B0C8]={d="l"}, + [0x1B0C9]={d="l"}, + [0x1B0CA]={d="l"}, + [0x1B0CB]={d="l"}, + [0x1B0CC]={d="l"}, + [0x1B0CD]={d="l"}, + [0x1B0CE]={d="l"}, + [0x1B0CF]={d="l"}, + [0x1B0D0]={d="l"}, + [0x1B0D1]={d="l"}, + [0x1B0D2]={d="l"}, + [0x1B0D3]={d="l"}, + [0x1B0D4]={d="l"}, + [0x1B0D5]={d="l"}, + [0x1B0D6]={d="l"}, + [0x1B0D7]={d="l"}, + [0x1B0D8]={d="l"}, + [0x1B0D9]={d="l"}, + [0x1B0DA]={d="l"}, + [0x1B0DB]={d="l"}, + [0x1B0DC]={d="l"}, + [0x1B0DD]={d="l"}, + [0x1B0DE]={d="l"}, + [0x1B0DF]={d="l"}, + [0x1B0E0]={d="l"}, + [0x1B0E1]={d="l"}, + [0x1B0E2]={d="l"}, + [0x1B0E3]={d="l"}, + [0x1B0E4]={d="l"}, + [0x1B0E5]={d="l"}, + [0x1B0E6]={d="l"}, + [0x1B0E7]={d="l"}, + [0x1B0E8]={d="l"}, + [0x1B0E9]={d="l"}, + [0x1B0EA]={d="l"}, + [0x1B0EB]={d="l"}, + [0x1B0EC]={d="l"}, + [0x1B0ED]={d="l"}, + [0x1B0EE]={d="l"}, + [0x1B0EF]={d="l"}, + [0x1B0F0]={d="l"}, + [0x1B0F1]={d="l"}, + [0x1B0F2]={d="l"}, + [0x1B0F3]={d="l"}, + [0x1B0F4]={d="l"}, + [0x1B0F5]={d="l"}, + [0x1B0F6]={d="l"}, + [0x1B0F7]={d="l"}, + [0x1B0F8]={d="l"}, + [0x1B0F9]={d="l"}, + [0x1B0FA]={d="l"}, + [0x1B0FB]={d="l"}, + [0x1B0FC]={d="l"}, + [0x1B0FD]={d="l"}, + [0x1B0FE]={d="l"}, + [0x1B0FF]={d="l"}, + [0x1B100]={d="l"}, + [0x1B101]={d="l"}, + [0x1B102]={d="l"}, + [0x1B103]={d="l"}, + [0x1B104]={d="l"}, + [0x1B105]={d="l"}, + [0x1B106]={d="l"}, + [0x1B107]={d="l"}, + [0x1B108]={d="l"}, + [0x1B109]={d="l"}, + [0x1B10A]={d="l"}, + [0x1B10B]={d="l"}, + [0x1B10C]={d="l"}, + [0x1B10D]={d="l"}, + [0x1B10E]={d="l"}, + [0x1B10F]={d="l"}, + [0x1B110]={d="l"}, + [0x1B111]={d="l"}, + [0x1B112]={d="l"}, + [0x1B113]={d="l"}, + [0x1B114]={d="l"}, + [0x1B115]={d="l"}, + [0x1B116]={d="l"}, + [0x1B117]={d="l"}, + [0x1B118]={d="l"}, + [0x1B119]={d="l"}, + [0x1B11A]={d="l"}, + [0x1B11B]={d="l"}, + [0x1B11C]={d="l"}, + [0x1B11D]={d="l"}, + [0x1B11E]={d="l"}, + [0x1B11F]={d="l"}, + [0x1B120]={d="l"}, + [0x1B121]={d="l"}, + [0x1B122]={d="l"}, + [0x1B132]={d="l"}, + [0x1B150]={d="l"}, + [0x1B151]={d="l"}, + [0x1B152]={d="l"}, + [0x1B155]={d="l"}, + [0x1B164]={d="l"}, + [0x1B165]={d="l"}, + [0x1B166]={d="l"}, + [0x1B167]={d="l"}, + [0x1B170]={d="l"}, + [0x1B171]={d="l"}, + [0x1B172]={d="l"}, + [0x1B173]={d="l"}, + [0x1B174]={d="l"}, + [0x1B175]={d="l"}, + [0x1B176]={d="l"}, + [0x1B177]={d="l"}, + [0x1B178]={d="l"}, + [0x1B179]={d="l"}, + [0x1B17A]={d="l"}, + [0x1B17B]={d="l"}, + [0x1B17C]={d="l"}, + [0x1B17D]={d="l"}, + [0x1B17E]={d="l"}, + [0x1B17F]={d="l"}, + [0x1B180]={d="l"}, + [0x1B181]={d="l"}, + [0x1B182]={d="l"}, + [0x1B183]={d="l"}, + [0x1B184]={d="l"}, + [0x1B185]={d="l"}, + [0x1B186]={d="l"}, + [0x1B187]={d="l"}, + [0x1B188]={d="l"}, + [0x1B189]={d="l"}, + [0x1B18A]={d="l"}, + [0x1B18B]={d="l"}, + [0x1B18C]={d="l"}, + [0x1B18D]={d="l"}, + [0x1B18E]={d="l"}, + [0x1B18F]={d="l"}, + [0x1B190]={d="l"}, + [0x1B191]={d="l"}, + [0x1B192]={d="l"}, + [0x1B193]={d="l"}, + [0x1B194]={d="l"}, + [0x1B195]={d="l"}, + [0x1B196]={d="l"}, + [0x1B197]={d="l"}, + [0x1B198]={d="l"}, + [0x1B199]={d="l"}, + [0x1B19A]={d="l"}, + [0x1B19B]={d="l"}, + [0x1B19C]={d="l"}, + [0x1B19D]={d="l"}, + [0x1B19E]={d="l"}, + [0x1B19F]={d="l"}, + [0x1B1A0]={d="l"}, + [0x1B1A1]={d="l"}, + [0x1B1A2]={d="l"}, + [0x1B1A3]={d="l"}, + [0x1B1A4]={d="l"}, + [0x1B1A5]={d="l"}, + [0x1B1A6]={d="l"}, + [0x1B1A7]={d="l"}, + [0x1B1A8]={d="l"}, + [0x1B1A9]={d="l"}, + [0x1B1AA]={d="l"}, + [0x1B1AB]={d="l"}, + [0x1B1AC]={d="l"}, + [0x1B1AD]={d="l"}, + [0x1B1AE]={d="l"}, + [0x1B1AF]={d="l"}, + [0x1B1B0]={d="l"}, + [0x1B1B1]={d="l"}, + [0x1B1B2]={d="l"}, + [0x1B1B3]={d="l"}, + [0x1B1B4]={d="l"}, + [0x1B1B5]={d="l"}, + [0x1B1B6]={d="l"}, + [0x1B1B7]={d="l"}, + [0x1B1B8]={d="l"}, + [0x1B1B9]={d="l"}, + [0x1B1BA]={d="l"}, + [0x1B1BB]={d="l"}, + [0x1B1BC]={d="l"}, + [0x1B1BD]={d="l"}, + [0x1B1BE]={d="l"}, + [0x1B1BF]={d="l"}, + [0x1B1C0]={d="l"}, + [0x1B1C1]={d="l"}, + [0x1B1C2]={d="l"}, + [0x1B1C3]={d="l"}, + [0x1B1C4]={d="l"}, + [0x1B1C5]={d="l"}, + [0x1B1C6]={d="l"}, + [0x1B1C7]={d="l"}, + [0x1B1C8]={d="l"}, + [0x1B1C9]={d="l"}, + [0x1B1CA]={d="l"}, + [0x1B1CB]={d="l"}, + [0x1B1CC]={d="l"}, + [0x1B1CD]={d="l"}, + [0x1B1CE]={d="l"}, + [0x1B1CF]={d="l"}, + [0x1B1D0]={d="l"}, + [0x1B1D1]={d="l"}, + [0x1B1D2]={d="l"}, + [0x1B1D3]={d="l"}, + [0x1B1D4]={d="l"}, + [0x1B1D5]={d="l"}, + [0x1B1D6]={d="l"}, + [0x1B1D7]={d="l"}, + [0x1B1D8]={d="l"}, + [0x1B1D9]={d="l"}, + [0x1B1DA]={d="l"}, + [0x1B1DB]={d="l"}, + [0x1B1DC]={d="l"}, + [0x1B1DD]={d="l"}, + [0x1B1DE]={d="l"}, + [0x1B1DF]={d="l"}, + [0x1B1E0]={d="l"}, + [0x1B1E1]={d="l"}, + [0x1B1E2]={d="l"}, + [0x1B1E3]={d="l"}, + [0x1B1E4]={d="l"}, + [0x1B1E5]={d="l"}, + [0x1B1E6]={d="l"}, + [0x1B1E7]={d="l"}, + [0x1B1E8]={d="l"}, + [0x1B1E9]={d="l"}, + [0x1B1EA]={d="l"}, + [0x1B1EB]={d="l"}, + [0x1B1EC]={d="l"}, + [0x1B1ED]={d="l"}, + [0x1B1EE]={d="l"}, + [0x1B1EF]={d="l"}, + [0x1B1F0]={d="l"}, + [0x1B1F1]={d="l"}, + [0x1B1F2]={d="l"}, + [0x1B1F3]={d="l"}, + [0x1B1F4]={d="l"}, + [0x1B1F5]={d="l"}, + [0x1B1F6]={d="l"}, + [0x1B1F7]={d="l"}, + [0x1B1F8]={d="l"}, + [0x1B1F9]={d="l"}, + [0x1B1FA]={d="l"}, + [0x1B1FB]={d="l"}, + [0x1B1FC]={d="l"}, + [0x1B1FD]={d="l"}, + [0x1B1FE]={d="l"}, + [0x1B1FF]={d="l"}, + [0x1B200]={d="l"}, + [0x1B201]={d="l"}, + [0x1B202]={d="l"}, + [0x1B203]={d="l"}, + [0x1B204]={d="l"}, + [0x1B205]={d="l"}, + [0x1B206]={d="l"}, + [0x1B207]={d="l"}, + [0x1B208]={d="l"}, + [0x1B209]={d="l"}, + [0x1B20A]={d="l"}, + [0x1B20B]={d="l"}, + [0x1B20C]={d="l"}, + [0x1B20D]={d="l"}, + [0x1B20E]={d="l"}, + [0x1B20F]={d="l"}, + [0x1B210]={d="l"}, + [0x1B211]={d="l"}, + [0x1B212]={d="l"}, + [0x1B213]={d="l"}, + [0x1B214]={d="l"}, + [0x1B215]={d="l"}, + [0x1B216]={d="l"}, + [0x1B217]={d="l"}, + [0x1B218]={d="l"}, + [0x1B219]={d="l"}, + [0x1B21A]={d="l"}, + [0x1B21B]={d="l"}, + [0x1B21C]={d="l"}, + [0x1B21D]={d="l"}, + [0x1B21E]={d="l"}, + [0x1B21F]={d="l"}, + [0x1B220]={d="l"}, + [0x1B221]={d="l"}, + [0x1B222]={d="l"}, + [0x1B223]={d="l"}, + [0x1B224]={d="l"}, + [0x1B225]={d="l"}, + [0x1B226]={d="l"}, + [0x1B227]={d="l"}, + [0x1B228]={d="l"}, + [0x1B229]={d="l"}, + [0x1B22A]={d="l"}, + [0x1B22B]={d="l"}, + [0x1B22C]={d="l"}, + [0x1B22D]={d="l"}, + [0x1B22E]={d="l"}, + [0x1B22F]={d="l"}, + [0x1B230]={d="l"}, + [0x1B231]={d="l"}, + [0x1B232]={d="l"}, + [0x1B233]={d="l"}, + [0x1B234]={d="l"}, + [0x1B235]={d="l"}, + [0x1B236]={d="l"}, + [0x1B237]={d="l"}, + [0x1B238]={d="l"}, + [0x1B239]={d="l"}, + [0x1B23A]={d="l"}, + [0x1B23B]={d="l"}, + [0x1B23C]={d="l"}, + [0x1B23D]={d="l"}, + [0x1B23E]={d="l"}, + [0x1B23F]={d="l"}, + [0x1B240]={d="l"}, + [0x1B241]={d="l"}, + [0x1B242]={d="l"}, + [0x1B243]={d="l"}, + [0x1B244]={d="l"}, + [0x1B245]={d="l"}, + [0x1B246]={d="l"}, + [0x1B247]={d="l"}, + [0x1B248]={d="l"}, + [0x1B249]={d="l"}, + [0x1B24A]={d="l"}, + [0x1B24B]={d="l"}, + [0x1B24C]={d="l"}, + [0x1B24D]={d="l"}, + [0x1B24E]={d="l"}, + [0x1B24F]={d="l"}, + [0x1B250]={d="l"}, + [0x1B251]={d="l"}, + [0x1B252]={d="l"}, + [0x1B253]={d="l"}, + [0x1B254]={d="l"}, + [0x1B255]={d="l"}, + [0x1B256]={d="l"}, + [0x1B257]={d="l"}, + [0x1B258]={d="l"}, + [0x1B259]={d="l"}, + [0x1B25A]={d="l"}, + [0x1B25B]={d="l"}, + [0x1B25C]={d="l"}, + [0x1B25D]={d="l"}, + [0x1B25E]={d="l"}, + [0x1B25F]={d="l"}, + [0x1B260]={d="l"}, + [0x1B261]={d="l"}, + [0x1B262]={d="l"}, + [0x1B263]={d="l"}, + [0x1B264]={d="l"}, + [0x1B265]={d="l"}, + [0x1B266]={d="l"}, + [0x1B267]={d="l"}, + [0x1B268]={d="l"}, + [0x1B269]={d="l"}, + [0x1B26A]={d="l"}, + [0x1B26B]={d="l"}, + [0x1B26C]={d="l"}, + [0x1B26D]={d="l"}, + [0x1B26E]={d="l"}, + [0x1B26F]={d="l"}, + [0x1B270]={d="l"}, + [0x1B271]={d="l"}, + [0x1B272]={d="l"}, + [0x1B273]={d="l"}, + [0x1B274]={d="l"}, + [0x1B275]={d="l"}, + [0x1B276]={d="l"}, + [0x1B277]={d="l"}, + [0x1B278]={d="l"}, + [0x1B279]={d="l"}, + [0x1B27A]={d="l"}, + [0x1B27B]={d="l"}, + [0x1B27C]={d="l"}, + [0x1B27D]={d="l"}, + [0x1B27E]={d="l"}, + [0x1B27F]={d="l"}, + [0x1B280]={d="l"}, + [0x1B281]={d="l"}, + [0x1B282]={d="l"}, + [0x1B283]={d="l"}, + [0x1B284]={d="l"}, + [0x1B285]={d="l"}, + [0x1B286]={d="l"}, + [0x1B287]={d="l"}, + [0x1B288]={d="l"}, + [0x1B289]={d="l"}, + [0x1B28A]={d="l"}, + [0x1B28B]={d="l"}, + [0x1B28C]={d="l"}, + [0x1B28D]={d="l"}, + [0x1B28E]={d="l"}, + [0x1B28F]={d="l"}, + [0x1B290]={d="l"}, + [0x1B291]={d="l"}, + [0x1B292]={d="l"}, + [0x1B293]={d="l"}, + [0x1B294]={d="l"}, + [0x1B295]={d="l"}, + [0x1B296]={d="l"}, + [0x1B297]={d="l"}, + [0x1B298]={d="l"}, + [0x1B299]={d="l"}, + [0x1B29A]={d="l"}, + [0x1B29B]={d="l"}, + [0x1B29C]={d="l"}, + [0x1B29D]={d="l"}, + [0x1B29E]={d="l"}, + [0x1B29F]={d="l"}, + [0x1B2A0]={d="l"}, + [0x1B2A1]={d="l"}, + [0x1B2A2]={d="l"}, + [0x1B2A3]={d="l"}, + [0x1B2A4]={d="l"}, + [0x1B2A5]={d="l"}, + [0x1B2A6]={d="l"}, + [0x1B2A7]={d="l"}, + [0x1B2A8]={d="l"}, + [0x1B2A9]={d="l"}, + [0x1B2AA]={d="l"}, + [0x1B2AB]={d="l"}, + [0x1B2AC]={d="l"}, + [0x1B2AD]={d="l"}, + [0x1B2AE]={d="l"}, + [0x1B2AF]={d="l"}, + [0x1B2B0]={d="l"}, + [0x1B2B1]={d="l"}, + [0x1B2B2]={d="l"}, + [0x1B2B3]={d="l"}, + [0x1B2B4]={d="l"}, + [0x1B2B5]={d="l"}, + [0x1B2B6]={d="l"}, + [0x1B2B7]={d="l"}, + [0x1B2B8]={d="l"}, + [0x1B2B9]={d="l"}, + [0x1B2BA]={d="l"}, + [0x1B2BB]={d="l"}, + [0x1B2BC]={d="l"}, + [0x1B2BD]={d="l"}, + [0x1B2BE]={d="l"}, + [0x1B2BF]={d="l"}, + [0x1B2C0]={d="l"}, + [0x1B2C1]={d="l"}, + [0x1B2C2]={d="l"}, + [0x1B2C3]={d="l"}, + [0x1B2C4]={d="l"}, + [0x1B2C5]={d="l"}, + [0x1B2C6]={d="l"}, + [0x1B2C7]={d="l"}, + [0x1B2C8]={d="l"}, + [0x1B2C9]={d="l"}, + [0x1B2CA]={d="l"}, + [0x1B2CB]={d="l"}, + [0x1B2CC]={d="l"}, + [0x1B2CD]={d="l"}, + [0x1B2CE]={d="l"}, + [0x1B2CF]={d="l"}, + [0x1B2D0]={d="l"}, + [0x1B2D1]={d="l"}, + [0x1B2D2]={d="l"}, + [0x1B2D3]={d="l"}, + [0x1B2D4]={d="l"}, + [0x1B2D5]={d="l"}, + [0x1B2D6]={d="l"}, + [0x1B2D7]={d="l"}, + [0x1B2D8]={d="l"}, + [0x1B2D9]={d="l"}, + [0x1B2DA]={d="l"}, + [0x1B2DB]={d="l"}, + [0x1B2DC]={d="l"}, + [0x1B2DD]={d="l"}, + [0x1B2DE]={d="l"}, + [0x1B2DF]={d="l"}, + [0x1B2E0]={d="l"}, + [0x1B2E1]={d="l"}, + [0x1B2E2]={d="l"}, + [0x1B2E3]={d="l"}, + [0x1B2E4]={d="l"}, + [0x1B2E5]={d="l"}, + [0x1B2E6]={d="l"}, + [0x1B2E7]={d="l"}, + [0x1B2E8]={d="l"}, + [0x1B2E9]={d="l"}, + [0x1B2EA]={d="l"}, + [0x1B2EB]={d="l"}, + [0x1B2EC]={d="l"}, + [0x1B2ED]={d="l"}, + [0x1B2EE]={d="l"}, + [0x1B2EF]={d="l"}, + [0x1B2F0]={d="l"}, + [0x1B2F1]={d="l"}, + [0x1B2F2]={d="l"}, + [0x1B2F3]={d="l"}, + [0x1B2F4]={d="l"}, + [0x1B2F5]={d="l"}, + [0x1B2F6]={d="l"}, + [0x1B2F7]={d="l"}, + [0x1B2F8]={d="l"}, + [0x1B2F9]={d="l"}, + [0x1B2FA]={d="l"}, + [0x1B2FB]={d="l"}, + [0x1BC00]={d="l"}, + [0x1BC01]={d="l"}, + [0x1BC02]={d="l"}, + [0x1BC03]={d="l"}, + [0x1BC04]={d="l"}, + [0x1BC05]={d="l"}, + [0x1BC06]={d="l"}, + [0x1BC07]={d="l"}, + [0x1BC08]={d="l"}, + [0x1BC09]={d="l"}, + [0x1BC0A]={d="l"}, + [0x1BC0B]={d="l"}, + [0x1BC0C]={d="l"}, + [0x1BC0D]={d="l"}, + [0x1BC0E]={d="l"}, + [0x1BC0F]={d="l"}, + [0x1BC10]={d="l"}, + [0x1BC11]={d="l"}, + [0x1BC12]={d="l"}, + [0x1BC13]={d="l"}, + [0x1BC14]={d="l"}, + [0x1BC15]={d="l"}, + [0x1BC16]={d="l"}, + [0x1BC17]={d="l"}, + [0x1BC18]={d="l"}, + [0x1BC19]={d="l"}, + [0x1BC1A]={d="l"}, + [0x1BC1B]={d="l"}, + [0x1BC1C]={d="l"}, + [0x1BC1D]={d="l"}, + [0x1BC1E]={d="l"}, + [0x1BC1F]={d="l"}, + [0x1BC20]={d="l"}, + [0x1BC21]={d="l"}, + [0x1BC22]={d="l"}, + [0x1BC23]={d="l"}, + [0x1BC24]={d="l"}, + [0x1BC25]={d="l"}, + [0x1BC26]={d="l"}, + [0x1BC27]={d="l"}, + [0x1BC28]={d="l"}, + [0x1BC29]={d="l"}, + [0x1BC2A]={d="l"}, + [0x1BC2B]={d="l"}, + [0x1BC2C]={d="l"}, + [0x1BC2D]={d="l"}, + [0x1BC2E]={d="l"}, + [0x1BC2F]={d="l"}, + [0x1BC30]={d="l"}, + [0x1BC31]={d="l"}, + [0x1BC32]={d="l"}, + [0x1BC33]={d="l"}, + [0x1BC34]={d="l"}, + [0x1BC35]={d="l"}, + [0x1BC36]={d="l"}, + [0x1BC37]={d="l"}, + [0x1BC38]={d="l"}, + [0x1BC39]={d="l"}, + [0x1BC3A]={d="l"}, + [0x1BC3B]={d="l"}, + [0x1BC3C]={d="l"}, + [0x1BC3D]={d="l"}, + [0x1BC3E]={d="l"}, + [0x1BC3F]={d="l"}, + [0x1BC40]={d="l"}, + [0x1BC41]={d="l"}, + [0x1BC42]={d="l"}, + [0x1BC43]={d="l"}, + [0x1BC44]={d="l"}, + [0x1BC45]={d="l"}, + [0x1BC46]={d="l"}, + [0x1BC47]={d="l"}, + [0x1BC48]={d="l"}, + [0x1BC49]={d="l"}, + [0x1BC4A]={d="l"}, + [0x1BC4B]={d="l"}, + [0x1BC4C]={d="l"}, + [0x1BC4D]={d="l"}, + [0x1BC4E]={d="l"}, + [0x1BC4F]={d="l"}, + [0x1BC50]={d="l"}, + [0x1BC51]={d="l"}, + [0x1BC52]={d="l"}, + [0x1BC53]={d="l"}, + [0x1BC54]={d="l"}, + [0x1BC55]={d="l"}, + [0x1BC56]={d="l"}, + [0x1BC57]={d="l"}, + [0x1BC58]={d="l"}, + [0x1BC59]={d="l"}, + [0x1BC5A]={d="l"}, + [0x1BC5B]={d="l"}, + [0x1BC5C]={d="l"}, + [0x1BC5D]={d="l"}, + [0x1BC5E]={d="l"}, + [0x1BC5F]={d="l"}, + [0x1BC60]={d="l"}, + [0x1BC61]={d="l"}, + [0x1BC62]={d="l"}, + [0x1BC63]={d="l"}, + [0x1BC64]={d="l"}, + [0x1BC65]={d="l"}, + [0x1BC66]={d="l"}, + [0x1BC67]={d="l"}, + [0x1BC68]={d="l"}, + [0x1BC69]={d="l"}, + [0x1BC6A]={d="l"}, + [0x1BC70]={d="l"}, + [0x1BC71]={d="l"}, + [0x1BC72]={d="l"}, + [0x1BC73]={d="l"}, + [0x1BC74]={d="l"}, + [0x1BC75]={d="l"}, + [0x1BC76]={d="l"}, + [0x1BC77]={d="l"}, + [0x1BC78]={d="l"}, + [0x1BC79]={d="l"}, + [0x1BC7A]={d="l"}, + [0x1BC7B]={d="l"}, + [0x1BC7C]={d="l"}, + [0x1BC80]={d="l"}, + [0x1BC81]={d="l"}, + [0x1BC82]={d="l"}, + [0x1BC83]={d="l"}, + [0x1BC84]={d="l"}, + [0x1BC85]={d="l"}, + [0x1BC86]={d="l"}, + [0x1BC87]={d="l"}, + [0x1BC88]={d="l"}, + [0x1BC90]={d="l"}, + [0x1BC91]={d="l"}, + [0x1BC92]={d="l"}, + [0x1BC93]={d="l"}, + [0x1BC94]={d="l"}, + [0x1BC95]={d="l"}, + [0x1BC96]={d="l"}, + [0x1BC97]={d="l"}, + [0x1BC98]={d="l"}, + [0x1BC99]={d="l"}, + [0x1BC9C]={d="l"}, + [0x1BC9D]={d="nsm"}, + [0x1BC9E]={d="nsm"}, + [0x1BC9F]={d="l"}, + [0x1BCA0]={d="bn"}, + [0x1BCA1]={d="bn"}, + [0x1BCA2]={d="bn"}, + [0x1BCA3]={d="bn"}, + [0x1CF00]={d="nsm"}, + [0x1CF01]={d="nsm"}, + [0x1CF02]={d="nsm"}, + [0x1CF03]={d="nsm"}, + [0x1CF04]={d="nsm"}, + [0x1CF05]={d="nsm"}, + [0x1CF06]={d="nsm"}, + [0x1CF07]={d="nsm"}, + [0x1CF08]={d="nsm"}, + [0x1CF09]={d="nsm"}, + [0x1CF0A]={d="nsm"}, + [0x1CF0B]={d="nsm"}, + [0x1CF0C]={d="nsm"}, + [0x1CF0D]={d="nsm"}, + [0x1CF0E]={d="nsm"}, + [0x1CF0F]={d="nsm"}, + [0x1CF10]={d="nsm"}, + [0x1CF11]={d="nsm"}, + [0x1CF12]={d="nsm"}, + [0x1CF13]={d="nsm"}, + [0x1CF14]={d="nsm"}, + [0x1CF15]={d="nsm"}, + [0x1CF16]={d="nsm"}, + [0x1CF17]={d="nsm"}, + [0x1CF18]={d="nsm"}, + [0x1CF19]={d="nsm"}, + [0x1CF1A]={d="nsm"}, + [0x1CF1B]={d="nsm"}, + [0x1CF1C]={d="nsm"}, + [0x1CF1D]={d="nsm"}, + [0x1CF1E]={d="nsm"}, + [0x1CF1F]={d="nsm"}, + [0x1CF20]={d="nsm"}, + [0x1CF21]={d="nsm"}, + [0x1CF22]={d="nsm"}, + [0x1CF23]={d="nsm"}, + [0x1CF24]={d="nsm"}, + [0x1CF25]={d="nsm"}, + [0x1CF26]={d="nsm"}, + [0x1CF27]={d="nsm"}, + [0x1CF28]={d="nsm"}, + [0x1CF29]={d="nsm"}, + [0x1CF2A]={d="nsm"}, + [0x1CF2B]={d="nsm"}, + [0x1CF2C]={d="nsm"}, + [0x1CF2D]={d="nsm"}, + [0x1CF30]={d="nsm"}, + [0x1CF31]={d="nsm"}, + [0x1CF32]={d="nsm"}, + [0x1CF33]={d="nsm"}, + [0x1CF34]={d="nsm"}, + [0x1CF35]={d="nsm"}, + [0x1CF36]={d="nsm"}, + [0x1CF37]={d="nsm"}, + [0x1CF38]={d="nsm"}, + [0x1CF39]={d="nsm"}, + [0x1CF3A]={d="nsm"}, + [0x1CF3B]={d="nsm"}, + [0x1CF3C]={d="nsm"}, + [0x1CF3D]={d="nsm"}, + [0x1CF3E]={d="nsm"}, + [0x1CF3F]={d="nsm"}, + [0x1CF40]={d="nsm"}, + [0x1CF41]={d="nsm"}, + [0x1CF42]={d="nsm"}, + [0x1CF43]={d="nsm"}, + [0x1CF44]={d="nsm"}, + [0x1CF45]={d="nsm"}, + [0x1CF46]={d="nsm"}, + [0x1CF50]={d="l"}, + [0x1CF51]={d="l"}, + [0x1CF52]={d="l"}, + [0x1CF53]={d="l"}, + [0x1CF54]={d="l"}, + [0x1CF55]={d="l"}, + [0x1CF56]={d="l"}, + [0x1CF57]={d="l"}, + [0x1CF58]={d="l"}, + [0x1CF59]={d="l"}, + [0x1CF5A]={d="l"}, + [0x1CF5B]={d="l"}, + [0x1CF5C]={d="l"}, + [0x1CF5D]={d="l"}, + [0x1CF5E]={d="l"}, + [0x1CF5F]={d="l"}, + [0x1CF60]={d="l"}, + [0x1CF61]={d="l"}, + [0x1CF62]={d="l"}, + [0x1CF63]={d="l"}, + [0x1CF64]={d="l"}, + [0x1CF65]={d="l"}, + [0x1CF66]={d="l"}, + [0x1CF67]={d="l"}, + [0x1CF68]={d="l"}, + [0x1CF69]={d="l"}, + [0x1CF6A]={d="l"}, + [0x1CF6B]={d="l"}, + [0x1CF6C]={d="l"}, + [0x1CF6D]={d="l"}, + [0x1CF6E]={d="l"}, + [0x1CF6F]={d="l"}, + [0x1CF70]={d="l"}, + [0x1CF71]={d="l"}, + [0x1CF72]={d="l"}, + [0x1CF73]={d="l"}, + [0x1CF74]={d="l"}, + [0x1CF75]={d="l"}, + [0x1CF76]={d="l"}, + [0x1CF77]={d="l"}, + [0x1CF78]={d="l"}, + [0x1CF79]={d="l"}, + [0x1CF7A]={d="l"}, + [0x1CF7B]={d="l"}, + [0x1CF7C]={d="l"}, + [0x1CF7D]={d="l"}, + [0x1CF7E]={d="l"}, + [0x1CF7F]={d="l"}, + [0x1CF80]={d="l"}, + [0x1CF81]={d="l"}, + [0x1CF82]={d="l"}, + [0x1CF83]={d="l"}, + [0x1CF84]={d="l"}, + [0x1CF85]={d="l"}, + [0x1CF86]={d="l"}, + [0x1CF87]={d="l"}, + [0x1CF88]={d="l"}, + [0x1CF89]={d="l"}, + [0x1CF8A]={d="l"}, + [0x1CF8B]={d="l"}, + [0x1CF8C]={d="l"}, + [0x1CF8D]={d="l"}, + [0x1CF8E]={d="l"}, + [0x1CF8F]={d="l"}, + [0x1CF90]={d="l"}, + [0x1CF91]={d="l"}, + [0x1CF92]={d="l"}, + [0x1CF93]={d="l"}, + [0x1CF94]={d="l"}, + [0x1CF95]={d="l"}, + [0x1CF96]={d="l"}, + [0x1CF97]={d="l"}, + [0x1CF98]={d="l"}, + [0x1CF99]={d="l"}, + [0x1CF9A]={d="l"}, + [0x1CF9B]={d="l"}, + [0x1CF9C]={d="l"}, + [0x1CF9D]={d="l"}, + [0x1CF9E]={d="l"}, + [0x1CF9F]={d="l"}, + [0x1CFA0]={d="l"}, + [0x1CFA1]={d="l"}, + [0x1CFA2]={d="l"}, + [0x1CFA3]={d="l"}, + [0x1CFA4]={d="l"}, + [0x1CFA5]={d="l"}, + [0x1CFA6]={d="l"}, + [0x1CFA7]={d="l"}, + [0x1CFA8]={d="l"}, + [0x1CFA9]={d="l"}, + [0x1CFAA]={d="l"}, + [0x1CFAB]={d="l"}, + [0x1CFAC]={d="l"}, + [0x1CFAD]={d="l"}, + [0x1CFAE]={d="l"}, + [0x1CFAF]={d="l"}, + [0x1CFB0]={d="l"}, + [0x1CFB1]={d="l"}, + [0x1CFB2]={d="l"}, + [0x1CFB3]={d="l"}, + [0x1CFB4]={d="l"}, + [0x1CFB5]={d="l"}, + [0x1CFB6]={d="l"}, + [0x1CFB7]={d="l"}, + [0x1CFB8]={d="l"}, + [0x1CFB9]={d="l"}, + [0x1CFBA]={d="l"}, + [0x1CFBB]={d="l"}, + [0x1CFBC]={d="l"}, + [0x1CFBD]={d="l"}, + [0x1CFBE]={d="l"}, + [0x1CFBF]={d="l"}, + [0x1CFC0]={d="l"}, + [0x1CFC1]={d="l"}, + [0x1CFC2]={d="l"}, + [0x1CFC3]={d="l"}, + [0x1D000]={d="l"}, + [0x1D001]={d="l"}, + [0x1D002]={d="l"}, + [0x1D003]={d="l"}, + [0x1D004]={d="l"}, + [0x1D005]={d="l"}, + [0x1D006]={d="l"}, + [0x1D007]={d="l"}, + [0x1D008]={d="l"}, + [0x1D009]={d="l"}, + [0x1D00A]={d="l"}, + [0x1D00B]={d="l"}, + [0x1D00C]={d="l"}, + [0x1D00D]={d="l"}, + [0x1D00E]={d="l"}, + [0x1D00F]={d="l"}, + [0x1D010]={d="l"}, + [0x1D011]={d="l"}, + [0x1D012]={d="l"}, + [0x1D013]={d="l"}, + [0x1D014]={d="l"}, + [0x1D015]={d="l"}, + [0x1D016]={d="l"}, + [0x1D017]={d="l"}, + [0x1D018]={d="l"}, + [0x1D019]={d="l"}, + [0x1D01A]={d="l"}, + [0x1D01B]={d="l"}, + [0x1D01C]={d="l"}, + [0x1D01D]={d="l"}, + [0x1D01E]={d="l"}, + [0x1D01F]={d="l"}, + [0x1D020]={d="l"}, + [0x1D021]={d="l"}, + [0x1D022]={d="l"}, + [0x1D023]={d="l"}, + [0x1D024]={d="l"}, + [0x1D025]={d="l"}, + [0x1D026]={d="l"}, + [0x1D027]={d="l"}, + [0x1D028]={d="l"}, + [0x1D029]={d="l"}, + [0x1D02A]={d="l"}, + [0x1D02B]={d="l"}, + [0x1D02C]={d="l"}, + [0x1D02D]={d="l"}, + [0x1D02E]={d="l"}, + [0x1D02F]={d="l"}, + [0x1D030]={d="l"}, + [0x1D031]={d="l"}, + [0x1D032]={d="l"}, + [0x1D033]={d="l"}, + [0x1D034]={d="l"}, + [0x1D035]={d="l"}, + [0x1D036]={d="l"}, + [0x1D037]={d="l"}, + [0x1D038]={d="l"}, + [0x1D039]={d="l"}, + [0x1D03A]={d="l"}, + [0x1D03B]={d="l"}, + [0x1D03C]={d="l"}, + [0x1D03D]={d="l"}, + [0x1D03E]={d="l"}, + [0x1D03F]={d="l"}, + [0x1D040]={d="l"}, + [0x1D041]={d="l"}, + [0x1D042]={d="l"}, + [0x1D043]={d="l"}, + [0x1D044]={d="l"}, + [0x1D045]={d="l"}, + [0x1D046]={d="l"}, + [0x1D047]={d="l"}, + [0x1D048]={d="l"}, + [0x1D049]={d="l"}, + [0x1D04A]={d="l"}, + [0x1D04B]={d="l"}, + [0x1D04C]={d="l"}, + [0x1D04D]={d="l"}, + [0x1D04E]={d="l"}, + [0x1D04F]={d="l"}, + [0x1D050]={d="l"}, + [0x1D051]={d="l"}, + [0x1D052]={d="l"}, + [0x1D053]={d="l"}, + [0x1D054]={d="l"}, + [0x1D055]={d="l"}, + [0x1D056]={d="l"}, + [0x1D057]={d="l"}, + [0x1D058]={d="l"}, + [0x1D059]={d="l"}, + [0x1D05A]={d="l"}, + [0x1D05B]={d="l"}, + [0x1D05C]={d="l"}, + [0x1D05D]={d="l"}, + [0x1D05E]={d="l"}, + [0x1D05F]={d="l"}, + [0x1D060]={d="l"}, + [0x1D061]={d="l"}, + [0x1D062]={d="l"}, + [0x1D063]={d="l"}, + [0x1D064]={d="l"}, + [0x1D065]={d="l"}, + [0x1D066]={d="l"}, + [0x1D067]={d="l"}, + [0x1D068]={d="l"}, + [0x1D069]={d="l"}, + [0x1D06A]={d="l"}, + [0x1D06B]={d="l"}, + [0x1D06C]={d="l"}, + [0x1D06D]={d="l"}, + [0x1D06E]={d="l"}, + [0x1D06F]={d="l"}, + [0x1D070]={d="l"}, + [0x1D071]={d="l"}, + [0x1D072]={d="l"}, + [0x1D073]={d="l"}, + [0x1D074]={d="l"}, + [0x1D075]={d="l"}, + [0x1D076]={d="l"}, + [0x1D077]={d="l"}, + [0x1D078]={d="l"}, + [0x1D079]={d="l"}, + [0x1D07A]={d="l"}, + [0x1D07B]={d="l"}, + [0x1D07C]={d="l"}, + [0x1D07D]={d="l"}, + [0x1D07E]={d="l"}, + [0x1D07F]={d="l"}, + [0x1D080]={d="l"}, + [0x1D081]={d="l"}, + [0x1D082]={d="l"}, + [0x1D083]={d="l"}, + [0x1D084]={d="l"}, + [0x1D085]={d="l"}, + [0x1D086]={d="l"}, + [0x1D087]={d="l"}, + [0x1D088]={d="l"}, + [0x1D089]={d="l"}, + [0x1D08A]={d="l"}, + [0x1D08B]={d="l"}, + [0x1D08C]={d="l"}, + [0x1D08D]={d="l"}, + [0x1D08E]={d="l"}, + [0x1D08F]={d="l"}, + [0x1D090]={d="l"}, + [0x1D091]={d="l"}, + [0x1D092]={d="l"}, + [0x1D093]={d="l"}, + [0x1D094]={d="l"}, + [0x1D095]={d="l"}, + [0x1D096]={d="l"}, + [0x1D097]={d="l"}, + [0x1D098]={d="l"}, + [0x1D099]={d="l"}, + [0x1D09A]={d="l"}, + [0x1D09B]={d="l"}, + [0x1D09C]={d="l"}, + [0x1D09D]={d="l"}, + [0x1D09E]={d="l"}, + [0x1D09F]={d="l"}, + [0x1D0A0]={d="l"}, + [0x1D0A1]={d="l"}, + [0x1D0A2]={d="l"}, + [0x1D0A3]={d="l"}, + [0x1D0A4]={d="l"}, + [0x1D0A5]={d="l"}, + [0x1D0A6]={d="l"}, + [0x1D0A7]={d="l"}, + [0x1D0A8]={d="l"}, + [0x1D0A9]={d="l"}, + [0x1D0AA]={d="l"}, + [0x1D0AB]={d="l"}, + [0x1D0AC]={d="l"}, + [0x1D0AD]={d="l"}, + [0x1D0AE]={d="l"}, + [0x1D0AF]={d="l"}, + [0x1D0B0]={d="l"}, + [0x1D0B1]={d="l"}, + [0x1D0B2]={d="l"}, + [0x1D0B3]={d="l"}, + [0x1D0B4]={d="l"}, + [0x1D0B5]={d="l"}, + [0x1D0B6]={d="l"}, + [0x1D0B7]={d="l"}, + [0x1D0B8]={d="l"}, + [0x1D0B9]={d="l"}, + [0x1D0BA]={d="l"}, + [0x1D0BB]={d="l"}, + [0x1D0BC]={d="l"}, + [0x1D0BD]={d="l"}, + [0x1D0BE]={d="l"}, + [0x1D0BF]={d="l"}, + [0x1D0C0]={d="l"}, + [0x1D0C1]={d="l"}, + [0x1D0C2]={d="l"}, + [0x1D0C3]={d="l"}, + [0x1D0C4]={d="l"}, + [0x1D0C5]={d="l"}, + [0x1D0C6]={d="l"}, + [0x1D0C7]={d="l"}, + [0x1D0C8]={d="l"}, + [0x1D0C9]={d="l"}, + [0x1D0CA]={d="l"}, + [0x1D0CB]={d="l"}, + [0x1D0CC]={d="l"}, + [0x1D0CD]={d="l"}, + [0x1D0CE]={d="l"}, + [0x1D0CF]={d="l"}, + [0x1D0D0]={d="l"}, + [0x1D0D1]={d="l"}, + [0x1D0D2]={d="l"}, + [0x1D0D3]={d="l"}, + [0x1D0D4]={d="l"}, + [0x1D0D5]={d="l"}, + [0x1D0D6]={d="l"}, + [0x1D0D7]={d="l"}, + [0x1D0D8]={d="l"}, + [0x1D0D9]={d="l"}, + [0x1D0DA]={d="l"}, + [0x1D0DB]={d="l"}, + [0x1D0DC]={d="l"}, + [0x1D0DD]={d="l"}, + [0x1D0DE]={d="l"}, + [0x1D0DF]={d="l"}, + [0x1D0E0]={d="l"}, + [0x1D0E1]={d="l"}, + [0x1D0E2]={d="l"}, + [0x1D0E3]={d="l"}, + [0x1D0E4]={d="l"}, + [0x1D0E5]={d="l"}, + [0x1D0E6]={d="l"}, + [0x1D0E7]={d="l"}, + [0x1D0E8]={d="l"}, + [0x1D0E9]={d="l"}, + [0x1D0EA]={d="l"}, + [0x1D0EB]={d="l"}, + [0x1D0EC]={d="l"}, + [0x1D0ED]={d="l"}, + [0x1D0EE]={d="l"}, + [0x1D0EF]={d="l"}, + [0x1D0F0]={d="l"}, + [0x1D0F1]={d="l"}, + [0x1D0F2]={d="l"}, + [0x1D0F3]={d="l"}, + [0x1D0F4]={d="l"}, + [0x1D0F5]={d="l"}, + [0x1D100]={d="l"}, + [0x1D101]={d="l"}, + [0x1D102]={d="l"}, + [0x1D103]={d="l"}, + [0x1D104]={d="l"}, + [0x1D105]={d="l"}, + [0x1D106]={d="l"}, + [0x1D107]={d="l"}, + [0x1D108]={d="l"}, + [0x1D109]={d="l"}, + [0x1D10A]={d="l"}, + [0x1D10B]={d="l"}, + [0x1D10C]={d="l"}, + [0x1D10D]={d="l"}, + [0x1D10E]={d="l"}, + [0x1D10F]={d="l"}, + [0x1D110]={d="l"}, + [0x1D111]={d="l"}, + [0x1D112]={d="l"}, + [0x1D113]={d="l"}, + [0x1D114]={d="l"}, + [0x1D115]={d="l"}, + [0x1D116]={d="l"}, + [0x1D117]={d="l"}, + [0x1D118]={d="l"}, + [0x1D119]={d="l"}, + [0x1D11A]={d="l"}, + [0x1D11B]={d="l"}, + [0x1D11C]={d="l"}, + [0x1D11D]={d="l"}, + [0x1D11E]={d="l"}, + [0x1D11F]={d="l"}, + [0x1D120]={d="l"}, + [0x1D121]={d="l"}, + [0x1D122]={d="l"}, + [0x1D123]={d="l"}, + [0x1D124]={d="l"}, + [0x1D125]={d="l"}, + [0x1D126]={d="l"}, + [0x1D129]={d="l"}, + [0x1D12A]={d="l"}, + [0x1D12B]={d="l"}, + [0x1D12C]={d="l"}, + [0x1D12D]={d="l"}, + [0x1D12E]={d="l"}, + [0x1D12F]={d="l"}, + [0x1D130]={d="l"}, + [0x1D131]={d="l"}, + [0x1D132]={d="l"}, + [0x1D133]={d="l"}, + [0x1D134]={d="l"}, + [0x1D135]={d="l"}, + [0x1D136]={d="l"}, + [0x1D137]={d="l"}, + [0x1D138]={d="l"}, + [0x1D139]={d="l"}, + [0x1D13A]={d="l"}, + [0x1D13B]={d="l"}, + [0x1D13C]={d="l"}, + [0x1D13D]={d="l"}, + [0x1D13E]={d="l"}, + [0x1D13F]={d="l"}, + [0x1D140]={d="l"}, + [0x1D141]={d="l"}, + [0x1D142]={d="l"}, + [0x1D143]={d="l"}, + [0x1D144]={d="l"}, + [0x1D145]={d="l"}, + [0x1D146]={d="l"}, + [0x1D147]={d="l"}, + [0x1D148]={d="l"}, + [0x1D149]={d="l"}, + [0x1D14A]={d="l"}, + [0x1D14B]={d="l"}, + [0x1D14C]={d="l"}, + [0x1D14D]={d="l"}, + [0x1D14E]={d="l"}, + [0x1D14F]={d="l"}, + [0x1D150]={d="l"}, + [0x1D151]={d="l"}, + [0x1D152]={d="l"}, + [0x1D153]={d="l"}, + [0x1D154]={d="l"}, + [0x1D155]={d="l"}, + [0x1D156]={d="l"}, + [0x1D157]={d="l"}, + [0x1D158]={d="l"}, + [0x1D159]={d="l"}, + [0x1D15A]={d="l"}, + [0x1D15B]={d="l"}, + [0x1D15C]={d="l"}, + [0x1D15D]={d="l"}, + [0x1D15E]={d="l"}, + [0x1D15F]={d="l"}, + [0x1D160]={d="l"}, + [0x1D161]={d="l"}, + [0x1D162]={d="l"}, + [0x1D163]={d="l"}, + [0x1D164]={d="l"}, + [0x1D165]={d="l"}, + [0x1D166]={d="l"}, + [0x1D167]={d="nsm"}, + [0x1D168]={d="nsm"}, + [0x1D169]={d="nsm"}, + [0x1D16A]={d="l"}, + [0x1D16B]={d="l"}, + [0x1D16C]={d="l"}, + [0x1D16D]={d="l"}, + [0x1D16E]={d="l"}, + [0x1D16F]={d="l"}, + [0x1D170]={d="l"}, + [0x1D171]={d="l"}, + [0x1D172]={d="l"}, + [0x1D173]={d="bn"}, + [0x1D174]={d="bn"}, + [0x1D175]={d="bn"}, + [0x1D176]={d="bn"}, + [0x1D177]={d="bn"}, + [0x1D178]={d="bn"}, + [0x1D179]={d="bn"}, + [0x1D17A]={d="bn"}, + [0x1D17B]={d="nsm"}, + [0x1D17C]={d="nsm"}, + [0x1D17D]={d="nsm"}, + [0x1D17E]={d="nsm"}, + [0x1D17F]={d="nsm"}, + [0x1D180]={d="nsm"}, + [0x1D181]={d="nsm"}, + [0x1D182]={d="nsm"}, + [0x1D183]={d="l"}, + [0x1D184]={d="l"}, + [0x1D185]={d="nsm"}, + [0x1D186]={d="nsm"}, + [0x1D187]={d="nsm"}, + [0x1D188]={d="nsm"}, + [0x1D189]={d="nsm"}, + [0x1D18A]={d="nsm"}, + [0x1D18B]={d="nsm"}, + [0x1D18C]={d="l"}, + [0x1D18D]={d="l"}, + [0x1D18E]={d="l"}, + [0x1D18F]={d="l"}, + [0x1D190]={d="l"}, + [0x1D191]={d="l"}, + [0x1D192]={d="l"}, + [0x1D193]={d="l"}, + [0x1D194]={d="l"}, + [0x1D195]={d="l"}, + [0x1D196]={d="l"}, + [0x1D197]={d="l"}, + [0x1D198]={d="l"}, + [0x1D199]={d="l"}, + [0x1D19A]={d="l"}, + [0x1D19B]={d="l"}, + [0x1D19C]={d="l"}, + [0x1D19D]={d="l"}, + [0x1D19E]={d="l"}, + [0x1D19F]={d="l"}, + [0x1D1A0]={d="l"}, + [0x1D1A1]={d="l"}, + [0x1D1A2]={d="l"}, + [0x1D1A3]={d="l"}, + [0x1D1A4]={d="l"}, + [0x1D1A5]={d="l"}, + [0x1D1A6]={d="l"}, + [0x1D1A7]={d="l"}, + [0x1D1A8]={d="l"}, + [0x1D1A9]={d="l"}, + [0x1D1AA]={d="nsm"}, + [0x1D1AB]={d="nsm"}, + [0x1D1AC]={d="nsm"}, + [0x1D1AD]={d="nsm"}, + [0x1D1AE]={d="l"}, + [0x1D1AF]={d="l"}, + [0x1D1B0]={d="l"}, + [0x1D1B1]={d="l"}, + [0x1D1B2]={d="l"}, + [0x1D1B3]={d="l"}, + [0x1D1B4]={d="l"}, + [0x1D1B5]={d="l"}, + [0x1D1B6]={d="l"}, + [0x1D1B7]={d="l"}, + [0x1D1B8]={d="l"}, + [0x1D1B9]={d="l"}, + [0x1D1BA]={d="l"}, + [0x1D1BB]={d="l"}, + [0x1D1BC]={d="l"}, + [0x1D1BD]={d="l"}, + [0x1D1BE]={d="l"}, + [0x1D1BF]={d="l"}, + [0x1D1C0]={d="l"}, + [0x1D1C1]={d="l"}, + [0x1D1C2]={d="l"}, + [0x1D1C3]={d="l"}, + [0x1D1C4]={d="l"}, + [0x1D1C5]={d="l"}, + [0x1D1C6]={d="l"}, + [0x1D1C7]={d="l"}, + [0x1D1C8]={d="l"}, + [0x1D1C9]={d="l"}, + [0x1D1CA]={d="l"}, + [0x1D1CB]={d="l"}, + [0x1D1CC]={d="l"}, + [0x1D1CD]={d="l"}, + [0x1D1CE]={d="l"}, + [0x1D1CF]={d="l"}, + [0x1D1D0]={d="l"}, + [0x1D1D1]={d="l"}, + [0x1D1D2]={d="l"}, + [0x1D1D3]={d="l"}, + [0x1D1D4]={d="l"}, + [0x1D1D5]={d="l"}, + [0x1D1D6]={d="l"}, + [0x1D1D7]={d="l"}, + [0x1D1D8]={d="l"}, + [0x1D1D9]={d="l"}, + [0x1D1DA]={d="l"}, + [0x1D1DB]={d="l"}, + [0x1D1DC]={d="l"}, + [0x1D1DD]={d="l"}, + [0x1D1DE]={d="l"}, + [0x1D1DF]={d="l"}, + [0x1D1E0]={d="l"}, + [0x1D1E1]={d="l"}, + [0x1D1E2]={d="l"}, + [0x1D1E3]={d="l"}, + [0x1D1E4]={d="l"}, + [0x1D1E5]={d="l"}, + [0x1D1E6]={d="l"}, + [0x1D1E7]={d="l"}, + [0x1D1E8]={d="l"}, + [0x1D1E9]={d="on"}, + [0x1D1EA]={d="on"}, + [0x1D200]={d="on"}, + [0x1D201]={d="on"}, + [0x1D202]={d="on"}, + [0x1D203]={d="on"}, + [0x1D204]={d="on"}, + [0x1D205]={d="on"}, + [0x1D206]={d="on"}, + [0x1D207]={d="on"}, + [0x1D208]={d="on"}, + [0x1D209]={d="on"}, + [0x1D20A]={d="on"}, + [0x1D20B]={d="on"}, + [0x1D20C]={d="on"}, + [0x1D20D]={d="on"}, + [0x1D20E]={d="on"}, + [0x1D20F]={d="on"}, + [0x1D210]={d="on"}, + [0x1D211]={d="on"}, + [0x1D212]={d="on"}, + [0x1D213]={d="on"}, + [0x1D214]={d="on"}, + [0x1D215]={d="on"}, + [0x1D216]={d="on"}, + [0x1D217]={d="on"}, + [0x1D218]={d="on"}, + [0x1D219]={d="on"}, + [0x1D21A]={d="on"}, + [0x1D21B]={d="on"}, + [0x1D21C]={d="on"}, + [0x1D21D]={d="on"}, + [0x1D21E]={d="on"}, + [0x1D21F]={d="on"}, + [0x1D220]={d="on"}, + [0x1D221]={d="on"}, + [0x1D222]={d="on"}, + [0x1D223]={d="on"}, + [0x1D224]={d="on"}, + [0x1D225]={d="on"}, + [0x1D226]={d="on"}, + [0x1D227]={d="on"}, + [0x1D228]={d="on"}, + [0x1D229]={d="on"}, + [0x1D22A]={d="on"}, + [0x1D22B]={d="on"}, + [0x1D22C]={d="on"}, + [0x1D22D]={d="on"}, + [0x1D22E]={d="on"}, + [0x1D22F]={d="on"}, + [0x1D230]={d="on"}, + [0x1D231]={d="on"}, + [0x1D232]={d="on"}, + [0x1D233]={d="on"}, + [0x1D234]={d="on"}, + [0x1D235]={d="on"}, + [0x1D236]={d="on"}, + [0x1D237]={d="on"}, + [0x1D238]={d="on"}, + [0x1D239]={d="on"}, + [0x1D23A]={d="on"}, + [0x1D23B]={d="on"}, + [0x1D23C]={d="on"}, + [0x1D23D]={d="on"}, + [0x1D23E]={d="on"}, + [0x1D23F]={d="on"}, + [0x1D240]={d="on"}, + [0x1D241]={d="on"}, + [0x1D242]={d="nsm"}, + [0x1D243]={d="nsm"}, + [0x1D244]={d="nsm"}, + [0x1D245]={d="on"}, + [0x1D2C0]={d="l"}, + [0x1D2C1]={d="l"}, + [0x1D2C2]={d="l"}, + [0x1D2C3]={d="l"}, + [0x1D2C4]={d="l"}, + [0x1D2C5]={d="l"}, + [0x1D2C6]={d="l"}, + [0x1D2C7]={d="l"}, + [0x1D2C8]={d="l"}, + [0x1D2C9]={d="l"}, + [0x1D2CA]={d="l"}, + [0x1D2CB]={d="l"}, + [0x1D2CC]={d="l"}, + [0x1D2CD]={d="l"}, + [0x1D2CE]={d="l"}, + [0x1D2CF]={d="l"}, + [0x1D2D0]={d="l"}, + [0x1D2D1]={d="l"}, + [0x1D2D2]={d="l"}, + [0x1D2D3]={d="l"}, + [0x1D2E0]={d="l"}, + [0x1D2E1]={d="l"}, + [0x1D2E2]={d="l"}, + [0x1D2E3]={d="l"}, + [0x1D2E4]={d="l"}, + [0x1D2E5]={d="l"}, + [0x1D2E6]={d="l"}, + [0x1D2E7]={d="l"}, + [0x1D2E8]={d="l"}, + [0x1D2E9]={d="l"}, + [0x1D2EA]={d="l"}, + [0x1D2EB]={d="l"}, + [0x1D2EC]={d="l"}, + [0x1D2ED]={d="l"}, + [0x1D2EE]={d="l"}, + [0x1D2EF]={d="l"}, + [0x1D2F0]={d="l"}, + [0x1D2F1]={d="l"}, + [0x1D2F2]={d="l"}, + [0x1D2F3]={d="l"}, + [0x1D300]={d="on"}, + [0x1D301]={d="on"}, + [0x1D302]={d="on"}, + [0x1D303]={d="on"}, + [0x1D304]={d="on"}, + [0x1D305]={d="on"}, + [0x1D306]={d="on"}, + [0x1D307]={d="on"}, + [0x1D308]={d="on"}, + [0x1D309]={d="on"}, + [0x1D30A]={d="on"}, + [0x1D30B]={d="on"}, + [0x1D30C]={d="on"}, + [0x1D30D]={d="on"}, + [0x1D30E]={d="on"}, + [0x1D30F]={d="on"}, + [0x1D310]={d="on"}, + [0x1D311]={d="on"}, + [0x1D312]={d="on"}, + [0x1D313]={d="on"}, + [0x1D314]={d="on"}, + [0x1D315]={d="on"}, + [0x1D316]={d="on"}, + [0x1D317]={d="on"}, + [0x1D318]={d="on"}, + [0x1D319]={d="on"}, + [0x1D31A]={d="on"}, + [0x1D31B]={d="on"}, + [0x1D31C]={d="on"}, + [0x1D31D]={d="on"}, + [0x1D31E]={d="on"}, + [0x1D31F]={d="on"}, + [0x1D320]={d="on"}, + [0x1D321]={d="on"}, + [0x1D322]={d="on"}, + [0x1D323]={d="on"}, + [0x1D324]={d="on"}, + [0x1D325]={d="on"}, + [0x1D326]={d="on"}, + [0x1D327]={d="on"}, + [0x1D328]={d="on"}, + [0x1D329]={d="on"}, + [0x1D32A]={d="on"}, + [0x1D32B]={d="on"}, + [0x1D32C]={d="on"}, + [0x1D32D]={d="on"}, + [0x1D32E]={d="on"}, + [0x1D32F]={d="on"}, + [0x1D330]={d="on"}, + [0x1D331]={d="on"}, + [0x1D332]={d="on"}, + [0x1D333]={d="on"}, + [0x1D334]={d="on"}, + [0x1D335]={d="on"}, + [0x1D336]={d="on"}, + [0x1D337]={d="on"}, + [0x1D338]={d="on"}, + [0x1D339]={d="on"}, + [0x1D33A]={d="on"}, + [0x1D33B]={d="on"}, + [0x1D33C]={d="on"}, + [0x1D33D]={d="on"}, + [0x1D33E]={d="on"}, + [0x1D33F]={d="on"}, + [0x1D340]={d="on"}, + [0x1D341]={d="on"}, + [0x1D342]={d="on"}, + [0x1D343]={d="on"}, + [0x1D344]={d="on"}, + [0x1D345]={d="on"}, + [0x1D346]={d="on"}, + [0x1D347]={d="on"}, + [0x1D348]={d="on"}, + [0x1D349]={d="on"}, + [0x1D34A]={d="on"}, + [0x1D34B]={d="on"}, + [0x1D34C]={d="on"}, + [0x1D34D]={d="on"}, + [0x1D34E]={d="on"}, + [0x1D34F]={d="on"}, + [0x1D350]={d="on"}, + [0x1D351]={d="on"}, + [0x1D352]={d="on"}, + [0x1D353]={d="on"}, + [0x1D354]={d="on"}, + [0x1D355]={d="on"}, + [0x1D356]={d="on"}, + [0x1D360]={d="l"}, + [0x1D361]={d="l"}, + [0x1D362]={d="l"}, + [0x1D363]={d="l"}, + [0x1D364]={d="l"}, + [0x1D365]={d="l"}, + [0x1D366]={d="l"}, + [0x1D367]={d="l"}, + [0x1D368]={d="l"}, + [0x1D369]={d="l"}, + [0x1D36A]={d="l"}, + [0x1D36B]={d="l"}, + [0x1D36C]={d="l"}, + [0x1D36D]={d="l"}, + [0x1D36E]={d="l"}, + [0x1D36F]={d="l"}, + [0x1D370]={d="l"}, + [0x1D371]={d="l"}, + [0x1D372]={d="l"}, + [0x1D373]={d="l"}, + [0x1D374]={d="l"}, + [0x1D375]={d="l"}, + [0x1D376]={d="l"}, + [0x1D377]={d="l"}, + [0x1D378]={d="l"}, + [0x1D400]={d="l"}, + [0x1D401]={d="l"}, + [0x1D402]={d="l"}, + [0x1D403]={d="l"}, + [0x1D404]={d="l"}, + [0x1D405]={d="l"}, + [0x1D406]={d="l"}, + [0x1D407]={d="l"}, + [0x1D408]={d="l"}, + [0x1D409]={d="l"}, + [0x1D40A]={d="l"}, + [0x1D40B]={d="l"}, + [0x1D40C]={d="l"}, + [0x1D40D]={d="l"}, + [0x1D40E]={d="l"}, + [0x1D40F]={d="l"}, + [0x1D410]={d="l"}, + [0x1D411]={d="l"}, + [0x1D412]={d="l"}, + [0x1D413]={d="l"}, + [0x1D414]={d="l"}, + [0x1D415]={d="l"}, + [0x1D416]={d="l"}, + [0x1D417]={d="l"}, + [0x1D418]={d="l"}, + [0x1D419]={d="l"}, + [0x1D41A]={d="l"}, + [0x1D41B]={d="l"}, + [0x1D41C]={d="l"}, + [0x1D41D]={d="l"}, + [0x1D41E]={d="l"}, + [0x1D41F]={d="l"}, + [0x1D420]={d="l"}, + [0x1D421]={d="l"}, + [0x1D422]={d="l"}, + [0x1D423]={d="l"}, + [0x1D424]={d="l"}, + [0x1D425]={d="l"}, + [0x1D426]={d="l"}, + [0x1D427]={d="l"}, + [0x1D428]={d="l"}, + [0x1D429]={d="l"}, + [0x1D42A]={d="l"}, + [0x1D42B]={d="l"}, + [0x1D42C]={d="l"}, + [0x1D42D]={d="l"}, + [0x1D42E]={d="l"}, + [0x1D42F]={d="l"}, + [0x1D430]={d="l"}, + [0x1D431]={d="l"}, + [0x1D432]={d="l"}, + [0x1D433]={d="l"}, + [0x1D434]={d="l"}, + [0x1D435]={d="l"}, + [0x1D436]={d="l"}, + [0x1D437]={d="l"}, + [0x1D438]={d="l"}, + [0x1D439]={d="l"}, + [0x1D43A]={d="l"}, + [0x1D43B]={d="l"}, + [0x1D43C]={d="l"}, + [0x1D43D]={d="l"}, + [0x1D43E]={d="l"}, + [0x1D43F]={d="l"}, + [0x1D440]={d="l"}, + [0x1D441]={d="l"}, + [0x1D442]={d="l"}, + [0x1D443]={d="l"}, + [0x1D444]={d="l"}, + [0x1D445]={d="l"}, + [0x1D446]={d="l"}, + [0x1D447]={d="l"}, + [0x1D448]={d="l"}, + [0x1D449]={d="l"}, + [0x1D44A]={d="l"}, + [0x1D44B]={d="l"}, + [0x1D44C]={d="l"}, + [0x1D44D]={d="l"}, + [0x1D44E]={d="l"}, + [0x1D44F]={d="l"}, + [0x1D450]={d="l"}, + [0x1D451]={d="l"}, + [0x1D452]={d="l"}, + [0x1D453]={d="l"}, + [0x1D454]={d="l"}, + [0x1D456]={d="l"}, + [0x1D457]={d="l"}, + [0x1D458]={d="l"}, + [0x1D459]={d="l"}, + [0x1D45A]={d="l"}, + [0x1D45B]={d="l"}, + [0x1D45C]={d="l"}, + [0x1D45D]={d="l"}, + [0x1D45E]={d="l"}, + [0x1D45F]={d="l"}, + [0x1D460]={d="l"}, + [0x1D461]={d="l"}, + [0x1D462]={d="l"}, + [0x1D463]={d="l"}, + [0x1D464]={d="l"}, + [0x1D465]={d="l"}, + [0x1D466]={d="l"}, + [0x1D467]={d="l"}, + [0x1D468]={d="l"}, + [0x1D469]={d="l"}, + [0x1D46A]={d="l"}, + [0x1D46B]={d="l"}, + [0x1D46C]={d="l"}, + [0x1D46D]={d="l"}, + [0x1D46E]={d="l"}, + [0x1D46F]={d="l"}, + [0x1D470]={d="l"}, + [0x1D471]={d="l"}, + [0x1D472]={d="l"}, + [0x1D473]={d="l"}, + [0x1D474]={d="l"}, + [0x1D475]={d="l"}, + [0x1D476]={d="l"}, + [0x1D477]={d="l"}, + [0x1D478]={d="l"}, + [0x1D479]={d="l"}, + [0x1D47A]={d="l"}, + [0x1D47B]={d="l"}, + [0x1D47C]={d="l"}, + [0x1D47D]={d="l"}, + [0x1D47E]={d="l"}, + [0x1D47F]={d="l"}, + [0x1D480]={d="l"}, + [0x1D481]={d="l"}, + [0x1D482]={d="l"}, + [0x1D483]={d="l"}, + [0x1D484]={d="l"}, + [0x1D485]={d="l"}, + [0x1D486]={d="l"}, + [0x1D487]={d="l"}, + [0x1D488]={d="l"}, + [0x1D489]={d="l"}, + [0x1D48A]={d="l"}, + [0x1D48B]={d="l"}, + [0x1D48C]={d="l"}, + [0x1D48D]={d="l"}, + [0x1D48E]={d="l"}, + [0x1D48F]={d="l"}, + [0x1D490]={d="l"}, + [0x1D491]={d="l"}, + [0x1D492]={d="l"}, + [0x1D493]={d="l"}, + [0x1D494]={d="l"}, + [0x1D495]={d="l"}, + [0x1D496]={d="l"}, + [0x1D497]={d="l"}, + [0x1D498]={d="l"}, + [0x1D499]={d="l"}, + [0x1D49A]={d="l"}, + [0x1D49B]={d="l"}, + [0x1D49C]={d="l"}, + [0x1D49E]={d="l"}, + [0x1D49F]={d="l"}, + [0x1D4A2]={d="l"}, + [0x1D4A5]={d="l"}, + [0x1D4A6]={d="l"}, + [0x1D4A9]={d="l"}, + [0x1D4AA]={d="l"}, + [0x1D4AB]={d="l"}, + [0x1D4AC]={d="l"}, + [0x1D4AE]={d="l"}, + [0x1D4AF]={d="l"}, + [0x1D4B0]={d="l"}, + [0x1D4B1]={d="l"}, + [0x1D4B2]={d="l"}, + [0x1D4B3]={d="l"}, + [0x1D4B4]={d="l"}, + [0x1D4B5]={d="l"}, + [0x1D4B6]={d="l"}, + [0x1D4B7]={d="l"}, + [0x1D4B8]={d="l"}, + [0x1D4B9]={d="l"}, + [0x1D4BB]={d="l"}, + [0x1D4BD]={d="l"}, + [0x1D4BE]={d="l"}, + [0x1D4BF]={d="l"}, + [0x1D4C0]={d="l"}, + [0x1D4C1]={d="l"}, + [0x1D4C2]={d="l"}, + [0x1D4C3]={d="l"}, + [0x1D4C5]={d="l"}, + [0x1D4C6]={d="l"}, + [0x1D4C7]={d="l"}, + [0x1D4C8]={d="l"}, + [0x1D4C9]={d="l"}, + [0x1D4CA]={d="l"}, + [0x1D4CB]={d="l"}, + [0x1D4CC]={d="l"}, + [0x1D4CD]={d="l"}, + [0x1D4CE]={d="l"}, + [0x1D4CF]={d="l"}, + [0x1D4D0]={d="l"}, + [0x1D4D1]={d="l"}, + [0x1D4D2]={d="l"}, + [0x1D4D3]={d="l"}, + [0x1D4D4]={d="l"}, + [0x1D4D5]={d="l"}, + [0x1D4D6]={d="l"}, + [0x1D4D7]={d="l"}, + [0x1D4D8]={d="l"}, + [0x1D4D9]={d="l"}, + [0x1D4DA]={d="l"}, + [0x1D4DB]={d="l"}, + [0x1D4DC]={d="l"}, + [0x1D4DD]={d="l"}, + [0x1D4DE]={d="l"}, + [0x1D4DF]={d="l"}, + [0x1D4E0]={d="l"}, + [0x1D4E1]={d="l"}, + [0x1D4E2]={d="l"}, + [0x1D4E3]={d="l"}, + [0x1D4E4]={d="l"}, + [0x1D4E5]={d="l"}, + [0x1D4E6]={d="l"}, + [0x1D4E7]={d="l"}, + [0x1D4E8]={d="l"}, + [0x1D4E9]={d="l"}, + [0x1D4EA]={d="l"}, + [0x1D4EB]={d="l"}, + [0x1D4EC]={d="l"}, + [0x1D4ED]={d="l"}, + [0x1D4EE]={d="l"}, + [0x1D4EF]={d="l"}, + [0x1D4F0]={d="l"}, + [0x1D4F1]={d="l"}, + [0x1D4F2]={d="l"}, + [0x1D4F3]={d="l"}, + [0x1D4F4]={d="l"}, + [0x1D4F5]={d="l"}, + [0x1D4F6]={d="l"}, + [0x1D4F7]={d="l"}, + [0x1D4F8]={d="l"}, + [0x1D4F9]={d="l"}, + [0x1D4FA]={d="l"}, + [0x1D4FB]={d="l"}, + [0x1D4FC]={d="l"}, + [0x1D4FD]={d="l"}, + [0x1D4FE]={d="l"}, + [0x1D4FF]={d="l"}, + [0x1D500]={d="l"}, + [0x1D501]={d="l"}, + [0x1D502]={d="l"}, + [0x1D503]={d="l"}, + [0x1D504]={d="l"}, + [0x1D505]={d="l"}, + [0x1D507]={d="l"}, + [0x1D508]={d="l"}, + [0x1D509]={d="l"}, + [0x1D50A]={d="l"}, + [0x1D50D]={d="l"}, + [0x1D50E]={d="l"}, + [0x1D50F]={d="l"}, + [0x1D510]={d="l"}, + [0x1D511]={d="l"}, + [0x1D512]={d="l"}, + [0x1D513]={d="l"}, + [0x1D514]={d="l"}, + [0x1D516]={d="l"}, + [0x1D517]={d="l"}, + [0x1D518]={d="l"}, + [0x1D519]={d="l"}, + [0x1D51A]={d="l"}, + [0x1D51B]={d="l"}, + [0x1D51C]={d="l"}, + [0x1D51E]={d="l"}, + [0x1D51F]={d="l"}, + [0x1D520]={d="l"}, + [0x1D521]={d="l"}, + [0x1D522]={d="l"}, + [0x1D523]={d="l"}, + [0x1D524]={d="l"}, + [0x1D525]={d="l"}, + [0x1D526]={d="l"}, + [0x1D527]={d="l"}, + [0x1D528]={d="l"}, + [0x1D529]={d="l"}, + [0x1D52A]={d="l"}, + [0x1D52B]={d="l"}, + [0x1D52C]={d="l"}, + [0x1D52D]={d="l"}, + [0x1D52E]={d="l"}, + [0x1D52F]={d="l"}, + [0x1D530]={d="l"}, + [0x1D531]={d="l"}, + [0x1D532]={d="l"}, + [0x1D533]={d="l"}, + [0x1D534]={d="l"}, + [0x1D535]={d="l"}, + [0x1D536]={d="l"}, + [0x1D537]={d="l"}, + [0x1D538]={d="l"}, + [0x1D539]={d="l"}, + [0x1D53B]={d="l"}, + [0x1D53C]={d="l"}, + [0x1D53D]={d="l"}, + [0x1D53E]={d="l"}, + [0x1D540]={d="l"}, + [0x1D541]={d="l"}, + [0x1D542]={d="l"}, + [0x1D543]={d="l"}, + [0x1D544]={d="l"}, + [0x1D546]={d="l"}, + [0x1D54A]={d="l"}, + [0x1D54B]={d="l"}, + [0x1D54C]={d="l"}, + [0x1D54D]={d="l"}, + [0x1D54E]={d="l"}, + [0x1D54F]={d="l"}, + [0x1D550]={d="l"}, + [0x1D552]={d="l"}, + [0x1D553]={d="l"}, + [0x1D554]={d="l"}, + [0x1D555]={d="l"}, + [0x1D556]={d="l"}, + [0x1D557]={d="l"}, + [0x1D558]={d="l"}, + [0x1D559]={d="l"}, + [0x1D55A]={d="l"}, + [0x1D55B]={d="l"}, + [0x1D55C]={d="l"}, + [0x1D55D]={d="l"}, + [0x1D55E]={d="l"}, + [0x1D55F]={d="l"}, + [0x1D560]={d="l"}, + [0x1D561]={d="l"}, + [0x1D562]={d="l"}, + [0x1D563]={d="l"}, + [0x1D564]={d="l"}, + [0x1D565]={d="l"}, + [0x1D566]={d="l"}, + [0x1D567]={d="l"}, + [0x1D568]={d="l"}, + [0x1D569]={d="l"}, + [0x1D56A]={d="l"}, + [0x1D56B]={d="l"}, + [0x1D56C]={d="l"}, + [0x1D56D]={d="l"}, + [0x1D56E]={d="l"}, + [0x1D56F]={d="l"}, + [0x1D570]={d="l"}, + [0x1D571]={d="l"}, + [0x1D572]={d="l"}, + [0x1D573]={d="l"}, + [0x1D574]={d="l"}, + [0x1D575]={d="l"}, + [0x1D576]={d="l"}, + [0x1D577]={d="l"}, + [0x1D578]={d="l"}, + [0x1D579]={d="l"}, + [0x1D57A]={d="l"}, + [0x1D57B]={d="l"}, + [0x1D57C]={d="l"}, + [0x1D57D]={d="l"}, + [0x1D57E]={d="l"}, + [0x1D57F]={d="l"}, + [0x1D580]={d="l"}, + [0x1D581]={d="l"}, + [0x1D582]={d="l"}, + [0x1D583]={d="l"}, + [0x1D584]={d="l"}, + [0x1D585]={d="l"}, + [0x1D586]={d="l"}, + [0x1D587]={d="l"}, + [0x1D588]={d="l"}, + [0x1D589]={d="l"}, + [0x1D58A]={d="l"}, + [0x1D58B]={d="l"}, + [0x1D58C]={d="l"}, + [0x1D58D]={d="l"}, + [0x1D58E]={d="l"}, + [0x1D58F]={d="l"}, + [0x1D590]={d="l"}, + [0x1D591]={d="l"}, + [0x1D592]={d="l"}, + [0x1D593]={d="l"}, + [0x1D594]={d="l"}, + [0x1D595]={d="l"}, + [0x1D596]={d="l"}, + [0x1D597]={d="l"}, + [0x1D598]={d="l"}, + [0x1D599]={d="l"}, + [0x1D59A]={d="l"}, + [0x1D59B]={d="l"}, + [0x1D59C]={d="l"}, + [0x1D59D]={d="l"}, + [0x1D59E]={d="l"}, + [0x1D59F]={d="l"}, + [0x1D5A0]={d="l"}, + [0x1D5A1]={d="l"}, + [0x1D5A2]={d="l"}, + [0x1D5A3]={d="l"}, + [0x1D5A4]={d="l"}, + [0x1D5A5]={d="l"}, + [0x1D5A6]={d="l"}, + [0x1D5A7]={d="l"}, + [0x1D5A8]={d="l"}, + [0x1D5A9]={d="l"}, + [0x1D5AA]={d="l"}, + [0x1D5AB]={d="l"}, + [0x1D5AC]={d="l"}, + [0x1D5AD]={d="l"}, + [0x1D5AE]={d="l"}, + [0x1D5AF]={d="l"}, + [0x1D5B0]={d="l"}, + [0x1D5B1]={d="l"}, + [0x1D5B2]={d="l"}, + [0x1D5B3]={d="l"}, + [0x1D5B4]={d="l"}, + [0x1D5B5]={d="l"}, + [0x1D5B6]={d="l"}, + [0x1D5B7]={d="l"}, + [0x1D5B8]={d="l"}, + [0x1D5B9]={d="l"}, + [0x1D5BA]={d="l"}, + [0x1D5BB]={d="l"}, + [0x1D5BC]={d="l"}, + [0x1D5BD]={d="l"}, + [0x1D5BE]={d="l"}, + [0x1D5BF]={d="l"}, + [0x1D5C0]={d="l"}, + [0x1D5C1]={d="l"}, + [0x1D5C2]={d="l"}, + [0x1D5C3]={d="l"}, + [0x1D5C4]={d="l"}, + [0x1D5C5]={d="l"}, + [0x1D5C6]={d="l"}, + [0x1D5C7]={d="l"}, + [0x1D5C8]={d="l"}, + [0x1D5C9]={d="l"}, + [0x1D5CA]={d="l"}, + [0x1D5CB]={d="l"}, + [0x1D5CC]={d="l"}, + [0x1D5CD]={d="l"}, + [0x1D5CE]={d="l"}, + [0x1D5CF]={d="l"}, + [0x1D5D0]={d="l"}, + [0x1D5D1]={d="l"}, + [0x1D5D2]={d="l"}, + [0x1D5D3]={d="l"}, + [0x1D5D4]={d="l"}, + [0x1D5D5]={d="l"}, + [0x1D5D6]={d="l"}, + [0x1D5D7]={d="l"}, + [0x1D5D8]={d="l"}, + [0x1D5D9]={d="l"}, + [0x1D5DA]={d="l"}, + [0x1D5DB]={d="l"}, + [0x1D5DC]={d="l"}, + [0x1D5DD]={d="l"}, + [0x1D5DE]={d="l"}, + [0x1D5DF]={d="l"}, + [0x1D5E0]={d="l"}, + [0x1D5E1]={d="l"}, + [0x1D5E2]={d="l"}, + [0x1D5E3]={d="l"}, + [0x1D5E4]={d="l"}, + [0x1D5E5]={d="l"}, + [0x1D5E6]={d="l"}, + [0x1D5E7]={d="l"}, + [0x1D5E8]={d="l"}, + [0x1D5E9]={d="l"}, + [0x1D5EA]={d="l"}, + [0x1D5EB]={d="l"}, + [0x1D5EC]={d="l"}, + [0x1D5ED]={d="l"}, + [0x1D5EE]={d="l"}, + [0x1D5EF]={d="l"}, + [0x1D5F0]={d="l"}, + [0x1D5F1]={d="l"}, + [0x1D5F2]={d="l"}, + [0x1D5F3]={d="l"}, + [0x1D5F4]={d="l"}, + [0x1D5F5]={d="l"}, + [0x1D5F6]={d="l"}, + [0x1D5F7]={d="l"}, + [0x1D5F8]={d="l"}, + [0x1D5F9]={d="l"}, + [0x1D5FA]={d="l"}, + [0x1D5FB]={d="l"}, + [0x1D5FC]={d="l"}, + [0x1D5FD]={d="l"}, + [0x1D5FE]={d="l"}, + [0x1D5FF]={d="l"}, + [0x1D600]={d="l"}, + [0x1D601]={d="l"}, + [0x1D602]={d="l"}, + [0x1D603]={d="l"}, + [0x1D604]={d="l"}, + [0x1D605]={d="l"}, + [0x1D606]={d="l"}, + [0x1D607]={d="l"}, + [0x1D608]={d="l"}, + [0x1D609]={d="l"}, + [0x1D60A]={d="l"}, + [0x1D60B]={d="l"}, + [0x1D60C]={d="l"}, + [0x1D60D]={d="l"}, + [0x1D60E]={d="l"}, + [0x1D60F]={d="l"}, + [0x1D610]={d="l"}, + [0x1D611]={d="l"}, + [0x1D612]={d="l"}, + [0x1D613]={d="l"}, + [0x1D614]={d="l"}, + [0x1D615]={d="l"}, + [0x1D616]={d="l"}, + [0x1D617]={d="l"}, + [0x1D618]={d="l"}, + [0x1D619]={d="l"}, + [0x1D61A]={d="l"}, + [0x1D61B]={d="l"}, + [0x1D61C]={d="l"}, + [0x1D61D]={d="l"}, + [0x1D61E]={d="l"}, + [0x1D61F]={d="l"}, + [0x1D620]={d="l"}, + [0x1D621]={d="l"}, + [0x1D622]={d="l"}, + [0x1D623]={d="l"}, + [0x1D624]={d="l"}, + [0x1D625]={d="l"}, + [0x1D626]={d="l"}, + [0x1D627]={d="l"}, + [0x1D628]={d="l"}, + [0x1D629]={d="l"}, + [0x1D62A]={d="l"}, + [0x1D62B]={d="l"}, + [0x1D62C]={d="l"}, + [0x1D62D]={d="l"}, + [0x1D62E]={d="l"}, + [0x1D62F]={d="l"}, + [0x1D630]={d="l"}, + [0x1D631]={d="l"}, + [0x1D632]={d="l"}, + [0x1D633]={d="l"}, + [0x1D634]={d="l"}, + [0x1D635]={d="l"}, + [0x1D636]={d="l"}, + [0x1D637]={d="l"}, + [0x1D638]={d="l"}, + [0x1D639]={d="l"}, + [0x1D63A]={d="l"}, + [0x1D63B]={d="l"}, + [0x1D63C]={d="l"}, + [0x1D63D]={d="l"}, + [0x1D63E]={d="l"}, + [0x1D63F]={d="l"}, + [0x1D640]={d="l"}, + [0x1D641]={d="l"}, + [0x1D642]={d="l"}, + [0x1D643]={d="l"}, + [0x1D644]={d="l"}, + [0x1D645]={d="l"}, + [0x1D646]={d="l"}, + [0x1D647]={d="l"}, + [0x1D648]={d="l"}, + [0x1D649]={d="l"}, + [0x1D64A]={d="l"}, + [0x1D64B]={d="l"}, + [0x1D64C]={d="l"}, + [0x1D64D]={d="l"}, + [0x1D64E]={d="l"}, + [0x1D64F]={d="l"}, + [0x1D650]={d="l"}, + [0x1D651]={d="l"}, + [0x1D652]={d="l"}, + [0x1D653]={d="l"}, + [0x1D654]={d="l"}, + [0x1D655]={d="l"}, + [0x1D656]={d="l"}, + [0x1D657]={d="l"}, + [0x1D658]={d="l"}, + [0x1D659]={d="l"}, + [0x1D65A]={d="l"}, + [0x1D65B]={d="l"}, + [0x1D65C]={d="l"}, + [0x1D65D]={d="l"}, + [0x1D65E]={d="l"}, + [0x1D65F]={d="l"}, + [0x1D660]={d="l"}, + [0x1D661]={d="l"}, + [0x1D662]={d="l"}, + [0x1D663]={d="l"}, + [0x1D664]={d="l"}, + [0x1D665]={d="l"}, + [0x1D666]={d="l"}, + [0x1D667]={d="l"}, + [0x1D668]={d="l"}, + [0x1D669]={d="l"}, + [0x1D66A]={d="l"}, + [0x1D66B]={d="l"}, + [0x1D66C]={d="l"}, + [0x1D66D]={d="l"}, + [0x1D66E]={d="l"}, + [0x1D66F]={d="l"}, + [0x1D670]={d="l"}, + [0x1D671]={d="l"}, + [0x1D672]={d="l"}, + [0x1D673]={d="l"}, + [0x1D674]={d="l"}, + [0x1D675]={d="l"}, + [0x1D676]={d="l"}, + [0x1D677]={d="l"}, + [0x1D678]={d="l"}, + [0x1D679]={d="l"}, + [0x1D67A]={d="l"}, + [0x1D67B]={d="l"}, + [0x1D67C]={d="l"}, + [0x1D67D]={d="l"}, + [0x1D67E]={d="l"}, + [0x1D67F]={d="l"}, + [0x1D680]={d="l"}, + [0x1D681]={d="l"}, + [0x1D682]={d="l"}, + [0x1D683]={d="l"}, + [0x1D684]={d="l"}, + [0x1D685]={d="l"}, + [0x1D686]={d="l"}, + [0x1D687]={d="l"}, + [0x1D688]={d="l"}, + [0x1D689]={d="l"}, + [0x1D68A]={d="l"}, + [0x1D68B]={d="l"}, + [0x1D68C]={d="l"}, + [0x1D68D]={d="l"}, + [0x1D68E]={d="l"}, + [0x1D68F]={d="l"}, + [0x1D690]={d="l"}, + [0x1D691]={d="l"}, + [0x1D692]={d="l"}, + [0x1D693]={d="l"}, + [0x1D694]={d="l"}, + [0x1D695]={d="l"}, + [0x1D696]={d="l"}, + [0x1D697]={d="l"}, + [0x1D698]={d="l"}, + [0x1D699]={d="l"}, + [0x1D69A]={d="l"}, + [0x1D69B]={d="l"}, + [0x1D69C]={d="l"}, + [0x1D69D]={d="l"}, + [0x1D69E]={d="l"}, + [0x1D69F]={d="l"}, + [0x1D6A0]={d="l"}, + [0x1D6A1]={d="l"}, + [0x1D6A2]={d="l"}, + [0x1D6A3]={d="l"}, + [0x1D6A4]={d="l"}, + [0x1D6A5]={d="l"}, + [0x1D6A8]={d="l"}, + [0x1D6A9]={d="l"}, + [0x1D6AA]={d="l"}, + [0x1D6AB]={d="l"}, + [0x1D6AC]={d="l"}, + [0x1D6AD]={d="l"}, + [0x1D6AE]={d="l"}, + [0x1D6AF]={d="l"}, + [0x1D6B0]={d="l"}, + [0x1D6B1]={d="l"}, + [0x1D6B2]={d="l"}, + [0x1D6B3]={d="l"}, + [0x1D6B4]={d="l"}, + [0x1D6B5]={d="l"}, + [0x1D6B6]={d="l"}, + [0x1D6B7]={d="l"}, + [0x1D6B8]={d="l"}, + [0x1D6B9]={d="l"}, + [0x1D6BA]={d="l"}, + [0x1D6BB]={d="l"}, + [0x1D6BC]={d="l"}, + [0x1D6BD]={d="l"}, + [0x1D6BE]={d="l"}, + [0x1D6BF]={d="l"}, + [0x1D6C0]={d="l"}, + [0x1D6C1]={d="l"}, + [0x1D6C2]={d="l"}, + [0x1D6C3]={d="l"}, + [0x1D6C4]={d="l"}, + [0x1D6C5]={d="l"}, + [0x1D6C6]={d="l"}, + [0x1D6C7]={d="l"}, + [0x1D6C8]={d="l"}, + [0x1D6C9]={d="l"}, + [0x1D6CA]={d="l"}, + [0x1D6CB]={d="l"}, + [0x1D6CC]={d="l"}, + [0x1D6CD]={d="l"}, + [0x1D6CE]={d="l"}, + [0x1D6CF]={d="l"}, + [0x1D6D0]={d="l"}, + [0x1D6D1]={d="l"}, + [0x1D6D2]={d="l"}, + [0x1D6D3]={d="l"}, + [0x1D6D4]={d="l"}, + [0x1D6D5]={d="l"}, + [0x1D6D6]={d="l"}, + [0x1D6D7]={d="l"}, + [0x1D6D8]={d="l"}, + [0x1D6D9]={d="l"}, + [0x1D6DA]={d="l"}, + [0x1D6DB]={d="on"}, + [0x1D6DC]={d="l"}, + [0x1D6DD]={d="l"}, + [0x1D6DE]={d="l"}, + [0x1D6DF]={d="l"}, + [0x1D6E0]={d="l"}, + [0x1D6E1]={d="l"}, + [0x1D6E2]={d="l"}, + [0x1D6E3]={d="l"}, + [0x1D6E4]={d="l"}, + [0x1D6E5]={d="l"}, + [0x1D6E6]={d="l"}, + [0x1D6E7]={d="l"}, + [0x1D6E8]={d="l"}, + [0x1D6E9]={d="l"}, + [0x1D6EA]={d="l"}, + [0x1D6EB]={d="l"}, + [0x1D6EC]={d="l"}, + [0x1D6ED]={d="l"}, + [0x1D6EE]={d="l"}, + [0x1D6EF]={d="l"}, + [0x1D6F0]={d="l"}, + [0x1D6F1]={d="l"}, + [0x1D6F2]={d="l"}, + [0x1D6F3]={d="l"}, + [0x1D6F4]={d="l"}, + [0x1D6F5]={d="l"}, + [0x1D6F6]={d="l"}, + [0x1D6F7]={d="l"}, + [0x1D6F8]={d="l"}, + [0x1D6F9]={d="l"}, + [0x1D6FA]={d="l"}, + [0x1D6FB]={d="l"}, + [0x1D6FC]={d="l"}, + [0x1D6FD]={d="l"}, + [0x1D6FE]={d="l"}, + [0x1D6FF]={d="l"}, + [0x1D700]={d="l"}, + [0x1D701]={d="l"}, + [0x1D702]={d="l"}, + [0x1D703]={d="l"}, + [0x1D704]={d="l"}, + [0x1D705]={d="l"}, + [0x1D706]={d="l"}, + [0x1D707]={d="l"}, + [0x1D708]={d="l"}, + [0x1D709]={d="l"}, + [0x1D70A]={d="l"}, + [0x1D70B]={d="l"}, + [0x1D70C]={d="l"}, + [0x1D70D]={d="l"}, + [0x1D70E]={d="l"}, + [0x1D70F]={d="l"}, + [0x1D710]={d="l"}, + [0x1D711]={d="l"}, + [0x1D712]={d="l"}, + [0x1D713]={d="l"}, + [0x1D714]={d="l"}, + [0x1D715]={d="on"}, + [0x1D716]={d="l"}, + [0x1D717]={d="l"}, + [0x1D718]={d="l"}, + [0x1D719]={d="l"}, + [0x1D71A]={d="l"}, + [0x1D71B]={d="l"}, + [0x1D71C]={d="l"}, + [0x1D71D]={d="l"}, + [0x1D71E]={d="l"}, + [0x1D71F]={d="l"}, + [0x1D720]={d="l"}, + [0x1D721]={d="l"}, + [0x1D722]={d="l"}, + [0x1D723]={d="l"}, + [0x1D724]={d="l"}, + [0x1D725]={d="l"}, + [0x1D726]={d="l"}, + [0x1D727]={d="l"}, + [0x1D728]={d="l"}, + [0x1D729]={d="l"}, + [0x1D72A]={d="l"}, + [0x1D72B]={d="l"}, + [0x1D72C]={d="l"}, + [0x1D72D]={d="l"}, + [0x1D72E]={d="l"}, + [0x1D72F]={d="l"}, + [0x1D730]={d="l"}, + [0x1D731]={d="l"}, + [0x1D732]={d="l"}, + [0x1D733]={d="l"}, + [0x1D734]={d="l"}, + [0x1D735]={d="l"}, + [0x1D736]={d="l"}, + [0x1D737]={d="l"}, + [0x1D738]={d="l"}, + [0x1D739]={d="l"}, + [0x1D73A]={d="l"}, + [0x1D73B]={d="l"}, + [0x1D73C]={d="l"}, + [0x1D73D]={d="l"}, + [0x1D73E]={d="l"}, + [0x1D73F]={d="l"}, + [0x1D740]={d="l"}, + [0x1D741]={d="l"}, + [0x1D742]={d="l"}, + [0x1D743]={d="l"}, + [0x1D744]={d="l"}, + [0x1D745]={d="l"}, + [0x1D746]={d="l"}, + [0x1D747]={d="l"}, + [0x1D748]={d="l"}, + [0x1D749]={d="l"}, + [0x1D74A]={d="l"}, + [0x1D74B]={d="l"}, + [0x1D74C]={d="l"}, + [0x1D74D]={d="l"}, + [0x1D74E]={d="l"}, + [0x1D74F]={d="on"}, + [0x1D750]={d="l"}, + [0x1D751]={d="l"}, + [0x1D752]={d="l"}, + [0x1D753]={d="l"}, + [0x1D754]={d="l"}, + [0x1D755]={d="l"}, + [0x1D756]={d="l"}, + [0x1D757]={d="l"}, + [0x1D758]={d="l"}, + [0x1D759]={d="l"}, + [0x1D75A]={d="l"}, + [0x1D75B]={d="l"}, + [0x1D75C]={d="l"}, + [0x1D75D]={d="l"}, + [0x1D75E]={d="l"}, + [0x1D75F]={d="l"}, + [0x1D760]={d="l"}, + [0x1D761]={d="l"}, + [0x1D762]={d="l"}, + [0x1D763]={d="l"}, + [0x1D764]={d="l"}, + [0x1D765]={d="l"}, + [0x1D766]={d="l"}, + [0x1D767]={d="l"}, + [0x1D768]={d="l"}, + [0x1D769]={d="l"}, + [0x1D76A]={d="l"}, + [0x1D76B]={d="l"}, + [0x1D76C]={d="l"}, + [0x1D76D]={d="l"}, + [0x1D76E]={d="l"}, + [0x1D76F]={d="l"}, + [0x1D770]={d="l"}, + [0x1D771]={d="l"}, + [0x1D772]={d="l"}, + [0x1D773]={d="l"}, + [0x1D774]={d="l"}, + [0x1D775]={d="l"}, + [0x1D776]={d="l"}, + [0x1D777]={d="l"}, + [0x1D778]={d="l"}, + [0x1D779]={d="l"}, + [0x1D77A]={d="l"}, + [0x1D77B]={d="l"}, + [0x1D77C]={d="l"}, + [0x1D77D]={d="l"}, + [0x1D77E]={d="l"}, + [0x1D77F]={d="l"}, + [0x1D780]={d="l"}, + [0x1D781]={d="l"}, + [0x1D782]={d="l"}, + [0x1D783]={d="l"}, + [0x1D784]={d="l"}, + [0x1D785]={d="l"}, + [0x1D786]={d="l"}, + [0x1D787]={d="l"}, + [0x1D788]={d="l"}, + [0x1D789]={d="on"}, + [0x1D78A]={d="l"}, + [0x1D78B]={d="l"}, + [0x1D78C]={d="l"}, + [0x1D78D]={d="l"}, + [0x1D78E]={d="l"}, + [0x1D78F]={d="l"}, + [0x1D790]={d="l"}, + [0x1D791]={d="l"}, + [0x1D792]={d="l"}, + [0x1D793]={d="l"}, + [0x1D794]={d="l"}, + [0x1D795]={d="l"}, + [0x1D796]={d="l"}, + [0x1D797]={d="l"}, + [0x1D798]={d="l"}, + [0x1D799]={d="l"}, + [0x1D79A]={d="l"}, + [0x1D79B]={d="l"}, + [0x1D79C]={d="l"}, + [0x1D79D]={d="l"}, + [0x1D79E]={d="l"}, + [0x1D79F]={d="l"}, + [0x1D7A0]={d="l"}, + [0x1D7A1]={d="l"}, + [0x1D7A2]={d="l"}, + [0x1D7A3]={d="l"}, + [0x1D7A4]={d="l"}, + [0x1D7A5]={d="l"}, + [0x1D7A6]={d="l"}, + [0x1D7A7]={d="l"}, + [0x1D7A8]={d="l"}, + [0x1D7A9]={d="l"}, + [0x1D7AA]={d="l"}, + [0x1D7AB]={d="l"}, + [0x1D7AC]={d="l"}, + [0x1D7AD]={d="l"}, + [0x1D7AE]={d="l"}, + [0x1D7AF]={d="l"}, + [0x1D7B0]={d="l"}, + [0x1D7B1]={d="l"}, + [0x1D7B2]={d="l"}, + [0x1D7B3]={d="l"}, + [0x1D7B4]={d="l"}, + [0x1D7B5]={d="l"}, + [0x1D7B6]={d="l"}, + [0x1D7B7]={d="l"}, + [0x1D7B8]={d="l"}, + [0x1D7B9]={d="l"}, + [0x1D7BA]={d="l"}, + [0x1D7BB]={d="l"}, + [0x1D7BC]={d="l"}, + [0x1D7BD]={d="l"}, + [0x1D7BE]={d="l"}, + [0x1D7BF]={d="l"}, + [0x1D7C0]={d="l"}, + [0x1D7C1]={d="l"}, + [0x1D7C2]={d="l"}, + [0x1D7C3]={d="on"}, + [0x1D7C4]={d="l"}, + [0x1D7C5]={d="l"}, + [0x1D7C6]={d="l"}, + [0x1D7C7]={d="l"}, + [0x1D7C8]={d="l"}, + [0x1D7C9]={d="l"}, + [0x1D7CA]={d="l"}, + [0x1D7CB]={d="l"}, + [0x1D7CE]={d="en"}, + [0x1D7CF]={d="en"}, + [0x1D7D0]={d="en"}, + [0x1D7D1]={d="en"}, + [0x1D7D2]={d="en"}, + [0x1D7D3]={d="en"}, + [0x1D7D4]={d="en"}, + [0x1D7D5]={d="en"}, + [0x1D7D6]={d="en"}, + [0x1D7D7]={d="en"}, + [0x1D7D8]={d="en"}, + [0x1D7D9]={d="en"}, + [0x1D7DA]={d="en"}, + [0x1D7DB]={d="en"}, + [0x1D7DC]={d="en"}, + [0x1D7DD]={d="en"}, + [0x1D7DE]={d="en"}, + [0x1D7DF]={d="en"}, + [0x1D7E0]={d="en"}, + [0x1D7E1]={d="en"}, + [0x1D7E2]={d="en"}, + [0x1D7E3]={d="en"}, + [0x1D7E4]={d="en"}, + [0x1D7E5]={d="en"}, + [0x1D7E6]={d="en"}, + [0x1D7E7]={d="en"}, + [0x1D7E8]={d="en"}, + [0x1D7E9]={d="en"}, + [0x1D7EA]={d="en"}, + [0x1D7EB]={d="en"}, + [0x1D7EC]={d="en"}, + [0x1D7ED]={d="en"}, + [0x1D7EE]={d="en"}, + [0x1D7EF]={d="en"}, + [0x1D7F0]={d="en"}, + [0x1D7F1]={d="en"}, + [0x1D7F2]={d="en"}, + [0x1D7F3]={d="en"}, + [0x1D7F4]={d="en"}, + [0x1D7F5]={d="en"}, + [0x1D7F6]={d="en"}, + [0x1D7F7]={d="en"}, + [0x1D7F8]={d="en"}, + [0x1D7F9]={d="en"}, + [0x1D7FA]={d="en"}, + [0x1D7FB]={d="en"}, + [0x1D7FC]={d="en"}, + [0x1D7FD]={d="en"}, + [0x1D7FE]={d="en"}, + [0x1D7FF]={d="en"}, + [0x1D800]={d="l"}, + [0x1D801]={d="l"}, + [0x1D802]={d="l"}, + [0x1D803]={d="l"}, + [0x1D804]={d="l"}, + [0x1D805]={d="l"}, + [0x1D806]={d="l"}, + [0x1D807]={d="l"}, + [0x1D808]={d="l"}, + [0x1D809]={d="l"}, + [0x1D80A]={d="l"}, + [0x1D80B]={d="l"}, + [0x1D80C]={d="l"}, + [0x1D80D]={d="l"}, + [0x1D80E]={d="l"}, + [0x1D80F]={d="l"}, + [0x1D810]={d="l"}, + [0x1D811]={d="l"}, + [0x1D812]={d="l"}, + [0x1D813]={d="l"}, + [0x1D814]={d="l"}, + [0x1D815]={d="l"}, + [0x1D816]={d="l"}, + [0x1D817]={d="l"}, + [0x1D818]={d="l"}, + [0x1D819]={d="l"}, + [0x1D81A]={d="l"}, + [0x1D81B]={d="l"}, + [0x1D81C]={d="l"}, + [0x1D81D]={d="l"}, + [0x1D81E]={d="l"}, + [0x1D81F]={d="l"}, + [0x1D820]={d="l"}, + [0x1D821]={d="l"}, + [0x1D822]={d="l"}, + [0x1D823]={d="l"}, + [0x1D824]={d="l"}, + [0x1D825]={d="l"}, + [0x1D826]={d="l"}, + [0x1D827]={d="l"}, + [0x1D828]={d="l"}, + [0x1D829]={d="l"}, + [0x1D82A]={d="l"}, + [0x1D82B]={d="l"}, + [0x1D82C]={d="l"}, + [0x1D82D]={d="l"}, + [0x1D82E]={d="l"}, + [0x1D82F]={d="l"}, + [0x1D830]={d="l"}, + [0x1D831]={d="l"}, + [0x1D832]={d="l"}, + [0x1D833]={d="l"}, + [0x1D834]={d="l"}, + [0x1D835]={d="l"}, + [0x1D836]={d="l"}, + [0x1D837]={d="l"}, + [0x1D838]={d="l"}, + [0x1D839]={d="l"}, + [0x1D83A]={d="l"}, + [0x1D83B]={d="l"}, + [0x1D83C]={d="l"}, + [0x1D83D]={d="l"}, + [0x1D83E]={d="l"}, + [0x1D83F]={d="l"}, + [0x1D840]={d="l"}, + [0x1D841]={d="l"}, + [0x1D842]={d="l"}, + [0x1D843]={d="l"}, + [0x1D844]={d="l"}, + [0x1D845]={d="l"}, + [0x1D846]={d="l"}, + [0x1D847]={d="l"}, + [0x1D848]={d="l"}, + [0x1D849]={d="l"}, + [0x1D84A]={d="l"}, + [0x1D84B]={d="l"}, + [0x1D84C]={d="l"}, + [0x1D84D]={d="l"}, + [0x1D84E]={d="l"}, + [0x1D84F]={d="l"}, + [0x1D850]={d="l"}, + [0x1D851]={d="l"}, + [0x1D852]={d="l"}, + [0x1D853]={d="l"}, + [0x1D854]={d="l"}, + [0x1D855]={d="l"}, + [0x1D856]={d="l"}, + [0x1D857]={d="l"}, + [0x1D858]={d="l"}, + [0x1D859]={d="l"}, + [0x1D85A]={d="l"}, + [0x1D85B]={d="l"}, + [0x1D85C]={d="l"}, + [0x1D85D]={d="l"}, + [0x1D85E]={d="l"}, + [0x1D85F]={d="l"}, + [0x1D860]={d="l"}, + [0x1D861]={d="l"}, + [0x1D862]={d="l"}, + [0x1D863]={d="l"}, + [0x1D864]={d="l"}, + [0x1D865]={d="l"}, + [0x1D866]={d="l"}, + [0x1D867]={d="l"}, + [0x1D868]={d="l"}, + [0x1D869]={d="l"}, + [0x1D86A]={d="l"}, + [0x1D86B]={d="l"}, + [0x1D86C]={d="l"}, + [0x1D86D]={d="l"}, + [0x1D86E]={d="l"}, + [0x1D86F]={d="l"}, + [0x1D870]={d="l"}, + [0x1D871]={d="l"}, + [0x1D872]={d="l"}, + [0x1D873]={d="l"}, + [0x1D874]={d="l"}, + [0x1D875]={d="l"}, + [0x1D876]={d="l"}, + [0x1D877]={d="l"}, + [0x1D878]={d="l"}, + [0x1D879]={d="l"}, + [0x1D87A]={d="l"}, + [0x1D87B]={d="l"}, + [0x1D87C]={d="l"}, + [0x1D87D]={d="l"}, + [0x1D87E]={d="l"}, + [0x1D87F]={d="l"}, + [0x1D880]={d="l"}, + [0x1D881]={d="l"}, + [0x1D882]={d="l"}, + [0x1D883]={d="l"}, + [0x1D884]={d="l"}, + [0x1D885]={d="l"}, + [0x1D886]={d="l"}, + [0x1D887]={d="l"}, + [0x1D888]={d="l"}, + [0x1D889]={d="l"}, + [0x1D88A]={d="l"}, + [0x1D88B]={d="l"}, + [0x1D88C]={d="l"}, + [0x1D88D]={d="l"}, + [0x1D88E]={d="l"}, + [0x1D88F]={d="l"}, + [0x1D890]={d="l"}, + [0x1D891]={d="l"}, + [0x1D892]={d="l"}, + [0x1D893]={d="l"}, + [0x1D894]={d="l"}, + [0x1D895]={d="l"}, + [0x1D896]={d="l"}, + [0x1D897]={d="l"}, + [0x1D898]={d="l"}, + [0x1D899]={d="l"}, + [0x1D89A]={d="l"}, + [0x1D89B]={d="l"}, + [0x1D89C]={d="l"}, + [0x1D89D]={d="l"}, + [0x1D89E]={d="l"}, + [0x1D89F]={d="l"}, + [0x1D8A0]={d="l"}, + [0x1D8A1]={d="l"}, + [0x1D8A2]={d="l"}, + [0x1D8A3]={d="l"}, + [0x1D8A4]={d="l"}, + [0x1D8A5]={d="l"}, + [0x1D8A6]={d="l"}, + [0x1D8A7]={d="l"}, + [0x1D8A8]={d="l"}, + [0x1D8A9]={d="l"}, + [0x1D8AA]={d="l"}, + [0x1D8AB]={d="l"}, + [0x1D8AC]={d="l"}, + [0x1D8AD]={d="l"}, + [0x1D8AE]={d="l"}, + [0x1D8AF]={d="l"}, + [0x1D8B0]={d="l"}, + [0x1D8B1]={d="l"}, + [0x1D8B2]={d="l"}, + [0x1D8B3]={d="l"}, + [0x1D8B4]={d="l"}, + [0x1D8B5]={d="l"}, + [0x1D8B6]={d="l"}, + [0x1D8B7]={d="l"}, + [0x1D8B8]={d="l"}, + [0x1D8B9]={d="l"}, + [0x1D8BA]={d="l"}, + [0x1D8BB]={d="l"}, + [0x1D8BC]={d="l"}, + [0x1D8BD]={d="l"}, + [0x1D8BE]={d="l"}, + [0x1D8BF]={d="l"}, + [0x1D8C0]={d="l"}, + [0x1D8C1]={d="l"}, + [0x1D8C2]={d="l"}, + [0x1D8C3]={d="l"}, + [0x1D8C4]={d="l"}, + [0x1D8C5]={d="l"}, + [0x1D8C6]={d="l"}, + [0x1D8C7]={d="l"}, + [0x1D8C8]={d="l"}, + [0x1D8C9]={d="l"}, + [0x1D8CA]={d="l"}, + [0x1D8CB]={d="l"}, + [0x1D8CC]={d="l"}, + [0x1D8CD]={d="l"}, + [0x1D8CE]={d="l"}, + [0x1D8CF]={d="l"}, + [0x1D8D0]={d="l"}, + [0x1D8D1]={d="l"}, + [0x1D8D2]={d="l"}, + [0x1D8D3]={d="l"}, + [0x1D8D4]={d="l"}, + [0x1D8D5]={d="l"}, + [0x1D8D6]={d="l"}, + [0x1D8D7]={d="l"}, + [0x1D8D8]={d="l"}, + [0x1D8D9]={d="l"}, + [0x1D8DA]={d="l"}, + [0x1D8DB]={d="l"}, + [0x1D8DC]={d="l"}, + [0x1D8DD]={d="l"}, + [0x1D8DE]={d="l"}, + [0x1D8DF]={d="l"}, + [0x1D8E0]={d="l"}, + [0x1D8E1]={d="l"}, + [0x1D8E2]={d="l"}, + [0x1D8E3]={d="l"}, + [0x1D8E4]={d="l"}, + [0x1D8E5]={d="l"}, + [0x1D8E6]={d="l"}, + [0x1D8E7]={d="l"}, + [0x1D8E8]={d="l"}, + [0x1D8E9]={d="l"}, + [0x1D8EA]={d="l"}, + [0x1D8EB]={d="l"}, + [0x1D8EC]={d="l"}, + [0x1D8ED]={d="l"}, + [0x1D8EE]={d="l"}, + [0x1D8EF]={d="l"}, + [0x1D8F0]={d="l"}, + [0x1D8F1]={d="l"}, + [0x1D8F2]={d="l"}, + [0x1D8F3]={d="l"}, + [0x1D8F4]={d="l"}, + [0x1D8F5]={d="l"}, + [0x1D8F6]={d="l"}, + [0x1D8F7]={d="l"}, + [0x1D8F8]={d="l"}, + [0x1D8F9]={d="l"}, + [0x1D8FA]={d="l"}, + [0x1D8FB]={d="l"}, + [0x1D8FC]={d="l"}, + [0x1D8FD]={d="l"}, + [0x1D8FE]={d="l"}, + [0x1D8FF]={d="l"}, + [0x1D900]={d="l"}, + [0x1D901]={d="l"}, + [0x1D902]={d="l"}, + [0x1D903]={d="l"}, + [0x1D904]={d="l"}, + [0x1D905]={d="l"}, + [0x1D906]={d="l"}, + [0x1D907]={d="l"}, + [0x1D908]={d="l"}, + [0x1D909]={d="l"}, + [0x1D90A]={d="l"}, + [0x1D90B]={d="l"}, + [0x1D90C]={d="l"}, + [0x1D90D]={d="l"}, + [0x1D90E]={d="l"}, + [0x1D90F]={d="l"}, + [0x1D910]={d="l"}, + [0x1D911]={d="l"}, + [0x1D912]={d="l"}, + [0x1D913]={d="l"}, + [0x1D914]={d="l"}, + [0x1D915]={d="l"}, + [0x1D916]={d="l"}, + [0x1D917]={d="l"}, + [0x1D918]={d="l"}, + [0x1D919]={d="l"}, + [0x1D91A]={d="l"}, + [0x1D91B]={d="l"}, + [0x1D91C]={d="l"}, + [0x1D91D]={d="l"}, + [0x1D91E]={d="l"}, + [0x1D91F]={d="l"}, + [0x1D920]={d="l"}, + [0x1D921]={d="l"}, + [0x1D922]={d="l"}, + [0x1D923]={d="l"}, + [0x1D924]={d="l"}, + [0x1D925]={d="l"}, + [0x1D926]={d="l"}, + [0x1D927]={d="l"}, + [0x1D928]={d="l"}, + [0x1D929]={d="l"}, + [0x1D92A]={d="l"}, + [0x1D92B]={d="l"}, + [0x1D92C]={d="l"}, + [0x1D92D]={d="l"}, + [0x1D92E]={d="l"}, + [0x1D92F]={d="l"}, + [0x1D930]={d="l"}, + [0x1D931]={d="l"}, + [0x1D932]={d="l"}, + [0x1D933]={d="l"}, + [0x1D934]={d="l"}, + [0x1D935]={d="l"}, + [0x1D936]={d="l"}, + [0x1D937]={d="l"}, + [0x1D938]={d="l"}, + [0x1D939]={d="l"}, + [0x1D93A]={d="l"}, + [0x1D93B]={d="l"}, + [0x1D93C]={d="l"}, + [0x1D93D]={d="l"}, + [0x1D93E]={d="l"}, + [0x1D93F]={d="l"}, + [0x1D940]={d="l"}, + [0x1D941]={d="l"}, + [0x1D942]={d="l"}, + [0x1D943]={d="l"}, + [0x1D944]={d="l"}, + [0x1D945]={d="l"}, + [0x1D946]={d="l"}, + [0x1D947]={d="l"}, + [0x1D948]={d="l"}, + [0x1D949]={d="l"}, + [0x1D94A]={d="l"}, + [0x1D94B]={d="l"}, + [0x1D94C]={d="l"}, + [0x1D94D]={d="l"}, + [0x1D94E]={d="l"}, + [0x1D94F]={d="l"}, + [0x1D950]={d="l"}, + [0x1D951]={d="l"}, + [0x1D952]={d="l"}, + [0x1D953]={d="l"}, + [0x1D954]={d="l"}, + [0x1D955]={d="l"}, + [0x1D956]={d="l"}, + [0x1D957]={d="l"}, + [0x1D958]={d="l"}, + [0x1D959]={d="l"}, + [0x1D95A]={d="l"}, + [0x1D95B]={d="l"}, + [0x1D95C]={d="l"}, + [0x1D95D]={d="l"}, + [0x1D95E]={d="l"}, + [0x1D95F]={d="l"}, + [0x1D960]={d="l"}, + [0x1D961]={d="l"}, + [0x1D962]={d="l"}, + [0x1D963]={d="l"}, + [0x1D964]={d="l"}, + [0x1D965]={d="l"}, + [0x1D966]={d="l"}, + [0x1D967]={d="l"}, + [0x1D968]={d="l"}, + [0x1D969]={d="l"}, + [0x1D96A]={d="l"}, + [0x1D96B]={d="l"}, + [0x1D96C]={d="l"}, + [0x1D96D]={d="l"}, + [0x1D96E]={d="l"}, + [0x1D96F]={d="l"}, + [0x1D970]={d="l"}, + [0x1D971]={d="l"}, + [0x1D972]={d="l"}, + [0x1D973]={d="l"}, + [0x1D974]={d="l"}, + [0x1D975]={d="l"}, + [0x1D976]={d="l"}, + [0x1D977]={d="l"}, + [0x1D978]={d="l"}, + [0x1D979]={d="l"}, + [0x1D97A]={d="l"}, + [0x1D97B]={d="l"}, + [0x1D97C]={d="l"}, + [0x1D97D]={d="l"}, + [0x1D97E]={d="l"}, + [0x1D97F]={d="l"}, + [0x1D980]={d="l"}, + [0x1D981]={d="l"}, + [0x1D982]={d="l"}, + [0x1D983]={d="l"}, + [0x1D984]={d="l"}, + [0x1D985]={d="l"}, + [0x1D986]={d="l"}, + [0x1D987]={d="l"}, + [0x1D988]={d="l"}, + [0x1D989]={d="l"}, + [0x1D98A]={d="l"}, + [0x1D98B]={d="l"}, + [0x1D98C]={d="l"}, + [0x1D98D]={d="l"}, + [0x1D98E]={d="l"}, + [0x1D98F]={d="l"}, + [0x1D990]={d="l"}, + [0x1D991]={d="l"}, + [0x1D992]={d="l"}, + [0x1D993]={d="l"}, + [0x1D994]={d="l"}, + [0x1D995]={d="l"}, + [0x1D996]={d="l"}, + [0x1D997]={d="l"}, + [0x1D998]={d="l"}, + [0x1D999]={d="l"}, + [0x1D99A]={d="l"}, + [0x1D99B]={d="l"}, + [0x1D99C]={d="l"}, + [0x1D99D]={d="l"}, + [0x1D99E]={d="l"}, + [0x1D99F]={d="l"}, + [0x1D9A0]={d="l"}, + [0x1D9A1]={d="l"}, + [0x1D9A2]={d="l"}, + [0x1D9A3]={d="l"}, + [0x1D9A4]={d="l"}, + [0x1D9A5]={d="l"}, + [0x1D9A6]={d="l"}, + [0x1D9A7]={d="l"}, + [0x1D9A8]={d="l"}, + [0x1D9A9]={d="l"}, + [0x1D9AA]={d="l"}, + [0x1D9AB]={d="l"}, + [0x1D9AC]={d="l"}, + [0x1D9AD]={d="l"}, + [0x1D9AE]={d="l"}, + [0x1D9AF]={d="l"}, + [0x1D9B0]={d="l"}, + [0x1D9B1]={d="l"}, + [0x1D9B2]={d="l"}, + [0x1D9B3]={d="l"}, + [0x1D9B4]={d="l"}, + [0x1D9B5]={d="l"}, + [0x1D9B6]={d="l"}, + [0x1D9B7]={d="l"}, + [0x1D9B8]={d="l"}, + [0x1D9B9]={d="l"}, + [0x1D9BA]={d="l"}, + [0x1D9BB]={d="l"}, + [0x1D9BC]={d="l"}, + [0x1D9BD]={d="l"}, + [0x1D9BE]={d="l"}, + [0x1D9BF]={d="l"}, + [0x1D9C0]={d="l"}, + [0x1D9C1]={d="l"}, + [0x1D9C2]={d="l"}, + [0x1D9C3]={d="l"}, + [0x1D9C4]={d="l"}, + [0x1D9C5]={d="l"}, + [0x1D9C6]={d="l"}, + [0x1D9C7]={d="l"}, + [0x1D9C8]={d="l"}, + [0x1D9C9]={d="l"}, + [0x1D9CA]={d="l"}, + [0x1D9CB]={d="l"}, + [0x1D9CC]={d="l"}, + [0x1D9CD]={d="l"}, + [0x1D9CE]={d="l"}, + [0x1D9CF]={d="l"}, + [0x1D9D0]={d="l"}, + [0x1D9D1]={d="l"}, + [0x1D9D2]={d="l"}, + [0x1D9D3]={d="l"}, + [0x1D9D4]={d="l"}, + [0x1D9D5]={d="l"}, + [0x1D9D6]={d="l"}, + [0x1D9D7]={d="l"}, + [0x1D9D8]={d="l"}, + [0x1D9D9]={d="l"}, + [0x1D9DA]={d="l"}, + [0x1D9DB]={d="l"}, + [0x1D9DC]={d="l"}, + [0x1D9DD]={d="l"}, + [0x1D9DE]={d="l"}, + [0x1D9DF]={d="l"}, + [0x1D9E0]={d="l"}, + [0x1D9E1]={d="l"}, + [0x1D9E2]={d="l"}, + [0x1D9E3]={d="l"}, + [0x1D9E4]={d="l"}, + [0x1D9E5]={d="l"}, + [0x1D9E6]={d="l"}, + [0x1D9E7]={d="l"}, + [0x1D9E8]={d="l"}, + [0x1D9E9]={d="l"}, + [0x1D9EA]={d="l"}, + [0x1D9EB]={d="l"}, + [0x1D9EC]={d="l"}, + [0x1D9ED]={d="l"}, + [0x1D9EE]={d="l"}, + [0x1D9EF]={d="l"}, + [0x1D9F0]={d="l"}, + [0x1D9F1]={d="l"}, + [0x1D9F2]={d="l"}, + [0x1D9F3]={d="l"}, + [0x1D9F4]={d="l"}, + [0x1D9F5]={d="l"}, + [0x1D9F6]={d="l"}, + [0x1D9F7]={d="l"}, + [0x1D9F8]={d="l"}, + [0x1D9F9]={d="l"}, + [0x1D9FA]={d="l"}, + [0x1D9FB]={d="l"}, + [0x1D9FC]={d="l"}, + [0x1D9FD]={d="l"}, + [0x1D9FE]={d="l"}, + [0x1D9FF]={d="l"}, + [0x1DA00]={d="nsm"}, + [0x1DA01]={d="nsm"}, + [0x1DA02]={d="nsm"}, + [0x1DA03]={d="nsm"}, + [0x1DA04]={d="nsm"}, + [0x1DA05]={d="nsm"}, + [0x1DA06]={d="nsm"}, + [0x1DA07]={d="nsm"}, + [0x1DA08]={d="nsm"}, + [0x1DA09]={d="nsm"}, + [0x1DA0A]={d="nsm"}, + [0x1DA0B]={d="nsm"}, + [0x1DA0C]={d="nsm"}, + [0x1DA0D]={d="nsm"}, + [0x1DA0E]={d="nsm"}, + [0x1DA0F]={d="nsm"}, + [0x1DA10]={d="nsm"}, + [0x1DA11]={d="nsm"}, + [0x1DA12]={d="nsm"}, + [0x1DA13]={d="nsm"}, + [0x1DA14]={d="nsm"}, + [0x1DA15]={d="nsm"}, + [0x1DA16]={d="nsm"}, + [0x1DA17]={d="nsm"}, + [0x1DA18]={d="nsm"}, + [0x1DA19]={d="nsm"}, + [0x1DA1A]={d="nsm"}, + [0x1DA1B]={d="nsm"}, + [0x1DA1C]={d="nsm"}, + [0x1DA1D]={d="nsm"}, + [0x1DA1E]={d="nsm"}, + [0x1DA1F]={d="nsm"}, + [0x1DA20]={d="nsm"}, + [0x1DA21]={d="nsm"}, + [0x1DA22]={d="nsm"}, + [0x1DA23]={d="nsm"}, + [0x1DA24]={d="nsm"}, + [0x1DA25]={d="nsm"}, + [0x1DA26]={d="nsm"}, + [0x1DA27]={d="nsm"}, + [0x1DA28]={d="nsm"}, + [0x1DA29]={d="nsm"}, + [0x1DA2A]={d="nsm"}, + [0x1DA2B]={d="nsm"}, + [0x1DA2C]={d="nsm"}, + [0x1DA2D]={d="nsm"}, + [0x1DA2E]={d="nsm"}, + [0x1DA2F]={d="nsm"}, + [0x1DA30]={d="nsm"}, + [0x1DA31]={d="nsm"}, + [0x1DA32]={d="nsm"}, + [0x1DA33]={d="nsm"}, + [0x1DA34]={d="nsm"}, + [0x1DA35]={d="nsm"}, + [0x1DA36]={d="nsm"}, + [0x1DA37]={d="l"}, + [0x1DA38]={d="l"}, + [0x1DA39]={d="l"}, + [0x1DA3A]={d="l"}, + [0x1DA3B]={d="nsm"}, + [0x1DA3C]={d="nsm"}, + [0x1DA3D]={d="nsm"}, + [0x1DA3E]={d="nsm"}, + [0x1DA3F]={d="nsm"}, + [0x1DA40]={d="nsm"}, + [0x1DA41]={d="nsm"}, + [0x1DA42]={d="nsm"}, + [0x1DA43]={d="nsm"}, + [0x1DA44]={d="nsm"}, + [0x1DA45]={d="nsm"}, + [0x1DA46]={d="nsm"}, + [0x1DA47]={d="nsm"}, + [0x1DA48]={d="nsm"}, + [0x1DA49]={d="nsm"}, + [0x1DA4A]={d="nsm"}, + [0x1DA4B]={d="nsm"}, + [0x1DA4C]={d="nsm"}, + [0x1DA4D]={d="nsm"}, + [0x1DA4E]={d="nsm"}, + [0x1DA4F]={d="nsm"}, + [0x1DA50]={d="nsm"}, + [0x1DA51]={d="nsm"}, + [0x1DA52]={d="nsm"}, + [0x1DA53]={d="nsm"}, + [0x1DA54]={d="nsm"}, + [0x1DA55]={d="nsm"}, + [0x1DA56]={d="nsm"}, + [0x1DA57]={d="nsm"}, + [0x1DA58]={d="nsm"}, + [0x1DA59]={d="nsm"}, + [0x1DA5A]={d="nsm"}, + [0x1DA5B]={d="nsm"}, + [0x1DA5C]={d="nsm"}, + [0x1DA5D]={d="nsm"}, + [0x1DA5E]={d="nsm"}, + [0x1DA5F]={d="nsm"}, + [0x1DA60]={d="nsm"}, + [0x1DA61]={d="nsm"}, + [0x1DA62]={d="nsm"}, + [0x1DA63]={d="nsm"}, + [0x1DA64]={d="nsm"}, + [0x1DA65]={d="nsm"}, + [0x1DA66]={d="nsm"}, + [0x1DA67]={d="nsm"}, + [0x1DA68]={d="nsm"}, + [0x1DA69]={d="nsm"}, + [0x1DA6A]={d="nsm"}, + [0x1DA6B]={d="nsm"}, + [0x1DA6C]={d="nsm"}, + [0x1DA6D]={d="l"}, + [0x1DA6E]={d="l"}, + [0x1DA6F]={d="l"}, + [0x1DA70]={d="l"}, + [0x1DA71]={d="l"}, + [0x1DA72]={d="l"}, + [0x1DA73]={d="l"}, + [0x1DA74]={d="l"}, + [0x1DA75]={d="nsm"}, + [0x1DA76]={d="l"}, + [0x1DA77]={d="l"}, + [0x1DA78]={d="l"}, + [0x1DA79]={d="l"}, + [0x1DA7A]={d="l"}, + [0x1DA7B]={d="l"}, + [0x1DA7C]={d="l"}, + [0x1DA7D]={d="l"}, + [0x1DA7E]={d="l"}, + [0x1DA7F]={d="l"}, + [0x1DA80]={d="l"}, + [0x1DA81]={d="l"}, + [0x1DA82]={d="l"}, + [0x1DA83]={d="l"}, + [0x1DA84]={d="nsm"}, + [0x1DA85]={d="l"}, + [0x1DA86]={d="l"}, + [0x1DA87]={d="l"}, + [0x1DA88]={d="l"}, + [0x1DA89]={d="l"}, + [0x1DA8A]={d="l"}, + [0x1DA8B]={d="l"}, + [0x1DA9B]={d="nsm"}, + [0x1DA9C]={d="nsm"}, + [0x1DA9D]={d="nsm"}, + [0x1DA9E]={d="nsm"}, + [0x1DA9F]={d="nsm"}, + [0x1DAA1]={d="nsm"}, + [0x1DAA2]={d="nsm"}, + [0x1DAA3]={d="nsm"}, + [0x1DAA4]={d="nsm"}, + [0x1DAA5]={d="nsm"}, + [0x1DAA6]={d="nsm"}, + [0x1DAA7]={d="nsm"}, + [0x1DAA8]={d="nsm"}, + [0x1DAA9]={d="nsm"}, + [0x1DAAA]={d="nsm"}, + [0x1DAAB]={d="nsm"}, + [0x1DAAC]={d="nsm"}, + [0x1DAAD]={d="nsm"}, + [0x1DAAE]={d="nsm"}, + [0x1DAAF]={d="nsm"}, + [0x1DF00]={d="l"}, + [0x1DF01]={d="l"}, + [0x1DF02]={d="l"}, + [0x1DF03]={d="l"}, + [0x1DF04]={d="l"}, + [0x1DF05]={d="l"}, + [0x1DF06]={d="l"}, + [0x1DF07]={d="l"}, + [0x1DF08]={d="l"}, + [0x1DF09]={d="l"}, + [0x1DF0A]={d="l"}, + [0x1DF0B]={d="l"}, + [0x1DF0C]={d="l"}, + [0x1DF0D]={d="l"}, + [0x1DF0E]={d="l"}, + [0x1DF0F]={d="l"}, + [0x1DF10]={d="l"}, + [0x1DF11]={d="l"}, + [0x1DF12]={d="l"}, + [0x1DF13]={d="l"}, + [0x1DF14]={d="l"}, + [0x1DF15]={d="l"}, + [0x1DF16]={d="l"}, + [0x1DF17]={d="l"}, + [0x1DF18]={d="l"}, + [0x1DF19]={d="l"}, + [0x1DF1A]={d="l"}, + [0x1DF1B]={d="l"}, + [0x1DF1C]={d="l"}, + [0x1DF1D]={d="l"}, + [0x1DF1E]={d="l"}, + [0x1DF25]={d="l"}, + [0x1DF26]={d="l"}, + [0x1DF27]={d="l"}, + [0x1DF28]={d="l"}, + [0x1DF29]={d="l"}, + [0x1DF2A]={d="l"}, + [0x1E000]={d="nsm"}, + [0x1E001]={d="nsm"}, + [0x1E002]={d="nsm"}, + [0x1E003]={d="nsm"}, + [0x1E004]={d="nsm"}, + [0x1E005]={d="nsm"}, + [0x1E006]={d="nsm"}, + [0x1E008]={d="nsm"}, + [0x1E009]={d="nsm"}, + [0x1E00A]={d="nsm"}, + [0x1E00B]={d="nsm"}, + [0x1E00C]={d="nsm"}, + [0x1E00D]={d="nsm"}, + [0x1E00E]={d="nsm"}, + [0x1E00F]={d="nsm"}, + [0x1E010]={d="nsm"}, + [0x1E011]={d="nsm"}, + [0x1E012]={d="nsm"}, + [0x1E013]={d="nsm"}, + [0x1E014]={d="nsm"}, + [0x1E015]={d="nsm"}, + [0x1E016]={d="nsm"}, + [0x1E017]={d="nsm"}, + [0x1E018]={d="nsm"}, + [0x1E01B]={d="nsm"}, + [0x1E01C]={d="nsm"}, + [0x1E01D]={d="nsm"}, + [0x1E01E]={d="nsm"}, + [0x1E01F]={d="nsm"}, + [0x1E020]={d="nsm"}, + [0x1E021]={d="nsm"}, + [0x1E023]={d="nsm"}, + [0x1E024]={d="nsm"}, + [0x1E026]={d="nsm"}, + [0x1E027]={d="nsm"}, + [0x1E028]={d="nsm"}, + [0x1E029]={d="nsm"}, + [0x1E02A]={d="nsm"}, + [0x1E030]={d="l"}, + [0x1E031]={d="l"}, + [0x1E032]={d="l"}, + [0x1E033]={d="l"}, + [0x1E034]={d="l"}, + [0x1E035]={d="l"}, + [0x1E036]={d="l"}, + [0x1E037]={d="l"}, + [0x1E038]={d="l"}, + [0x1E039]={d="l"}, + [0x1E03A]={d="l"}, + [0x1E03B]={d="l"}, + [0x1E03C]={d="l"}, + [0x1E03D]={d="l"}, + [0x1E03E]={d="l"}, + [0x1E03F]={d="l"}, + [0x1E040]={d="l"}, + [0x1E041]={d="l"}, + [0x1E042]={d="l"}, + [0x1E043]={d="l"}, + [0x1E044]={d="l"}, + [0x1E045]={d="l"}, + [0x1E046]={d="l"}, + [0x1E047]={d="l"}, + [0x1E048]={d="l"}, + [0x1E049]={d="l"}, + [0x1E04A]={d="l"}, + [0x1E04B]={d="l"}, + [0x1E04C]={d="l"}, + [0x1E04D]={d="l"}, + [0x1E04E]={d="l"}, + [0x1E04F]={d="l"}, + [0x1E050]={d="l"}, + [0x1E051]={d="l"}, + [0x1E052]={d="l"}, + [0x1E053]={d="l"}, + [0x1E054]={d="l"}, + [0x1E055]={d="l"}, + [0x1E056]={d="l"}, + [0x1E057]={d="l"}, + [0x1E058]={d="l"}, + [0x1E059]={d="l"}, + [0x1E05A]={d="l"}, + [0x1E05B]={d="l"}, + [0x1E05C]={d="l"}, + [0x1E05D]={d="l"}, + [0x1E05E]={d="l"}, + [0x1E05F]={d="l"}, + [0x1E060]={d="l"}, + [0x1E061]={d="l"}, + [0x1E062]={d="l"}, + [0x1E063]={d="l"}, + [0x1E064]={d="l"}, + [0x1E065]={d="l"}, + [0x1E066]={d="l"}, + [0x1E067]={d="l"}, + [0x1E068]={d="l"}, + [0x1E069]={d="l"}, + [0x1E06A]={d="l"}, + [0x1E06B]={d="l"}, + [0x1E06C]={d="l"}, + [0x1E06D]={d="l"}, + [0x1E08F]={d="nsm"}, + [0x1E100]={d="l"}, + [0x1E101]={d="l"}, + [0x1E102]={d="l"}, + [0x1E103]={d="l"}, + [0x1E104]={d="l"}, + [0x1E105]={d="l"}, + [0x1E106]={d="l"}, + [0x1E107]={d="l"}, + [0x1E108]={d="l"}, + [0x1E109]={d="l"}, + [0x1E10A]={d="l"}, + [0x1E10B]={d="l"}, + [0x1E10C]={d="l"}, + [0x1E10D]={d="l"}, + [0x1E10E]={d="l"}, + [0x1E10F]={d="l"}, + [0x1E110]={d="l"}, + [0x1E111]={d="l"}, + [0x1E112]={d="l"}, + [0x1E113]={d="l"}, + [0x1E114]={d="l"}, + [0x1E115]={d="l"}, + [0x1E116]={d="l"}, + [0x1E117]={d="l"}, + [0x1E118]={d="l"}, + [0x1E119]={d="l"}, + [0x1E11A]={d="l"}, + [0x1E11B]={d="l"}, + [0x1E11C]={d="l"}, + [0x1E11D]={d="l"}, + [0x1E11E]={d="l"}, + [0x1E11F]={d="l"}, + [0x1E120]={d="l"}, + [0x1E121]={d="l"}, + [0x1E122]={d="l"}, + [0x1E123]={d="l"}, + [0x1E124]={d="l"}, + [0x1E125]={d="l"}, + [0x1E126]={d="l"}, + [0x1E127]={d="l"}, + [0x1E128]={d="l"}, + [0x1E129]={d="l"}, + [0x1E12A]={d="l"}, + [0x1E12B]={d="l"}, + [0x1E12C]={d="l"}, + [0x1E130]={d="nsm"}, + [0x1E131]={d="nsm"}, + [0x1E132]={d="nsm"}, + [0x1E133]={d="nsm"}, + [0x1E134]={d="nsm"}, + [0x1E135]={d="nsm"}, + [0x1E136]={d="nsm"}, + [0x1E137]={d="l"}, + [0x1E138]={d="l"}, + [0x1E139]={d="l"}, + [0x1E13A]={d="l"}, + [0x1E13B]={d="l"}, + [0x1E13C]={d="l"}, + [0x1E13D]={d="l"}, + [0x1E140]={d="l"}, + [0x1E141]={d="l"}, + [0x1E142]={d="l"}, + [0x1E143]={d="l"}, + [0x1E144]={d="l"}, + [0x1E145]={d="l"}, + [0x1E146]={d="l"}, + [0x1E147]={d="l"}, + [0x1E148]={d="l"}, + [0x1E149]={d="l"}, + [0x1E14E]={d="l"}, + [0x1E14F]={d="l"}, + [0x1E290]={d="l"}, + [0x1E291]={d="l"}, + [0x1E292]={d="l"}, + [0x1E293]={d="l"}, + [0x1E294]={d="l"}, + [0x1E295]={d="l"}, + [0x1E296]={d="l"}, + [0x1E297]={d="l"}, + [0x1E298]={d="l"}, + [0x1E299]={d="l"}, + [0x1E29A]={d="l"}, + [0x1E29B]={d="l"}, + [0x1E29C]={d="l"}, + [0x1E29D]={d="l"}, + [0x1E29E]={d="l"}, + [0x1E29F]={d="l"}, + [0x1E2A0]={d="l"}, + [0x1E2A1]={d="l"}, + [0x1E2A2]={d="l"}, + [0x1E2A3]={d="l"}, + [0x1E2A4]={d="l"}, + [0x1E2A5]={d="l"}, + [0x1E2A6]={d="l"}, + [0x1E2A7]={d="l"}, + [0x1E2A8]={d="l"}, + [0x1E2A9]={d="l"}, + [0x1E2AA]={d="l"}, + [0x1E2AB]={d="l"}, + [0x1E2AC]={d="l"}, + [0x1E2AD]={d="l"}, + [0x1E2AE]={d="nsm"}, + [0x1E2C0]={d="l"}, + [0x1E2C1]={d="l"}, + [0x1E2C2]={d="l"}, + [0x1E2C3]={d="l"}, + [0x1E2C4]={d="l"}, + [0x1E2C5]={d="l"}, + [0x1E2C6]={d="l"}, + [0x1E2C7]={d="l"}, + [0x1E2C8]={d="l"}, + [0x1E2C9]={d="l"}, + [0x1E2CA]={d="l"}, + [0x1E2CB]={d="l"}, + [0x1E2CC]={d="l"}, + [0x1E2CD]={d="l"}, + [0x1E2CE]={d="l"}, + [0x1E2CF]={d="l"}, + [0x1E2D0]={d="l"}, + [0x1E2D1]={d="l"}, + [0x1E2D2]={d="l"}, + [0x1E2D3]={d="l"}, + [0x1E2D4]={d="l"}, + [0x1E2D5]={d="l"}, + [0x1E2D6]={d="l"}, + [0x1E2D7]={d="l"}, + [0x1E2D8]={d="l"}, + [0x1E2D9]={d="l"}, + [0x1E2DA]={d="l"}, + [0x1E2DB]={d="l"}, + [0x1E2DC]={d="l"}, + [0x1E2DD]={d="l"}, + [0x1E2DE]={d="l"}, + [0x1E2DF]={d="l"}, + [0x1E2E0]={d="l"}, + [0x1E2E1]={d="l"}, + [0x1E2E2]={d="l"}, + [0x1E2E3]={d="l"}, + [0x1E2E4]={d="l"}, + [0x1E2E5]={d="l"}, + [0x1E2E6]={d="l"}, + [0x1E2E7]={d="l"}, + [0x1E2E8]={d="l"}, + [0x1E2E9]={d="l"}, + [0x1E2EA]={d="l"}, + [0x1E2EB]={d="l"}, + [0x1E2EC]={d="nsm"}, + [0x1E2ED]={d="nsm"}, + [0x1E2EE]={d="nsm"}, + [0x1E2EF]={d="nsm"}, + [0x1E2F0]={d="l"}, + [0x1E2F1]={d="l"}, + [0x1E2F2]={d="l"}, + [0x1E2F3]={d="l"}, + [0x1E2F4]={d="l"}, + [0x1E2F5]={d="l"}, + [0x1E2F6]={d="l"}, + [0x1E2F7]={d="l"}, + [0x1E2F8]={d="l"}, + [0x1E2F9]={d="l"}, + [0x1E2FF]={d="et"}, + [0x1E4D0]={d="l"}, + [0x1E4D1]={d="l"}, + [0x1E4D2]={d="l"}, + [0x1E4D3]={d="l"}, + [0x1E4D4]={d="l"}, + [0x1E4D5]={d="l"}, + [0x1E4D6]={d="l"}, + [0x1E4D7]={d="l"}, + [0x1E4D8]={d="l"}, + [0x1E4D9]={d="l"}, + [0x1E4DA]={d="l"}, + [0x1E4DB]={d="l"}, + [0x1E4DC]={d="l"}, + [0x1E4DD]={d="l"}, + [0x1E4DE]={d="l"}, + [0x1E4DF]={d="l"}, + [0x1E4E0]={d="l"}, + [0x1E4E1]={d="l"}, + [0x1E4E2]={d="l"}, + [0x1E4E3]={d="l"}, + [0x1E4E4]={d="l"}, + [0x1E4E5]={d="l"}, + [0x1E4E6]={d="l"}, + [0x1E4E7]={d="l"}, + [0x1E4E8]={d="l"}, + [0x1E4E9]={d="l"}, + [0x1E4EA]={d="l"}, + [0x1E4EB]={d="l"}, + [0x1E4EC]={d="nsm"}, + [0x1E4ED]={d="nsm"}, + [0x1E4EE]={d="nsm"}, + [0x1E4EF]={d="nsm"}, + [0x1E4F0]={d="l"}, + [0x1E4F1]={d="l"}, + [0x1E4F2]={d="l"}, + [0x1E4F3]={d="l"}, + [0x1E4F4]={d="l"}, + [0x1E4F5]={d="l"}, + [0x1E4F6]={d="l"}, + [0x1E4F7]={d="l"}, + [0x1E4F8]={d="l"}, + [0x1E4F9]={d="l"}, + [0x1E7E0]={d="l"}, + [0x1E7E1]={d="l"}, + [0x1E7E2]={d="l"}, + [0x1E7E3]={d="l"}, + [0x1E7E4]={d="l"}, + [0x1E7E5]={d="l"}, + [0x1E7E6]={d="l"}, + [0x1E7E8]={d="l"}, + [0x1E7E9]={d="l"}, + [0x1E7EA]={d="l"}, + [0x1E7EB]={d="l"}, + [0x1E7ED]={d="l"}, + [0x1E7EE]={d="l"}, + [0x1E7F0]={d="l"}, + [0x1E7F1]={d="l"}, + [0x1E7F2]={d="l"}, + [0x1E7F3]={d="l"}, + [0x1E7F4]={d="l"}, + [0x1E7F5]={d="l"}, + [0x1E7F6]={d="l"}, + [0x1E7F7]={d="l"}, + [0x1E7F8]={d="l"}, + [0x1E7F9]={d="l"}, + [0x1E7FA]={d="l"}, + [0x1E7FB]={d="l"}, + [0x1E7FC]={d="l"}, + [0x1E7FD]={d="l"}, + [0x1E7FE]={d="l"}, + [0x1E800]={d="r"}, + [0x1E801]={d="r"}, + [0x1E802]={d="r"}, + [0x1E803]={d="r"}, + [0x1E804]={d="r"}, + [0x1E805]={d="r"}, + [0x1E806]={d="r"}, + [0x1E807]={d="r"}, + [0x1E808]={d="r"}, + [0x1E809]={d="r"}, + [0x1E80A]={d="r"}, + [0x1E80B]={d="r"}, + [0x1E80C]={d="r"}, + [0x1E80D]={d="r"}, + [0x1E80E]={d="r"}, + [0x1E80F]={d="r"}, + [0x1E810]={d="r"}, + [0x1E811]={d="r"}, + [0x1E812]={d="r"}, + [0x1E813]={d="r"}, + [0x1E814]={d="r"}, + [0x1E815]={d="r"}, + [0x1E816]={d="r"}, + [0x1E817]={d="r"}, + [0x1E818]={d="r"}, + [0x1E819]={d="r"}, + [0x1E81A]={d="r"}, + [0x1E81B]={d="r"}, + [0x1E81C]={d="r"}, + [0x1E81D]={d="r"}, + [0x1E81E]={d="r"}, + [0x1E81F]={d="r"}, + [0x1E820]={d="r"}, + [0x1E821]={d="r"}, + [0x1E822]={d="r"}, + [0x1E823]={d="r"}, + [0x1E824]={d="r"}, + [0x1E825]={d="r"}, + [0x1E826]={d="r"}, + [0x1E827]={d="r"}, + [0x1E828]={d="r"}, + [0x1E829]={d="r"}, + [0x1E82A]={d="r"}, + [0x1E82B]={d="r"}, + [0x1E82C]={d="r"}, + [0x1E82D]={d="r"}, + [0x1E82E]={d="r"}, + [0x1E82F]={d="r"}, + [0x1E830]={d="r"}, + [0x1E831]={d="r"}, + [0x1E832]={d="r"}, + [0x1E833]={d="r"}, + [0x1E834]={d="r"}, + [0x1E835]={d="r"}, + [0x1E836]={d="r"}, + [0x1E837]={d="r"}, + [0x1E838]={d="r"}, + [0x1E839]={d="r"}, + [0x1E83A]={d="r"}, + [0x1E83B]={d="r"}, + [0x1E83C]={d="r"}, + [0x1E83D]={d="r"}, + [0x1E83E]={d="r"}, + [0x1E83F]={d="r"}, + [0x1E840]={d="r"}, + [0x1E841]={d="r"}, + [0x1E842]={d="r"}, + [0x1E843]={d="r"}, + [0x1E844]={d="r"}, + [0x1E845]={d="r"}, + [0x1E846]={d="r"}, + [0x1E847]={d="r"}, + [0x1E848]={d="r"}, + [0x1E849]={d="r"}, + [0x1E84A]={d="r"}, + [0x1E84B]={d="r"}, + [0x1E84C]={d="r"}, + [0x1E84D]={d="r"}, + [0x1E84E]={d="r"}, + [0x1E84F]={d="r"}, + [0x1E850]={d="r"}, + [0x1E851]={d="r"}, + [0x1E852]={d="r"}, + [0x1E853]={d="r"}, + [0x1E854]={d="r"}, + [0x1E855]={d="r"}, + [0x1E856]={d="r"}, + [0x1E857]={d="r"}, + [0x1E858]={d="r"}, + [0x1E859]={d="r"}, + [0x1E85A]={d="r"}, + [0x1E85B]={d="r"}, + [0x1E85C]={d="r"}, + [0x1E85D]={d="r"}, + [0x1E85E]={d="r"}, + [0x1E85F]={d="r"}, + [0x1E860]={d="r"}, + [0x1E861]={d="r"}, + [0x1E862]={d="r"}, + [0x1E863]={d="r"}, + [0x1E864]={d="r"}, + [0x1E865]={d="r"}, + [0x1E866]={d="r"}, + [0x1E867]={d="r"}, + [0x1E868]={d="r"}, + [0x1E869]={d="r"}, + [0x1E86A]={d="r"}, + [0x1E86B]={d="r"}, + [0x1E86C]={d="r"}, + [0x1E86D]={d="r"}, + [0x1E86E]={d="r"}, + [0x1E86F]={d="r"}, + [0x1E870]={d="r"}, + [0x1E871]={d="r"}, + [0x1E872]={d="r"}, + [0x1E873]={d="r"}, + [0x1E874]={d="r"}, + [0x1E875]={d="r"}, + [0x1E876]={d="r"}, + [0x1E877]={d="r"}, + [0x1E878]={d="r"}, + [0x1E879]={d="r"}, + [0x1E87A]={d="r"}, + [0x1E87B]={d="r"}, + [0x1E87C]={d="r"}, + [0x1E87D]={d="r"}, + [0x1E87E]={d="r"}, + [0x1E87F]={d="r"}, + [0x1E880]={d="r"}, + [0x1E881]={d="r"}, + [0x1E882]={d="r"}, + [0x1E883]={d="r"}, + [0x1E884]={d="r"}, + [0x1E885]={d="r"}, + [0x1E886]={d="r"}, + [0x1E887]={d="r"}, + [0x1E888]={d="r"}, + [0x1E889]={d="r"}, + [0x1E88A]={d="r"}, + [0x1E88B]={d="r"}, + [0x1E88C]={d="r"}, + [0x1E88D]={d="r"}, + [0x1E88E]={d="r"}, + [0x1E88F]={d="r"}, + [0x1E890]={d="r"}, + [0x1E891]={d="r"}, + [0x1E892]={d="r"}, + [0x1E893]={d="r"}, + [0x1E894]={d="r"}, + [0x1E895]={d="r"}, + [0x1E896]={d="r"}, + [0x1E897]={d="r"}, + [0x1E898]={d="r"}, + [0x1E899]={d="r"}, + [0x1E89A]={d="r"}, + [0x1E89B]={d="r"}, + [0x1E89C]={d="r"}, + [0x1E89D]={d="r"}, + [0x1E89E]={d="r"}, + [0x1E89F]={d="r"}, + [0x1E8A0]={d="r"}, + [0x1E8A1]={d="r"}, + [0x1E8A2]={d="r"}, + [0x1E8A3]={d="r"}, + [0x1E8A4]={d="r"}, + [0x1E8A5]={d="r"}, + [0x1E8A6]={d="r"}, + [0x1E8A7]={d="r"}, + [0x1E8A8]={d="r"}, + [0x1E8A9]={d="r"}, + [0x1E8AA]={d="r"}, + [0x1E8AB]={d="r"}, + [0x1E8AC]={d="r"}, + [0x1E8AD]={d="r"}, + [0x1E8AE]={d="r"}, + [0x1E8AF]={d="r"}, + [0x1E8B0]={d="r"}, + [0x1E8B1]={d="r"}, + [0x1E8B2]={d="r"}, + [0x1E8B3]={d="r"}, + [0x1E8B4]={d="r"}, + [0x1E8B5]={d="r"}, + [0x1E8B6]={d="r"}, + [0x1E8B7]={d="r"}, + [0x1E8B8]={d="r"}, + [0x1E8B9]={d="r"}, + [0x1E8BA]={d="r"}, + [0x1E8BB]={d="r"}, + [0x1E8BC]={d="r"}, + [0x1E8BD]={d="r"}, + [0x1E8BE]={d="r"}, + [0x1E8BF]={d="r"}, + [0x1E8C0]={d="r"}, + [0x1E8C1]={d="r"}, + [0x1E8C2]={d="r"}, + [0x1E8C3]={d="r"}, + [0x1E8C4]={d="r"}, + [0x1E8C7]={d="r"}, + [0x1E8C8]={d="r"}, + [0x1E8C9]={d="r"}, + [0x1E8CA]={d="r"}, + [0x1E8CB]={d="r"}, + [0x1E8CC]={d="r"}, + [0x1E8CD]={d="r"}, + [0x1E8CE]={d="r"}, + [0x1E8CF]={d="r"}, + [0x1E8D0]={d="nsm"}, + [0x1E8D1]={d="nsm"}, + [0x1E8D2]={d="nsm"}, + [0x1E8D3]={d="nsm"}, + [0x1E8D4]={d="nsm"}, + [0x1E8D5]={d="nsm"}, + [0x1E8D6]={d="nsm"}, + [0x1E900]={d="r"}, + [0x1E901]={d="r"}, + [0x1E902]={d="r"}, + [0x1E903]={d="r"}, + [0x1E904]={d="r"}, + [0x1E905]={d="r"}, + [0x1E906]={d="r"}, + [0x1E907]={d="r"}, + [0x1E908]={d="r"}, + [0x1E909]={d="r"}, + [0x1E90A]={d="r"}, + [0x1E90B]={d="r"}, + [0x1E90C]={d="r"}, + [0x1E90D]={d="r"}, + [0x1E90E]={d="r"}, + [0x1E90F]={d="r"}, + [0x1E910]={d="r"}, + [0x1E911]={d="r"}, + [0x1E912]={d="r"}, + [0x1E913]={d="r"}, + [0x1E914]={d="r"}, + [0x1E915]={d="r"}, + [0x1E916]={d="r"}, + [0x1E917]={d="r"}, + [0x1E918]={d="r"}, + [0x1E919]={d="r"}, + [0x1E91A]={d="r"}, + [0x1E91B]={d="r"}, + [0x1E91C]={d="r"}, + [0x1E91D]={d="r"}, + [0x1E91E]={d="r"}, + [0x1E91F]={d="r"}, + [0x1E920]={d="r"}, + [0x1E921]={d="r"}, + [0x1E922]={d="r"}, + [0x1E923]={d="r"}, + [0x1E924]={d="r"}, + [0x1E925]={d="r"}, + [0x1E926]={d="r"}, + [0x1E927]={d="r"}, + [0x1E928]={d="r"}, + [0x1E929]={d="r"}, + [0x1E92A]={d="r"}, + [0x1E92B]={d="r"}, + [0x1E92C]={d="r"}, + [0x1E92D]={d="r"}, + [0x1E92E]={d="r"}, + [0x1E92F]={d="r"}, + [0x1E930]={d="r"}, + [0x1E931]={d="r"}, + [0x1E932]={d="r"}, + [0x1E933]={d="r"}, + [0x1E934]={d="r"}, + [0x1E935]={d="r"}, + [0x1E936]={d="r"}, + [0x1E937]={d="r"}, + [0x1E938]={d="r"}, + [0x1E939]={d="r"}, + [0x1E93A]={d="r"}, + [0x1E93B]={d="r"}, + [0x1E93C]={d="r"}, + [0x1E93D]={d="r"}, + [0x1E93E]={d="r"}, + [0x1E93F]={d="r"}, + [0x1E940]={d="r"}, + [0x1E941]={d="r"}, + [0x1E942]={d="r"}, + [0x1E943]={d="r"}, + [0x1E944]={d="nsm"}, + [0x1E945]={d="nsm"}, + [0x1E946]={d="nsm"}, + [0x1E947]={d="nsm"}, + [0x1E948]={d="nsm"}, + [0x1E949]={d="nsm"}, + [0x1E94A]={d="nsm"}, + [0x1E94B]={d="r"}, + [0x1E950]={d="r"}, + [0x1E951]={d="r"}, + [0x1E952]={d="r"}, + [0x1E953]={d="r"}, + [0x1E954]={d="r"}, + [0x1E955]={d="r"}, + [0x1E956]={d="r"}, + [0x1E957]={d="r"}, + [0x1E958]={d="r"}, + [0x1E959]={d="r"}, + [0x1E95E]={d="r"}, + [0x1E95F]={d="r"}, + [0x1EC71]={d="al"}, + [0x1EC72]={d="al"}, + [0x1EC73]={d="al"}, + [0x1EC74]={d="al"}, + [0x1EC75]={d="al"}, + [0x1EC76]={d="al"}, + [0x1EC77]={d="al"}, + [0x1EC78]={d="al"}, + [0x1EC79]={d="al"}, + [0x1EC7A]={d="al"}, + [0x1EC7B]={d="al"}, + [0x1EC7C]={d="al"}, + [0x1EC7D]={d="al"}, + [0x1EC7E]={d="al"}, + [0x1EC7F]={d="al"}, + [0x1EC80]={d="al"}, + [0x1EC81]={d="al"}, + [0x1EC82]={d="al"}, + [0x1EC83]={d="al"}, + [0x1EC84]={d="al"}, + [0x1EC85]={d="al"}, + [0x1EC86]={d="al"}, + [0x1EC87]={d="al"}, + [0x1EC88]={d="al"}, + [0x1EC89]={d="al"}, + [0x1EC8A]={d="al"}, + [0x1EC8B]={d="al"}, + [0x1EC8C]={d="al"}, + [0x1EC8D]={d="al"}, + [0x1EC8E]={d="al"}, + [0x1EC8F]={d="al"}, + [0x1EC90]={d="al"}, + [0x1EC91]={d="al"}, + [0x1EC92]={d="al"}, + [0x1EC93]={d="al"}, + [0x1EC94]={d="al"}, + [0x1EC95]={d="al"}, + [0x1EC96]={d="al"}, + [0x1EC97]={d="al"}, + [0x1EC98]={d="al"}, + [0x1EC99]={d="al"}, + [0x1EC9A]={d="al"}, + [0x1EC9B]={d="al"}, + [0x1EC9C]={d="al"}, + [0x1EC9D]={d="al"}, + [0x1EC9E]={d="al"}, + [0x1EC9F]={d="al"}, + [0x1ECA0]={d="al"}, + [0x1ECA1]={d="al"}, + [0x1ECA2]={d="al"}, + [0x1ECA3]={d="al"}, + [0x1ECA4]={d="al"}, + [0x1ECA5]={d="al"}, + [0x1ECA6]={d="al"}, + [0x1ECA7]={d="al"}, + [0x1ECA8]={d="al"}, + [0x1ECA9]={d="al"}, + [0x1ECAA]={d="al"}, + [0x1ECAB]={d="al"}, + [0x1ECAC]={d="al"}, + [0x1ECAD]={d="al"}, + [0x1ECAE]={d="al"}, + [0x1ECAF]={d="al"}, + [0x1ECB0]={d="al"}, + [0x1ECB1]={d="al"}, + [0x1ECB2]={d="al"}, + [0x1ECB3]={d="al"}, + [0x1ECB4]={d="al"}, + [0x1ED01]={d="al"}, + [0x1ED02]={d="al"}, + [0x1ED03]={d="al"}, + [0x1ED04]={d="al"}, + [0x1ED05]={d="al"}, + [0x1ED06]={d="al"}, + [0x1ED07]={d="al"}, + [0x1ED08]={d="al"}, + [0x1ED09]={d="al"}, + [0x1ED0A]={d="al"}, + [0x1ED0B]={d="al"}, + [0x1ED0C]={d="al"}, + [0x1ED0D]={d="al"}, + [0x1ED0E]={d="al"}, + [0x1ED0F]={d="al"}, + [0x1ED10]={d="al"}, + [0x1ED11]={d="al"}, + [0x1ED12]={d="al"}, + [0x1ED13]={d="al"}, + [0x1ED14]={d="al"}, + [0x1ED15]={d="al"}, + [0x1ED16]={d="al"}, + [0x1ED17]={d="al"}, + [0x1ED18]={d="al"}, + [0x1ED19]={d="al"}, + [0x1ED1A]={d="al"}, + [0x1ED1B]={d="al"}, + [0x1ED1C]={d="al"}, + [0x1ED1D]={d="al"}, + [0x1ED1E]={d="al"}, + [0x1ED1F]={d="al"}, + [0x1ED20]={d="al"}, + [0x1ED21]={d="al"}, + [0x1ED22]={d="al"}, + [0x1ED23]={d="al"}, + [0x1ED24]={d="al"}, + [0x1ED25]={d="al"}, + [0x1ED26]={d="al"}, + [0x1ED27]={d="al"}, + [0x1ED28]={d="al"}, + [0x1ED29]={d="al"}, + [0x1ED2A]={d="al"}, + [0x1ED2B]={d="al"}, + [0x1ED2C]={d="al"}, + [0x1ED2D]={d="al"}, + [0x1ED2E]={d="al"}, + [0x1ED2F]={d="al"}, + [0x1ED30]={d="al"}, + [0x1ED31]={d="al"}, + [0x1ED32]={d="al"}, + [0x1ED33]={d="al"}, + [0x1ED34]={d="al"}, + [0x1ED35]={d="al"}, + [0x1ED36]={d="al"}, + [0x1ED37]={d="al"}, + [0x1ED38]={d="al"}, + [0x1ED39]={d="al"}, + [0x1ED3A]={d="al"}, + [0x1ED3B]={d="al"}, + [0x1ED3C]={d="al"}, + [0x1ED3D]={d="al"}, + [0x1EE00]={d="al"}, + [0x1EE01]={d="al"}, + [0x1EE02]={d="al"}, + [0x1EE03]={d="al"}, + [0x1EE05]={d="al"}, + [0x1EE06]={d="al"}, + [0x1EE07]={d="al"}, + [0x1EE08]={d="al"}, + [0x1EE09]={d="al"}, + [0x1EE0A]={d="al"}, + [0x1EE0B]={d="al"}, + [0x1EE0C]={d="al"}, + [0x1EE0D]={d="al"}, + [0x1EE0E]={d="al"}, + [0x1EE0F]={d="al"}, + [0x1EE10]={d="al"}, + [0x1EE11]={d="al"}, + [0x1EE12]={d="al"}, + [0x1EE13]={d="al"}, + [0x1EE14]={d="al"}, + [0x1EE15]={d="al"}, + [0x1EE16]={d="al"}, + [0x1EE17]={d="al"}, + [0x1EE18]={d="al"}, + [0x1EE19]={d="al"}, + [0x1EE1A]={d="al"}, + [0x1EE1B]={d="al"}, + [0x1EE1C]={d="al"}, + [0x1EE1D]={d="al"}, + [0x1EE1E]={d="al"}, + [0x1EE1F]={d="al"}, + [0x1EE21]={d="al"}, + [0x1EE22]={d="al"}, + [0x1EE24]={d="al"}, + [0x1EE27]={d="al"}, + [0x1EE29]={d="al"}, + [0x1EE2A]={d="al"}, + [0x1EE2B]={d="al"}, + [0x1EE2C]={d="al"}, + [0x1EE2D]={d="al"}, + [0x1EE2E]={d="al"}, + [0x1EE2F]={d="al"}, + [0x1EE30]={d="al"}, + [0x1EE31]={d="al"}, + [0x1EE32]={d="al"}, + [0x1EE34]={d="al"}, + [0x1EE35]={d="al"}, + [0x1EE36]={d="al"}, + [0x1EE37]={d="al"}, + [0x1EE39]={d="al"}, + [0x1EE3B]={d="al"}, + [0x1EE42]={d="al"}, + [0x1EE47]={d="al"}, + [0x1EE49]={d="al"}, + [0x1EE4B]={d="al"}, + [0x1EE4D]={d="al"}, + [0x1EE4E]={d="al"}, + [0x1EE4F]={d="al"}, + [0x1EE51]={d="al"}, + [0x1EE52]={d="al"}, + [0x1EE54]={d="al"}, + [0x1EE57]={d="al"}, + [0x1EE59]={d="al"}, + [0x1EE5B]={d="al"}, + [0x1EE5D]={d="al"}, + [0x1EE5F]={d="al"}, + [0x1EE61]={d="al"}, + [0x1EE62]={d="al"}, + [0x1EE64]={d="al"}, + [0x1EE67]={d="al"}, + [0x1EE68]={d="al"}, + [0x1EE69]={d="al"}, + [0x1EE6A]={d="al"}, + [0x1EE6C]={d="al"}, + [0x1EE6D]={d="al"}, + [0x1EE6E]={d="al"}, + [0x1EE6F]={d="al"}, + [0x1EE70]={d="al"}, + [0x1EE71]={d="al"}, + [0x1EE72]={d="al"}, + [0x1EE74]={d="al"}, + [0x1EE75]={d="al"}, + [0x1EE76]={d="al"}, + [0x1EE77]={d="al"}, + [0x1EE79]={d="al"}, + [0x1EE7A]={d="al"}, + [0x1EE7B]={d="al"}, + [0x1EE7C]={d="al"}, + [0x1EE7E]={d="al"}, + [0x1EE80]={d="al"}, + [0x1EE81]={d="al"}, + [0x1EE82]={d="al"}, + [0x1EE83]={d="al"}, + [0x1EE84]={d="al"}, + [0x1EE85]={d="al"}, + [0x1EE86]={d="al"}, + [0x1EE87]={d="al"}, + [0x1EE88]={d="al"}, + [0x1EE89]={d="al"}, + [0x1EE8B]={d="al"}, + [0x1EE8C]={d="al"}, + [0x1EE8D]={d="al"}, + [0x1EE8E]={d="al"}, + [0x1EE8F]={d="al"}, + [0x1EE90]={d="al"}, + [0x1EE91]={d="al"}, + [0x1EE92]={d="al"}, + [0x1EE93]={d="al"}, + [0x1EE94]={d="al"}, + [0x1EE95]={d="al"}, + [0x1EE96]={d="al"}, + [0x1EE97]={d="al"}, + [0x1EE98]={d="al"}, + [0x1EE99]={d="al"}, + [0x1EE9A]={d="al"}, + [0x1EE9B]={d="al"}, + [0x1EEA1]={d="al"}, + [0x1EEA2]={d="al"}, + [0x1EEA3]={d="al"}, + [0x1EEA5]={d="al"}, + [0x1EEA6]={d="al"}, + [0x1EEA7]={d="al"}, + [0x1EEA8]={d="al"}, + [0x1EEA9]={d="al"}, + [0x1EEAB]={d="al"}, + [0x1EEAC]={d="al"}, + [0x1EEAD]={d="al"}, + [0x1EEAE]={d="al"}, + [0x1EEAF]={d="al"}, + [0x1EEB0]={d="al"}, + [0x1EEB1]={d="al"}, + [0x1EEB2]={d="al"}, + [0x1EEB3]={d="al"}, + [0x1EEB4]={d="al"}, + [0x1EEB5]={d="al"}, + [0x1EEB6]={d="al"}, + [0x1EEB7]={d="al"}, + [0x1EEB8]={d="al"}, + [0x1EEB9]={d="al"}, + [0x1EEBA]={d="al"}, + [0x1EEBB]={d="al"}, + [0x1EEF0]={d="on"}, + [0x1EEF1]={d="on"}, + [0x1F000]={d="on"}, + [0x1F001]={d="on"}, + [0x1F002]={d="on"}, + [0x1F003]={d="on"}, + [0x1F004]={d="on"}, + [0x1F005]={d="on"}, + [0x1F006]={d="on"}, + [0x1F007]={d="on"}, + [0x1F008]={d="on"}, + [0x1F009]={d="on"}, + [0x1F00A]={d="on"}, + [0x1F00B]={d="on"}, + [0x1F00C]={d="on"}, + [0x1F00D]={d="on"}, + [0x1F00E]={d="on"}, + [0x1F00F]={d="on"}, + [0x1F010]={d="on"}, + [0x1F011]={d="on"}, + [0x1F012]={d="on"}, + [0x1F013]={d="on"}, + [0x1F014]={d="on"}, + [0x1F015]={d="on"}, + [0x1F016]={d="on"}, + [0x1F017]={d="on"}, + [0x1F018]={d="on"}, + [0x1F019]={d="on"}, + [0x1F01A]={d="on"}, + [0x1F01B]={d="on"}, + [0x1F01C]={d="on"}, + [0x1F01D]={d="on"}, + [0x1F01E]={d="on"}, + [0x1F01F]={d="on"}, + [0x1F020]={d="on"}, + [0x1F021]={d="on"}, + [0x1F022]={d="on"}, + [0x1F023]={d="on"}, + [0x1F024]={d="on"}, + [0x1F025]={d="on"}, + [0x1F026]={d="on"}, + [0x1F027]={d="on"}, + [0x1F028]={d="on"}, + [0x1F029]={d="on"}, + [0x1F02A]={d="on"}, + [0x1F02B]={d="on"}, + [0x1F030]={d="on"}, + [0x1F031]={d="on"}, + [0x1F032]={d="on"}, + [0x1F033]={d="on"}, + [0x1F034]={d="on"}, + [0x1F035]={d="on"}, + [0x1F036]={d="on"}, + [0x1F037]={d="on"}, + [0x1F038]={d="on"}, + [0x1F039]={d="on"}, + [0x1F03A]={d="on"}, + [0x1F03B]={d="on"}, + [0x1F03C]={d="on"}, + [0x1F03D]={d="on"}, + [0x1F03E]={d="on"}, + [0x1F03F]={d="on"}, + [0x1F040]={d="on"}, + [0x1F041]={d="on"}, + [0x1F042]={d="on"}, + [0x1F043]={d="on"}, + [0x1F044]={d="on"}, + [0x1F045]={d="on"}, + [0x1F046]={d="on"}, + [0x1F047]={d="on"}, + [0x1F048]={d="on"}, + [0x1F049]={d="on"}, + [0x1F04A]={d="on"}, + [0x1F04B]={d="on"}, + [0x1F04C]={d="on"}, + [0x1F04D]={d="on"}, + [0x1F04E]={d="on"}, + [0x1F04F]={d="on"}, + [0x1F050]={d="on"}, + [0x1F051]={d="on"}, + [0x1F052]={d="on"}, + [0x1F053]={d="on"}, + [0x1F054]={d="on"}, + [0x1F055]={d="on"}, + [0x1F056]={d="on"}, + [0x1F057]={d="on"}, + [0x1F058]={d="on"}, + [0x1F059]={d="on"}, + [0x1F05A]={d="on"}, + [0x1F05B]={d="on"}, + [0x1F05C]={d="on"}, + [0x1F05D]={d="on"}, + [0x1F05E]={d="on"}, + [0x1F05F]={d="on"}, + [0x1F060]={d="on"}, + [0x1F061]={d="on"}, + [0x1F062]={d="on"}, + [0x1F063]={d="on"}, + [0x1F064]={d="on"}, + [0x1F065]={d="on"}, + [0x1F066]={d="on"}, + [0x1F067]={d="on"}, + [0x1F068]={d="on"}, + [0x1F069]={d="on"}, + [0x1F06A]={d="on"}, + [0x1F06B]={d="on"}, + [0x1F06C]={d="on"}, + [0x1F06D]={d="on"}, + [0x1F06E]={d="on"}, + [0x1F06F]={d="on"}, + [0x1F070]={d="on"}, + [0x1F071]={d="on"}, + [0x1F072]={d="on"}, + [0x1F073]={d="on"}, + [0x1F074]={d="on"}, + [0x1F075]={d="on"}, + [0x1F076]={d="on"}, + [0x1F077]={d="on"}, + [0x1F078]={d="on"}, + [0x1F079]={d="on"}, + [0x1F07A]={d="on"}, + [0x1F07B]={d="on"}, + [0x1F07C]={d="on"}, + [0x1F07D]={d="on"}, + [0x1F07E]={d="on"}, + [0x1F07F]={d="on"}, + [0x1F080]={d="on"}, + [0x1F081]={d="on"}, + [0x1F082]={d="on"}, + [0x1F083]={d="on"}, + [0x1F084]={d="on"}, + [0x1F085]={d="on"}, + [0x1F086]={d="on"}, + [0x1F087]={d="on"}, + [0x1F088]={d="on"}, + [0x1F089]={d="on"}, + [0x1F08A]={d="on"}, + [0x1F08B]={d="on"}, + [0x1F08C]={d="on"}, + [0x1F08D]={d="on"}, + [0x1F08E]={d="on"}, + [0x1F08F]={d="on"}, + [0x1F090]={d="on"}, + [0x1F091]={d="on"}, + [0x1F092]={d="on"}, + [0x1F093]={d="on"}, + [0x1F0A0]={d="on"}, + [0x1F0A1]={d="on"}, + [0x1F0A2]={d="on"}, + [0x1F0A3]={d="on"}, + [0x1F0A4]={d="on"}, + [0x1F0A5]={d="on"}, + [0x1F0A6]={d="on"}, + [0x1F0A7]={d="on"}, + [0x1F0A8]={d="on"}, + [0x1F0A9]={d="on"}, + [0x1F0AA]={d="on"}, + [0x1F0AB]={d="on"}, + [0x1F0AC]={d="on"}, + [0x1F0AD]={d="on"}, + [0x1F0AE]={d="on"}, + [0x1F0B1]={d="on"}, + [0x1F0B2]={d="on"}, + [0x1F0B3]={d="on"}, + [0x1F0B4]={d="on"}, + [0x1F0B5]={d="on"}, + [0x1F0B6]={d="on"}, + [0x1F0B7]={d="on"}, + [0x1F0B8]={d="on"}, + [0x1F0B9]={d="on"}, + [0x1F0BA]={d="on"}, + [0x1F0BB]={d="on"}, + [0x1F0BC]={d="on"}, + [0x1F0BD]={d="on"}, + [0x1F0BE]={d="on"}, + [0x1F0BF]={d="on"}, + [0x1F0C1]={d="on"}, + [0x1F0C2]={d="on"}, + [0x1F0C3]={d="on"}, + [0x1F0C4]={d="on"}, + [0x1F0C5]={d="on"}, + [0x1F0C6]={d="on"}, + [0x1F0C7]={d="on"}, + [0x1F0C8]={d="on"}, + [0x1F0C9]={d="on"}, + [0x1F0CA]={d="on"}, + [0x1F0CB]={d="on"}, + [0x1F0CC]={d="on"}, + [0x1F0CD]={d="on"}, + [0x1F0CE]={d="on"}, + [0x1F0CF]={d="on"}, + [0x1F0D1]={d="on"}, + [0x1F0D2]={d="on"}, + [0x1F0D3]={d="on"}, + [0x1F0D4]={d="on"}, + [0x1F0D5]={d="on"}, + [0x1F0D6]={d="on"}, + [0x1F0D7]={d="on"}, + [0x1F0D8]={d="on"}, + [0x1F0D9]={d="on"}, + [0x1F0DA]={d="on"}, + [0x1F0DB]={d="on"}, + [0x1F0DC]={d="on"}, + [0x1F0DD]={d="on"}, + [0x1F0DE]={d="on"}, + [0x1F0DF]={d="on"}, + [0x1F0E0]={d="on"}, + [0x1F0E1]={d="on"}, + [0x1F0E2]={d="on"}, + [0x1F0E3]={d="on"}, + [0x1F0E4]={d="on"}, + [0x1F0E5]={d="on"}, + [0x1F0E6]={d="on"}, + [0x1F0E7]={d="on"}, + [0x1F0E8]={d="on"}, + [0x1F0E9]={d="on"}, + [0x1F0EA]={d="on"}, + [0x1F0EB]={d="on"}, + [0x1F0EC]={d="on"}, + [0x1F0ED]={d="on"}, + [0x1F0EE]={d="on"}, + [0x1F0EF]={d="on"}, + [0x1F0F0]={d="on"}, + [0x1F0F1]={d="on"}, + [0x1F0F2]={d="on"}, + [0x1F0F3]={d="on"}, + [0x1F0F4]={d="on"}, + [0x1F0F5]={d="on"}, + [0x1F100]={d="en"}, + [0x1F101]={d="en"}, + [0x1F102]={d="en"}, + [0x1F103]={d="en"}, + [0x1F104]={d="en"}, + [0x1F105]={d="en"}, + [0x1F106]={d="en"}, + [0x1F107]={d="en"}, + [0x1F108]={d="en"}, + [0x1F109]={d="en"}, + [0x1F10A]={d="en"}, + [0x1F10B]={d="on"}, + [0x1F10C]={d="on"}, + [0x1F10D]={d="on"}, + [0x1F10E]={d="on"}, + [0x1F10F]={d="on"}, + [0x1F110]={d="l"}, + [0x1F111]={d="l"}, + [0x1F112]={d="l"}, + [0x1F113]={d="l"}, + [0x1F114]={d="l"}, + [0x1F115]={d="l"}, + [0x1F116]={d="l"}, + [0x1F117]={d="l"}, + [0x1F118]={d="l"}, + [0x1F119]={d="l"}, + [0x1F11A]={d="l"}, + [0x1F11B]={d="l"}, + [0x1F11C]={d="l"}, + [0x1F11D]={d="l"}, + [0x1F11E]={d="l"}, + [0x1F11F]={d="l"}, + [0x1F120]={d="l"}, + [0x1F121]={d="l"}, + [0x1F122]={d="l"}, + [0x1F123]={d="l"}, + [0x1F124]={d="l"}, + [0x1F125]={d="l"}, + [0x1F126]={d="l"}, + [0x1F127]={d="l"}, + [0x1F128]={d="l"}, + [0x1F129]={d="l"}, + [0x1F12A]={d="l"}, + [0x1F12B]={d="l"}, + [0x1F12C]={d="l"}, + [0x1F12D]={d="l"}, + [0x1F12E]={d="l"}, + [0x1F12F]={d="on"}, + [0x1F130]={d="l"}, + [0x1F131]={d="l"}, + [0x1F132]={d="l"}, + [0x1F133]={d="l"}, + [0x1F134]={d="l"}, + [0x1F135]={d="l"}, + [0x1F136]={d="l"}, + [0x1F137]={d="l"}, + [0x1F138]={d="l"}, + [0x1F139]={d="l"}, + [0x1F13A]={d="l"}, + [0x1F13B]={d="l"}, + [0x1F13C]={d="l"}, + [0x1F13D]={d="l"}, + [0x1F13E]={d="l"}, + [0x1F13F]={d="l"}, + [0x1F140]={d="l"}, + [0x1F141]={d="l"}, + [0x1F142]={d="l"}, + [0x1F143]={d="l"}, + [0x1F144]={d="l"}, + [0x1F145]={d="l"}, + [0x1F146]={d="l"}, + [0x1F147]={d="l"}, + [0x1F148]={d="l"}, + [0x1F149]={d="l"}, + [0x1F14A]={d="l"}, + [0x1F14B]={d="l"}, + [0x1F14C]={d="l"}, + [0x1F14D]={d="l"}, + [0x1F14E]={d="l"}, + [0x1F14F]={d="l"}, + [0x1F150]={d="l"}, + [0x1F151]={d="l"}, + [0x1F152]={d="l"}, + [0x1F153]={d="l"}, + [0x1F154]={d="l"}, + [0x1F155]={d="l"}, + [0x1F156]={d="l"}, + [0x1F157]={d="l"}, + [0x1F158]={d="l"}, + [0x1F159]={d="l"}, + [0x1F15A]={d="l"}, + [0x1F15B]={d="l"}, + [0x1F15C]={d="l"}, + [0x1F15D]={d="l"}, + [0x1F15E]={d="l"}, + [0x1F15F]={d="l"}, + [0x1F160]={d="l"}, + [0x1F161]={d="l"}, + [0x1F162]={d="l"}, + [0x1F163]={d="l"}, + [0x1F164]={d="l"}, + [0x1F165]={d="l"}, + [0x1F166]={d="l"}, + [0x1F167]={d="l"}, + [0x1F168]={d="l"}, + [0x1F169]={d="l"}, + [0x1F16A]={d="on"}, + [0x1F16B]={d="on"}, + [0x1F16C]={d="on"}, + [0x1F16D]={d="on"}, + [0x1F16E]={d="on"}, + [0x1F16F]={d="on"}, + [0x1F170]={d="l"}, + [0x1F171]={d="l"}, + [0x1F172]={d="l"}, + [0x1F173]={d="l"}, + [0x1F174]={d="l"}, + [0x1F175]={d="l"}, + [0x1F176]={d="l"}, + [0x1F177]={d="l"}, + [0x1F178]={d="l"}, + [0x1F179]={d="l"}, + [0x1F17A]={d="l"}, + [0x1F17B]={d="l"}, + [0x1F17C]={d="l"}, + [0x1F17D]={d="l"}, + [0x1F17E]={d="l"}, + [0x1F17F]={d="l"}, + [0x1F180]={d="l"}, + [0x1F181]={d="l"}, + [0x1F182]={d="l"}, + [0x1F183]={d="l"}, + [0x1F184]={d="l"}, + [0x1F185]={d="l"}, + [0x1F186]={d="l"}, + [0x1F187]={d="l"}, + [0x1F188]={d="l"}, + [0x1F189]={d="l"}, + [0x1F18A]={d="l"}, + [0x1F18B]={d="l"}, + [0x1F18C]={d="l"}, + [0x1F18D]={d="l"}, + [0x1F18E]={d="l"}, + [0x1F18F]={d="l"}, + [0x1F190]={d="l"}, + [0x1F191]={d="l"}, + [0x1F192]={d="l"}, + [0x1F193]={d="l"}, + [0x1F194]={d="l"}, + [0x1F195]={d="l"}, + [0x1F196]={d="l"}, + [0x1F197]={d="l"}, + [0x1F198]={d="l"}, + [0x1F199]={d="l"}, + [0x1F19A]={d="l"}, + [0x1F19B]={d="l"}, + [0x1F19C]={d="l"}, + [0x1F19D]={d="l"}, + [0x1F19E]={d="l"}, + [0x1F19F]={d="l"}, + [0x1F1A0]={d="l"}, + [0x1F1A1]={d="l"}, + [0x1F1A2]={d="l"}, + [0x1F1A3]={d="l"}, + [0x1F1A4]={d="l"}, + [0x1F1A5]={d="l"}, + [0x1F1A6]={d="l"}, + [0x1F1A7]={d="l"}, + [0x1F1A8]={d="l"}, + [0x1F1A9]={d="l"}, + [0x1F1AA]={d="l"}, + [0x1F1AB]={d="l"}, + [0x1F1AC]={d="l"}, + [0x1F1AD]={d="on"}, + [0x1F1E6]={d="l"}, + [0x1F1E7]={d="l"}, + [0x1F1E8]={d="l"}, + [0x1F1E9]={d="l"}, + [0x1F1EA]={d="l"}, + [0x1F1EB]={d="l"}, + [0x1F1EC]={d="l"}, + [0x1F1ED]={d="l"}, + [0x1F1EE]={d="l"}, + [0x1F1EF]={d="l"}, + [0x1F1F0]={d="l"}, + [0x1F1F1]={d="l"}, + [0x1F1F2]={d="l"}, + [0x1F1F3]={d="l"}, + [0x1F1F4]={d="l"}, + [0x1F1F5]={d="l"}, + [0x1F1F6]={d="l"}, + [0x1F1F7]={d="l"}, + [0x1F1F8]={d="l"}, + [0x1F1F9]={d="l"}, + [0x1F1FA]={d="l"}, + [0x1F1FB]={d="l"}, + [0x1F1FC]={d="l"}, + [0x1F1FD]={d="l"}, + [0x1F1FE]={d="l"}, + [0x1F1FF]={d="l"}, + [0x1F200]={d="l"}, + [0x1F201]={d="l"}, + [0x1F202]={d="l"}, + [0x1F210]={d="l"}, + [0x1F211]={d="l"}, + [0x1F212]={d="l"}, + [0x1F213]={d="l"}, + [0x1F214]={d="l"}, + [0x1F215]={d="l"}, + [0x1F216]={d="l"}, + [0x1F217]={d="l"}, + [0x1F218]={d="l"}, + [0x1F219]={d="l"}, + [0x1F21A]={d="l"}, + [0x1F21B]={d="l"}, + [0x1F21C]={d="l"}, + [0x1F21D]={d="l"}, + [0x1F21E]={d="l"}, + [0x1F21F]={d="l"}, + [0x1F220]={d="l"}, + [0x1F221]={d="l"}, + [0x1F222]={d="l"}, + [0x1F223]={d="l"}, + [0x1F224]={d="l"}, + [0x1F225]={d="l"}, + [0x1F226]={d="l"}, + [0x1F227]={d="l"}, + [0x1F228]={d="l"}, + [0x1F229]={d="l"}, + [0x1F22A]={d="l"}, + [0x1F22B]={d="l"}, + [0x1F22C]={d="l"}, + [0x1F22D]={d="l"}, + [0x1F22E]={d="l"}, + [0x1F22F]={d="l"}, + [0x1F230]={d="l"}, + [0x1F231]={d="l"}, + [0x1F232]={d="l"}, + [0x1F233]={d="l"}, + [0x1F234]={d="l"}, + [0x1F235]={d="l"}, + [0x1F236]={d="l"}, + [0x1F237]={d="l"}, + [0x1F238]={d="l"}, + [0x1F239]={d="l"}, + [0x1F23A]={d="l"}, + [0x1F23B]={d="l"}, + [0x1F240]={d="l"}, + [0x1F241]={d="l"}, + [0x1F242]={d="l"}, + [0x1F243]={d="l"}, + [0x1F244]={d="l"}, + [0x1F245]={d="l"}, + [0x1F246]={d="l"}, + [0x1F247]={d="l"}, + [0x1F248]={d="l"}, + [0x1F250]={d="l"}, + [0x1F251]={d="l"}, + [0x1F260]={d="on"}, + [0x1F261]={d="on"}, + [0x1F262]={d="on"}, + [0x1F263]={d="on"}, + [0x1F264]={d="on"}, + [0x1F265]={d="on"}, + [0x1F300]={d="on"}, + [0x1F301]={d="on"}, + [0x1F302]={d="on"}, + [0x1F303]={d="on"}, + [0x1F304]={d="on"}, + [0x1F305]={d="on"}, + [0x1F306]={d="on"}, + [0x1F307]={d="on"}, + [0x1F308]={d="on"}, + [0x1F309]={d="on"}, + [0x1F30A]={d="on"}, + [0x1F30B]={d="on"}, + [0x1F30C]={d="on"}, + [0x1F30D]={d="on"}, + [0x1F30E]={d="on"}, + [0x1F30F]={d="on"}, + [0x1F310]={d="on"}, + [0x1F311]={d="on"}, + [0x1F312]={d="on"}, + [0x1F313]={d="on"}, + [0x1F314]={d="on"}, + [0x1F315]={d="on"}, + [0x1F316]={d="on"}, + [0x1F317]={d="on"}, + [0x1F318]={d="on"}, + [0x1F319]={d="on"}, + [0x1F31A]={d="on"}, + [0x1F31B]={d="on"}, + [0x1F31C]={d="on"}, + [0x1F31D]={d="on"}, + [0x1F31E]={d="on"}, + [0x1F31F]={d="on"}, + [0x1F320]={d="on"}, + [0x1F321]={d="on"}, + [0x1F322]={d="on"}, + [0x1F323]={d="on"}, + [0x1F324]={d="on"}, + [0x1F325]={d="on"}, + [0x1F326]={d="on"}, + [0x1F327]={d="on"}, + [0x1F328]={d="on"}, + [0x1F329]={d="on"}, + [0x1F32A]={d="on"}, + [0x1F32B]={d="on"}, + [0x1F32C]={d="on"}, + [0x1F32D]={d="on"}, + [0x1F32E]={d="on"}, + [0x1F32F]={d="on"}, + [0x1F330]={d="on"}, + [0x1F331]={d="on"}, + [0x1F332]={d="on"}, + [0x1F333]={d="on"}, + [0x1F334]={d="on"}, + [0x1F335]={d="on"}, + [0x1F336]={d="on"}, + [0x1F337]={d="on"}, + [0x1F338]={d="on"}, + [0x1F339]={d="on"}, + [0x1F33A]={d="on"}, + [0x1F33B]={d="on"}, + [0x1F33C]={d="on"}, + [0x1F33D]={d="on"}, + [0x1F33E]={d="on"}, + [0x1F33F]={d="on"}, + [0x1F340]={d="on"}, + [0x1F341]={d="on"}, + [0x1F342]={d="on"}, + [0x1F343]={d="on"}, + [0x1F344]={d="on"}, + [0x1F345]={d="on"}, + [0x1F346]={d="on"}, + [0x1F347]={d="on"}, + [0x1F348]={d="on"}, + [0x1F349]={d="on"}, + [0x1F34A]={d="on"}, + [0x1F34B]={d="on"}, + [0x1F34C]={d="on"}, + [0x1F34D]={d="on"}, + [0x1F34E]={d="on"}, + [0x1F34F]={d="on"}, + [0x1F350]={d="on"}, + [0x1F351]={d="on"}, + [0x1F352]={d="on"}, + [0x1F353]={d="on"}, + [0x1F354]={d="on"}, + [0x1F355]={d="on"}, + [0x1F356]={d="on"}, + [0x1F357]={d="on"}, + [0x1F358]={d="on"}, + [0x1F359]={d="on"}, + [0x1F35A]={d="on"}, + [0x1F35B]={d="on"}, + [0x1F35C]={d="on"}, + [0x1F35D]={d="on"}, + [0x1F35E]={d="on"}, + [0x1F35F]={d="on"}, + [0x1F360]={d="on"}, + [0x1F361]={d="on"}, + [0x1F362]={d="on"}, + [0x1F363]={d="on"}, + [0x1F364]={d="on"}, + [0x1F365]={d="on"}, + [0x1F366]={d="on"}, + [0x1F367]={d="on"}, + [0x1F368]={d="on"}, + [0x1F369]={d="on"}, + [0x1F36A]={d="on"}, + [0x1F36B]={d="on"}, + [0x1F36C]={d="on"}, + [0x1F36D]={d="on"}, + [0x1F36E]={d="on"}, + [0x1F36F]={d="on"}, + [0x1F370]={d="on"}, + [0x1F371]={d="on"}, + [0x1F372]={d="on"}, + [0x1F373]={d="on"}, + [0x1F374]={d="on"}, + [0x1F375]={d="on"}, + [0x1F376]={d="on"}, + [0x1F377]={d="on"}, + [0x1F378]={d="on"}, + [0x1F379]={d="on"}, + [0x1F37A]={d="on"}, + [0x1F37B]={d="on"}, + [0x1F37C]={d="on"}, + [0x1F37D]={d="on"}, + [0x1F37E]={d="on"}, + [0x1F37F]={d="on"}, + [0x1F380]={d="on"}, + [0x1F381]={d="on"}, + [0x1F382]={d="on"}, + [0x1F383]={d="on"}, + [0x1F384]={d="on"}, + [0x1F385]={d="on"}, + [0x1F386]={d="on"}, + [0x1F387]={d="on"}, + [0x1F388]={d="on"}, + [0x1F389]={d="on"}, + [0x1F38A]={d="on"}, + [0x1F38B]={d="on"}, + [0x1F38C]={d="on"}, + [0x1F38D]={d="on"}, + [0x1F38E]={d="on"}, + [0x1F38F]={d="on"}, + [0x1F390]={d="on"}, + [0x1F391]={d="on"}, + [0x1F392]={d="on"}, + [0x1F393]={d="on"}, + [0x1F394]={d="on"}, + [0x1F395]={d="on"}, + [0x1F396]={d="on"}, + [0x1F397]={d="on"}, + [0x1F398]={d="on"}, + [0x1F399]={d="on"}, + [0x1F39A]={d="on"}, + [0x1F39B]={d="on"}, + [0x1F39C]={d="on"}, + [0x1F39D]={d="on"}, + [0x1F39E]={d="on"}, + [0x1F39F]={d="on"}, + [0x1F3A0]={d="on"}, + [0x1F3A1]={d="on"}, + [0x1F3A2]={d="on"}, + [0x1F3A3]={d="on"}, + [0x1F3A4]={d="on"}, + [0x1F3A5]={d="on"}, + [0x1F3A6]={d="on"}, + [0x1F3A7]={d="on"}, + [0x1F3A8]={d="on"}, + [0x1F3A9]={d="on"}, + [0x1F3AA]={d="on"}, + [0x1F3AB]={d="on"}, + [0x1F3AC]={d="on"}, + [0x1F3AD]={d="on"}, + [0x1F3AE]={d="on"}, + [0x1F3AF]={d="on"}, + [0x1F3B0]={d="on"}, + [0x1F3B1]={d="on"}, + [0x1F3B2]={d="on"}, + [0x1F3B3]={d="on"}, + [0x1F3B4]={d="on"}, + [0x1F3B5]={d="on"}, + [0x1F3B6]={d="on"}, + [0x1F3B7]={d="on"}, + [0x1F3B8]={d="on"}, + [0x1F3B9]={d="on"}, + [0x1F3BA]={d="on"}, + [0x1F3BB]={d="on"}, + [0x1F3BC]={d="on"}, + [0x1F3BD]={d="on"}, + [0x1F3BE]={d="on"}, + [0x1F3BF]={d="on"}, + [0x1F3C0]={d="on"}, + [0x1F3C1]={d="on"}, + [0x1F3C2]={d="on"}, + [0x1F3C3]={d="on"}, + [0x1F3C4]={d="on"}, + [0x1F3C5]={d="on"}, + [0x1F3C6]={d="on"}, + [0x1F3C7]={d="on"}, + [0x1F3C8]={d="on"}, + [0x1F3C9]={d="on"}, + [0x1F3CA]={d="on"}, + [0x1F3CB]={d="on"}, + [0x1F3CC]={d="on"}, + [0x1F3CD]={d="on"}, + [0x1F3CE]={d="on"}, + [0x1F3CF]={d="on"}, + [0x1F3D0]={d="on"}, + [0x1F3D1]={d="on"}, + [0x1F3D2]={d="on"}, + [0x1F3D3]={d="on"}, + [0x1F3D4]={d="on"}, + [0x1F3D5]={d="on"}, + [0x1F3D6]={d="on"}, + [0x1F3D7]={d="on"}, + [0x1F3D8]={d="on"}, + [0x1F3D9]={d="on"}, + [0x1F3DA]={d="on"}, + [0x1F3DB]={d="on"}, + [0x1F3DC]={d="on"}, + [0x1F3DD]={d="on"}, + [0x1F3DE]={d="on"}, + [0x1F3DF]={d="on"}, + [0x1F3E0]={d="on"}, + [0x1F3E1]={d="on"}, + [0x1F3E2]={d="on"}, + [0x1F3E3]={d="on"}, + [0x1F3E4]={d="on"}, + [0x1F3E5]={d="on"}, + [0x1F3E6]={d="on"}, + [0x1F3E7]={d="on"}, + [0x1F3E8]={d="on"}, + [0x1F3E9]={d="on"}, + [0x1F3EA]={d="on"}, + [0x1F3EB]={d="on"}, + [0x1F3EC]={d="on"}, + [0x1F3ED]={d="on"}, + [0x1F3EE]={d="on"}, + [0x1F3EF]={d="on"}, + [0x1F3F0]={d="on"}, + [0x1F3F1]={d="on"}, + [0x1F3F2]={d="on"}, + [0x1F3F3]={d="on"}, + [0x1F3F4]={d="on"}, + [0x1F3F5]={d="on"}, + [0x1F3F6]={d="on"}, + [0x1F3F7]={d="on"}, + [0x1F3F8]={d="on"}, + [0x1F3F9]={d="on"}, + [0x1F3FA]={d="on"}, + [0x1F3FB]={d="on"}, + [0x1F3FC]={d="on"}, + [0x1F3FD]={d="on"}, + [0x1F3FE]={d="on"}, + [0x1F3FF]={d="on"}, + [0x1F400]={d="on"}, + [0x1F401]={d="on"}, + [0x1F402]={d="on"}, + [0x1F403]={d="on"}, + [0x1F404]={d="on"}, + [0x1F405]={d="on"}, + [0x1F406]={d="on"}, + [0x1F407]={d="on"}, + [0x1F408]={d="on"}, + [0x1F409]={d="on"}, + [0x1F40A]={d="on"}, + [0x1F40B]={d="on"}, + [0x1F40C]={d="on"}, + [0x1F40D]={d="on"}, + [0x1F40E]={d="on"}, + [0x1F40F]={d="on"}, + [0x1F410]={d="on"}, + [0x1F411]={d="on"}, + [0x1F412]={d="on"}, + [0x1F413]={d="on"}, + [0x1F414]={d="on"}, + [0x1F415]={d="on"}, + [0x1F416]={d="on"}, + [0x1F417]={d="on"}, + [0x1F418]={d="on"}, + [0x1F419]={d="on"}, + [0x1F41A]={d="on"}, + [0x1F41B]={d="on"}, + [0x1F41C]={d="on"}, + [0x1F41D]={d="on"}, + [0x1F41E]={d="on"}, + [0x1F41F]={d="on"}, + [0x1F420]={d="on"}, + [0x1F421]={d="on"}, + [0x1F422]={d="on"}, + [0x1F423]={d="on"}, + [0x1F424]={d="on"}, + [0x1F425]={d="on"}, + [0x1F426]={d="on"}, + [0x1F427]={d="on"}, + [0x1F428]={d="on"}, + [0x1F429]={d="on"}, + [0x1F42A]={d="on"}, + [0x1F42B]={d="on"}, + [0x1F42C]={d="on"}, + [0x1F42D]={d="on"}, + [0x1F42E]={d="on"}, + [0x1F42F]={d="on"}, + [0x1F430]={d="on"}, + [0x1F431]={d="on"}, + [0x1F432]={d="on"}, + [0x1F433]={d="on"}, + [0x1F434]={d="on"}, + [0x1F435]={d="on"}, + [0x1F436]={d="on"}, + [0x1F437]={d="on"}, + [0x1F438]={d="on"}, + [0x1F439]={d="on"}, + [0x1F43A]={d="on"}, + [0x1F43B]={d="on"}, + [0x1F43C]={d="on"}, + [0x1F43D]={d="on"}, + [0x1F43E]={d="on"}, + [0x1F43F]={d="on"}, + [0x1F440]={d="on"}, + [0x1F441]={d="on"}, + [0x1F442]={d="on"}, + [0x1F443]={d="on"}, + [0x1F444]={d="on"}, + [0x1F445]={d="on"}, + [0x1F446]={d="on"}, + [0x1F447]={d="on"}, + [0x1F448]={d="on"}, + [0x1F449]={d="on"}, + [0x1F44A]={d="on"}, + [0x1F44B]={d="on"}, + [0x1F44C]={d="on"}, + [0x1F44D]={d="on"}, + [0x1F44E]={d="on"}, + [0x1F44F]={d="on"}, + [0x1F450]={d="on"}, + [0x1F451]={d="on"}, + [0x1F452]={d="on"}, + [0x1F453]={d="on"}, + [0x1F454]={d="on"}, + [0x1F455]={d="on"}, + [0x1F456]={d="on"}, + [0x1F457]={d="on"}, + [0x1F458]={d="on"}, + [0x1F459]={d="on"}, + [0x1F45A]={d="on"}, + [0x1F45B]={d="on"}, + [0x1F45C]={d="on"}, + [0x1F45D]={d="on"}, + [0x1F45E]={d="on"}, + [0x1F45F]={d="on"}, + [0x1F460]={d="on"}, + [0x1F461]={d="on"}, + [0x1F462]={d="on"}, + [0x1F463]={d="on"}, + [0x1F464]={d="on"}, + [0x1F465]={d="on"}, + [0x1F466]={d="on"}, + [0x1F467]={d="on"}, + [0x1F468]={d="on"}, + [0x1F469]={d="on"}, + [0x1F46A]={d="on"}, + [0x1F46B]={d="on"}, + [0x1F46C]={d="on"}, + [0x1F46D]={d="on"}, + [0x1F46E]={d="on"}, + [0x1F46F]={d="on"}, + [0x1F470]={d="on"}, + [0x1F471]={d="on"}, + [0x1F472]={d="on"}, + [0x1F473]={d="on"}, + [0x1F474]={d="on"}, + [0x1F475]={d="on"}, + [0x1F476]={d="on"}, + [0x1F477]={d="on"}, + [0x1F478]={d="on"}, + [0x1F479]={d="on"}, + [0x1F47A]={d="on"}, + [0x1F47B]={d="on"}, + [0x1F47C]={d="on"}, + [0x1F47D]={d="on"}, + [0x1F47E]={d="on"}, + [0x1F47F]={d="on"}, + [0x1F480]={d="on"}, + [0x1F481]={d="on"}, + [0x1F482]={d="on"}, + [0x1F483]={d="on"}, + [0x1F484]={d="on"}, + [0x1F485]={d="on"}, + [0x1F486]={d="on"}, + [0x1F487]={d="on"}, + [0x1F488]={d="on"}, + [0x1F489]={d="on"}, + [0x1F48A]={d="on"}, + [0x1F48B]={d="on"}, + [0x1F48C]={d="on"}, + [0x1F48D]={d="on"}, + [0x1F48E]={d="on"}, + [0x1F48F]={d="on"}, + [0x1F490]={d="on"}, + [0x1F491]={d="on"}, + [0x1F492]={d="on"}, + [0x1F493]={d="on"}, + [0x1F494]={d="on"}, + [0x1F495]={d="on"}, + [0x1F496]={d="on"}, + [0x1F497]={d="on"}, + [0x1F498]={d="on"}, + [0x1F499]={d="on"}, + [0x1F49A]={d="on"}, + [0x1F49B]={d="on"}, + [0x1F49C]={d="on"}, + [0x1F49D]={d="on"}, + [0x1F49E]={d="on"}, + [0x1F49F]={d="on"}, + [0x1F4A0]={d="on"}, + [0x1F4A1]={d="on"}, + [0x1F4A2]={d="on"}, + [0x1F4A3]={d="on"}, + [0x1F4A4]={d="on"}, + [0x1F4A5]={d="on"}, + [0x1F4A6]={d="on"}, + [0x1F4A7]={d="on"}, + [0x1F4A8]={d="on"}, + [0x1F4A9]={d="on"}, + [0x1F4AA]={d="on"}, + [0x1F4AB]={d="on"}, + [0x1F4AC]={d="on"}, + [0x1F4AD]={d="on"}, + [0x1F4AE]={d="on"}, + [0x1F4AF]={d="on"}, + [0x1F4B0]={d="on"}, + [0x1F4B1]={d="on"}, + [0x1F4B2]={d="on"}, + [0x1F4B3]={d="on"}, + [0x1F4B4]={d="on"}, + [0x1F4B5]={d="on"}, + [0x1F4B6]={d="on"}, + [0x1F4B7]={d="on"}, + [0x1F4B8]={d="on"}, + [0x1F4B9]={d="on"}, + [0x1F4BA]={d="on"}, + [0x1F4BB]={d="on"}, + [0x1F4BC]={d="on"}, + [0x1F4BD]={d="on"}, + [0x1F4BE]={d="on"}, + [0x1F4BF]={d="on"}, + [0x1F4C0]={d="on"}, + [0x1F4C1]={d="on"}, + [0x1F4C2]={d="on"}, + [0x1F4C3]={d="on"}, + [0x1F4C4]={d="on"}, + [0x1F4C5]={d="on"}, + [0x1F4C6]={d="on"}, + [0x1F4C7]={d="on"}, + [0x1F4C8]={d="on"}, + [0x1F4C9]={d="on"}, + [0x1F4CA]={d="on"}, + [0x1F4CB]={d="on"}, + [0x1F4CC]={d="on"}, + [0x1F4CD]={d="on"}, + [0x1F4CE]={d="on"}, + [0x1F4CF]={d="on"}, + [0x1F4D0]={d="on"}, + [0x1F4D1]={d="on"}, + [0x1F4D2]={d="on"}, + [0x1F4D3]={d="on"}, + [0x1F4D4]={d="on"}, + [0x1F4D5]={d="on"}, + [0x1F4D6]={d="on"}, + [0x1F4D7]={d="on"}, + [0x1F4D8]={d="on"}, + [0x1F4D9]={d="on"}, + [0x1F4DA]={d="on"}, + [0x1F4DB]={d="on"}, + [0x1F4DC]={d="on"}, + [0x1F4DD]={d="on"}, + [0x1F4DE]={d="on"}, + [0x1F4DF]={d="on"}, + [0x1F4E0]={d="on"}, + [0x1F4E1]={d="on"}, + [0x1F4E2]={d="on"}, + [0x1F4E3]={d="on"}, + [0x1F4E4]={d="on"}, + [0x1F4E5]={d="on"}, + [0x1F4E6]={d="on"}, + [0x1F4E7]={d="on"}, + [0x1F4E8]={d="on"}, + [0x1F4E9]={d="on"}, + [0x1F4EA]={d="on"}, + [0x1F4EB]={d="on"}, + [0x1F4EC]={d="on"}, + [0x1F4ED]={d="on"}, + [0x1F4EE]={d="on"}, + [0x1F4EF]={d="on"}, + [0x1F4F0]={d="on"}, + [0x1F4F1]={d="on"}, + [0x1F4F2]={d="on"}, + [0x1F4F3]={d="on"}, + [0x1F4F4]={d="on"}, + [0x1F4F5]={d="on"}, + [0x1F4F6]={d="on"}, + [0x1F4F7]={d="on"}, + [0x1F4F8]={d="on"}, + [0x1F4F9]={d="on"}, + [0x1F4FA]={d="on"}, + [0x1F4FB]={d="on"}, + [0x1F4FC]={d="on"}, + [0x1F4FD]={d="on"}, + [0x1F4FE]={d="on"}, + [0x1F4FF]={d="on"}, + [0x1F500]={d="on"}, + [0x1F501]={d="on"}, + [0x1F502]={d="on"}, + [0x1F503]={d="on"}, + [0x1F504]={d="on"}, + [0x1F505]={d="on"}, + [0x1F506]={d="on"}, + [0x1F507]={d="on"}, + [0x1F508]={d="on"}, + [0x1F509]={d="on"}, + [0x1F50A]={d="on"}, + [0x1F50B]={d="on"}, + [0x1F50C]={d="on"}, + [0x1F50D]={d="on"}, + [0x1F50E]={d="on"}, + [0x1F50F]={d="on"}, + [0x1F510]={d="on"}, + [0x1F511]={d="on"}, + [0x1F512]={d="on"}, + [0x1F513]={d="on"}, + [0x1F514]={d="on"}, + [0x1F515]={d="on"}, + [0x1F516]={d="on"}, + [0x1F517]={d="on"}, + [0x1F518]={d="on"}, + [0x1F519]={d="on"}, + [0x1F51A]={d="on"}, + [0x1F51B]={d="on"}, + [0x1F51C]={d="on"}, + [0x1F51D]={d="on"}, + [0x1F51E]={d="on"}, + [0x1F51F]={d="on"}, + [0x1F520]={d="on"}, + [0x1F521]={d="on"}, + [0x1F522]={d="on"}, + [0x1F523]={d="on"}, + [0x1F524]={d="on"}, + [0x1F525]={d="on"}, + [0x1F526]={d="on"}, + [0x1F527]={d="on"}, + [0x1F528]={d="on"}, + [0x1F529]={d="on"}, + [0x1F52A]={d="on"}, + [0x1F52B]={d="on"}, + [0x1F52C]={d="on"}, + [0x1F52D]={d="on"}, + [0x1F52E]={d="on"}, + [0x1F52F]={d="on"}, + [0x1F530]={d="on"}, + [0x1F531]={d="on"}, + [0x1F532]={d="on"}, + [0x1F533]={d="on"}, + [0x1F534]={d="on"}, + [0x1F535]={d="on"}, + [0x1F536]={d="on"}, + [0x1F537]={d="on"}, + [0x1F538]={d="on"}, + [0x1F539]={d="on"}, + [0x1F53A]={d="on"}, + [0x1F53B]={d="on"}, + [0x1F53C]={d="on"}, + [0x1F53D]={d="on"}, + [0x1F53E]={d="on"}, + [0x1F53F]={d="on"}, + [0x1F540]={d="on"}, + [0x1F541]={d="on"}, + [0x1F542]={d="on"}, + [0x1F543]={d="on"}, + [0x1F544]={d="on"}, + [0x1F545]={d="on"}, + [0x1F546]={d="on"}, + [0x1F547]={d="on"}, + [0x1F548]={d="on"}, + [0x1F549]={d="on"}, + [0x1F54A]={d="on"}, + [0x1F54B]={d="on"}, + [0x1F54C]={d="on"}, + [0x1F54D]={d="on"}, + [0x1F54E]={d="on"}, + [0x1F54F]={d="on"}, + [0x1F550]={d="on"}, + [0x1F551]={d="on"}, + [0x1F552]={d="on"}, + [0x1F553]={d="on"}, + [0x1F554]={d="on"}, + [0x1F555]={d="on"}, + [0x1F556]={d="on"}, + [0x1F557]={d="on"}, + [0x1F558]={d="on"}, + [0x1F559]={d="on"}, + [0x1F55A]={d="on"}, + [0x1F55B]={d="on"}, + [0x1F55C]={d="on"}, + [0x1F55D]={d="on"}, + [0x1F55E]={d="on"}, + [0x1F55F]={d="on"}, + [0x1F560]={d="on"}, + [0x1F561]={d="on"}, + [0x1F562]={d="on"}, + [0x1F563]={d="on"}, + [0x1F564]={d="on"}, + [0x1F565]={d="on"}, + [0x1F566]={d="on"}, + [0x1F567]={d="on"}, + [0x1F568]={d="on"}, + [0x1F569]={d="on"}, + [0x1F56A]={d="on"}, + [0x1F56B]={d="on"}, + [0x1F56C]={d="on"}, + [0x1F56D]={d="on"}, + [0x1F56E]={d="on"}, + [0x1F56F]={d="on"}, + [0x1F570]={d="on"}, + [0x1F571]={d="on"}, + [0x1F572]={d="on"}, + [0x1F573]={d="on"}, + [0x1F574]={d="on"}, + [0x1F575]={d="on"}, + [0x1F576]={d="on"}, + [0x1F577]={d="on"}, + [0x1F578]={d="on"}, + [0x1F579]={d="on"}, + [0x1F57A]={d="on"}, + [0x1F57B]={d="on"}, + [0x1F57C]={d="on"}, + [0x1F57D]={d="on"}, + [0x1F57E]={d="on"}, + [0x1F57F]={d="on"}, + [0x1F580]={d="on"}, + [0x1F581]={d="on"}, + [0x1F582]={d="on"}, + [0x1F583]={d="on"}, + [0x1F584]={d="on"}, + [0x1F585]={d="on"}, + [0x1F586]={d="on"}, + [0x1F587]={d="on"}, + [0x1F588]={d="on"}, + [0x1F589]={d="on"}, + [0x1F58A]={d="on"}, + [0x1F58B]={d="on"}, + [0x1F58C]={d="on"}, + [0x1F58D]={d="on"}, + [0x1F58E]={d="on"}, + [0x1F58F]={d="on"}, + [0x1F590]={d="on"}, + [0x1F591]={d="on"}, + [0x1F592]={d="on"}, + [0x1F593]={d="on"}, + [0x1F594]={d="on"}, + [0x1F595]={d="on"}, + [0x1F596]={d="on"}, + [0x1F597]={d="on"}, + [0x1F598]={d="on"}, + [0x1F599]={d="on"}, + [0x1F59A]={d="on"}, + [0x1F59B]={d="on"}, + [0x1F59C]={d="on"}, + [0x1F59D]={d="on"}, + [0x1F59E]={d="on"}, + [0x1F59F]={d="on"}, + [0x1F5A0]={d="on"}, + [0x1F5A1]={d="on"}, + [0x1F5A2]={d="on"}, + [0x1F5A3]={d="on"}, + [0x1F5A4]={d="on"}, + [0x1F5A5]={d="on"}, + [0x1F5A6]={d="on"}, + [0x1F5A7]={d="on"}, + [0x1F5A8]={d="on"}, + [0x1F5A9]={d="on"}, + [0x1F5AA]={d="on"}, + [0x1F5AB]={d="on"}, + [0x1F5AC]={d="on"}, + [0x1F5AD]={d="on"}, + [0x1F5AE]={d="on"}, + [0x1F5AF]={d="on"}, + [0x1F5B0]={d="on"}, + [0x1F5B1]={d="on"}, + [0x1F5B2]={d="on"}, + [0x1F5B3]={d="on"}, + [0x1F5B4]={d="on"}, + [0x1F5B5]={d="on"}, + [0x1F5B6]={d="on"}, + [0x1F5B7]={d="on"}, + [0x1F5B8]={d="on"}, + [0x1F5B9]={d="on"}, + [0x1F5BA]={d="on"}, + [0x1F5BB]={d="on"}, + [0x1F5BC]={d="on"}, + [0x1F5BD]={d="on"}, + [0x1F5BE]={d="on"}, + [0x1F5BF]={d="on"}, + [0x1F5C0]={d="on"}, + [0x1F5C1]={d="on"}, + [0x1F5C2]={d="on"}, + [0x1F5C3]={d="on"}, + [0x1F5C4]={d="on"}, + [0x1F5C5]={d="on"}, + [0x1F5C6]={d="on"}, + [0x1F5C7]={d="on"}, + [0x1F5C8]={d="on"}, + [0x1F5C9]={d="on"}, + [0x1F5CA]={d="on"}, + [0x1F5CB]={d="on"}, + [0x1F5CC]={d="on"}, + [0x1F5CD]={d="on"}, + [0x1F5CE]={d="on"}, + [0x1F5CF]={d="on"}, + [0x1F5D0]={d="on"}, + [0x1F5D1]={d="on"}, + [0x1F5D2]={d="on"}, + [0x1F5D3]={d="on"}, + [0x1F5D4]={d="on"}, + [0x1F5D5]={d="on"}, + [0x1F5D6]={d="on"}, + [0x1F5D7]={d="on"}, + [0x1F5D8]={d="on"}, + [0x1F5D9]={d="on"}, + [0x1F5DA]={d="on"}, + [0x1F5DB]={d="on"}, + [0x1F5DC]={d="on"}, + [0x1F5DD]={d="on"}, + [0x1F5DE]={d="on"}, + [0x1F5DF]={d="on"}, + [0x1F5E0]={d="on"}, + [0x1F5E1]={d="on"}, + [0x1F5E2]={d="on"}, + [0x1F5E3]={d="on"}, + [0x1F5E4]={d="on"}, + [0x1F5E5]={d="on"}, + [0x1F5E6]={d="on"}, + [0x1F5E7]={d="on"}, + [0x1F5E8]={d="on"}, + [0x1F5E9]={d="on"}, + [0x1F5EA]={d="on"}, + [0x1F5EB]={d="on"}, + [0x1F5EC]={d="on"}, + [0x1F5ED]={d="on"}, + [0x1F5EE]={d="on"}, + [0x1F5EF]={d="on"}, + [0x1F5F0]={d="on"}, + [0x1F5F1]={d="on"}, + [0x1F5F2]={d="on"}, + [0x1F5F3]={d="on"}, + [0x1F5F4]={d="on"}, + [0x1F5F5]={d="on"}, + [0x1F5F6]={d="on"}, + [0x1F5F7]={d="on"}, + [0x1F5F8]={d="on"}, + [0x1F5F9]={d="on"}, + [0x1F5FA]={d="on"}, + [0x1F5FB]={d="on"}, + [0x1F5FC]={d="on"}, + [0x1F5FD]={d="on"}, + [0x1F5FE]={d="on"}, + [0x1F5FF]={d="on"}, + [0x1F600]={d="on"}, + [0x1F601]={d="on"}, + [0x1F602]={d="on"}, + [0x1F603]={d="on"}, + [0x1F604]={d="on"}, + [0x1F605]={d="on"}, + [0x1F606]={d="on"}, + [0x1F607]={d="on"}, + [0x1F608]={d="on"}, + [0x1F609]={d="on"}, + [0x1F60A]={d="on"}, + [0x1F60B]={d="on"}, + [0x1F60C]={d="on"}, + [0x1F60D]={d="on"}, + [0x1F60E]={d="on"}, + [0x1F60F]={d="on"}, + [0x1F610]={d="on"}, + [0x1F611]={d="on"}, + [0x1F612]={d="on"}, + [0x1F613]={d="on"}, + [0x1F614]={d="on"}, + [0x1F615]={d="on"}, + [0x1F616]={d="on"}, + [0x1F617]={d="on"}, + [0x1F618]={d="on"}, + [0x1F619]={d="on"}, + [0x1F61A]={d="on"}, + [0x1F61B]={d="on"}, + [0x1F61C]={d="on"}, + [0x1F61D]={d="on"}, + [0x1F61E]={d="on"}, + [0x1F61F]={d="on"}, + [0x1F620]={d="on"}, + [0x1F621]={d="on"}, + [0x1F622]={d="on"}, + [0x1F623]={d="on"}, + [0x1F624]={d="on"}, + [0x1F625]={d="on"}, + [0x1F626]={d="on"}, + [0x1F627]={d="on"}, + [0x1F628]={d="on"}, + [0x1F629]={d="on"}, + [0x1F62A]={d="on"}, + [0x1F62B]={d="on"}, + [0x1F62C]={d="on"}, + [0x1F62D]={d="on"}, + [0x1F62E]={d="on"}, + [0x1F62F]={d="on"}, + [0x1F630]={d="on"}, + [0x1F631]={d="on"}, + [0x1F632]={d="on"}, + [0x1F633]={d="on"}, + [0x1F634]={d="on"}, + [0x1F635]={d="on"}, + [0x1F636]={d="on"}, + [0x1F637]={d="on"}, + [0x1F638]={d="on"}, + [0x1F639]={d="on"}, + [0x1F63A]={d="on"}, + [0x1F63B]={d="on"}, + [0x1F63C]={d="on"}, + [0x1F63D]={d="on"}, + [0x1F63E]={d="on"}, + [0x1F63F]={d="on"}, + [0x1F640]={d="on"}, + [0x1F641]={d="on"}, + [0x1F642]={d="on"}, + [0x1F643]={d="on"}, + [0x1F644]={d="on"}, + [0x1F645]={d="on"}, + [0x1F646]={d="on"}, + [0x1F647]={d="on"}, + [0x1F648]={d="on"}, + [0x1F649]={d="on"}, + [0x1F64A]={d="on"}, + [0x1F64B]={d="on"}, + [0x1F64C]={d="on"}, + [0x1F64D]={d="on"}, + [0x1F64E]={d="on"}, + [0x1F64F]={d="on"}, + [0x1F650]={d="on"}, + [0x1F651]={d="on"}, + [0x1F652]={d="on"}, + [0x1F653]={d="on"}, + [0x1F654]={d="on"}, + [0x1F655]={d="on"}, + [0x1F656]={d="on"}, + [0x1F657]={d="on"}, + [0x1F658]={d="on"}, + [0x1F659]={d="on"}, + [0x1F65A]={d="on"}, + [0x1F65B]={d="on"}, + [0x1F65C]={d="on"}, + [0x1F65D]={d="on"}, + [0x1F65E]={d="on"}, + [0x1F65F]={d="on"}, + [0x1F660]={d="on"}, + [0x1F661]={d="on"}, + [0x1F662]={d="on"}, + [0x1F663]={d="on"}, + [0x1F664]={d="on"}, + [0x1F665]={d="on"}, + [0x1F666]={d="on"}, + [0x1F667]={d="on"}, + [0x1F668]={d="on"}, + [0x1F669]={d="on"}, + [0x1F66A]={d="on"}, + [0x1F66B]={d="on"}, + [0x1F66C]={d="on"}, + [0x1F66D]={d="on"}, + [0x1F66E]={d="on"}, + [0x1F66F]={d="on"}, + [0x1F670]={d="on"}, + [0x1F671]={d="on"}, + [0x1F672]={d="on"}, + [0x1F673]={d="on"}, + [0x1F674]={d="on"}, + [0x1F675]={d="on"}, + [0x1F676]={d="on"}, + [0x1F677]={d="on"}, + [0x1F678]={d="on"}, + [0x1F679]={d="on"}, + [0x1F67A]={d="on"}, + [0x1F67B]={d="on"}, + [0x1F67C]={d="on"}, + [0x1F67D]={d="on"}, + [0x1F67E]={d="on"}, + [0x1F67F]={d="on"}, + [0x1F680]={d="on"}, + [0x1F681]={d="on"}, + [0x1F682]={d="on"}, + [0x1F683]={d="on"}, + [0x1F684]={d="on"}, + [0x1F685]={d="on"}, + [0x1F686]={d="on"}, + [0x1F687]={d="on"}, + [0x1F688]={d="on"}, + [0x1F689]={d="on"}, + [0x1F68A]={d="on"}, + [0x1F68B]={d="on"}, + [0x1F68C]={d="on"}, + [0x1F68D]={d="on"}, + [0x1F68E]={d="on"}, + [0x1F68F]={d="on"}, + [0x1F690]={d="on"}, + [0x1F691]={d="on"}, + [0x1F692]={d="on"}, + [0x1F693]={d="on"}, + [0x1F694]={d="on"}, + [0x1F695]={d="on"}, + [0x1F696]={d="on"}, + [0x1F697]={d="on"}, + [0x1F698]={d="on"}, + [0x1F699]={d="on"}, + [0x1F69A]={d="on"}, + [0x1F69B]={d="on"}, + [0x1F69C]={d="on"}, + [0x1F69D]={d="on"}, + [0x1F69E]={d="on"}, + [0x1F69F]={d="on"}, + [0x1F6A0]={d="on"}, + [0x1F6A1]={d="on"}, + [0x1F6A2]={d="on"}, + [0x1F6A3]={d="on"}, + [0x1F6A4]={d="on"}, + [0x1F6A5]={d="on"}, + [0x1F6A6]={d="on"}, + [0x1F6A7]={d="on"}, + [0x1F6A8]={d="on"}, + [0x1F6A9]={d="on"}, + [0x1F6AA]={d="on"}, + [0x1F6AB]={d="on"}, + [0x1F6AC]={d="on"}, + [0x1F6AD]={d="on"}, + [0x1F6AE]={d="on"}, + [0x1F6AF]={d="on"}, + [0x1F6B0]={d="on"}, + [0x1F6B1]={d="on"}, + [0x1F6B2]={d="on"}, + [0x1F6B3]={d="on"}, + [0x1F6B4]={d="on"}, + [0x1F6B5]={d="on"}, + [0x1F6B6]={d="on"}, + [0x1F6B7]={d="on"}, + [0x1F6B8]={d="on"}, + [0x1F6B9]={d="on"}, + [0x1F6BA]={d="on"}, + [0x1F6BB]={d="on"}, + [0x1F6BC]={d="on"}, + [0x1F6BD]={d="on"}, + [0x1F6BE]={d="on"}, + [0x1F6BF]={d="on"}, + [0x1F6C0]={d="on"}, + [0x1F6C1]={d="on"}, + [0x1F6C2]={d="on"}, + [0x1F6C3]={d="on"}, + [0x1F6C4]={d="on"}, + [0x1F6C5]={d="on"}, + [0x1F6C6]={d="on"}, + [0x1F6C7]={d="on"}, + [0x1F6C8]={d="on"}, + [0x1F6C9]={d="on"}, + [0x1F6CA]={d="on"}, + [0x1F6CB]={d="on"}, + [0x1F6CC]={d="on"}, + [0x1F6CD]={d="on"}, + [0x1F6CE]={d="on"}, + [0x1F6CF]={d="on"}, + [0x1F6D0]={d="on"}, + [0x1F6D1]={d="on"}, + [0x1F6D2]={d="on"}, + [0x1F6D3]={d="on"}, + [0x1F6D4]={d="on"}, + [0x1F6D5]={d="on"}, + [0x1F6D6]={d="on"}, + [0x1F6D7]={d="on"}, + [0x1F6DC]={d="on"}, + [0x1F6DD]={d="on"}, + [0x1F6DE]={d="on"}, + [0x1F6DF]={d="on"}, + [0x1F6E0]={d="on"}, + [0x1F6E1]={d="on"}, + [0x1F6E2]={d="on"}, + [0x1F6E3]={d="on"}, + [0x1F6E4]={d="on"}, + [0x1F6E5]={d="on"}, + [0x1F6E6]={d="on"}, + [0x1F6E7]={d="on"}, + [0x1F6E8]={d="on"}, + [0x1F6E9]={d="on"}, + [0x1F6EA]={d="on"}, + [0x1F6EB]={d="on"}, + [0x1F6EC]={d="on"}, + [0x1F6F0]={d="on"}, + [0x1F6F1]={d="on"}, + [0x1F6F2]={d="on"}, + [0x1F6F3]={d="on"}, + [0x1F6F4]={d="on"}, + [0x1F6F5]={d="on"}, + [0x1F6F6]={d="on"}, + [0x1F6F7]={d="on"}, + [0x1F6F8]={d="on"}, + [0x1F6F9]={d="on"}, + [0x1F6FA]={d="on"}, + [0x1F6FB]={d="on"}, + [0x1F6FC]={d="on"}, + [0x1F700]={d="on"}, + [0x1F701]={d="on"}, + [0x1F702]={d="on"}, + [0x1F703]={d="on"}, + [0x1F704]={d="on"}, + [0x1F705]={d="on"}, + [0x1F706]={d="on"}, + [0x1F707]={d="on"}, + [0x1F708]={d="on"}, + [0x1F709]={d="on"}, + [0x1F70A]={d="on"}, + [0x1F70B]={d="on"}, + [0x1F70C]={d="on"}, + [0x1F70D]={d="on"}, + [0x1F70E]={d="on"}, + [0x1F70F]={d="on"}, + [0x1F710]={d="on"}, + [0x1F711]={d="on"}, + [0x1F712]={d="on"}, + [0x1F713]={d="on"}, + [0x1F714]={d="on"}, + [0x1F715]={d="on"}, + [0x1F716]={d="on"}, + [0x1F717]={d="on"}, + [0x1F718]={d="on"}, + [0x1F719]={d="on"}, + [0x1F71A]={d="on"}, + [0x1F71B]={d="on"}, + [0x1F71C]={d="on"}, + [0x1F71D]={d="on"}, + [0x1F71E]={d="on"}, + [0x1F71F]={d="on"}, + [0x1F720]={d="on"}, + [0x1F721]={d="on"}, + [0x1F722]={d="on"}, + [0x1F723]={d="on"}, + [0x1F724]={d="on"}, + [0x1F725]={d="on"}, + [0x1F726]={d="on"}, + [0x1F727]={d="on"}, + [0x1F728]={d="on"}, + [0x1F729]={d="on"}, + [0x1F72A]={d="on"}, + [0x1F72B]={d="on"}, + [0x1F72C]={d="on"}, + [0x1F72D]={d="on"}, + [0x1F72E]={d="on"}, + [0x1F72F]={d="on"}, + [0x1F730]={d="on"}, + [0x1F731]={d="on"}, + [0x1F732]={d="on"}, + [0x1F733]={d="on"}, + [0x1F734]={d="on"}, + [0x1F735]={d="on"}, + [0x1F736]={d="on"}, + [0x1F737]={d="on"}, + [0x1F738]={d="on"}, + [0x1F739]={d="on"}, + [0x1F73A]={d="on"}, + [0x1F73B]={d="on"}, + [0x1F73C]={d="on"}, + [0x1F73D]={d="on"}, + [0x1F73E]={d="on"}, + [0x1F73F]={d="on"}, + [0x1F740]={d="on"}, + [0x1F741]={d="on"}, + [0x1F742]={d="on"}, + [0x1F743]={d="on"}, + [0x1F744]={d="on"}, + [0x1F745]={d="on"}, + [0x1F746]={d="on"}, + [0x1F747]={d="on"}, + [0x1F748]={d="on"}, + [0x1F749]={d="on"}, + [0x1F74A]={d="on"}, + [0x1F74B]={d="on"}, + [0x1F74C]={d="on"}, + [0x1F74D]={d="on"}, + [0x1F74E]={d="on"}, + [0x1F74F]={d="on"}, + [0x1F750]={d="on"}, + [0x1F751]={d="on"}, + [0x1F752]={d="on"}, + [0x1F753]={d="on"}, + [0x1F754]={d="on"}, + [0x1F755]={d="on"}, + [0x1F756]={d="on"}, + [0x1F757]={d="on"}, + [0x1F758]={d="on"}, + [0x1F759]={d="on"}, + [0x1F75A]={d="on"}, + [0x1F75B]={d="on"}, + [0x1F75C]={d="on"}, + [0x1F75D]={d="on"}, + [0x1F75E]={d="on"}, + [0x1F75F]={d="on"}, + [0x1F760]={d="on"}, + [0x1F761]={d="on"}, + [0x1F762]={d="on"}, + [0x1F763]={d="on"}, + [0x1F764]={d="on"}, + [0x1F765]={d="on"}, + [0x1F766]={d="on"}, + [0x1F767]={d="on"}, + [0x1F768]={d="on"}, + [0x1F769]={d="on"}, + [0x1F76A]={d="on"}, + [0x1F76B]={d="on"}, + [0x1F76C]={d="on"}, + [0x1F76D]={d="on"}, + [0x1F76E]={d="on"}, + [0x1F76F]={d="on"}, + [0x1F770]={d="on"}, + [0x1F771]={d="on"}, + [0x1F772]={d="on"}, + [0x1F773]={d="on"}, + [0x1F774]={d="on"}, + [0x1F775]={d="on"}, + [0x1F776]={d="on"}, + [0x1F77B]={d="on"}, + [0x1F77C]={d="on"}, + [0x1F77D]={d="on"}, + [0x1F77E]={d="on"}, + [0x1F77F]={d="on"}, + [0x1F780]={d="on"}, + [0x1F781]={d="on"}, + [0x1F782]={d="on"}, + [0x1F783]={d="on"}, + [0x1F784]={d="on"}, + [0x1F785]={d="on"}, + [0x1F786]={d="on"}, + [0x1F787]={d="on"}, + [0x1F788]={d="on"}, + [0x1F789]={d="on"}, + [0x1F78A]={d="on"}, + [0x1F78B]={d="on"}, + [0x1F78C]={d="on"}, + [0x1F78D]={d="on"}, + [0x1F78E]={d="on"}, + [0x1F78F]={d="on"}, + [0x1F790]={d="on"}, + [0x1F791]={d="on"}, + [0x1F792]={d="on"}, + [0x1F793]={d="on"}, + [0x1F794]={d="on"}, + [0x1F795]={d="on"}, + [0x1F796]={d="on"}, + [0x1F797]={d="on"}, + [0x1F798]={d="on"}, + [0x1F799]={d="on"}, + [0x1F79A]={d="on"}, + [0x1F79B]={d="on"}, + [0x1F79C]={d="on"}, + [0x1F79D]={d="on"}, + [0x1F79E]={d="on"}, + [0x1F79F]={d="on"}, + [0x1F7A0]={d="on"}, + [0x1F7A1]={d="on"}, + [0x1F7A2]={d="on"}, + [0x1F7A3]={d="on"}, + [0x1F7A4]={d="on"}, + [0x1F7A5]={d="on"}, + [0x1F7A6]={d="on"}, + [0x1F7A7]={d="on"}, + [0x1F7A8]={d="on"}, + [0x1F7A9]={d="on"}, + [0x1F7AA]={d="on"}, + [0x1F7AB]={d="on"}, + [0x1F7AC]={d="on"}, + [0x1F7AD]={d="on"}, + [0x1F7AE]={d="on"}, + [0x1F7AF]={d="on"}, + [0x1F7B0]={d="on"}, + [0x1F7B1]={d="on"}, + [0x1F7B2]={d="on"}, + [0x1F7B3]={d="on"}, + [0x1F7B4]={d="on"}, + [0x1F7B5]={d="on"}, + [0x1F7B6]={d="on"}, + [0x1F7B7]={d="on"}, + [0x1F7B8]={d="on"}, + [0x1F7B9]={d="on"}, + [0x1F7BA]={d="on"}, + [0x1F7BB]={d="on"}, + [0x1F7BC]={d="on"}, + [0x1F7BD]={d="on"}, + [0x1F7BE]={d="on"}, + [0x1F7BF]={d="on"}, + [0x1F7C0]={d="on"}, + [0x1F7C1]={d="on"}, + [0x1F7C2]={d="on"}, + [0x1F7C3]={d="on"}, + [0x1F7C4]={d="on"}, + [0x1F7C5]={d="on"}, + [0x1F7C6]={d="on"}, + [0x1F7C7]={d="on"}, + [0x1F7C8]={d="on"}, + [0x1F7C9]={d="on"}, + [0x1F7CA]={d="on"}, + [0x1F7CB]={d="on"}, + [0x1F7CC]={d="on"}, + [0x1F7CD]={d="on"}, + [0x1F7CE]={d="on"}, + [0x1F7CF]={d="on"}, + [0x1F7D0]={d="on"}, + [0x1F7D1]={d="on"}, + [0x1F7D2]={d="on"}, + [0x1F7D3]={d="on"}, + [0x1F7D4]={d="on"}, + [0x1F7D5]={d="on"}, + [0x1F7D6]={d="on"}, + [0x1F7D7]={d="on"}, + [0x1F7D8]={d="on"}, + [0x1F7D9]={d="on"}, + [0x1F7E0]={d="on"}, + [0x1F7E1]={d="on"}, + [0x1F7E2]={d="on"}, + [0x1F7E3]={d="on"}, + [0x1F7E4]={d="on"}, + [0x1F7E5]={d="on"}, + [0x1F7E6]={d="on"}, + [0x1F7E7]={d="on"}, + [0x1F7E8]={d="on"}, + [0x1F7E9]={d="on"}, + [0x1F7EA]={d="on"}, + [0x1F7EB]={d="on"}, + [0x1F7F0]={d="on"}, + [0x1F800]={d="on"}, + [0x1F801]={d="on"}, + [0x1F802]={d="on"}, + [0x1F803]={d="on"}, + [0x1F804]={d="on"}, + [0x1F805]={d="on"}, + [0x1F806]={d="on"}, + [0x1F807]={d="on"}, + [0x1F808]={d="on"}, + [0x1F809]={d="on"}, + [0x1F80A]={d="on"}, + [0x1F80B]={d="on"}, + [0x1F810]={d="on"}, + [0x1F811]={d="on"}, + [0x1F812]={d="on"}, + [0x1F813]={d="on"}, + [0x1F814]={d="on"}, + [0x1F815]={d="on"}, + [0x1F816]={d="on"}, + [0x1F817]={d="on"}, + [0x1F818]={d="on"}, + [0x1F819]={d="on"}, + [0x1F81A]={d="on"}, + [0x1F81B]={d="on"}, + [0x1F81C]={d="on"}, + [0x1F81D]={d="on"}, + [0x1F81E]={d="on"}, + [0x1F81F]={d="on"}, + [0x1F820]={d="on"}, + [0x1F821]={d="on"}, + [0x1F822]={d="on"}, + [0x1F823]={d="on"}, + [0x1F824]={d="on"}, + [0x1F825]={d="on"}, + [0x1F826]={d="on"}, + [0x1F827]={d="on"}, + [0x1F828]={d="on"}, + [0x1F829]={d="on"}, + [0x1F82A]={d="on"}, + [0x1F82B]={d="on"}, + [0x1F82C]={d="on"}, + [0x1F82D]={d="on"}, + [0x1F82E]={d="on"}, + [0x1F82F]={d="on"}, + [0x1F830]={d="on"}, + [0x1F831]={d="on"}, + [0x1F832]={d="on"}, + [0x1F833]={d="on"}, + [0x1F834]={d="on"}, + [0x1F835]={d="on"}, + [0x1F836]={d="on"}, + [0x1F837]={d="on"}, + [0x1F838]={d="on"}, + [0x1F839]={d="on"}, + [0x1F83A]={d="on"}, + [0x1F83B]={d="on"}, + [0x1F83C]={d="on"}, + [0x1F83D]={d="on"}, + [0x1F83E]={d="on"}, + [0x1F83F]={d="on"}, + [0x1F840]={d="on"}, + [0x1F841]={d="on"}, + [0x1F842]={d="on"}, + [0x1F843]={d="on"}, + [0x1F844]={d="on"}, + [0x1F845]={d="on"}, + [0x1F846]={d="on"}, + [0x1F847]={d="on"}, + [0x1F850]={d="on"}, + [0x1F851]={d="on"}, + [0x1F852]={d="on"}, + [0x1F853]={d="on"}, + [0x1F854]={d="on"}, + [0x1F855]={d="on"}, + [0x1F856]={d="on"}, + [0x1F857]={d="on"}, + [0x1F858]={d="on"}, + [0x1F859]={d="on"}, + [0x1F860]={d="on"}, + [0x1F861]={d="on"}, + [0x1F862]={d="on"}, + [0x1F863]={d="on"}, + [0x1F864]={d="on"}, + [0x1F865]={d="on"}, + [0x1F866]={d="on"}, + [0x1F867]={d="on"}, + [0x1F868]={d="on"}, + [0x1F869]={d="on"}, + [0x1F86A]={d="on"}, + [0x1F86B]={d="on"}, + [0x1F86C]={d="on"}, + [0x1F86D]={d="on"}, + [0x1F86E]={d="on"}, + [0x1F86F]={d="on"}, + [0x1F870]={d="on"}, + [0x1F871]={d="on"}, + [0x1F872]={d="on"}, + [0x1F873]={d="on"}, + [0x1F874]={d="on"}, + [0x1F875]={d="on"}, + [0x1F876]={d="on"}, + [0x1F877]={d="on"}, + [0x1F878]={d="on"}, + [0x1F879]={d="on"}, + [0x1F87A]={d="on"}, + [0x1F87B]={d="on"}, + [0x1F87C]={d="on"}, + [0x1F87D]={d="on"}, + [0x1F87E]={d="on"}, + [0x1F87F]={d="on"}, + [0x1F880]={d="on"}, + [0x1F881]={d="on"}, + [0x1F882]={d="on"}, + [0x1F883]={d="on"}, + [0x1F884]={d="on"}, + [0x1F885]={d="on"}, + [0x1F886]={d="on"}, + [0x1F887]={d="on"}, + [0x1F890]={d="on"}, + [0x1F891]={d="on"}, + [0x1F892]={d="on"}, + [0x1F893]={d="on"}, + [0x1F894]={d="on"}, + [0x1F895]={d="on"}, + [0x1F896]={d="on"}, + [0x1F897]={d="on"}, + [0x1F898]={d="on"}, + [0x1F899]={d="on"}, + [0x1F89A]={d="on"}, + [0x1F89B]={d="on"}, + [0x1F89C]={d="on"}, + [0x1F89D]={d="on"}, + [0x1F89E]={d="on"}, + [0x1F89F]={d="on"}, + [0x1F8A0]={d="on"}, + [0x1F8A1]={d="on"}, + [0x1F8A2]={d="on"}, + [0x1F8A3]={d="on"}, + [0x1F8A4]={d="on"}, + [0x1F8A5]={d="on"}, + [0x1F8A6]={d="on"}, + [0x1F8A7]={d="on"}, + [0x1F8A8]={d="on"}, + [0x1F8A9]={d="on"}, + [0x1F8AA]={d="on"}, + [0x1F8AB]={d="on"}, + [0x1F8AC]={d="on"}, + [0x1F8AD]={d="on"}, + [0x1F8B0]={d="on"}, + [0x1F8B1]={d="on"}, + [0x1F900]={d="on"}, + [0x1F901]={d="on"}, + [0x1F902]={d="on"}, + [0x1F903]={d="on"}, + [0x1F904]={d="on"}, + [0x1F905]={d="on"}, + [0x1F906]={d="on"}, + [0x1F907]={d="on"}, + [0x1F908]={d="on"}, + [0x1F909]={d="on"}, + [0x1F90A]={d="on"}, + [0x1F90B]={d="on"}, + [0x1F90C]={d="on"}, + [0x1F90D]={d="on"}, + [0x1F90E]={d="on"}, + [0x1F90F]={d="on"}, + [0x1F910]={d="on"}, + [0x1F911]={d="on"}, + [0x1F912]={d="on"}, + [0x1F913]={d="on"}, + [0x1F914]={d="on"}, + [0x1F915]={d="on"}, + [0x1F916]={d="on"}, + [0x1F917]={d="on"}, + [0x1F918]={d="on"}, + [0x1F919]={d="on"}, + [0x1F91A]={d="on"}, + [0x1F91B]={d="on"}, + [0x1F91C]={d="on"}, + [0x1F91D]={d="on"}, + [0x1F91E]={d="on"}, + [0x1F91F]={d="on"}, + [0x1F920]={d="on"}, + [0x1F921]={d="on"}, + [0x1F922]={d="on"}, + [0x1F923]={d="on"}, + [0x1F924]={d="on"}, + [0x1F925]={d="on"}, + [0x1F926]={d="on"}, + [0x1F927]={d="on"}, + [0x1F928]={d="on"}, + [0x1F929]={d="on"}, + [0x1F92A]={d="on"}, + [0x1F92B]={d="on"}, + [0x1F92C]={d="on"}, + [0x1F92D]={d="on"}, + [0x1F92E]={d="on"}, + [0x1F92F]={d="on"}, + [0x1F930]={d="on"}, + [0x1F931]={d="on"}, + [0x1F932]={d="on"}, + [0x1F933]={d="on"}, + [0x1F934]={d="on"}, + [0x1F935]={d="on"}, + [0x1F936]={d="on"}, + [0x1F937]={d="on"}, + [0x1F938]={d="on"}, + [0x1F939]={d="on"}, + [0x1F93A]={d="on"}, + [0x1F93B]={d="on"}, + [0x1F93C]={d="on"}, + [0x1F93D]={d="on"}, + [0x1F93E]={d="on"}, + [0x1F93F]={d="on"}, + [0x1F940]={d="on"}, + [0x1F941]={d="on"}, + [0x1F942]={d="on"}, + [0x1F943]={d="on"}, + [0x1F944]={d="on"}, + [0x1F945]={d="on"}, + [0x1F946]={d="on"}, + [0x1F947]={d="on"}, + [0x1F948]={d="on"}, + [0x1F949]={d="on"}, + [0x1F94A]={d="on"}, + [0x1F94B]={d="on"}, + [0x1F94C]={d="on"}, + [0x1F94D]={d="on"}, + [0x1F94E]={d="on"}, + [0x1F94F]={d="on"}, + [0x1F950]={d="on"}, + [0x1F951]={d="on"}, + [0x1F952]={d="on"}, + [0x1F953]={d="on"}, + [0x1F954]={d="on"}, + [0x1F955]={d="on"}, + [0x1F956]={d="on"}, + [0x1F957]={d="on"}, + [0x1F958]={d="on"}, + [0x1F959]={d="on"}, + [0x1F95A]={d="on"}, + [0x1F95B]={d="on"}, + [0x1F95C]={d="on"}, + [0x1F95D]={d="on"}, + [0x1F95E]={d="on"}, + [0x1F95F]={d="on"}, + [0x1F960]={d="on"}, + [0x1F961]={d="on"}, + [0x1F962]={d="on"}, + [0x1F963]={d="on"}, + [0x1F964]={d="on"}, + [0x1F965]={d="on"}, + [0x1F966]={d="on"}, + [0x1F967]={d="on"}, + [0x1F968]={d="on"}, + [0x1F969]={d="on"}, + [0x1F96A]={d="on"}, + [0x1F96B]={d="on"}, + [0x1F96C]={d="on"}, + [0x1F96D]={d="on"}, + [0x1F96E]={d="on"}, + [0x1F96F]={d="on"}, + [0x1F970]={d="on"}, + [0x1F971]={d="on"}, + [0x1F972]={d="on"}, + [0x1F973]={d="on"}, + [0x1F974]={d="on"}, + [0x1F975]={d="on"}, + [0x1F976]={d="on"}, + [0x1F977]={d="on"}, + [0x1F978]={d="on"}, + [0x1F979]={d="on"}, + [0x1F97A]={d="on"}, + [0x1F97B]={d="on"}, + [0x1F97C]={d="on"}, + [0x1F97D]={d="on"}, + [0x1F97E]={d="on"}, + [0x1F97F]={d="on"}, + [0x1F980]={d="on"}, + [0x1F981]={d="on"}, + [0x1F982]={d="on"}, + [0x1F983]={d="on"}, + [0x1F984]={d="on"}, + [0x1F985]={d="on"}, + [0x1F986]={d="on"}, + [0x1F987]={d="on"}, + [0x1F988]={d="on"}, + [0x1F989]={d="on"}, + [0x1F98A]={d="on"}, + [0x1F98B]={d="on"}, + [0x1F98C]={d="on"}, + [0x1F98D]={d="on"}, + [0x1F98E]={d="on"}, + [0x1F98F]={d="on"}, + [0x1F990]={d="on"}, + [0x1F991]={d="on"}, + [0x1F992]={d="on"}, + [0x1F993]={d="on"}, + [0x1F994]={d="on"}, + [0x1F995]={d="on"}, + [0x1F996]={d="on"}, + [0x1F997]={d="on"}, + [0x1F998]={d="on"}, + [0x1F999]={d="on"}, + [0x1F99A]={d="on"}, + [0x1F99B]={d="on"}, + [0x1F99C]={d="on"}, + [0x1F99D]={d="on"}, + [0x1F99E]={d="on"}, + [0x1F99F]={d="on"}, + [0x1F9A0]={d="on"}, + [0x1F9A1]={d="on"}, + [0x1F9A2]={d="on"}, + [0x1F9A3]={d="on"}, + [0x1F9A4]={d="on"}, + [0x1F9A5]={d="on"}, + [0x1F9A6]={d="on"}, + [0x1F9A7]={d="on"}, + [0x1F9A8]={d="on"}, + [0x1F9A9]={d="on"}, + [0x1F9AA]={d="on"}, + [0x1F9AB]={d="on"}, + [0x1F9AC]={d="on"}, + [0x1F9AD]={d="on"}, + [0x1F9AE]={d="on"}, + [0x1F9AF]={d="on"}, + [0x1F9B0]={d="on"}, + [0x1F9B1]={d="on"}, + [0x1F9B2]={d="on"}, + [0x1F9B3]={d="on"}, + [0x1F9B4]={d="on"}, + [0x1F9B5]={d="on"}, + [0x1F9B6]={d="on"}, + [0x1F9B7]={d="on"}, + [0x1F9B8]={d="on"}, + [0x1F9B9]={d="on"}, + [0x1F9BA]={d="on"}, + [0x1F9BB]={d="on"}, + [0x1F9BC]={d="on"}, + [0x1F9BD]={d="on"}, + [0x1F9BE]={d="on"}, + [0x1F9BF]={d="on"}, + [0x1F9C0]={d="on"}, + [0x1F9C1]={d="on"}, + [0x1F9C2]={d="on"}, + [0x1F9C3]={d="on"}, + [0x1F9C4]={d="on"}, + [0x1F9C5]={d="on"}, + [0x1F9C6]={d="on"}, + [0x1F9C7]={d="on"}, + [0x1F9C8]={d="on"}, + [0x1F9C9]={d="on"}, + [0x1F9CA]={d="on"}, + [0x1F9CB]={d="on"}, + [0x1F9CC]={d="on"}, + [0x1F9CD]={d="on"}, + [0x1F9CE]={d="on"}, + [0x1F9CF]={d="on"}, + [0x1F9D0]={d="on"}, + [0x1F9D1]={d="on"}, + [0x1F9D2]={d="on"}, + [0x1F9D3]={d="on"}, + [0x1F9D4]={d="on"}, + [0x1F9D5]={d="on"}, + [0x1F9D6]={d="on"}, + [0x1F9D7]={d="on"}, + [0x1F9D8]={d="on"}, + [0x1F9D9]={d="on"}, + [0x1F9DA]={d="on"}, + [0x1F9DB]={d="on"}, + [0x1F9DC]={d="on"}, + [0x1F9DD]={d="on"}, + [0x1F9DE]={d="on"}, + [0x1F9DF]={d="on"}, + [0x1F9E0]={d="on"}, + [0x1F9E1]={d="on"}, + [0x1F9E2]={d="on"}, + [0x1F9E3]={d="on"}, + [0x1F9E4]={d="on"}, + [0x1F9E5]={d="on"}, + [0x1F9E6]={d="on"}, + [0x1F9E7]={d="on"}, + [0x1F9E8]={d="on"}, + [0x1F9E9]={d="on"}, + [0x1F9EA]={d="on"}, + [0x1F9EB]={d="on"}, + [0x1F9EC]={d="on"}, + [0x1F9ED]={d="on"}, + [0x1F9EE]={d="on"}, + [0x1F9EF]={d="on"}, + [0x1F9F0]={d="on"}, + [0x1F9F1]={d="on"}, + [0x1F9F2]={d="on"}, + [0x1F9F3]={d="on"}, + [0x1F9F4]={d="on"}, + [0x1F9F5]={d="on"}, + [0x1F9F6]={d="on"}, + [0x1F9F7]={d="on"}, + [0x1F9F8]={d="on"}, + [0x1F9F9]={d="on"}, + [0x1F9FA]={d="on"}, + [0x1F9FB]={d="on"}, + [0x1F9FC]={d="on"}, + [0x1F9FD]={d="on"}, + [0x1F9FE]={d="on"}, + [0x1F9FF]={d="on"}, + [0x1FA00]={d="on"}, + [0x1FA01]={d="on"}, + [0x1FA02]={d="on"}, + [0x1FA03]={d="on"}, + [0x1FA04]={d="on"}, + [0x1FA05]={d="on"}, + [0x1FA06]={d="on"}, + [0x1FA07]={d="on"}, + [0x1FA08]={d="on"}, + [0x1FA09]={d="on"}, + [0x1FA0A]={d="on"}, + [0x1FA0B]={d="on"}, + [0x1FA0C]={d="on"}, + [0x1FA0D]={d="on"}, + [0x1FA0E]={d="on"}, + [0x1FA0F]={d="on"}, + [0x1FA10]={d="on"}, + [0x1FA11]={d="on"}, + [0x1FA12]={d="on"}, + [0x1FA13]={d="on"}, + [0x1FA14]={d="on"}, + [0x1FA15]={d="on"}, + [0x1FA16]={d="on"}, + [0x1FA17]={d="on"}, + [0x1FA18]={d="on"}, + [0x1FA19]={d="on"}, + [0x1FA1A]={d="on"}, + [0x1FA1B]={d="on"}, + [0x1FA1C]={d="on"}, + [0x1FA1D]={d="on"}, + [0x1FA1E]={d="on"}, + [0x1FA1F]={d="on"}, + [0x1FA20]={d="on"}, + [0x1FA21]={d="on"}, + [0x1FA22]={d="on"}, + [0x1FA23]={d="on"}, + [0x1FA24]={d="on"}, + [0x1FA25]={d="on"}, + [0x1FA26]={d="on"}, + [0x1FA27]={d="on"}, + [0x1FA28]={d="on"}, + [0x1FA29]={d="on"}, + [0x1FA2A]={d="on"}, + [0x1FA2B]={d="on"}, + [0x1FA2C]={d="on"}, + [0x1FA2D]={d="on"}, + [0x1FA2E]={d="on"}, + [0x1FA2F]={d="on"}, + [0x1FA30]={d="on"}, + [0x1FA31]={d="on"}, + [0x1FA32]={d="on"}, + [0x1FA33]={d="on"}, + [0x1FA34]={d="on"}, + [0x1FA35]={d="on"}, + [0x1FA36]={d="on"}, + [0x1FA37]={d="on"}, + [0x1FA38]={d="on"}, + [0x1FA39]={d="on"}, + [0x1FA3A]={d="on"}, + [0x1FA3B]={d="on"}, + [0x1FA3C]={d="on"}, + [0x1FA3D]={d="on"}, + [0x1FA3E]={d="on"}, + [0x1FA3F]={d="on"}, + [0x1FA40]={d="on"}, + [0x1FA41]={d="on"}, + [0x1FA42]={d="on"}, + [0x1FA43]={d="on"}, + [0x1FA44]={d="on"}, + [0x1FA45]={d="on"}, + [0x1FA46]={d="on"}, + [0x1FA47]={d="on"}, + [0x1FA48]={d="on"}, + [0x1FA49]={d="on"}, + [0x1FA4A]={d="on"}, + [0x1FA4B]={d="on"}, + [0x1FA4C]={d="on"}, + [0x1FA4D]={d="on"}, + [0x1FA4E]={d="on"}, + [0x1FA4F]={d="on"}, + [0x1FA50]={d="on"}, + [0x1FA51]={d="on"}, + [0x1FA52]={d="on"}, + [0x1FA53]={d="on"}, + [0x1FA60]={d="on"}, + [0x1FA61]={d="on"}, + [0x1FA62]={d="on"}, + [0x1FA63]={d="on"}, + [0x1FA64]={d="on"}, + [0x1FA65]={d="on"}, + [0x1FA66]={d="on"}, + [0x1FA67]={d="on"}, + [0x1FA68]={d="on"}, + [0x1FA69]={d="on"}, + [0x1FA6A]={d="on"}, + [0x1FA6B]={d="on"}, + [0x1FA6C]={d="on"}, + [0x1FA6D]={d="on"}, + [0x1FA70]={d="on"}, + [0x1FA71]={d="on"}, + [0x1FA72]={d="on"}, + [0x1FA73]={d="on"}, + [0x1FA74]={d="on"}, + [0x1FA75]={d="on"}, + [0x1FA76]={d="on"}, + [0x1FA77]={d="on"}, + [0x1FA78]={d="on"}, + [0x1FA79]={d="on"}, + [0x1FA7A]={d="on"}, + [0x1FA7B]={d="on"}, + [0x1FA7C]={d="on"}, + [0x1FA80]={d="on"}, + [0x1FA81]={d="on"}, + [0x1FA82]={d="on"}, + [0x1FA83]={d="on"}, + [0x1FA84]={d="on"}, + [0x1FA85]={d="on"}, + [0x1FA86]={d="on"}, + [0x1FA87]={d="on"}, + [0x1FA88]={d="on"}, + [0x1FA90]={d="on"}, + [0x1FA91]={d="on"}, + [0x1FA92]={d="on"}, + [0x1FA93]={d="on"}, + [0x1FA94]={d="on"}, + [0x1FA95]={d="on"}, + [0x1FA96]={d="on"}, + [0x1FA97]={d="on"}, + [0x1FA98]={d="on"}, + [0x1FA99]={d="on"}, + [0x1FA9A]={d="on"}, + [0x1FA9B]={d="on"}, + [0x1FA9C]={d="on"}, + [0x1FA9D]={d="on"}, + [0x1FA9E]={d="on"}, + [0x1FA9F]={d="on"}, + [0x1FAA0]={d="on"}, + [0x1FAA1]={d="on"}, + [0x1FAA2]={d="on"}, + [0x1FAA3]={d="on"}, + [0x1FAA4]={d="on"}, + [0x1FAA5]={d="on"}, + [0x1FAA6]={d="on"}, + [0x1FAA7]={d="on"}, + [0x1FAA8]={d="on"}, + [0x1FAA9]={d="on"}, + [0x1FAAA]={d="on"}, + [0x1FAAB]={d="on"}, + [0x1FAAC]={d="on"}, + [0x1FAAD]={d="on"}, + [0x1FAAE]={d="on"}, + [0x1FAAF]={d="on"}, + [0x1FAB0]={d="on"}, + [0x1FAB1]={d="on"}, + [0x1FAB2]={d="on"}, + [0x1FAB3]={d="on"}, + [0x1FAB4]={d="on"}, + [0x1FAB5]={d="on"}, + [0x1FAB6]={d="on"}, + [0x1FAB7]={d="on"}, + [0x1FAB8]={d="on"}, + [0x1FAB9]={d="on"}, + [0x1FABA]={d="on"}, + [0x1FABB]={d="on"}, + [0x1FABC]={d="on"}, + [0x1FABD]={d="on"}, + [0x1FABF]={d="on"}, + [0x1FAC0]={d="on"}, + [0x1FAC1]={d="on"}, + [0x1FAC2]={d="on"}, + [0x1FAC3]={d="on"}, + [0x1FAC4]={d="on"}, + [0x1FAC5]={d="on"}, + [0x1FACE]={d="on"}, + [0x1FACF]={d="on"}, + [0x1FAD0]={d="on"}, + [0x1FAD1]={d="on"}, + [0x1FAD2]={d="on"}, + [0x1FAD3]={d="on"}, + [0x1FAD4]={d="on"}, + [0x1FAD5]={d="on"}, + [0x1FAD6]={d="on"}, + [0x1FAD7]={d="on"}, + [0x1FAD8]={d="on"}, + [0x1FAD9]={d="on"}, + [0x1FADA]={d="on"}, + [0x1FADB]={d="on"}, + [0x1FAE0]={d="on"}, + [0x1FAE1]={d="on"}, + [0x1FAE2]={d="on"}, + [0x1FAE3]={d="on"}, + [0x1FAE4]={d="on"}, + [0x1FAE5]={d="on"}, + [0x1FAE6]={d="on"}, + [0x1FAE7]={d="on"}, + [0x1FAE8]={d="on"}, + [0x1FAF0]={d="on"}, + [0x1FAF1]={d="on"}, + [0x1FAF2]={d="on"}, + [0x1FAF3]={d="on"}, + [0x1FAF4]={d="on"}, + [0x1FAF5]={d="on"}, + [0x1FAF6]={d="on"}, + [0x1FAF7]={d="on"}, + [0x1FAF8]={d="on"}, + [0x1FB00]={d="on"}, + [0x1FB01]={d="on"}, + [0x1FB02]={d="on"}, + [0x1FB03]={d="on"}, + [0x1FB04]={d="on"}, + [0x1FB05]={d="on"}, + [0x1FB06]={d="on"}, + [0x1FB07]={d="on"}, + [0x1FB08]={d="on"}, + [0x1FB09]={d="on"}, + [0x1FB0A]={d="on"}, + [0x1FB0B]={d="on"}, + [0x1FB0C]={d="on"}, + [0x1FB0D]={d="on"}, + [0x1FB0E]={d="on"}, + [0x1FB0F]={d="on"}, + [0x1FB10]={d="on"}, + [0x1FB11]={d="on"}, + [0x1FB12]={d="on"}, + [0x1FB13]={d="on"}, + [0x1FB14]={d="on"}, + [0x1FB15]={d="on"}, + [0x1FB16]={d="on"}, + [0x1FB17]={d="on"}, + [0x1FB18]={d="on"}, + [0x1FB19]={d="on"}, + [0x1FB1A]={d="on"}, + [0x1FB1B]={d="on"}, + [0x1FB1C]={d="on"}, + [0x1FB1D]={d="on"}, + [0x1FB1E]={d="on"}, + [0x1FB1F]={d="on"}, + [0x1FB20]={d="on"}, + [0x1FB21]={d="on"}, + [0x1FB22]={d="on"}, + [0x1FB23]={d="on"}, + [0x1FB24]={d="on"}, + [0x1FB25]={d="on"}, + [0x1FB26]={d="on"}, + [0x1FB27]={d="on"}, + [0x1FB28]={d="on"}, + [0x1FB29]={d="on"}, + [0x1FB2A]={d="on"}, + [0x1FB2B]={d="on"}, + [0x1FB2C]={d="on"}, + [0x1FB2D]={d="on"}, + [0x1FB2E]={d="on"}, + [0x1FB2F]={d="on"}, + [0x1FB30]={d="on"}, + [0x1FB31]={d="on"}, + [0x1FB32]={d="on"}, + [0x1FB33]={d="on"}, + [0x1FB34]={d="on"}, + [0x1FB35]={d="on"}, + [0x1FB36]={d="on"}, + [0x1FB37]={d="on"}, + [0x1FB38]={d="on"}, + [0x1FB39]={d="on"}, + [0x1FB3A]={d="on"}, + [0x1FB3B]={d="on"}, + [0x1FB3C]={d="on"}, + [0x1FB3D]={d="on"}, + [0x1FB3E]={d="on"}, + [0x1FB3F]={d="on"}, + [0x1FB40]={d="on"}, + [0x1FB41]={d="on"}, + [0x1FB42]={d="on"}, + [0x1FB43]={d="on"}, + [0x1FB44]={d="on"}, + [0x1FB45]={d="on"}, + [0x1FB46]={d="on"}, + [0x1FB47]={d="on"}, + [0x1FB48]={d="on"}, + [0x1FB49]={d="on"}, + [0x1FB4A]={d="on"}, + [0x1FB4B]={d="on"}, + [0x1FB4C]={d="on"}, + [0x1FB4D]={d="on"}, + [0x1FB4E]={d="on"}, + [0x1FB4F]={d="on"}, + [0x1FB50]={d="on"}, + [0x1FB51]={d="on"}, + [0x1FB52]={d="on"}, + [0x1FB53]={d="on"}, + [0x1FB54]={d="on"}, + [0x1FB55]={d="on"}, + [0x1FB56]={d="on"}, + [0x1FB57]={d="on"}, + [0x1FB58]={d="on"}, + [0x1FB59]={d="on"}, + [0x1FB5A]={d="on"}, + [0x1FB5B]={d="on"}, + [0x1FB5C]={d="on"}, + [0x1FB5D]={d="on"}, + [0x1FB5E]={d="on"}, + [0x1FB5F]={d="on"}, + [0x1FB60]={d="on"}, + [0x1FB61]={d="on"}, + [0x1FB62]={d="on"}, + [0x1FB63]={d="on"}, + [0x1FB64]={d="on"}, + [0x1FB65]={d="on"}, + [0x1FB66]={d="on"}, + [0x1FB67]={d="on"}, + [0x1FB68]={d="on"}, + [0x1FB69]={d="on"}, + [0x1FB6A]={d="on"}, + [0x1FB6B]={d="on"}, + [0x1FB6C]={d="on"}, + [0x1FB6D]={d="on"}, + [0x1FB6E]={d="on"}, + [0x1FB6F]={d="on"}, + [0x1FB70]={d="on"}, + [0x1FB71]={d="on"}, + [0x1FB72]={d="on"}, + [0x1FB73]={d="on"}, + [0x1FB74]={d="on"}, + [0x1FB75]={d="on"}, + [0x1FB76]={d="on"}, + [0x1FB77]={d="on"}, + [0x1FB78]={d="on"}, + [0x1FB79]={d="on"}, + [0x1FB7A]={d="on"}, + [0x1FB7B]={d="on"}, + [0x1FB7C]={d="on"}, + [0x1FB7D]={d="on"}, + [0x1FB7E]={d="on"}, + [0x1FB7F]={d="on"}, + [0x1FB80]={d="on"}, + [0x1FB81]={d="on"}, + [0x1FB82]={d="on"}, + [0x1FB83]={d="on"}, + [0x1FB84]={d="on"}, + [0x1FB85]={d="on"}, + [0x1FB86]={d="on"}, + [0x1FB87]={d="on"}, + [0x1FB88]={d="on"}, + [0x1FB89]={d="on"}, + [0x1FB8A]={d="on"}, + [0x1FB8B]={d="on"}, + [0x1FB8C]={d="on"}, + [0x1FB8D]={d="on"}, + [0x1FB8E]={d="on"}, + [0x1FB8F]={d="on"}, + [0x1FB90]={d="on"}, + [0x1FB91]={d="on"}, + [0x1FB92]={d="on"}, + [0x1FB94]={d="on"}, + [0x1FB95]={d="on"}, + [0x1FB96]={d="on"}, + [0x1FB97]={d="on"}, + [0x1FB98]={d="on"}, + [0x1FB99]={d="on"}, + [0x1FB9A]={d="on"}, + [0x1FB9B]={d="on"}, + [0x1FB9C]={d="on"}, + [0x1FB9D]={d="on"}, + [0x1FB9E]={d="on"}, + [0x1FB9F]={d="on"}, + [0x1FBA0]={d="on"}, + [0x1FBA1]={d="on"}, + [0x1FBA2]={d="on"}, + [0x1FBA3]={d="on"}, + [0x1FBA4]={d="on"}, + [0x1FBA5]={d="on"}, + [0x1FBA6]={d="on"}, + [0x1FBA7]={d="on"}, + [0x1FBA8]={d="on"}, + [0x1FBA9]={d="on"}, + [0x1FBAA]={d="on"}, + [0x1FBAB]={d="on"}, + [0x1FBAC]={d="on"}, + [0x1FBAD]={d="on"}, + [0x1FBAE]={d="on"}, + [0x1FBAF]={d="on"}, + [0x1FBB0]={d="on"}, + [0x1FBB1]={d="on"}, + [0x1FBB2]={d="on"}, + [0x1FBB3]={d="on"}, + [0x1FBB4]={d="on"}, + [0x1FBB5]={d="on"}, + [0x1FBB6]={d="on"}, + [0x1FBB7]={d="on"}, + [0x1FBB8]={d="on"}, + [0x1FBB9]={d="on"}, + [0x1FBBA]={d="on"}, + [0x1FBBB]={d="on"}, + [0x1FBBC]={d="on"}, + [0x1FBBD]={d="on"}, + [0x1FBBE]={d="on"}, + [0x1FBBF]={d="on"}, + [0x1FBC0]={d="on"}, + [0x1FBC1]={d="on"}, + [0x1FBC2]={d="on"}, + [0x1FBC3]={d="on"}, + [0x1FBC4]={d="on"}, + [0x1FBC5]={d="on"}, + [0x1FBC6]={d="on"}, + [0x1FBC7]={d="on"}, + [0x1FBC8]={d="on"}, + [0x1FBC9]={d="on"}, + [0x1FBCA]={d="on"}, + [0x1FBF0]={d="en"}, + [0x1FBF1]={d="en"}, + [0x1FBF2]={d="en"}, + [0x1FBF3]={d="en"}, + [0x1FBF4]={d="en"}, + [0x1FBF5]={d="en"}, + [0x1FBF6]={d="en"}, + [0x1FBF7]={d="en"}, + [0x1FBF8]={d="en"}, + [0x1FBF9]={d="en"}, + [0x2F800]={d="l"}, + [0x2F801]={d="l"}, + [0x2F802]={d="l"}, + [0x2F803]={d="l"}, + [0x2F804]={d="l"}, + [0x2F805]={d="l"}, + [0x2F806]={d="l"}, + [0x2F807]={d="l"}, + [0x2F808]={d="l"}, + [0x2F809]={d="l"}, + [0x2F80A]={d="l"}, + [0x2F80B]={d="l"}, + [0x2F80C]={d="l"}, + [0x2F80D]={d="l"}, + [0x2F80E]={d="l"}, + [0x2F80F]={d="l"}, + [0x2F810]={d="l"}, + [0x2F811]={d="l"}, + [0x2F812]={d="l"}, + [0x2F813]={d="l"}, + [0x2F814]={d="l"}, + [0x2F815]={d="l"}, + [0x2F816]={d="l"}, + [0x2F817]={d="l"}, + [0x2F818]={d="l"}, + [0x2F819]={d="l"}, + [0x2F81A]={d="l"}, + [0x2F81B]={d="l"}, + [0x2F81C]={d="l"}, + [0x2F81D]={d="l"}, + [0x2F81E]={d="l"}, + [0x2F81F]={d="l"}, + [0x2F820]={d="l"}, + [0x2F821]={d="l"}, + [0x2F822]={d="l"}, + [0x2F823]={d="l"}, + [0x2F824]={d="l"}, + [0x2F825]={d="l"}, + [0x2F826]={d="l"}, + [0x2F827]={d="l"}, + [0x2F828]={d="l"}, + [0x2F829]={d="l"}, + [0x2F82A]={d="l"}, + [0x2F82B]={d="l"}, + [0x2F82C]={d="l"}, + [0x2F82D]={d="l"}, + [0x2F82E]={d="l"}, + [0x2F82F]={d="l"}, + [0x2F830]={d="l"}, + [0x2F831]={d="l"}, + [0x2F832]={d="l"}, + [0x2F833]={d="l"}, + [0x2F834]={d="l"}, + [0x2F835]={d="l"}, + [0x2F836]={d="l"}, + [0x2F837]={d="l"}, + [0x2F838]={d="l"}, + [0x2F839]={d="l"}, + [0x2F83A]={d="l"}, + [0x2F83B]={d="l"}, + [0x2F83C]={d="l"}, + [0x2F83D]={d="l"}, + [0x2F83E]={d="l"}, + [0x2F83F]={d="l"}, + [0x2F840]={d="l"}, + [0x2F841]={d="l"}, + [0x2F842]={d="l"}, + [0x2F843]={d="l"}, + [0x2F844]={d="l"}, + [0x2F845]={d="l"}, + [0x2F846]={d="l"}, + [0x2F847]={d="l"}, + [0x2F848]={d="l"}, + [0x2F849]={d="l"}, + [0x2F84A]={d="l"}, + [0x2F84B]={d="l"}, + [0x2F84C]={d="l"}, + [0x2F84D]={d="l"}, + [0x2F84E]={d="l"}, + [0x2F84F]={d="l"}, + [0x2F850]={d="l"}, + [0x2F851]={d="l"}, + [0x2F852]={d="l"}, + [0x2F853]={d="l"}, + [0x2F854]={d="l"}, + [0x2F855]={d="l"}, + [0x2F856]={d="l"}, + [0x2F857]={d="l"}, + [0x2F858]={d="l"}, + [0x2F859]={d="l"}, + [0x2F85A]={d="l"}, + [0x2F85B]={d="l"}, + [0x2F85C]={d="l"}, + [0x2F85D]={d="l"}, + [0x2F85E]={d="l"}, + [0x2F85F]={d="l"}, + [0x2F860]={d="l"}, + [0x2F861]={d="l"}, + [0x2F862]={d="l"}, + [0x2F863]={d="l"}, + [0x2F864]={d="l"}, + [0x2F865]={d="l"}, + [0x2F866]={d="l"}, + [0x2F867]={d="l"}, + [0x2F868]={d="l"}, + [0x2F869]={d="l"}, + [0x2F86A]={d="l"}, + [0x2F86B]={d="l"}, + [0x2F86C]={d="l"}, + [0x2F86D]={d="l"}, + [0x2F86E]={d="l"}, + [0x2F86F]={d="l"}, + [0x2F870]={d="l"}, + [0x2F871]={d="l"}, + [0x2F872]={d="l"}, + [0x2F873]={d="l"}, + [0x2F874]={d="l"}, + [0x2F875]={d="l"}, + [0x2F876]={d="l"}, + [0x2F877]={d="l"}, + [0x2F878]={d="l"}, + [0x2F879]={d="l"}, + [0x2F87A]={d="l"}, + [0x2F87B]={d="l"}, + [0x2F87C]={d="l"}, + [0x2F87D]={d="l"}, + [0x2F87E]={d="l"}, + [0x2F87F]={d="l"}, + [0x2F880]={d="l"}, + [0x2F881]={d="l"}, + [0x2F882]={d="l"}, + [0x2F883]={d="l"}, + [0x2F884]={d="l"}, + [0x2F885]={d="l"}, + [0x2F886]={d="l"}, + [0x2F887]={d="l"}, + [0x2F888]={d="l"}, + [0x2F889]={d="l"}, + [0x2F88A]={d="l"}, + [0x2F88B]={d="l"}, + [0x2F88C]={d="l"}, + [0x2F88D]={d="l"}, + [0x2F88E]={d="l"}, + [0x2F88F]={d="l"}, + [0x2F890]={d="l"}, + [0x2F891]={d="l"}, + [0x2F892]={d="l"}, + [0x2F893]={d="l"}, + [0x2F894]={d="l"}, + [0x2F895]={d="l"}, + [0x2F896]={d="l"}, + [0x2F897]={d="l"}, + [0x2F898]={d="l"}, + [0x2F899]={d="l"}, + [0x2F89A]={d="l"}, + [0x2F89B]={d="l"}, + [0x2F89C]={d="l"}, + [0x2F89D]={d="l"}, + [0x2F89E]={d="l"}, + [0x2F89F]={d="l"}, + [0x2F8A0]={d="l"}, + [0x2F8A1]={d="l"}, + [0x2F8A2]={d="l"}, + [0x2F8A3]={d="l"}, + [0x2F8A4]={d="l"}, + [0x2F8A5]={d="l"}, + [0x2F8A6]={d="l"}, + [0x2F8A7]={d="l"}, + [0x2F8A8]={d="l"}, + [0x2F8A9]={d="l"}, + [0x2F8AA]={d="l"}, + [0x2F8AB]={d="l"}, + [0x2F8AC]={d="l"}, + [0x2F8AD]={d="l"}, + [0x2F8AE]={d="l"}, + [0x2F8AF]={d="l"}, + [0x2F8B0]={d="l"}, + [0x2F8B1]={d="l"}, + [0x2F8B2]={d="l"}, + [0x2F8B3]={d="l"}, + [0x2F8B4]={d="l"}, + [0x2F8B5]={d="l"}, + [0x2F8B6]={d="l"}, + [0x2F8B7]={d="l"}, + [0x2F8B8]={d="l"}, + [0x2F8B9]={d="l"}, + [0x2F8BA]={d="l"}, + [0x2F8BB]={d="l"}, + [0x2F8BC]={d="l"}, + [0x2F8BD]={d="l"}, + [0x2F8BE]={d="l"}, + [0x2F8BF]={d="l"}, + [0x2F8C0]={d="l"}, + [0x2F8C1]={d="l"}, + [0x2F8C2]={d="l"}, + [0x2F8C3]={d="l"}, + [0x2F8C4]={d="l"}, + [0x2F8C5]={d="l"}, + [0x2F8C6]={d="l"}, + [0x2F8C7]={d="l"}, + [0x2F8C8]={d="l"}, + [0x2F8C9]={d="l"}, + [0x2F8CA]={d="l"}, + [0x2F8CB]={d="l"}, + [0x2F8CC]={d="l"}, + [0x2F8CD]={d="l"}, + [0x2F8CE]={d="l"}, + [0x2F8CF]={d="l"}, + [0x2F8D0]={d="l"}, + [0x2F8D1]={d="l"}, + [0x2F8D2]={d="l"}, + [0x2F8D3]={d="l"}, + [0x2F8D4]={d="l"}, + [0x2F8D5]={d="l"}, + [0x2F8D6]={d="l"}, + [0x2F8D7]={d="l"}, + [0x2F8D8]={d="l"}, + [0x2F8D9]={d="l"}, + [0x2F8DA]={d="l"}, + [0x2F8DB]={d="l"}, + [0x2F8DC]={d="l"}, + [0x2F8DD]={d="l"}, + [0x2F8DE]={d="l"}, + [0x2F8DF]={d="l"}, + [0x2F8E0]={d="l"}, + [0x2F8E1]={d="l"}, + [0x2F8E2]={d="l"}, + [0x2F8E3]={d="l"}, + [0x2F8E4]={d="l"}, + [0x2F8E5]={d="l"}, + [0x2F8E6]={d="l"}, + [0x2F8E7]={d="l"}, + [0x2F8E8]={d="l"}, + [0x2F8E9]={d="l"}, + [0x2F8EA]={d="l"}, + [0x2F8EB]={d="l"}, + [0x2F8EC]={d="l"}, + [0x2F8ED]={d="l"}, + [0x2F8EE]={d="l"}, + [0x2F8EF]={d="l"}, + [0x2F8F0]={d="l"}, + [0x2F8F1]={d="l"}, + [0x2F8F2]={d="l"}, + [0x2F8F3]={d="l"}, + [0x2F8F4]={d="l"}, + [0x2F8F5]={d="l"}, + [0x2F8F6]={d="l"}, + [0x2F8F7]={d="l"}, + [0x2F8F8]={d="l"}, + [0x2F8F9]={d="l"}, + [0x2F8FA]={d="l"}, + [0x2F8FB]={d="l"}, + [0x2F8FC]={d="l"}, + [0x2F8FD]={d="l"}, + [0x2F8FE]={d="l"}, + [0x2F8FF]={d="l"}, + [0x2F900]={d="l"}, + [0x2F901]={d="l"}, + [0x2F902]={d="l"}, + [0x2F903]={d="l"}, + [0x2F904]={d="l"}, + [0x2F905]={d="l"}, + [0x2F906]={d="l"}, + [0x2F907]={d="l"}, + [0x2F908]={d="l"}, + [0x2F909]={d="l"}, + [0x2F90A]={d="l"}, + [0x2F90B]={d="l"}, + [0x2F90C]={d="l"}, + [0x2F90D]={d="l"}, + [0x2F90E]={d="l"}, + [0x2F90F]={d="l"}, + [0x2F910]={d="l"}, + [0x2F911]={d="l"}, + [0x2F912]={d="l"}, + [0x2F913]={d="l"}, + [0x2F914]={d="l"}, + [0x2F915]={d="l"}, + [0x2F916]={d="l"}, + [0x2F917]={d="l"}, + [0x2F918]={d="l"}, + [0x2F919]={d="l"}, + [0x2F91A]={d="l"}, + [0x2F91B]={d="l"}, + [0x2F91C]={d="l"}, + [0x2F91D]={d="l"}, + [0x2F91E]={d="l"}, + [0x2F91F]={d="l"}, + [0x2F920]={d="l"}, + [0x2F921]={d="l"}, + [0x2F922]={d="l"}, + [0x2F923]={d="l"}, + [0x2F924]={d="l"}, + [0x2F925]={d="l"}, + [0x2F926]={d="l"}, + [0x2F927]={d="l"}, + [0x2F928]={d="l"}, + [0x2F929]={d="l"}, + [0x2F92A]={d="l"}, + [0x2F92B]={d="l"}, + [0x2F92C]={d="l"}, + [0x2F92D]={d="l"}, + [0x2F92E]={d="l"}, + [0x2F92F]={d="l"}, + [0x2F930]={d="l"}, + [0x2F931]={d="l"}, + [0x2F932]={d="l"}, + [0x2F933]={d="l"}, + [0x2F934]={d="l"}, + [0x2F935]={d="l"}, + [0x2F936]={d="l"}, + [0x2F937]={d="l"}, + [0x2F938]={d="l"}, + [0x2F939]={d="l"}, + [0x2F93A]={d="l"}, + [0x2F93B]={d="l"}, + [0x2F93C]={d="l"}, + [0x2F93D]={d="l"}, + [0x2F93E]={d="l"}, + [0x2F93F]={d="l"}, + [0x2F940]={d="l"}, + [0x2F941]={d="l"}, + [0x2F942]={d="l"}, + [0x2F943]={d="l"}, + [0x2F944]={d="l"}, + [0x2F945]={d="l"}, + [0x2F946]={d="l"}, + [0x2F947]={d="l"}, + [0x2F948]={d="l"}, + [0x2F949]={d="l"}, + [0x2F94A]={d="l"}, + [0x2F94B]={d="l"}, + [0x2F94C]={d="l"}, + [0x2F94D]={d="l"}, + [0x2F94E]={d="l"}, + [0x2F94F]={d="l"}, + [0x2F950]={d="l"}, + [0x2F951]={d="l"}, + [0x2F952]={d="l"}, + [0x2F953]={d="l"}, + [0x2F954]={d="l"}, + [0x2F955]={d="l"}, + [0x2F956]={d="l"}, + [0x2F957]={d="l"}, + [0x2F958]={d="l"}, + [0x2F959]={d="l"}, + [0x2F95A]={d="l"}, + [0x2F95B]={d="l"}, + [0x2F95C]={d="l"}, + [0x2F95D]={d="l"}, + [0x2F95E]={d="l"}, + [0x2F95F]={d="l"}, + [0x2F960]={d="l"}, + [0x2F961]={d="l"}, + [0x2F962]={d="l"}, + [0x2F963]={d="l"}, + [0x2F964]={d="l"}, + [0x2F965]={d="l"}, + [0x2F966]={d="l"}, + [0x2F967]={d="l"}, + [0x2F968]={d="l"}, + [0x2F969]={d="l"}, + [0x2F96A]={d="l"}, + [0x2F96B]={d="l"}, + [0x2F96C]={d="l"}, + [0x2F96D]={d="l"}, + [0x2F96E]={d="l"}, + [0x2F96F]={d="l"}, + [0x2F970]={d="l"}, + [0x2F971]={d="l"}, + [0x2F972]={d="l"}, + [0x2F973]={d="l"}, + [0x2F974]={d="l"}, + [0x2F975]={d="l"}, + [0x2F976]={d="l"}, + [0x2F977]={d="l"}, + [0x2F978]={d="l"}, + [0x2F979]={d="l"}, + [0x2F97A]={d="l"}, + [0x2F97B]={d="l"}, + [0x2F97C]={d="l"}, + [0x2F97D]={d="l"}, + [0x2F97E]={d="l"}, + [0x2F97F]={d="l"}, + [0x2F980]={d="l"}, + [0x2F981]={d="l"}, + [0x2F982]={d="l"}, + [0x2F983]={d="l"}, + [0x2F984]={d="l"}, + [0x2F985]={d="l"}, + [0x2F986]={d="l"}, + [0x2F987]={d="l"}, + [0x2F988]={d="l"}, + [0x2F989]={d="l"}, + [0x2F98A]={d="l"}, + [0x2F98B]={d="l"}, + [0x2F98C]={d="l"}, + [0x2F98D]={d="l"}, + [0x2F98E]={d="l"}, + [0x2F98F]={d="l"}, + [0x2F990]={d="l"}, + [0x2F991]={d="l"}, + [0x2F992]={d="l"}, + [0x2F993]={d="l"}, + [0x2F994]={d="l"}, + [0x2F995]={d="l"}, + [0x2F996]={d="l"}, + [0x2F997]={d="l"}, + [0x2F998]={d="l"}, + [0x2F999]={d="l"}, + [0x2F99A]={d="l"}, + [0x2F99B]={d="l"}, + [0x2F99C]={d="l"}, + [0x2F99D]={d="l"}, + [0x2F99E]={d="l"}, + [0x2F99F]={d="l"}, + [0x2F9A0]={d="l"}, + [0x2F9A1]={d="l"}, + [0x2F9A2]={d="l"}, + [0x2F9A3]={d="l"}, + [0x2F9A4]={d="l"}, + [0x2F9A5]={d="l"}, + [0x2F9A6]={d="l"}, + [0x2F9A7]={d="l"}, + [0x2F9A8]={d="l"}, + [0x2F9A9]={d="l"}, + [0x2F9AA]={d="l"}, + [0x2F9AB]={d="l"}, + [0x2F9AC]={d="l"}, + [0x2F9AD]={d="l"}, + [0x2F9AE]={d="l"}, + [0x2F9AF]={d="l"}, + [0x2F9B0]={d="l"}, + [0x2F9B1]={d="l"}, + [0x2F9B2]={d="l"}, + [0x2F9B3]={d="l"}, + [0x2F9B4]={d="l"}, + [0x2F9B5]={d="l"}, + [0x2F9B6]={d="l"}, + [0x2F9B7]={d="l"}, + [0x2F9B8]={d="l"}, + [0x2F9B9]={d="l"}, + [0x2F9BA]={d="l"}, + [0x2F9BB]={d="l"}, + [0x2F9BC]={d="l"}, + [0x2F9BD]={d="l"}, + [0x2F9BE]={d="l"}, + [0x2F9BF]={d="l"}, + [0x2F9C0]={d="l"}, + [0x2F9C1]={d="l"}, + [0x2F9C2]={d="l"}, + [0x2F9C3]={d="l"}, + [0x2F9C4]={d="l"}, + [0x2F9C5]={d="l"}, + [0x2F9C6]={d="l"}, + [0x2F9C7]={d="l"}, + [0x2F9C8]={d="l"}, + [0x2F9C9]={d="l"}, + [0x2F9CA]={d="l"}, + [0x2F9CB]={d="l"}, + [0x2F9CC]={d="l"}, + [0x2F9CD]={d="l"}, + [0x2F9CE]={d="l"}, + [0x2F9CF]={d="l"}, + [0x2F9D0]={d="l"}, + [0x2F9D1]={d="l"}, + [0x2F9D2]={d="l"}, + [0x2F9D3]={d="l"}, + [0x2F9D4]={d="l"}, + [0x2F9D5]={d="l"}, + [0x2F9D6]={d="l"}, + [0x2F9D7]={d="l"}, + [0x2F9D8]={d="l"}, + [0x2F9D9]={d="l"}, + [0x2F9DA]={d="l"}, + [0x2F9DB]={d="l"}, + [0x2F9DC]={d="l"}, + [0x2F9DD]={d="l"}, + [0x2F9DE]={d="l"}, + [0x2F9DF]={d="l"}, + [0x2F9E0]={d="l"}, + [0x2F9E1]={d="l"}, + [0x2F9E2]={d="l"}, + [0x2F9E3]={d="l"}, + [0x2F9E4]={d="l"}, + [0x2F9E5]={d="l"}, + [0x2F9E6]={d="l"}, + [0x2F9E7]={d="l"}, + [0x2F9E8]={d="l"}, + [0x2F9E9]={d="l"}, + [0x2F9EA]={d="l"}, + [0x2F9EB]={d="l"}, + [0x2F9EC]={d="l"}, + [0x2F9ED]={d="l"}, + [0x2F9EE]={d="l"}, + [0x2F9EF]={d="l"}, + [0x2F9F0]={d="l"}, + [0x2F9F1]={d="l"}, + [0x2F9F2]={d="l"}, + [0x2F9F3]={d="l"}, + [0x2F9F4]={d="l"}, + [0x2F9F5]={d="l"}, + [0x2F9F6]={d="l"}, + [0x2F9F7]={d="l"}, + [0x2F9F8]={d="l"}, + [0x2F9F9]={d="l"}, + [0x2F9FA]={d="l"}, + [0x2F9FB]={d="l"}, + [0x2F9FC]={d="l"}, + [0x2F9FD]={d="l"}, + [0x2F9FE]={d="l"}, + [0x2F9FF]={d="l"}, + [0x2FA00]={d="l"}, + [0x2FA01]={d="l"}, + [0x2FA02]={d="l"}, + [0x2FA03]={d="l"}, + [0x2FA04]={d="l"}, + [0x2FA05]={d="l"}, + [0x2FA06]={d="l"}, + [0x2FA07]={d="l"}, + [0x2FA08]={d="l"}, + [0x2FA09]={d="l"}, + [0x2FA0A]={d="l"}, + [0x2FA0B]={d="l"}, + [0x2FA0C]={d="l"}, + [0x2FA0D]={d="l"}, + [0x2FA0E]={d="l"}, + [0x2FA0F]={d="l"}, + [0x2FA10]={d="l"}, + [0x2FA11]={d="l"}, + [0x2FA12]={d="l"}, + [0x2FA13]={d="l"}, + [0x2FA14]={d="l"}, + [0x2FA15]={d="l"}, + [0x2FA16]={d="l"}, + [0x2FA17]={d="l"}, + [0x2FA18]={d="l"}, + [0x2FA19]={d="l"}, + [0x2FA1A]={d="l"}, + [0x2FA1B]={d="l"}, + [0x2FA1C]={d="l"}, + [0x2FA1D]={d="l"}, + [0xE0001]={d="bn"}, + [0xE0020]={d="bn"}, + [0xE0021]={d="bn"}, + [0xE0022]={d="bn"}, + [0xE0023]={d="bn"}, + [0xE0024]={d="bn"}, + [0xE0025]={d="bn"}, + [0xE0026]={d="bn"}, + [0xE0027]={d="bn"}, + [0xE0028]={d="bn"}, + [0xE0029]={d="bn"}, + [0xE002A]={d="bn"}, + [0xE002B]={d="bn"}, + [0xE002C]={d="bn"}, + [0xE002D]={d="bn"}, + [0xE002E]={d="bn"}, + [0xE002F]={d="bn"}, + [0xE0030]={d="bn"}, + [0xE0031]={d="bn"}, + [0xE0032]={d="bn"}, + [0xE0033]={d="bn"}, + [0xE0034]={d="bn"}, + [0xE0035]={d="bn"}, + [0xE0036]={d="bn"}, + [0xE0037]={d="bn"}, + [0xE0038]={d="bn"}, + [0xE0039]={d="bn"}, + [0xE003A]={d="bn"}, + [0xE003B]={d="bn"}, + [0xE003C]={d="bn"}, + [0xE003D]={d="bn"}, + [0xE003E]={d="bn"}, + [0xE003F]={d="bn"}, + [0xE0040]={d="bn"}, + [0xE0041]={d="bn"}, + [0xE0042]={d="bn"}, + [0xE0043]={d="bn"}, + [0xE0044]={d="bn"}, + [0xE0045]={d="bn"}, + [0xE0046]={d="bn"}, + [0xE0047]={d="bn"}, + [0xE0048]={d="bn"}, + [0xE0049]={d="bn"}, + [0xE004A]={d="bn"}, + [0xE004B]={d="bn"}, + [0xE004C]={d="bn"}, + [0xE004D]={d="bn"}, + [0xE004E]={d="bn"}, + [0xE004F]={d="bn"}, + [0xE0050]={d="bn"}, + [0xE0051]={d="bn"}, + [0xE0052]={d="bn"}, + [0xE0053]={d="bn"}, + [0xE0054]={d="bn"}, + [0xE0055]={d="bn"}, + [0xE0056]={d="bn"}, + [0xE0057]={d="bn"}, + [0xE0058]={d="bn"}, + [0xE0059]={d="bn"}, + [0xE005A]={d="bn"}, + [0xE005B]={d="bn"}, + [0xE005C]={d="bn"}, + [0xE005D]={d="bn"}, + [0xE005E]={d="bn"}, + [0xE005F]={d="bn"}, + [0xE0060]={d="bn"}, + [0xE0061]={d="bn"}, + [0xE0062]={d="bn"}, + [0xE0063]={d="bn"}, + [0xE0064]={d="bn"}, + [0xE0065]={d="bn"}, + [0xE0066]={d="bn"}, + [0xE0067]={d="bn"}, + [0xE0068]={d="bn"}, + [0xE0069]={d="bn"}, + [0xE006A]={d="bn"}, + [0xE006B]={d="bn"}, + [0xE006C]={d="bn"}, + [0xE006D]={d="bn"}, + [0xE006E]={d="bn"}, + [0xE006F]={d="bn"}, + [0xE0070]={d="bn"}, + [0xE0071]={d="bn"}, + [0xE0072]={d="bn"}, + [0xE0073]={d="bn"}, + [0xE0074]={d="bn"}, + [0xE0075]={d="bn"}, + [0xE0076]={d="bn"}, + [0xE0077]={d="bn"}, + [0xE0078]={d="bn"}, + [0xE0079]={d="bn"}, + [0xE007A]={d="bn"}, + [0xE007B]={d="bn"}, + [0xE007C]={d="bn"}, + [0xE007D]={d="bn"}, + [0xE007E]={d="bn"}, + [0xE007F]={d="bn"}, + [0xE0100]={}, +} diff --git a/macros/luatex/generic/unibidi-lua/unibidi-lua-doc.pdf b/macros/luatex/generic/unibidi-lua/unibidi-lua-doc.pdf Binary files differnew file mode 100644 index 0000000000..70438b60cf --- /dev/null +++ b/macros/luatex/generic/unibidi-lua/unibidi-lua-doc.pdf diff --git a/macros/luatex/generic/unibidi-lua/unibidi-lua.lua b/macros/luatex/generic/unibidi-lua/unibidi-lua.lua new file mode 100644 index 0000000000..e8e3cea0b7 --- /dev/null +++ b/macros/luatex/generic/unibidi-lua/unibidi-lua.lua @@ -0,0 +1,1170 @@ +--[[ + version = 0.1, 2025-01-19 + author = Hans Hagen, PRAGMA-ADE, Hasselt NL, Udi Fogiel + copyright = PRAGMA ADE / ConTeXt Development Team + license = GPL v2.0 + comment = Unicode bidi (sort of) + + +This is a follow up on typo-uda which itself is a follow up on t-bidi by Khaled Hosny which +in turn is based on minibidi.c from Arabeyes. This is a further optimizations, as well as +an update on some recent unicode bidi developments. There is (and will) also be more control +added. As a consequence this module is somewhat slower than its precursor which itself is +slower than the one-pass bidi handler. This is also a playground and I might add some plugin +support. However, in the meantime performance got a bit better and this third variant is again +some 10% faster than the second variant. + +todo (cf html): + +* normal The element does not offer a additional level of embedding with respect to the bidirectional algorithm. For inline elements implicit reordering works across element boundaries. +* embed If the element is inline, this value opens an additional level of embedding with respect to the bidirectional algorithm. The direction of this embedding level is given by the direction property. +* bidi-override For inline elements this creates an override. For block container elements this creates an override for inline-level descendants not within another block container element. This means that inside the element, reordering is strictly in sequence according to the direction property; the implicit part of the bidirectional algorithm is ignored. +* isolate This keyword indicates that the element's container directionality should be calculated without considering the content of this element. The element is therefore isolated from its siblings. When applying its bidirectional-resolution algorithm, its container element treats it as one or several U+FFFC Object Replacement Character, i.e. like an image. +* isolate-override This keyword applies the isolation behavior of the isolate keyword to the surrounding content and the override behavior o f the bidi-override keyword to the inner content. +* plaintext This keyword makes the elements directionality calculated without considering its parent bidirectional state or the value of the direction property. The directionality is calculated using the P2 and P3 rules of the Unicode Bidirectional Algorithm. + This value allows to display data which has already formatted using a tool following the Unicode Bidirectional Algorithm. + + todo: check for introduced errors + todo: reuse list, we have size, so we can just change values (and auto allocate when not there) + todo: reuse the stack + todo: no need for a max check + todo: collapse bound similar ranges (not ok yet) + todo: combine some sweeps + todo: removing is not needed when we inject at the same spot (only chnage the dir property) + todo: isolated runs (isolating runs are similar to bidi=local in the basic analyzer) + + todo: check unicode addenda (from the draft): + +Added support for canonical equivalents in BD16. +Changed logic in N0 to not check forwards for context in the case of enclosed text opposite the embedding direction. +Major extension of the algorithm to allow for the implementation of directional isolates and the introduction of new isolate-related values to the Bidi_Class property. +Adds BD8, BD9, BD10, BD11, BD12, BD13, BD14, BD15, and BD16, Sections 2.4 and 2.5, and Rules X5a, X5b, X5c and X6a. +Extensively revises Section 3.3.2, Explicit Levels and Directions and its existing X rules to formalize the algorithm for matching a PDF with the embedding or override initiator whose scope it terminates. +Moves Rules X9 and X10 into a separate new Section 3.3.3, Preparations for Implicit Processing. +Modifies Rule X10 to make the isolating run sequence the unit to which subsequent rules are applied. +Modifies Rule W1 to change an NSM preceded by an isolate initiator or PDI into ON. +Adds Rule N0 and makes other changes to Section 3.3.5, Resolving Neutral and Isolate Formatting Types to resolve bracket pairs to the same level. + +This file is a derivative of typo-duc.lua from the ConTeXt project. + +]]-- + +local concat = table.concat +local utfchar = utf.char +local setmetatable = setmetatable +local formatters = string.formatters + +local characters = characters or { } +local data = require("unibidi-lua-data.lua") +characters.directions = { } + +table.setmetatableindex(characters.directions,function(t,k) + local d = data[k] + if d then + local v = d.d + if v then + t[k] = v + return v + end + end + t[k] = false -- maybe 'l' + return false +end) + +characters.mirrors = { } + +table.setmetatableindex(characters.mirrors,function(t,k) + local d = data[k] + if d then + local v = d.m + if v then + t[k] = v + return v + end + end + t[k] = false + return false +end) + +characters.textclasses = { } + +table.setmetatableindex(characters.textclasses,function(t,k) + local d = data[k] + if d then + local v = d.tc + if v then + t[k] = v + return v + end + end + t[k] = false + return false +end) + +local directiondata = characters.directions +local mirrordata = characters.mirrors +local textclassdata = characters.textclasses + +local getnext = node.direct.getnext +local getprev = node.direct.getprev +local getid = node.direct.getid +local getsubtype = node.direct.getsubtype +local getchar = node.direct.getchar +local getattr = node.direct.get_attribute +local getdirection = node.direct.getdirection + +local setchar = node.direct.setchar +local setdirection = node.direct.setdirection + +local properties = node.direct.get_properties_table() + +local remove_node = node.direct.remove +local insertnodeafter = node.direct.insert_after +local insertnodebefore = node.direct.insert_before + +local getfont = node.direct.getfont + +local todirect = node.direct.todirect +local tonode = node.direct.tonode + +local startofpar = function(n) + local s = getsubtype(n) + return s == 0 or s == 2 or s == 3 + end + +local new_direction = function (dir,swap) + local t = node.direct.new("dir") + if not dir then + -- just a l2r start node + elseif swap then + setdirection(t,dir,true) + else + setdirection(t,dir,false) + end + return t + end + +local nodecodes = { } + +local glyph_code = node.id("glyph") +local glue_code = node.id("glue") +local hlist_code = node.id("hlist") +local vlist_code = node.id("vlist") +local math_code = node.id("math") +local dir_code = node.id("dir") +local par_code = node.id("local_par") +local penalty_code = node.id("penalty") + +local parfillskip_code = 15 +local parfillleftskip_code = nil -- LuaMeTaTex only + +local lefttoright_code = 0 +local righttoleft_code = 1 + +local maximum_stack = 0xFF + +local a_directions = luatexbase.new_attribute('directions') + +local remove_controls = true +----- analyze_fences = true + +local report_directions = function(...) end + +local trace_directions = false +local trace_details = false +local trace_list = false + +-- strong (old): +-- +-- l : left to right +-- r : right to left +-- lro : left to right override +-- rlo : left to left override +-- lre : left to right embedding +-- rle : left to left embedding +-- al : right to legt arabic (esp punctuation issues) +-- +-- weak: +-- +-- en : english number +-- es : english number separator +-- et : english number terminator +-- an : arabic number +-- cs : common number separator +-- nsm : nonspacing mark +-- bn : boundary neutral +-- +-- neutral: +-- +-- b : paragraph separator +-- s : segment separator +-- ws : whitespace +-- on : other neutrals +-- +-- interesting: this is indeed better (and more what we expect i.e. we already use this split +-- in the old original (also these isolates) +-- +-- strong (new): +-- +-- l : left to right +-- r : right to left +-- al : right to left arabic (esp punctuation issues) +-- +-- explicit: (new) +-- +-- lro : left to right override +-- rlo : left to left override +-- lre : left to right embedding +-- rle : left to left embedding +-- pdf : pop dir format +-- lri : left to right isolate +-- rli : left to left isolate +-- fsi : first string isolate +-- pdi : pop directional isolate + +local whitespace = { + lre = true, + rle = true, + lro = true, + rlo = true, + pdf = true, + bn = true, + ws = true, +} + +local b_s_ws_on = { + b = true, + s = true, + ws = true, + on = true +} + +-- tracing + +local function show_list(list,size,what) + local what = what or "direction" + local joiner = utfchar(0x200C) + local result = { } + for i=1,size do + local entry = list[i] + local character = entry.char + local direction = entry[what] + if character == 0xFFFC then + local first = entry.id + local last = entry.last + local skip = entry.skip + if last then + result[i] = formatters["%-3s:%s %s..%s (%i)"](direction,joiner,nodecodes[first],nodecodes[last],skip or 0) + else + result[i] = formatters["%-3s:%s %s (%i)"](direction,joiner,nodecodes[first],skip or 0) + end + elseif character >= 0x202A and character <= 0x202C then + result[i] = formatters["%-3s:%s %U"](direction,joiner,character) + else + result[i] = formatters["%-3s:%s %c %U"](direction,joiner,character,character) + end + end + return concat(result,joiner .. " | " .. joiner) +end + +-- preparation + +local function show_done(list,size) + local joiner = utfchar(0x200C) + local result = { } + local format = formatters["<%s>"] + for i=1,size do + local entry = list[i] + local character = entry.char + local begindir = entry.begindir + local enddir = entry.enddir + if begindir then + result[#result+1] = format(begindir) + end + if entry.remove then + -- continue + elseif character == 0xFFFC then + result[#result+1] = format("?") + elseif character == 0x0020 then + result[#result+1] = format(" ") + elseif character >= 0x202A and character <= 0x202C then + result[#result+1] = format(entry.original) + else + result[#result+1] = utfchar(character) + end + if enddir then + result[#result+1] = format(enddir) + end + end + return concat(result,joiner) +end + +-- keeping the list and overwriting doesn't save much runtime, only a few percent +-- char is only used for mirror, so in fact we can as well only store it for +-- glyphs only +-- +-- tracking what direction is used and skipping tests is not faster (extra kind of +-- compensates gain) + +local mt_space = { __index = { char = 0x0020, direction = "ws", original = "ws", level = 0, skip = 0 } } +local mt_lre = { __index = { char = 0x202A, direction = "lre", original = "lre", level = 0, skip = 0 } } +local mt_rle = { __index = { char = 0x202B, direction = "rle", original = "rle", level = 0, skip = 0 } } +local mt_pdf = { __index = { char = 0x202C, direction = "pdf", original = "pdf", level = 0, skip = 0 } } +local mt_object = { __index = { char = 0xFFFC, direction = "on", original = "on", level = 0, skip = 0 } } + +local stack = table.setmetatableindex("table") -- shared +local list = { } -- shared + +local function build_list(head,where) + -- P1 + local current = head + local size = 0 + while current do + size = size + 1 + local id = getid(current) + local p = properties[current] + if p and p.directions then + -- tricky as dirs can be injected in between + local skip = 0 + local last = id + current = getnext(current) + while current do + local id = getid(current) + local p = properties[current] + if p and p.directions then + skip = skip + 1 + last = id + current = getnext(current) + else + break + end + end + if id == last then -- the start id + list[size] = setmetatable({ skip = skip, id = id },mt_object) + else + list[size] = setmetatable({ skip = skip, id = id, last = last },mt_object) + end + elseif id == glyph_code then + local chr = getchar(current) + local dir = directiondata[chr] + -- could also be a metatable + list[size] = { char = chr, direction = dir, original = dir, level = 0 } + current = getnext(current) + -- if not list[dir] then list[dir] = true end -- not faster when we check for usage + elseif id == glue_code then -- and how about kern + list[size] = setmetatable({ },mt_space) + current = getnext(current) + elseif id == dir_code then + local dir, pop = getdirection(current) + if dir == lefttoright_code then + list[size] = setmetatable({ },pop and mt_pdf or mt_lre) + elseif dir == righttoleft_code then + list[size] = setmetatable({ },pop and mt_pdf or mt_rle) + else + list[size] = setmetatable({ id = id },mt_object) + end + current = getnext(current) + elseif id == math_code then + local skip = 0 + current = getnext(current) + while getid(current) ~= math_code do + skip = skip + 1 + current = getnext(current) + end + skip = skip + 1 + current = getnext(current) + list[size] = setmetatable({ id = id, skip = skip },mt_object) + else -- disc_code: we assume that these are the same as the surrounding + local skip = 0 + local last = id + current = getnext(current) + while n do + local id = getid(current) + if id ~= glyph_code and id ~= glue_code and id ~= dir_code then + skip = skip + 1 + last = id + current = getnext(current) + else + break + end + end + if id == last then -- the start id + list[size] = setmetatable({ id = id, skip = skip },mt_object) + else + list[size] = setmetatable({ id = id, skip = skip, last = last },mt_object) + end + end + end + return list, size +end + +-- new + +-- we could support ( ] and [ ) and such ... + +-- ש ) ל ( א 0-0 +-- ש ( ל ] א 0-0 +-- ש ( ל ) א 2-4 +-- ש ( ל [ א ) כ ] 2-6 +-- ש ( ל ] א ) כ 2-6 +-- ש ( ל ) א ) כ 2-4 +-- ש ( ל ( א ) כ 4-6 +-- ש ( ל ( א ) כ ) 2-8,4-6 +-- ש ( ל [ א ] כ ) 2-8,4-6 + +local fencestack = table.setmetatableindex("table") + +local function resolve_fences(list,size,start,limit) + -- N0: funny effects, not always better, so it's an option + local nofstack = 0 + for i=start,limit do + local entry = list[i] + if entry.direction == "on" then + local char = entry.char + local mirror = mirrordata[char] + if mirror then + local class = textclassdata[char] + entry.mirror = mirror + entry.class = class + if class == "open" then + nofstack = nofstack + 1 + local stacktop = fencestack[nofstack] + stacktop[1] = mirror + stacktop[2] = i + elseif nofstack == 0 then + -- skip + elseif class == "close" then + while nofstack > 0 do + local stacktop = fencestack[nofstack] + if stacktop[1] == char then + local open = stacktop[2] + local close = i + list[open ].paired = close + list[close].paired = open + break + else + -- do we mirror or not + end + nofstack = nofstack - 1 + end + end + end + end + end +end + +-- local function test_fences(str) +-- local list = { } +-- for s in string.gmatch(str,".") do +-- local b = utf.byte(s) +-- list[#list+1] = { c = s, char = b, direction = directiondata[b] } +-- end +-- resolve_fences(list,#list,1,#size) +-- inspect(list) +-- end +-- +-- test_fences("a(b)c(d)e(f(g)h)i") +-- test_fences("a(b[c)d]") + +-- the action + +local function get_baselevel(head,list,size,direction) + if direction == lefttoright_code or direction == righttoleft_code then + return direction, true + elseif getid(head) == par_code and startofpar(head) then + direction = getdirection(head) + if direction == lefttoright_code or direction == righttoleft_code then + return direction, true + end + end + -- P2, P3 + for i=1,size do + local entry = list[i] + local direction = entry.direction + if direction == "r" or direction == "al" then -- and an ? + return righttoleft_code, true + elseif direction == "l" then + return lefttoright_code, true + end + end + return lefttoright_code, false +end + +local function resolve_explicit(list,size,baselevel) +-- if list.rle or list.lre or list.rlo or list.lro then + -- X1 + local level = baselevel + local override = "on" + local nofstack = 0 + for i=1,size do + local entry = list[i] + local direction = entry.direction + -- X2 + if direction == "rle" then + if nofstack < maximum_stack then + nofstack = nofstack + 1 + local stacktop = stack[nofstack] + stacktop[1] = level + stacktop[2] = override + level = level + (level % 2 == 1 and 2 or 1) -- least_greater_odd(level) + override = "on" + entry.level = level + entry.direction = "bn" + entry.remove = true + elseif trace_directions then + report_directions("stack overflow at position %a with direction %a",i,direction) + end + -- X3 + elseif direction == "lre" then + if nofstack < maximum_stack then + nofstack = nofstack + 1 + local stacktop = stack[nofstack] + stacktop[1] = level + stacktop[2] = override + level = level + (level % 2 == 1 and 1 or 2) -- least_greater_even(level) + override = "on" + entry.level = level + entry.direction = "bn" + entry.remove = true + elseif trace_directions then + report_directions("stack overflow at position %a with direction %a",i,direction) + end + -- X4 + elseif direction == "rlo" then + if nofstack < maximum_stack then + nofstack = nofstack + 1 + local stacktop = stack[nofstack] + stacktop[1] = level + stacktop[2] = override + level = level + (level % 2 == 1 and 2 or 1) -- least_greater_odd(level) + override = "r" + entry.level = level + entry.direction = "bn" + entry.remove = true + elseif trace_directions then + report_directions("stack overflow at position %a with direction %a",i,direction) + end + -- X5 + elseif direction == "lro" then + if nofstack < maximum_stack then + nofstack = nofstack + 1 + local stacktop = stack[nofstack] + stacktop[1] = level + stacktop[2] = override + level = level + (level % 2 == 1 and 1 or 2) -- least_greater_even(level) + override = "l" + entry.level = level + entry.direction = "bn" + entry.remove = true + elseif trace_directions then + report_directions("stack overflow at position %a with direction %a",i,direction) + end + -- X7 + elseif direction == "pdf" then + if nofstack > 0 then + local stacktop = stack[nofstack] + level = stacktop[1] + override = stacktop[2] + nofstack = nofstack - 1 + entry.level = level + entry.direction = "bn" + entry.remove = true + elseif trace_directions then + report_directions("stack underflow at position %a with direction %a", + i, direction) + else + report_directions("stack underflow at position %a with direction %a: %s", + i, direction, show_list(list,size)) + end + -- X6 + else + entry.level = level + if override ~= "on" then + entry.direction = override + end + end + end + -- X8 (reset states and overrides after paragraph) +end + +local function resolve_weak(list,size,start,limit,orderbefore,orderafter) + -- W1: non spacing marks get the direction of the previous character +-- if list.nsm then + for i=start,limit do + local entry = list[i] + if entry.direction == "nsm" then + if i == start then + entry.direction = orderbefore + else + entry.direction = list[i-1].direction + end + end + end +-- end + -- W2: mess with numbers and arabic +-- if list.en then + for i=start,limit do + local entry = list[i] + if entry.direction == "en" then + for j=i-1,start,-1 do + local prev = list[j] + local direction = prev.direction + if direction == "al" then + entry.direction = "an" + break + elseif direction == "r" or direction == "l" then + break + end + end + end + end +-- end + -- W3 +-- if list.al then + for i=start,limit do + local entry = list[i] + if entry.direction == "al" then + entry.direction = "r" + end + end +-- end + -- W4: make separators number +-- if list.es or list.cs then + -- skip + if false then + for i=start+1,limit-1 do + local entry = list[i] + local direction = entry.direction + if direction == "es" then + if list[i-1].direction == "en" and list[i+1].direction == "en" then + entry.direction = "en" + end + elseif direction == "cs" then + local prevdirection = list[i-1].direction + if prevdirection == "en" then + if list[i+1].direction == "en" then + entry.direction = "en" + end + elseif prevdirection == "an" and list[i+1].direction == "an" then + entry.direction = "an" + end + end + end + else -- only more efficient when we have es/cs + local runner = start + 2 + if runner <= limit then + local before = list[start] + local current = list[start + 1] + local after = list[runner] + while after do + local direction = current.direction + if direction == "es" then + if before.direction == "en" and after.direction == "en" then + current.direction = "en" + end + elseif direction == "cs" then + local prevdirection = before.direction + if prevdirection == "en" then + if after.direction == "en" then + current.direction = "en" + end + elseif prevdirection == "an" and after.direction == "an" then + current.direction = "an" + end + end + before = current + current = after + after = list[runner] + runner = runner + 1 + end + end + end +-- end + -- W5 +-- if list.et then + local i = start + while i <= limit do + if list[i].direction == "et" then + local runstart = i + local runlimit = runstart + for i=runstart,limit do + if list[i].direction == "et" then + runlimit = i + else + break + end + end + local rundirection = runstart == start and sor or list[runstart-1].direction + if rundirection ~= "en" then + rundirection = runlimit == limit and orderafter or list[runlimit+1].direction + end + if rundirection == "en" then + for j=runstart,runlimit do + list[j].direction = "en" + end + end + i = runlimit + end + i = i + 1 + end +-- end + -- W6 +-- if list.es or list.cs or list.et then + for i=start,limit do + local entry = list[i] + local direction = entry.direction + if direction == "es" or direction == "et" or direction == "cs" then + entry.direction = "on" + end + end +-- end + -- W7 + for i=start,limit do + local entry = list[i] + if entry.direction == "en" then + local prev_strong = orderbefore + for j=i-1,start,-1 do + local direction = list[j].direction + if direction == "l" or direction == "r" then + prev_strong = direction + break + end + end + if prev_strong == "l" then + entry.direction = "l" + end + end + end +end + +local function resolve_neutral(list,size,start,limit,orderbefore,orderafter) + -- N1, N2 + local i = start + while i <= limit do + local entry = list[i] + if b_s_ws_on[entry.direction] then + -- this needs checking + local leading_direction, trailing_direction, resolved_direction + local runstart = i + local runlimit = runstart +-- for j=runstart,limit do + for j=runstart+1,limit do + if b_s_ws_on[list[j].direction] then +-- runstart = j + runlimit = j + else + break + end + end + if runstart == start then + leading_direction = orderbefore + else + leading_direction = list[runstart-1].direction + if leading_direction == "en" or leading_direction == "an" then + leading_direction = "r" + end + end + if runlimit == limit then + trailing_direction = orderafter + else + trailing_direction = list[runlimit+1].direction + if trailing_direction == "en" or trailing_direction == "an" then + trailing_direction = "r" + end + end + if leading_direction == trailing_direction then + -- N1 + resolved_direction = leading_direction + else + -- N2 / does the weird period + resolved_direction = entry.level % 2 == 1 and "r" or "l" + end + for j=runstart,runlimit do + list[j].direction = resolved_direction + end + i = runlimit + end + i = i + 1 + end +end + +local function resolve_implicit(list,size,start,limit,orderbefore,orderafter,baselevel) + for i=start,limit do + local entry = list[i] + local level = entry.level + local direction = entry.direction + if level % 2 ~= 1 then -- even + -- I1 + if direction == "r" then + entry.level = level + 1 + elseif direction == "an" or direction == "en" then + entry.level = level + 2 + end + else + -- I2 + if direction == "l" or direction == "en" or direction == "an" then + entry.level = level + 1 + end + end + end +end + +local function resolve_levels(list,size,baselevel,analyze_fences) + -- X10 + local start = 1 + while start < size do + local level = list[start].level + local limit = start + 1 + while limit < size and list[limit].level == level do + limit = limit + 1 + end + local prev_level = start == 1 and baselevel or list[start-1].level + local next_level = limit == size and baselevel or list[limit+1].level + local orderbefore = (level > prev_level and level or prev_level) % 2 == 1 and "r" or "l" + local orderafter = (level > next_level and level or next_level) % 2 == 1 and "r" or "l" + -- W1 .. W7 + resolve_weak(list,size,start,limit,orderbefore,orderafter) + -- N0 + if analyze_fences then + resolve_fences(list,size,start,limit) + end + -- N1 .. N2 + resolve_neutral(list,size,start,limit,orderbefore,orderafter) + -- I1 .. I2 + resolve_implicit(list,size,start,limit,orderbefore,orderafter,baselevel) + start = limit + end + -- L1 + for i=1,size do + local entry = list[i] + local direction = entry.original + -- (1) + if direction == "s" or direction == "b" then + entry.level = baselevel + -- (2) + for j=i-1,1,-1 do + local entry = list[j] + if whitespace[entry.original] then + entry.level = baselevel + else + break + end + end + end + end + -- (3) + for i=size,1,-1 do + local entry = list[i] + if whitespace[entry.original] then + entry.level = baselevel + else + break + end + end + -- L4 + if analyze_fences then + for i=1,size do + local entry = list[i] + if entry.level % 2 == 1 then -- odd(entry.level) + if entry.mirror and not entry.paired then + entry.mirror = false + end + -- okay + elseif entry.mirror then + entry.mirror = false + end + end + else + for i=1,size do + local entry = list[i] + if entry.level % 2 == 1 then -- odd(entry.level) + local mirror = mirrordata[entry.char] + if mirror then + entry.mirror = mirror + end + end + end + end +end + +local stack = { } + +local function insert_dir_points(list,size) + -- L2, but no actual reversion is done, we simply annotate where + -- begindir/endddir node will be inserted. + local maxlevel = 0 + local toggle = true + for i=1,size do + local level = list[i].level + if level > maxlevel then + maxlevel = level + end + end + for level=0,maxlevel do + local started -- = false + local begindir -- = nil + local enddir -- = nil + local prev -- = nil + if toggle then + begindir = lefttoright_code + enddir = lefttoright_code + toggle = false + else + begindir = righttoleft_code + enddir = righttoleft_code + toggle = true + end + for i=1,size do + local entry = list[i] + if entry.level >= level then + if not started then + entry.begindir = begindir + started = true + end + else + if started then + prev.enddir = enddir + started = false + end + end + prev = entry + end + end + -- make sure to close the run at end of line + local last = list[size] + if not last.enddir then + local n = 0 + for i=1,size do + local entry = list[i] + local e = entry.enddir + local b = entry.begindir + if e then + n = n - 1 + end + if b then + n = n + 1 + stack[n] = b + end + end + if n > 0 then + if trace_list and n > 1 then + report_directions("unbalanced list") + end + last.enddir = stack[n] + end + end +end + +-- We flag nodes that can be skipped when we see them again but because whatever +-- mechanism can injetc dir nodes that then are not flagged, we don't flag dir +-- nodes that we inject here. + +local function apply_to_list(list,size,head,pardir) + local index = 1 + local current = head + if trace_list then + report_directions("start run") + end + while current do + if index > size then + report_directions("fatal error, size mismatch") + break + end + local id = getid(current) + local entry = list[index] + local begindir = entry.begindir + local enddir = entry.enddir + local p = properties[current] + if p then + p.directions = true + else + properties[current] = { directions = true } + end + if id == glyph_code and entry.mirror then + local curr_font = getfont(current) + if curr_font > 0 and font.fonts[curr_font].properties then + local font_mode = font.fonts[curr_font].properties.mode + if font_mode ~= 'harf' and font_mode ~= 'plug' then + setchar(current,entry.mirror) + end + end + if trace_directions then + local direction = entry.direction + if trace_list then + local original = entry.original + local char = entry.char + local level = entry.level + if direction == original then + report_directions("%2i : %C : %s",level,char,direction) + else + report_directions("%2i : %C : %s -> %s",level,char,original,direction) + end + end + setcolor(current,direction,false,mirror) + end + elseif id == hlist_code or id == vlist_code then + setdirection(current,pardir) -- is this really needed? + elseif id == glue_code then + -- Maybe I should also fix dua and dub but on the other hand ... why? + if enddir and getsubtype(current) == parfillskip_code then + -- insert the last enddir before \parfillskip glue + local c = current + local p = getprev(c) + if p and getid(p) == glue_code and getsubtype(p) == parfillleftskip_code then + c = p + p = getprev(c) + end + if p and getid(p) == penalty_code then -- linepenalty + c = p + end + -- there is always a par nodes so head will stay + head = insertnodebefore(head,c,new_direction(enddir,true)) + enddir = false + end + elseif begindir then + if id == par_code and startofpar(current) then + -- par should always be the 1st node + head, current = insertnodeafter(head,current,new_direction(begindir)) + begindir = nil + end + end + if begindir then + head = insertnodebefore(head,current,new_direction(begindir)) + end + local skip = entry.skip + if skip and skip > 0 then + for i=1,skip do + current = getnext(current) + local p = properties[current] + if p then + p.directions = true + else + properties[current] = { directions = true } + end + end + end + if enddir then + head, current = insertnodeafter(head,current,new_direction(enddir,true)) + end + if not entry.remove then + current = getnext(current) + elseif remove_controls then + -- X9 + head, current = remove_node(head,current,true) + else + current = getnext(current) + end + index = index + 1 + end + if trace_list then + report_directions("stop run") + end + return head +end + +-- If needed we can optimize for only_one. There is no need to do anything +-- when it's not a glyph. Otherwise we only need to check mirror and apply +-- directions when it's different from the surrounding. Paragraphs always +-- have more than one node. Actually, we only enter this function when we +-- do have a glyph! + +local analyze_fences = false +local function process(head,where,direction) + if where == "fin_row" then return true end + if where == "align_set" then head = node.first_glyph(head) print(head) end + if not head then return true end + head = todirect(head) + local list, size = build_list(head,where) + local baselevel, dirfound = get_baselevel(head,list,size,direction) + if trace_details then + report_directions("analyze: baselevel %a",baselevel == righttoleft_code and "r2l" or "l2r") + report_directions("before : %s",show_list(list,size,"original")) + end + resolve_explicit(list,size,baselevel) + resolve_levels(list,size,baselevel,analyze_fences) + insert_dir_points(list,size) + if trace_details then + report_directions("after : %s",show_list(list,size,"direction")) + report_directions("result : %s",show_done(list,size)) + end + return tonode(apply_to_list(list,size,head,baselevel)) +end + +local put_next = token.put_next +local get_next = token.get_next +local scan_keyword = token.scan_keyword +local scan_toks = token.scan_toks + +local relax +do + local prefix = 'u@a^x&9_' + while token.is_defined(prefix .. 'let') or token.is_defined(prefix .. 'relax') do + prefix = prefix .. 'u@a^x&9_' + end + local undef = token.create(prefix .. 'relax') + tex.enableprimitives(prefix,{'relax', 'let'}) + local function frozentok(name) + local tok = token.create(prefix .. name) + return token.new(tok.mode, tok.command) + end + relax = frozentok'relax' + let = frozentok'let' + tex.runtoks(function() + for _,csname in ipairs({'relax', 'let'}) do + put_next(let, token.create(prefix .. csname), undef) + end + end) +end + +local enabled = true +local function interface() + local saved_endlinechar = tex.endlinechar + tex.endlinechar = 32 + local toks = scan_toks() + tex.endlinechar = saved_endlinechar + put_next(relax) + put_next(toks) + + while true do + if scan_keyword('enable') then + if not enabled then + enabled = true + luatexbase.add_to_callback("pre_shaping_filter", process, "unibidi-lua.process") + end + elseif scan_keyword('disable') then + if enabled then + enabled = false + luatexbase.remove_from_callback("pre_shaping_filter", "unibidi-lua.process") + end + elseif scan_keyword('fences') then + scan_keyword('=') + if scan_keyword('true') then + analyze_fences = true + elseif scan_keyword('false') then + analyze_fences = false + end + else + break + end + end + + local tok = get_next() + if tok.tok ~= relax.tok then + tex.error("unibidi-lua: wrong syntax in \\unibidilua", + {"There's a '" .. (tok.csname or uni_char(tok.mode)) .. "' out of place." }) + put_next(tok) + end + +end + +do + if token.is_defined('unibidilua') then + texio.write_nl('log', "unibidi-lua: redefining \\unibidilua") + end + local function_table = lua.get_functions_table() + local luafnalloc = luatexbase and luatexbase.new_luafunction and luatexbase.new_luafunction('unibidilua') or #function_table + 1 + token.set_lua('unibidilua', luafnalloc) + function_table[luafnalloc] = interface +end + +luatexbase.add_to_callback("pre_shaping_filter", process, "unibidi-lua") diff --git a/macros/luatex/generic/unibidi-lua/unibidi-lua.opm b/macros/luatex/generic/unibidi-lua/unibidi-lua.opm new file mode 100644 index 0000000000..a947d669fb --- /dev/null +++ b/macros/luatex/generic/unibidi-lua/unibidi-lua.opm @@ -0,0 +1,48 @@ +% Optional comments +\_codedecl \unibidilua {Unicode Bidi Algorithm for OpTeX <0.1, 2025-01-19>} + +\_initunifonts +\_directlua{require('unibidi-lua.lua')} + +\_endcode + +This package is still in early phase, and the interface +might still change. +The requirements are the \LuaTeX/ engine, +and the `luaotfload` font loader. + +\def\key #1:{{\bf #1:}\hskip1em\ignorespaces} +Currently there is only only one macro, `\unibidilua`, +which accepts a key-value pairs separated by a space. +The macro accepts three keyword: +\begitems \style O +* \key enable: This key adds unibidi-lua's process function to the + `pre_shaping_filter` callback. It does not accept a value. +* \key disable: This key removes unibidi-lua's process function from the + `pre_shaping_filter` callback. It does not accept a value. +* \key fences: This key accepts a boolean value. It allows to disable or + enable step N0 of the UAX9 algorithm. +\enditems + +To use the package, as with other packages, you can do `\load[unibidi-lua]`, `\usepackage{unibidi-lua}` or `\input unibidi-lua` +if you are using \OpTeX, \LaTeX or Plain respectively. The process function +is added to the `pre_shaping_filter` when you load the package. + +\_doc +\verbchar` +% optex -jobname unibidi-lua-doc '\docgen unibidi-lua' +\load [doc] +\overfullrule=0pt +\tit Unicode Bidi Algorithm Implementation for \OpTeX, \LaTeX, and Plain +\hfill Version: 0.1, 2025-01-19 \par +\centerline{\it Udi Fogiel, 2025} +\parindent0pt\parskip5pt\parfillskip=20ptplus1fill +The unibidi-lua LuTeX packge is an implementation of the \ulink[https://www.unicode.org/reports/tr9/] +{Unicode Annex \#9} for \OpTeX, \LaTeX/ and Plain \LuaTeX/ formats. It allows to typeset +bidirectional documents without the need of a special markup. + +\printdoctail unibidi-lua.opm % prints the documentation written after \_endcode +\bye +\_cod + +\endinput diff --git a/macros/luatex/generic/unibidi-lua/unibidi-lua.sty b/macros/luatex/generic/unibidi-lua/unibidi-lua.sty new file mode 100644 index 0000000000..e14a118943 --- /dev/null +++ b/macros/luatex/generic/unibidi-lua/unibidi-lua.sty @@ -0,0 +1,7 @@ +\ProvidesPackage + {unibidi-lua} [2025-01-19 v0.1 + Unicode Bidi Algorithm for LuaLaTeX] + +\directlua{require("unibidi-lua.lua")} + +\endinput diff --git a/macros/luatex/generic/unibidi-lua/unibidi-lua.tex b/macros/luatex/generic/unibidi-lua/unibidi-lua.tex new file mode 100644 index 0000000000..de6d8c8299 --- /dev/null +++ b/macros/luatex/generic/unibidi-lua/unibidi-lua.tex @@ -0,0 +1,5 @@ +% unibidi-lua.tex version 0.1, 2025-01-19 +\input luaotfload.sty +\directlua{require("unibidi-lua.lua")} + +\endinput |