summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
-rw-r--r--src/cyrsasl.erl2
-rw-r--r--src/cyrsasl_digest.erl3
-rw-r--r--src/ejabberd_auth.erl18
-rw-r--r--src/ejabberd_c2s.erl77
-rw-r--r--src/ejabberd_local.erl9
-rw-r--r--src/ejabberd_router.erl4
-rw-r--r--src/ejabberd_s2s.erl5
-rw-r--r--src/ejabberd_s2s_in.erl2
-rw-r--r--src/ejabberd_sm.erl56
-rw-r--r--src/jlib.erl97
-rw-r--r--src/jlib.hrl2
-rw-r--r--src/mod_disco.erl2
-rw-r--r--src/mod_irc/mod_irc.erl24
-rw-r--r--src/mod_irc/mod_irc_connection.erl10
-rw-r--r--src/mod_muc/mod_muc_room.erl100
-rw-r--r--src/mod_offline.erl7
-rw-r--r--src/mod_privacy.erl55
-rw-r--r--src/mod_private.erl4
-rw-r--r--src/mod_pubsub/mod_pubsub.erl36
-rw-r--r--src/mod_register.erl16
-rw-r--r--src/mod_roster.erl80
-rw-r--r--src/mod_vcard.erl68
-rw-r--r--src/stringprep/stringprep_drv.c129
-rw-r--r--src/stringprep/uni_norm.c1716
-rw-r--r--src/stringprep/uni_parse2.tcl75
26 files changed, 1369 insertions, 1241 deletions
diff --git a/ChangeLog b/ChangeLog
index 872ad657..5b8619ab 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2003-10-07 Alexey Shchepin <alexey@sevcom.net>
+
+ * (all): Changed JID storage format, added support for stringprep
+
+ * src/stringprep/: Added support for Unicode normalization form KC
+
+2003-10-05 Alexey Shchepin <alexey@sevcom.net>
+
+ * src/stringprep/: Added support for case convertion to multiple
+ characters
+
+ * src/cyrsasl_digest.erl: Temporary removed "auth-int" QOP
+
2003-09-28 Alexey Shchepin <alexey@sevcom.net>
* src/stringprep/stringprep_drv.c: Added support for nameprep,
diff --git a/src/cyrsasl.erl b/src/cyrsasl.erl
index b8713362..feb190af 100644
--- a/src/cyrsasl.erl
+++ b/src/cyrsasl.erl
@@ -49,7 +49,7 @@ check_authzid(State, Props) ->
error ->
{error, "invalid-authzid"};
JID ->
- LUser = xml:get_attr_s(username, Props),
+ LUser = jlib:nodeprep(xml:get_attr_s(username, Props)),
{U, S, R} = jlib:jid_tolower(JID),
case R of
"" ->
diff --git a/src/cyrsasl_digest.erl b/src/cyrsasl_digest.erl
index b9f0730d..9b43b2e3 100644
--- a/src/cyrsasl_digest.erl
+++ b/src/cyrsasl_digest.erl
@@ -34,7 +34,8 @@ mech_new() ->
mech_step(#state{step = 1, nonce = Nonce} = State, "") ->
{continue,
"nonce=\"" ++ jlib:encode_base64(Nonce) ++
- "\",qop=\"auth,auth-int\",charset=utf-8,algorithm=md5-sess",
+ "\",qop=\"auth\",charset=utf-8,algorithm=md5-sess",
+ %"\",qop=\"auth,auth-int\",charset=utf-8,algorithm=md5-sess",
State#state{step = 3}};
mech_step(#state{step = 3, nonce = Nonce} = State, ClientIn) ->
case parse(ClientIn) of
diff --git a/src/ejabberd_auth.erl b/src/ejabberd_auth.erl
index e080b802..54b62c00 100644
--- a/src/ejabberd_auth.erl
+++ b/src/ejabberd_auth.erl
@@ -109,7 +109,7 @@ terminate(Reason, State) ->
%%%----------------------------------------------------------------------
check_password(User, Password) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
case catch mnesia:dirty_read({passwd, LUser}) of
[#passwd{password = Password}] ->
true;
@@ -118,7 +118,7 @@ check_password(User, Password) ->
end.
check_password(User, Password, StreamID, Digest) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
F = fun() ->
case mnesia:read({passwd, LUser}) of
[E] ->
@@ -144,14 +144,14 @@ check_password(User, Password, StreamID, Digest) ->
set_password(User, Password) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
F = fun() ->
mnesia:write(#passwd{user = LUser, password = Password})
end,
mnesia:transaction(F).
try_register(User, Password) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
F = fun() ->
case mnesia:read({passwd, LUser}) of
[] ->
@@ -168,7 +168,7 @@ dirty_get_registered_users() ->
mnesia:dirty_all_keys(passwd).
get_password(User) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
case catch mnesia:dirty_read(passwd, LUser) of
[#passwd{password = Password}] ->
Password;
@@ -177,7 +177,7 @@ get_password(User) ->
end.
get_password_s(User) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
case catch mnesia:dirty_read(passwd, LUser) of
[#passwd{password = Password}] ->
Password;
@@ -186,7 +186,7 @@ get_password_s(User) ->
end.
is_user_exists(User) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
case catch mnesia:dirty_read({passwd, LUser}) of
[] ->
false;
@@ -197,14 +197,14 @@ is_user_exists(User) ->
end.
remove_user(User) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
F = fun() ->
mnesia:delete({passwd, LUser})
end,
mnesia:transaction(F).
remove_user(User, Password) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
F = fun() ->
case mnesia:read({passwd, LUser}) of
[#passwd{password = Password}] ->
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index f4b6a351..d20be5a2 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -45,6 +45,7 @@
access,
shaper,
authentificated = false,
+ jid,
user = "", server = ?MYNAME, resource = "",
pres_t = ?SETS:new(),
pres_f = ?SETS:new(),
@@ -205,7 +206,7 @@ wait_for_auth({xmlstreamelement, El}, StateData) ->
{next_state, wait_for_auth, StateData};
{auth, ID, set, {U, P, D, R}} ->
io:format("AUTH: ~p~n", [{U, P, D, R}]),
- JID = {U, ?MYNAME, R},
+ JID = jlib:make_jid(U, StateData#state.server, R),
case acl:match_rule(StateData#state.access, JID) of
allow ->
case ejabberd_auth:check_password(
@@ -224,6 +225,7 @@ wait_for_auth({xmlstreamelement, El}, StateData) ->
{next_state, session_established,
StateData#state{user = U,
resource = R,
+ jid = JID,
pres_f = ?SETS:from_list(Fs),
pres_t = ?SETS:from_list(Ts),
privacy_list = PrivList}};
@@ -281,12 +283,14 @@ wait_for_sasl_auth({xmlstreamelement, El}, StateData) ->
send_element(StateData,
{xmlelement, "success",
[{"xmlns", ?NS_SASL}], []}),
- {U, _, R} = jlib:string_to_jid(
- xml:get_attr_s(authzid, Props)),
+ JID = #jid{user = U, resource = R} =
+ jlib:string_to_jid(
+ xml:get_attr_s(authzid, Props)),
{next_state, wait_for_stream,
StateData#state{authentificated = true,
user = U,
- resource = R
+ resource = R,
+ jid = JID
}};
{continue, ServerOut, NewSASLState} ->
send_element(StateData,
@@ -344,12 +348,13 @@ wait_for_sasl_response({xmlstreamelement, El}, StateData) ->
send_element(StateData,
{xmlelement, "success",
[{"xmlns", ?NS_SASL}], []}),
- {U, _, R} = jlib:string_to_jid(
- xml:get_attr_s(authzid, Props)),
+ JID = #jid{user = U, resource = R} =
+ jlib:string_to_jid(xml:get_attr_s(authzid, Props)),
{next_state, wait_for_stream,
StateData#state{authentificated = true,
user = U,
- resource = R
+ resource = R,
+ jid = JID
}};
{continue, ServerOut, NewSASLState} ->
send_element(StateData,
@@ -402,7 +407,7 @@ wait_for_session({xmlstreamelement, El}, StateData) ->
U = StateData#state.user,
R = StateData#state.resource,
io:format("SASLAUTH: ~p~n", [{U, R}]),
- JID = {U, ?MYNAME, R},
+ JID = jlib:make_jid(U, StateData#state.server, R),
case acl:match_rule(StateData#state.access, JID) of
allow ->
ejabberd_sm:open_session(U, R),
@@ -457,13 +462,14 @@ session_established({xmlstreamelement, El}, StateData) ->
{xmlelement, Name, Attrs, Els} = El,
User = StateData#state.user,
Server = StateData#state.server,
- FromJID = {User,
- Server,
- StateData#state.resource},
+ %FromJID = {User,
+ % Server,
+ % StateData#state.resource},
+ FromJID = StateData#state.jid,
To = xml:get_attr_s("to", Attrs),
ToJID = case To of
"" ->
- {User, Server, ""};
+ jlib:make_jid(User, Server, "");
_ ->
jlib:string_to_jid(To)
end,
@@ -476,7 +482,9 @@ session_established({xmlstreamelement, El}, StateData) ->
case Name of
"presence" ->
case ToJID of
- {User, Server, ""} ->
+ #jid{user = User,
+ server = Server,
+ resource = ""} ->
?DEBUG("presence_update(~p,~n\t~p,~n\t~p)",
[FromJID, El, StateData]),
presence_update(FromJID, El, StateData);
@@ -573,7 +581,6 @@ handle_info(replaced, StateName, StateData) ->
{stop, normal, StateData#state{user = ""}};
handle_info({route, From, To, Packet}, StateName, StateData) ->
{xmlelement, Name, Attrs, Els} = Packet,
- {FU, FS, FR} = From,
{Pass, NewAttrs, NewState} =
case Name of
"presence" ->
@@ -694,9 +701,7 @@ terminate(Reason, StateName, StateData) ->
_ ->
ejabberd_sm:close_session(StateData#state.user,
StateData#state.resource),
- From = {StateData#state.user,
- StateData#state.server,
- StateData#state.resource},
+ From = StateData#state.jid,
Packet = {xmlelement, "presence", [{"type", "unavailable"}], []},
ejabberd_sm:unset_presence(StateData#state.user,
StateData#state.resource),
@@ -797,16 +802,17 @@ get_auth_tags([], U, P, D, R) ->
process_presence_probe(From, To, StateData) ->
+ LFrom = jlib:jid_tolower(From),
case StateData#state.pres_last of
undefined ->
ok;
_ ->
Cond1 = (not StateData#state.pres_invis)
- and ?SETS:is_element(From, StateData#state.pres_f)
- and (not ?SETS:is_element(From, StateData#state.pres_i)),
+ and ?SETS:is_element(LFrom, StateData#state.pres_f)
+ and (not ?SETS:is_element(LFrom, StateData#state.pres_i)),
Cond2 = StateData#state.pres_invis
- and ?SETS:is_element(From, StateData#state.pres_f)
- and ?SETS:is_element(From, StateData#state.pres_a),
+ and ?SETS:is_element(LFrom, StateData#state.pres_f)
+ and ?SETS:is_element(LFrom, StateData#state.pres_a),
if
Cond1 ->
ejabberd_router:route(To, From,
@@ -934,14 +940,16 @@ presence_track(From, To, Packet, StateData) ->
presence_broadcast(From, JIDSet, Packet) ->
lists:foreach(fun(JID) ->
- ejabberd_router:route(From, JID, Packet)
+ ejabberd_router:route(
+ From, jlib:make_jid(JID), Packet)
end, ?SETS:to_list(JIDSet)).
presence_broadcast_to_trusted(From, T, A, Packet) ->
lists:foreach(fun(JID) ->
case ?SETS:is_element(JID, T) of
true ->
- ejabberd_router:route(From, JID, Packet);
+ ejabberd_router:route(
+ From, jlib:make_jid(JID), Packet);
_ ->
ok
end
@@ -949,12 +957,13 @@ presence_broadcast_to_trusted(From, T, A, Packet) ->
presence_broadcast_first(From, StateData, Packet) ->
- {U, S, _} = From,
?SETS:fold(fun(JID, X) ->
- ejabberd_router:route({U, S, ""}, JID,
- {xmlelement, "presence",
- [{"type", "probe"}],
- []}),
+ ejabberd_router:route(
+ jlib:jid_replace_resource(From, ""),
+ jlib:make_jid(JID),
+ {xmlelement, "presence",
+ [{"type", "probe"}],
+ []}),
X
end,
[],
@@ -964,7 +973,9 @@ presence_broadcast_first(From, StateData, Packet) ->
StateData;
true ->
As = ?SETS:fold(fun(JID, A) ->
- ejabberd_router:route(From, JID, Packet),
+ ejabberd_router:route(From,
+ jlib:make_jid(JID),
+ Packet),
?SETS:add_element(JID, A)
end,
StateData#state.pres_a,
@@ -1003,9 +1014,7 @@ roster_change(IJID, ISubscription, StateData) ->
StateData#state{pres_f = FSet, pres_t = TSet};
P ->
?DEBUG("roster changed for ~p~n", [StateData#state.user]),
- From = {StateData#state.user,
- StateData#state.server,
- StateData#state.resource},
+ From = StateData#state.jid,
Cond1 = (not StateData#state.pres_invis) and IsFrom,
Cond2 = (not IsFrom)
and (?SETS:is_element(LIJID, StateData#state.pres_a) or
@@ -1013,7 +1022,7 @@ roster_change(IJID, ISubscription, StateData) ->
if
Cond1 ->
?DEBUG("C1: ~p~n", [LIJID]),
- ejabberd_router:route(From, IJID, P),
+ ejabberd_router:route(From, jlib:make_jid(IJID), P),
A = ?SETS:add_element(LIJID,
StateData#state.pres_a),
StateData#state{pres_a = A,
@@ -1021,7 +1030,7 @@ roster_change(IJID, ISubscription, StateData) ->
pres_t = TSet};
Cond2 ->
?DEBUG("C2: ~p~n", [LIJID]),
- ejabberd_router:route(From, IJID,
+ ejabberd_router:route(From, jlib:make_jid(IJID),
{xmlelement, "presence",
[{"type", "unavailable"}], []}),
I = remove_element(LIJID,
diff --git a/src/ejabberd_local.erl b/src/ejabberd_local.erl
index c90238f8..6df88e3d 100644
--- a/src/ejabberd_local.erl
+++ b/src/ejabberd_local.erl
@@ -71,7 +71,7 @@ do_route(State, From, To, Packet) ->
?DEBUG("local route~n\tfrom ~p~n\tto ~p~n\tpacket ~P~n",
[From, To, Packet, 8]),
case To of
- {"", _, ""} ->
+ #jid{luser = "", lresource = ""} ->
{xmlelement, Name, Attrs, Els} = Packet,
case Name of
"iq" ->
@@ -83,11 +83,12 @@ do_route(State, From, To, Packet) ->
_ ->
ok
end;
- {"", _, _} ->
+ #jid{luser = ""} ->
Err = jlib:make_error_reply(Packet, ?ERR_ITEM_NOT_FOUND),
ejabberd_router ! {route,
- {"", State#state.mydomain, ""}, From, Err},
- ok;
+ jlib:make_jid("", State#state.mydomain, ""),
+ From,
+ Err};
_ ->
ejabberd_sm ! {route, From, To, Packet}
end.
diff --git a/src/ejabberd_router.erl b/src/ejabberd_router.erl
index 956a497c..1c7b1fba 100644
--- a/src/ejabberd_router.erl
+++ b/src/ejabberd_router.erl
@@ -22,6 +22,7 @@
-export([start_link/0, init/0]).
-include("ejabberd.hrl").
+-include("jlib.hrl").
-record(route, {domain, node, pid}).
-record(local_route, {domain, pid}).
@@ -101,8 +102,7 @@ loop() ->
do_route(From, To, Packet) ->
?DEBUG("route~n\tfrom ~p~n\tto ~p~n\tpacket ~p~n", [From, To, Packet]),
- {DstNode, DstDomain, DstResourse} = To,
- LDstDomain = jlib:tolower(DstDomain),
+ #jid{lserver = LDstDomain} = To,
case mnesia:dirty_read({local_route, LDstDomain}) of
[] ->
case mnesia:dirty_read({route, LDstDomain}) of
diff --git a/src/ejabberd_s2s.erl b/src/ejabberd_s2s.erl
index b5b893b1..29358402 100644
--- a/src/ejabberd_s2s.erl
+++ b/src/ejabberd_s2s.erl
@@ -18,6 +18,7 @@
-include_lib("mnemosyne/include/mnemosyne.hrl").
-include("ejabberd.hrl").
+-include("jlib.hrl").
-record(s2s, {fromto, node, key}).
-record(local_s2s, {fromto, pid}).
@@ -148,8 +149,8 @@ try_register(FromTo) ->
do_route(From, To, Packet) ->
?DEBUG("s2s manager~n\tfrom ~p~n\tto ~p~n\tpacket ~P~n",
[From, To, Packet, 8]),
- {_, MyServer, _} = From,
- {User, Server, Resource} = To,
+ #jid{lserver = MyServer} = From,
+ #jid{lserver = Server} = To,
FromTo = {MyServer, Server},
Key = randoms:get_string(),
case find_connection(FromTo, Key) of
diff --git a/src/ejabberd_s2s_in.erl b/src/ejabberd_s2s_in.erl
index 38f95a74..9dc17646 100644
--- a/src/ejabberd_s2s_in.erl
+++ b/src/ejabberd_s2s_in.erl
@@ -266,7 +266,7 @@ stream_established({xmlstreamelement, El}, StateData) ->
From = xml:get_attr_s("from", Attrs),
FromJID1 = jlib:string_to_jid(From),
FromJID = case FromJID1 of
- {Node, Server, Resource} ->
+ #jid{lserver = Server} ->
if Server == StateData#state.server -> FromJID1;
true -> error
end;
diff --git a/src/ejabberd_sm.erl b/src/ejabberd_sm.erl
index 7368f930..1e2bc204 100644
--- a/src/ejabberd_sm.erl
+++ b/src/ejabberd_sm.erl
@@ -102,7 +102,7 @@ close_session(User, Resource) ->
register_connection(User, Resource, Pid) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
UR = {LUser, Resource},
F = fun() ->
Ss = mnesia:wread({session, UR}),
@@ -132,7 +132,7 @@ register_connection(User, Resource, Pid) ->
replace_my_connection(User, Resource) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
F = fun() ->
UR = {LUser, Resource},
Es = mnesia:read({local_session, UR}),
@@ -151,7 +151,7 @@ replace_my_connection(User, Resource) ->
remove_connection(User, Resource) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
F = fun() ->
UR = {LUser, Resource},
mnesia:delete({local_session, UR}),
@@ -177,33 +177,34 @@ clean_table_from_bad_node(Node) ->
do_route(From, To, Packet) ->
?DEBUG("session manager~n\tfrom ~p~n\tto ~p~n\tpacket ~P~n",
[From, To, Packet, 8]),
- {User, Server, Resource} = To,
+ #jid{user = User, server = Server, resource = Resource,
+ luser = LUser, lserver = LServer, lresource = LResource} = To,
{xmlelement, Name, Attrs, Els} = Packet,
case Resource of
"" ->
case Name of
"presence" ->
- {FU, FS, FR} = From,
+ FromU = jlib:jid_replace_resource(From, ""),
{Pass, Subsc} =
case xml:get_attr_s("type", Attrs) of
"subscribe" ->
{mod_roster:in_subscription(User,
- {FU, FS, ""},
+ FromU,
subscribe),
true};
"subscribed" ->
{mod_roster:in_subscription(User,
- {FU, FS, ""},
+ FromU,
subscribed),
true};
"unsubscribe" ->
{mod_roster:in_subscription(User,
- {FU, FS, ""},
+ FromU,
unsubscribe),
true};
"unsubscribed" ->
{mod_roster:in_subscription(User,
- {FU, FS, ""},
+ FromU,
unsubscribed),
true};
_ ->
@@ -211,8 +212,6 @@ do_route(From, To, Packet) ->
end,
if Pass ->
LFrom = jlib:jid_tolower(From),
- LUser = jlib:tolower(User),
- LServer = jlib:tolower(Server),
Resources = get_user_resources(User),
if
Resources /= [] ->
@@ -223,7 +222,7 @@ do_route(From, To, Packet) ->
ejabberd_sm !
{route,
From,
- {User, Server, R},
+ jlib:jid_replace_resource(To, R),
Packet};
true ->
ok
@@ -250,21 +249,25 @@ do_route(From, To, Packet) ->
fun(R) ->
ejabberd_sm ! {route,
From,
- {User, Server, R},
+ jlib:jid_replace_resource(To, R),
Packet}
end, get_user_resources(User));
_ ->
ok
end;
_ ->
- LUR = {jlib:tolower(User), Resource},
+ LUR = {LUser, LResource},
Sess = mnesia:dirty_read({session, LUR}),
case Sess of
[] ->
- if
- Name == "message" ->
+ case Name of
+ "message" ->
route_message(From, To, Packet);
- true ->
+ "iq" ->
+ Err = jlib:make_error_reply(
+ Packet, ?ERR_RECIPIENT_UNAVAILABLE),
+ ejabberd_router:route(To, From, Err);
+ _ ->
?DEBUG("packet droped~n", [])
end;
[Ses] ->
@@ -282,10 +285,10 @@ do_route(From, To, Packet) ->
end.
route_message(From, To, Packet) ->
- {User, Server, Resource} = To,
- case catch lists:max(get_user_present_resources(User)) of
+ #jid{luser = LUser} = To,
+ case catch lists:max(get_user_present_resources(LUser)) of
{'EXIT', _} ->
- case ejabberd_auth:is_user_exists(User) of
+ case ejabberd_auth:is_user_exists(LUser) of
true ->
case catch mod_offline:store_packet(From, To, Packet) of
{'EXIT', _} ->
@@ -303,7 +306,7 @@ route_message(From, To, Packet) ->
{_, R} ->
ejabberd_sm ! {route,
From,
- {User, Server, R},
+ jlib:jid_replace_resource(To, R),
Packet}
end.
@@ -311,7 +314,7 @@ route_message(From, To, Packet) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
get_user_resources(User) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
case catch mnesia:dirty_index_read(session, LUser, #session.user) of
{'EXIT', Reason} ->
[];
@@ -325,7 +328,7 @@ get_user_resources(User) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
set_presence(User, Resource, Priority) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
F = fun() ->
UR = {User, Resource},
mnesia:write(#presence{ur = UR, user = LUser,
@@ -334,15 +337,14 @@ set_presence(User, Resource, Priority) ->
mnesia:transaction(F).
unset_presence(User, Resource) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
F = fun() ->
UR = {User, Resource},
mnesia:delete({presence, UR})
end,
mnesia:transaction(F).
-get_user_present_resources(User) ->
- LUser = jlib:tolower(User),
+get_user_present_resources(LUser) ->
case catch mnesia:dirty_index_read(presence, LUser, #presence.user) of
{'EXIT', Reason} ->
[];
@@ -367,7 +369,7 @@ process_iq(From, To, Packet) ->
{iq, ID, Type, XMLNS, SubEl} ->
case ets:lookup(sm_iqtable, XMLNS) of
[{_, Module, Function}] ->
- ResIQ = apply(Module, Function, [From, To, IQ]),
+ ResIQ = Module:Function(From, To, IQ),
if
ResIQ /= ignore ->
ejabberd_router ! {route,
diff --git a/src/jlib.erl b/src/jlib.erl
index 4992bb51..ced40894 100644
--- a/src/jlib.erl
+++ b/src/jlib.erl
@@ -18,12 +18,18 @@
replace_from_to_attrs/3,
replace_from_to/3,
remove_attr/2,
+ make_jid/3,
+ make_jid/1,
string_to_jid/1,
jid_to_string/1,
is_nodename/1,
tolower/1,
+ nodeprep/1,
+ nameprep/1,
+ resourceprep/1,
jid_tolower/1,
jid_remove_resource/1,
+ jid_replace_resource/2,
get_iq_namespace/1,
iq_query_info/1,
is_iq_request_type/1,
@@ -130,6 +136,30 @@ remove_attr(Attr, {xmlelement, Name, Attrs, Els}) ->
NewAttrs = lists:keydelete(Attr, 1, Attrs),
{xmlelement, Name, NewAttrs, Els}.
+
+make_jid(User, Server, Resource) ->
+ case stringprep:nodeprep(User) of
+ error -> error;
+ LUser ->
+ case stringprep:nameprep(Server) of
+ error -> error;
+ LServer ->
+ case stringprep:resourceprep(Resource) of
+ error -> error;
+ LResource ->
+ #jid{user = User,
+ server = Server,
+ resource = Resource,
+ luser = LUser,
+ lserver = LServer,
+ lresource = LResource}
+ end
+ end
+ end.
+
+make_jid({User, Server, Resource}) ->
+ make_jid(User, Server, Resource).
+
string_to_jid(J) ->
string_to_jid1(J, "").
@@ -157,7 +187,7 @@ string_to_jid1([C | J], N) ->
string_to_jid1([], "") ->
error;
string_to_jid1([], N) ->
- {"", lists:reverse(N), ""}.
+ make_jid("", lists:reverse(N), "").
string_to_jid2([$/ | J], N, "") ->
error;
@@ -168,13 +198,15 @@ string_to_jid2([C | J], N, S) ->
string_to_jid2([], N, "") ->
error;
string_to_jid2([], N, S) ->
- {N, lists:reverse(S), ""}.
+ make_jid(N, lists:reverse(S), "").
string_to_jid3([C | J], N, S, R) ->
string_to_jid3(J, N, S, [C | R]);
string_to_jid3([], N, S, R) ->
- {N, S, lists:reverse(R)}.
+ make_jid(N, S, lists:reverse(R)).
+jid_to_string(#jid{user = User, server = Server, resource = Resource}) ->
+ jid_to_string({User, Server, Resource});
jid_to_string({Node, Server, Resource}) ->
S1 = case Node of
"" ->
@@ -256,13 +288,34 @@ tolower([]) ->
% [].
+nodeprep(S) ->
+ stringprep:nodeprep(S).
+nameprep(S) ->
+ stringprep:nameprep(S).
+
+resourceprep(S) ->
+ stringprep:resourceprep(S).
+
+
+jid_tolower(#jid{luser = U, lserver = S, lresource = R}) ->
+ {U, S, R};
jid_tolower({U, S, R}) ->
{tolower(U), tolower(S), R}.
+jid_remove_resource(#jid{} = JID) ->
+ JID#jid{resource = "", lresource = ""};
jid_remove_resource({U, S, R}) ->
{U, S, ""}.
+jid_replace_resource(JID, Resource) ->
+ case stringprep:resourceprep(Resource) of
+ error -> error;
+ LResource ->
+ JID#jid{resource = Resource, lresource = LResource}
+ end.
+
+
get_iq_namespace({xmlelement, Name, Attrs, Els}) when Name == "iq" ->
case xml:remove_cdata(Els) of
[{xmlelement, Name2, Attrs2, Els2}] ->
@@ -276,29 +329,29 @@ get_iq_namespace(_) ->
iq_query_info({xmlelement, Name, Attrs, Els}) when Name == "iq" ->
ID = xml:get_attr_s("id", Attrs),
Type = xml:get_attr_s("type", Attrs),
- case xml:remove_cdata(Els) of
- [{xmlelement, Name2, Attrs2, Els2}] ->
- XMLNS = xml:get_attr_s("xmlns", Attrs2),
- Type1 = case Type of
- "set" -> set;
- "get" -> get;
- "result" -> reply;
- "error" -> reply;
- _ -> invalid
- end,
- if
- (Type1 /= invalid) and (Type1 /= reply) and (XMLNS /= "") ->
- {iq, ID, Type1, XMLNS, {xmlelement, Name2, Attrs2, Els2}};
- true ->
+ Type1 = case Type of
+ "set" -> set;
+ "get" -> get;
+ "result" -> reply;
+ "error" -> reply;
+ _ -> invalid
+ end,
+ if
+ (Type1 /= invalid) and (Type1 /= reply) ->
+ case xml:remove_cdata(Els) of
+ [{xmlelement, Name2, Attrs2, Els2}] ->
+ XMLNS = xml:get_attr_s("xmlns", Attrs2),
if
- Type1 == reply ->
- reply;
+ XMLNS /= "" ->
+ {iq, ID, Type1, XMLNS, {xmlelement, Name2, Attrs2, Els2}};
true ->
invalid
- end
+ end;
+ _ ->
+ invalid
end;
- _ ->
- invalid
+ true ->
+ Type1
end;
iq_query_info(_) ->
not_iq.
diff --git a/src/jlib.hrl b/src/jlib.hrl
index ae82e7fb..4ca09fc3 100644
--- a/src/jlib.hrl
+++ b/src/jlib.hrl
@@ -138,4 +138,6 @@
% ?STREAM_ERROR("")).
+-record(jid, {user, server, resource,
+ luser, lserver, lresource}).
diff --git a/src/mod_disco.erl b/src/mod_disco.erl
index 81a7cb91..a85553d3 100644
--- a/src/mod_disco.erl
+++ b/src/mod_disco.erl
@@ -436,7 +436,7 @@ get_stopped_nodes(Lang) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
process_sm_iq_items(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
- {User, _, _} = To,
+ #jid{user = User} = To,
case {acl:match_rule(configure, From), Type} of
{deny, _} ->
{iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
diff --git a/src/mod_irc/mod_irc.erl b/src/mod_irc/mod_irc.erl
index f2181ca3..5af53ae0 100644
--- a/src/mod_irc/mod_irc.erl
+++ b/src/mod_irc/mod_irc.erl
@@ -57,7 +57,7 @@ loop(Host) ->
do_route(Host, From, To, Packet) ->
- {ChanServ, _, Resource} = To,
+ #jid{user = ChanServ, resource = Resource} = To,
case ChanServ of
"" ->
case Resource of
@@ -75,12 +75,11 @@ do_route(Host, From, To, Packet) ->
iq_data(From, To, ID, XMLNS, Type, SubEl);
_ ->
Err = jlib:make_error_reply(
- Packet, "503", "Service Unavailable"),
+ Packet, ?ERR_SERVICE_UNAVAILABLE),
ejabberd_router:route(To, From, Err)
end;
_ ->
- Err = jlib:make_error_reply(Packet,
- "406", "Not Acceptable"),
+ Err = jlib:make_error_reply(Packet, ?ERR_BAD_REQUEST),
ejabberd_router:route(To, From, Err)
end;
_ ->
@@ -115,8 +114,7 @@ do_route(Host, From, To, Packet) ->
case ets:lookup(irc_connection, {From, Server}) of
[] ->
Err = jlib:make_error_reply(
- Packet,
- "503", "Service Unavailable"),
+ Packet, ?ERR_SERVICE_UNAVAILABLE),
ejabberd_router:route(To, From, Err);
[R] ->
Pid = R#irc_connection.pid,
@@ -128,7 +126,7 @@ do_route(Host, From, To, Packet) ->
end;
_ ->
Err = jlib:make_error_reply(
- Packet, "406", "Not Acceptable"),
+ Packet, ?ERR_BAD_REQUEST),
ejabberd_router:route(To, From, Err)
end
end
@@ -185,9 +183,7 @@ process_iq_data(From, To, ID, XMLNS, Type, SubEl) ->
case XData of
invalid ->
{iq, ID, error, XMLNS,
- [SubEl, {xmlelement, "error",
- [{"code", "400"}],
- [{xmlcdata, "Bad Request"}]}]};
+ [SubEl, ?ERR_BAD_REQUEST]};
_ ->
Node =
string:tokens(
@@ -227,8 +223,8 @@ process_iq_data(From, To, ID, XMLNS, Type, SubEl) ->
get_form(From, [], Lang) ->
- {User, Server, _} = From,
- {LUser, LServer, _} = jlib:jid_tolower(From),
+ #jid{user = User, server = Server,
+ luser = LUser, lserver = LServer} = From,
Customs =
case catch mnesia:dirty_read({irc_custom, {LUser, LServer}}) of
{'EXIT', Reason} ->
@@ -345,8 +341,8 @@ set_form(_, _, Lang, XData) ->
get_user_and_encoding(From, IRCServer) ->
- {User, Server, _} = From,
- {LUser, LServer, _} = jlib:jid_tolower(From),
+ #jid{user = User, server = Server,
+ luser = LUser, lserver = LServer} = From,
case catch mnesia:dirty_read({irc_custom, {LUser, LServer}}) of
{'EXIT', Reason} ->
{User, ?DEFAULT_IRC_ENCODING};
diff --git a/src/mod_irc/mod_irc_connection.erl b/src/mod_irc/mod_irc_connection.erl
index 03c2a820..c98b32c8 100644
--- a/src/mod_irc/mod_irc_connection.erl
+++ b/src/mod_irc/mod_irc_connection.erl
@@ -36,7 +36,7 @@
channels = dict:new(),
inbuf = "", outbuf = ""}).
--define(DBGFSM, true).
+%-define(DBGFSM, true).
-ifdef(DBGFSM).
-define(FSMOPTS, [{debug, [trace]}]).
@@ -411,7 +411,7 @@ handle_info({ircstring, [$: | String]}, StateName, StateData) ->
[From, "NICK", Nick | _] ->
process_nick(StateData, From, Nick);
_ ->
- io:format("unknown irc command '~s'~n", [String]),
+ ?DEBUG("unknown irc command '~s'~n", [String]),
StateData
end,
NewStateData1 =
@@ -431,7 +431,7 @@ handle_info({ircstring, [$E, $R, $R, $O, $R | _] = String},
handle_info({ircstring, String}, StateName, StateData) ->
- io:format("unknown irc command '~s'~n", [String]),
+ ?DEBUG("unknown irc command '~s'~n", [String]),
{next_state, StateName, StateData};
@@ -441,7 +441,7 @@ handle_info({send_text, Text}, StateName, StateData) ->
handle_info({tcp, Socket, Data}, StateName, StateData) ->
Buf = StateData#state.inbuf ++ binary_to_list(Data),
{ok, Strings} = regexp:split([C || C <- Buf, C /= $\r], "\n"),
- io:format("strings=~p~n", [Strings]),
+ ?DEBUG("strings=~p~n", [Strings]),
NewBuf = process_lines(StateData#state.encoding, Strings),
{next_state, StateName, StateData#state{inbuf = NewBuf}};
handle_info({tcp_closed, Socket}, StateName, StateData) ->
@@ -499,7 +499,7 @@ receiver(Socket, C2SPid, XMLStreamPid) ->
send_text(#state{socket = Socket, encoding = Encoding}, Text) ->
CText = iconv:convert("utf-8", Encoding, lists:flatten(Text)),
- %io:format("IRC OUTu: ~s~nIRC OUTk: ~s~n", [Text, CText]),
+ %?DEBUG("IRC OUTu: ~s~nIRC OUTk: ~s~n", [Text, CText]),
gen_tcp:send(Socket, CText).
diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl
index f605e0a6..e381a544 100644
--- a/src/mod_muc/mod_muc_room.erl
+++ b/src/mod_muc/mod_muc_room.erl
@@ -59,6 +59,7 @@
-record(state, {room,
host,
+ jid,
config = #config{},
users = ?DICT:new(),
affiliations = ?DICT:new(),
@@ -117,11 +118,13 @@ init([Host, Room, Creator, Nick]) ->
LCreator = jlib:jid_tolower(Creator),
State = set_affiliation(Creator, owner,
#state{host = Host,
- room = Room}),
+ room = Room,
+ jid = jlib:make_jid(Room, Host, "")}),
{ok, normal_state, State};
init([Host, Room, Opts]) ->
State = set_opts(Opts, #state{host = Host,
- room = Room}),
+ room = Room,
+ jid = jlib:make_jid(Room, Host, "")}),
{ok, normal_state, State}.
%%----------------------------------------------------------------------
@@ -173,9 +176,9 @@ normal_state({route, From, "",
lists:foreach(
fun({LJID, Info}) ->
ejabberd_router:route(
- {StateData#state.room,
- StateData#state.host,
- FromNick},
+ jlib:jid_replace_resource(
+ StateData#state.jid,
+ FromNick),
Info#user.jid,
Packet)
end,
@@ -189,8 +192,7 @@ normal_state({route, From, "",
Err = jlib:make_error_reply(
Packet, ?ERR_NOT_ALLOWED),
ejabberd_router:route(
- {StateData#state.room,
- StateData#state.host, ""},
+ StateData#state.jid,
From, Err),
{next_state, normal_state, StateData}
end;
@@ -198,7 +200,7 @@ normal_state({route, From, "",
Err = jlib:make_error_reply(
Packet, ?ERR_NOT_ALLOWED),
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, ""},
+ StateData#state.jid,
From, Err),
{next_state, normal_state, StateData}
end;
@@ -223,7 +225,7 @@ normal_state({route, From, "",
Err = jlib:make_error_reply(
Packet, ?ERR_NOT_ALLOWED),
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, ""},
+ StateData#state.jid,
From, Err),
{next_state, normal_state, StateData};
IJID ->
@@ -249,15 +251,14 @@ normal_state({route, From, "",
Err = jlib:make_error_reply(
Packet, ?ERR_NOT_ALLOWED),
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, ""},
+ StateData#state.jid,
From, Err),
{next_state, normal_state, StateData}
end;
_ ->
Err = jlib:make_error_reply(
Packet, ?ERR_NOT_ALLOWED),
- ejabberd_router:route(
- {StateData#state.room, StateData#state.host, ""}, From, Err),
+ ejabberd_router:route(StateData#state.jid, From, Err),
{next_state, normal_state, StateData}
end;
@@ -293,9 +294,7 @@ normal_state({route, From, "",
[SubEl, Error]},
StateData}
end,
- ejabberd_router:route({StateData#state.room,
- StateData#state.host,
- ""},
+ ejabberd_router:route(StateData#state.jid,
From,
jlib:iq_to_xml(IQRes)),
case NewStateData of
@@ -307,8 +306,7 @@ normal_state({route, From, "",
_ ->
Err = jlib:make_error_reply(
Packet, ?ERR_FEATURE_NOT_IMPLEMENTED),
- ejabberd_router:route(
- {StateData#state.room, StateData#state.host, ""}, From, Err),
+ ejabberd_router:route(StateData#state.jid, From, Err),
{next_state, normal_state, StateData}
end;
@@ -353,9 +351,9 @@ normal_state({route, From, Nick,
Packet,
?ERR_MUC_NICK_CHANGE_CONFLICT),
ejabberd_router:route(
- {StateData#state.room,
- StateData#state.host,
- Nick}, % TODO: s/Nick/""/
+ jlib:jid_replace_resource(
+ StateData#state.jid,
+ Nick), % TODO: s/Nick/""/
From, Err),
StateData;
_ ->
@@ -411,18 +409,18 @@ normal_state({route, From, ToNick,
Err = jlib:make_error_reply(
Packet, ?ERR_ITEM_NOT_FOUND),
ejabberd_router:route(
- {StateData#state.room,
- StateData#state.host,
- ToNick},
+ jlib:jid_replace_resource(
+ StateData#state.jid,
+ ToNick),
From, Err);
ToJID ->
{ok, #user{nick = FromNick}} =
?DICT:find(jlib:jid_tolower(From),
StateData#state.users),
ejabberd_router:route(
- {StateData#state.room,
- StateData#state.host,
- FromNick},
+ jlib:jid_replace_resource(
+ StateData#state.jid,
+ FromNick),
ToJID, Packet)
end,
{next_state, normal_state, StateData};
@@ -430,9 +428,9 @@ normal_state({route, From, ToNick,
Err = jlib:make_error_reply(
Packet, ?ERR_NOT_ALLOWED),
ejabberd_router:route(
- {StateData#state.room,
- StateData#state.host,
- ToNick}, From, Err),
+ jlib:jid_replace_resource(
+ StateData#state.jid,
+ ToNick), From, Err),
{next_state, normal_state, StateData}
end
end;
@@ -448,21 +446,22 @@ normal_state({route, From, ToNick,
Err = jlib:make_error_reply(
Packet, ?ERR_ITEM_NOT_FOUND),
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, ToNick},
+ jlib:jid_replace_resource(StateData#state.jid, ToNick),
From, Err);
ToJID ->
{ok, #user{nick = FromNick}} =
?DICT:find(jlib:jid_tolower(From),
StateData#state.users),
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, FromNick},
+ jlib:jid_replace_resource(StateData#state.jid, FromNick),
ToJID, Packet)
end;
_ ->
Err = jlib:make_error_reply(
Packet, ?ERR_NOT_ALLOWED),
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, ToNick}, From, Err)
+ jlib:jid_replace_resource(StateData#state.jid, ToNick), From,
+ Err)
end,
{next_state, normal_state, StateData};
@@ -490,9 +489,7 @@ handle_event({service_message, Msg}, StateName, StateData) ->
lists:foreach(
fun({LJID, Info}) ->
ejabberd_router:route(
- {StateData#state.room,
- StateData#state.host,
- ""},
+ StateData#state.jid,
Info#user.jid,
MessagePkt)
end,
@@ -792,9 +789,8 @@ add_new_user(From, Nick, {xmlelement, _, Attrs, Els} = Packet, StateData) ->
true ->
Err = jlib:make_error_reply(Packet, ?ERR_MUC_NICK_CONFLICT),
ejabberd_router:route(
- {StateData#state.room,
- StateData#state.host,
- Nick}, % TODO: s/Nick/""/
+ % TODO: s/Nick/""/
+ jlib:jid_replace_resource(StateData#state.jid, Nick),
From, Err),
StateData;
_ ->
@@ -809,7 +805,7 @@ add_new_user(From, Nick, {xmlelement, _, Attrs, Els} = Packet, StateData) ->
_ -> ?ERR_MUC_NOT_MEMBER
end),
ejabberd_router:route( % TODO: s/Nick/""/
- {StateData#state.room, StateData#state.host, Nick},
+ jlib:jid_replace_resource(StateData#state.jid, Nick),
From, Err),
StateData;
_ ->
@@ -833,7 +829,8 @@ add_new_user(From, Nick, {xmlelement, _, Attrs, Els} = Packet, StateData) ->
Err = jlib:make_error_reply(
Packet, ?ERR_MUC_BAD_PASSWORD),
ejabberd_router:route( % TODO: s/Nick/""/
- {StateData#state.room, StateData#state.host, Nick},
+ jlib:jid_replace_resource(
+ StateData#state.jid, Nick),
From, Err),
StateData
end
@@ -922,7 +919,7 @@ send_new_presence(NJID, StateData) ->
[{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
[{xmlelement, "item", ItemAttrs, []}]}]),
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, Nick},
+ jlib:jid_replace_resource(StateData#state.jid, Nick),
Info#user.jid,
Packet)
end, ?DICT:to_list(StateData#state.users)).
@@ -963,7 +960,8 @@ send_existing_presences(ToJID, StateData) ->
[{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
[{xmlelement, "item", ItemAttrs, []}]}]),
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, FromNick},
+ jlib:jid_replace_resource(
+ StateData#state.jid, FromNick),
RealToJID,
Packet)
end
@@ -1033,11 +1031,11 @@ send_nick_changing(JID, OldNick, StateData) ->
[{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
[{xmlelement, "item", ItemAttrs2, []}]}]),
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, OldNick},
+ jlib:jid_replace_resource(StateData#state.jid, OldNick),
Info#user.jid,
Packet1),
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, Nick},
+ jlib:jid_replace_resource(StateData#state.jid, Nick),
Info#user.jid,
Packet2)
end, ?DICT:to_list(StateData#state.users)).
@@ -1086,7 +1084,7 @@ send_history(JID, StateData) ->
lists:foldl(
fun({Nick, Packet, HaveSubject}, B) ->
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, Nick},
+ jlib:jid_replace_resource(StateData#state.jid, Nick),
JID,
Packet),
B or HaveSubject
@@ -1105,7 +1103,7 @@ send_subject(JID, StateData) ->
[{xmlcdata,
Nick ++ " has set the topic to: " ++ Subject}]}]},
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, ""},
+ StateData#state.jid,
JID,
Packet)
end.
@@ -1123,7 +1121,7 @@ send_join_messages_end(JID, StateData) ->
[{xmlelement, "body", [],
[{xmlcdata, "-"}]}]},
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, ""},
+ StateData#state.jid,
JID,
Packet).
@@ -1550,7 +1548,7 @@ send_kickban_presence1(UJID, Reason, Code, StateData) ->
[{xmlelement, "item", ItemAttrs, ItemEls},
{xmlelement, "status", [{"code", Code}], []}]}]},
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, Nick},
+ jlib:jid_replace_resource(StateData#state.jid, Nick),
Info#user.jid,
Packet)
end, ?DICT:to_list(StateData#state.users)).
@@ -1842,7 +1840,7 @@ destroy_room(DEls, StateData) ->
{xmlelement, "destroy", [],
DEls}]}]},
ejabberd_router:route(
- {StateData#state.room, StateData#state.host, Nick},
+ jlib:jid_replace_resource(StateData#state.jid, Nick),
Info#user.jid,
Packet)
end, ?DICT:to_list(StateData#state.users)),
@@ -1950,9 +1948,7 @@ check_invitation(From, Els, StateData) ->
""})}],
[{xmlcdata, Reason}]}]},
ejabberd_router:route(
- {StateData#state.room,
- StateData#state.host,
- ""},
+ StateData#state.jid,
JID,
Msg),
JID;
diff --git a/src/mod_offline.erl b/src/mod_offline.erl
index bdddf8e6..9462d77f 100644
--- a/src/mod_offline.erl
+++ b/src/mod_offline.erl
@@ -66,8 +66,7 @@ store_packet(From, To, Packet) ->
true = is_process_alive(whereis(?PROCNAME)),
case check_event(From, To, Packet) of
true ->
- {User, Server, Resource} = To,
- LUser = jlib:tolower(User),
+ #jid{luser = LUser} = To,
TimeStamp = now(),
?PROCNAME ! #offline_msg{user = LUser,
timestamp = TimeStamp,
@@ -125,7 +124,7 @@ find_x_event([El | Els]) ->
resend_offline_messages(User) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
F = fun() ->
Rs = mnesia:read({offline_msg, LUser}),
mnesia:delete({offline_msg, LUser}),
@@ -152,7 +151,7 @@ resend_offline_messages(User) ->
end.
remove_user(User) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
F = fun() ->
mnesia:delete({offline_msg, LUser})
end,
diff --git a/src/mod_privacy.erl b/src/mod_privacy.erl
index bce87129..c0cec14c 100644
--- a/src/mod_privacy.erl
+++ b/src/mod_privacy.erl
@@ -61,7 +61,7 @@ start(Opts) ->
%
process_iq(From, To, IQ) ->
{iq, ID, Type, XMLNS, SubEl} = IQ,
- {_, Server, _} = From,
+ #jid{lserver = Server} = From,
Res =
case ?MYNAME of
Server ->
@@ -85,16 +85,16 @@ process_iq(From, To, IQ) ->
process_iq_get(From, To, {iq, ID, Type, XMLNS, SubEl},
#userlist{name = Active}) ->
- {User, _, _} = From,
+ #jid{luser = LUser} = From,
{xmlelement, _, _, Els} = SubEl,
case xml:remove_cdata(Els) of
[] ->
- process_lists_get(User, Active);
+ process_lists_get(LUser, Active);
[{xmlelement, Name, Attrs, SubEls}] ->
case Name of
"list" ->
ListName = xml:get_attr("name", Attrs),
- process_list_get(User, ListName);
+ process_list_get(LUser, ListName);
_ ->
{error, ?ERR_BAD_REQUEST}
end;
@@ -103,8 +103,7 @@ process_iq_get(From, To, {iq, ID, Type, XMLNS, SubEl},
end.
-process_lists_get(User, Active) ->
- LUser = jlib:tolower(User),
+process_lists_get(LUser, Active) ->
case catch mnesia:dirty_read(privacy, LUser) of
{'EXIT', Reason} ->
{error, ?ERR_INTERNAL_SERVER_ERROR};
@@ -143,13 +142,13 @@ process_lists_get(User, Active) ->
end
end.
-process_list_get(User, {value, Name}) ->
- LUser = jlib:tolower(User),
- case catch mnesia:dirty_read(privacy, User) of
+process_list_get(LUser, {value, Name}) ->
+ case catch mnesia:dirty_read(privacy, LUser) of
{'EXIT', Reason} ->
{error, ?ERR_INTERNAL_SERVER_ERROR};
[] ->
- {result, [{xmlelement, "query", [{"xmlns", ?NS_PRIVACY}], []}]};
+ {error, ?ERR_ITEM_NOT_FOUND};
+ %{result, [{xmlelement, "query", [{"xmlns", ?NS_PRIVACY}], []}]};
[#privacy{lists = Lists}] ->
case lists:keysearch(Name, 1, Lists) of
{value, {_, List}} ->
@@ -163,7 +162,7 @@ process_list_get(User, {value, Name}) ->
end
end;
-process_list_get(_User, false) ->
+process_list_get(_LUser, false) ->
{error, ?ERR_BAD_REQUEST}.
item_to_xml(Item) ->
@@ -250,18 +249,18 @@ list_to_action(S) ->
process_iq_set(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
- {User, _, _} = From,
+ #jid{luser = LUser} = From,
{xmlelement, _, _, Els} = SubEl,
case xml:remove_cdata(Els) of
[{xmlelement, Name, Attrs, SubEls}] ->
ListName = xml:get_attr("name", Attrs),
case Name of
"list" ->
- process_list_set(User, ListName, xml:remove_cdata(SubEls));
+ process_list_set(LUser, ListName, xml:remove_cdata(SubEls));
"active" ->
- process_active_set(User, ListName);
+ process_active_set(LUser, ListName);
"default" ->
- process_default_set(User, ListName);
+ process_default_set(LUser, ListName);
_ ->
{error, ?ERR_BAD_REQUEST}
end;
@@ -270,8 +269,7 @@ process_iq_set(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
end.
-process_default_set(User, {value, Name}) ->
- LUser = jlib:tolower(User),
+process_default_set(LUser, {value, Name}) ->
F = fun() ->
case mnesia:read({privacy, LUser}) of
[] ->
@@ -296,8 +294,7 @@ process_default_set(User, {value, Name}) ->
{error, ?ERR_INTERNAL_SERVER_ERROR}
end;
-process_default_set(User, false) ->
- LUser = jlib:tolower(User),
+process_default_set(LUser, false) ->
F = fun() ->
case mnesia:read({privacy, LUser}) of
[] ->
@@ -317,8 +314,7 @@ process_default_set(User, false) ->
end.
-process_active_set(User, {value, Name}) ->
- LUser = jlib:tolower(User),
+process_active_set(LUser, {value, Name}) ->
case catch mnesia:dirty_read(privacy, LUser) of
[] ->
{error, ?ERR_ITEM_NOT_FOUND};
@@ -331,7 +327,7 @@ process_active_set(User, {value, Name}) ->
end
end;
-process_active_set(User, false) ->
+process_active_set(LUser, false) ->
{result, [], #userlist{}}.
@@ -339,8 +335,7 @@ process_active_set(User, false) ->
-process_list_set(User, {value, Name}, Els) ->
- LUser = jlib:tolower(User),
+process_list_set(LUser, {value, Name}, Els) ->
case parse_items(Els) of
false ->
{error, ?ERR_BAD_REQUEST};
@@ -369,8 +364,8 @@ process_list_set(User, {value, Name}, Els) ->
Error;
{atomic, {result, _} = Res} ->
ejabberd_router:route(
- {User, ?MYNAME, ""},
- {User, ?MYNAME, ""},
+ jlib:make_jid(LUser, ?MYNAME, ""),
+ jlib:make_jid(LUser, ?MYNAME, ""),
{xmlelement, "broadcast", [],
[{privacy_list, #userlist{name = Name, list = []}}]}),
Res;
@@ -398,8 +393,8 @@ process_list_set(User, {value, Name}, Els) ->
Error;
{atomic, {result, _} = Res} ->
ejabberd_router:route(
- {User, ?MYNAME, ""},
- {User, ?MYNAME, ""},
+ jlib:make_jid(LUser, ?MYNAME, ""),
+ jlib:make_jid(LUser, ?MYNAME, ""),
{xmlelement, "broadcast", [],
[{privacy_list, #userlist{name = Name, list = List}}]}),
Res;
@@ -408,7 +403,7 @@ process_list_set(User, {value, Name}, Els) ->
end
end;
-process_list_set(_User, false, _Els) ->
+process_list_set(_LUser, false, _Els) ->
{error, ?ERR_BAD_REQUEST}.
@@ -523,7 +518,7 @@ parse_matches1(Item, [{xmlelement, _, _, _} | Els]) ->
get_user_list(User) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
case catch mnesia:dirty_read(privacy, LUser) of
[] ->
#userlist{};
diff --git a/src/mod_private.erl b/src/mod_private.erl
index fa043122..8b091433 100644
--- a/src/mod_private.erl
+++ b/src/mod_private.erl
@@ -34,9 +34,7 @@ stop() ->
process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
- {User, Server, _} = From,
- LUser = jlib:tolower(User),
- LServer = jlib:tolower(Server),
+ #jid{luser = LUser, lserver = LServer} = From,
case ?MYNAME of
Server ->
{xmlelement, Name, Attrs, Els} = SubEl,
diff --git a/src/mod_pubsub/mod_pubsub.erl b/src/mod_pubsub/mod_pubsub.erl
index 86e0a112..7604f563 100644
--- a/src/mod_pubsub/mod_pubsub.erl
+++ b/src/mod_pubsub/mod_pubsub.erl
@@ -47,14 +47,16 @@ start(Opts) ->
proc_lib:spawn_link(?MODULE, init, [Host, ServedHosts, self()])).
+-define(MYJID, #jid{user = "", server = Host, resource = "",
+ luser = "", lserver = Host, lresource = ""}).
init(Host, ServedHosts, Parent) ->
ejabberd_router:register_route(Host),
- create_new_node(Host, ["pubsub"], {"", Host, ""}),
- create_new_node(Host, ["pubsub", "nodes"], {"", Host, ""}),
- create_new_node(Host, ["home"], {"", Host, ""}),
+ create_new_node(Host, ["pubsub"], ?MYJID),
+ create_new_node(Host, ["pubsub", "nodes"], ?MYJID),
+ create_new_node(Host, ["home"], ?MYJID),
lists:foreach(fun(H) ->
- create_new_node(Host, ["home", H], {"", Host, ""})
+ create_new_node(Host, ["home", H], ?MYJID)
end, ServedHosts),
loop(Host, Parent).
@@ -86,7 +88,7 @@ loop(Host, Parent) ->
do_route(Host, From, To, Packet) ->
{xmlelement, Name, Attrs, Els} = Packet,
case To of
- {"", _, ""} ->
+ #jid{luser = "", lresource = ""} ->
case Name of
"iq" ->
case jlib:iq_query_info(Packet) of
@@ -115,9 +117,7 @@ do_route(Host, From, To, Packet) ->
jlib:make_error_reply(
Packet, Error)
end,
- ejabberd_router:route(To,
- From,
- Res);
+ ejabberd_router:route(To, From, Res);
%{iq, ID, get, ?NS_REGISTER = XMLNS, SubEl} ->
% Lang = xml:get_tag_attr_s(
% "xml:lang", SubEl),
@@ -155,9 +155,7 @@ do_route(Host, From, To, Packet) ->
jlib:make_error_reply(
Packet, Error)
end,
- ejabberd_router:route(To,
- From,
- Res);
+ ejabberd_router:route(To, From, Res);
{iq, ID, get, ?NS_VCARD = XMLNS, SubEl} ->
Lang = xml:get_tag_attr_s(
"xml:lang", SubEl),
@@ -982,10 +980,10 @@ subscription_to_string(Subscription) ->
check_create_permission(Host, Node, Owner) ->
if
- {"", Host, ""} == Owner ->
+ #jid{lserver = Host} == Owner ->
true;
true ->
- {User, Server, _} = Owner,
+ #jid{luser = User, lserver = Server} = Owner,
case Node of
["home", Server, User | _] ->
true;
@@ -1087,8 +1085,8 @@ broadcast_publish_item(Host, Node, ItemID, Payload) ->
[{xmlelement, "item",
ItemAttrs,
Payload}]}]}]},
- ejabberd_router:route({"", Host, ""},
- JID, Stanza);
+ ejabberd_router:route(
+ ?MYJID, jlib:make_jid(JID), Stanza);
true ->
ok
end
@@ -1118,8 +1116,8 @@ broadcast_retract_item(Host, Node, ItemID) ->
[{"node", node_to_string(Node)}],
[{xmlelement, "retract",
ItemAttrs, []}]}]}]},
- ejabberd_router:route({"", Host, ""},
- JID, Stanza);
+ ejabberd_router:route(
+ ?MYJID, jlib:make_jid(JID), Stanza);
true ->
ok
end
@@ -1144,8 +1142,8 @@ broadcast_removed_node(Host, Removed) ->
[{xmlelement, "delete",
[{"node", node_to_string(Node)}],
[]}]}]},
- ejabberd_router:route({"", Host, ""},
- JID, Stanza);
+ ejabberd_router:route(
+ ?MYJID, jlib:make_jid(JID), Stanza);
true ->
ok
end
diff --git a/src/mod_register.erl b/src/mod_register.erl
index 2c96a6f9..b480dace 100644
--- a/src/mod_register.erl
+++ b/src/mod_register.erl
@@ -39,7 +39,7 @@ process_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
(UTag /= false) and (RTag /= false) ->
User = xml:get_tag_cdata(UTag),
case From of
- {User, Server, _} ->
+ #jid{user = User, lserver = Server} ->
ejabberd_auth:remove_user(User),
{iq, ID, result, XMLNS, [SubEl]};
_ ->
@@ -71,14 +71,18 @@ process_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
end
end;
(UTag == false) and (RTag /= false) ->
- {User, Server, _} = From,
- ejabberd_auth:remove_user(User),
- {iq, ID, result, XMLNS, [SubEl]};
+ case From of
+ #jid{user = User, lserver = Server} ->
+ ejabberd_auth:remove_user(User),
+ {iq, ID, result, XMLNS, [SubEl]};
+ _ ->
+ {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]}
+ end;
(UTag /= false) and (PTag /= false) ->
User = xml:get_tag_cdata(UTag),
Password = xml:get_tag_cdata(PTag),
case From of
- {User, Server, _} ->
+ #jid{user = User, lserver = Server} ->
ejabberd_auth:set_password(User, Password),
{iq, ID, result, XMLNS, [SubEl]};
_ ->
@@ -117,7 +121,7 @@ try_register(User, Password) ->
ok;
{atomic, exists} ->
% TODO: replace to "username unavailable"
- {error, ?ERR_BAD_REQUEST};
+ {error, ?ERR_NOT_ALLOWED};
{error, Reason} ->
{error, ?ERR_INTERNAL_SERVER_ERROR}
end
diff --git a/src/mod_roster.erl b/src/mod_roster.erl
index bfe76cca..73e77b24 100644
--- a/src/mod_roster.erl
+++ b/src/mod_roster.erl
@@ -46,9 +46,9 @@ start(Opts) ->
process_iq(From, To, IQ) ->
{iq, ID, Type, XMLNS, SubEl} = IQ,
- {_, Server, _} = From,
+ #jid{lserver = LServer} = From,
case ?MYNAME of
- Server ->
+ LServer ->
process_local_iq(From, To, IQ);
_ ->
{iq, ID, error, XMLNS,
@@ -67,8 +67,7 @@ process_local_iq(From, To, {iq, _, Type, _, _} = IQ) ->
process_iq_get(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
- {User, _, _} = From,
- LUser = jlib:tolower(User),
+ #jid{luser = LUser} = From,
F = fun() ->
mnesia:index_read(roster, LUser, #roster.user)
end,
@@ -120,19 +119,19 @@ item_to_xml(Item) ->
process_iq_set(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
- {User, _, _} = From,
{xmlelement, Name, Attrs, Els} = SubEl,
- lists:foreach(fun(El) -> process_item_set(User, From, To, El) end, Els),
+ lists:foreach(fun(El) -> process_item_set(From, To, El) end, Els),
{iq, ID, result, XMLNS, []}.
-process_item_set(User, From, To, {xmlelement, Name, Attrs, Els} = XItem) ->
- JID = jlib:string_to_jid(xml:get_attr_s("jid", Attrs)),
- LUser = jlib:tolower(User),
- case JID of
+process_item_set(From, To, {xmlelement, Name, Attrs, Els} = XItem) ->
+ JID1 = jlib:string_to_jid(xml:get_attr_s("jid", Attrs)),
+ #jid{user = User, luser = LUser} = From,
+ case JID1 of
error ->
ok;
_ ->
- LJID = jlib:jid_tolower(JID),
+ JID = {JID1#jid.user, JID1#jid.server, JID1#jid.resource},
+ LJID = jlib:jid_tolower(JID1),
F = fun() ->
Res = mnesia:read({roster, {LUser, LJID}}),
Item = case Res of
@@ -175,7 +174,7 @@ process_item_set(User, From, To, {xmlelement, Name, Attrs, Els} = XItem) ->
end,
if IsTo ->
ejabberd_router:route(
- From, OldItem#roster.jid,
+ From, jlib:make_jid(OldItem#roster.jid),
{xmlelement, "presence",
[{"type", "unsubscribe"}],
[]});
@@ -183,7 +182,7 @@ process_item_set(User, From, To, {xmlelement, Name, Attrs, Els} = XItem) ->
end,
if IsFrom ->
ejabberd_router:route(
- From, OldItem#roster.jid,
+ From, jlib:make_jid(OldItem#roster.jid),
{xmlelement, "presence",
[{"type", "unsubscribed"}],
[]});
@@ -198,7 +197,7 @@ process_item_set(User, From, To, {xmlelement, Name, Attrs, Els} = XItem) ->
ok
end
end;
-process_item_set(User, From, To, _) ->
+process_item_set(From, To, _) ->
ok.
process_item_attrs(Item, [{Attr, Val} | Attrs]) ->
@@ -207,7 +206,8 @@ process_item_attrs(Item, [{Attr, Val} | Attrs]) ->
case jlib:string_to_jid(Val) of
error ->
process_item_attrs(Item, Attrs);
- JID ->
+ JID1 ->
+ JID = {JID1#jid.user, JID1#jid.server, JID1#jid.resource},
process_item_attrs(Item#roster{jid = JID}, Attrs)
end;
"name" ->
@@ -252,7 +252,9 @@ process_item_els(Item, []) ->
push_item(User, From, Item) ->
- ejabberd_sm ! {route, {"", "", ""}, {User, "", ""},
+ ejabberd_sm ! {route,
+ jlib:make_jid("", "", ""),
+ jlib:make_jid(User, "", ""),
{xmlelement, "broadcast", [],
[{item,
Item#roster.jid,
@@ -269,12 +271,12 @@ push_item(User, Resource, From, Item) ->
[item_to_xml(Item)]}]},
ejabberd_router ! {route,
From,
- {User, ?MYNAME, Resource},
+ jlib:make_jid(User, ?MYNAME, Resource),
jlib:iq_to_xml(ResIQ)}.
get_subscription_lists(User) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
F = fun() ->
mnesia:index_read(roster, LUser, #roster.user)
end,
@@ -286,7 +288,6 @@ get_subscription_lists(User) ->
end.
fill_subscription_lists([I | Is], F, T) ->
- %J = I#roster.jid,
J = element(2, I#roster.uj),
case I#roster.subscription of
both ->
@@ -303,9 +304,8 @@ fill_subscription_lists([], F, T) ->
in_subscription(User, From, Type) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
LFrom = jlib:jid_tolower(From),
- {FU, FS, FR} = From,
F = fun() ->
case mnesia:read({roster, {LUser, LFrom}}) of
[] ->
@@ -317,6 +317,9 @@ in_subscription(User, From, Type) ->
unsubscribed ->
false;
subscribed ->
+ JID = {From#jid.user,
+ From#jid.server,
+ From#jid.resource},
NewItem = #roster{uj = {LUser, LFrom},
user = LUser,
jid = From},
@@ -376,8 +379,12 @@ in_subscription(User, From, Type) ->
{atomic, false} ->
false;
{atomic, {update, Presence, Item}} ->
- ejabberd_router:route({User, ?MYNAME, ""}, {FU, FS, ""}, Presence),
- ejabberd_sm ! {route, {"", "", ""}, {User, "", ""},
+ ejabberd_router:route({User, ?MYNAME, ""},
+ jlib:jid_replace_resource(From, ""),
+ Presence),
+ ejabberd_sm ! {route,
+ jlib:make_jid("", "", ""),
+ jlib:make_jid(User, "", ""),
{xmlelement, "broadcast", [],
[{item,
Item#roster.jid,
@@ -390,9 +397,9 @@ in_subscription(User, From, Type) ->
false
end.
-out_subscription(User, JID, Type) ->
- LUser = jlib:tolower(User),
- LJID = jlib:jid_tolower(JID),
+out_subscription(User, JID1, Type) ->
+ LUser = jlib:nodeprep(User),
+ LJID = jlib:jid_tolower(JID1),
F = fun() ->
Item = case mnesia:read({roster, {LUser, LJID}}) of
[] ->
@@ -400,6 +407,9 @@ out_subscription(User, JID, Type) ->
(Type == unsubscribed) ->
false;
true ->
+ JID = {JID1#jid.user,
+ JID1#jid.server,
+ JID1#jid.resource},
#roster{uj = {LUser, LJID},
user = LUser,
jid = JID}
@@ -448,7 +458,9 @@ out_subscription(User, JID, Type) ->
push_item(User, {"", ?MYNAME, ""}, Item),
if
Update ->
- ejabberd_sm ! {route, {"", "", ""}, {User, "", ""},
+ ejabberd_sm ! {route,
+ jlib:make_jid("", "", ""),
+ jlib:make_jid(User, "", ""),
{xmlelement, "broadcast", [],
[{item,
Item#roster.jid,
@@ -461,7 +473,7 @@ out_subscription(User, JID, Type) ->
end.
remove_user(User) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
F = fun() ->
lists:foreach(fun(R) ->
mnesia:delete_object(R)
@@ -480,12 +492,13 @@ set_items(User, SubEl) ->
mnesia:transaction(F).
process_item_set_t(User, {xmlelement, Name, Attrs, Els} = XItem) ->
- JID = jlib:string_to_jid(xml:get_attr_s("jid", Attrs)),
- LUser = jlib:tolower(User),
- case JID of
+ JID1 = jlib:string_to_jid(xml:get_attr_s("jid", Attrs)),
+ LUser = jlib:nodeprep(User),
+ case JID1 of
error ->
ok;
_ ->
+ JID = {JID1#jid.user, JID1#jid.server, JID1#jid.resource},
LJID = jlib:jid_tolower(JID),
Res = mnesia:read({roster, {LUser, LJID}}),
Item = #roster{uj = {LUser, LJID},
@@ -509,7 +522,8 @@ process_item_attrs_ws(Item, [{Attr, Val} | Attrs]) ->
case jlib:string_to_jid(Val) of
error ->
process_item_attrs_ws(Item, Attrs);
- JID ->
+ JID1 ->
+ JID = {JID1#jid.user, JID1#jid.server, JID1#jid.resource},
process_item_attrs_ws(Item#roster{jid = JID}, Attrs)
end;
"name" ->
@@ -548,7 +562,7 @@ process_item_attrs_ws(Item, []) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
get_jid_info(User, JID) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
LJID = jlib:jid_tolower(JID),
case catch mnesia:dirty_read(roster, {LUser, LJID}) of
[#roster{subscription = Subscription, groups = Groups}] ->
diff --git a/src/mod_vcard.erl b/src/mod_vcard.erl
index 73fcc5c6..4a5910ca 100644
--- a/src/mod_vcard.erl
+++ b/src/mod_vcard.erl
@@ -72,7 +72,12 @@ init(Host) ->
loop() ->
receive
{route, From, To, Packet} ->
- do_route(From, To, Packet),
+ case catch do_route(From, To, Packet) of
+ {'EXIT', Reason} ->
+ ?ERROR_MSG("~p", [Reason]);
+ _ ->
+ ok
+ end,
loop();
_ ->
loop()
@@ -104,9 +109,7 @@ process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
process_sm_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
case Type of
set ->
- {User, Server, _} = From,
- LUser = jlib:tolower(User),
- LServer = jlib:tolower(Server),
+ #jid{user = User, lserver = LServer, luser = LUser} = From,
case ?MYNAME of
LServer ->
set_vcard(User, SubEl),
@@ -116,8 +119,7 @@ process_sm_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
[SubEl, ?ERR_NOT_ALLOWED]}
end;
get ->
- {User, _, _} = To,
- LUser = jlib:tolower(User),
+ #jid{luser = LUser} = To,
F = fun() ->
mnesia:read({vcard, LUser})
end,
@@ -145,18 +147,18 @@ set_vcard(User, VCARD) ->
OrgName = xml:get_path_s(VCARD, [{elem, "ORG"}, {elem, "ORGNAME"}, cdata]),
OrgUnit = xml:get_path_s(VCARD, [{elem, "ORG"}, {elem, "ORGUNIT"}, cdata]),
- LUser = jlib:tolower(User),
- LFN = jlib:tolower(FN),
- LFamily = jlib:tolower(Family),
- LGiven = jlib:tolower(Given),
- LMiddle = jlib:tolower(Middle),
- LNickname = jlib:tolower(Nickname),
- LBDay = jlib:tolower(BDay),
- LCTRY = jlib:tolower(CTRY),
- LLocality = jlib:tolower(Locality),
- LEMail = jlib:tolower(EMail),
- LOrgName = jlib:tolower(OrgName),
- LOrgUnit = jlib:tolower(OrgUnit),
+ LUser = jlib:nodeprep(User),
+ LFN = stringprep:tolower(FN),
+ LFamily = stringprep:tolower(Family),
+ LGiven = stringprep:tolower(Given),
+ LMiddle = stringprep:tolower(Middle),
+ LNickname = stringprep:tolower(Nickname),
+ LBDay = stringprep:tolower(BDay),
+ LCTRY = stringprep:tolower(CTRY),
+ LLocality = stringprep:tolower(Locality),
+ LEMail = stringprep:tolower(EMail),
+ LOrgName = stringprep:tolower(OrgName),
+ LOrgUnit = stringprep:tolower(OrgUnit),
F = fun() ->
mnesia:write(#vcard{user = LUser, vcard = VCARD}),
@@ -210,7 +212,7 @@ set_vcard(User, VCARD) ->
do_route(From, To, Packet) ->
- {User, Server, Resource} = To,
+ #jid{user = User, resource = Resource} = To,
if
(User /= "") or (Resource /= "") ->
Err = jlib:make_error_reply(Packet, ?ERR_SERVICE_UNAVAILABLE),
@@ -400,7 +402,7 @@ filter_fields([], Match) ->
Match;
filter_fields([{SVar, [Val]} | Ds], Match)
when is_list(Val) and (Val /= "") ->
- LVal = jlib:tolower(Val),
+ LVal = stringprep:tolower(Val),
NewMatch = case SVar of
"user" -> Match#vcard_search{luser = LVal};
"fn" -> Match#vcard_search{lfn = LVal};
@@ -439,18 +441,18 @@ set_vcard_t(R, _) ->
OrgName = xml:get_path_s(VCARD, [{elem, "ORG"}, {elem, "ORGNAME"}, cdata]),
OrgUnit = xml:get_path_s(VCARD, [{elem, "ORG"}, {elem, "ORGUNIT"}, cdata]),
- LUser = jlib:tolower(User),
- LFN = jlib:tolower(FN),
- LFamily = jlib:tolower(Family),
- LGiven = jlib:tolower(Given),
- LMiddle = jlib:tolower(Middle),
- LNickname = jlib:tolower(Nickname),
- LBDay = jlib:tolower(BDay),
- LCTRY = jlib:tolower(CTRY),
- LLocality = jlib:tolower(Locality),
- LEMail = jlib:tolower(EMail),
- LOrgName = jlib:tolower(OrgName),
- LOrgUnit = jlib:tolower(OrgUnit),
+ LUser = jlib:nodeprep(User),
+ LFN = stringprep:tolower(FN),
+ LFamily = stringprep:tolower(Family),
+ LGiven = stringprep:tolower(Given),
+ LMiddle = stringprep:tolower(Middle),
+ LNickname = stringprep:tolower(Nickname),
+ LBDay = stringprep:tolower(BDay),
+ LCTRY = stringprep:tolower(CTRY),
+ LLocality = stringprep:tolower(Locality),
+ LEMail = stringprep:tolower(EMail),
+ LOrgName = stringprep:tolower(OrgName),
+ LOrgUnit = stringprep:tolower(OrgUnit),
mnesia:write(
#vcard_search{user = User, luser = LUser,
@@ -476,7 +478,7 @@ reindex_vcards() ->
remove_user(User) ->
- LUser = jlib:tolower(User),
+ LUser = jlib:nodeprep(User),
F = fun() ->
mnesia:delete({vcard, LUser}),
lists:foreach(fun(R) ->
diff --git a/src/stringprep/stringprep_drv.c b/src/stringprep/stringprep_drv.c
index 9d9f5dfe..a8cd06bc 100644
--- a/src/stringprep/stringprep_drv.c
+++ b/src/stringprep/stringprep_drv.c
@@ -32,8 +32,38 @@ static void stringprep_erl_stop(ErlDrvData handle)
driver_free((char*)handle);
}
+/*
+ * "canonical_ordering" and "compose" functions are based on nfkc.c from Gnome
+ * library
+ */
-static int combine(int ch1, int ch2)
+void canonical_ordering(int *str, int len)
+{
+ int i, j, t;
+ int last, next;
+
+ last = GetUniCharCClass(str[0]);
+ for (i = 0; i < len - 1; i++)
+ {
+ next = GetUniCharCClass(str[i + 1]);
+ if (next != 0 && last > next)
+ {
+ for(j = i; j > 0; j--)
+ {
+ if (GetUniCharCClass(str[j]) <= next)
+ break;
+ t = str[j + 1];
+ str[j + 1] = str[j];
+ str[j] = t;
+ }
+ next = last;
+ }
+ last = next;
+ }
+}
+
+
+static int compose(int ch1, int ch2)
{
int info1, info2;
@@ -90,6 +120,29 @@ static int combine(int ch1, int ch2)
pos += 3; \
}
+#define ADD_UCHAR32(str, pos, len, ch) \
+ if(pos >= len) { \
+ len = 2*len + 1; \
+ str = driver_realloc(str, len * sizeof(int)); \
+ } \
+ str[pos] = ch; \
+ pos++;
+
+
+#define ADD_DECOMP(ruc) \
+ info = GetUniCharDecompInfo(ruc); \
+ if(info >= 0) { \
+ decomp_len = GetDecompLen(info); \
+ decomp_shift = GetDecompShift(info); \
+ for(j = 0; j < decomp_len; j++) { \
+ ADD_UCHAR32(str32, str32pos, str32len, \
+ decompList[decomp_shift + j]); \
+ } \
+ } else { \
+ ADD_UCHAR32(str32, str32pos, str32len, ruc); \
+ }
+
+
static int stringprep_erl_control(ErlDrvData drv_data,
unsigned int command,
@@ -105,12 +158,22 @@ static int stringprep_erl_control(ErlDrvData drv_data,
int prohibit, tolower;
char *rstring;
int *mc;
-
+ int *str32;
+ int str32len, str32pos = 0;
+ int decomp_len, decomp_shift;
+ int comp_pos;
+ int cclass1, cclass2;
+ int ch1, ch2;
+
size = len + 1;
rstring = driver_alloc(size);
rstring[0] = 0;
+ str32len = len + 1;
+
+ str32 = driver_alloc(str32len * sizeof(int));
+
switch (command)
{
case 0:
@@ -134,7 +197,7 @@ static int stringprep_erl_control(ErlDrvData drv_data,
break;
}
- for(i=0; i < len; i++)
+ for(i = 0; i < len; i++)
{
c = buf[i];
if(c < 0x80) {
@@ -164,12 +227,14 @@ static int stringprep_erl_control(ErlDrvData drv_data,
if(bad) {
*rbuf = rstring;
+ driver_free(str32);
return 1;
}
info = GetUniCharInfo(uc);
if(info & prohibit) {
*rbuf = rstring;
+ driver_free(str32);
return 1;
}
@@ -180,6 +245,19 @@ static int stringprep_erl_control(ErlDrvData drv_data,
if(!(info & MCMask))
{
ruc = uc + GetDelta(info);
+ ADD_DECOMP(ruc);
+
+ //info = GetUniCharDecompInfo(ruc);
+ //if(info >= 0) {
+ // decomp_len = GetDecompLen(info);
+ // decomp_shift = GetDecompShift(info);
+ // for(j = 0; j < decomp_len; j++) {
+ // ADD_UCHAR32(str32, str32pos, str32len,
+ // decompList[decomp_shift + j]);
+ // }
+ //} else {
+ // ADD_UCHAR32(str32, str32pos, str32len, ruc);
+ //}
//info = GetUniCharDecompInfo(ruc);
//if(info >= 0) {
@@ -190,26 +268,63 @@ static int stringprep_erl_control(ErlDrvData drv_data,
// printf("\r\n");
//}
- ADD_UCHAR(ruc);
+ //ADD_UCHAR(ruc);
} else {
mc = GetMC(info);
for(j = 1; j <= mc[0]; j++) {
ruc = mc[j];
//printf("Char %x cclass %d\r\n", ruc, GetUniCharCClass(ruc));
- ADD_UCHAR(ruc);
+ ADD_DECOMP(ruc);
}
}
} else {
ruc = uc;
- ADD_UCHAR(ruc);
+ ADD_DECOMP(ruc);
}
}
}
- //printf("Combine: %x\r\n", combine(0x438, 0x301));
+ if (str32pos == 0) {
+ rstring[0] = 1;
+ *rbuf = rstring;
+ driver_free(str32);
+ return 1;
+ }
+
+ canonical_ordering(str32, str32pos);
+
+ comp_pos = 0;
+ ch1 = str32[0];
+ cclass1 = GetUniCharCClass(ch1);
+ for(i = 1; i < str32pos; i++)
+ {
+ ch2 = str32[i];
+ cclass2 = GetUniCharCClass(ch2);
+ //printf("Compose: %x + %x = %x\r\n", ch1, ch2, compose(ch1, ch2));
+ if(cclass1 == 0 && cclass1 < cclass2 && (ruc = compose(ch1, ch2))) {
+ ch1 = ruc;
+ } else {
+ str32[comp_pos] = ch1;
+ comp_pos++;
+ ch1 = ch2;
+ }
+ }
+ str32[comp_pos] = ch1;
+ str32pos = comp_pos+1;
+
+
+ for(i = 0; i < str32pos; i++)
+ {
+ ruc = str32[i];
+ ADD_UCHAR(ruc);
+ }
+
+ //printf("Compose: %x\r\n", compose(0x438, 0x301));
+ //printf("Pos: %d\r\n", pos);
rstring[0] = 1;
*rbuf = rstring;
+ driver_free(str32);
return pos;
}
diff --git a/src/stringprep/uni_norm.c b/src/stringprep/uni_norm.c
index 1c287958..d95ad5ba 100644
--- a/src/stringprep/uni_norm.c
+++ b/src/stringprep/uni_norm.c
@@ -188,29 +188,6 @@ static unsigned char cclassGroupMap[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-/*
- * Each group represents a unique set of character attributes. The attributes
- * are encoded into a 32-bit value as follows:
- *
- * Bits 0-4 Character category: see the constants listed below.
- *
- * Bits 5-7 Case delta type: 000 = identity
- * 010 = add delta for lower
- * 011 = add delta for lower, add 1 for title
- * 100 = sutract delta for title/upper
- * 101 = sub delta for upper, sub 1 for title
- * 110 = sub delta for upper, add delta for lower
- *
- * Bits 8-21 Reserved for future use.
- *
- * Bits 22-31 Case delta: delta for case conversions. This should be the
- * highest field so we can easily sign extend.
- */
-
-static int cclass_groups[] = {
-
-};
-
#define GetUniCharCClass(ch) (cclassGroupMap[(cclassPageMap[(((int)(ch)) & 0xffff) >> CCLASS_OFFSET_BITS] << CCLASS_OFFSET_BITS) | ((ch) & ((1 << CCLASS_OFFSET_BITS)-1))])
@@ -355,510 +332,510 @@ static int decompGroupMap[] = {
131435, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 131437, 131439, 131441, 131443, 131445, 131447, 131449,
131451, 131453, 131455, 131457, 131459, 131461, 131463, 131465, 131467,
- 131469, 131471, 131473, 131475, 131477, 131479, 131481, 131483, 131485,
- -1, 131487, 131489, 131491, 131493, 131495, 131497, -1, -1, 131499,
- 131501, 131503, 131505, 131507, 131509, 131511, 131513, 131515, 131517,
- 131519, 131521, 131523, 131525, 131527, 131529, -1, -1, 131531, 131533,
- 131535, 131537, 131539, 131541, 131543, 131545, 131547, 131549, 131551,
- 131553, 131555, 131557, 131559, 131561, 131563, 131565, 131567, 131569,
- 131571, 131573, 131575, 131577, 131579, 131581, 131583, 131585, 131587,
- 131589, 131591, 131593, 131595, 131597, 131599, 131601, -1, -1, 131603,
- 131605, -1, -1, -1, -1, -1, -1, 131607, 131609, 131611, 131613, 131615,
- 131617, 131619, 131621, 131623, 131625, 131627, 131629, 131631, 131633,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 66099, 66100, 66101, 66102,
- 66103, 66104, 66105, 66106, 66107, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 131644, 131646, 131648, 131650, 131652, 131654,
- -1, -1, 66120, 66121, 65892, 66122, 66123, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 66124, 66125, -1, 66126, 131663, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 66129, -1, -1, -1, -1, -1, 131666,
- -1, -1, -1, 66132, -1, -1, -1, -1, -1, 131080, 131669, 131671, 66137,
- 131674, 131676, 131678, -1, 131680, -1, 131682, 131684, 131686, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 131688, 131690, 131692, 131694, 131696,
- 131698, 131700, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131702, 131704, 131706,
- 131708, 131710, -1, 66176, 66177, 66178, 131715, 131717, 66183, 66184,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 66185, 66186, 66187, -1, 66188, 66189,
- -1, -1, -1, 66190, -1, -1, -1, -1, -1, -1, 131727, 131729, -1, 131731,
- -1, -1, -1, 131733, -1, -1, -1, -1, 131735, 131737, 131739, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 131741, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 131743, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131745, 131747,
- -1, 131749, -1, -1, -1, 131751, -1, -1, -1, -1, 131753, 131755, 131757,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 131759, 131761, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 131763, 131765, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 131767, 131769, 131771, 131773, -1, -1, 131775, 131777, -1,
- -1, 131779, 131781, 131783, 131785, 131787, 131789, -1, -1, 131791,
- 131793, 131795, 131797, 131799, 131801, -1, -1, 131803, 131805, 131807,
- 131809, 131811, 131813, 131815, 131817, 131819, 131821, 131823, 131825,
- -1, -1, 131827, 131829, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 131831, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131833, 131835,
- 131837, 131839, 131841, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 131843, 131845, 131847, 131849, -1, -1, -1, -1, -1, -1, -1, 131851,
- -1, 131853, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 131855, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 131857, -1, -1, -1, -1, -1, -1, -1,
- 131859, -1, -1, 131861, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 131863, 131865, 131867, 131869, 131871,
- 131873, 131875, 131877, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 131879, 131881, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 131883, 131885, -1, 131887, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131889, -1, -1, 131891,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 131893, 131895, 131897, -1, -1, 131899, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 131901, -1, -1, 131903, 131905, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 131907, 131909, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 131911, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 131913, 131915, 131917, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 131919, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131921, -1, -1,
- -1, -1, -1, -1, 131923, 131925, -1, 131927, 131929, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 131931, 131933, 131935, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 131937, -1, 131939, 131941, 131943,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 131945, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 131947, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131949, 131951, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 66417, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 131954, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131956, -1, -1, -1,
- -1, 131958, -1, -1, -1, -1, 131960, -1, -1, -1, -1, 131962, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131964, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 131966, -1, 131968, 131970, 131972, 131974, 131976,
- -1, -1, -1, -1, -1, -1, -1, 131978, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 131980, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 131982, -1, -1, -1, -1, 131984, -1, -1, -1, -1, 131986,
- -1, -1, -1, -1, 131988, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 131990, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131992,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 66458, 66459, 66460, -1, 66461, 66462, 66463, 66464, 66465,
- 66466, 66467, 66468, 66469, 66470, 66471, -1, 66472, 66473, 66474,
- 66475, 66476, 66477, 66478, 65539, 66479, 66480, 66481, 66482, 66483,
- 66484, 66485, 66486, 66487, 66488, -1, 66489, 66490, 66491, 65550,
- 66492, 66493, 66494, 66495, 66496, 66497, 66498, 66499, 66500, 66501,
- 66176, 66502, 66503, 66183, 66504, 66505, 66102, 66497, 66500, 66176,
- 66502, 66186, 66183, 66504, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 132042, 132044, 132046,
- 132048, 132050, 132052, 132054, 132056, 132058, 132060, 132062, 132064,
- 132066, 132068, 132070, 132072, 132074, 132076, 132078, 132080, 132082,
- 132084, 132086, 132088, 132090, 132092, 132094, 132096, 132098, 132100,
- 132102, 132104, 132106, 132108, 132110, 132112, 132114, 132116, 132118,
- 132120, 132122, 132124, 132126, 132128, 132130, 132132, 132134, 132136,
- 132138, 132140, 132142, 132144, 132146, 132148, 132150, 132152, 132154,
- 132156, 132158, 132160, 132162, 132164, 132166, 132168, 132170, 132172,
- 132174, 132176, 132178, 132180, 132182, 132184, 132186, 132188, 132190,
- 132192, 132194, 132196, 132198, 132200, 132202, 132204, 132206, 132208,
- 132210, 132212, 132214, 132216, 132218, 132220, 132222, 132224, 132226,
- 132228, 132230, 132232, 132234, 132236, 132238, 132240, 132242, 132244,
- 132246, 132248, 132250, 132252, 132254, 132256, 132258, 132260, 132262,
- 132264, 132266, 132268, 132270, 132272, 132274, 132276, 132278, 132280,
- 132282, 132284, 132286, 132288, 132290, 132292, 132294, 132296, 132298,
- 132300, 132302, 132304, 132306, 132308, 132310, 132312, 132314, 132316,
- 132318, 132320, 132322, 132324, 132326, 132328, 132330, 132332, 132334,
- 132336, 132338, 132340, 132342, 132344, 132346, 132348, 132350, 132352,
- -1, -1, -1, -1, 132354, 132356, 132358, 132360, 132362, 132364, 132366,
- 132368, 132370, 132372, 132374, 132376, 132378, 132380, 132382, 132384,
- 132386, 132388, 132390, 132392, 132394, 132396, 132398, 132400, 132402,
- 132404, 132406, 132408, 132410, 132412, 132414, 132416, 132418, 132420,
- 132422, 132424, 132426, 132428, 132430, 132432, 132434, 132436, 132438,
- 132440, 132442, 132444, 132446, 132448, 132450, 132452, 132454, 132456,
- 132458, 132460, 132462, 132464, 132466, 132468, 132470, 132472, 132474,
- 132476, 132478, 132480, 132482, 132484, 132486, 132488, 132490, 132492,
- 132494, 132496, 132498, 132500, 132502, 132504, 132506, 132508, 132510,
- 132512, 132514, 132516, 132518, 132520, 132522, 132524, 132526, 132528,
- 132530, 132532, -1, -1, -1, -1, -1, -1, 132534, 132536, 132538, 132540,
- 132542, 132544, 132546, 132548, 132550, 132552, 132554, 132556, 132558,
- 132560, 132562, 132564, 132566, 132568, 132570, 132572, 132574, 132576,
- -1, -1, 132578, 132580, 132582, 132584, 132586, 132588, -1, -1, 132590,
- 132592, 132594, 132596, 132598, 132600, 132602, 132604, 132606, 132608,
- 132610, 132612, 132614, 132616, 132618, 132620, 132622, 132624, 132626,
- 132628, 132630, 132632, 132634, 132636, 132638, 132640, 132642, 132644,
- 132646, 132648, 132650, 132652, 132654, 132656, 132658, 132660, 132662,
- 132664, -1, -1, 132666, 132668, 132670, 132672, 132674, 132676, -1,
- -1, 132678, 132680, 132682, 132684, 132686, 132688, 132690, 132692,
- -1, 132694, -1, 132696, -1, 132698, -1, 132700, 132702, 132704, 132706,
- 132708, 132710, 132712, 132714, 132716, 132718, 132720, 132722, 132724,
- 132726, 132728, 132730, 132732, 132734, 67200, 132737, 67203, 132740,
- 67206, 132743, 67209, 132746, 67212, 132749, 67215, 132752, 67218,
- -1, -1, 132755, 132757, 132759, 132761, 132763, 132765, 132767, 132769,
- 132771, 132773, 132775, 132777, 132779, 132781, 132783, 132785, 132787,
- 132789, 132791, 132793, 132795, 132797, 132799, 132801, 132803, 132805,
- 132807, 132809, 132811, 132813, 132815, 132817, 132819, 132821, 132823,
- 132825, 132827, 132829, 132831, 132833, 132835, 132837, 132839, 132841,
- 132843, 132845, 132847, 132849, 132851, 132853, 132855, 132857, 132859,
- -1, 132861, 132863, 132865, 132867, 132869, 67335, 132872, 132874,
- 67340, 132874, 132877, 132879, 132881, 132883, 132885, -1, 132887,
- 132889, 132891, 67357, 132894, 67360, 132897, 132899, 132901, 132903,
- 132905, 132907, 132909, 67375, -1, -1, 132912, 132914, 132916, 132918,
- 132920, 67386, -1, 132923, 132925, 132927, 132929, 132931, 132933,
- 67399, 132936, 132938, 132940, 132942, 132944, 132946, 132948, 67414,
- 132951, 132953, 67419, 67420, -1, -1, 132957, 132959, 132961, -1, 132963,
- 132965, 132967, 67433, 132970, 67436, 132973, 67439, 132976, -1, 67442,
- 67443, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,
- -1, -1, -1, -1, -1, -1, 67444, -1, -1, -1, -1, -1, 132981, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 67447, 132984, 198522, -1,
- -1, -1, -1, -1, -1, -1, -1, 65536, -1, -1, -1, 132989, 198527, -1,
- 132994, 198532, -1, -1, -1, -1, 132999, -1, 133001, -1, -1, -1, -1,
- -1, -1, -1, -1, 133003, 133005, 133007, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 264081, -1, -1, -1, -1, -1, -1, -1, 65536,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 67477,
- 66505, -1, -1, 67478, 67479, 67480, 67481, 67482, 67483, 67484, 67485,
- 67486, 67487, 67488, 67489, 67477, 65549, 65542, 65543, 67478, 67479,
- 67480, 67481, 67482, 67483, 67484, 67485, 67486, 67487, 67488, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 133026, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 198564,
- 198567, 67498, 133035, -1, 198573, 198576, 67507, -1, 133044, 66488,
- 66465, 66465, 66465, 66099, 67510, 66466, 66466, 66469, 66121, -1,
- 66471, 133047, -1, -1, 66474, 67513, 66475, 66475, 66475, -1, -1, 133050,
- 198588, 133055, -1, 67521, -1, 67522, -1, 67521, -1, 66468, 67523,
- 66460, 67498, -1, 66484, 66462, 67524, -1, 66470, 65550, 67525, 67526,
- 67527, 67528, 66505, -1, 198601, -1, 66502, 67532, 67533, 67534, -1,
- -1, -1, -1, 66461, 66483, 66484, 66505, 66101, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 198607, 198610, 198613, 198616, 198619, 198622, 198625,
- 198628, 198631, 198634, 198637, 198640, 133107, 66466, 133109, 198647,
- 133114, 67580, 133117, 198655, 264194, 133126, 67592, 133129, 198667,
- 66469, 67498, 66461, 66470, 66505, 133134, 198672, 133139, 66500, 133141,
- 198679, 264218, 133150, 66122, 133152, 198690, 66121, 67621, 66483,
- 66490, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 133158, 133160, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 133162,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 133164, 133166,
- 133168, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 133170, -1, -1, -1, -1, 133172, -1, -1, 133174,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 133176, -1, 133178, -1, -1, -1, -1, -1, 133180,
- 198718, -1, 133185, 198723, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 133190, -1, -1, 133192, -1, -1, 133194, -1,
- 133196, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 133198, -1, 133200, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 133202, 133204, 133206, 133208, 133210, -1, -1,
- 133212, 133214, -1, -1, 133216, 133218, -1, -1, -1, -1, -1, -1, 133220,
- 133222, -1, -1, 133224, 133226, -1, -1, 133228, 133230, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 133232, 133234,
- 133236, 133238, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 133240, 133242, 133244, 133246, -1, -1, -1, -1, -1, -1,
- 133248, 133250, 133252, 133254, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 67720, 67721, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 65549, 65542, 65543, 67478, 67479,
- 67480, 67481, 67482, 67483, 133258, 133260, 133262, 133264, 133266,
- 133268, 133270, 133272, 133274, 133276, 133278, 198816, 198819, 198822,
- 198825, 198828, 198831, 198834, 198837, 198840, 264379, 264383, 264387,
- 264391, 264395, 264399, 264403, 264407, 264411, 264415, 264419, 133351,
- 133353, 133355, 133357, 133359, 133361, 133363, 133365, 133367, 198905,
- 198908, 198911, 198914, 198917, 198920, 198923, 198926, 198929, 198932,
- 198935, 198938, 198941, 198944, 198947, 198950, 198953, 198956, 198959,
- 198962, 198965, 198968, 198971, 198974, 198977, 198980, 198983, 198986,
- 198989, 198992, 198995, 198998, 199001, 199004, 199007, 199010, 199013,
- 66458, 66460, 67498, 66461, 66462, 67524, 66464, 66465, 66466, 66467,
- 66468, 66469, 66470, 66471, 66472, 66474, 67513, 66475, 67944, 66476,
- 66477, 67580, 66478, 67592, 67945, 67521, 65539, 66482, 67621, 66483,
- 66484, 67946, 66488, 66099, 66505, 66101, 66489, 66121, 66490, 67489,
- 65550, 66495, 67947, 66102, 65892, 66496, 66497, 66500, 66106, 66122,
- 66107, 67948, 67477, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 264557, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 199025, 133492, 199030,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 133497, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 67963, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 67964, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 67965, 67966, 67967, 67968, 67969, 67970, 67971,
- 67972, 67973, 67974, 67975, 67976, 67977, 67978, 67979, 67980, 67981,
- 67982, 67983, 67984, 67985, 67986, 67987, 67988, 67989, 67990, 67991,
- 67992, 67993, 67994, 67995, 67996, 67997, 67998, 67999, 68000, 68001,
- 68002, 68003, 68004, 68005, 68006, 68007, 68008, 68009, 68010, 68011,
- 68012, 68013, 68014, 68015, 68016, 68017, 68018, 68019, 68020, 68021,
- 68022, 68023, 68024, 68025, 68026, 68027, 68028, 68029, 68030, 68031,
- 68032, 68033, 68034, 68035, 68036, 68037, 68038, 68039, 68040, 68041,
- 68042, 68043, 68044, 68045, 68046, 68047, 68048, 68049, 68050, 68051,
- 68052, 68053, 68054, 68055, 68056, 68057, 68058, 68059, 68060, 68061,
- 68062, 68063, 68064, 68065, 68066, 68067, 68068, 68069, 68070, 68071,
- 68072, 68073, 68074, 68075, 68076, 68077, 68078, 68079, 68080, 68081,
- 68082, 68083, 68084, 68085, 68086, 68087, 68088, 68089, 68090, 68091,
- 68092, 68093, 68094, 68095, 68096, 68097, 68098, 68099, 68100, 68101,
- 68102, 68103, 68104, 68105, 68106, 68107, 68108, 68109, 68110, 68111,
- 68112, 68113, 68114, 68115, 68116, 68117, 68118, 68119, 68120, 68121,
- 68122, 68123, 68124, 68125, 68126, 68127, 68128, 68129, 68130, 68131,
- 68132, 68133, 68134, 68135, 68136, 68137, 68138, 68139, 68140, 68141,
- 68142, 68143, 68144, 68145, 68146, 68147, 68148, 68149, 68150, 68151,
- 68152, 68153, 68154, 68155, 68156, 68157, 68158, 68159, 68160, 68161,
- 68162, 68163, 68164, 68165, 68166, 68167, 68168, 68169, 68170, 68171,
- 68172, 68173, 68174, 68175, 68176, 68177, 68178, -1, -1, -1, -1, -1,
+ 131469, 197007, 197010, 197013, 197016, 197019, 197022, 197025, 197028,
+ -1, 197031, 197034, 197037, 197040, 131507, 131509, -1, -1, 131511,
+ 131513, 131515, 131517, 131519, 131521, 197059, 197062, 131529, 131531,
+ 131533, 131535, 131537, 131539, 131541, 131543, -1, -1, 131545, 131547,
+ 197085, 197088, 131555, 131557, 131559, 131561, 131563, 131565, 131567,
+ 131569, 131571, 131573, 131575, 131577, 131579, 131581, 131583, 131585,
+ 131587, 131589, 131591, 131593, 131595, 131597, 131599, 131601, 131603,
+ 131605, 131607, 131609, 131611, 131613, 131615, 131617, -1, -1, 131619,
+ 131621, -1, -1, -1, -1, -1, -1, 131623, 131625, 131627, 131629, 197167,
+ 197170, 197173, 197176, 131643, 131645, 197183, 197186, 131653, 131655,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 66121, 66122, 66123, 66124,
+ 66125, 66126, 66127, 66128, 66129, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 131666, 131668, 131670, 131672, 131674, 131676,
+ -1, -1, 66142, 66143, 65892, 66144, 66145, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 66146, 66147, -1, 66148, 131685, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 66151, -1, -1, -1, -1, -1, 131688,
+ -1, -1, -1, 66154, -1, -1, -1, -1, -1, 131080, 197227, 131694, 66160,
+ 131697, 131699, 131701, -1, 131703, -1, 131705, 131707, 197245, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 131712, 131714, 131716, 131718, 131720,
+ 131722, 197260, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131727, 131729, 131731,
+ 131733, 131735, -1, 66201, 66202, 66203, 131705, 131714, 66204, 66205,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 66206, 66207, 66208, -1, 66209, 66210,
+ -1, -1, -1, 66211, -1, -1, -1, -1, -1, -1, 131748, 131750, -1, 131752,
+ -1, -1, -1, 131754, -1, -1, -1, -1, 131756, 131758, 131760, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 131762, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 131764, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131766, 131768,
+ -1, 131770, -1, -1, -1, 131772, -1, -1, -1, -1, 131774, 131776, 131778,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 131780, 131782, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 131784, 131786, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 131788, 131790, 131792, 131794, -1, -1, 131796, 131798, -1,
+ -1, 131800, 131802, 131804, 131806, 131808, 131810, -1, -1, 131812,
+ 131814, 131816, 131818, 131820, 131822, -1, -1, 131824, 131826, 131828,
+ 131830, 131832, 131834, 131836, 131838, 131840, 131842, 131844, 131846,
+ -1, -1, 131848, 131850, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 131852, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131854, 131856,
+ 131858, 131860, 131862, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 131864, 131866, 131868, 131870, -1, -1, -1, -1, -1, -1, -1, 131872,
+ -1, 131874, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 131876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 131878, -1, -1, -1, -1, -1, -1, -1,
+ 131880, -1, -1, 131882, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 131884, 131886, 131888, 131890, 131892,
+ 131894, 131896, 131898, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 131900, 131902, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 131904, 131906, -1, 131908, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131910, -1, -1, 131912,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 131914, 131916, 131918, -1, -1, 131920, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 131922, -1, -1, 131924, 131926, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 131928, 131930, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 131932, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 131934, 131936, 131938, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 131940, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131942, -1, -1,
+ -1, -1, -1, -1, 131944, 131946, -1, 131948, 197486, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 131953, 131955, 131957, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 131959, -1, 131961, 197499, 131966,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 131968, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 131970, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131972, 131974, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 66440, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 131977, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131979, -1, -1, -1,
+ -1, 131981, -1, -1, -1, -1, 131983, -1, -1, -1, -1, 131985, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131987, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 131989, -1, 131991, 131993, 131995, 131997, 131999,
+ -1, -1, -1, -1, -1, -1, -1, 132001, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 132003, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 132005, -1, -1, -1, -1, 132007, -1, -1, -1, -1, 132009,
+ -1, -1, -1, -1, 132011, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 132013, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 132015,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 66481, 66482, 66483, -1, 66484, 66485, 66486, 66487, 66488,
+ 66489, 66490, 66491, 66492, 66493, 66494, -1, 66495, 66496, 66497,
+ 66498, 66499, 66500, 66501, 65539, 66502, 66503, 66504, 66505, 66506,
+ 66507, 66508, 66509, 66510, 66511, -1, 66512, 66513, 66514, 65550,
+ 66515, 66516, 66517, 66518, 66519, 66520, 66521, 66522, 66523, 66524,
+ 66201, 66525, 66526, 66204, 66527, 66528, 66124, 66520, 66523, 66201,
+ 66525, 66207, 66204, 66527, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 132065, 132067, 132069,
+ 132071, 132073, 132075, 132077, 132079, 197617, 197620, 132087, 132089,
+ 132091, 132093, 132095, 132097, 132099, 132101, 132103, 132105, 197643,
+ 197646, 197649, 197652, 132119, 132121, 132123, 132125, 197663, 197666,
+ 132133, 132135, 132137, 132139, 132141, 132143, 132145, 132147, 132149,
+ 132151, 132153, 132155, 132157, 132159, 132161, 132163, 197701, 197704,
+ 132171, 132173, 132175, 132177, 132179, 132181, 132183, 132185, 197723,
+ 197726, 132193, 132195, 132197, 132199, 132201, 132203, 132205, 132207,
+ 132209, 132211, 132213, 132215, 132217, 132219, 132221, 132223, 132225,
+ 132227, 197765, 197768, 197771, 197774, 197777, 197780, 197783, 197786,
+ 132253, 132255, 132257, 132259, 132261, 132263, 132265, 132267, 197805,
+ 197808, 132275, 132277, 132279, 132281, 132283, 132285, 197823, 197826,
+ 197829, 197832, 197835, 197838, 132305, 132307, 132309, 132311, 132313,
+ 132315, 132317, 132319, 132321, 132323, 132325, 132327, 132329, 132331,
+ 197869, 197872, 197875, 197878, 132345, 132347, 132349, 132351, 132353,
+ 132355, 132357, 132359, 132361, 132363, 132365, 132367, 132369, 132371,
+ 132373, 132375, 132377, 132379, 132381, 132383, 132385, 132387, 132389,
+ 132391, 132393, 132395, 132397, 132399, 132401, 132403, 132405, 132281,
+ -1, -1, -1, -1, 132407, 132409, 132411, 132413, 197951, 197954, 197957,
+ 197960, 197963, 197966, 197969, 197972, 197975, 197978, 197981, 197984,
+ 197987, 197990, 197993, 197996, 197999, 198002, 198005, 198008, 132475,
+ 132477, 132479, 132481, 132483, 132485, 198023, 198026, 198029, 198032,
+ 198035, 198038, 198041, 198044, 198047, 198050, 132517, 132519, 132521,
+ 132523, 132525, 132527, 132529, 132531, 198069, 198072, 198075, 198078,
+ 198081, 198084, 198087, 198090, 198093, 198096, 198099, 198102, 198105,
+ 198108, 198111, 198114, 198117, 198120, 198123, 198126, 132593, 132595,
+ 132597, 132599, 198137, 198140, 198143, 198146, 198149, 198152, 198155,
+ 198158, 198161, 198164, 132631, 132633, 132635, 132637, 132639, 132641,
+ 132643, 132645, -1, -1, -1, -1, -1, -1, 132647, 132649, 198187, 198190,
+ 198193, 198196, 198199, 198202, 132669, 132671, 198209, 198212, 198215,
+ 198218, 198221, 198224, 132691, 132693, 198231, 198234, 198237, 198240,
+ -1, -1, 132707, 132709, 198247, 198250, 198253, 198256, -1, -1, 132723,
+ 132725, 198263, 198266, 198269, 198272, 198275, 198278, 132745, 132747,
+ 198285, 198288, 198291, 198294, 198297, 198300, 132767, 132769, 198307,
+ 198310, 198313, 198316, 198319, 198322, 132789, 132791, 198329, 198332,
+ 198335, 198338, 198341, 198344, 132811, 132813, 198351, 198354, 198357,
+ 198360, -1, -1, 132827, 132829, 198367, 198370, 198373, 198376, -1,
+ -1, 132843, 132845, 198383, 198386, 198389, 198392, 198395, 198398,
+ -1, 132865, -1, 198403, -1, 198406, -1, 198409, 132876, 132878, 198416,
+ 198419, 198422, 198425, 198428, 198431, 132898, 132900, 198438, 198441,
+ 198444, 198447, 198450, 198453, 132920, 131716, 132922, 131718, 132924,
+ 131720, 132926, 131722, 132928, 131731, 132930, 131733, 132932, 131735,
+ -1, -1, 198470, 198473, 264012, 264016, 264020, 264024, 264028, 264032,
+ 198500, 198503, 264042, 264046, 264050, 264054, 264058, 264062, 198530,
+ 198533, 264072, 264076, 264080, 264084, 264088, 264092, 198560, 198563,
+ 264102, 264106, 264110, 264114, 264118, 264122, 198590, 198593, 264132,
+ 264136, 264140, 264144, 264148, 264152, 198620, 198623, 264162, 264166,
+ 264170, 264174, 264178, 264182, 133114, 133116, 198654, 133121, 198659,
+ -1, 133126, 198664, 133131, 133133, 133135, 131694, 133137, 133139,
+ 67605, 133139, 133142, 198680, 198683, 133150, 198688, -1, 133155,
+ 198693, 133160, 131697, 133162, 131699, 133164, 198702, 198705, 198708,
+ 133175, 133177, 198715, 197245, -1, -1, 133182, 198720, 133187, 133189,
+ 133191, 131701, -1, 198729, 198732, 198735, 133202, 133204, 198742,
+ 197260, 133209, 133211, 133213, 198751, 133218, 133220, 133222, 131705,
+ 133224, 198762, 197227, 67693, -1, -1, 198766, 133233, 198771, -1,
+ 133238, 198776, 133243, 131703, 133245, 131707, 133247, 131080, 133249,
+ -1, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,
+ 65536, 65536, -1, -1, -1, -1, -1, -1, 67715, -1, -1, -1, -1, -1, 133252,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 67718, 133255, 198793,
+ -1, -1, -1, -1, -1, -1, -1, -1, 65536, -1, -1, -1, 133260, 198798,
+ -1, 133265, 198803, -1, -1, -1, -1, 133270, -1, 133272, -1, -1, -1,
+ -1, -1, -1, -1, -1, 133274, 133276, 133278, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 264352, -1, -1, -1, -1, -1, -1, -1, 65536,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 67748,
+ 66528, -1, -1, 67749, 67750, 67751, 67752, 67753, 67754, 67755, 67756,
+ 67757, 67758, 67759, 67760, 67748, 65549, 65542, 65543, 67749, 67750,
+ 67751, 67752, 67753, 67754, 67755, 67756, 67757, 67758, 67759, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 133297, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 198835,
+ 198838, 67769, 133306, -1, 198844, 198847, 67778, -1, 133315, 66511,
+ 66488, 66488, 66488, 66121, 67781, 66489, 66489, 66492, 66143, -1,
+ 66494, 133318, -1, -1, 66497, 67784, 66498, 66498, 66498, -1, -1, 133321,
+ 198859, 133326, -1, 67792, -1, 67793, -1, 67792, -1, 66491, 131106,
+ 66483, 67769, -1, 66507, 66485, 67794, -1, 66493, 65550, 67795, 67796,
+ 67797, 67798, 66528, -1, 198871, -1, 66525, 67802, 67803, 67804, -1,
+ -1, -1, -1, 66484, 66506, 66507, 66528, 66123, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 198877, 198880, 198883, 198886, 198889, 198892, 198895,
+ 198898, 198901, 198904, 198907, 198910, 133377, 66489, 133379, 198917,
+ 133384, 67850, 133387, 198925, 264464, 133396, 67862, 133399, 198937,
+ 66492, 67769, 66484, 66493, 66528, 133404, 198942, 133409, 66523, 133411,
+ 198949, 264488, 133420, 66144, 133422, 198960, 66143, 67891, 66506,
+ 66513, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 133428, 133430, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 133432,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 133434, 133436,
+ 133438, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 133440, -1, -1, -1, -1, 133442, -1, -1, 133444,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 133446, -1, 133448, -1, -1, -1, -1, -1, 133450,
+ 198988, -1, 133455, 198993, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 133460, -1, -1, 133462, -1, -1, 133464, -1,
+ 133466, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 133468, -1, 133470, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 133472, 133474, 133476, 133478, 133480, -1, -1,
+ 133482, 133484, -1, -1, 133486, 133488, -1, -1, -1, -1, -1, -1, 133490,
+ 133492, -1, -1, 133494, 133496, -1, -1, 133498, 133500, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 133502, 133504,
+ 133506, 133508, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 133510, 133512, 133514, 133516, -1, -1, -1, -1, -1, -1,
+ 133518, 133520, 133522, 133524, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 67990, 67991, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 65549, 65542, 65543, 67749, 67750,
+ 67751, 67752, 67753, 67754, 133528, 133530, 133532, 133534, 133536,
+ 133538, 133540, 133542, 133544, 133546, 133548, 199086, 199089, 199092,
+ 199095, 199098, 199101, 199104, 199107, 199110, 264649, 264653, 264657,
+ 264661, 264665, 264669, 264673, 264677, 264681, 264685, 264689, 133621,
+ 133623, 133625, 133627, 133629, 133631, 133633, 133635, 133637, 199175,
+ 199178, 199181, 199184, 199187, 199190, 199193, 199196, 199199, 199202,
+ 199205, 199208, 199211, 199214, 199217, 199220, 199223, 199226, 199229,
+ 199232, 199235, 199238, 199241, 199244, 199247, 199250, 199253, 199256,
+ 199259, 199262, 199265, 199268, 199271, 199274, 199277, 199280, 199283,
+ 66481, 66483, 67769, 66484, 66485, 67794, 66487, 66488, 66489, 66490,
+ 66491, 66492, 66493, 66494, 66495, 66497, 67784, 66498, 68214, 66499,
+ 66500, 67850, 66501, 67862, 68215, 67792, 65539, 66505, 67891, 66506,
+ 66507, 68216, 66511, 66121, 66528, 66123, 66512, 66143, 66513, 67760,
+ 65550, 66518, 68217, 66124, 65892, 66519, 66520, 66523, 66128, 66144,
+ 66129, 68218, 67748, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 264827, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 199295, 133762, 199300,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 133767, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 68233, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 68234, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 68235, 68236, 68237, 68238, 68239, 68240, 68241,
+ 68242, 68243, 68244, 68245, 68246, 68247, 68248, 68249, 68250, 68251,
+ 68252, 68253, 68254, 68255, 68256, 68257, 68258, 68259, 68260, 68261,
+ 68262, 68263, 68264, 68265, 68266, 68267, 68268, 68269, 68270, 68271,
+ 68272, 68273, 68274, 68275, 68276, 68277, 68278, 68279, 68280, 68281,
+ 68282, 68283, 68284, 68285, 68286, 68287, 68288, 68289, 68290, 68291,
+ 68292, 68293, 68294, 68295, 68296, 68297, 68298, 68299, 68300, 68301,
+ 68302, 68303, 68304, 68305, 68306, 68307, 68308, 68309, 68310, 68311,
+ 68312, 68313, 68314, 68315, 68316, 68317, 68318, 68319, 68320, 68321,
+ 68322, 68323, 68324, 68325, 68326, 68327, 68328, 68329, 68330, 68331,
+ 68332, 68333, 68334, 68335, 68336, 68337, 68338, 68339, 68340, 68341,
+ 68342, 68343, 68344, 68345, 68346, 68347, 68348, 68349, 68350, 68351,
+ 68352, 68353, 68354, 68355, 68356, 68357, 68358, 68359, 68360, 68361,
+ 68362, 68363, 68364, 68365, 68366, 68367, 68368, 68369, 68370, 68371,
+ 68372, 68373, 68374, 68375, 68376, 68377, 68378, 68379, 68380, 68381,
+ 68382, 68383, 68384, 68385, 68386, 68387, 68388, 68389, 68390, 68391,
+ 68392, 68393, 68394, 68395, 68396, 68397, 68398, 68399, 68400, 68401,
+ 68402, 68403, 68404, 68405, 68406, 68407, 68408, 68409, 68410, 68411,
+ 68412, 68413, 68414, 68415, 68416, 68417, 68418, 68419, 68420, 68421,
+ 68422, 68423, 68424, 68425, 68426, 68427, 68428, 68429, 68430, 68431,
+ 68432, 68433, 68434, 68435, 68436, 68437, 68438, 68439, 68440, 68441,
+ 68442, 68443, 68444, 68445, 68446, 68447, 68448, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 65536, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 68179, -1, 67988, 68180, 68181,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 133718, -1, 133720, -1, 133722, -1, 133724, -1, 133726, -1, 133728,
- -1, 133730, -1, 133732, -1, 133734, -1, 133736, -1, 133738, -1, 133740,
- -1, -1, 133742, -1, 133744, -1, 133746, -1, -1, -1, -1, -1, -1, 133748,
- 133750, -1, 133752, 133754, -1, 133756, 133758, -1, 133760, 133762,
- -1, 133764, 133766, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 133768, -1, -1, -1, -1, -1,
- -1, 133770, 133772, -1, 133774, 133776, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 133778, -1, 133780, -1, 133782, -1, 133784, -1,
- 133786, -1, 133788, -1, 133790, -1, 133792, -1, 133794, -1, 133796,
- -1, 133798, -1, 133800, -1, -1, 133802, -1, 133804, -1, 133806, -1,
- -1, -1, -1, -1, -1, 133808, 133810, -1, 133812, 133814, -1, 133816,
- 133818, -1, 133820, 133822, -1, 133824, 133826, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 133828, -1, -1, 133830, 133832, 133834, 133836, -1, -1, -1, 133838,
- 133840, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 68306, 68307, 68308, 68309, 68310, 68311, 68312, 68313, 68314,
- 68315, 68316, 68317, 68318, 68319, 68320, 68321, 68322, 68323, 68324,
- 68325, 68326, 68327, 68328, 68329, 68330, 68331, 68332, 68333, 68334,
- 68335, 68336, 68337, 68338, 68339, 68340, 68341, 68342, 68343, 68344,
- 68345, 68346, 68347, 68348, 68349, 68350, 68351, 68352, 68353, 68354,
- 68355, 68356, 68357, 68358, 68359, 68360, 68361, 68362, 68363, 68364,
- 68365, 68366, 68367, 68368, 68369, 68370, 68371, 68372, 68373, 68374,
- 68375, 68376, 68377, 68378, 68379, 68380, 68381, 68382, 68383, 68384,
- 68385, 68386, 68387, 68388, 68389, 68390, 68391, 68392, 68393, 68394,
- 68395, 68396, 68397, 68398, 68399, -1, -1, -1, 67965, 67971, 68400,
- 68401, 68402, 68403, 68404, 68405, 67969, 68406, 68407, 68408, 68409,
- 67973, 199482, 199485, 199488, 199491, 199494, 199497, 199500, 199503,
- 199506, 199509, 199512, 199515, 199518, 199521, 265060, 265064, 265068,
- 265072, 265076, 265080, 265084, 265088, 265092, 265096, 265100, 265104,
- 265108, 265112, 265116, 461728, 396199, -1, 199597, 199600, 199603,
- 199606, 199609, 199612, 199615, 199618, 199621, 199624, 199627, 199630,
- 199633, 199636, 199639, 199642, 199645, 199648, 199651, 199654, 199657,
- 199660, 199663, 199666, 199669, 199672, 199675, 199678, 199681, 199684,
- 199687, 199690, 199693, 199696, 199699, 199702, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 199705, 134172, 134174, 134176, 134178,
- 134180, 134182, 134184, 134186, 134188, 134190, 134192, 134194, 134196,
- 134198, 134200, 68306, 68309, 68312, 68314, 68322, 68323, 68326, 68328,
- 68329, 68331, 68332, 68333, 68334, 68335, 134202, 134204, 134206, 134208,
- 134210, 134212, 134214, 134216, 134218, 134220, 134222, 134224, 134226,
- 134228, 330838, 265307, -1, -1, 67965, 67971, 68400, 68401, 68703,
- 68704, 68705, 67976, 68706, 67988, 68038, 68050, 68049, 68039, 68131,
- 67996, 68036, 68707, 68708, 68709, 68710, 68711, 68712, 68713, 68714,
- 68715, 68716, 68002, 68717, 68718, 68719, 68720, 68721, 68722, 68723,
- 68724, 68402, 68403, 68404, 68725, 68726, 68727, 68728, 68729, 68730,
- 68731, 68732, 68733, 68734, 134271, 134273, 134275, 134277, 134279,
- 134281, 134283, 134285, 134287, 134289, 134291, 134293, 134295, 134297,
- 134299, 134301, 134303, 134305, 134307, 134309, 134311, 134313, 134315,
- 134317, 199855, 199858, 199861, 134328, 199866, 134333, 199871, 68802,
- 68803, 68804, 68805, 68806, 68807, 68808, 68809, 68810, 68811, 68812,
- 68813, 68814, 68815, 68816, 68817, 68818, 68819, 68820, 68821, 68822,
- 68823, 68824, 68825, 68826, 68827, 68828, 68829, 68830, 68831, 68832,
- 68833, 68834, 68835, 68836, 68837, 68838, 68839, 68840, 68841, 68842,
- 68843, 68844, 68845, 68846, 68847, 68848, -1, 265457, 265461, 265465,
- 199933, 265472, 199940, 199943, 331018, 265487, 199955, 199958, 199961,
- 265500, 265504, 199972, 199975, 134442, 199980, 265519, 265523, 134455,
- 331065, 396606, 331076, 200009, 331084, 331089, 265558, 200026, 200029,
- 200032, 265571, 331111, 265580, 200048, 200051, 200054, 134521, 134523,
- 134525, 134527, 200065, 200068, 331143, 200076, 265615, 331155, 200088,
- 134555, 134557, 331167, 265636, 331176, 200109, 331184, 134581, 200119,
- 200122, 200125, 200128, 200131, 265670, 200138, 134605, 200143, 200146,
- 200149, 265688, 200156, 200159, 200162, 331237, 265706, 134638, 331248,
- 134645, 265719, 265723, 200191, 200194, 200197, 265736, 134668, 200206,
- 265745, 134677, 331287, 200220, 134687, 134689, 134691, 134693, 134695,
- 134697, 134699, 134701, 134703, 134705, 200243, 200246, 200249, 200252,
- 200255, 200258, 200261, 200264, 200267, 200270, 200273, 200276, 200279,
- 200282, 200285, 200288, 134755, 134757, 200295, 134762, 134764, 134766,
- 200304, 200307, 134774, 134776, 134778, 134780, 134782, 265856, 134788,
- 134790, 134792, 134794, 134796, 134798, 134800, 134802, 200340, 265879,
- 134811, 134813, 134815, 134817, 134819, 134821, 134823, 200361, 200364,
- 200367, 200370, 134837, 134839, 134841, 134843, 134845, 134847, 134849,
- 134851, 134853, 134855, 200393, 200396, 134863, 200401, 200404, 200407,
- 134874, 200412, 200415, 265954, 134886, 200424, 200427, 200430, 200433,
- 331508, 397049, 134911, 134913, 134915, 134917, 134919, 134921, 134923,
- 134925, 134927, 134929, 134931, 134933, 134935, 134937, 134939, 134941,
- 134943, 134945, 266019, 134951, 134953, 134955, 266029, 200497, 134964,
- 134966, 134968, 134970, 134972, 134974, 134976, 134978, 134980, 134982,
- 200520, 134987, 134989, 200527, 200530, 134997, 266071, 200539, 135006,
- 135008, 135010, 135012, 200550, 200553, 135020, 135022, 135024, 135026,
- 135028, 135030, 135032, 135034, 135036, 200574, 200577, 200580, 200583,
- 200586, 200589, 200592, 200595, 200598, 200601, 200604, 200607, 200610,
- 200613, 200616, 200619, 200622, 200625, 200628, 200631, 200634, 200637,
- 200640, 69571, 69572, 68123, 69573, 69574, 69575, 69576, 68177, 68177,
- 69577, 68131, 69578, 69579, 69580, 69581, 69582, 69583, 69584, 69585,
- 69586, 69587, 69588, 69589, 69590, 69591, 69592, 69593, 69594, 69595,
- 69596, 69597, 69598, 69599, 69600, 69601, 69602, 69603, 69604, 69605,
- 69606, 69607, 69608, 69609, 69610, 69611, 69612, 69613, 69614, 69615,
- 69616, 69617, 69618, 68089, 69619, 69620, 69621, 69622, 69623, 69624,
- 69625, 69626, 69627, 69628, 69629, 68162, 69630, 69631, 69632, 69633,
- 69634, 69635, 69636, 69637, 69638, 69639, 69640, 69641, 69642, 69643,
- 69644, 69645, 69646, 69647, 69648, 69649, 69650, 69651, 69652, 69653,
- 69654, 69655, 69656, 69587, 69657, 69658, 69659, 69660, 69661, 69662,
- 69663, 69664, 69665, 69666, 69667, 69668, 69669, 69670, 69671, 69672,
- 69673, 69674, 69675, 69676, 68125, 69677, 69678, 69679, 69680, 69681,
- 69682, 69683, 69684, 69685, 69686, 69687, 69688, 69689, 69690, 69691,
- 68002, 69692, 69693, 69694, 69695, 69696, 69697, 69698, 69699, 67983,
- 69700, 69701, 69702, 69703, 69704, 69705, 69706, 69707, 69708, 69709,
- 69710, 69711, 69712, 69713, 69714, 69715, 69716, 69717, 69718, 69719,
- 69720, 69721, 69675, 69722, 69723, 69724, 69725, 69726, 69727, 69728,
- 69729, 69659, 69730, 69731, 69732, 69733, 69734, 69735, 69736, 69737,
- 69738, 69739, 69740, 69741, 69742, 69743, 69744, 69745, 69746, 69747,
- 69748, 69749, 69587, 69750, 69751, 69752, 69753, 68176, 69754, 69755,
- 69756, 69757, 69758, 69759, 69760, 69761, 69762, 69763, 69764, 69765,
- 68704, 69766, 69767, 69768, 69769, 69770, 69771, 69772, 69773, 69774,
- 69661, 69775, 69776, 69777, 69778, 69779, 69780, 69781, 69782, 69783,
- 69784, 69785, 69786, 69787, 68130, 69788, 69789, 69790, 69791, 69792,
- 69793, 69794, 69795, 69796, 69797, 69798, 69799, 69800, 68081, 69801,
- 69802, 69803, 69804, 69805, 69806, 69807, 69808, 69809, 69810, 69811,
- 69812, 69813, 69814, 69815, 69816, 68108, 69817, 68111, 69818, 69819,
- 69820, -1, -1, 69821, -1, 69822, -1, -1, 69823, 69824, 69825, 69826,
- 69827, 69828, 69829, 69830, 69831, 68088, -1, 69832, -1, 69833, -1,
- -1, 69834, 69835, -1, -1, -1, 69836, 69837, 69838, 69839, -1, -1, 69840,
- 69841, 69842, 69843, 69844, 69845, 69846, 69847, 69848, 69849, 69850,
- 69851, 68009, 69852, 69853, 69854, 69855, 69856, 69857, 69858, 69859,
- 69860, 69861, 69862, 69863, 69864, 69865, 69866, 68709, 69867, 69868,
- 69869, 69870, 68713, 69871, 69872, 69873, 69874, 69875, 69711, 69876,
- 69877, 69878, 69879, 69880, 69881, 69881, 69882, 69883, 69884, 69885,
- 69886, 69887, 69888, 69889, 69834, 69890, 69891, 69892, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 135429, 135431, 135433, 200971, 200974, 135441, 135443, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 135445, 135447, 135449, 135451,
- 135453, -1, -1, -1, -1, -1, 135455, -1, 135457, 69923, 67525, 67528,
- 69924, 69925, 69926, 69927, 69928, 69929, 67484, 135466, 135468, 135470,
- 135472, 135474, 135476, 135478, 135480, 135482, 135484, 135486, 135488,
- 135490, -1, 135492, 135494, 135496, 135498, 135500, -1, 135502, -1,
- 135504, 135506, -1, 135508, 135510, -1, 135512, 135514, 135516, 135518,
- 135520, 135522, 135524, 135526, 135528, 135530, 69996, 69996, 69997,
- 69997, 69997, 69997, 69998, 69998, 69998, 69998, 69999, 69999, 69999,
- 69999, 70000, 70000, 70000, 70000, 70001, 70001, 70001, 70001, 70002,
- 70002, 70002, 70002, 70003, 70003, 70003, 70003, 70004, 70004, 70004,
- 70004, 70005, 70005, 70005, 70005, 70006, 70006, 70006, 70006, 70007,
- 70007, 70007, 70007, 70008, 70008, 70008, 70008, 70009, 70009, 70010,
- 70010, 70011, 70011, 70012, 70012, 70013, 70013, 70014, 70014, 70015,
- 70015, 70015, 70015, 70016, 70016, 70016, 70016, 70017, 70017, 70017,
- 70017, 70018, 70018, 70018, 70018, 70019, 70019, 70020, 70020, 70020,
- 70020, 70021, 70021, 70022, 70022, 70022, 70022, 70023, 70023, 70023,
- 70023, 70024, 70024, 70025, 70025, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 70026, 70026, 70026, 70026, 70027,
- 70027, 70028, 70028, 70029, 70029, 70030, 70031, 70031, 70032, 70032,
- 70033, 70033, 70034, 70034, 70034, 70034, 70035, 70035, 135572, 135572,
- 135574, 135574, 135576, 135576, 135578, 135578, 135580, 135580, 135582,
- 135582, 135584, 135584, 135584, 135586, 135586, 135586, 70052, 70052,
- 70052, 70052, 135589, 135591, 135593, 135586, 135595, 135597, 135599,
- 135601, 135603, 135605, 135607, 135609, 135611, 135613, 135615, 135617,
- 135619, 135621, 135623, 135625, 135627, 135629, 135631, 135633, 135635,
- 135637, 135639, 135641, 135643, 135645, 135647, 135649, 135651, 135653,
- 135655, 135657, 135659, 135661, 135663, 135665, 135667, 135669, 135671,
- 135673, 135675, 135677, 135679, 135681, 135683, 135685, 135687, 135689,
- 135691, 135693, 135695, 135697, 135699, 135701, 135703, 135705, 135707,
- 135709, 135711, 135713, 135715, 135717, 135719, 135721, 135723, 135725,
- 135727, 135729, 135731, 135733, 135735, 135737, 135739, 135741, 135743,
- 135745, 135747, 135749, 135751, 135753, 135755, 135757, 135759, 135761,
- 135763, 135765, 135767, 135769, 135771, 135773, 201311, 201314, 201317,
- 201320, 201323, 201326, 135793, 135795, 135593, 135797, 135586, 135595,
- 135799, 135801, 135603, 135803, 135605, 135607, 135805, 135807, 135615,
- 135809, 135617, 135619, 135811, 135813, 135623, 135815, 135625, 135627,
- 135685, 135687, 135693, 135695, 135697, 135705, 135707, 135709, 135711,
- 135719, 135721, 135723, 135817, 135731, 135819, 135821, 135743, 135823,
- 135745, 135747, 135773, 135825, 135827, 135763, 135829, 135765, 135767,
- 135589, 135591, 135831, 135593, 135833, 135597, 135599, 135601, 135603,
- 135835, 135609, 135611, 135613, 135615, 135837, 135623, 135629, 135631,
- 135633, 135635, 135637, 135641, 135643, 135645, 135647, 135649, 135651,
- 135839, 135653, 135655, 135657, 135659, 135661, 135663, 135667, 135669,
- 135671, 135673, 135675, 135677, 135679, 135681, 135683, 135689, 135691,
- 135699, 135701, 135703, 135705, 135707, 135713, 135715, 135717, 135719,
- 135841, 135725, 135727, 135729, 135731, 135737, 135739, 135741, 135743,
- 135843, 135749, 135751, 135845, 135757, 135759, 135761, 135763, 135847,
- 135593, 135833, 135603, 135835, 135615, 135837, 135623, 135849, 135649,
- 135851, 135853, 135855, 135705, 135707, 135719, 135743, 135843, 135763,
- 135847, 201393, 201396, 201399, 135866, 135868, 135870, 135872, 135874,
- 135876, 135878, 135880, 135882, 135884, 135886, 135888, 135890, 135892,
- 135894, 135896, 135898, 135900, 135902, 135904, 135906, 135908, 135910,
- 135853, 135912, 135914, 135916, 135918, 135866, 135868, 135870, 135872,
- 135874, 135876, 135878, 135880, 135882, 135884, 135886, 135888, 135890,
- 135892, 135894, 135896, 135898, 135900, 135902, 135904, 135906, 135908,
- 135910, 135853, 135912, 135914, 135916, 135918, 135906, 135908, 135910,
- 135853, 135851, 135855, 135665, 135643, 135645, 135647, 135906, 135908,
- 135910, 135665, 135667, 135920, 135920, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 201458, 201461, 201461,
- 201464, 201467, 201470, 201473, 201476, 201479, 201479, 201482, 201485,
- 201488, 201491, 201494, 201497, 201497, 201500, 201503, 201503, 201506,
- 201506, 201509, 201512, 201512, 201515, 201518, 201518, 201521, 201521,
- 201524, 201527, 201527, 201530, 201530, 201533, 201536, 201539, 201542,
- 201542, 201545, 201548, 201551, 201554, 201557, 201557, 201560, 201563,
- 201566, 201569, 201572, 201575, 201575, 201578, 201578, 201581, 201581,
- 201584, 201587, 201590, 201593, 201596, 201599, 201602, -1, -1, 201605,
- 201608, 201611, 201614, 201617, 201620, 201620, 201623, 201626, 201629,
- 201632, 201632, 201635, 201638, 201641, 201644, 201647, 201650, 201653,
- 201656, 201659, 201662, 201665, 201668, 201671, 201674, 201677, 201680,
- 201683, 201686, 201689, 201692, 201695, 201698, 201560, 201566, 201701,
- 201704, 201707, 201710, 201713, 201716, 201713, 201707, 201719, 201722,
- 201725, 201728, 201731, 201716, 201539, 201509, 201734, 201737, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 201740, 201743, 267282, 267286, 267290, 267294,
- 267298, 267302, 267306, 201774, 1184817, 529475, 267339, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 70735,
- 70736, 70737, 70738, 70738, 67487, 67488, 70739, 70740, 70741, 70742,
- 70743, 70744, 70745, 70746, 67720, 67721, 70747, 70748, 70749, 70750,
- -1, -1, 70751, 70752, 70753, 70753, 70753, 70753, 70738, 70738, 70738,
- 70754, 70755, 67447, -1, 66132, 70756, 70757, 70758, 70736, 67487,
- 67488, 70739, 70740, 70741, 70742, 70759, 70760, 70761, 67484, 70762,
- 70763, 70764, 67486, -1, 70765, 70766, 70767, 70768, -1, -1, -1, -1,
- 136305, 136307, 136309, -1, 136311, -1, 136313, 136315, 136317, 136319,
- 136321, 136323, 136325, 136327, 136329, 136331, 70797, 70798, 70798,
- 70799, 70799, 70800, 70800, 70801, 70801, 70802, 70802, 70802, 70802,
- 70803, 70803, 70804, 70804, 70804, 70804, 70805, 70805, 70806, 70806,
- 70806, 70806, 70807, 70807, 70807, 70807, 70808, 70808, 70808, 70808,
- 70809, 70809, 70809, 70809, 70810, 70810, 70810, 70810, 70811, 70811,
- 70812, 70812, 70813, 70813, 70814, 70814, 70815, 70815, 70815, 70815,
- 70816, 70816, 70816, 70816, 70817, 70817, 70817, 70817, 70818, 70818,
- 70818, 70818, 70819, 70819, 70819, 70819, 70820, 70820, 70820, 70820,
- 70821, 70821, 70821, 70821, 70822, 70822, 70822, 70822, 70823, 70823,
- 70823, 70823, 70824, 70824, 70824, 70824, 70825, 70825, 70825, 70825,
- 70826, 70826, 70826, 70826, 70827, 70827, 70827, 70827, 70828, 70828,
- 70828, 70828, 70829, 70829, 70829, 70829, 70830, 70830, 70035, 70035,
- 70831, 70831, 70831, 70831, 136368, 136368, 136370, 136370, 136372,
- 136372, 136374, 136374, -1, -1, -1, -1, 70758, 70840, 70759, 70766,
- 70767, 70760, 70841, 67487, 67488, 70761, 67484, 70754, 70762, 67447,
- 70842, 67477, 65549, 65542, 65543, 67478, 67479, 67480, 67481, 67482,
- 67483, 70756, 66132, 70763, 67486, 70764, 70757, 70768, 66458, 66460,
- 67498, 66461, 66462, 67524, 66464, 66465, 66466, 66467, 66468, 66469,
- 66470, 66471, 66472, 66474, 67513, 66475, 67944, 66476, 66477, 67580,
- 66478, 67592, 67945, 67521, 70751, 70765, 70752, 70843, 70738, 67420,
- 65539, 66482, 67621, 66483, 66484, 67946, 66488, 66099, 66505, 66101,
- 66489, 66121, 66490, 67489, 65550, 66495, 67947, 66102, 65892, 66496,
- 66497, 66500, 66106, 66122, 66107, 67948, 70739, 70844, 70740, 70845,
- 70846, 70847, 70848, 70747, 70748, 70755, 70849, 68848, 70850, 70851,
- 70852, 70853, 70854, 70855, 70856, 70857, 70858, 70859, 68802, 68803,
- 68804, 68805, 68806, 68807, 68808, 68809, 68810, 68811, 68812, 68813,
- 68814, 68815, 68816, 68817, 68818, 68819, 68820, 68821, 68822, 68823,
- 68824, 68825, 68826, 68827, 68828, 68829, 68830, 68831, 68832, 68833,
- 68834, 68835, 68836, 68837, 68838, 68839, 68840, 68841, 68842, 68843,
- 68844, 68845, 70860, 70861, 70862, 70863, 70864, 70865, 70866, 70867,
- 70868, 70869, 70870, 70871, 70872, 70873, 70874, 70875, 70876, 70877,
- 70878, 70879, 70880, 70881, 70882, 70883, 70884, 70885, 70886, 70887,
- 70888, 70889, 70890, 70891, 70892, 70893, -1, -1, -1, 70894, 70895,
- 70896, 70897, 70898, 70899, -1, -1, 70900, 70901, 70902, 70903, 70904,
- 70905, -1, -1, 70906, 70907, 70908, 70909, 70910, 70911, -1, -1, 70912,
- 70913, 70914, -1, -1, -1, 70915, 70916, 70917, 70918, 70919, 70920,
- 70921, -1, 70922, 70923, 70924, 70925, 70926, 70927, 70928, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 68449, -1, 68258, 68450, 68451,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 133988, -1, 133990, -1, 133992, -1, 133994, -1, 133996, -1, 133998,
+ -1, 134000, -1, 134002, -1, 134004, -1, 134006, -1, 134008, -1, 134010,
+ -1, -1, 134012, -1, 134014, -1, 134016, -1, -1, -1, -1, -1, -1, 134018,
+ 134020, -1, 134022, 134024, -1, 134026, 134028, -1, 134030, 134032,
+ -1, 134034, 134036, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 134038, -1, -1, -1, -1, -1,
+ -1, 134040, 134042, -1, 134044, 134046, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 134048, -1, 134050, -1, 134052, -1, 134054, -1,
+ 134056, -1, 134058, -1, 134060, -1, 134062, -1, 134064, -1, 134066,
+ -1, 134068, -1, 134070, -1, -1, 134072, -1, 134074, -1, 134076, -1,
+ -1, -1, -1, -1, -1, 134078, 134080, -1, 134082, 134084, -1, 134086,
+ 134088, -1, 134090, 134092, -1, 134094, 134096, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 134098, -1, -1, 134100, 134102, 134104, 134106, -1, -1, -1, 134108,
+ 134110, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 68576, 68577, 68578, 68579, 68580, 68581, 68582, 68583, 68584,
+ 68585, 68586, 68587, 68588, 68589, 68590, 68591, 68592, 68593, 68594,
+ 68595, 68596, 68597, 68598, 68599, 68600, 68601, 68602, 68603, 68604,
+ 68605, 68606, 68607, 68608, 68609, 68610, 68611, 68612, 68613, 68614,
+ 68615, 68616, 68617, 68618, 68619, 68620, 68621, 68622, 68623, 68624,
+ 68625, 68626, 68627, 68628, 68629, 68630, 68631, 68632, 68633, 68634,
+ 68635, 68636, 68637, 68638, 68639, 68640, 68641, 68642, 68643, 68644,
+ 68645, 68646, 68647, 68648, 68649, 68650, 68651, 68652, 68653, 68654,
+ 68655, 68656, 68657, 68658, 68659, 68660, 68661, 68662, 68663, 68664,
+ 68665, 68666, 68667, 68668, 68669, -1, -1, -1, 68235, 68241, 68670,
+ 68671, 68672, 68673, 68674, 68675, 68239, 68676, 68677, 68678, 68679,
+ 68243, 199752, 199755, 199758, 199761, 199764, 199767, 199770, 199773,
+ 199776, 199779, 199782, 199785, 199788, 199791, 265330, 265334, 265338,
+ 265342, 265346, 265350, 265354, 265358, 265362, 265366, 265370, 265374,
+ 265378, 265382, 265386, 461998, 396469, -1, 199867, 199870, 199873,
+ 199876, 199879, 199882, 199885, 199888, 199891, 199894, 199897, 199900,
+ 199903, 199906, 199909, 199912, 199915, 199918, 199921, 199924, 199927,
+ 199930, 199933, 199936, 199939, 199942, 199945, 199948, 199951, 199954,
+ 199957, 199960, 199963, 199966, 199969, 199972, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 199975, 134442, 134444, 134446, 134448,
+ 134450, 134452, 134454, 134456, 134458, 134460, 134462, 134464, 134466,
+ 134468, 134470, 68576, 68579, 68582, 68584, 68592, 68593, 68596, 68598,
+ 68599, 68601, 68602, 68603, 68604, 68605, 134472, 134474, 134476, 134478,
+ 134480, 134482, 134484, 134486, 134488, 134490, 134492, 134494, 134496,
+ 134498, 331108, 265577, -1, -1, 68235, 68241, 68670, 68671, 68973,
+ 68974, 68975, 68246, 68976, 68258, 68308, 68320, 68319, 68309, 68401,
+ 68266, 68306, 68977, 68978, 68979, 68980, 68981, 68982, 68983, 68984,
+ 68985, 68986, 68272, 68987, 68988, 68989, 68990, 68991, 68992, 68993,
+ 68994, 68672, 68673, 68674, 68995, 68996, 68997, 68998, 68999, 69000,
+ 69001, 69002, 69003, 69004, 134541, 134543, 134545, 134547, 134549,
+ 134551, 134553, 134555, 134557, 134559, 134561, 134563, 134565, 134567,
+ 134569, 134571, 134573, 134575, 134577, 134579, 134581, 134583, 134585,
+ 134587, 200125, 200128, 200131, 134598, 200136, 134603, 200141, 69072,
+ 69073, 69074, 69075, 69076, 69077, 69078, 69079, 69080, 69081, 69082,
+ 69083, 69084, 69085, 69086, 69087, 69088, 69089, 69090, 69091, 69092,
+ 69093, 69094, 69095, 69096, 69097, 69098, 69099, 69100, 69101, 69102,
+ 69103, 69104, 69105, 69106, 69107, 69108, 69109, 69110, 69111, 69112,
+ 69113, 69114, 69115, 69116, 69117, 69118, -1, 265727, 265731, 265735,
+ 200203, 265742, 200210, 200213, 331288, 265757, 200225, 200228, 200231,
+ 265770, 265774, 265778, 265782, 200250, 265789, 265793, 331333, 134730,
+ 331340, 396881, 331351, 265820, 396896, 331366, 265835, 200303, 200306,
+ 200309, 265848, 331388, 265857, 200325, 200328, 265867, 200335, 200338,
+ 134805, 134807, 200345, 200348, 396959, 265893, 331433, 396974, 265908,
+ 200376, 200379, 331454, 265923, 396999, 200397, 331472, 200405, 265944,
+ 200412, 265951, 265955, 265959, 331499, 265968, 134900, 265974, 200442,
+ 200445, 265984, 200452, 200455, 200458, 331533, 266002, 134934, 331544,
+ 134941, 266015, 266019, 200487, 200490, 200493, 266032, 134964, 200502,
+ 266041, 134973, 331583, 200516, 134983, 134985, 134987, 134989, 134991,
+ 134993, 134995, 134997, 134999, 135001, 200539, 200542, 200545, 200548,
+ 200551, 200554, 200557, 200560, 200563, 200566, 200569, 200572, 200575,
+ 200578, 200581, 200584, 135051, 135053, 200591, 135058, 135060, 135062,
+ 200600, 200603, 135070, 135072, 135074, 135076, 135078, 266152, 135084,
+ 135086, 135088, 135090, 135092, 135094, 135096, 135098, 200636, 266175,
+ 135107, 135109, 135111, 135113, 135115, 135117, 135119, 200657, 200660,
+ 200663, 200666, 135133, 135135, 135137, 135139, 135141, 135143, 135145,
+ 135147, 135149, 135151, 200689, 200692, 135159, 200697, 200700, 200703,
+ 135170, 200708, 200711, 266250, 135182, 200720, 200723, 200726, 200729,
+ 331804, 397345, 135207, 135209, 135211, 135213, 135215, 135217, 135219,
+ 135221, 135223, 135225, 135227, 135229, 135231, 135233, 135235, 135237,
+ 135239, 135241, 266315, 135247, 135249, 135251, 266325, 200793, 135260,
+ 135262, 135264, 135266, 135268, 135270, 135272, 135274, 135276, 135278,
+ 200816, 135283, 135285, 200823, 200826, 135293, 266367, 200835, 135302,
+ 135304, 135306, 135308, 200846, 200849, 135316, 135318, 135320, 135322,
+ 135324, 135326, 135328, 135330, 135332, 200870, 200873, 200876, 200879,
+ 200882, 200885, 200888, 200891, 200894, 200897, 200900, 200903, 200906,
+ 200909, 200912, 200915, 200918, 200921, 200924, 200927, 200930, 200933,
+ 200936, 69867, 69868, 68393, 69869, 69870, 69871, 69872, 68447, 68447,
+ 69873, 68401, 69874, 69875, 69876, 69877, 69878, 69879, 69880, 69881,
+ 69882, 69883, 69884, 69885, 69886, 69887, 69888, 69889, 69890, 69891,
+ 69892, 69893, 69894, 69895, 69896, 69897, 69898, 69899, 69900, 69901,
+ 69902, 69903, 69904, 69905, 69906, 69907, 69908, 69909, 69910, 69911,
+ 69912, 69913, 69914, 68359, 69915, 69916, 69917, 69918, 69919, 69920,
+ 69921, 69922, 69923, 69924, 69925, 68432, 69926, 69927, 69928, 69929,
+ 69930, 69931, 69932, 69933, 69934, 69935, 69936, 69937, 69938, 69939,
+ 69940, 69941, 69942, 69943, 69944, 69945, 69946, 69947, 69948, 69949,
+ 69950, 69951, 69952, 69883, 69953, 69954, 69955, 69956, 69957, 69958,
+ 69959, 69960, 69961, 69962, 69963, 69964, 69965, 69966, 69967, 69968,
+ 69969, 69970, 69971, 69972, 68395, 69973, 69974, 69975, 69976, 69977,
+ 69978, 69979, 69980, 69981, 69982, 69983, 69984, 69985, 69986, 69987,
+ 68272, 69988, 69989, 69990, 69991, 69992, 69993, 69994, 69995, 68253,
+ 69996, 69997, 69998, 69999, 70000, 70001, 70002, 70003, 70004, 70005,
+ 70006, 70007, 70008, 70009, 70010, 70011, 70012, 70013, 70014, 70015,
+ 70016, 70017, 69971, 70018, 70019, 70020, 70021, 70022, 70023, 70024,
+ 70025, 69955, 70026, 70027, 70028, 70029, 70030, 70031, 70032, 70033,
+ 70034, 70035, 70036, 70037, 70038, 70039, 70040, 70041, 70042, 70043,
+ 70044, 70045, 69883, 70046, 70047, 70048, 70049, 68446, 70050, 70051,
+ 70052, 70053, 70054, 70055, 70056, 70057, 70058, 70059, 70060, 70061,
+ 68974, 70062, 70063, 70064, 70065, 70066, 70067, 70068, 70069, 70070,
+ 69957, 70071, 70072, 70073, 70074, 70075, 70076, 70077, 70078, 70079,
+ 70080, 70081, 70082, 70083, 68400, 70084, 70085, 70086, 70087, 70088,
+ 70089, 70090, 70091, 70092, 70093, 70094, 70095, 70096, 68351, 70097,
+ 70098, 70099, 70100, 70101, 70102, 70103, 70104, 70105, 70106, 70107,
+ 70108, 70109, 70110, 70111, 70112, 68378, 70113, 68381, 70114, 70115,
+ 70116, -1, -1, 70117, -1, 70118, -1, -1, 70119, 70120, 70121, 70122,
+ 70123, 70124, 70125, 70126, 70127, 68358, -1, 70128, -1, 70129, -1,
+ -1, 70130, 70131, -1, -1, -1, 70132, 70133, 70134, 70135, -1, -1, 70136,
+ 70137, 70138, 70139, 70140, 70141, 70142, 70143, 70144, 70145, 70146,
+ 70147, 68279, 70148, 70149, 70150, 70151, 70152, 70153, 70154, 70155,
+ 70156, 70157, 70158, 70159, 70160, 70161, 70162, 68979, 70163, 70164,
+ 70165, 70166, 68983, 70167, 70168, 70169, 70170, 70171, 70007, 70172,
+ 70173, 70174, 70175, 70176, 70177, 70177, 70178, 70179, 70180, 70181,
+ 70182, 70183, 70184, 70185, 70130, 70186, 70187, 70188, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 135725, 135727, 135729, 201267, 201270, 135737, 135737, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 135739, 135741, 135743, 135745,
+ 135747, -1, -1, -1, -1, -1, 135749, -1, 135751, 70217, 67795, 67798,
+ 70218, 70219, 70220, 70221, 70222, 70223, 67755, 135760, 135762, 201300,
+ 201303, 135770, 135772, 135774, 135776, 135778, 135780, 135782, 135784,
+ 135786, -1, 135788, 135790, 135792, 135794, 135796, -1, 135798, -1,
+ 135800, 135802, -1, 135804, 135806, -1, 135808, 135810, 135812, 135814,
+ 135816, 135818, 135820, 135822, 135824, 135826, 70292, 70292, 70293,
+ 70293, 70293, 70293, 70294, 70294, 70294, 70294, 70295, 70295, 70295,
+ 70295, 70296, 70296, 70296, 70296, 70297, 70297, 70297, 70297, 70298,
+ 70298, 70298, 70298, 70299, 70299, 70299, 70299, 70300, 70300, 70300,
+ 70300, 70301, 70301, 70301, 70301, 70302, 70302, 70302, 70302, 70303,
+ 70303, 70303, 70303, 70304, 70304, 70304, 70304, 70305, 70305, 70306,
+ 70306, 70307, 70307, 70308, 70308, 70309, 70309, 70310, 70310, 70311,
+ 70311, 70311, 70311, 70312, 70312, 70312, 70312, 70313, 70313, 70313,
+ 70313, 70314, 70314, 70314, 70314, 70315, 70315, 70316, 70316, 70316,
+ 70316, 131872, 131872, 70317, 70317, 70317, 70317, 70318, 70318, 70318,
+ 70318, 70319, 70319, 131876, 131876, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 70320, 70320, 70320, 70320, 70321,
+ 70321, 70322, 70322, 70323, 70323, 131868, 70324, 70324, 70325, 70325,
+ 70326, 70326, 70327, 70327, 70327, 70327, 70328, 70328, 201401, 201401,
+ 201404, 201404, 201407, 201407, 201410, 201410, 201413, 201413, 201416,
+ 201416, 201419, 201419, 201419, 201422, 201422, 201422, 70353, 70353,
+ 70353, 70353, 201426, 201429, 201432, 201422, 201435, 135902, 135904,
+ 135906, 135908, 135910, 135912, 135914, 135916, 135918, 135920, 135922,
+ 135924, 135926, 135928, 135930, 135932, 135934, 135936, 135938, 135940,
+ 135942, 135944, 135946, 135948, 135950, 135952, 135954, 135956, 135958,
+ 135960, 135962, 135964, 135966, 135968, 135970, 135972, 135974, 135976,
+ 135978, 135980, 135982, 135984, 135986, 135988, 135990, 135992, 135994,
+ 135996, 135998, 136000, 136002, 136004, 136006, 136008, 136010, 136012,
+ 136014, 136016, 136018, 136020, 136022, 136024, 136026, 136028, 136030,
+ 136032, 136034, 136036, 136038, 136040, 136042, 136044, 136046, 136048,
+ 136050, 136052, 136054, 136056, 136058, 136060, 136062, 136064, 136066,
+ 136068, 136070, 136072, 136074, 136076, 136078, 201616, 201619, 201622,
+ 201625, 201628, 201631, 201634, 201637, 201432, 201640, 201422, 201435,
+ 136107, 136109, 135908, 136111, 135910, 135912, 136113, 136115, 135920,
+ 136117, 135922, 135924, 136119, 136121, 135928, 136123, 135930, 135932,
+ 135990, 135992, 135998, 136000, 136002, 136010, 136012, 136014, 136016,
+ 136024, 136026, 136028, 136125, 136036, 136127, 136129, 136048, 136131,
+ 136050, 136052, 136078, 136133, 136135, 136068, 136137, 136070, 136072,
+ 201426, 201429, 201675, 201432, 201678, 135902, 135904, 135906, 135908,
+ 136145, 135914, 135916, 135918, 135920, 136147, 135928, 135934, 135936,
+ 135938, 135940, 135942, 135946, 135948, 135950, 135952, 135954, 135956,
+ 136149, 135958, 135960, 135962, 135964, 135966, 135968, 135972, 135974,
+ 135976, 135978, 135980, 135982, 135984, 135986, 135988, 135994, 135996,
+ 136004, 136006, 136008, 136010, 136012, 136018, 136020, 136022, 136024,
+ 136151, 136030, 136032, 136034, 136036, 136042, 136044, 136046, 136048,
+ 136153, 136054, 136056, 136155, 136062, 136064, 136066, 136068, 136157,
+ 201432, 201678, 135908, 136145, 135920, 136147, 135928, 136159, 135954,
+ 136161, 136163, 136165, 136010, 136012, 136024, 136048, 136153, 136068,
+ 136157, 201703, 201706, 201709, 136176, 136178, 136180, 136182, 136184,
+ 136186, 136188, 136190, 136192, 136194, 136196, 136198, 136200, 136202,
+ 136204, 136206, 136208, 136210, 136212, 136214, 136216, 136218, 136220,
+ 136163, 136222, 136224, 136226, 136228, 136176, 136178, 136180, 136182,
+ 136184, 136186, 136188, 136190, 136192, 136194, 136196, 136198, 136200,
+ 136202, 136204, 136206, 136208, 136210, 136212, 136214, 136216, 136218,
+ 136220, 136163, 136222, 136224, 136226, 136228, 136216, 136218, 136220,
+ 136163, 136161, 136165, 135970, 135948, 135950, 135952, 136216, 136218,
+ 136220, 135970, 135972, 136230, 136230, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 201768, 201771, 201771,
+ 201774, 201777, 201780, 201783, 201786, 201789, 201789, 201792, 201795,
+ 201798, 201801, 201804, 201807, 201807, 201810, 201813, 201813, 201816,
+ 201816, 201819, 201822, 201822, 201825, 201828, 201828, 201831, 201831,
+ 201834, 201837, 201837, 201840, 201840, 201843, 201846, 201849, 201852,
+ 201852, 201855, 201858, 201861, 201864, 201867, 201867, 201870, 201873,
+ 201876, 201879, 201882, 201885, 201885, 201888, 201888, 201891, 201891,
+ 201894, 201897, 201900, 201903, 201906, 201909, 201912, -1, -1, 201915,
+ 201918, 201921, 201924, 201927, 201930, 201930, 201933, 201936, 201939,
+ 201942, 201942, 201945, 201948, 201951, 201954, 201957, 201960, 201963,
+ 201966, 201969, 201972, 201975, 201978, 201981, 201984, 201987, 201990,
+ 201993, 201996, 201999, 202002, 202005, 202008, 201870, 201876, 202011,
+ 202014, 202017, 202020, 202023, 202026, 202023, 202017, 202029, 202032,
+ 202035, 202038, 202041, 202026, 201849, 201819, 202044, 202047, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 202050, 202053, 267592, 267596, 267600, 267604,
+ 267608, 267612, 267616, 202084, 1185127, 529785, 267649, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 133255,
+ 71045, 71046, 71047, 71047, 67758, 67759, 71048, 71049, 71050, 71051,
+ 71052, 71053, 71054, 71055, 67990, 67991, 71056, 71057, 71058, 71059,
+ -1, -1, 71060, 71061, 133272, 133272, 133272, 133272, 71047, 71047,
+ 71047, 71062, 71063, 67718, -1, 66154, 71064, 71065, 71066, 71045,
+ 67758, 67759, 71048, 71049, 71050, 71051, 71067, 71068, 71069, 67755,
+ 71070, 71071, 71072, 67757, -1, 71073, 71074, 71075, 71076, -1, -1,
+ -1, -1, 136613, 136615, 136617, -1, 136619, -1, 136621, 136623, 136625,
+ 136627, 136629, 136631, 136633, 136635, 136637, 136639, 71105, 131854,
+ 131854, 131856, 131856, 131858, 131858, 131860, 131860, 131862, 131862,
+ 131862, 131862, 71106, 71106, 71107, 71107, 71107, 71107, 71108, 71108,
+ 71109, 71109, 71109, 71109, 71110, 71110, 71110, 71110, 71111, 71111,
+ 71111, 71111, 71112, 71112, 71112, 71112, 71113, 71113, 71113, 71113,
+ 71114, 71114, 71115, 71115, 71116, 71116, 71117, 71117, 71118, 71118,
+ 71118, 71118, 71119, 71119, 71119, 71119, 71120, 71120, 71120, 71120,
+ 71121, 71121, 71121, 71121, 71122, 71122, 71122, 71122, 71123, 71123,
+ 71123, 71123, 71124, 71124, 71124, 71124, 71125, 71125, 71125, 71125,
+ 71126, 71126, 71126, 71126, 71127, 71127, 71127, 71127, 71128, 71128,
+ 71128, 71128, 71129, 71129, 71129, 71129, 71130, 71130, 71130, 71130,
+ 71131, 71131, 71131, 71131, 71132, 71132, 71132, 71132, 71133, 71133,
+ 70328, 70328, 71134, 71134, 71134, 71134, 136671, 136671, 136673, 136673,
+ 136675, 136675, 136677, 136677, -1, -1, -1, -1, 71066, 71143, 71067,
+ 71074, 71075, 71068, 71144, 67758, 67759, 71069, 67755, 71062, 71070,
+ 67718, 71145, 67748, 65549, 65542, 65543, 67749, 67750, 67751, 67752,
+ 67753, 67754, 71064, 66154, 71071, 67757, 71072, 71065, 71076, 66481,
+ 66483, 67769, 66484, 66485, 67794, 66487, 66488, 66489, 66490, 66491,
+ 66492, 66493, 66494, 66495, 66497, 67784, 66498, 68214, 66499, 66500,
+ 67850, 66501, 67862, 68215, 67792, 71060, 71073, 71061, 71146, 71047,
+ 67693, 65539, 66505, 67891, 66506, 66507, 68216, 66511, 66121, 66528,
+ 66123, 66512, 66143, 66513, 67760, 65550, 66518, 68217, 66124, 65892,
+ 66519, 66520, 66523, 66128, 66144, 66129, 68218, 71048, 71147, 71049,
+ 71148, 71149, 71150, 71151, 71056, 71057, 71063, 71152, 69118, 71153,
+ 71154, 71155, 71156, 71157, 71158, 71159, 71160, 71161, 71162, 69072,
+ 69073, 69074, 69075, 69076, 69077, 69078, 69079, 69080, 69081, 69082,
+ 69083, 69084, 69085, 69086, 69087, 69088, 69089, 69090, 69091, 69092,
+ 69093, 69094, 69095, 69096, 69097, 69098, 69099, 69100, 69101, 69102,
+ 69103, 69104, 69105, 69106, 69107, 69108, 69109, 69110, 69111, 69112,
+ 69113, 69114, 69115, 71163, 71164, 71165, 68627, 68576, 68577, 68578,
+ 68579, 68580, 68581, 68582, 68583, 68584, 68585, 68586, 68587, 68588,
+ 68589, 68590, 68591, 68592, 68593, 68594, 68595, 68596, 68597, 68598,
+ 68599, 68600, 68601, 68602, 68603, 68604, 68605, -1, -1, -1, 68606,
+ 68607, 68608, 68609, 68610, 68611, -1, -1, 68612, 68613, 68614, 68615,
+ 68616, 68617, -1, -1, 68618, 68619, 68620, 68621, 68622, 68623, -1,
+ -1, 68624, 68625, 68626, -1, -1, -1, 71166, 71167, 71168, 131076, 71169,
+ 71170, 71171, -1, 71172, 71173, 71174, 71175, 71176, 71177, 71178,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
};
/*
@@ -893,266 +870,285 @@ static int decompList[] = {
780, 122, 780, 115, 79, 795, 111, 795, 85, 795, 117, 795, 68, 381,
68, 382, 100, 382, 76, 74, 76, 106, 108, 106, 78, 74, 78, 106, 110,
106, 65, 780, 97, 780, 73, 780, 105, 780, 79, 780, 111, 780, 85, 780,
- 117, 780, 220, 772, 252, 772, 220, 769, 252, 769, 220, 780, 252, 780,
- 220, 768, 252, 768, 196, 772, 228, 772, 550, 772, 551, 772, 198, 772,
- 230, 772, 71, 780, 103, 780, 75, 780, 107, 780, 79, 808, 111, 808,
- 490, 772, 491, 772, 439, 780, 658, 780, 106, 780, 68, 90, 68, 122,
- 100, 122, 71, 769, 103, 769, 78, 768, 110, 768, 197, 769, 229, 769,
+ 117, 780, 85, 776, 772, 117, 776, 772, 85, 776, 769, 117, 776, 769,
+ 85, 776, 780, 117, 776, 780, 85, 776, 768, 117, 776, 768, 65, 776,
+ 772, 97, 776, 772, 65, 775, 772, 97, 775, 772, 198, 772, 230, 772,
+ 71, 780, 103, 780, 75, 780, 107, 780, 79, 808, 111, 808, 79, 808, 772,
+ 111, 808, 772, 439, 780, 658, 780, 106, 780, 68, 90, 68, 122, 100,
+ 122, 71, 769, 103, 769, 78, 768, 110, 768, 65, 778, 769, 97, 778, 769,
198, 769, 230, 769, 216, 769, 248, 769, 65, 783, 97, 783, 65, 785,
97, 785, 69, 783, 101, 783, 69, 785, 101, 785, 73, 783, 105, 783, 73,
785, 105, 785, 79, 783, 111, 783, 79, 785, 111, 785, 82, 783, 114,
783, 82, 785, 114, 785, 85, 783, 117, 783, 85, 785, 117, 785, 83, 806,
115, 806, 84, 806, 116, 806, 72, 780, 104, 780, 65, 775, 97, 775, 69,
- 807, 101, 807, 214, 772, 246, 772, 213, 772, 245, 772, 79, 775, 111,
- 775, 558, 772, 559, 772, 89, 772, 121, 772, 104, 614, 106, 114, 633,
- 635, 641, 119, 121, 32, 774, 32, 775, 32, 778, 32, 808, 32, 771, 32,
- 779, 611, 108, 120, 661, 768, 769, 787, 776, 769, 697, 32, 837, 59,
- 168, 769, 913, 769, 183, 917, 769, 919, 769, 921, 769, 927, 769, 933,
- 769, 937, 769, 970, 769, 921, 776, 933, 776, 945, 769, 949, 769, 951,
- 769, 953, 769, 971, 769, 953, 776, 965, 776, 959, 769, 965, 769, 969,
- 769, 946, 952, 933, 978, 769, 978, 776, 966, 960, 954, 961, 962, 920,
- 949, 931, 1045, 768, 1045, 776, 1043, 769, 1030, 776, 1050, 769, 1048,
- 768, 1059, 774, 1048, 774, 1080, 774, 1077, 768, 1077, 776, 1075, 769,
- 1110, 776, 1082, 769, 1080, 768, 1091, 774, 1140, 783, 1141, 783, 1046,
- 774, 1078, 774, 1040, 774, 1072, 774, 1040, 776, 1072, 776, 1045, 774,
- 1077, 774, 1240, 776, 1241, 776, 1046, 776, 1078, 776, 1047, 776, 1079,
- 776, 1048, 772, 1080, 772, 1048, 776, 1080, 776, 1054, 776, 1086, 776,
- 1256, 776, 1257, 776, 1069, 776, 1101, 776, 1059, 772, 1091, 772, 1059,
- 776, 1091, 776, 1059, 779, 1091, 779, 1063, 776, 1095, 776, 1067, 776,
- 1099, 776, 1381, 1410, 1575, 1619, 1575, 1620, 1608, 1620, 1575, 1621,
- 1610, 1620, 1575, 1652, 1608, 1652, 1735, 1652, 1610, 1652, 1749, 1620,
- 1729, 1620, 1746, 1620, 2344, 2364, 2352, 2364, 2355, 2364, 2325, 2364,
- 2326, 2364, 2327, 2364, 2332, 2364, 2337, 2364, 2338, 2364, 2347, 2364,
- 2351, 2364, 2503, 2494, 2503, 2519, 2465, 2492, 2466, 2492, 2479, 2492,
- 2610, 2620, 2616, 2620, 2582, 2620, 2583, 2620, 2588, 2620, 2603, 2620,
- 2887, 2902, 2887, 2878, 2887, 2903, 2849, 2876, 2850, 2876, 2962, 3031,
- 3014, 3006, 3015, 3006, 3014, 3031, 3142, 3158, 3263, 3285, 3270, 3285,
- 3270, 3286, 3270, 3266, 3274, 3285, 3398, 3390, 3399, 3390, 3398, 3415,
- 3545, 3530, 3545, 3535, 3548, 3530, 3545, 3551, 3661, 3634, 3789, 3762,
- 3755, 3737, 3755, 3745, 3851, 3906, 4023, 3916, 4023, 3921, 4023, 3926,
- 4023, 3931, 4023, 3904, 4021, 3953, 3954, 3953, 3956, 4018, 3968, 4018,
- 3969, 4019, 3968, 4019, 3969, 3953, 3968, 3986, 4023, 3996, 4023, 4001,
- 4023, 4006, 4023, 4011, 4023, 3984, 4021, 4133, 4142, 65, 198, 66,
- 68, 69, 398, 71, 72, 73, 74, 75, 76, 77, 78, 79, 546, 80, 82, 84, 85,
- 87, 592, 593, 7426, 98, 100, 101, 601, 603, 604, 103, 107, 109, 331,
- 596, 7446, 7447, 112, 116, 117, 7453, 623, 118, 7461, 947, 948, 967,
- 105, 65, 805, 97, 805, 66, 775, 98, 775, 66, 803, 98, 803, 66, 817,
- 98, 817, 199, 769, 231, 769, 68, 775, 100, 775, 68, 803, 100, 803,
- 68, 817, 100, 817, 68, 807, 100, 807, 68, 813, 100, 813, 274, 768,
- 275, 768, 274, 769, 275, 769, 69, 813, 101, 813, 69, 816, 101, 816,
- 552, 774, 553, 774, 70, 775, 102, 775, 71, 772, 103, 772, 72, 775,
+ 807, 101, 807, 79, 776, 772, 111, 776, 772, 79, 771, 772, 111, 771,
+ 772, 79, 775, 111, 775, 79, 775, 772, 111, 775, 772, 89, 772, 121,
+ 772, 104, 614, 106, 114, 633, 635, 641, 119, 121, 32, 774, 32, 775,
+ 32, 778, 32, 808, 32, 771, 32, 779, 611, 108, 120, 661, 768, 769, 787,
+ 776, 769, 697, 32, 837, 59, 32, 776, 769, 913, 769, 183, 917, 769,
+ 919, 769, 921, 769, 927, 769, 933, 769, 937, 769, 953, 776, 769, 921,
+ 776, 933, 776, 945, 769, 949, 769, 951, 769, 953, 769, 965, 776, 769,
+ 953, 776, 965, 776, 959, 769, 965, 769, 969, 769, 946, 952, 933, 966,
+ 960, 954, 961, 962, 920, 949, 931, 1045, 768, 1045, 776, 1043, 769,
+ 1030, 776, 1050, 769, 1048, 768, 1059, 774, 1048, 774, 1080, 774, 1077,
+ 768, 1077, 776, 1075, 769, 1110, 776, 1082, 769, 1080, 768, 1091, 774,
+ 1140, 783, 1141, 783, 1046, 774, 1078, 774, 1040, 774, 1072, 774, 1040,
+ 776, 1072, 776, 1045, 774, 1077, 774, 1240, 776, 1241, 776, 1046, 776,
+ 1078, 776, 1047, 776, 1079, 776, 1048, 772, 1080, 772, 1048, 776, 1080,
+ 776, 1054, 776, 1086, 776, 1256, 776, 1257, 776, 1069, 776, 1101, 776,
+ 1059, 772, 1091, 772, 1059, 776, 1091, 776, 1059, 779, 1091, 779, 1063,
+ 776, 1095, 776, 1067, 776, 1099, 776, 1381, 1410, 1575, 1619, 1575,
+ 1620, 1608, 1620, 1575, 1621, 1610, 1620, 1575, 1652, 1608, 1652, 1735,
+ 1652, 1610, 1652, 1749, 1620, 1729, 1620, 1746, 1620, 2344, 2364, 2352,
+ 2364, 2355, 2364, 2325, 2364, 2326, 2364, 2327, 2364, 2332, 2364, 2337,
+ 2364, 2338, 2364, 2347, 2364, 2351, 2364, 2503, 2494, 2503, 2519, 2465,
+ 2492, 2466, 2492, 2479, 2492, 2610, 2620, 2616, 2620, 2582, 2620, 2583,
+ 2620, 2588, 2620, 2603, 2620, 2887, 2902, 2887, 2878, 2887, 2903, 2849,
+ 2876, 2850, 2876, 2962, 3031, 3014, 3006, 3015, 3006, 3014, 3031, 3142,
+ 3158, 3263, 3285, 3270, 3285, 3270, 3286, 3270, 3266, 3270, 3266, 3285,
+ 3398, 3390, 3399, 3390, 3398, 3415, 3545, 3530, 3545, 3535, 3545, 3535,
+ 3530, 3545, 3551, 3661, 3634, 3789, 3762, 3755, 3737, 3755, 3745, 3851,
+ 3906, 4023, 3916, 4023, 3921, 4023, 3926, 4023, 3931, 4023, 3904, 4021,
+ 3953, 3954, 3953, 3956, 4018, 3968, 4018, 3969, 4019, 3968, 4019, 3969,
+ 3953, 3968, 3986, 4023, 3996, 4023, 4001, 4023, 4006, 4023, 4011, 4023,
+ 3984, 4021, 4133, 4142, 65, 198, 66, 68, 69, 398, 71, 72, 73, 74, 75,
+ 76, 77, 78, 79, 546, 80, 82, 84, 85, 87, 592, 593, 7426, 98, 100, 101,
+ 601, 603, 604, 103, 107, 109, 331, 596, 7446, 7447, 112, 116, 117,
+ 7453, 623, 118, 7461, 947, 948, 967, 105, 65, 805, 97, 805, 66, 775,
+ 98, 775, 66, 803, 98, 803, 66, 817, 98, 817, 67, 807, 769, 99, 807,
+ 769, 68, 775, 100, 775, 68, 803, 100, 803, 68, 817, 100, 817, 68, 807,
+ 100, 807, 68, 813, 100, 813, 69, 772, 768, 101, 772, 768, 69, 772,
+ 769, 101, 772, 769, 69, 813, 101, 813, 69, 816, 101, 816, 69, 807,
+ 774, 101, 807, 774, 70, 775, 102, 775, 71, 772, 103, 772, 72, 775,
104, 775, 72, 803, 104, 803, 72, 776, 104, 776, 72, 807, 104, 807,
- 72, 814, 104, 814, 73, 816, 105, 816, 207, 769, 239, 769, 75, 769,
- 107, 769, 75, 803, 107, 803, 75, 817, 107, 817, 76, 803, 108, 803,
- 7734, 772, 7735, 772, 76, 817, 108, 817, 76, 813, 108, 813, 77, 769,
- 109, 769, 77, 775, 109, 775, 77, 803, 109, 803, 78, 775, 110, 775,
- 78, 803, 110, 803, 78, 817, 110, 817, 78, 813, 110, 813, 213, 769,
- 245, 769, 213, 776, 245, 776, 332, 768, 333, 768, 332, 769, 333, 769,
- 80, 769, 112, 769, 80, 775, 112, 775, 82, 775, 114, 775, 82, 803, 114,
- 803, 7770, 772, 7771, 772, 82, 817, 114, 817, 83, 775, 115, 775, 83,
- 803, 115, 803, 346, 775, 347, 775, 352, 775, 353, 775, 7778, 775, 7779,
- 775, 84, 775, 116, 775, 84, 803, 116, 803, 84, 817, 116, 817, 84, 813,
- 116, 813, 85, 804, 117, 804, 85, 816, 117, 816, 85, 813, 117, 813,
- 360, 769, 361, 769, 362, 776, 363, 776, 86, 771, 118, 771, 86, 803,
- 118, 803, 87, 768, 119, 768, 87, 769, 119, 769, 87, 776, 119, 776,
- 87, 775, 119, 775, 87, 803, 119, 803, 88, 775, 120, 775, 88, 776, 120,
- 776, 89, 775, 121, 775, 90, 770, 122, 770, 90, 803, 122, 803, 90, 817,
- 122, 817, 104, 817, 116, 776, 119, 778, 121, 778, 97, 702, 383, 775,
- 65, 803, 97, 803, 65, 777, 97, 777, 194, 769, 226, 769, 194, 768, 226,
- 768, 194, 777, 226, 777, 194, 771, 226, 771, 7840, 770, 7841, 770,
- 258, 769, 259, 769, 258, 768, 259, 768, 258, 777, 259, 777, 258, 771,
- 259, 771, 7840, 774, 7841, 774, 69, 803, 101, 803, 69, 777, 101, 777,
- 69, 771, 101, 771, 202, 769, 234, 769, 202, 768, 234, 768, 202, 777,
- 234, 777, 202, 771, 234, 771, 7864, 770, 7865, 770, 73, 777, 105, 777,
- 73, 803, 105, 803, 79, 803, 111, 803, 79, 777, 111, 777, 212, 769,
- 244, 769, 212, 768, 244, 768, 212, 777, 244, 777, 212, 771, 244, 771,
- 7884, 770, 7885, 770, 416, 769, 417, 769, 416, 768, 417, 768, 416,
- 777, 417, 777, 416, 771, 417, 771, 416, 803, 417, 803, 85, 803, 117,
- 803, 85, 777, 117, 777, 431, 769, 432, 769, 431, 768, 432, 768, 431,
- 777, 432, 777, 431, 771, 432, 771, 431, 803, 432, 803, 89, 768, 121,
- 768, 89, 803, 121, 803, 89, 777, 121, 777, 89, 771, 121, 771, 945,
- 787, 945, 788, 7936, 768, 7937, 768, 7936, 769, 7937, 769, 7936, 834,
- 7937, 834, 913, 787, 913, 788, 7944, 768, 7945, 768, 7944, 769, 7945,
- 769, 7944, 834, 7945, 834, 949, 787, 949, 788, 7952, 768, 7953, 768,
- 7952, 769, 7953, 769, 917, 787, 917, 788, 7960, 768, 7961, 768, 7960,
- 769, 7961, 769, 951, 787, 951, 788, 7968, 768, 7969, 768, 7968, 769,
- 7969, 769, 7968, 834, 7969, 834, 919, 787, 919, 788, 7976, 768, 7977,
- 768, 7976, 769, 7977, 769, 7976, 834, 7977, 834, 953, 787, 953, 788,
- 7984, 768, 7985, 768, 7984, 769, 7985, 769, 7984, 834, 7985, 834, 921,
- 787, 921, 788, 7992, 768, 7993, 768, 7992, 769, 7993, 769, 7992, 834,
- 7993, 834, 959, 787, 959, 788, 8000, 768, 8001, 768, 8000, 769, 8001,
- 769, 927, 787, 927, 788, 8008, 768, 8009, 768, 8008, 769, 8009, 769,
- 965, 787, 965, 788, 8016, 768, 8017, 768, 8016, 769, 8017, 769, 8016,
- 834, 8017, 834, 933, 788, 8025, 768, 8025, 769, 8025, 834, 969, 787,
- 969, 788, 8032, 768, 8033, 768, 8032, 769, 8033, 769, 8032, 834, 8033,
- 834, 937, 787, 937, 788, 8040, 768, 8041, 768, 8040, 769, 8041, 769,
- 8040, 834, 8041, 834, 945, 768, 940, 949, 768, 941, 951, 768, 942,
- 953, 768, 943, 959, 768, 972, 965, 768, 973, 969, 768, 974, 7936, 837,
- 7937, 837, 7938, 837, 7939, 837, 7940, 837, 7941, 837, 7942, 837, 7943,
- 837, 7944, 837, 7945, 837, 7946, 837, 7947, 837, 7948, 837, 7949, 837,
- 7950, 837, 7951, 837, 7968, 837, 7969, 837, 7970, 837, 7971, 837, 7972,
- 837, 7973, 837, 7974, 837, 7975, 837, 7976, 837, 7977, 837, 7978, 837,
- 7979, 837, 7980, 837, 7981, 837, 7982, 837, 7983, 837, 8032, 837, 8033,
- 837, 8034, 837, 8035, 837, 8036, 837, 8037, 837, 8038, 837, 8039, 837,
- 8040, 837, 8041, 837, 8042, 837, 8043, 837, 8044, 837, 8045, 837, 8046,
- 837, 8047, 837, 945, 774, 945, 772, 8048, 837, 945, 837, 940, 837,
- 945, 834, 8118, 837, 913, 774, 913, 772, 913, 768, 902, 913, 837, 32,
- 787, 953, 32, 834, 168, 834, 8052, 837, 951, 837, 942, 837, 951, 834,
- 8134, 837, 917, 768, 904, 919, 768, 905, 919, 837, 8127, 768, 8127,
- 769, 8127, 834, 953, 774, 953, 772, 970, 768, 912, 953, 834, 970, 834,
- 921, 774, 921, 772, 921, 768, 906, 8190, 768, 8190, 769, 8190, 834,
- 965, 774, 965, 772, 971, 768, 944, 961, 787, 961, 788, 965, 834, 971,
- 834, 933, 774, 933, 772, 933, 768, 910, 929, 788, 168, 768, 901, 96,
- 8060, 837, 969, 837, 974, 837, 969, 834, 8182, 837, 927, 768, 908,
- 937, 768, 911, 937, 837, 180, 32, 788, 8194, 8195, 8208, 32, 819, 46,
- 46, 46, 46, 46, 46, 8242, 8242, 8242, 8242, 8242, 8245, 8245, 8245,
- 8245, 8245, 33, 33, 32, 773, 63, 63, 63, 33, 33, 63, 8242, 8242, 8242,
- 8242, 48, 52, 53, 54, 55, 56, 57, 43, 8722, 61, 40, 41, 110, 82, 115,
- 97, 47, 99, 97, 47, 115, 67, 176, 67, 99, 47, 111, 99, 47, 117, 400,
- 176, 70, 295, 78, 111, 81, 83, 77, 84, 69, 76, 84, 77, 90, 937, 197,
- 70, 1488, 1489, 1490, 1491, 70, 65, 88, 915, 928, 8721, 49, 8260, 51,
- 50, 8260, 51, 49, 8260, 53, 50, 8260, 53, 51, 8260, 53, 52, 8260, 53,
- 49, 8260, 54, 53, 8260, 54, 49, 8260, 56, 51, 8260, 56, 53, 8260, 56,
- 55, 8260, 56, 49, 8260, 73, 73, 73, 73, 73, 73, 86, 86, 86, 73, 86,
- 73, 73, 86, 73, 73, 73, 73, 88, 88, 88, 73, 88, 73, 73, 105, 105, 105,
- 105, 105, 105, 118, 118, 105, 118, 105, 105, 118, 105, 105, 105, 105,
- 120, 120, 105, 120, 105, 105, 99, 8592, 824, 8594, 824, 8596, 824,
- 8656, 824, 8660, 824, 8658, 824, 8707, 824, 8712, 824, 8715, 824, 8739,
- 824, 8741, 824, 8747, 8747, 8747, 8747, 8747, 8750, 8750, 8750, 8750,
- 8750, 8764, 824, 8771, 824, 8773, 824, 8776, 824, 61, 824, 8801, 824,
- 8781, 824, 60, 824, 62, 824, 8804, 824, 8805, 824, 8818, 824, 8819,
- 824, 8822, 824, 8823, 824, 8826, 824, 8827, 824, 8834, 824, 8835, 824,
- 8838, 824, 8839, 824, 8866, 824, 8872, 824, 8873, 824, 8875, 824, 8828,
- 824, 8829, 824, 8849, 824, 8850, 824, 8882, 824, 8883, 824, 8884, 824,
- 8885, 824, 12296, 12297, 49, 48, 49, 49, 49, 50, 49, 51, 49, 52, 49,
- 53, 49, 54, 49, 55, 49, 56, 49, 57, 50, 48, 40, 49, 41, 40, 50, 41,
- 40, 51, 41, 40, 52, 41, 40, 53, 41, 40, 54, 41, 40, 55, 41, 40, 56,
- 41, 40, 57, 41, 40, 49, 48, 41, 40, 49, 49, 41, 40, 49, 50, 41, 40,
- 49, 51, 41, 40, 49, 52, 41, 40, 49, 53, 41, 40, 49, 54, 41, 40, 49,
- 55, 41, 40, 49, 56, 41, 40, 49, 57, 41, 40, 50, 48, 41, 49, 46, 50,
- 46, 51, 46, 52, 46, 53, 46, 54, 46, 55, 46, 56, 46, 57, 46, 49, 48,
- 46, 49, 49, 46, 49, 50, 46, 49, 51, 46, 49, 52, 46, 49, 53, 46, 49,
- 54, 46, 49, 55, 46, 49, 56, 46, 49, 57, 46, 50, 48, 46, 40, 97, 41,
- 40, 98, 41, 40, 99, 41, 40, 100, 41, 40, 101, 41, 40, 102, 41, 40,
- 103, 41, 40, 104, 41, 40, 105, 41, 40, 106, 41, 40, 107, 41, 40, 108,
- 41, 40, 109, 41, 40, 110, 41, 40, 111, 41, 40, 112, 41, 40, 113, 41,
- 40, 114, 41, 40, 115, 41, 40, 116, 41, 40, 117, 41, 40, 118, 41, 40,
- 119, 41, 40, 120, 41, 40, 121, 41, 40, 122, 41, 83, 89, 102, 113, 122,
- 8747, 8747, 8747, 8747, 58, 58, 61, 61, 61, 61, 61, 61, 10973, 824,
- 27597, 40863, 19968, 20008, 20022, 20031, 20057, 20101, 20108, 20128,
- 20154, 20799, 20837, 20843, 20866, 20886, 20907, 20960, 20981, 20992,
- 21147, 21241, 21269, 21274, 21304, 21313, 21340, 21353, 21378, 21430,
- 21448, 21475, 22231, 22303, 22763, 22786, 22794, 22805, 22823, 22899,
- 23376, 23424, 23544, 23567, 23586, 23608, 23662, 23665, 24027, 24037,
- 24049, 24062, 24178, 24186, 24191, 24308, 24318, 24331, 24339, 24400,
- 24417, 24435, 24515, 25096, 25142, 25163, 25903, 25908, 25991, 26007,
- 26020, 26041, 26080, 26085, 26352, 26376, 26408, 27424, 27490, 27513,
- 27571, 27595, 27604, 27611, 27663, 27668, 27700, 28779, 29226, 29238,
- 29243, 29247, 29255, 29273, 29275, 29356, 29572, 29577, 29916, 29926,
- 29976, 29983, 29992, 30000, 30091, 30098, 30326, 30333, 30382, 30399,
- 30446, 30683, 30690, 30707, 31034, 31160, 31166, 31348, 31435, 31481,
- 31859, 31992, 32566, 32593, 32650, 32701, 32769, 32780, 32786, 32819,
- 32895, 32905, 33251, 33258, 33267, 33276, 33292, 33307, 33311, 33390,
- 33394, 33400, 34381, 34411, 34880, 34892, 34915, 35198, 35211, 35282,
- 35328, 35895, 35910, 35925, 35960, 35997, 36196, 36208, 36275, 36523,
- 36554, 36763, 36784, 36789, 37009, 37193, 37318, 37324, 37329, 38263,
- 38272, 38428, 38582, 38585, 38632, 38737, 38750, 38754, 38761, 38859,
- 38893, 38899, 38913, 39080, 39131, 39135, 39318, 39321, 39340, 39592,
- 39640, 39647, 39717, 39727, 39730, 39740, 39770, 40165, 40565, 40575,
- 40613, 40635, 40643, 40653, 40657, 40697, 40701, 40718, 40723, 40736,
- 40763, 40778, 40786, 40845, 40860, 40864, 12306, 21316, 21317, 12363,
- 12441, 12365, 12441, 12367, 12441, 12369, 12441, 12371, 12441, 12373,
- 12441, 12375, 12441, 12377, 12441, 12379, 12441, 12381, 12441, 12383,
- 12441, 12385, 12441, 12388, 12441, 12390, 12441, 12392, 12441, 12399,
- 12441, 12399, 12442, 12402, 12441, 12402, 12442, 12405, 12441, 12405,
- 12442, 12408, 12441, 12408, 12442, 12411, 12441, 12411, 12442, 12358,
- 12441, 32, 12441, 32, 12442, 12445, 12441, 12424, 12426, 12459, 12441,
- 12461, 12441, 12463, 12441, 12465, 12441, 12467, 12441, 12469, 12441,
- 12471, 12441, 12473, 12441, 12475, 12441, 12477, 12441, 12479, 12441,
- 12481, 12441, 12484, 12441, 12486, 12441, 12488, 12441, 12495, 12441,
- 12495, 12442, 12498, 12441, 12498, 12442, 12501, 12441, 12501, 12442,
- 12504, 12441, 12504, 12442, 12507, 12441, 12507, 12442, 12454, 12441,
- 12527, 12441, 12528, 12441, 12529, 12441, 12530, 12441, 12541, 12441,
- 12467, 12488, 4352, 4353, 4522, 4354, 4524, 4525, 4355, 4356, 4357,
- 4528, 4529, 4530, 4531, 4532, 4533, 4378, 4358, 4359, 4360, 4385, 4361,
- 4362, 4363, 4364, 4365, 4366, 4367, 4368, 4369, 4370, 4449, 4450, 4451,
- 4452, 4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463,
- 4464, 4465, 4466, 4467, 4468, 4469, 4448, 4372, 4373, 4551, 4552, 4556,
- 4558, 4563, 4567, 4569, 4380, 4573, 4575, 4381, 4382, 4384, 4386, 4387,
- 4391, 4393, 4395, 4396, 4397, 4398, 4399, 4402, 4406, 4416, 4423, 4428,
- 4593, 4594, 4439, 4440, 4441, 4484, 4485, 4488, 4497, 4498, 4500, 4510,
- 4513, 19977, 22235, 19978, 20013, 19979, 30002, 19993, 19969, 22825,
- 22320, 40, 4352, 41, 40, 4354, 41, 40, 4355, 41, 40, 4357, 41, 40,
- 4358, 41, 40, 4359, 41, 40, 4361, 41, 40, 4363, 41, 40, 4364, 41, 40,
- 4366, 41, 40, 4367, 41, 40, 4368, 41, 40, 4369, 41, 40, 4370, 41, 40,
- 4352, 4449, 41, 40, 4354, 4449, 41, 40, 4355, 4449, 41, 40, 4357, 4449,
- 41, 40, 4358, 4449, 41, 40, 4359, 4449, 41, 40, 4361, 4449, 41, 40,
- 4363, 4449, 41, 40, 4364, 4449, 41, 40, 4366, 4449, 41, 40, 4367, 4449,
- 41, 40, 4368, 4449, 41, 40, 4369, 4449, 41, 40, 4370, 4449, 41, 40,
- 4364, 4462, 41, 40, 4363, 4457, 4364, 4453, 4523, 41, 40, 4363, 4457,
- 4370, 4462, 41, 40, 19968, 41, 40, 20108, 41, 40, 19977, 41, 40, 22235,
- 41, 40, 20116, 41, 40, 20845, 41, 40, 19971, 41, 40, 20843, 41, 40,
- 20061, 41, 40, 21313, 41, 40, 26376, 41, 40, 28779, 41, 40, 27700,
- 41, 40, 26408, 41, 40, 37329, 41, 40, 22303, 41, 40, 26085, 41, 40,
- 26666, 41, 40, 26377, 41, 40, 31038, 41, 40, 21517, 41, 40, 29305,
- 41, 40, 36001, 41, 40, 31069, 41, 40, 21172, 41, 40, 20195, 41, 40,
- 21628, 41, 40, 23398, 41, 40, 30435, 41, 40, 20225, 41, 40, 36039,
- 41, 40, 21332, 41, 40, 31085, 41, 40, 20241, 41, 40, 33258, 41, 40,
- 33267, 41, 80, 84, 69, 50, 49, 50, 50, 50, 51, 50, 52, 50, 53, 50,
- 54, 50, 55, 50, 56, 50, 57, 51, 48, 51, 49, 51, 50, 51, 51, 51, 52,
- 51, 53, 4352, 4449, 4354, 4449, 4355, 4449, 4357, 4449, 4358, 4449,
- 4359, 4449, 4361, 4449, 4363, 4449, 4364, 4449, 4366, 4449, 4367, 4449,
- 4368, 4449, 4369, 4449, 4370, 4449, 4366, 4449, 4535, 4352, 4457, 4364,
- 4462, 4363, 4468, 20116, 20845, 19971, 20061, 26666, 26377, 31038,
- 21517, 29305, 36001, 31069, 21172, 31192, 30007, 36969, 20778, 21360,
- 27880, 38917, 20241, 20889, 27491, 24038, 21491, 21307, 23447, 23398,
- 30435, 20225, 36039, 21332, 22812, 51, 54, 51, 55, 51, 56, 51, 57,
- 52, 48, 52, 49, 52, 50, 52, 51, 52, 52, 52, 53, 52, 54, 52, 55, 52,
- 56, 52, 57, 53, 48, 49, 26376, 50, 26376, 51, 26376, 52, 26376, 53,
- 26376, 54, 26376, 55, 26376, 56, 26376, 57, 26376, 49, 48, 26376, 49,
- 49, 26376, 49, 50, 26376, 72, 103, 101, 114, 103, 101, 86, 76, 84,
- 68, 12450, 12452, 12454, 12456, 12458, 12459, 12461, 12463, 12465,
- 12467, 12469, 12471, 12473, 12475, 12477, 12479, 12481, 12484, 12486,
- 12488, 12490, 12491, 12492, 12493, 12494, 12495, 12498, 12501, 12504,
- 12507, 12510, 12511, 12512, 12513, 12514, 12516, 12518, 12520, 12521,
- 12522, 12523, 12524, 12525, 12527, 12528, 12529, 12530, 12450, 12497,
- 12540, 12488, 12450, 12523, 12501, 12449, 12450, 12531, 12506, 12450,
- 12450, 12540, 12523, 12452, 12491, 12531, 12464, 12452, 12531, 12481,
- 12454, 12457, 12531, 12456, 12473, 12463, 12540, 12489, 12456, 12540,
- 12459, 12540, 12458, 12531, 12473, 12458, 12540, 12512, 12459, 12452,
- 12522, 12459, 12521, 12483, 12488, 12459, 12525, 12522, 12540, 12460,
- 12525, 12531, 12460, 12531, 12510, 12462, 12460, 12462, 12491, 12540,
- 12461, 12517, 12522, 12540, 12462, 12523, 12480, 12540, 12461, 12525,
+ 72, 814, 104, 814, 73, 816, 105, 816, 73, 776, 769, 105, 776, 769,
+ 75, 769, 107, 769, 75, 803, 107, 803, 75, 817, 107, 817, 76, 803, 108,
+ 803, 76, 803, 772, 108, 803, 772, 76, 817, 108, 817, 76, 813, 108,
+ 813, 77, 769, 109, 769, 77, 775, 109, 775, 77, 803, 109, 803, 78, 775,
+ 110, 775, 78, 803, 110, 803, 78, 817, 110, 817, 78, 813, 110, 813,
+ 79, 771, 769, 111, 771, 769, 79, 771, 776, 111, 771, 776, 79, 772,
+ 768, 111, 772, 768, 79, 772, 769, 111, 772, 769, 80, 769, 112, 769,
+ 80, 775, 112, 775, 82, 775, 114, 775, 82, 803, 114, 803, 82, 803, 772,
+ 114, 803, 772, 82, 817, 114, 817, 83, 775, 115, 775, 83, 803, 115,
+ 803, 83, 769, 775, 115, 769, 775, 83, 780, 775, 115, 780, 775, 83,
+ 803, 775, 115, 803, 775, 84, 775, 116, 775, 84, 803, 116, 803, 84,
+ 817, 116, 817, 84, 813, 116, 813, 85, 804, 117, 804, 85, 816, 117,
+ 816, 85, 813, 117, 813, 85, 771, 769, 117, 771, 769, 85, 772, 776,
+ 117, 772, 776, 86, 771, 118, 771, 86, 803, 118, 803, 87, 768, 119,
+ 768, 87, 769, 119, 769, 87, 776, 119, 776, 87, 775, 119, 775, 87, 803,
+ 119, 803, 88, 775, 120, 775, 88, 776, 120, 776, 89, 775, 121, 775,
+ 90, 770, 122, 770, 90, 803, 122, 803, 90, 817, 122, 817, 104, 817,
+ 116, 776, 119, 778, 121, 778, 97, 702, 65, 803, 97, 803, 65, 777, 97,
+ 777, 65, 770, 769, 97, 770, 769, 65, 770, 768, 97, 770, 768, 65, 770,
+ 777, 97, 770, 777, 65, 770, 771, 97, 770, 771, 65, 803, 770, 97, 803,
+ 770, 65, 774, 769, 97, 774, 769, 65, 774, 768, 97, 774, 768, 65, 774,
+ 777, 97, 774, 777, 65, 774, 771, 97, 774, 771, 65, 803, 774, 97, 803,
+ 774, 69, 803, 101, 803, 69, 777, 101, 777, 69, 771, 101, 771, 69, 770,
+ 769, 101, 770, 769, 69, 770, 768, 101, 770, 768, 69, 770, 777, 101,
+ 770, 777, 69, 770, 771, 101, 770, 771, 69, 803, 770, 101, 803, 770,
+ 73, 777, 105, 777, 73, 803, 105, 803, 79, 803, 111, 803, 79, 777, 111,
+ 777, 79, 770, 769, 111, 770, 769, 79, 770, 768, 111, 770, 768, 79,
+ 770, 777, 111, 770, 777, 79, 770, 771, 111, 770, 771, 79, 803, 770,
+ 111, 803, 770, 79, 795, 769, 111, 795, 769, 79, 795, 768, 111, 795,
+ 768, 79, 795, 777, 111, 795, 777, 79, 795, 771, 111, 795, 771, 79,
+ 795, 803, 111, 795, 803, 85, 803, 117, 803, 85, 777, 117, 777, 85,
+ 795, 769, 117, 795, 769, 85, 795, 768, 117, 795, 768, 85, 795, 777,
+ 117, 795, 777, 85, 795, 771, 117, 795, 771, 85, 795, 803, 117, 795,
+ 803, 89, 768, 121, 768, 89, 803, 121, 803, 89, 777, 121, 777, 89, 771,
+ 121, 771, 945, 787, 945, 788, 945, 787, 768, 945, 788, 768, 945, 787,
+ 769, 945, 788, 769, 945, 787, 834, 945, 788, 834, 913, 787, 913, 788,
+ 913, 787, 768, 913, 788, 768, 913, 787, 769, 913, 788, 769, 913, 787,
+ 834, 913, 788, 834, 949, 787, 949, 788, 949, 787, 768, 949, 788, 768,
+ 949, 787, 769, 949, 788, 769, 917, 787, 917, 788, 917, 787, 768, 917,
+ 788, 768, 917, 787, 769, 917, 788, 769, 951, 787, 951, 788, 951, 787,
+ 768, 951, 788, 768, 951, 787, 769, 951, 788, 769, 951, 787, 834, 951,
+ 788, 834, 919, 787, 919, 788, 919, 787, 768, 919, 788, 768, 919, 787,
+ 769, 919, 788, 769, 919, 787, 834, 919, 788, 834, 953, 787, 953, 788,
+ 953, 787, 768, 953, 788, 768, 953, 787, 769, 953, 788, 769, 953, 787,
+ 834, 953, 788, 834, 921, 787, 921, 788, 921, 787, 768, 921, 788, 768,
+ 921, 787, 769, 921, 788, 769, 921, 787, 834, 921, 788, 834, 959, 787,
+ 959, 788, 959, 787, 768, 959, 788, 768, 959, 787, 769, 959, 788, 769,
+ 927, 787, 927, 788, 927, 787, 768, 927, 788, 768, 927, 787, 769, 927,
+ 788, 769, 965, 787, 965, 788, 965, 787, 768, 965, 788, 768, 965, 787,
+ 769, 965, 788, 769, 965, 787, 834, 965, 788, 834, 933, 788, 933, 788,
+ 768, 933, 788, 769, 933, 788, 834, 969, 787, 969, 788, 969, 787, 768,
+ 969, 788, 768, 969, 787, 769, 969, 788, 769, 969, 787, 834, 969, 788,
+ 834, 937, 787, 937, 788, 937, 787, 768, 937, 788, 768, 937, 787, 769,
+ 937, 788, 769, 937, 787, 834, 937, 788, 834, 945, 768, 949, 768, 951,
+ 768, 953, 768, 959, 768, 965, 768, 969, 768, 945, 787, 837, 945, 788,
+ 837, 945, 787, 768, 837, 945, 788, 768, 837, 945, 787, 769, 837, 945,
+ 788, 769, 837, 945, 787, 834, 837, 945, 788, 834, 837, 913, 787, 837,
+ 913, 788, 837, 913, 787, 768, 837, 913, 788, 768, 837, 913, 787, 769,
+ 837, 913, 788, 769, 837, 913, 787, 834, 837, 913, 788, 834, 837, 951,
+ 787, 837, 951, 788, 837, 951, 787, 768, 837, 951, 788, 768, 837, 951,
+ 787, 769, 837, 951, 788, 769, 837, 951, 787, 834, 837, 951, 788, 834,
+ 837, 919, 787, 837, 919, 788, 837, 919, 787, 768, 837, 919, 788, 768,
+ 837, 919, 787, 769, 837, 919, 788, 769, 837, 919, 787, 834, 837, 919,
+ 788, 834, 837, 969, 787, 837, 969, 788, 837, 969, 787, 768, 837, 969,
+ 788, 768, 837, 969, 787, 769, 837, 969, 788, 769, 837, 969, 787, 834,
+ 837, 969, 788, 834, 837, 937, 787, 837, 937, 788, 837, 937, 787, 768,
+ 837, 937, 788, 768, 837, 937, 787, 769, 837, 937, 788, 769, 837, 937,
+ 787, 834, 837, 937, 788, 834, 837, 945, 774, 945, 772, 945, 768, 837,
+ 945, 837, 945, 769, 837, 945, 834, 945, 834, 837, 913, 774, 913, 772,
+ 913, 768, 913, 837, 32, 787, 953, 32, 834, 32, 776, 834, 951, 768,
+ 837, 951, 837, 951, 769, 837, 951, 834, 951, 834, 837, 917, 768, 919,
+ 768, 919, 837, 32, 787, 768, 32, 787, 769, 32, 787, 834, 953, 774,
+ 953, 772, 953, 776, 768, 953, 834, 953, 776, 834, 921, 774, 921, 772,
+ 921, 768, 32, 788, 768, 32, 788, 769, 32, 788, 834, 965, 774, 965,
+ 772, 965, 776, 768, 961, 787, 961, 788, 965, 834, 965, 776, 834, 933,
+ 774, 933, 772, 933, 768, 929, 788, 32, 776, 768, 96, 969, 768, 837,
+ 969, 837, 969, 769, 837, 969, 834, 969, 834, 837, 927, 768, 937, 768,
+ 937, 837, 32, 788, 8208, 32, 819, 46, 46, 46, 46, 46, 46, 8242, 8242,
+ 8242, 8242, 8242, 8245, 8245, 8245, 8245, 8245, 33, 33, 32, 773, 63,
+ 63, 63, 33, 33, 63, 8242, 8242, 8242, 8242, 48, 52, 53, 54, 55, 56,
+ 57, 43, 8722, 61, 40, 41, 110, 82, 115, 97, 47, 99, 97, 47, 115, 67,
+ 176, 67, 99, 47, 111, 99, 47, 117, 400, 176, 70, 295, 78, 111, 81,
+ 83, 77, 84, 69, 76, 84, 77, 90, 937, 70, 1488, 1489, 1490, 1491, 70,
+ 65, 88, 915, 928, 8721, 49, 8260, 51, 50, 8260, 51, 49, 8260, 53, 50,
+ 8260, 53, 51, 8260, 53, 52, 8260, 53, 49, 8260, 54, 53, 8260, 54, 49,
+ 8260, 56, 51, 8260, 56, 53, 8260, 56, 55, 8260, 56, 49, 8260, 73, 73,
+ 73, 73, 73, 73, 86, 86, 86, 73, 86, 73, 73, 86, 73, 73, 73, 73, 88,
+ 88, 88, 73, 88, 73, 73, 105, 105, 105, 105, 105, 105, 118, 118, 105,
+ 118, 105, 105, 118, 105, 105, 105, 105, 120, 120, 105, 120, 105, 105,
+ 99, 8592, 824, 8594, 824, 8596, 824, 8656, 824, 8660, 824, 8658, 824,
+ 8707, 824, 8712, 824, 8715, 824, 8739, 824, 8741, 824, 8747, 8747,
+ 8747, 8747, 8747, 8750, 8750, 8750, 8750, 8750, 8764, 824, 8771, 824,
+ 8773, 824, 8776, 824, 61, 824, 8801, 824, 8781, 824, 60, 824, 62, 824,
+ 8804, 824, 8805, 824, 8818, 824, 8819, 824, 8822, 824, 8823, 824, 8826,
+ 824, 8827, 824, 8834, 824, 8835, 824, 8838, 824, 8839, 824, 8866, 824,
+ 8872, 824, 8873, 824, 8875, 824, 8828, 824, 8829, 824, 8849, 824, 8850,
+ 824, 8882, 824, 8883, 824, 8884, 824, 8885, 824, 12296, 12297, 49,
+ 48, 49, 49, 49, 50, 49, 51, 49, 52, 49, 53, 49, 54, 49, 55, 49, 56,
+ 49, 57, 50, 48, 40, 49, 41, 40, 50, 41, 40, 51, 41, 40, 52, 41, 40,
+ 53, 41, 40, 54, 41, 40, 55, 41, 40, 56, 41, 40, 57, 41, 40, 49, 48,
+ 41, 40, 49, 49, 41, 40, 49, 50, 41, 40, 49, 51, 41, 40, 49, 52, 41,
+ 40, 49, 53, 41, 40, 49, 54, 41, 40, 49, 55, 41, 40, 49, 56, 41, 40,
+ 49, 57, 41, 40, 50, 48, 41, 49, 46, 50, 46, 51, 46, 52, 46, 53, 46,
+ 54, 46, 55, 46, 56, 46, 57, 46, 49, 48, 46, 49, 49, 46, 49, 50, 46,
+ 49, 51, 46, 49, 52, 46, 49, 53, 46, 49, 54, 46, 49, 55, 46, 49, 56,
+ 46, 49, 57, 46, 50, 48, 46, 40, 97, 41, 40, 98, 41, 40, 99, 41, 40,
+ 100, 41, 40, 101, 41, 40, 102, 41, 40, 103, 41, 40, 104, 41, 40, 105,
+ 41, 40, 106, 41, 40, 107, 41, 40, 108, 41, 40, 109, 41, 40, 110, 41,
+ 40, 111, 41, 40, 112, 41, 40, 113, 41, 40, 114, 41, 40, 115, 41, 40,
+ 116, 41, 40, 117, 41, 40, 118, 41, 40, 119, 41, 40, 120, 41, 40, 121,
+ 41, 40, 122, 41, 83, 89, 102, 113, 122, 8747, 8747, 8747, 8747, 58,
+ 58, 61, 61, 61, 61, 61, 61, 10973, 824, 27597, 40863, 19968, 20008,
+ 20022, 20031, 20057, 20101, 20108, 20128, 20154, 20799, 20837, 20843,
+ 20866, 20886, 20907, 20960, 20981, 20992, 21147, 21241, 21269, 21274,
+ 21304, 21313, 21340, 21353, 21378, 21430, 21448, 21475, 22231, 22303,
+ 22763, 22786, 22794, 22805, 22823, 22899, 23376, 23424, 23544, 23567,
+ 23586, 23608, 23662, 23665, 24027, 24037, 24049, 24062, 24178, 24186,
+ 24191, 24308, 24318, 24331, 24339, 24400, 24417, 24435, 24515, 25096,
+ 25142, 25163, 25903, 25908, 25991, 26007, 26020, 26041, 26080, 26085,
+ 26352, 26376, 26408, 27424, 27490, 27513, 27571, 27595, 27604, 27611,
+ 27663, 27668, 27700, 28779, 29226, 29238, 29243, 29247, 29255, 29273,
+ 29275, 29356, 29572, 29577, 29916, 29926, 29976, 29983, 29992, 30000,
+ 30091, 30098, 30326, 30333, 30382, 30399, 30446, 30683, 30690, 30707,
+ 31034, 31160, 31166, 31348, 31435, 31481, 31859, 31992, 32566, 32593,
+ 32650, 32701, 32769, 32780, 32786, 32819, 32895, 32905, 33251, 33258,
+ 33267, 33276, 33292, 33307, 33311, 33390, 33394, 33400, 34381, 34411,
+ 34880, 34892, 34915, 35198, 35211, 35282, 35328, 35895, 35910, 35925,
+ 35960, 35997, 36196, 36208, 36275, 36523, 36554, 36763, 36784, 36789,
+ 37009, 37193, 37318, 37324, 37329, 38263, 38272, 38428, 38582, 38585,
+ 38632, 38737, 38750, 38754, 38761, 38859, 38893, 38899, 38913, 39080,
+ 39131, 39135, 39318, 39321, 39340, 39592, 39640, 39647, 39717, 39727,
+ 39730, 39740, 39770, 40165, 40565, 40575, 40613, 40635, 40643, 40653,
+ 40657, 40697, 40701, 40718, 40723, 40736, 40763, 40778, 40786, 40845,
+ 40860, 40864, 12306, 21316, 21317, 12363, 12441, 12365, 12441, 12367,
+ 12441, 12369, 12441, 12371, 12441, 12373, 12441, 12375, 12441, 12377,
+ 12441, 12379, 12441, 12381, 12441, 12383, 12441, 12385, 12441, 12388,
+ 12441, 12390, 12441, 12392, 12441, 12399, 12441, 12399, 12442, 12402,
+ 12441, 12402, 12442, 12405, 12441, 12405, 12442, 12408, 12441, 12408,
+ 12442, 12411, 12441, 12411, 12442, 12358, 12441, 32, 12441, 32, 12442,
+ 12445, 12441, 12424, 12426, 12459, 12441, 12461, 12441, 12463, 12441,
+ 12465, 12441, 12467, 12441, 12469, 12441, 12471, 12441, 12473, 12441,
+ 12475, 12441, 12477, 12441, 12479, 12441, 12481, 12441, 12484, 12441,
+ 12486, 12441, 12488, 12441, 12495, 12441, 12495, 12442, 12498, 12441,
+ 12498, 12442, 12501, 12441, 12501, 12442, 12504, 12441, 12504, 12442,
+ 12507, 12441, 12507, 12442, 12454, 12441, 12527, 12441, 12528, 12441,
+ 12529, 12441, 12530, 12441, 12541, 12441, 12467, 12488, 4352, 4353,
+ 4522, 4354, 4524, 4525, 4355, 4356, 4357, 4528, 4529, 4530, 4531, 4532,
+ 4533, 4378, 4358, 4359, 4360, 4385, 4361, 4362, 4363, 4364, 4365, 4366,
+ 4367, 4368, 4369, 4370, 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456,
+ 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468,
+ 4469, 4448, 4372, 4373, 4551, 4552, 4556, 4558, 4563, 4567, 4569, 4380,
+ 4573, 4575, 4381, 4382, 4384, 4386, 4387, 4391, 4393, 4395, 4396, 4397,
+ 4398, 4399, 4402, 4406, 4416, 4423, 4428, 4593, 4594, 4439, 4440, 4441,
+ 4484, 4485, 4488, 4497, 4498, 4500, 4510, 4513, 19977, 22235, 19978,
+ 20013, 19979, 30002, 19993, 19969, 22825, 22320, 40, 4352, 41, 40,
+ 4354, 41, 40, 4355, 41, 40, 4357, 41, 40, 4358, 41, 40, 4359, 41, 40,
+ 4361, 41, 40, 4363, 41, 40, 4364, 41, 40, 4366, 41, 40, 4367, 41, 40,
+ 4368, 41, 40, 4369, 41, 40, 4370, 41, 40, 4352, 4449, 41, 40, 4354,
+ 4449, 41, 40, 4355, 4449, 41, 40, 4357, 4449, 41, 40, 4358, 4449, 41,
+ 40, 4359, 4449, 41, 40, 4361, 4449, 41, 40, 4363, 4449, 41, 40, 4364,
+ 4449, 41, 40, 4366, 4449, 41, 40, 4367, 4449, 41, 40, 4368, 4449, 41,
+ 40, 4369, 4449, 41, 40, 4370, 4449, 41, 40, 4364, 4462, 41, 40, 4363,
+ 4457, 4364, 4453, 4523, 41, 40, 4363, 4457, 4370, 4462, 41, 40, 19968,
+ 41, 40, 20108, 41, 40, 19977, 41, 40, 22235, 41, 40, 20116, 41, 40,
+ 20845, 41, 40, 19971, 41, 40, 20843, 41, 40, 20061, 41, 40, 21313,
+ 41, 40, 26376, 41, 40, 28779, 41, 40, 27700, 41, 40, 26408, 41, 40,
+ 37329, 41, 40, 22303, 41, 40, 26085, 41, 40, 26666, 41, 40, 26377,
+ 41, 40, 31038, 41, 40, 21517, 41, 40, 29305, 41, 40, 36001, 41, 40,
+ 31069, 41, 40, 21172, 41, 40, 20195, 41, 40, 21628, 41, 40, 23398,
+ 41, 40, 30435, 41, 40, 20225, 41, 40, 36039, 41, 40, 21332, 41, 40,
+ 31085, 41, 40, 20241, 41, 40, 33258, 41, 40, 33267, 41, 80, 84, 69,
+ 50, 49, 50, 50, 50, 51, 50, 52, 50, 53, 50, 54, 50, 55, 50, 56, 50,
+ 57, 51, 48, 51, 49, 51, 50, 51, 51, 51, 52, 51, 53, 4352, 4449, 4354,
+ 4449, 4355, 4449, 4357, 4449, 4358, 4449, 4359, 4449, 4361, 4449, 4363,
+ 4449, 4364, 4449, 4366, 4449, 4367, 4449, 4368, 4449, 4369, 4449, 4370,
+ 4449, 4366, 4449, 4535, 4352, 4457, 4364, 4462, 4363, 4468, 20116,
+ 20845, 19971, 20061, 26666, 26377, 31038, 21517, 29305, 36001, 31069,
+ 21172, 31192, 30007, 36969, 20778, 21360, 27880, 38917, 20241, 20889,
+ 27491, 24038, 21491, 21307, 23447, 23398, 30435, 20225, 36039, 21332,
+ 22812, 51, 54, 51, 55, 51, 56, 51, 57, 52, 48, 52, 49, 52, 50, 52,
+ 51, 52, 52, 52, 53, 52, 54, 52, 55, 52, 56, 52, 57, 53, 48, 49, 26376,
+ 50, 26376, 51, 26376, 52, 26376, 53, 26376, 54, 26376, 55, 26376, 56,
+ 26376, 57, 26376, 49, 48, 26376, 49, 49, 26376, 49, 50, 26376, 72,
+ 103, 101, 114, 103, 101, 86, 76, 84, 68, 12450, 12452, 12454, 12456,
+ 12458, 12459, 12461, 12463, 12465, 12467, 12469, 12471, 12473, 12475,
+ 12477, 12479, 12481, 12484, 12486, 12488, 12490, 12491, 12492, 12493,
+ 12494, 12495, 12498, 12501, 12504, 12507, 12510, 12511, 12512, 12513,
+ 12514, 12516, 12518, 12520, 12521, 12522, 12523, 12524, 12525, 12527,
+ 12528, 12529, 12530, 12450, 12497, 12540, 12488, 12450, 12523, 12501,
+ 12449, 12450, 12531, 12506, 12450, 12450, 12540, 12523, 12452, 12491,
+ 12531, 12464, 12452, 12531, 12481, 12454, 12457, 12531, 12456, 12473,
+ 12463, 12540, 12489, 12456, 12540, 12459, 12540, 12458, 12531, 12473,
+ 12458, 12540, 12512, 12459, 12452, 12522, 12459, 12521, 12483, 12488,
+ 12459, 12525, 12522, 12540, 12459, 12441, 12525, 12531, 12459, 12441,
+ 12531, 12510, 12461, 12441, 12460, 12461, 12441, 12491, 12540, 12461,
+ 12517, 12522, 12540, 12461, 12441, 12523, 12480, 12540, 12461, 12525,
12461, 12525, 12464, 12521, 12512, 12461, 12525, 12513, 12540, 12488,
- 12523, 12461, 12525, 12527, 12483, 12488, 12464, 12521, 12512, 12464,
- 12521, 12512, 12488, 12531, 12463, 12523, 12476, 12452, 12525, 12463,
- 12525, 12540, 12493, 12465, 12540, 12473, 12467, 12523, 12490, 12467,
- 12540, 12509, 12469, 12452, 12463, 12523, 12469, 12531, 12481, 12540,
- 12512, 12471, 12522, 12531, 12464, 12475, 12531, 12481, 12475, 12531,
- 12488, 12480, 12540, 12473, 12487, 12471, 12489, 12523, 12488, 12531,
- 12490, 12494, 12494, 12483, 12488, 12495, 12452, 12484, 12497, 12540,
- 12475, 12531, 12488, 12497, 12540, 12484, 12496, 12540, 12524, 12523,
- 12500, 12450, 12473, 12488, 12523, 12500, 12463, 12523, 12500, 12467,
- 12499, 12523, 12501, 12449, 12521, 12483, 12489, 12501, 12451, 12540,
- 12488, 12502, 12483, 12471, 12455, 12523, 12501, 12521, 12531, 12504,
- 12463, 12479, 12540, 12523, 12506, 12477, 12506, 12491, 12498, 12504,
- 12523, 12484, 12506, 12531, 12473, 12506, 12540, 12472, 12505, 12540,
- 12479, 12509, 12452, 12531, 12488, 12508, 12523, 12488, 12507, 12531,
- 12509, 12531, 12489, 12507, 12540, 12523, 12507, 12540, 12531, 12510,
- 12452, 12463, 12525, 12510, 12452, 12523, 12510, 12483, 12495, 12510,
- 12523, 12463, 12510, 12531, 12471, 12519, 12531, 12511, 12463, 12525,
- 12531, 12511, 12522, 12511, 12522, 12496, 12540, 12523, 12513, 12460,
- 12513, 12460, 12488, 12531, 12513, 12540, 12488, 12523, 12516, 12540,
- 12489, 12516, 12540, 12523, 12518, 12450, 12531, 12522, 12483, 12488,
- 12523, 12522, 12521, 12523, 12500, 12540, 12523, 12540, 12502, 12523,
- 12524, 12512, 12524, 12531, 12488, 12466, 12531, 12527, 12483, 12488,
- 48, 28857, 49, 28857, 50, 28857, 51, 28857, 52, 28857, 53, 28857, 54,
- 28857, 55, 28857, 56, 28857, 57, 28857, 49, 48, 28857, 49, 49, 28857,
- 49, 50, 28857, 49, 51, 28857, 49, 52, 28857, 49, 53, 28857, 49, 54,
- 28857, 49, 55, 28857, 49, 56, 28857, 49, 57, 28857, 50, 48, 28857,
- 50, 49, 28857, 50, 50, 28857, 50, 51, 28857, 50, 52, 28857, 104, 80,
- 97, 100, 97, 65, 85, 98, 97, 114, 111, 86, 112, 99, 100, 109, 100,
- 109, 178, 100, 109, 179, 73, 85, 24179, 25104, 26157, 21644, 22823,
+ 12523, 12461, 12525, 12527, 12483, 12488, 12463, 12441, 12521, 12512,
+ 12463, 12441, 12521, 12512, 12488, 12531, 12463, 12523, 12476, 12452,
+ 12525, 12463, 12525, 12540, 12493, 12465, 12540, 12473, 12467, 12523,
+ 12490, 12467, 12540, 12509, 12469, 12452, 12463, 12523, 12469, 12531,
+ 12481, 12540, 12512, 12471, 12522, 12531, 12464, 12475, 12531, 12481,
+ 12475, 12531, 12488, 12479, 12441, 12540, 12473, 12486, 12441, 12471,
+ 12488, 12441, 12523, 12488, 12531, 12490, 12494, 12494, 12483, 12488,
+ 12495, 12452, 12484, 12495, 12442, 12540, 12475, 12531, 12488, 12495,
+ 12442, 12540, 12484, 12495, 12441, 12540, 12524, 12523, 12498, 12442,
+ 12450, 12473, 12488, 12523, 12498, 12442, 12463, 12523, 12498, 12442,
+ 12467, 12498, 12441, 12523, 12501, 12449, 12521, 12483, 12489, 12501,
+ 12451, 12540, 12488, 12501, 12441, 12483, 12471, 12455, 12523, 12501,
+ 12521, 12531, 12504, 12463, 12479, 12540, 12523, 12504, 12442, 12477,
+ 12504, 12442, 12491, 12498, 12504, 12523, 12484, 12504, 12442, 12531,
+ 12473, 12504, 12442, 12540, 12472, 12504, 12441, 12540, 12479, 12507,
+ 12442, 12452, 12531, 12488, 12507, 12441, 12523, 12488, 12507, 12531,
+ 12507, 12442, 12531, 12489, 12507, 12540, 12523, 12507, 12540, 12531,
+ 12510, 12452, 12463, 12525, 12510, 12452, 12523, 12510, 12483, 12495,
+ 12510, 12523, 12463, 12510, 12531, 12471, 12519, 12531, 12511, 12463,
+ 12525, 12531, 12511, 12522, 12511, 12522, 12496, 12540, 12523, 12513,
+ 12460, 12513, 12460, 12488, 12531, 12513, 12540, 12488, 12523, 12516,
+ 12540, 12489, 12516, 12540, 12523, 12518, 12450, 12531, 12522, 12483,
+ 12488, 12523, 12522, 12521, 12523, 12500, 12540, 12523, 12540, 12502,
+ 12523, 12524, 12512, 12524, 12531, 12488, 12466, 12531, 12527, 12483,
+ 12488, 48, 28857, 49, 28857, 50, 28857, 51, 28857, 52, 28857, 53, 28857,
+ 54, 28857, 55, 28857, 56, 28857, 57, 28857, 49, 48, 28857, 49, 49,
+ 28857, 49, 50, 28857, 49, 51, 28857, 49, 52, 28857, 49, 53, 28857,
+ 49, 54, 28857, 49, 55, 28857, 49, 56, 28857, 49, 57, 28857, 50, 48,
+ 28857, 50, 49, 28857, 50, 50, 28857, 50, 51, 28857, 50, 52, 28857,
+ 104, 80, 97, 100, 97, 65, 85, 98, 97, 114, 111, 86, 112, 99, 100, 109,
+ 100, 109, 178, 100, 109, 179, 73, 85, 24179, 25104, 26157, 21644, 22823,
27491, 26126, 27835, 26666, 24335, 20250, 31038, 112, 65, 110, 65,
956, 65, 109, 65, 107, 65, 75, 66, 77, 66, 71, 66, 99, 97, 108, 107,
99, 97, 108, 112, 70, 110, 70, 956, 70, 956, 103, 109, 103, 107, 103,
@@ -1209,92 +1205,88 @@ static int decompList[] = {
31118, 31296, 31361, 31680, 32265, 32321, 32626, 32773, 33261, 33401,
33879, 35088, 35222, 35585, 35641, 36051, 36104, 36790, 38627, 38911,
38971, 102, 102, 102, 105, 102, 108, 102, 102, 105, 102, 102, 108,
- 383, 116, 115, 116, 1396, 1398, 1396, 1381, 1396, 1387, 1406, 1398,
- 1396, 1389, 1497, 1460, 1522, 1463, 1506, 1492, 1499, 1500, 1501, 1512,
- 1514, 1513, 1473, 1513, 1474, 64329, 1473, 64329, 1474, 1488, 1463,
- 1488, 1464, 1488, 1468, 1489, 1468, 1490, 1468, 1491, 1468, 1492, 1468,
- 1493, 1468, 1494, 1468, 1496, 1468, 1497, 1468, 1498, 1468, 1499, 1468,
- 1500, 1468, 1502, 1468, 1504, 1468, 1505, 1468, 1507, 1468, 1508, 1468,
- 1510, 1468, 1511, 1468, 1512, 1468, 1513, 1468, 1514, 1468, 1493, 1465,
- 1489, 1471, 1499, 1471, 1508, 1471, 1488, 1500, 1649, 1659, 1662, 1664,
- 1658, 1663, 1657, 1700, 1702, 1668, 1667, 1670, 1671, 1677, 1676, 1678,
- 1672, 1688, 1681, 1705, 1711, 1715, 1713, 1722, 1723, 1728, 1729, 1726,
- 1746, 1747, 1709, 1735, 1734, 1736, 1655, 1739, 1733, 1737, 1744, 1609,
- 1574, 1575, 1574, 1749, 1574, 1608, 1574, 1735, 1574, 1734, 1574, 1736,
- 1574, 1744, 1574, 1609, 1740, 1574, 1580, 1574, 1581, 1574, 1605, 1574,
- 1610, 1576, 1580, 1576, 1581, 1576, 1582, 1576, 1605, 1576, 1609, 1576,
- 1610, 1578, 1580, 1578, 1581, 1578, 1582, 1578, 1605, 1578, 1609, 1578,
- 1610, 1579, 1580, 1579, 1605, 1579, 1609, 1579, 1610, 1580, 1581, 1580,
- 1605, 1581, 1580, 1581, 1605, 1582, 1580, 1582, 1581, 1582, 1605, 1587,
- 1580, 1587, 1581, 1587, 1582, 1587, 1605, 1589, 1581, 1589, 1605, 1590,
- 1580, 1590, 1581, 1590, 1582, 1590, 1605, 1591, 1581, 1591, 1605, 1592,
- 1605, 1593, 1580, 1593, 1605, 1594, 1580, 1594, 1605, 1601, 1580, 1601,
- 1581, 1601, 1582, 1601, 1605, 1601, 1609, 1601, 1610, 1602, 1581, 1602,
- 1605, 1602, 1609, 1602, 1610, 1603, 1575, 1603, 1580, 1603, 1581, 1603,
- 1582, 1603, 1604, 1603, 1605, 1603, 1609, 1603, 1610, 1604, 1580, 1604,
- 1581, 1604, 1582, 1604, 1605, 1604, 1609, 1604, 1610, 1605, 1580, 1605,
- 1581, 1605, 1582, 1605, 1605, 1605, 1609, 1605, 1610, 1606, 1580, 1606,
- 1581, 1606, 1582, 1606, 1605, 1606, 1609, 1606, 1610, 1607, 1580, 1607,
- 1605, 1607, 1609, 1607, 1610, 1610, 1580, 1610, 1581, 1610, 1582, 1610,
- 1605, 1610, 1609, 1610, 1610, 1584, 1648, 1585, 1648, 1609, 1648, 32,
- 1612, 1617, 32, 1613, 1617, 32, 1614, 1617, 32, 1615, 1617, 32, 1616,
- 1617, 32, 1617, 1648, 1574, 1585, 1574, 1586, 1574, 1606, 1576, 1585,
- 1576, 1586, 1576, 1606, 1578, 1585, 1578, 1586, 1578, 1606, 1579, 1585,
- 1579, 1586, 1579, 1606, 1605, 1575, 1606, 1585, 1606, 1586, 1606, 1606,
- 1610, 1585, 1610, 1586, 1610, 1606, 1574, 1582, 1574, 1607, 1576, 1607,
- 1578, 1607, 1589, 1582, 1604, 1607, 1606, 1607, 1607, 1648, 1610, 1607,
- 1579, 1607, 1587, 1607, 1588, 1605, 1588, 1607, 1600, 1614, 1617, 1600,
- 1615, 1617, 1600, 1616, 1617, 1591, 1609, 1591, 1610, 1593, 1609, 1593,
- 1610, 1594, 1609, 1594, 1610, 1587, 1609, 1587, 1610, 1588, 1609, 1588,
- 1610, 1581, 1609, 1581, 1610, 1580, 1609, 1580, 1610, 1582, 1609, 1582,
- 1610, 1589, 1609, 1589, 1610, 1590, 1609, 1590, 1610, 1588, 1580, 1588,
- 1581, 1588, 1582, 1588, 1585, 1587, 1585, 1589, 1585, 1590, 1585, 1575,
- 1611, 1578, 1580, 1605, 1578, 1581, 1580, 1578, 1581, 1605, 1578, 1582,
- 1605, 1578, 1605, 1580, 1578, 1605, 1581, 1578, 1605, 1582, 1580, 1605,
- 1581, 1581, 1605, 1610, 1581, 1605, 1609, 1587, 1581, 1580, 1587, 1580,
- 1581, 1587, 1580, 1609, 1587, 1605, 1581, 1587, 1605, 1580, 1587, 1605,
- 1605, 1589, 1581, 1581, 1589, 1605, 1605, 1588, 1581, 1605, 1588, 1580,
- 1610, 1588, 1605, 1582, 1588, 1605, 1605, 1590, 1581, 1609, 1590, 1582,
- 1605, 1591, 1605, 1581, 1591, 1605, 1605, 1591, 1605, 1610, 1593, 1580,
- 1605, 1593, 1605, 1605, 1593, 1605, 1609, 1594, 1605, 1605, 1594, 1605,
- 1610, 1594, 1605, 1609, 1601, 1582, 1605, 1602, 1605, 1581, 1602, 1605,
- 1605, 1604, 1581, 1605, 1604, 1581, 1610, 1604, 1581, 1609, 1604, 1580,
- 1580, 1604, 1582, 1605, 1604, 1605, 1581, 1605, 1581, 1580, 1605, 1581,
- 1605, 1605, 1581, 1610, 1605, 1580, 1581, 1605, 1580, 1605, 1605, 1582,
- 1580, 1605, 1582, 1605, 1605, 1580, 1582, 1607, 1605, 1580, 1607, 1605,
- 1605, 1606, 1581, 1605, 1606, 1581, 1609, 1606, 1580, 1605, 1606, 1580,
- 1609, 1606, 1605, 1610, 1606, 1605, 1609, 1610, 1605, 1605, 1576, 1582,
- 1610, 1578, 1580, 1610, 1578, 1580, 1609, 1578, 1582, 1610, 1578, 1582,
- 1609, 1578, 1605, 1610, 1578, 1605, 1609, 1580, 1605, 1610, 1580, 1581,
- 1609, 1580, 1605, 1609, 1587, 1582, 1609, 1589, 1581, 1610, 1588, 1581,
- 1610, 1590, 1581, 1610, 1604, 1580, 1610, 1604, 1605, 1610, 1610, 1581,
- 1610, 1610, 1580, 1610, 1610, 1605, 1610, 1605, 1605, 1610, 1602, 1605,
- 1610, 1606, 1581, 1610, 1593, 1605, 1610, 1603, 1605, 1610, 1606, 1580,
- 1581, 1605, 1582, 1610, 1604, 1580, 1605, 1603, 1605, 1605, 1580, 1581,
- 1610, 1581, 1580, 1610, 1605, 1580, 1610, 1601, 1605, 1610, 1576, 1581,
- 1610, 1587, 1582, 1610, 1606, 1580, 1610, 1589, 1604, 1746, 1602, 1604,
- 1746, 1575, 1604, 1604, 1607, 1575, 1603, 1576, 1585, 1605, 1581, 1605,
- 1583, 1589, 1604, 1593, 1605, 1585, 1587, 1608, 1604, 1593, 1604, 1610,
- 1607, 1608, 1587, 1604, 1605, 1589, 1604, 1609, 1589, 1604, 1609, 32,
- 1575, 1604, 1604, 1607, 32, 1593, 1604, 1610, 1607, 32, 1608, 1587,
+ 115, 116, 1396, 1398, 1396, 1381, 1396, 1387, 1406, 1398, 1396, 1389,
+ 1497, 1460, 1522, 1463, 1506, 1492, 1499, 1500, 1501, 1512, 1514, 1513,
+ 1473, 1513, 1474, 1513, 1468, 1473, 1513, 1468, 1474, 1488, 1463, 1488,
+ 1464, 1488, 1468, 1489, 1468, 1490, 1468, 1491, 1468, 1492, 1468, 1493,
+ 1468, 1494, 1468, 1496, 1468, 1497, 1468, 1498, 1468, 1499, 1468, 1500,
+ 1468, 1502, 1468, 1504, 1468, 1505, 1468, 1507, 1468, 1508, 1468, 1510,
+ 1468, 1511, 1468, 1512, 1468, 1513, 1468, 1514, 1468, 1493, 1465, 1489,
+ 1471, 1499, 1471, 1508, 1471, 1488, 1500, 1649, 1659, 1662, 1664, 1658,
+ 1663, 1657, 1700, 1702, 1668, 1667, 1670, 1671, 1677, 1676, 1678, 1672,
+ 1688, 1681, 1705, 1711, 1715, 1713, 1722, 1723, 1729, 1726, 1746, 1709,
+ 1735, 1734, 1736, 1739, 1733, 1737, 1744, 1609, 1610, 1620, 1575, 1610,
+ 1620, 1749, 1610, 1620, 1608, 1610, 1620, 1735, 1610, 1620, 1734, 1610,
+ 1620, 1736, 1610, 1620, 1744, 1610, 1620, 1609, 1740, 1610, 1620, 1580,
+ 1610, 1620, 1581, 1610, 1620, 1605, 1610, 1620, 1610, 1576, 1580, 1576,
+ 1581, 1576, 1582, 1576, 1605, 1576, 1609, 1576, 1610, 1578, 1580, 1578,
+ 1581, 1578, 1582, 1578, 1605, 1578, 1609, 1578, 1610, 1579, 1580, 1579,
+ 1605, 1579, 1609, 1579, 1610, 1580, 1581, 1580, 1605, 1581, 1580, 1581,
+ 1605, 1582, 1580, 1582, 1581, 1582, 1605, 1587, 1580, 1587, 1581, 1587,
+ 1582, 1587, 1605, 1589, 1581, 1589, 1605, 1590, 1580, 1590, 1581, 1590,
+ 1582, 1590, 1605, 1591, 1581, 1591, 1605, 1592, 1605, 1593, 1580, 1593,
+ 1605, 1594, 1580, 1594, 1605, 1601, 1580, 1601, 1581, 1601, 1582, 1601,
+ 1605, 1601, 1609, 1601, 1610, 1602, 1581, 1602, 1605, 1602, 1609, 1602,
+ 1610, 1603, 1575, 1603, 1580, 1603, 1581, 1603, 1582, 1603, 1604, 1603,
+ 1605, 1603, 1609, 1603, 1610, 1604, 1580, 1604, 1581, 1604, 1582, 1604,
+ 1605, 1604, 1609, 1604, 1610, 1605, 1580, 1605, 1581, 1605, 1582, 1605,
+ 1605, 1605, 1609, 1605, 1610, 1606, 1580, 1606, 1581, 1606, 1582, 1606,
+ 1605, 1606, 1609, 1606, 1610, 1607, 1580, 1607, 1605, 1607, 1609, 1607,
+ 1610, 1610, 1580, 1610, 1581, 1610, 1582, 1610, 1605, 1610, 1609, 1610,
+ 1610, 1584, 1648, 1585, 1648, 1609, 1648, 32, 1612, 1617, 32, 1613,
+ 1617, 32, 1614, 1617, 32, 1615, 1617, 32, 1616, 1617, 32, 1617, 1648,
+ 1610, 1620, 1585, 1610, 1620, 1586, 1610, 1620, 1606, 1576, 1585, 1576,
+ 1586, 1576, 1606, 1578, 1585, 1578, 1586, 1578, 1606, 1579, 1585, 1579,
+ 1586, 1579, 1606, 1605, 1575, 1606, 1585, 1606, 1586, 1606, 1606, 1610,
+ 1585, 1610, 1586, 1610, 1606, 1610, 1620, 1582, 1610, 1620, 1607, 1576,
+ 1607, 1578, 1607, 1589, 1582, 1604, 1607, 1606, 1607, 1607, 1648, 1610,
+ 1607, 1579, 1607, 1587, 1607, 1588, 1605, 1588, 1607, 1600, 1614, 1617,
+ 1600, 1615, 1617, 1600, 1616, 1617, 1591, 1609, 1591, 1610, 1593, 1609,
+ 1593, 1610, 1594, 1609, 1594, 1610, 1587, 1609, 1587, 1610, 1588, 1609,
+ 1588, 1610, 1581, 1609, 1581, 1610, 1580, 1609, 1580, 1610, 1582, 1609,
+ 1582, 1610, 1589, 1609, 1589, 1610, 1590, 1609, 1590, 1610, 1588, 1580,
+ 1588, 1581, 1588, 1582, 1588, 1585, 1587, 1585, 1589, 1585, 1590, 1585,
+ 1575, 1611, 1578, 1580, 1605, 1578, 1581, 1580, 1578, 1581, 1605, 1578,
+ 1582, 1605, 1578, 1605, 1580, 1578, 1605, 1581, 1578, 1605, 1582, 1580,
+ 1605, 1581, 1581, 1605, 1610, 1581, 1605, 1609, 1587, 1581, 1580, 1587,
+ 1580, 1581, 1587, 1580, 1609, 1587, 1605, 1581, 1587, 1605, 1580, 1587,
+ 1605, 1605, 1589, 1581, 1581, 1589, 1605, 1605, 1588, 1581, 1605, 1588,
+ 1580, 1610, 1588, 1605, 1582, 1588, 1605, 1605, 1590, 1581, 1609, 1590,
+ 1582, 1605, 1591, 1605, 1581, 1591, 1605, 1605, 1591, 1605, 1610, 1593,
+ 1580, 1605, 1593, 1605, 1605, 1593, 1605, 1609, 1594, 1605, 1605, 1594,
+ 1605, 1610, 1594, 1605, 1609, 1601, 1582, 1605, 1602, 1605, 1581, 1602,
+ 1605, 1605, 1604, 1581, 1605, 1604, 1581, 1610, 1604, 1581, 1609, 1604,
+ 1580, 1580, 1604, 1582, 1605, 1604, 1605, 1581, 1605, 1581, 1580, 1605,
+ 1581, 1605, 1605, 1581, 1610, 1605, 1580, 1581, 1605, 1580, 1605, 1605,
+ 1582, 1580, 1605, 1582, 1605, 1605, 1580, 1582, 1607, 1605, 1580, 1607,
+ 1605, 1605, 1606, 1581, 1605, 1606, 1581, 1609, 1606, 1580, 1605, 1606,
+ 1580, 1609, 1606, 1605, 1610, 1606, 1605, 1609, 1610, 1605, 1605, 1576,
+ 1582, 1610, 1578, 1580, 1610, 1578, 1580, 1609, 1578, 1582, 1610, 1578,
+ 1582, 1609, 1578, 1605, 1610, 1578, 1605, 1609, 1580, 1605, 1610, 1580,
+ 1581, 1609, 1580, 1605, 1609, 1587, 1582, 1609, 1589, 1581, 1610, 1588,
+ 1581, 1610, 1590, 1581, 1610, 1604, 1580, 1610, 1604, 1605, 1610, 1610,
+ 1581, 1610, 1610, 1580, 1610, 1610, 1605, 1610, 1605, 1605, 1610, 1602,
+ 1605, 1610, 1606, 1581, 1610, 1593, 1605, 1610, 1603, 1605, 1610, 1606,
+ 1580, 1581, 1605, 1582, 1610, 1604, 1580, 1605, 1603, 1605, 1605, 1580,
+ 1581, 1610, 1581, 1580, 1610, 1605, 1580, 1610, 1601, 1605, 1610, 1576,
+ 1581, 1610, 1587, 1582, 1610, 1606, 1580, 1610, 1589, 1604, 1746, 1602,
+ 1604, 1746, 1575, 1604, 1604, 1607, 1575, 1603, 1576, 1585, 1605, 1581,
+ 1605, 1583, 1589, 1604, 1593, 1605, 1585, 1587, 1608, 1604, 1593, 1604,
+ 1610, 1607, 1608, 1587, 1604, 1605, 1589, 1604, 1609, 1589, 1604, 1609,
+ 32, 1575, 1604, 1604, 1607, 32, 1593, 1604, 1610, 1607, 32, 1608, 1587,
1604, 1605, 1580, 1604, 32, 1580, 1604, 1575, 1604, 1607, 1585, 1740,
- 1575, 1604, 8229, 8212, 8211, 95, 123, 125, 12308, 12309, 12304, 12305,
- 12298, 12299, 12300, 12301, 12302, 12303, 91, 93, 8254, 44, 12289,
- 58, 63, 33, 35, 38, 42, 45, 60, 62, 92, 36, 37, 64, 32, 1611, 1600,
- 1611, 32, 1612, 32, 1613, 32, 1614, 1600, 1614, 32, 1615, 1600, 1615,
- 32, 1616, 1600, 1616, 32, 1617, 1600, 1617, 32, 1618, 1600, 1618, 1569,
- 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581,
- 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593,
- 1594, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1610, 1604, 1570,
- 1604, 1571, 1604, 1573, 1604, 1575, 34, 39, 47, 94, 124, 126, 10629,
- 10630, 12290, 12539, 12449, 12451, 12453, 12455, 12457, 12515, 12517,
- 12519, 12483, 12540, 12531, 12441, 12442, 12644, 12593, 12594, 12595,
- 12596, 12597, 12598, 12599, 12600, 12601, 12602, 12603, 12604, 12605,
- 12606, 12607, 12608, 12609, 12610, 12611, 12612, 12613, 12614, 12615,
- 12616, 12617, 12618, 12619, 12620, 12621, 12622, 12623, 12624, 12625,
- 12626, 12627, 12628, 12629, 12630, 12631, 12632, 12633, 12634, 12635,
- 12636, 12637, 12638, 12639, 12640, 12641, 12642, 12643, 162, 163, 172,
- 175, 166, 165, 8361, 9474, 8592, 8593, 8594, 8595, 9632, 9675
+ 1575, 1604, 8212, 8211, 95, 123, 125, 12308, 12309, 12304, 12305, 12298,
+ 12299, 12300, 12301, 12302, 12303, 91, 93, 44, 12289, 58, 63, 33, 35,
+ 38, 42, 45, 60, 62, 92, 36, 37, 64, 32, 1611, 1600, 1611, 32, 1612,
+ 32, 1613, 32, 1614, 1600, 1614, 32, 1615, 1600, 1615, 32, 1616, 1600,
+ 1616, 32, 1617, 1600, 1617, 32, 1618, 1600, 1618, 1569, 1575, 1576,
+ 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588,
+ 1589, 1590, 1591, 1592, 1593, 1594, 1601, 1602, 1603, 1604, 1605, 1606,
+ 1607, 1608, 1610, 1604, 1570, 1604, 1571, 1604, 1573, 1604, 1575, 34,
+ 39, 47, 94, 124, 126, 10629, 10630, 12290, 12539, 12449, 12451, 12453,
+ 12455, 12457, 12515, 12517, 12519, 12483, 12540, 12531, 12441, 12442,
+ 162, 163, 172, 166, 165, 8361, 9474, 8592, 8593, 8594, 8595, 9632,
+ 9675
};
diff --git a/src/stringprep/uni_parse2.tcl b/src/stringprep/uni_parse2.tcl
index 456b9d13..2f3ef7ec 100644
--- a/src/stringprep/uni_parse2.tcl
+++ b/src/stringprep/uni_parse2.tcl
@@ -283,6 +283,12 @@ proc uni::buildTables {} {
if {[info exists decomp_map($i)]} {
set decomp $decomp_map($i)
+ #puts -$decomp
+ while {[info exists decomp_map([set ch1 [lindex $decomp 0]])]} {
+ set decomp [concat $decomp_map($ch1) [lreplace $decomp 0 0]]
+ #puts +$decomp
+ }
+
if {[info exists decomp_used($decomp)]} {
lappend decomp_info $decomp_used($decomp)
} else {
@@ -442,75 +448,6 @@ static unsigned char cclassGroupMap\[\] = {"
puts $f $line
puts $f "};
-/*
- * Each group represents a unique set of character attributes. The attributes
- * are encoded into a 32-bit value as follows:
- *
- * Bits 0-4 Character category: see the constants listed below.
- *
- * Bits 5-7 Case delta type: 000 = identity
- * 010 = add delta for lower
- * 011 = add delta for lower, add 1 for title
- * 100 = sutract delta for title/upper
- * 101 = sub delta for upper, sub 1 for title
- * 110 = sub delta for upper, add delta for lower
- *
- * Bits 8-21 Reserved for future use.
- *
- * Bits 22-31 Case delta: delta for case conversions. This should be the
- * highest field so we can easily sign extend.
- */
-
-static int cclass_groups\[\] = {"
- set line " "
- set last [expr {[llength $groups] - 1}]
- for {set i 0} {$i <= $last} {incr i} {
- foreach {type toupper tolower totitle} [split [lindex $groups $i] ,] {}
-
- # Compute the case conversion type and delta
-
- if {$totitle != ""} {
- if {$totitle == $toupper} {
- # subtract delta for title or upper
- set case 4
- set delta $toupper
- } elseif {$toupper != ""} {
- # subtract delta for upper, subtract 1 for title
- set case 5
- set delta $toupper
- } else {
- # add delta for lower, add 1 for title
- set case 3
- set delta $tolower
- }
- } elseif {$toupper != ""} {
- # subtract delta for upper, add delta for lower
- set case 6
- set delta $toupper
- } elseif {$tolower != ""} {
- # add delta for lower
- set case 2
- set delta $tolower
- } else {
- # noop
- set case 0
- set delta 0
- }
-
- set val [expr {($delta << 22) | ($case << 5) | $type}]
-
- append line [format "%d" $val]
- if {$i != $last} {
- append line ", "
- }
- if {[string length $line] > 65} {
- puts $f $line
- set line " "
- }
- }
- puts $f $line
- puts $f "};
-
#define GetUniCharCClass(ch) (cclassGroupMap\[(cclassPageMap\[(((int)(ch)) & 0xffff) >> CCLASS_OFFSET_BITS\] << CCLASS_OFFSET_BITS) | ((ch) & ((1 << CCLASS_OFFSET_BITS)-1))\])