<?xml version="1.0"?>

<!DOCTYPE MOO [
 
<!ELEMENT MOO (OBJECT*)>
<!ELEMENT OBJECT (NAME, PROPERTY*, VERB*, OBJECT*)>
<!ELEMENT VERB (NAME, CODE)>
<!ELEMENT PROPERTY (NAME, VALUE?)>
<!ELEMENT CODE (#PCDATA)>
<!ELEMENT VALUE (#PCDATA)>
<!ELEMENT NAME (#PCDATA)>

<!ATTLIST OBJECT
  ID ID #REQUIRED
  FLAGS NMTOKENS #IMPLIED
  OWNER CDATA #REQUIRED
  LOCATION CDATA #REQUIRED
>
<!ATTLIST VERB
  OWNER CDATA #REQUIRED
  PERMS NMTOKENS #IMPLIED
  DOBJ CDATA #REQUIRED
  IOBJ CDATA #REQUIRED
  PREP CDATA #REQUIRED
>
<!ATTLIST PROPERTY
  OWNER CDATA #REQUIRED
  PERMS NMTOKENS #IMPLIED
>

]>
<!-- ** LambdaMOO Database, Format Version 4 ** -->
<MOO>
  <OBJECT ID="obj1" FLAGS="f r" OWNER="obj2" LOCATION="obj-1">
    <NAME>Root Class</NAME>
    <PROPERTY OWNER="obj2" PERMS="c">
      <NAME>key</NAME>
      <VALUE>0</VALUE>
    </PROPERTY>
    <PROPERTY OWNER="obj2" PERMS="c r">
      <NAME>aliases</NAME>
      <VALUE>{}</VALUE>
    </PROPERTY>
    <PROPERTY OWNER="obj2" PERMS="c r">
      <NAME>description</NAME>
      <VALUE>""</VALUE>
    </PROPERTY>
    <PROPERTY OWNER="obj36" PERMS="r">
      <NAME>object_size</NAME>
      <VALUE>{21823, 919123664}</VALUE>
    </PROPERTY>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>initialize</NAME>
      <CODE>
        if (typeof(this.owner.owned_objects) == LIST)
        this.owner.owned_objects = setadd(this.owner.owned_objects, this);
        endif
        if ((caller == this) || $perm_utils:controls(caller_perms(), this))
        if (is_clear_property(this, "object_size"))
        "If this isn't clear, then we're being hacked.";
        this.object_size = {0, 0};
        endif
        this.key = 0;
        else
        return E_PERM;
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>recycle</NAME>
      <CODE>
        if ((caller == this) || $perm_utils:controls(caller_perms(), this))
        try
        if ((typeof(this.owner.owned_objects) == LIST) &amp;&amp; (!is_clear_property(this.owner, "owned_objects")))
        this.owner.owned_objects = setremove(this.owner.owned_objects, this);
        $recycler.lost_souls = setadd($recycler.lost_souls, this);
        endif
        except (ANY)
        "Oy, doesn't have a .owned_objects??, or maybe .owner is $nothing";
        "Should probably do something...like send mail somewhere.";
        endtry
        else
        return E_PERM;
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>set_name</NAME>
      <CODE>
        "set_name(newname) attempts to change this.name to newname";
        "  =&gt; E_PERM   if you don't own this or aren't its parent, or are a player trying to do an end-run around $player_db...";
        if ((!caller_perms().wizard) &amp;&amp; (is_player(this) || ((caller_perms() != this.owner) &amp;&amp; (this != caller))))
        return E_PERM;
        else
        return (typeof(e = `this.name = args[1] ! ANY') != ERR) || e;
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>title</NAME>
      <CODE>
        return this.name;
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>titlec</NAME>
      <CODE>
        return `this.namec ! E_PROPNF =&gt; $string_utils:capitalize(this:title())';
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>set_aliases</NAME>
      <CODE>
        "set_aliases(alias_list) attempts to change this.aliases to alias_list";
        "  =&gt; E_PERM   if you don't own this or aren't its parent";
        "  =&gt; E_TYPE   if alias_list is not a list";
        "  =&gt; E_INVARG if any element of alias_list is not a string";
        "  =&gt; 1        if aliases are set exactly as expected (default)";
        "  =&gt; 0        if aliases were set differently than expected";
        "              (children with custom :set_aliases should be aware of this)";
        if (!($perm_utils:controls(caller_perms(), this) || (this == caller)))
        return E_PERM;
        elseif (typeof(aliases = args[1]) != LIST)
        return E_TYPE;
        else
        for s in (aliases)
        if (typeof(s) != STR)
        return E_INVARG;
        endif
        endfor
        this.aliases = aliases;
        return 1;
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>match</NAME>
      <CODE>
        c = this:contents();
        return $string_utils:match(args[1], c, "name", c, "aliases");
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>match_object</NAME>
      <CODE>
        ":match_object(string [,who])";
        args[2..1] = {this};
        return $string_utils:match_object(@args);
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>set_description</NAME>
      <CODE>
        "set_description(newdesc) attempts to change this.description to newdesc";
        "  =&gt; E_PERM   if you don't own this or aren't its parent";
        if (!($perm_utils:controls(caller_perms(), this) || (this == caller)))
        return E_PERM;
        elseif (typeof(desc = args[1]) in {LIST, STR})
        this.description = desc;
        return 1;
        else
        return E_TYPE;
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>description</NAME>
      <CODE>
        return this.description;
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>look_self</NAME>
      <CODE>
        desc = this:description();
        if (desc)
        player:tell_lines(desc);
        else
        player:tell("You see nothing special.");
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>notify</NAME>
      <CODE>
        if (is_player(this))
        notify(this, args[1]);
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>tell</NAME>
      <CODE>
        this:notify(tostr(@args));
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>tell_lines</NAME>
      <CODE>
        lines = args[1];
        if (typeof(lines) == LIST)
        for line in (lines)
        this:tell(line);
        endfor
        else
        this:tell(lines);
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>accept</NAME>
      <CODE>
        set_task_perms(caller_perms());
        return this:acceptable(@args);
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>moveto</NAME>
      <CODE>
        set_task_perms(this.owner);
        return `move(this, args[1]) ! ANY';
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>eject eject_nice eject_basic</NAME>
      <CODE>
        "eject(victim) --- usable by the owner of this to remove victim from this.contents.  victim goes to its home if different from here, or $nothing or $player_start according as victim is a player.";
        "eject_basic(victim) --- victim goes to $nothing or $player_start according as victim is a player; victim:moveto is not called.";
        what = args[1];
        nice = verb != "eject_basic";
        perms = caller_perms();
        if ((!perms.wizard) &amp;&amp; (perms != this.owner))
        raise(E_PERM);
        elseif ((!(what in this.contents)) || what.wizard)
        return 0;
        endif
        if ((((nice &amp;&amp; $object_utils:has_property(what, "home")) &amp;&amp; (typeof(where = what.home) == OBJ)) &amp;&amp; (where != this)) &amp;&amp; (is_player(what) ? `where:accept_for_abode(what) ! ANY' | `where:acceptable(what) ! ANY'))
        else
        where = is_player(what) ? $player_start | $nothing;
        endif
        fork (0)
        if (what.location == this)
        "It didn't move when we asked it to, or :moveto is broken. Force it.";
        move(what, where);
        endif
        endfork
        return nice ? `what:moveto(where) ! ANY' | `move(what, where) ! ANY';
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>is_unlocked_for</NAME>
      <CODE>
        return (this.key == 0) || $lock_utils:eval_key(this.key, args[1]);
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>huh</NAME>
      <CODE>
        set_task_perms((caller_perms() != #-1) ? caller_perms() | player);
        $command_utils:do_huh(verb, args);
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>set_message</NAME>
      <CODE>
        ":set_message(msg_name,new_value)";
        "Does the actual dirty work of @&lt;msg_name&gt; object is &lt;new_value&gt;";
        "changing the raw value of the message msg_name to be new_value.";
        "Both msg_name and new_value should be strings, though their interpretation is up to the object itself.";
        " =&gt; error value (use E_PROPNF if msg_name isn't recognized)";
        " =&gt; string error message if something else goes wrong.";
        " =&gt; 1 (true non-string) if the message is successfully set";
        " =&gt; 0 (false non-error) if the message is successfully `cleared'";
        if (!((caller == this) || $perm_utils:controls(caller_perms(), this)))
        return E_PERM;
        else
        return `this.(args[1] + "_msg") = args[2] ! ANY' &amp;&amp; 1;
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>do_examine</NAME>
      <CODE>
        "do_examine(examiner)";
        "the guts of examine";
        "call a series of verbs and report their return values to the player";
        who = args[1];
        "if (caller == this || caller == who)";
        if (caller == who)
        "set_task_perms();";
        who:notify_lines(this:examine_names(who) || {});
        "this:examine_names(who);";
        who:notify_lines(this:examine_owner(who) || {});
        "this:examine_owner(who);";
        who:notify_lines(this:examine_desc(who) || {});
        "this:examine_desc(who);";
        who:notify_lines(this:examine_key(who) || {});
        "this:examine_key(who);";
        who:notify_lines(this:examine_contents(who) || {});
        who:notify_lines(this:examine_verbs(who) || {});
        else
        return E_PERM;
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>examine_key</NAME>
      <CODE>
        "examine_key(examiner)";
        "return a list of strings to be told to the player, indicating what the key on this type of object means, and what this object's key is set to.";
        "the default will only tell the key to a wizard or this object's owner.";
        who = args[1];
        if (((caller == this) &amp;&amp; $perm_utils:controls(who, this)) &amp;&amp; (this.key != 0))
        return {tostr("Key:  ", $lock_utils:unparse_key(this.key))};
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>examine_names</NAME>
      <CODE>
        "examine_names(examiner)";
        "Return a list of strings to be told to the player, indicating the name and aliases (and, by default, the object number) of this.";
        return {tostr(this.name, " (aka ", $string_utils:english_list({tostr(this), @this.aliases}), ")")};
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>examine_desc</NAME>
      <CODE>
        "examine_desc(who) - return the description, probably";
        "who is the player examining";
        "this should probably go away";
        desc = this:description();
        if (desc)
        if (typeof(desc) != LIST)
        desc = {desc};
        endif
        return desc;
        else
        return {"(No description set.)"};
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>examine_contents</NAME>
      <CODE>
        "examine_contents(examiner)";
        "by default, calls :tell_contents.";
        "Should probably go away.";
        who = args[1];
        if (caller == this)
        try
        this:tell_contents(this.contents, this.ctype);
        except (ANY)
        "Just ignore it. We shouldn't care about the contents unless the object wants to tell us about them via :tell_contents ($container, $room)";
        endtry
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>examine_verbs</NAME>
      <CODE>
        "Return a list of strings to be told to the player.  Standard format says \"Obvious verbs:\" followed by a series of lines explaining syntax for each usable verb.";
        if (caller != this)
        return E_PERM;
        endif
        who = args[1];
        name = dobjstr;
        vrbs = {};
        commands_ok = `this:examine_commands_ok(who) ! ANY =&gt; 0';
        dull_classes = {$root_class, $room, $player, $prog, $builder};
        what = this;
        hidden_verbs = this:hidden_verbs(who);
        while (what != $nothing)
        $command_utils:suspend_if_needed(0);
        if (!(what in dull_classes))
        for i in [1..length(verbs(what))]
        $command_utils:suspend_if_needed(0);
        info = verb_info(what, i);
        syntax = verb_args(what, i);
        if (this:examine_verb_ok(what, i, info, syntax, commands_ok, hidden_verbs))
        {dobj, prep, iobj} = syntax;
        if (syntax == {"any", "any", "any"})
        prep = "none";
        endif
        if (prep != "none")
        for x in ($string_utils:explode(prep, "/"))
        if (length(x) &lt;= length(prep))
        prep = x;
        endif
        endfor
        endif
        "This is the correct way to handle verbs ending in *";
        vname = info[3];
        while (j = index(vname, "* "))
        vname = tostr(vname[1..j - 1], "&lt;anything&gt;", vname[j + 1..$]);
        endwhile
        if (vname[$] == "*")
        vname = vname[1..$ - 1] + "&lt;anything&gt;";
        endif
        vname = strsub(vname, " ", "/");
        rest = "";
        if (prep != "none")
        rest = " " + ((prep == "any") ? "&lt;anything&gt;" | prep);
        if (iobj != "none")
        rest = tostr(rest, " ", (iobj == "this") ? name | "&lt;anything&gt;");
        endif
        endif
        if (dobj != "none")
        rest = tostr(" ", (dobj == "this") ? name | "&lt;anything&gt;", rest);
        endif
        vrbs = setadd(vrbs, ("  " + vname) + rest);
        endif
        endfor
        endif
        what = parent(what);
        endwhile
        if ($code_utils:verb_or_property(this, "help_msg"))
        vrbs = {@vrbs, tostr("  help ", dobjstr)};
        endif
        return vrbs &amp;&amp; {"Obvious verbs:", @vrbs};
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>get_message</NAME>
      <CODE>
        ":get_message(msg_name)";
        "Use this to obtain a given user-customizable message's raw value, i.e., the value prior to any pronoun-substitution or incorporation of any variant elements --- the value one needs to supply to :set_message().";
        "=&gt; error (use E_PROPNF if msg_name isn't recognized)";
        "=&gt; string or list-of-strings raw value";
        "=&gt; {2, @(list of {msg_name_n,rawvalue_n} pairs to give to :set_message)}";
        "=&gt; {1, other kind of raw value}";
        "=&gt; {E_NONE, error message} ";
        if (!((caller == this) || $perm_utils:controls(caller_perms(), this)))
        return E_PERM;
        elseif (((t = typeof(msg = `this.(args[1] + "_msg") ! ANY')) in {ERR, STR}) || (((t == LIST) &amp;&amp; msg) &amp;&amp; (typeof(msg[1]) == STR)))
        return msg;
        else
        return {1, msg};
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>room_announce*_all_but</NAME>
      <CODE>
        try
        this.location:(verb)(@args);
        except (ANY)
        endtry
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>init_for_core</NAME>
      <CODE>
        if (caller_perms().wizard)
        vnum = 1;
        while (vnum &lt;= length(verbs(this)))
        $command_utils:suspend_if_needed(0);
        info = verb_info(this, vnum)[3];
        if (index(info, "(old)"))
        delete_verb(this, vnum);
        else
        vnum = vnum + 1;
        endif
        endwhile
        if (this == $root_class)
        set_verb_code(this, "initialize", verb_code(this, "initialize(core)"));
        delete_verb(this, "initialize(core)");
        endif
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>contents</NAME>
      <CODE>
        "Returns a list of the objects that are apparently inside this one.  Don't confuse this with .contents, which is a property kept consistent with .location by the server.  This verb should be used in `VR' situations, for instance when looking in a room, and does not necessarily have anything to do with the value of .contents (although the default implementation does).  `Non-VR' commands (like @contents) should look directly at .contents.";
        return this.contents;
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>examine_verb_ok</NAME>
      <CODE>
        "examine_verb_ok(loc, index, info, syntax, commands_ok, hidden_verbs)";
        "loc is the object that defines the verb; index is which verb on the object; info is verb_info; syntax is verb_args; commands_ok is determined by this:commands_ok, probably, but passed in so we don't have to calculate it for each verb.";
        "hidden_verbs is passed in for the same reasons.  It should be a list, each of whose entries is either a string with the full verb name to be hidden (e.g., \"d*rop th*row\") or a list of the form {verb location, full verb name, args}.";
        if ((caller == this) || $perm_utils:controls(caller_perms(), this))
        {loc, index, info, syntax, commands_ok, hidden_verbs} = args;
        vname = info[3];
        return (((((syntax[2..3] != {"none", "this"}) &amp;&amp; (!index(vname, "("))) &amp;&amp; (commands_ok || ("this" in syntax))) &amp;&amp; `verb_code(loc, index) ! ANY') &amp;&amp; (!(vname in hidden_verbs))) &amp;&amp; (!({loc, vname, syntax} in hidden_verbs));
        else
        return E_PERM;
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>is_listening</NAME>
      <CODE>
        "return 1 if the object can hear a :tell, or cares. Useful for active objects that want to stop when nothing is listening.";
        return 0;
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>hidden_verbs</NAME>
      <CODE>
        "hidden_verbs(who)";
        "returns a list of verbs on this that should be hidden from examine";
        "the player who's examining is passed in, so objects can hide verbs from specific players";
        "verbs are returned as {location, full_verb_name, args} or just full_verb_name.  full_verb name is what shows up in verb_info(object, verb)[2], for example \"d*op th*row\".";
        if ((caller == this) || $perm_utils:controls(caller_perms(), this))
        hidden = {};
        what = this;
        while (what != $nothing)
        for i in [1..length(verbs(what))]
        info = verb_info(what, i);
        if (!index(info[2], "r"))
        hidden = setadd(hidden, {what, info[3], verb_args(what, i)});
        endif
        endfor
        what = parent(what);
        endwhile
        return hidden;
        else
        return E_PERM;
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>examine_owner</NAME>
      <CODE>
        "examine_owner(examiner)";
        "Return a list of strings to be told to the player, indicating who owns this.";
        return {tostr("Owned by ", this.owner.name, ".")};
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>announce*_all_but</NAME>
      <CODE>
        return;
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>tell_lines_suspended</NAME>
      <CODE>
        lines = args[1];
        if (typeof(lines) == LIST)
        for line in (lines)
        this:tell(line);
        $command_utils:suspend_if_needed(0);
        endfor
        else
        this:tell(lines);
        endif
      </CODE>
    </VERB>
    <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
      <NAME>acceptable</NAME>
      <CODE>
        return 0;
        "intended as a 'quiet' way to determine if :accept will succeed. Currently, some objects have a noisy :accept verb since it is the only thing that a builtin move() call is guaranteed to call.";
        "if you want to tell, before trying, whether :accept will fail, use :acceptable instead. Normally, they'll do the same thing.";
      </CODE>
    </VERB>
    <OBJECT ID="obj0" FLAGS="r" OWNER="obj2" LOCATION="obj-1">
      <NAME>The System Object</NAME>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>builder</NAME>
        <VALUE>#4</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>login</NAME>
        <VALUE>#10</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>last_huh</NAME>
        <VALUE>#11</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>guest_log</NAME>
        <VALUE>#12</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>last_restart_time</NAME>
        <VALUE>923782066</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>biglist</NAME>
        <VALUE>#13</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>big_mail_recipient</NAME>
        <VALUE>#14</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>limbo</NAME>
        <VALUE>#15</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>registration_db</NAME>
        <VALUE>#16</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>new_player_log</NAME>
        <VALUE>#17</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>verb_help</NAME>
        <VALUE>#18</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>core_help</NAME>
        <VALUE>#19</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>prog_help</NAME>
        <VALUE>#22</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>wiz_help</NAME>
        <VALUE>#23</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>shutdown_task</NAME>
        <VALUE>E_NONE</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>wiz_utils</NAME>
        <VALUE>#24</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>site_db</NAME>
        <VALUE>#25</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>math_utils</NAME>
        <VALUE>#26</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>set_utils</NAME>
        <VALUE>#27</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>builtin_function_help</NAME>
        <VALUE>#28</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>new_prog_log</NAME>
        <VALUE>#29</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>generic_help</NAME>
        <VALUE>#30</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>guest</NAME>
        <VALUE>#31</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>spell</NAME>
        <VALUE>#32</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>seq_utils</NAME>
        <VALUE>#33</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>quota_log</NAME>
        <VALUE>#34</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>you</NAME>
        <VALUE>#35</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>max_seconds</NAME>
        <VALUE>5</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>max_ticks</NAME>
        <VALUE>30000</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>hacker</NAME>
        <VALUE>#36</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>generic_db</NAME>
        <VALUE>#37</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>shutdown_message</NAME>
        <VALUE>"Wizard (#2): updated"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>shutdown_time</NAME>
        <VALUE>919226973</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>no_one</NAME>
        <VALUE>#38</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>player_db</NAME>
        <VALUE>#39</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>class_registry</NAME>
        <VALUE>{{"generics", "Generic objects intended for use as the parents of new objects", {#3, #7, #5, #9, #54, #8, #1, #6, #58, #57, #50, #45, #46}}, {"utilities", "Objects holding useful general-purpose verbs", {#20, #55, #24, #27, #41, #26, #43, #51, #52, #53, #56, #42, #21, #33, #13, #80, #82, #59, #92, #94}}}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>player_class</NAME>
        <VALUE>#40</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>gender_utils</NAME>
        <VALUE>#41</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>trig_utils</NAME>
        <VALUE>#26</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>time_utils</NAME>
        <VALUE>#43</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>editor_help</NAME>
        <VALUE>#44</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>mail_recipient</NAME>
        <VALUE>#45</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>mail_agent</NAME>
        <VALUE>#46</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>mail_editor</NAME>
        <VALUE>#47</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>note_editor</NAME>
        <VALUE>#48</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>verb_editor</NAME>
        <VALUE>#49</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>generic_editor</NAME>
        <VALUE>#50</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>match_utils</NAME>
        <VALUE>#51</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>object_utils</NAME>
        <VALUE>#52</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>lock_utils</NAME>
        <VALUE>#53</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>gripe_recipients</NAME>
        <VALUE>{#2}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>letter</NAME>
        <VALUE>#54</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>dump_interval</NAME>
        <VALUE>3600</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>list_utils</NAME>
        <VALUE>#55</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>command_utils</NAME>
        <VALUE>#56</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>player</NAME>
        <VALUE>#6</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>wiz</NAME>
        <VALUE>#57</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>prog</NAME>
        <VALUE>#58</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>code_utils</NAME>
        <VALUE>#59</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>help</NAME>
        <VALUE>#60</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>nothing</NAME>
        <VALUE>#-1</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>failed_match</NAME>
        <VALUE>#-3</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>ambiguous_match</NAME>
        <VALUE>#-2</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>perm_utils</NAME>
        <VALUE>#42</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>building_utils</NAME>
        <VALUE>#21</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>string_utils</NAME>
        <VALUE>#20</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>news</NAME>
        <VALUE>#61</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>note</NAME>
        <VALUE>#9</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>container</NAME>
        <VALUE>#8</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>thing</NAME>
        <VALUE>#5</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>exit</NAME>
        <VALUE>#7</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>room</NAME>
        <VALUE>#3</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>player_start</NAME>
        <VALUE>#62</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>root_class</NAME>
        <VALUE>#1</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>recycler</NAME>
        <VALUE>#63</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>garbage</NAME>
        <VALUE>#64</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>mail_options</NAME>
        <VALUE>#65</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>edit_options</NAME>
        <VALUE>#66</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>display_options</NAME>
        <VALUE>#67</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>generic_options</NAME>
        <VALUE>#68</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>maxint</NAME>
        <VALUE>2147483647</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>minint</NAME>
        <VALUE>-2147483648</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>error</NAME>
        <VALUE>#69</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>newt_log</NAME>
        <VALUE>#70</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>toad_log</NAME>
        <VALUE>#70</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>site_log</NAME>
        <VALUE>#70</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>housekeeper</NAME>
        <VALUE>#71</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>network</NAME>
        <VALUE>#72</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>generic_biglist_home</NAME>
        <VALUE>#73</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>feature</NAME>
        <VALUE>#74</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>local</NAME>
        <VALUE>#-1</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>gopher</NAME>
        <VALUE>#75</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>prog_options</NAME>
        <VALUE>#76</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>build_options</NAME>
        <VALUE>#77</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>generic_utils</NAME>
        <VALUE>#78</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>quota_utils</NAME>
        <VALUE>#79</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>paranoid_db</NAME>
        <VALUE>#80</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>no_connect_message</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>sysobj</NAME>
        <VALUE>#0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>byte_quota_utils</NAME>
        <VALUE>#79</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>object_quota_utils</NAME>
        <VALUE>#81</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>server_options</NAME>
        <VALUE>#82</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>feature_warehouse</NAME>
        <VALUE>#83</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>builder_help</NAME>
        <VALUE>#84</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>mail_help</NAME>
        <VALUE>#85</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>ftp</NAME>
        <VALUE>#86</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>password_verifier</NAME>
        <VALUE>#87</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>new_password_log</NAME>
        <VALUE>#-1</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>frand_class</NAME>
        <VALUE>#89</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>mail_recipient_class</NAME>
        <VALUE>#40</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>stage_talk</NAME>
        <VALUE>#90</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>pasting_feature</NAME>
        <VALUE>#91</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>core_history</NAME>
        <VALUE>{{"LambdaMOO", "1.8.0r5", 919117596}}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>matrix_utils</NAME>
        <VALUE>#92</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>force_input_count</NAME>
        <VALUE>5085382</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>frand_help</NAME>
        <VALUE>#93</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>convert_utils</NAME>
        <VALUE>#94</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>gendered_object</NAME>
        <VALUE>#88</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c">
        <NAME>key</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>aliases</NAME>
        <VALUE>{"The System Object"}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>description</NAME>
        <VALUE>"The known universe."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>object_size</NAME>
        <VALUE>{21070, 919123664}</VALUE>
      </PROPERTY>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>do_login_command</NAME>
        <CODE>
          "...This code should only be run as a server task...";
          if (callers())
          return E_PERM;
          endif
          if (typeof(h = $network:incoming_connection(player)) == OBJ)
          "connected to an object";
          return h;
          elseif (h)
          return 0;
          endif
          host = $string_utils:connection_hostname(connection_name(player));
          if ($login:redlisted(host))
          boot_player(player);
          server_log(tostr("REDLISTED: ", player, " from ", host));
          return 0;
          endif
          if (!$login:maybe_limit_commands())
          args = $login:parse_command(@args);
          return $login:(args[1])(@listdelete(args, 1));
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>server_started</NAME>
        <CODE>
          if (!callers())
          $last_restart_time = time();
          $network:server_started();
          $login:server_started();
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>core_objects</NAME>
        <CODE>
          saved = {#0};
          for p in (properties(#0))
          v = #0.(p);
          if ((typeof(v) == OBJ) &amp;&amp; valid(v))
          saved = setadd(saved, v);
          endif
          endfor
          for o in (saved)
          p = parent(o);
          while (valid(p))
          saved = setadd(saved, p);
          p = parent(p);
          endwhile
          endfor
          return $list_utils:sort(saved);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>init_for_core</NAME>
        <CODE>
          if (caller_perms().wizard)
          pass();
          if ("server_started" in verbs(this))
          code = {"if (!callers())", "$last_restart_time = time(); $network:server_started(); $login:server_started(); endif"};
          set_verb_code(this, "server_started", code);
          endif
          if ("uptime_since" in verbs(this))
          delete_verb(this, "uptime_since");
          endif
          if ("do_command" in verbs(this))
          delete_verb(this, "do_command");
          endif
          `delete_verb(this, "checkpoint_finished") ! E_VERBNF';
          $core_history = {{$network.MOO_name, server_version(), time()}, @$core_history};
          $shutdown_message = "";
          $shutdown_time = 0;
          $dump_interval = 3600;
          $gripe_recipients = {player};
          $class_registry = {{"generics", "Generic objects intended for use as the parents of new objects", {$room, $exit, $thing, $note, $letter, $container, $root_class, $player, $prog, $wiz, $generic_editor, $mail_recipient, $mail_agent}}, {"utilities", "Objects holding useful general-purpose verbs", children($generic_utils)}};
          `set_verb_code(this, "user_connected", verb_code(this, "user_connected(core)")) ! ANY';
          `delete_verb(this, "user_connected(core)") ! ANY';
          `set_verb_code(this, "user_reconnected", verb_code(this, "user_reconnected(core)")) ! ANY';
          `delete_verb(this, "user_reconnected(core)") ! ANY';
          for v in ({"do_login_command", "server_started"})
          c = {};
          for i in (verb_code(this, v))
          c = {@c, strsub(i, "$local.login", "$login")};
          endfor
          set_verb_code(#0, v, c);
          endfor
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>user_created user_connected</NAME>
        <CODE>
          "Copied from The System Object (#0):user_connected by Slartibartfast (#4242) Sun May 21 18:14:16 1995 PDT";
          if (callers())
          return;
          endif
          user = args[1];
          set_task_perms(user);
          try
          user.location:confunc(user);
          user:confunc();
          except id (ANY)
          user:tell("Confunc failed: ", id[2], ".");
          for tb in (id[4])
          user:tell("... called from ", tb[4], ":", tb[2], (tb[4] != tb[1]) ? tostr(" (this == ", tb[1], ")") | "", ", line ", tb[6]);
          endfor
          user:tell("(End of traceback)");
          endtry
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>user_disconnected user_client_disconnected</NAME>
        <CODE>
          if (callers())
          return;
          endif
          if (args[1] &lt; #0)
          "not logged in user.  probably should do something clever here involving Carrot's no-spam hack.  --yduJ";
          return;
          endif
          user = args[1];
          user.last_disconnect_time = time();
          set_task_perms(user);
          where = user.location;
          `user:disfunc() ! ANY =&gt; 0';
          if (user.location != where)
          `where.location:disfunc(user) ! ANY =&gt; 0';
          endif
          `user.location:disfunc(user) ! ANY =&gt; 0';
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>bf_chparent chparent</NAME>
        <CODE>
          "chparent(object, new-parent) -- see help on the builtin.";
          who = caller_perms();
          {what, papa} = args;
          if (typeof(what) != OBJ)
          retval = E_TYPE;
          elseif (!valid(what))
          retval = E_INVARG;
          elseif (typeof(papa) != OBJ)
          retval = E_TYPE;
          elseif ((!valid(papa)) &amp;&amp; (papa != #-1))
          retval = E_INVIND;
          elseif (!$perm_utils:controls(who, what))
          retval = E_PERM;
          elseif ((is_player(what) &amp;&amp; (!$object_utils:isa(papa, $player_class))) &amp;&amp; (!who.wizard))
          retval = E_PERM;
          elseif ((is_player(what) &amp;&amp; (!$object_utils:isa(what, $player_class))) &amp;&amp; (!who.wizard))
          retval = E_PERM;
          elseif ((children(what) &amp;&amp; $object_utils:isa(what, $player_class)) &amp;&amp; (!$object_utils:isa(papa, $player_class)))
          retval = E_PERM;
          elseif ((!valid(papa)) || ($perm_utils:controls(who, papa) || papa.f))
          retval = `chparent(@args) ! ANY';
          else
          retval = E_PERM;
          endif
          return ((typeof(retval) == ERR) &amp;&amp; $code_utils:dflag_on()) ? raise(retval) | retval;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>bf_add_verb add_verb</NAME>
        <CODE>
          "add_verb() -- see help on the builtin for more information. This verb is called by the server when $server_options.protect_add_verb exists and is true and caller_perms() are not wizardly.";
          who = caller_perms();
          {what, info, verbargs} = args;
          if (typeof(what) != OBJ)
          retval = E_TYPE;
          elseif (!valid(what))
          retval = E_INVARG;
          elseif ((!$perm_utils:controls(who, what)) &amp;&amp; (!what.w))
          "caller_perms() is not allowed to hack on the object in question";
          retval = E_PERM;
          elseif (!$perm_utils:controls(who, info[1]))
          "caller_perms() is not permitted to add a verb with the specified owner.";
          retval = E_PERM;
          elseif (index(info[2], "w") &amp;&amp; (!$server_options.permit_writable_verbs))
          retval = E_INVARG;
          elseif (!$quota_utils:verb_addition_permitted(who))
          retval = E_QUOTA;
          elseif (((what.owner != who) &amp;&amp; (!who.wizard)) &amp;&amp; (!$quota_utils:verb_addition_permitted(what.owner)))
          retval = E_QUOTA;
          elseif (!who.programmer)
          retval = E_PERM;
          else
          "we now know that the caller's perms control the object or the object is writable, and we know that the caller's perms control the prospective verb owner (by more traditional means)";
          retval = `add_verb(@args) ! ANY';
          endif
          return ((typeof(retval) == ERR) &amp;&amp; $code_utils:dflag_on()) ? raise(retval) | retval;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>bf_add_property add_property</NAME>
        <CODE>
          "add_property() -- see help on the builtin for more information. This verb is called by the server when $server_options.protect_add_property exists and is true and caller_perms() are not wizardly.";
          who = caller_perms();
          {what, propname, value, info} = args;
          if (typeof(what) != OBJ)
          retval = E_TYPE;
          elseif (!valid(what))
          retval = E_INVARG;
          elseif ((!$perm_utils:controls(who, what)) &amp;&amp; (!what.w))
          retval = E_PERM;
          elseif (!$perm_utils:controls(who, info[1]))
          retval = E_PERM;
          elseif (!$quota_utils:property_addition_permitted(who))
          retval = E_QUOTA;
          elseif (((what.owner != who) &amp;&amp; (!who.wizard)) &amp;&amp; (!$quota_utils:property_addition_permitted(what.owner)))
          retval = E_QUOTA;
          "elseif (!who.programmer)";
          "  return E_PERM;     I wanted to do this, but $builder:@newmessage relies upon nonprogs being able to call add_property.  --Nosredna";
          elseif ((propname in {"object_size", "size_quota", "queued_task_limit"}) &amp;&amp; (!who.wizard))
          retval = E_PERM;
          else
          "we now know that the caller's perms control the object (or the object is writable), and that the caller's perms are permitted to control the new property's owner.";
          retval = `add_property(@args) ! ANY';
          endif
          return ((typeof(retval) == ERR) &amp;&amp; $code_utils:dflag_on()) ? raise(retval) | retval;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>bf_recycle recycle</NAME>
        <CODE>
          "recycle(object) -- see help on the builtin. This verb is called by the server when $server_options.protect_recycle exists and is true and caller_perms() are not wizardly.";
          if (!valid(what = args[1]))
          retval = E_INVARG;
          elseif (!$perm_utils:controls(who = caller_perms(), what))
          retval = E_PERM;
          elseif ((p = is_player(what)) &amp;&amp; (!who.wizard))
          for p in ($wiz_utils:connected_wizards_unadvertised())
          p:tell($string_utils:pronoun_sub("%N (%#) is currently trying to recycle %t (%[#t])", who, what));
          endfor
          retval = E_PERM;
          else
          if (p)
          $wiz_utils:unset_player(what);
          endif
          retval = `recycle(what) ! ANY';
          if (typeof(retval) != ERR)
          $recycler:kill_all_tasks(what);
          endif
          endif
          return ((typeof(retval) == ERR) &amp;&amp; $code_utils:dflag_on()) ? raise(retval) | retval;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>user_reconnected</NAME>
        <CODE>
          if (callers())
          return;
          endif
          if ($object_utils:isa(user = args[1], $guest))
          "from $guest:boot";
          oldloc = user.location;
          move(user, $nothing);
          "..force enterfunc to be called so that the newbie gets a room description.";
          move(user, user.home);
          user:do_reset();
          if ($object_utils:isa(oldloc, $room))
          oldloc:announce("In the distance you hear someone's alarm clock going off.");
          if (oldloc != user.location)
          oldloc:announce(user.name, " wavers and vanishes into insubstantial mist.");
          else
          oldloc:announce(user.name, " undergoes a wrenching personality shift.");
          endif
          endif
          set_task_perms(user);
          `user:confunc() ! ANY';
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>bf_set_verb_info set_verb_info</NAME>
        <CODE>
          "set_verb_info() -- see help on the builtin for more information. This verb is called by the server when $server_options.protect_set_verb_info exists and is true and caller_perms() are not wizardly.";
          {o, v, i} = args;
          if (typeof(vi = `verb_info(o, v) ! ANY') == ERR)
          "probably verb doesn't exist";
          retval = vi;
          elseif (!$perm_utils:controls(cp = caller_perms(), vi[1]))
          "perms don't control the current verb owner";
          retval = E_PERM;
          elseif ((typeof(i) != LIST) || (typeof(no = i[1]) != OBJ))
          "info is malformed";
          retval = E_TYPE;
          elseif ((!valid(no)) || (!is_player(no)))
          "invalid new verb owner";
          retval = E_INVARG;
          elseif (!$perm_utils:controls(cp, no))
          "perms don't control prospective verb owner";
          retval = E_PERM;
          elseif (index(i[2], "w") &amp;&amp; (!`$server_options.permit_writable_verbs ! E_PROPNF, E_INVIND =&gt; 1'))
          retval = E_INVARG;
          else
          retval = `set_verb_info(o, v, i) ! ANY';
          endif
          return ((typeof(retval) == ERR) &amp;&amp; $code_utils:dflag_on()) ? raise(retval) | retval;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>bf_match match</NAME>
        <CODE>
          m = `match(@args) ! ANY';
          return ((typeof(m) == ERR) &amp;&amp; $code_utils:dflag_on()) ? raise(m) | m;
          if ((length(args[1]) &gt; 256) &amp;&amp; index(args[2], "*"))
          return E_INVARG;
          else
          return match(@args);
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>bf_rmatch rmatch</NAME>
        <CODE>
          r = `rmatch(@args) ! ANY';
          return ((typeof(r) == ERR) &amp;&amp; $code_utils:dflag_on()) ? raise(r) | r;
          if ((length(args[1]) &gt; 256) &amp;&amp; index(args[2], "*"))
          return E_INVARG;
          else
          return rmatch(@args);
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>do_out_of_band_command doobc</NAME>
        <CODE>
          "do_out_of_band_command -- a cheap and very dirty do_out_of_band verb.  Forwards to verb on player with same name if it exists, otherwise forwards to $login.  May only be called by the server in response to an out of band command, otherwise E_PERM is returned.";
          if (((caller == #-1) &amp;&amp; (caller_perms() == #-1)) &amp;&amp; (callers() == {}))
          if (valid(player) &amp;&amp; is_player(player))
          set_task_perms(player);
          player:do_out_of_band_command(@args);
          else
          $login:do_out_of_band_command(@args);
          endif
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>handle_uncaught_error</NAME>
        <CODE>
          if (!callers())
          {code, msg, value, stack, traceback} = args;
          if (!$object_utils:connected(player))
          "Mail the player the traceback if e isn't connected.";
          $mail_agent:send_message(#0, player, {"traceback", $gripe_recipients}, traceback);
          endif
          "now let the player do something with it if e wants...";
          return `player:(verb)(@args) ! ANY';
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>bf_force_input</NAME>
        <CODE>
          "Copied from Jay (#3920):bf_force_input Mon Jun 16 20:55:27 1997 PDT";
          "force_input(conn, line [, at-front])";
          "see help on the builtin for more information. This verb is called by the server when $server_options.protect_force_input exists and is true and caller_perms() are not wizardly.";
          {conn, line, ?at_front = 0} = args;
          if (caller_perms() != conn)
          retval = E_PERM;
          elseif (conn in $login.newted)
          retval = E_PERM;
          else
          retval = `force_input(@args) ! ANY';
          this.force_input_count = this.force_input_count + 1;
          endif
          return ((typeof(retval) == ERR) &amp;&amp; $code_utils:dflag_on()) ? raise(retval) | retval;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>moveto</NAME>
        <CODE>
          "Let's keep bozos from partying.  --Nosredna the partypooper";
          return pass(#-1);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>bf_set_property_info set_property_info</NAME>
        <CODE>
          who = caller_perms();
          retval = 0;
          try
          {what, propname, info} = args;
          except (E_ARGS)
          retval = E_ARGS;
          endtry
          try
          {owner, perms, ?newname = 0} = info;
          except (E_ARGS)
          retval = E_ARGS;
          except (E_TYPE)
          retval = E_TYPE;
          endtry
          if (retval != 0)
          elseif ((newname in {"object_size", "size_quota", "queued_task_limit"}) &amp;&amp; (!who.wizard))
          retval = E_PERM;
          else
          set_task_perms(who);
          retval = `set_property_info(@args) ! ANY';
          endif
          return ((typeof(retval) == ERR) &amp;&amp; $code_utils:dflag_on()) ? raise(retval) | retval;
        </CODE>
      </VERB>
    </OBJECT>
    <OBJECT ID="obj3" FLAGS="f r" OWNER="obj2" LOCATION="obj-1">
      <NAME>generic room</NAME>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>who_location_msg</NAME>
        <VALUE>"%T"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>free_home</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>victim_ejection_msg</NAME>
        <VALUE>"You have been expelled from %i by %n."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>ejection_msg</NAME>
        <VALUE>"You expel %d from %i."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>oejection_msg</NAME>
        <VALUE>"%N unceremoniously %{!expels} %d from %i."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>residents</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>free_entry</NAME>
        <VALUE>1</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c">
        <NAME>entrances</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>blessed_object</NAME>
        <VALUE>#-1</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>blessed_task</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c">
        <NAME>exits</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>dark</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>ctype</NAME>
        <VALUE>3</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c">
        <NAME>key</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>aliases</NAME>
        <VALUE>{"generic room"}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>description</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>object_size</NAME>
        <VALUE>{27919, 919123664}</VALUE>
      </PROPERTY>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>confunc</NAME>
        <CODE>
          if ((((cp = caller_perms()) == player) || $perm_utils:controls(cp, player)) || (caller == this))
          "Need the first check because guests don't control themselves";
          this:look_self(player.brief);
          this:announce($string_utils:pronoun_sub("%N %&lt;has&gt; connected.", player));
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>disfunc</NAME>
        <CODE>
          if ((((cp = caller_perms()) == player) || $perm_utils:controls(cp, player)) || (caller == this))
          this:announce($string_utils:pronoun_sub("%N %&lt;has&gt; disconnected.", player));
          "need the first check since guests don't control themselves";
          if (!$object_utils:isa(player, $guest))
          "guest disfuncs are handled by $guest:disfunc. Don't add them here";
          $housekeeper:move_players_home(player);
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="x r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>say</NAME>
        <CODE>
          try
          player:tell("You say, \"", argstr, "\"");
          this:announce(player.name, " ", $gender_utils:get_conj("says", player), ", \"", argstr, "\"");
          except (ANY)
          "Don't really need to do anything but ignore the idiot who has a bad :tell";
          endtry
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>emote</NAME>
        <CODE>
          if ((argstr != "") &amp;&amp; (argstr[1] == ":"))
          this:announce_all(player.name, argstr[2..length(argstr)]);
          else
          this:announce_all(player.name, " ", argstr);
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>announce</NAME>
        <CODE>
          for dude in (setremove(this:contents(), player))
          try
          dude:tell(@args);
          except (ANY)
          "Just skip the dude with the bad :tell";
          continue dude;
          endtry
          endfor
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>match_exit</NAME>
        <CODE>
          what = args[1];
          if (what)
          yes = $failed_match;
          for e in (this.exits)
          if (valid(e) &amp;&amp; (what in {e.name, @e.aliases}))
          if (yes == $failed_match)
          yes = e;
          elseif (yes != e)
          return $ambiguous_match;
          endif
          endif
          endfor
          return yes;
          else
          return $nothing;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>add_exit</NAME>
        <CODE>
          set_task_perms(caller_perms());
          return `this.exits = setadd(this.exits, args[1]) ! E_PERM' != E_PERM;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>tell_contents</NAME>
        <CODE>
          {contents, ctype} = args;
          if ((!this.dark) &amp;&amp; (contents != {}))
          if (ctype == 0)
          player:tell("Contents:");
          for thing in (contents)
          player:tell("  ", thing:title());
          endfor
          elseif (ctype == 1)
          for thing in (contents)
          if (is_player(thing))
          player:tell($string_utils:pronoun_sub(tostr("%N ", $gender_utils:get_conj("is", thing), " here."), thing));
          else
          player:tell("You see ", thing:title(), " here.");
          endif
          endfor
          elseif (ctype == 2)
          player:tell("You see ", $string_utils:title_list(contents), " here.");
          elseif (ctype == 3)
          players = things = {};
          for x in (contents)
          if (is_player(x))
          players = {@players, x};
          else
          things = {@things, x};
          endif
          endfor
          if (things)
          player:tell("You see ", $string_utils:title_list(things), " here.");
          endif
          if (players)
          player:tell($string_utils:title_listc(players), (length(players) == 1) ? " " + $gender_utils:get_conj("is", players[1]) | " are", " here.");
          endif
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="none" PREP="none" IOBJ="none">
        <NAME>@exits</NAME>
        <CODE>
          if (!$perm_utils:controls(valid(caller_perms()) ? caller_perms() | player, this))
          player:tell("Sorry, only the owner of a room may list its exits.");
          elseif (this.exits == {})
          player:tell("This room has no conventional exits.");
          else
          try
          for exit in (this.exits)
          try
          player:tell(exit.name, " (", exit, ") leads to ", valid(exit.dest) ? exit.dest.name | "???", " (", exit.dest, ") via {", $string_utils:from_list(exit.aliases, ", "), "}.");
          except (ANY)
          player:tell("Bad exit or missing .dest property:  ", $string_utils:nn(exit));
          continue exit;
          endtry
          endfor
          except (E_TYPE)
          player:tell("Bad .exits property. This should be a list of exit objects. Please fix this.");
          endtry
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>look_self</NAME>
        <CODE>
          {?brief = 0} = args;
          player:tell(this:title());
          if (!brief)
          pass();
          endif
          this:tell_contents(setremove(this:contents(), player), this.ctype);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>acceptable</NAME>
        <CODE>
          what = args[1];
          return this:is_unlocked_for(what) &amp;&amp; (((this:free_entry(@args) || ((what == this.blessed_object) &amp;&amp; (task_id() == this.blessed_task))) || (what.owner == this.owner)) || ((typeof(this.residents) == LIST) &amp;&amp; ((what in this.residents) || (what.owner in this.residents))));
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>add_entrance</NAME>
        <CODE>
          set_task_perms(caller_perms());
          return `this.entrances = setadd(this.entrances, args[1]) ! E_PERM' != E_PERM;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>bless_for_entry</NAME>
        <CODE>
          if (caller in {@this.entrances, this})
          this.blessed_object = args[1];
          this.blessed_task = task_id();
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
        <NAME>@entrances</NAME>
        <CODE>
          if (!$perm_utils:controls(valid(caller_perms()) ? caller_perms() | player, this))
          player:tell("Sorry, only the owner of a room may list its entrances.");
          elseif (this.entrances == {})
          player:tell("This room has no conventional entrances.");
          else
          try
          for exit in (this.entrances)
          try
          player:tell(exit.name, " (", exit, ") comes from ", valid(exit.source) ? exit.source.name | "???", " (", exit.source, ") via {", $string_utils:from_list(exit.aliases, ", "), "}.");
          except (ANY)
          player:tell("Bad entrance object or missing .source property: ", $string_utils:nn(exit));
          continue exit;
          endtry
          endfor
          except (E_TYPE)
          player:tell("Bad .entrances property. This should be a list of exit objects. Please fix this.");
          endtry
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>go</NAME>
        <CODE>
          if ((!args) || (!(dir = args[1])))
          player:tell("You need to specify a direction.");
          return E_INVARG;
          elseif (valid(exit = player.location:match_exit(dir)))
          exit:invoke();
          if (length(args) &gt; 1)
          old_room = player.location;
          "Now give objects in the room we just entered a chance to act.";
          suspend(0);
          if (player.location == old_room)
          "player didn't move or get moved while we were suspended";
          player.location:go(@listdelete(args, 1));
          endif
          endif
          elseif (exit == $failed_match)
          player:tell("You can't go that way (", dir, ").");
          else
          player:tell("I don't know which direction `", dir, "' you mean.");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>l*ook</NAME>
        <CODE>
          if ((dobjstr == "") &amp;&amp; (!prepstr))
          this:look_self();
          elseif ((prepstr != "in") &amp;&amp; (prepstr != "on"))
          if ((!dobjstr) &amp;&amp; (prepstr == "at"))
          dobjstr = iobjstr;
          iobjstr = "";
          else
          dobjstr = dobjstr + (prepstr &amp;&amp; ((dobjstr &amp;&amp; " ") + prepstr));
          dobjstr = dobjstr + (iobjstr &amp;&amp; ((dobjstr &amp;&amp; " ") + iobjstr));
          endif
          dobj = this:match_object(dobjstr);
          if (!$command_utils:object_match_failed(dobj, dobjstr))
          dobj:look_self();
          endif
          elseif (!iobjstr)
          player:tell(verb, " ", prepstr, " what?");
          else
          iobj = this:match_object(iobjstr);
          if (!$command_utils:object_match_failed(iobj, iobjstr))
          if (dobjstr == "")
          iobj:look_self();
          elseif ((thing = iobj:match(dobjstr)) == $failed_match)
          player:tell("I don't see any \"", dobjstr, "\" ", prepstr, " ", iobj.name, ".");
          elseif (thing == $ambiguous_match)
          player:tell("There are several things ", prepstr, " ", iobj.name, " one might call \"", dobjstr, "\".");
          else
          thing:look_self();
          endif
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>announce_all</NAME>
        <CODE>
          for dude in (this:contents())
          try
          dude:tell(@args);
          except (ANY)
          "Just ignore the dude with the stupid :tell";
          continue dude;
          endtry
          endfor
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>announce_all_but</NAME>
        <CODE>
          ":announce_all_but(LIST objects to ignore, text)";
          {ignore, @text} = args;
          contents = this:contents();
          for l in (ignore)
          contents = setremove(contents, l);
          endfor
          for listener in (contents)
          try
          listener:tell(@text);
          except (ANY)
          "Ignure listener with bad :tell";
          continue listener;
          endtry
          endfor
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>enterfunc</NAME>
        <CODE>
          object = args[1];
          if (is_player(object) &amp;&amp; (object.location == this))
          player = object;
          this:look_self(player.brief);
          endif
          if (object == this.blessed_object)
          this.blessed_object = #-1;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>exitfunc</NAME>
        <CODE>
          return;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>remove_exit</NAME>
        <CODE>
          exit = args[1];
          if (caller != exit)
          set_task_perms(caller_perms());
          endif
          return `this.exits = setremove(this.exits, exit) ! E_PERM' != E_PERM;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>remove_entrance</NAME>
        <CODE>
          exit = args[1];
          if (caller != exit)
          set_task_perms(caller_perms());
          endif
          return `this.entrances = setremove(this.entrances, exit) ! E_PERM' != E_PERM;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@add-exit</NAME>
        <CODE>
          set_task_perms(player);
          if (!dobjstr)
          player:tell("Usage:  @add-exit &lt;exit-number&gt;");
          return;
          endif
          exit = this:match_object(dobjstr);
          if ($command_utils:object_match_failed(exit, dobjstr))
          return;
          endif
          if (!($exit in $object_utils:ancestors(exit)))
          player:tell("That doesn't look like an exit object to me...");
          return;
          endif
          try
          dest = exit.dest;
          except (E_PERM)
          player:tell("You can't read the exit's destination to check that it's consistent!");
          return;
          endtry
          try
          source = exit.source;
          except (E_PERM)
          player:tell("You can't read that exit's source to check that it's consistent!");
          return;
          endtry
          if (source != this)
          player:tell("That exit wasn't made to be attached here; it was made as an exit from ", source.name, " (", source, ").");
          return;
          elseif (((typeof(dest) != OBJ) || (!valid(dest))) || (!($room in $object_utils:ancestors(dest))))
          player:tell("That exit doesn't lead to a room!");
          return;
          endif
          if (!this:add_exit(exit))
          player:tell("Sorry, but you must not have permission to add exits to this room.");
          else
          player:tell("You have added ", exit, " as an exit that goes to ", exit.dest.name, " (", exit.dest, ") via ", $string_utils:english_list(setadd(exit.aliases, exit.name)), ".");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@add-entrance</NAME>
        <CODE>
          set_task_perms(player);
          if (!dobjstr)
          player:tell("Usage:  @add-entrance &lt;exit-number&gt;");
          return;
          endif
          exit = this:match_object(dobjstr);
          if ($command_utils:object_match_failed(exit, dobjstr))
          return;
          endif
          if (!($exit in $object_utils:ancestors(exit)))
          player:tell("That doesn't look like an exit object to me...");
          return;
          endif
          try
          dest = exit.dest;
          except (E_PERM)
          player:tell("You can't read the exit's destination to check that it's consistent!");
          return;
          endtry
          if (dest != this)
          player:tell("That exit doesn't lead here!");
          return;
          endif
          if (!this:add_entrance(exit))
          player:tell("Sorry, but you must not have permission to add entrances to this room.");
          else
          player:tell("You have added ", exit, " as an entrance that gets here via ", $string_utils:english_list(setadd(exit.aliases, exit.name)), ".");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>recycle</NAME>
        <CODE>
          "Make a mild attempt to keep people and objects from ending up in #-1 when people recycle a room";
          if ((caller == this) || $perm_utils:controls(caller_perms(), this))
          "... first try spilling them out onto the floor of enclosing room if any";
          if (valid(this.location))
          for x in (this.contents)
          try
          x:moveto(this.location);
          except (ANY)
          continue x;
          endtry
          endfor
          endif
          "... try sending them home...";
          for x in (this.contents)
          if (is_player(x))
          if ((typeof(x.home) == OBJ) &amp;&amp; valid(x.home))
          try
          x:moveto(x.home);
          except (ANY)
          continue x;
          endtry
          endif
          if (x.location == this)
          move(x, $player_start);
          endif
          elseif (valid(x.owner))
          try
          x:moveto(x.owner);
          except (ANY)
          continue x;
          endtry
          endif
          endfor
          pass(@args);
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="none" PREP="none" IOBJ="none">
        <NAME>e east w west s south n north ne northeast nw northwest se southeast sw southwest u up d down</NAME>
        <CODE>
          set_task_perms((caller_perms() == #-1) ? player | caller_perms());
          exit = this:match_exit(verb);
          if (valid(exit))
          exit:invoke();
          elseif (exit == $failed_match)
          player:tell("You can't go that way.");
          else
          player:tell("I don't know which direction `", verb, "' you mean.");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@eject @eject! @eject!!</NAME>
        <CODE>
          set_task_perms(player);
          if ($command_utils:object_match_failed(dobj, dobjstr))
          return;
          elseif (dobj.location != this)
          is = $gender_utils:get_conj("is", dobj);
          player:tell(dobj.name, "(", dobj, ") ", is, " not here.");
          return;
          elseif (!$perm_utils:controls(player, this))
          player:tell("You are not the owner of this room.");
          return;
          elseif (dobj.wizard)
          player:tell("Sorry, you can't ", verb, " a wizard.");
          dobj:tell(player.name, " tried to ", verb, " you.");
          return;
          endif
          iobj = this;
          player:tell(this:ejection_msg());
          this:((verb == "@eject") ? "eject" | "eject_basic")(dobj);
          if (verb != "@eject!!")
          dobj:tell(this:victim_ejection_msg());
          endif
          this:announce_all_but({player, dobj}, this:oejection_msg());
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>ejection_msg oejection_msg victim_ejection_msg</NAME>
        <CODE>
          return $gender_utils:pronoun_sub(this.(verb));
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>accept_for_abode</NAME>
        <CODE>
          who = args[1];
          return this:basic_accept_for_abode(who) &amp;&amp; this:acceptable(who);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@resident*s</NAME>
        <CODE>
          if (!$perm_utils:controls(player, this))
          player:tell("You must own this room to manipulate the legal residents list.  Try contacting ", this.owner.name, ".");
          else
          if (typeof(this.residents) != LIST)
          this.residents = {this.residents};
          endif
          if (!dobjstr)
          "First, remove !valid objects from this room...";
          for x in (this.residents)
          if ((typeof(x) != OBJ) || (!valid(x)))
          player:tell("Warning: removing ", x, ", an invalid object, from the residents list.");
          this.residents = setremove(this.residents, x);
          endif
          endfor
          player:tell("Allowable residents in this room:  ", $string_utils:english_list($list_utils:map_prop(this.residents, "name"), "no one"), ".");
          return;
          elseif (dobjstr[1] == "!")
          notflag = 1;
          dobjstr = dobjstr[2..$];
          else
          notflag = 0;
          endif
          result = $string_utils:match_player_or_object(dobjstr);
          if (!result)
          return;
          else
          "a one element list was returned to us if it won.";
          result = result[1];
          if (notflag)
          if (!(result in this.residents))
          player:tell(result.name, " doesn't appear to be in the residents list of ", this.name, ".");
          else
          this.residents = setremove(this.residents, result);
          player:tell(result.name, " removed from the residents list of ", this.name, ".");
          endif
          else
          if (result in this.residents)
          is = $gender_utils:get_conj("is", result);
          player:tell(result.name, " ", is, " already an allowed resident of ", this.name, ".");
          else
          this.residents = {@this.residents, result};
          player:tell(result.name, " added to the residents list of ", this.name, ".");
          endif
          endif
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>match</NAME>
        <CODE>
          target = {@this:contents(), @this:exits()};
          return $string_utils:match(args[1], target, "name", target, "aliases");
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@remove-exit</NAME>
        <CODE>
          set_task_perms(player);
          if (!dobjstr)
          player:tell("Usage:  @remove-exit &lt;exit&gt;");
          return;
          endif
          exit = this:match_object(dobjstr);
          if (!(exit in this.exits))
          if ($command_utils:object_match_failed(exit, dobjstr))
          return;
          endif
          player:tell("Couldn't find \"", dobjstr, "\" in the exits list of ", this.name, ".");
          return;
          elseif (!this:remove_exit(exit))
          player:tell("Sorry, but you do not have permission to remove exits from this room.");
          else
          name = valid(exit) ? exit.name | "&lt;recycled&gt;";
          player:tell("Exit ", exit, " (", name, ") removed from exit list of ", this.name, " (", this, ").");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@remove-entrance</NAME>
        <CODE>
          set_task_perms(player);
          if (!dobjstr)
          player:tell("Usage:  @remove-entrance &lt;entrance&gt;");
          return;
          endif
          entrance = $string_utils:match(dobjstr, this.entrances, "name", this.entrances, "aliases");
          if (!valid(entrance))
          "Try again to parse it.  Maybe they gave object number.  Don't complain if it's invalid though; maybe it's been recycled in some nefarious way.";
          entrance = this:match_object(dobjstr);
          endif
          if (!(entrance in this.entrances))
          player:tell("Couldn't find \"", dobjstr, "\" in the entrances list of ", this.name, ".");
          return;
          elseif (!this:remove_entrance(entrance))
          player:tell("Sorry, but you do not have permission to remove entrances from this room.");
          else
          name = valid(entrance) ? entrance.name | "&lt;recycled&gt;";
          player:tell("Entrance ", entrance, " (", name, ") removed from entrance list of ", this.name, " (", this, ").");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>moveto</NAME>
        <CODE>
          if ((caller in {this, this.owner}) || $perm_utils:controls(caller_perms(), this))
          return pass(@args);
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>who_location_msg</NAME>
        <CODE>
          return (msg = `this.(verb) ! ANY') ? $string_utils:pronoun_sub(msg, args[1]) | "";
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>exits entrances</NAME>
        <CODE>
          if ((caller == this) || $perm_utils:controls(caller_perms(), this))
          return this.(verb);
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>obvious_exits obvious_entrances</NAME>
        <CODE>
          exits = {};
          for exit in (`(verb == "obvious_exits") ? this.exits | this.entrances ! ANY =&gt; {}')
          if (`exit.obvious ! ANY')
          exits = setadd(exits, exit);
          endif
          endfor
          return exits;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>here_huh</NAME>
        <CODE>
          ":here_huh(verb,args)  -- room-specific :huh processing.  This should return 1 if it finds something interesting to do and 0 otherwise; see $command_utils:do_huh.";
          "For the generic room, we check for the case of the caller specifying an exit for which a corresponding verb was never defined.";
          set_task_perms(caller_perms());
          if (args[2] || ($failed_match == (exit = this:match_exit(verb = args[1]))))
          "... okay, it's not an exit.  we give up...";
          return 0;
          elseif (valid(exit))
          exit:invoke();
          else
          "... ambiguous exit ...";
          player:tell("I don't know which direction `", verb, "' you mean.");
          endif
          return 1;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>room_announce*_all_but</NAME>
        <CODE>
          this:(verb[6..$])(@args);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>examine_commands_ok</NAME>
        <CODE>
          return this == args[1].location;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>examine_key</NAME>
        <CODE>
          "examine_key(examiner)";
          "return a list of strings to be told to the player, indicating what the key on this type of object means, and what this object's key is set to.";
          "the default will only tell the key to a wizard or this object's owner.";
          who = args[1];
          if (((caller == this) &amp;&amp; $perm_utils:controls(who, this)) &amp;&amp; (this.key != 0))
          return {tostr(this:title(), " will accept only objects matching the following key:"), tostr("  ", $lock_utils:unparse_key(this.key))};
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>examine_contents</NAME>
        <CODE>
          "examine_contents(who)";
          if (caller == this)
          this:tell_contents(this.contents, this.ctype);
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>free_entry</NAME>
        <CODE>
          return this.free_entry;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>dark</NAME>
        <CODE>
          return this.(verb);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>announce_lines_x</NAME>
        <CODE>
          "Copied from generic room (#3):announce by Haakon (#2) Thu Oct 24 16:15:01 1996 PDT";
          for dude in (setremove(this:contents(), player))
          try
          dude:tell_lines(@args);
          except id (ANY)
          endtry
          endfor
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>basic_accept_for_abode</NAME>
        <CODE>
          who = args[1];
          return valid(who) &amp;&amp; ((this.free_home || $perm_utils:controls(who, this)) || ((typeof(residents = this.residents) == LIST) ? who in this.residents | (who == this.residents)));
        </CODE>
      </VERB>
      <OBJECT ID="obj50" FLAGS="f r" OWNER="obj36" LOCATION="obj-1">
        <NAME>Generic Editor</NAME>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>readable</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>times</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>commands2</NAME>
          <VALUE>{{"say", "emote", "lis*t", "ins*ert", "n*ext,p*rev", "del*ete", "f*ind", "s*ubst", "m*ove,c*opy", "join*l", "fill"}, {"y*ank", "w*hat", "abort", "q*uit,done,pause"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>help</NAME>
          <VALUE>#44</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>no_text_msg</NAME>
          <VALUE>"There are no lines of text."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>commands</NAME>
          <VALUE>{{"say", "&lt;text&gt;"}, {"emote", "&lt;text&gt;"}, {"lis*t", "[&lt;range&gt;] [nonum]"}, {"ins*ert", "[&lt;ins&gt;] [\"&lt;text&gt;]"}, {"n*ext,p*rev", "[n] [\"&lt;text&gt;]"}, {"del*ete", "[&lt;range&gt;]"}, {"f*ind", "/&lt;str&gt;[/[c][&lt;range&gt;]]"}, {"s*ubst", "/&lt;str1&gt;/&lt;str2&gt;[/[g][c][&lt;range&gt;]]"}, {"m*ove,c*opy", "[&lt;range&gt;] to &lt;ins&gt;"}, {"join*l", "[&lt;range&gt;]"}, {"fill", "[&lt;range&gt;] [@&lt;col&gt;]"}, {"w*hat", ""}, {"abort", ""}, {"q*uit,done,pause", ""}, {"enter", ""}, {"y*ank", "from &lt;text-source&gt;"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>invoke_task</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>exit_on_abort</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>previous_session_msg</NAME>
          <VALUE>""</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>stateprops</NAME>
          <VALUE>{{"texts", 0}, {"changes", 0}, {"inserting", 1}, {"readable", 0}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>depart_msg</NAME>
          <VALUE>"%N heads off to the Generic Editing Room."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>return_msg</NAME>
          <VALUE>"%N comes back from the Generic Editing Room."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>no_littering_msg</NAME>
          <VALUE>"Keeping your [whatever] for later work.  Since this the Generic Editor, you have to do your own :set_changed(0) so that we'll know to get rid of whatever it you're working on when you leave.  Please don't litter... especially in the Generic Editor."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>no_change_msg</NAME>
          <VALUE>"There have been no changes since the last save."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>change_msg</NAME>
          <VALUE>"Text has been altered since the last save."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>nothing_loaded_msg</NAME>
          <VALUE>"You're not currently editing anything."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" >
          <NAME>texts</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>active</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" >
          <NAME>changes</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" >
          <NAME>inserting</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>original</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>who_location_msg</NAME>
          <VALUE>"%L [editing]"</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>free_home</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>victim_ejection_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>ejection_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>oejection_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>residents</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>free_entry</NAME>
          <VALUE>1</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>entrances</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>blessed_object</NAME>
          <VALUE>#-1</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>blessed_task</NAME>
          <VALUE>170400074</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>exits</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>dark</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>ctype</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"Generic Editor", "gedit", "edit"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{51272, 919123695}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>say</NAME>
          <CODE>
            if ((caller != player) &amp;&amp; (caller_perms() != player))
            return E_PERM;
            endif
            if (!(who = this:loaded(player)))
            player:tell(this:nothing_loaded_msg());
            else
            this:insert_line(who, argstr);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>emote</NAME>
          <CODE>
            if ((caller != player) &amp;&amp; (caller_perms() != player))
            return E_PERM;
            endif
            if (!(who = this:loaded(player)))
            player:tell(this:nothing_loaded_msg());
            else
            this:append_line(who, argstr);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
          <NAME>enter</NAME>
          <CODE>
            if (!this:loaded(player))
            player:tell(this:nothing_loaded_msg());
            else
            lines = $command_utils:read_lines();
            if (typeof(lines) == ERR)
            player:notify(tostr(lines));
            return;
            endif
            this:insert_line(this:loaded(player), lines, 0);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>lis*t view</NAME>
          <CODE>
            nonum = 0;
            if (verb == "view")
            if (!args)
            l = {};
            for i in [1..length(this.active)]
            if (this.readable[i])
            l = {@l, this.active[i]};
            endif
            endfor
            if (l)
            player:tell("Players having readable texts in this editor:  ", $string_utils:names_of(l));
            else
            player:tell("No one has published anything in this editor.");
            endif
            return;
            elseif ($command_utils:player_match_result(plyr = $string_utils:match_player(args[1]), args[1])[1])
            "...no such player";
            return;
            elseif ((!(who = this:loaded(plyr))) || (!this:readable(who)))
            player:tell(plyr.name, "(", plyr, ") has not published anything in this editor.");
            return;
            endif
            args = listdelete(args, 1);
            elseif (!(who = this:loaded(player)))
            player:tell(this:nothing_loaded_msg());
            return;
            endif
            len = length(this.texts[who]);
            ins = this.inserting[who];
            window = 8;
            if (len &lt; (2 * window))
            default = {"1-$"};
            elseif (ins &lt;= window)
            default = {tostr("1-", 2 * window)};
            else
            default = {tostr(window, "_-", window, "^"), tostr(2 * window, "$-$")};
            endif
            if (typeof(range = this:parse_range(who, default, @args)) != LIST)
            player:tell(tostr(range));
            elseif (range[3] &amp;&amp; (!(nonum = "nonum" == $string_utils:trim(range[3]))))
            player:tell("Don't understand this:  ", range[3]);
            elseif (nonum)
            player:tell_lines(this.texts[who][range[1]..range[2]]);
            else
            for line in [range[1]..range[2]]
            this:list_line(who, line);
            if ($command_utils:running_out_of_time())
            suspend(0);
            if (!(who = this:loaded(player)))
            player:tell("ack!  something bad happened during a suspend...");
            return;
            endif
            endif
            endfor
            if ((ins &gt; len) &amp;&amp; (len == range[2]))
            player:tell("^^^^");
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
          <NAME>ins*ert n*ext p*revious .</NAME>
          <CODE>
            if (i = index(argstr, "\""))
            text = argstr[i + 1..$];
            argstr = argstr[1..i - 1];
            else
            text = 0;
            endif
            spec = $string_utils:trim(argstr);
            if (index("next", verb) == 1)
            verb = "next";
            spec = "+" + (spec || "1");
            elseif (index("prev", verb) == 1)
            verb = "prev";
            spec = "-" + (spec || "1");
            else
            spec = spec || ".";
            endif
            if (!(who = this:loaded(player)))
            player:tell(this:nothing_loaded_msg());
            elseif (ERR == typeof(number = this:parse_insert(who, spec)))
            if (verb in {"next", "prev"})
            player:tell("Argument must be a number.");
            else
            player:tell("You must specify an integer or `$' for the last line.");
            endif
            elseif ((number &gt; (max = length(this.texts[who]) + 1)) || (number &lt; 1))
            player:tell("That would take you out of range (to line ", number, "?).");
            else
            this.inserting[who] = number;
            if (typeof(text) == STR)
            this:insert_line(who, text);
            else
            if (verb != "next")
            (number &gt; 1) ? this:list_line(who, number - 1) | player:tell("____");
            endif
            if (verb != "prev")
            (number &lt; max) ? this:list_line(who, number) | player:tell("^^^^");
            endif
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>del*ete</NAME>
          <CODE>
            if (!(who = this:loaded(player)))
            player:tell(this:nothing_loaded_msg());
            elseif (typeof(range = this:parse_range(who, {"_", "1"}, @args)) != LIST)
            player:tell(range);
            elseif (range[3])
            player:tell("Junk at end of cmd:  ", range[3]);
            else
            player:tell_lines((text = this.texts[who])[from = range[1]..to = range[2]]);
            player:tell("---Line", (to &gt; from) ? "s" | "", " deleted.  Insertion point is before line ", from, ".");
            this.texts[who] = {@text[1..from - 1], @text[to + 1..$]};
            if (!this.changes[who])
            this.changes[who] = 1;
            this.times[who] = time();
            endif
            this.inserting[who] = from;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>f*ind</NAME>
          <CODE>
            if (callers() &amp;&amp; (caller != this))
            return E_PERM;
            endif
            if (!(who = this:loaded(player)))
            player:tell(this:nothing_loaded_msg());
            elseif (typeof(subst = this:parse_subst(argstr &amp;&amp; (argstr[1] + argstr), "c", "Empty search string?")) != LIST)
            player:tell(tostr(subst));
            elseif (typeof(start = subst[4] ? this:parse_insert(who, subst[4]) | this.inserting[who]) == ERR)
            player:tell("Starting from where?", subst[4] ? ("  (can't parse " + subst[4]) + ")" | "");
            else
            search = subst[2];
            case = !index(subst[3], "c", 1);
            text = this.texts[who];
            tlen = length(text);
            while ((start &lt;= tlen) &amp;&amp; (!index(text[start], search, case)))
            start = start + 1;
            endwhile
            if (start &gt; tlen)
            player:tell("`", search, "' not found.");
            else
            this.inserting[who] = start + 1;
            this:list_line(who, start);
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>m*ove c*opy</NAME>
          <CODE>
            verb = (is_move = verb[1] == "m") ? "move" | "copy";
            if (!(who = this:loaded(player)))
            player:tell(this:nothing_loaded_msg());
            return;
            endif
            wargs = args;
            t = to_pos = 0;
            while (t = "to" in (wargs = wargs[t + 1..$]))
            to_pos = to_pos + t;
            endwhile
            range_args = args[1..to_pos - 1];
            if ((!to_pos) || (ERR == typeof(dest = this:parse_insert(who, $string_utils:from_list(wargs, " ")))))
            player:tell(verb, " to where? ");
            elseif ((dest &lt; 1) || (dest &gt; ((last = length(this.texts[who])) + 1)))
            player:tell("Destination (", dest, ") out of range.");
            elseif (("from" in range_args) || ("to" in range_args))
            player:tell("Don't use that kind of range specification with this command.");
            elseif (typeof(range = this:parse_range(who, {"_", "^"}, @args[1..to_pos - 1])) != LIST)
            player:tell(range);
            elseif (range[3])
            player:tell("Junk before `to':  ", range[3]);
            elseif ((is_move &amp;&amp; (dest &gt;= range[1])) &amp;&amp; (dest &lt;= (range[2] + 1)))
            player:tell("Destination lies inside range of lines to be moved.");
            else
            from = range[1];
            to = range[2];
            ins = this.inserting[who];
            text = this.texts[who];
            if (!is_move)
            this.texts[who] = {@text[1..dest - 1], @text[from..to], @text[dest..last]};
            if (ins &gt;= dest)
            this.inserting[who] = ((ins + to) - from) + 1;
            endif
            else
            "oh shit... it's a move";
            if (dest &lt; from)
            newtext = {@text[1..dest - 1], @text[from..to], @text[dest..from - 1], @text[to + 1..last]};
            if ((ins &gt;= dest) &amp;&amp; (ins &lt;= to))
            ins = (ins &gt; from) ? (ins - from) + dest | (((ins + to) - from) + 1);
            endif
            else
            newtext = {@text[1..from - 1], @text[to + 1..dest - 1], @text[from..to], @text[dest..last]};
            if ((ins &gt; from) &amp;&amp; (ins &lt; dest))
            ins = (ins &lt;= to) ? ((ins + dest) - to) - 1 | (((ins - to) + from) - 1);
            endif
            endif
            this.texts[who] = newtext;
            this.inserting[who] = ins;
            endif
            if (!this.changes[who])
            this.changes[who] = 1;
            this.times[who] = time();
            endif
            player:tell("Lines ", is_move ? "moved." | "copied.");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>join*literal</NAME>
          <CODE>
            if (!(who = this:loaded(player)))
            player:tell(this:nothing_loaded_msg());
            elseif (typeof(range = this:parse_range(who, {"_-^", "_", "^"}, @args)) != LIST)
            player:tell(range);
            elseif (range[3])
            player:tell("Junk at end of cmd:  ", range[3]);
            elseif (!(result = this:join_lines(who, @range[1..2], length(verb) &lt;= 4)))
            player:tell((result == 0) ? "Need at least two lines to join." | result);
            else
            this:list_line(who, range[1]);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>fill</NAME>
          <CODE>
            fill_column = 70;
            if (!(who = this:loaded(player)))
            player:tell(this:nothing_loaded_msg());
            elseif (typeof(range = this:parse_range(who, {"_", "1"}, @args)) != LIST)
            player:tell(range);
            elseif (range[3] &amp;&amp; ((range[3][1] != "@") || ((fill_column = toint(range[3][2..$])) &lt; 10)))
            player:tell("Usage:  fill [&lt;range&gt;] [@ column]   (where column &gt;= 10).");
            else
            join = this:join_lines(who, @range[1..2], 1);
            newlines = this:fill_string((text = this.texts[who])[from = range[1]], fill_column);
            if (fill = ((nlen = length(newlines)) &gt; 1) || (newlines[1] != text[from]))
            this.texts[who] = {@text[1..from - 1], @newlines, @text[from + 1..$]};
            if (((insert = this.inserting[who]) &gt; from) &amp;&amp; (nlen &gt; 1))
            this.inserting[who] = (insert + nlen) - 1;
            endif
            endif
            if (fill || join)
            for line in [from..(from + nlen) - 1]
            this:list_line(who, line);
            endfor
            else
            player:tell("No changes.");
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
          <NAME>pub*lish perish unpub*lish depub*lish</NAME>
          <CODE>
            if (!(who = this:loaded(player)))
            player:tell(this:nothing_loaded_msg());
            return;
            endif
            if (typeof(e = this:set_readable(who, index("publish", verb) == 1)) == ERR)
            player:tell(e);
            elseif (e)
            player:tell("Your text is now globally readable.");
            else
            player:tell("Your text is read protected.");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="none" PREP="none" IOBJ="none">
          <NAME>w*hat</NAME>
          <CODE>
            if (!(this:ok(who = player in this.active) &amp;&amp; (typeof(this.texts[who]) == LIST)))
            player:tell(this:nothing_loaded_msg());
            else
            player:tell("You are editing ", this:working_on(who), ".");
            player:tell("Your insertion point is ", (this.inserting[who] &gt; length(this.texts[who])) ? "after the last line: next line will be #" | "before line ", this.inserting[who], ".");
            player:tell(this.changes[who] ? this:change_msg() | this:no_change_msg());
            if (this.readable[who])
            player:tell("Your text is globally readable.");
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
          <NAME>abort</NAME>
          <CODE>
            if (!this.changes[who = player in this.active])
            player:tell("No changes to throw away.  Editor cleared.");
            else
            player:tell("Throwing away session for ", this:working_on(who), ".");
            endif
            this:reset_session(who);
            if (this.exit_on_abort)
            this:done();
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="none" PREP="none" IOBJ="none">
          <NAME>done q*uit pause</NAME>
          <CODE>
            if (!(caller in {this, player}))
            return E_PERM;
            elseif (!(who = player in this.active))
            player:tell("You are not actually in ", this.name, ".");
            return;
            elseif (!valid(origin = this.original[who]))
            player:tell("I don't know where you came here from.");
            else
            player:moveto(origin);
            if (player.location == this)
            player:tell("Hmmm... the place you came from doesn't want you back.");
            else
            if (msg = this:return_msg())
            player.location:announce($string_utils:pronoun_sub(msg));
            endif
            return;
            endif
            endif
            player:tell("You'll have to use 'home' or a teleporter.");
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>huh2</NAME>
          <CODE>
            "This catches subst and find commands that don't fit into the usual model, e.g., s/.../.../ without the space after the s, and find commands without the verb `find'.  Still behaves in annoying ways (e.g., loses if the search string contains multiple whitespace), but better than before.";
            set_task_perms(caller_perms());
            if ((c = callers()) &amp;&amp; ((c[1][1] != this) || (length(c) &gt; 1)))
            return pass(@args);
            endif
            verb = args[1];
            v = 1;
            vmax = min(length(verb), 5);
            while ((v &lt;= vmax) &amp;&amp; (verb[v] == "subst"[v]))
            v = v + 1;
            endwhile
            argstr = $code_utils:argstr(verb, args[2]);
            if (((v &gt; 1) &amp;&amp; (v &lt;= length(verb))) &amp;&amp; (((vl = verb[v]) &lt; "A") || (vl &gt; "Z")))
            argstr = (verb[v..$] + (argstr &amp;&amp; " ")) + argstr;
            return this:subst();
            elseif ("/" == verb[1])
            argstr = (verb + (argstr &amp;&amp; " ")) + argstr;
            return this:find();
            else
            pass(@args);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>insertion</NAME>
          <CODE>
            return this:ok(who = args[1]) &amp;&amp; this.inserting[who];
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>set_insertion</NAME>
          <CODE>
            return this:ok(who = args[1]) &amp;&amp; ((((ins = toint(args[2])) &lt; 1) ? E_INVARG | ((ins &lt;= (max = length(this.texts[who]) + 1)) || (ins = max))) &amp;&amp; (this.inserting[who] = ins));
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>changed retain_session_on_exit</NAME>
          <CODE>
            return this:ok(who = args[1]) &amp;&amp; this.changes[who];
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>set_changed</NAME>
          <CODE>
            return this:ok(who = args[1]) &amp;&amp; (((unchanged = !args[2]) || (this.times[who] = time())) &amp;&amp; (this.changes[who] = !unchanged));
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>origin</NAME>
          <CODE>
            return this:ok(who = args[1]) &amp;&amp; this.original[who];
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>set_origin</NAME>
          <CODE>
            return this:ok(who = args[1]) &amp;&amp; (((valid(origin = args[2]) &amp;&amp; (origin != this)) || ((origin == $nothing) || E_INVARG)) &amp;&amp; (this.original[who] = origin));
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>readable</NAME>
          <CODE>
            return (((who = args[1]) &lt; 1) || (who &gt; length(this.active))) ? E_RANGE | this.readable[who];
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>set_readable</NAME>
          <CODE>
            return this:ok(who = args[1]) &amp;&amp; (this.readable[who] = !(!args[2]));
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>text</NAME>
          <CODE>
            {?who = player in this.active} = args;
            return (this:readable(who) || this:ok(who)) &amp;&amp; this.texts[who];
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>load</NAME>
          <CODE>
            texts = args[2];
            if (!(fuckup = this:ok(who = args[1])))
            return fuckup;
            elseif (typeof(texts) == STR)
            texts = {texts};
            elseif ((typeof(texts) != LIST) || (length(texts) &amp;&amp; (typeof(texts[1]) != STR)))
            return E_TYPE;
            endif
            this.texts[who] = texts;
            this.inserting[who] = length(texts) + 1;
            this.changes[who] = 0;
            this.readable[who] = 0;
            this.times[who] = time();
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>working_on</NAME>
          <CODE>
            "Dummy routine.  The child editor should provide something informative";
            return this:ok(who = args[1]) &amp;&amp; (("something [in " + this.name) + "]");
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>ok</NAME>
          <CODE>
            who = args[1];
            if ((who &lt; 1) || (who &gt; length(this.active)))
            return E_RANGE;
            elseif ((length(c = callers()) &lt; 2) ? player == this.active[who] | ((c[2][1] == this) || ($perm_utils:controls(c[2][3], this.active[who]) || (c[2][3] == $generic_editor.owner))))
            return 1;
            else
            return E_PERM;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>loaded</NAME>
          <CODE>
            return ((who = args[1] in this.active) &amp;&amp; (typeof(this.texts[who]) == LIST)) &amp;&amp; who;
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>list_line</NAME>
          <CODE>
            if (this:ok(who = args[1]))
            f = 1 + ((line = args[2]) in {(ins = this.inserting[who]) - 1, ins});
            player:tell($string_utils:right(line, 3, " _^"[f]), ":_^"[f], " ", this.texts[who][line]);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>insert_line</NAME>
          <CODE>
            ":insert_line([who,] line or list of lines [,quiet])";
            "  inserts the given text at the insertion point.";
            "  returns E_NONE if the session has no text loaded yet.";
            if (typeof(args[1]) != INT)
            args = {player in this.active, @args};
            endif
            {who, lines, ?quiet = this.active[who]:edit_option("quiet_insert")} = args;
            if (!(fuckup = this:ok(who)))
            return fuckup;
            elseif (typeof(text = this.texts[who]) != LIST)
            return E_NONE;
            else
            if (typeof(lines) != LIST)
            lines = {lines};
            endif
            p = this.active[who];
            insert = this.inserting[who];
            this.texts[who] = {@text[1..insert - 1], @lines, @text[insert..$]};
            this.inserting[who] = insert + length(lines);
            if (lines)
            if (!this.changes[who])
            this.changes[who] = 1;
            this.times[who] = time();
            endif
            if (!quiet)
            if (length(lines) != 1)
            p:tell("Lines ", insert, "-", (insert + length(lines)) - 1, " added.");
            else
            p:tell("Line ", insert, " added.");
            endif
            endif
            else
            p:tell("No lines added.");
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>append_line</NAME>
          <CODE>
            ":append_line([who,] string)";
            "  appends the given string to the line before the insertion point.";
            "  returns E_NONE if the session has no text loaded yet.";
            if (typeof(args[1]) != INT)
            args = {player in this.active, @args};
            endif
            {who, string} = args;
            if (!(fuckup = this:ok(who)))
            return fuckup;
            elseif ((append = this.inserting[who] - 1) &lt; 1)
            return this:insert_line(who, {string});
            elseif (typeof(text = this.texts[who]) != LIST)
            return E_NONE;
            else
            this.texts[who][append] = text[append] + string;
            if (!this.changes[who])
            this.changes[who] = 1;
            this.times[who] = time();
            endif
            p = this.active[who];
            if (!p:edit_option("quiet_insert"))
            p:tell("Appended to line ", append, ".");
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>join_lines</NAME>
          <CODE>
            {who, from, to, english} = args;
            if (!(fuckup = this:ok(who)))
            return fuckup;
            elseif (from &gt;= to)
            return 0;
            else
            nline = "";
            for line in ((text = this.texts[who])[from..to])
            if (!english)
            nline = nline + line;
            else
            len = length(line) + 1;
            while ((len = len - 1) &amp;&amp; (line[len] == " "))
            endwhile
            if (len &gt; 0)
            nline = (nline + line) + (index(".:", line[len]) ? "  " | " ");
            endif
            endif
            endfor
            this.texts[who] = {@text[1..from - 1], nline, @text[to + 1..$]};
            if ((insert = this.inserting[who]) &gt; from)
            this.inserting[who] = (insert &lt;= to) ? from + 1 | ((insert - to) + from);
            endif
            if (!this.changes[who])
            this.changes[who] = 1;
            this.times[who] = time();
            endif
            return to - from;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>parse_number</NAME>
          <CODE>
            "parse_number(who,string,before)   interprets string as a line number.  In the event that string is `.', `before' tells us which line to use.  Return 0 if string is bogus.";
            {who, string, before} = args;
            if (!(fuckup = this:ok(who)))
            return fuckup;
            endif
            last = length(this.texts[who]);
            ins = this.inserting[who] - 1;
            after = !before;
            if (!string)
            return 0;
            elseif ("." == string)
            return ins + after;
            elseif (!(i = index("_^$", string[slen = length(string)])))
            return toint(string);
            else
            start = {ins + 1, ins, last + 1}[i];
            n = 1;
            if ((slen &gt; 1) &amp;&amp; (!(n = toint(string[1..slen - 1]))))
            return 0;
            elseif (i % 2)
            return start - n;
            else
            return start + n;
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>parse_range</NAME>
          <CODE>
            "parse_range(who,default,@args) =&gt; {from to rest}";
            numargs = length(args);
            if (!(fuckup = this:ok(who = args[1])))
            return fuckup;
            elseif (!(last = length(this.texts[who])))
            return this:no_text_msg();
            endif
            default = args[2];
            r = 0;
            while (default &amp;&amp; (LIST != typeof(r = this:parse_range(who, {}, default[1]))))
            default = listdelete(default, 1);
            endwhile
            if (typeof(r) == LIST)
            from = r[1];
            to = r[2];
            else
            from = to = 0;
            endif
            saw_from_to = 0;
            not_done = 1;
            a = 2;
            while (((a = a + 1) &lt;= numargs) &amp;&amp; not_done)
            if (args[a] == "from")
            if ((a == numargs) || (!(from = this:parse_number(who, args[a = a + 1], 0))))
            return "from ?";
            endif
            saw_from_to = 1;
            elseif (args[a] == "to")
            if ((a == numargs) || (!(to = this:parse_number(who, args[a = a + 1], 1))))
            return "to ?";
            endif
            saw_from_to = 1;
            elseif (saw_from_to)
            a = a - 1;
            not_done = 0;
            elseif (i = index(args[a], "-"))
            from = this:parse_number(who, args[a][1..i - 1], 0);
            to = this:parse_number(who, args[a][i + 1..$], 1);
            not_done = 0;
            elseif (f = this:parse_number(who, args[a], 0))
            from = f;
            if ((a == numargs) || (!(to = this:parse_number(who, args[a + 1], 1))))
            to = from;
            else
            a = a + 1;
            endif
            not_done = 0;
            else
            a = a - 1;
            not_done = 0;
            endif
            endwhile
            if (from &lt; 1)
            return tostr("from ", from, "?  (out of range)");
            elseif (to &gt; last)
            return tostr("to ", to, "?  (out of range)");
            elseif (from &gt; to)
            return tostr("from ", from, " to ", to, "?  (backwards range)");
            else
            return {from, to, $string_utils:from_list(args[a..numargs], " ")};
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>parse_insert</NAME>
          <CODE>
            "parse_ins(who,string)  interprets string as an insertion point, i.e., a position between lines and returns the number of the following line or 0 if bogus.";
            if (!(fuckup = this:ok(who = args[1])))
            return fuckup;
            endif
            {who, string} = args;
            last = length(this.texts[who]) + 1;
            ins = this.inserting[who];
            if (i = index("-+", string[1]))
            rest = string[2..$];
            return ((n = toint(rest)) || (rest == "0")) ? {ins - n, ins + n}[i] | E_INVARG;
            else
            if (!(j = index(string, "^") || index(string, "_")))
            offset = 0;
            else
            offset = (j == 1) || toint(string[1..j - 1]);
            if (!offset)
            return E_INVARG;
            elseif (string[j] == "^")
            offset = -offset;
            endif
            endif
            rest = string[j + 1..$];
            if (i = rest in {".", "$"})
            return offset + {ins, last}[i];
            elseif (!(n = toint(rest)))
            return E_INVARG;
            else
            return (offset + (j &amp;&amp; (string[j] == "^"))) + n;
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>parse_subst</NAME>
          <CODE>
            {cmd, ?recognized_flags = "gcr", ?null_subst_msg = "Null substitution?"} = args;
            if (!cmd)
            return "/xxx/yyy[/[g][c]] [&lt;range&gt;] expected..";
            endif
            bchar = cmd[1];
            cmd = cmd[2..$];
            fromstr = cmd[1..(b2 = index(cmd + bchar, bchar, 1)) - 1];
            cmd = cmd[b2 + 1..$];
            tostr = cmd[1..(b2 = index(cmd + bchar, bchar, 1)) - 1];
            cmd = cmd[b2 + 1..$];
            cmdlen = length(cmd);
            b2 = 0;
            while (((b2 = b2 + 1) &lt;= cmdlen) &amp;&amp; index(recognized_flags, cmd[b2]))
            endwhile
            return ((fromstr == "") &amp;&amp; (tostr == "")) ? null_subst_msg | {fromstr, tostr, cmd[1..b2 - 1], cmd[b2..$]};
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>invoke</NAME>
          <CODE>
            ":invoke(...)";
            "to find out what arguments this verb expects,";
            "see this editor's parse_invoke verb.";
            new = args[1];
            if ((!(caller in {this, player})) &amp;&amp; (!$perm_utils:controls(caller_perms(), player)))
            "...non-editor/non-player verb trying to send someone to the editor...";
            return E_PERM;
            endif
            if ((who = this:loaded(player)) &amp;&amp; this:changed(who))
            if (!new)
            if (this:suck_in(player))
            player:tell("You are working on ", this:working_on(who));
            endif
            return;
            elseif (player.location == this)
            player:tell("You are still working on ", this:working_on(who));
            if (msg = this:previous_session_msg())
            player:tell(msg);
            endif
            return;
            endif
            "... we're not in the editor and we're about to start something new,";
            "... but there's still this pending session...";
            player:tell("You were working on ", this:working_on(who));
            if (!$command_utils:yes_or_no("Do you wish to delete that session?"))
            if (this:suck_in(player))
            player:tell("Continuing with ", this:working_on(player in this.active));
            if (msg = this:previous_session_msg())
            player:tell(msg);
            endif
            endif
            return;
            endif
            "... note session number may have changed =&gt; don't trust `who'";
            this:kill_session(player in this.active);
            endif
            spec = this:parse_invoke(@args);
            if (typeof(spec) == LIST)
            if ((player:edit_option("local") &amp;&amp; $object_utils:has_verb(this, "local_editing_info")) &amp;&amp; (info = this:local_editing_info(@spec)))
            this:invoke_local_editor(@info);
            elseif (this:suck_in(player))
            this:init_session(player in this.active, @spec);
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>suck_in</NAME>
          <CODE>
            "The correct way to move someone into the editor.";
            if (((loc = (who_obj = args[1]).location) != this) &amp;&amp; (caller == this))
            this.invoke_task = task_id();
            who_obj:moveto(this);
            if (who_obj.location == this)
            try
            "...forked, just in case loc:announce is broken...";
            "changed to a try-endtry. Lets reduce tasks..Ho_Yan 12/20/96";
            if (valid(loc) &amp;&amp; (msg = this:depart_msg()))
            loc:announce($string_utils:pronoun_sub(msg));
            endif
            except (ANY)
            "Just drop it and move on";
            endtry
            else
            who_obj:tell("For some reason, I can't move you.   (?)");
            this:exitfunc(who_obj);
            endif
            this.invoke_task = 0;
            endif
            return who_obj.location == this;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>new_session</NAME>
          <CODE>
            "WIZARDLY";
            {who_obj, from} = args;
            if ($object_utils:isa(from, $generic_editor))
            "... never put an editor in .original, ...";
            if (w = who_obj in from.active)
            from = from.original[w];
            else
            from = #-1;
            endif
            endif
            if (caller != this)
            return E_PERM;
            elseif (who = who_obj in this.active)
            "... edit in progress here...";
            if (valid(from))
            this.original[who] = from;
            endif
            return -1;
            else
            for p in ({{"active", who_obj}, {"original", valid(from) ? from | $nothing}, {"times", time()}, @this.stateprops})
            this.(p[1]) = {@this.(p[1]), p[2]};
            endfor
            return length(this.active);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>kill_session</NAME>
          <CODE>
            "WIZARDLY";
            if (!(fuckup = this:ok(who = args[1])))
            return fuckup;
            else
            for p in ({@this.stateprops, {"original"}, {"active"}, {"times"}})
            this.(p[1]) = listdelete(this.(p[1]), who);
            endfor
            return who;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>reset_session</NAME>
          <CODE>
            "WIZARDLY";
            if (!(fuckup = this:ok(who = args[1])))
            return fuckup;
            else
            for p in (this.stateprops)
            this.(p[1])[who] = p[2];
            endfor
            this.times[who] = time();
            return who;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>kill_all_sessions</NAME>
          <CODE>
            "WIZARDLY";
            if ((caller != this) &amp;&amp; (!caller_perms().wizard))
            return E_PERM;
            else
            for victim in (this.contents)
            victim:tell("Sorry, ", this.name, " is going down.  Your editing session is hosed.");
            victim:moveto(((who = victim in this.active) &amp;&amp; valid(origin = this.original[who])) ? origin | (valid(victim.home) ? victim.home | $player_start));
            endfor
            for p in ({@this.stateprops, {"original"}, {"active"}, {"times"}})
            this.(p[1]) = {};
            endfor
            return 1;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>acceptable</NAME>
          <CODE>
            return is_player(who_obj = args[1]) &amp;&amp; (who_obj.wizard || pass(@args));
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>enterfunc</NAME>
          <CODE>
            who_obj = args[1];
            if (who_obj.wizard &amp;&amp; (!(who_obj in this.active)))
            this:accept(who_obj);
            endif
            pass(@args);
            if (this.invoke_task == task_id())
            "Means we're about to load something, so be quiet.";
            this.invoke_task = 0;
            elseif (who = this:loaded(who_obj))
            who_obj:tell("You are working on ", this:working_on(who), ".");
            elseif (msg = this:nothing_loaded_msg())
            who_obj:tell(msg);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>exitfunc</NAME>
          <CODE>
            if (!(who = (who_obj = args[1]) in this.active))
            elseif (this:retain_session_on_exit(who))
            if (msg = this:no_littering_msg())
            who_obj:tell_lines(msg);
            endif
            else
            this:kill_session(who);
            endif
            pass(@args);
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="any" IOBJ="any">
          <NAME>@flush</NAME>
          <CODE>
            "@flush &lt;editor&gt;";
            "@flush &lt;editor&gt; at &lt;month&gt; &lt;day&gt;";
            "@flush &lt;editor&gt; at &lt;weekday&gt;";
            "The first form removes all sessions from the editor; the other two forms remove everything older than the given date.";
            if ((caller_perms() != #-1) &amp;&amp; (caller_perms() != player))
            raise(E_PERM);
            elseif (!$perm_utils:controls(player, this))
            player:tell("Only the owner of the editor can do a ", verb, ".");
            return;
            endif
            if (!prepstr)
            player:tell("Trashing all sessions.");
            this:kill_all_sessions();
            elseif (prepstr != "at")
            player:tell("Usage:  ", verb, " ", dobjstr, " [at [mon day|weekday]]");
            else
            p = prepstr in args;
            if (t = $time_utils:from_day(iobjstr, -1))
            elseif (t = $time_utils:from_month(args[p + 1], -1))
            if (length(args) &gt; (p + 1))
            if (!(n = toint(args[p + 2])))
            player:tell(args[p + 1], " WHAT?");
            return;
            endif
            t = t + ((n - 1) * 86400);
            endif
            else
            player:tell("couldn't parse date");
            return;
            endif
            this:do_flush(t, "noisy");
            endif
            player:tell("Done.");
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="for/about" IOBJ="this">
          <NAME>@stateprop</NAME>
          <CODE>
            if (!$perm_utils:controls(player, this))
            player:tell(E_PERM);
            return;
            endif
            if (i = index(dobjstr, "="))
            default = dobjstr[i + 1..$];
            prop = dobjstr[1..i - 1];
            if (argstr[1 + index(argstr, "=")] == "\"")
            elseif (default[1] == "#")
            default = toobj(default);
            elseif (index("0123456789", default[1]))
            default = toint(default);
            elseif (default == "{}")
            default = {};
            endif
            else
            default = 0;
            prop = dobjstr;
            endif
            if (typeof(result = this:set_stateprops(prop, default)) == ERR)
            player:tell((result == E_RANGE) ? tostr(".", prop, " needs to hold a list of the same length as .active (", length(this.active), ").") | ((result != E_NACC) ? result | (prop + " is already a property on an ancestral editor.")));
            else
            player:tell("Property added.");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="out of/from inside/from" IOBJ="this">
          <NAME>@rmstateprop</NAME>
          <CODE>
            if (!$perm_utils:controls(player, this))
            player:tell(E_PERM);
            elseif (typeof(result = this:set_stateprops(dobjstr)) == ERR)
            player:tell((result != E_NACC) ? result | (dobjstr + " is already a property on an ancestral editor."));
            else
            player:tell("Property removed.");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>initialize</NAME>
          <CODE>
            if ($perm_utils:controls(caller_perms(), this))
            pass(@args);
            this:kill_all_sessions();
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>init_for_core</NAME>
          <CODE>
            if (caller_perms().wizard)
            pass();
            this:kill_all_sessions();
            if (this == $generic_editor)
            this.help = $editor_help;
            endif
            if ($object_utils:defines_verb(this, "is_not_banned"))
            delete_verb(this, "is_not_banned");
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>set_stateprops</NAME>
          <CODE>
            remove = length(args) &lt; 2;
            if ((caller != this) &amp;&amp; (!$perm_utils:controls(caller_perms(), this)))
            return E_PERM;
            elseif (!(length(args) in {1, 2}))
            return E_ARGS;
            elseif (typeof(prop = args[1]) != STR)
            return E_TYPE;
            elseif (i = $list_utils:iassoc(prop, this.stateprops))
            if (!remove)
            this.stateprops[i] = {prop, args[2]};
            elseif ($object_utils:has_property(parent(this), prop))
            return E_NACC;
            else
            this.stateprops = listdelete(this.stateprops, i);
            endif
            elseif (remove)
            elseif (prop in `properties(this) ! ANY =&gt; {}')
            if (this:_stateprop_length(prop) != length(this.active))
            return E_RANGE;
            endif
            this.stateprops = {{prop, args[2]}, @this.stateprops};
            else
            return $object_utils:has_property(this, prop) ? E_NACC | E_PROPNF;
            endif
            return 0;
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>description</NAME>
          <CODE>
            is_look_self = 1;
            for c in (callers())
            if (is_look_self &amp;&amp; (c[2] in {"enterfunc", "confunc"}))
            return {"", "Do a 'look' to get the list of commands, or 'help' for assistance.", "", @this.description};
            elseif ((c[2] != "look_self") &amp;&amp; (c[2] != "pass"))
            is_look_self = 0;
            endif
            endfor
            d = {"Commands:", ""};
            col = {{}, {}};
            for c in [1..2]
            for cmd in (this.commands2[c])
            cmd = this:commands_info(cmd);
            col[c] = {cmdargs = $string_utils:left(cmd[1] + " ", 12) + cmd[2], @col[c]};
            endfor
            endfor
            i1 = length(col[1]);
            i2 = length(col[2]);
            right = 0;
            while (i1 || i2)
            if (!((i1 &amp;&amp; (length(col[1][i1]) &gt; 35)) || (i2 &amp;&amp; (length(col[2][i2]) &gt; 35))))
            d = {@d, $string_utils:left(i1 ? col[1][i1] | "", 40) + (i2 ? col[2][i2] | "")};
            i1 &amp;&amp; (i1 = i1 - 1);
            i2 &amp;&amp; (i2 = i2 - 1);
            right = 0;
            elseif (right &amp;&amp; i2)
            d = {@d, (length(col[2][i2]) &gt; 35) ? $string_utils:right(col[2][i2], 75) | ($string_utils:space(40) + col[2][i2])};
            i2 = i2 - 1;
            right = 0;
            elseif (i1)
            d = {@d, col[1][i1]};
            i1 = i1 - 1;
            right = 1;
            else
            right = 1;
            endif
            endwhile
            return {@d, "", "----  Do `help &lt;cmdname&gt;' for help with a given command.  ----", "", "  &lt;ins&gt; ::= $ (the end) | [^]n (above line n) | _n (below line n) | . (current)", "&lt;range&gt; ::= &lt;lin&gt; | &lt;lin&gt;-&lt;lin&gt; | from &lt;lin&gt; | to &lt;lin&gt; | from &lt;lin&gt; to &lt;lin&gt;", "  &lt;lin&gt; ::= n | [n]$ (n from the end) | [n]_ (n before .) | [n]^ (n after .)", "`help insert' and `help ranges' describe these in detail.", @this.description};
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>commands_info</NAME>
          <CODE>
            cmd = args[1];
            if (pc = $list_utils:assoc(cmd, this.commands))
            return pc;
            elseif (this == $generic_editor)
            return {cmd, "&lt;&lt;&lt;&lt;&lt;======= Need to add this to .commands"};
            else
            return parent(this):commands_info(cmd);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>match_object</NAME>
          <CODE>
            {objstr, ?who = player} = args;
            origin = this;
            while ((where = player in origin.active) &amp;&amp; ($recycler:valid(origin = origin.original[where]) &amp;&amp; (origin != this)))
            if (!$object_utils:isa(origin, $generic_editor))
            return origin:match_object(objstr, who);
            endif
            endwhile
            return who:my_match_object(objstr, #-1);
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>who_location_msg</NAME>
          <CODE>
            who = args[1];
            where = {#-1, @this.original}[1 + (who in this.active)];
            wherestr = `where:who_location_msg(who) ! ANY =&gt; "An Editor"';
            if (typeof(wherestr) != STR)
            wherestr = "broken who_location_msg";
            endif
            return strsub(this.who_location_msg, "%L", wherestr);
            return $string_utils:pronoun_sub(this.who_location_msg, who, this, where);
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>nothing_loaded_msg no_text_msg change_msg no_change_msg no_littering_msg depart_msg return_msg previous_session_msg</NAME>
          <CODE>
            return this.(verb);
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>announce announce_all announce_all_but tell_contents</NAME>
          <CODE>
            return;
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>fill_string</NAME>
          <CODE>
            "fill(string [, width [, prefix]])";
            "tries to cut &lt;string&gt; into substrings of length &lt; &lt;width&gt; along word boundaries.  Prefix, if supplied, will be prefixed to the 2nd..last substrings.";
            {string, ?width = 1 + player:linelen(), ?prefix = ""} = args;
            width = width + 1;
            if (width &lt; (3 + length(prefix)))
            return E_INVARG;
            endif
            string = ("$" + string) + " $";
            len = length(string);
            if (len &lt;= width)
            last = len - 1;
            next = len;
            else
            last = rindex(string[1..width], " ");
            if (last &lt; ((width + 1) / 2))
            last = width + index(string[width + 1..len], " ");
            endif
            next = last;
            while (string[next = next + 1] == " ")
            endwhile
            endif
            while (string[last = last - 1] == " ")
            endwhile
            ret = {string[2..last]};
            width = width - length(prefix);
            minlast = (width + 1) / 2;
            while (next &lt; len)
            string = "$" + string[next..len];
            len = (len - next) + 2;
            if (len &lt;= width)
            last = len - 1;
            next = len;
            else
            last = rindex(string[1..width], " ");
            if (last &lt; minlast)
            last = width + index(string[width + 1..len], " ");
            endif
            next = last;
            while (string[next = next + 1] == " ")
            endwhile
            endif
            while (string[last = last - 1] == " ")
            endwhile
            if (last &gt; 1)
            ret = {@ret, prefix + string[2..last]};
            endif
            endwhile
            return ret;
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>here_huh</NAME>
          <CODE>
            "This catches subst and find commands that don't fit into the usual model, e.g., s/.../.../ without the space after the s, and find commands without the verb `find'.  Still behaves in annoying ways (e.g., loses if the search string contains multiple whitespace), but better than before.";
            if ((caller != this) &amp;&amp; (caller_perms() != player))
            return E_PERM;
            endif
            {verb, args} = args;
            v = 1;
            vmax = min(length(verb), 5);
            while ((v &lt;= vmax) &amp;&amp; (verb[v] == "subst"[v]))
            v = v + 1;
            endwhile
            argstr = $code_utils:argstr(verb, args);
            if ((v &gt; 1) &amp;&amp; ((v &lt;= length(verb)) &amp;&amp; (((vl = verb[v]) &lt; "A") || (vl &gt; "Z"))))
            argstr = (verb[v..$] + (argstr &amp;&amp; " ")) + argstr;
            this:subst();
            return 1;
            elseif ("/" == verb[1])
            argstr = (verb + (argstr &amp;&amp; " ")) + argstr;
            this:find();
            return 1;
            else
            return 0;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>match</NAME>
          <CODE>
            return $failed_match;
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>get_room</NAME>
          <CODE>
            ":get_room([player])  =&gt; correct room to match in on invocation.";
            {?who = player} = args;
            if (who.location != this)
            return who.location;
            else
            origin = this;
            while ((where = player in origin.active) &amp;&amp; (valid(origin = origin.original[where]) &amp;&amp; (origin != this)))
            if (!$object_utils:isa(origin, $generic_editor))
            return origin;
            endif
            endwhile
            return this;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>invoke_local_editor</NAME>
          <CODE>
            ":invoke_local_editor(name, text, upload)";
            "Spits out the magic text that invokes the local editor in the player's client.";
            "NAME is a good human-readable name for the local editor to use for this particular piece of text.";
            "TEXT is a string or list of strings, the initial body of the text being edited.";
            "UPLOAD, a string, is a MOO command that the local editor can use to save the text when the user is done editing.  The local editor is going to send that command on a line by itself, followed by the new text lines, followed by a line containing only `.'.  The UPLOAD command should therefore call $command_utils:read_lines() to get the new text as a list of strings.";
            if (caller != this)
            return;
            endif
            {name, text, upload} = args;
            if (typeof(text) == STR)
            text = {text};
            endif
            notify(player, tostr("#$# edit name: ", name, " upload: ", upload));
            ":dump_lines() takes care of the final `.' ...";
            for line in ($command_utils:dump_lines(text))
            notify(player, line);
            endfor
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>_stateprop_length</NAME>
          <CODE>
            "+c properties on children cannot necessarily be read, so we need this silliness...";
            if (caller != this)
            return E_PERM;
            else
            return length(this.(args[1]));
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
          <NAME>print</NAME>
          <CODE>
            txt = this:text(player in this.active);
            if (typeof(txt) == LIST)
            player:tell_lines(txt);
            else
            player:tell("Text unreadable:  ", txt);
            endif
            player:tell("--------------------------");
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>accept</NAME>
          <CODE>
            return this:acceptable(who_obj = args[1]) &amp;&amp; this:new_session(who_obj, who_obj.location);
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>y*ank</NAME>
          <CODE>
            "Usage: yank from &lt;note&gt;";
            "       yank &lt;message-sequence&gt; from &lt;mail-recipient&gt;";
            "       yank from &lt;object&gt;:&lt;verb&gt;";
            "       yank from &lt;object&gt;.&lt;property&gt;";
            "Grabs the specified text and inserts it at the cursor.";
            set_task_perms(player);
            if (dobjstr)
            "yank &lt;message-sequence&gt; from &lt;mail-recipient&gt;";
            if (!(p = player:parse_mailread_cmd(verb, args, "", "from")))
            return;
            elseif ($seq_utils:size(sequence = p[2]) != 1)
            player:notify(tostr("You can only ", verb, " one message at a time"));
            return;
            else
            m = (folder = p[1]):messages_in_seq(sequence);
            msg = m[1];
            header = tostr("Message ", msg[1]);
            if (folder != player)
            header = tostr(header, " on ", $mail_agent:name(folder));
            endif
            header = tostr(header, ":");
            lines = {header, @player:msg_full_text(@msg[2])};
            this:insert_line(this:loaded(player), lines, 0);
            endif
            elseif (pr = $code_utils:parse_propref(iobjstr))
            o = player:my_match_object(pr[1]);
            if ($command_utils:object_match_failed(o, pr[1]))
            return;
            elseif ((lines = `o.(pr[2]) ! ANY') == E_PROPNF)
            player:notify(tostr("There is no `", pr[2], "' property on ", $string_utils:nn(o), "."));
            return;
            elseif (lines == E_PERM)
            player:notify(tostr("Error: Permission denied reading ", iobjstr));
            return;
            elseif (typeof(lines) == ERR)
            player:notify(tostr("Error: ", lines, " reading ", iobjstr));
            return;
            elseif (typeof(lines) == STR)
            this:insert_line(this:loaded(player), lines, 0);
            return;
            elseif (typeof(lines) == LIST)
            for x in (lines)
            if (typeof(x) != STR)
            player:notify(tostr("Error: ", iobjstr, " does not contain a ", verb, "-able value."));
            return;
            endif
            endfor
            this:insert_line(this:loaded(player), lines, 0);
            return;
            else
            player:notify(tostr("Error: ", iobjstr, " does not contain a ", verb, "-able value."));
            return;
            endif
            elseif (pr = $code_utils:parse_verbref(iobjstr))
            o = player:my_match_object(pr[1]);
            if ($command_utils:object_match_failed(o, pr[1]))
            return;
            elseif (lines = `verb_code(o, pr[2], !player:edit_option("no_parens")) ! ANY')
            this:insert_line(this:loaded(player), lines, 0);
            return;
            elseif (lines == E_PERM)
            player:notify(tostr("Error: Permission denied reading ", iobjstr));
            return;
            elseif (lines == E_VERBNF)
            player:notify(tostr("There is no `", pr[2], "' verb on ", $string_utils:nn(o), "."));
            else
            player:notify(tostr("Error: ", lines, " reading ", iobjstr));
            return;
            endif
            elseif ($command_utils:object_match_failed(iobj = player:my_match_object(iobjstr), iobjstr))
            return;
            elseif ((lines = `iobj:text() ! ANY') == E_PERM)
            player:notify(tostr("Error: Permission denied reading ", iobjstr));
            return;
            elseif (lines == E_VERBNF)
            player:notify($string_utils:nn(iobj), " doesn't seem to be a note.");
            elseif (typeof(lines) == ERR)
            player:notify(tostr("Error: ", lines, " reading ", iobjstr));
            return;
            else
            this:insert_line(this:loaded(player), lines, 0);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>do_flush</NAME>
          <CODE>
            "Flushes editor sessions older than args[1].  If args[2] is true, prints status as it runs.  If args[2] is false, runs silently.";
            if (!$perm_utils:controls(caller_perms(), this))
            return E_PERM;
            else
            {t, noisy} = args;
            for i in [-length(this.active)..-1]
            if (this.times[-i] &lt; t)
            if (noisy)
            player:tell($string_utils:nn(this.active[-i]), ctime(this.times[-i]));
            endif
            this:kill_session(-i);
            endif
            endfor
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>s*ubst</NAME>
          <CODE>
            if (callers() &amp;&amp; (caller != this))
            return E_PERM;
            elseif (!(who = this:loaded(player)))
            player:tell(this:nothing_loaded_msg());
            elseif (typeof(subst = this:parse_subst(argstr)) != LIST)
            player:tell(tostr(subst));
            elseif (typeof(range = this:parse_range(who, {"_", "1"}, @$string_utils:explode(subst[4]))) != LIST)
            player:tell(range);
            elseif (range[3])
            player:tell("Junk at end of cmd:  ", range[3]);
            else
            {fromstr, tostr, specs, dummy} = subst;
            global = index(specs, "g", 1);
            regexp = index(specs, "r", 1);
            case = !index(specs, "c", 1);
            munged = {};
            text = this.texts[who];
            changed = {};
            {from, to} = range[1..2];
            for line in [from..to]
            t = t0 = text[line];
            if (!fromstr)
            t = tostr + t;
            elseif (global)
            if (regexp)
            while (new = this:subst_regexp(t, fromstr, tostr, case))
            t = new;
            endwhile
            else
            t = strsub(t, fromstr, tostr, case);
            endif
            else
            if (regexp)
            (new = this:subst_regexp(t, fromstr, tostr, case)) &amp;&amp; (t = new);
            else
            (i = index(t, fromstr, case)) &amp;&amp; (t = (t[1..i - 1] + tostr) + t[i + length(fromstr)..length(t)]);
            endif
            endif
            if (strcmp(t0, t))
            changed = {@changed, line};
            endif
            munged = {@munged, t};
            endfor
            if (!changed)
            player:tell("No changes in line", (from == to) ? tostr(" ", from) | tostr("s ", from, "-", to), ".");
            else
            this.texts[who] = {@text[1..from - 1], @munged, @text[to + 1..$]};
            if (!this.changes[who])
            this.changes[who] = 1;
            this.times[who] = time();
            endif
            for line in (changed)
            this:list_line(who, line);
            endfor
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>subst_regexp</NAME>
          <CODE>
            "Copied from Domain (#8111):subst_regexp by Mooshie (#106469) Mon Jan  5 19:27:26 1998 PST";
            "Usage: subst_regexp(STR text, STR from string, STR to string, INT case)";
            {text, from, to, case} = args;
            if (m = match(text, from, case))
            {start, end} = m[1..2];
            text[start..end] = substitute(to, m);
            return text;
            else
            return m;
            endif
          </CODE>
        </VERB>
        <OBJECT ID="obj47" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
          <NAME>Mail Room</NAME>
          <PROPERTY OWNER="obj36" >
            <NAME>replytos</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>recipients</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>subjects</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>sending</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>readable</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>times</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>commands2</NAME>
            <VALUE>{{"say", "emote", "lis*t", "ins*ert", "n*ext,p*rev", "enter", "del*ete", "f*ind", "s*ubst", "m*ove,c*opy", "join*l", "fill"}, {"y*ank", "w*hat", "subj*ect", "to", "also-to", "reply-to", "showlists,unsubscribe", "who", "pri*nt", "send", "abort", "q*uit,done,pause"}}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>help</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>no_text_msg</NAME>
            <VALUE>"Message body is empty."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>commands</NAME>
            <VALUE>{{"subj*ect", "[&lt;text&gt;]"}, {"to", "[&lt;rcpt&gt;..]"}, {"also-to", "[&lt;rcpt&gt;..]"}, {"reply-to", "[&lt;rcpt&gt;..]"}, {"who", "[&lt;rcpt&gt;..]"}, {"pri*nt", ""}, {"send", ""}, {"showlists,unsubscribe", ""}}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>invoke_task</NAME>
            <VALUE>0</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>exit_on_abort</NAME>
            <VALUE>1</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>previous_session_msg</NAME>
            <VALUE>"You need to either SEND it or ABORT it before you can start another message."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>stateprops</NAME>
            <VALUE>{{"sending", 0}, {"replytos", {}}, {"recipients", {}}, {"subjects", ""}, {"texts", {}}, {"changes", 0}, {"inserting", 1}, {"readable", 0}}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>depart_msg</NAME>
            <VALUE>"%N flattens out into a largish postage stamp and floats away."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>return_msg</NAME>
            <VALUE>"A largish postage stamp floats into the room and fattens up into %n."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>no_littering_msg</NAME>
            <VALUE>{"Saving your message so that you can finish it later.", "To come back, give the `@send' command with no arguments.", "Please come back and SEND or ABORT if you don't intend to be working on this", "message in the immediate future.  Keep Our MOO Clean!  No Littering!"}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>no_change_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>change_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>nothing_loaded_msg</NAME>
            <VALUE>"You're not editing anything!"</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>texts</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>active</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>changes</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>inserting</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>original</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>who_location_msg</NAME>
            <VALUE>"%L [mailing]"</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>free_home</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>victim_ejection_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>ejection_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>oejection_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>residents</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>free_entry</NAME>
            <VALUE>1</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>entrances</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>blessed_object</NAME>
            <VALUE>#-1</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>blessed_task</NAME>
            <VALUE>1442346925</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>exits</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>dark</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>ctype</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>key</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>aliases</NAME>
            <VALUE>{"Mail Room"}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>description</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>object_size</NAME>
            <VALUE>{23556, 919123694}</VALUE>
          </PROPERTY>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>working_on</NAME>
            <CODE>
              return this:ok(who = args[1]) &amp;&amp; tostr("a letter ", this:sending(who) ? "(in transit) " | "", "to ", this:recipient_names(who), (subject = `this.subjects[who] ! ANY') &amp;&amp; tostr(" entitled \"", subject, "\""));
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>parse_invoke</NAME>
            <CODE>
              "invoke(rcptstrings,verb[,subject]) for a @send";
              "invoke(1,verb,rcpts,subject,replyto,body) if no parsing is needed";
              "invoke(2,verb,msg,flags,replytos) for an @answer";
              if (!(which = args[1]))
              player:tell_lines({tostr("Usage:  ", args[2], " &lt;list-of-recipients&gt;"), tostr("        ", args[2], "                      to continue with a previous draft")});
              elseif (typeof(which) == LIST)
              "...@send...";
              if (rcpts = this:parse_recipients({}, which))
              if (replyto = player:mail_option("replyto"))
              replyto = this:parse_recipients({}, replyto, ".mail_options: ");
              endif
              if (0 == (subject = {@args, 0}[3]))
              if (player:mail_option("nosubject"))
              subject = "";
              else
              player:tell("Subject:");
              subject = $command_utils:read();
              endif
              endif
              return {rcpts, subject, replyto, {}};
              endif
              elseif (which == 1)
              return args[3..6];
              elseif (!(to_subj = this:parse_msg_headers(msg = args[3], flags = args[4])))
              else
              include = {};
              if ("include" in flags)
              prefix = "&gt;            ";
              for line in ($mail_agent:to_text(@msg))
              if (!line)
              prefix = "&gt;  ";
              include = {@include, prefix};
              else
              include = {@include, @this:fill_string("&gt;  " + line, 70, prefix)};
              endif
              endfor
              endif
              return {@to_subj, args[5], include};
              endif
              return 0;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>init_session</NAME>
            <CODE>
              {who, recip, subj, replyto, msg} = args;
              if (this:ok(who))
              this.sending[who] = 0;
              this.recipients[who] = recip;
              this.subjects[who] = subj;
              this.replytos[who] = replyto || {};
              this:load(who, msg);
              this.active[who]:tell("Composing ", this:working_on(who));
              p = this.active[who];
              "if (p:mail_option(\"enter\") &amp;&amp; !args[5])";
              "Changed from above so that @reply can take advantage of @mailoption +enter. Ho_Yan 11/9/94";
              if (p:mail_option("enter"))
              if (typeof(lines = $command_utils:read_lines()) == ERR)
              p:tell(lines);
              else
              this:insert_line(p in this.active, lines, 0);
              endif
              endif
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>pri*nt</NAME>
            <CODE>
              if (!dobjstr)
              plyr = player;
              elseif ($command_utils:player_match_result(plyr = $string_utils:match_player(dobjstr), dobjstr)[1])
              return;
              endif
              if ((plyr != player) &amp;&amp; (!this:readable(plyr in this.active)))
              player:tell(plyr.name, "(", plyr, ") has not published anything here.");
              elseif (typeof(msg = this:message_with_headers(plyr in this.active)) != LIST)
              player:tell(msg);
              else
              player:display_message({((plyr == player) ? "Your" | tostr(plyr.name, "(", plyr, ")'s")) + " message so far:", ""}, player:msg_text(@msg));
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>message_with_headers</NAME>
            <CODE>
              return (this:readable(who = args[1]) || this:ok(who)) &amp;&amp; $mail_agent:make_message(this.active[who], this.recipients[who], {this.subjects[who], this.replytos[who]}, this:text(who));
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>subj*ect:</NAME>
            <CODE>
              if (!(who = this:loaded(player)))
              player:tell(this:nothing_loaded_msg());
              elseif (!argstr)
              player:tell(this.subjects[who]);
              elseif (ERR == typeof(subj = this:set_subject(who, argstr)))
              player:tell(subj);
              else
              player:tell(subj ? ("Setting the subject line for your message to \"" + subj) + "\"." | "Deleting the subject line for your message.");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>set_subject</NAME>
            <CODE>
              if (!(fuckup = this:ok(who = args[1])))
              return fuckup;
              else
              this.subjects[who] = subj = args[2];
              this:set_changed(who, 1);
              return subj;
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>sending</NAME>
            <CODE>
              if (!(fuckup = this:ok(who = args[1])))
              return fuckup;
              elseif ((!(task = this.sending[who])) || $code_utils:task_valid(task))
              return task;
              else
              "... uh oh... sending task crashed...";
              this:set_changed(who, 1);
              return this.sending[who] = 0;
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>to*:</NAME>
            <CODE>
              if (!(who = this:loaded(player)))
              player:tell(this:nothing_loaded_msg());
              elseif (!args)
              player:tell("Your message is currently to ", this:recipient_names(who), ".");
              else
              this.recipients[who] = this:parse_recipients({}, args);
              this:set_changed(who, 1);
              player:tell("Your message is now to ", this:recipient_names(who), ".");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>also*-to: cc*:</NAME>
            <CODE>
              if (!(who = this:loaded(player)))
              player:tell(this:nothing_loaded_msg());
              else
              this.recipients[who] = this:parse_recipients(this.recipients[who], args);
              this:set_changed(who, 1);
              player:tell("Your message is now to ", this:recipient_names(who), ".");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>not-to*: uncc*:</NAME>
            <CODE>
              if (!(who = this:loaded(player)))
              player:tell(this:nothing_loaded_msg());
              else
              recips = this.recipients[who];
              nonmrs = {};
              mrs = {};
              for o in (recips)
              if ($object_utils:isa(o, $mail_recipient))
              mrs = {@mrs, o};
              else
              nonmrs = {@nonmrs, o};
              endif
              endfor
              for a in (args)
              if (!a)
              player:tell("\"\"?");
              return;
              elseif (valid(aobj = $mail_agent:match_recipient(a)) &amp;&amp; (aobj in recips))
              elseif ($failed_match != (aobj = $string_utils:literal_object(a)))
              if (!(aobj in recips))
              player:tell(aobj, " was not a recipient.");
              return;
              endif
              elseif ((a[1] == "*") &amp;&amp; valid(aobj = $string_utils:match(a[2..$], mrs, "aliases")))
              elseif ((a[1] != "*") &amp;&amp; valid(aobj = $string_utils:match(a, nonmrs, "aliases")))
              elseif (valid(aobj = $string_utils:match(a, recips, "aliases")))
              else
              player:tell("couldn't find \"", a, "\" in To: list.");
              return;
              endif
              recips = setremove(recips, aobj);
              endfor
              this.recipients[who] = recips;
              this:set_changed(who, 1);
              player:tell("Your message is now to ", this:recipient_names(who), ".");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>parse_recipients</NAME>
            <CODE>
              "parse_recipients(prev_list,list_of_strings) -- parses list of strings and adds any resulting player objects to prev_list.  Optional 3rd arg is prefixed to any mismatch error messages";
              {recips, l, ?cmd_id = ""} = args;
              cmd_id = cmd_id || "";
              for s in ((typeof(l) == LIST) ? l | {l})
              if (typeof(s) != STR)
              if ($mail_agent:is_recipient(s))
              recips = setadd(recips, s);
              else
              player:tell(cmd_id, s, " is not a valid mail recipient.");
              endif
              elseif (!$mail_agent:match_failed(md = $mail_agent:match_recipient(s), s, cmd_id))
              recips = setadd(recips, md);
              endif
              endfor
              return recips;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>recipient_names</NAME>
            <CODE>
              return this:ok(who = args[1]) &amp;&amp; $mail_agent:name_list(@this.recipients[who]);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>make_message</NAME>
            <CODE>
              return $mail_agent:make_message(@args);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>name_list</NAME>
            <CODE>
              "(obsolete verb... see $mail_agent:name_list)";
              return $mail_agent:(verb)(@args[1]);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>parse_msg_headers</NAME>
            <CODE>
              "parse_msg_headers(msg,flags)";
              "  parses msg to extract reply recipients and construct a subject line";
              "  if the \"all\" flag is present, reply goes to all of the original recipients";
              "  returns a list {recipients, subjectline} or 0 in case of error.";
              {msg, flags} = args;
              replyall = "all" in flags;
              objects = {};
              if ("followup" in flags)
              "...look for first non-player recipient in To: line...";
              for o in ($mail_agent:parse_address_field(msg[3]))
              if (objects)
              break o;
              elseif ($object_utils:isa(o, $mail_recipient))
              objects = {o};
              endif
              endfor
              endif
              objects = objects || $mail_agent:parse_address_field(msg[2] + (replyall ? msg[3] | ""));
              for line in (msg[5..("" in {@msg, ""}) - 1])
              if (rt = index(line, "Reply-to:") == 1)
              objects = $mail_agent:parse_address_field(line);
              endif
              endfor
              recips = {};
              for o in (objects)
              if (o == #0)
              player:tell("Sorry, but I can't parse the header of that message.");
              return 0;
              elseif ((!valid(o)) || (!(is_player(o) || ($mail_recipient in $object_utils:ancestors(o)))))
              player:tell(o, " is no longer a valid player or maildrop; ignoring that recipient.");
              elseif (o != player)
              recips = setadd(recips, o);
              endif
              endfor
              subject = msg[4];
              if (subject == " ")
              subject = "";
              elseif (subject &amp;&amp; (index(subject, "Re: ") != 1))
              subject = "Re: " + subject;
              endif
              return {recips, subject};
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>check_answer_flags</NAME>
            <CODE>
              flags = {};
              for o in ({"all", "include", "followup"})
              if (player:mail_option(o))
              flags = {@flags, o};
              endif
              endfor
              reply_to = player:mail_option("replyto") || {};
              flaglist = "+1#include -1#noinclude +2#all -2#sender 0#replyto +3#followup ";
              for a in (args)
              if (i = index(a, "="))
              value = a[i + 1..$];
              a = a[1..i - 1];
              else
              value = "";
              endif
              if ((typeof(a) != STR) || ((i = index(flaglist, "#" + a)) &lt; 3))
              player:tell("Unrecognized answer/reply option:  ", a);
              return 0;
              elseif (i != rindex(flaglist, "#" + a))
              player:tell("Ambiguous answer/reply option:  ", a);
              return 0;
              elseif (j = index("0123456789", flaglist[i - 1]) - 1)
              if (value)
              player:tell("Flag does not take a value:  ", a);
              return 0;
              endif
              f = {"include", "all", "followup"}[j];
              flags = (flaglist[i - 2] == "+") ? setadd(flags, f) | setremove(flags, f);
              if (f == "all")
              flags = setremove(flags, "followup");
              endif
              elseif ((!value) || (value = this:parse_recipients({}, $string_utils:explode(value), "replyto flag:  ")))
              reply_to = value || {};
              endif
              endfor
              return {flags, reply_to};
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>reply-to*: replyto*:</NAME>
            <CODE>
              if (!(who = this:loaded(player)))
              player:tell(this:nothing_loaded_msg());
              else
              if (args)
              this.replytos[who] = rt = this:parse_recipients({}, args);
              this:set_changed(who, 1);
              else
              rt = this.replytos[who];
              endif
              player:tell(rt ? ("Replies will go to " + $mail_agent:name_list(@this.replytos[who])) + "." | "Reply-to field is empty.");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
            <NAME>send</NAME>
            <CODE>
              "WIZARDLY";
              if (!(who = this:loaded(player)))
              player:notify(this:nothing_loaded_msg());
              elseif (!(recips = this.recipients[who]))
              player:notify("Umm... your message isn't addressed to anyone.");
              elseif (this:sending(who))
              player:notify("Again? ... relax... it'll get there eventually.");
              else
              msg = this:message_with_headers(who);
              this.sending[who] = old_sending = task_id();
              this:set_changed(who, 0);
              player:notify("Sending...");
              "... this sucker can suspend BIG TIME...";
              result = $mail_agent:raw_send(msg, recips, player);
              "... the world changes...";
              who = player in this.active;
              if (who &amp;&amp; (this.sending[who] == old_sending))
              "... same editing session; no problemo...";
              previous = "";
              this.sending[who] = 0;
              else
              "... uh oh, different session... tiptoe quietly out...";
              "... Don't mess with the session.";
              previous = "(prior send) ";
              endif
              if (!(e = result[1]))
              player:notify(tostr(previous, (typeof(e) == ERR) ? e | ("Bogus recipients:  " + $string_utils:from_list(result[2]))));
              player:notify(tostr(previous, "Mail not sent."));
              previous || this:set_changed(who, 1);
              elseif (length(result) == 1)
              player:notify(tostr(previous, "Mail not actually sent to anyone."));
              previous || this:set_changed(who, 1);
              else
              player:notify(tostr(previous, "Mail actually sent to ", $mail_agent:name_list(@listdelete(result, 1))));
              if (previous)
              "...don't even think about it...";
              elseif (player.location == this)
              if (ticks_left() &lt; 10000)
              suspend(0);
              endif
              this:done();
              elseif (!this:changed(who))
              "... player is gone, no further edits...";
              this:kill_session(who);
              endif
              endif
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>who</NAME>
            <CODE>
              if (dobjstr)
              if (!(recips = this:parse_recipients({}, args)))
              "parse_recipients has already complained about anything it doesn't like";
              return;
              endif
              elseif (caller != player)
              return E_PERM;
              elseif (!(who = this:loaded(player)))
              player:tell(this:nothing_loaded_msg());
              return;
              else
              recips = this.recipients[who];
              endif
              resolve = $mail_agent:resolve_addr(recips, player);
              if (resolve[1])
              player:tell("Bogus addresses:  ", $string_utils:english_list(resolve[1]));
              else
              player:tell(dobjstr ? ("Mail to " + $mail_agent:name_list(@recips)) + " actually goes to " | "Your mail will actually go to ", $mail_agent:name_list(@resolve[2]));
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>showlists</NAME>
            <CODE>
              player:tell_lines({"Available aliases:", ""});
              for c in ((dobjstr == "all") ? $object_utils:descendants($mail_recipient) | $mail_agent.contents)
              if (c:is_usable_by(player) || c:is_readable_by(player))
              c:look_self();
              endif
              endfor
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="at/to" IOBJ="any">
            <NAME>subsc*ribe</NAME>
            <CODE>
              player:tell("This command is obsolete.  Use @subscribe instead.  See `help @subscribe'");
              return;
              if (!iobjstr)
              player:tell("Usage:  ", verb, " [&lt;list-of-people/lists&gt;] to &lt;list&gt;");
              return;
              elseif ($mail_agent:match_failed(iobj = $mail_agent:match(iobjstr), iobjstr))
              return;
              endif
              rstrs = dobjstr ? $string_utils:explode(dobjstr) | {"me"};
              recips = this:parse_recipients({}, rstrs);
              outcomes = iobj:add_forward(@recips);
              if (typeof(outcomes) != LIST)
              player:tell(outcomes);
              return;
              endif
              added = {};
              for r in [1..length(recips)]
              if ((t = typeof(e = outcomes[r])) == OBJ)
              added = setadd(added, recips[r]);
              else
              player:tell(verb, " ", recips[r].name, " to ", iobj.name, ":  ", e);
              endif
              endfor
              if (added)
              player:tell($string_utils:english_list($list_utils:map_arg(2, $string_utils, "pronoun_sub", "%(name) (%#)", added)), " added to ", iobj.name, " (", iobj, ")");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="out of/from inside/from" IOBJ="any">
            <NAME>unsubsc*ribe</NAME>
            <CODE>
              if (!iobjstr)
              player:tell("Usage:  ", verb, " [&lt;list-of-people/lists&gt;] from &lt;list&gt;");
              return;
              elseif ($mail_agent:match_failed(iobj = $mail_agent:match(iobjstr), iobjstr))
              return;
              endif
              rstrs = dobjstr ? $string_utils:explode(dobjstr) | {"me"};
              recips = this:parse_recipients({}, rstrs);
              outcomes = iobj:delete_forward(@recips);
              if (typeof(outcomes) != LIST)
              player:tell(outcomes);
              return;
              endif
              removed = {};
              for r in [1..length(recips)]
              if (typeof(e = outcomes[r]) == ERR)
              player:tell(verb, " ", recips[r].name, " from ", iobj.name, ":  ", (e == E_INVARG) ? "Not on list." | e);
              else
              removed = setadd(removed, recips[r]);
              endif
              endfor
              if (removed)
              player:tell($string_utils:english_list($list_utils:map_arg(2, $string_utils, "pronoun_sub", "%(name) (%#)", removed)), " removed from ", iobj.name, " (", iobj, ")");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>retain_session_on_exit</NAME>
            <CODE>
              return this:ok(who = args[1]) &amp;&amp; (this:sending(who) || pass(@args));
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>no_littering_msg</NAME>
            <CODE>
              "recall that this only gets called if :retain_session_on_exit returns true";
              return (this:ok(who = player in this.active) &amp;&amp; (!this:changed(who))) ? {"Your message is in transit."} | this.(verb);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>parse_msg_headers(slow)</NAME>
            <CODE>
              "parse_msg_headers(msg,flags)";
              "  parses msg to extract reply recipients and construct a subject line";
              "  if the \"all\" flag is present, reply goes to all of the original recipients";
              "  returns a list {recipients, subjectline} or 0 in case of error.";
              msg = args[1];
              replyall = "all" in args[2];
              recipients = $mail_agent:parse_address_field(msg[2] + (replyall ? msg[3] | ""));
              subject = msg[4];
              if (subject == " ")
              subject = "";
              endif
              noreplyto = 1;
              for line in (msg[1..("" in msg) || length(msg)])
              if (typeof(line) != STR)
              "Skip it";
              elseif (index(line, "Subject:") == 1)
              subject = $string_utils:triml(line[9..length(line)]);
              elseif ((rt = index(line, "Reply-to:") == 1) || (noreplyto &amp;&amp; ((index(line, "From:") == 1) || (replyall &amp;&amp; (index(line, "To:") == 1)))))
              if (rt)
              noreplyto = 0;
              recipients = {};
              endif
              recipients = {@recipients, @$mail_agent:parse_address_field(line)};
              endif
              endfor
              if (subject &amp;&amp; (index(subject, "Re: ") != 1))
              subject = "Re: " + subject;
              endif
              recips = {};
              for o in (recipients)
              if (o == #0)
              player:tell("Sorry, but I can't parse the header of that message.");
              return 0;
              elseif ((!valid(o)) || (!(is_player(o) || ($mail_recipient in $object_utils:ancestors(o)))))
              player:tell(o, " is no longer a valid player or maildrop; ignoring that recipient.");
              elseif (o != player)
              recips = setadd(recips, o);
              endif
              endfor
              return {recips, subject};
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>local_editing_info</NAME>
            <CODE>
              lines = {"To:       " + (toline = $mail_agent:name_list(@args[1])), "Subject:  " + $string_utils:trim(subject = args[2])};
              if (args[3])
              lines = {@lines, "Reply-to: " + $mail_agent:name_list(@args[3])};
              endif
              lines = {@lines, "", @args[4]};
              return {tostr("MOOMail", subject ? ("(" + subject) + ")" | (("-to(" + toline) + ")")), lines, "@@sendmail"};
            </CODE>
          </VERB>
        </OBJECT>
        <OBJECT ID="obj48" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
          <NAME>Note Editor</NAME>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>strmode</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>objects</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>readable</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>times</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>commands2</NAME>
            <VALUE>{{"say", "emote", "lis*t", "ins*ert", "n*ext,p*rev", "enter", "del*ete", "f*ind", "s*ubst", "m*ove,c*opy", "join*l", "fill"}, {"y*ank", "w*hat", "mode", "e*dit", "save", "abort", "q*uit,done,pause"}}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>help</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>no_text_msg</NAME>
            <VALUE>"Note is devoid of text."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>commands</NAME>
            <VALUE>{{"e*dit", "&lt;note&gt;"}, {"save", "[&lt;note&gt;]"}, {"mode", "[string|list]"}}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>invoke_task</NAME>
            <VALUE>0</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>exit_on_abort</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>previous_session_msg</NAME>
            <VALUE>"You need to ABORT or SAVE this note before editing any other."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>stateprops</NAME>
            <VALUE>{{"strmode", 0}, {"objects", 0}, {"texts", 0}, {"changes", 0}, {"inserting", 1}, {"readable", 0}}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>depart_msg</NAME>
            <VALUE>"A small swarm of 3x5 index cards arrives, engulfs %n, and carries %o away."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>return_msg</NAME>
            <VALUE>"A small swarm of 3x5 index cards blows in and disperses, revealing %n."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>no_littering_msg</NAME>
            <VALUE>{"Partially edited text will be here when you get back.", "To return, give the `@notedit' command with no arguments.", "Please come back and SAVE or ABORT if you don't intend to be working on this text in the immediate future.  Keep Our MOO Clean!  No Littering!"}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>no_change_msg</NAME>
            <VALUE>"Note has not been modified since the last save."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>change_msg</NAME>
            <VALUE>"There are changes."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>nothing_loaded_msg</NAME>
            <VALUE>"Use the EDIT command to select a note."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>texts</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>active</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>changes</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>inserting</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>original</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>who_location_msg</NAME>
            <VALUE>"%L [editing notes]"</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>free_home</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>victim_ejection_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>ejection_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>oejection_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>residents</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>free_entry</NAME>
            <VALUE>1</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>entrances</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>blessed_object</NAME>
            <VALUE>#-1</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>blessed_task</NAME>
            <VALUE>499657208</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>exits</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>dark</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>ctype</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>key</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>aliases</NAME>
            <VALUE>{"Note Editor", "nedit"}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>description</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>object_size</NAME>
            <VALUE>{9824, 919123694}</VALUE>
          </PROPERTY>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>e*dit</NAME>
            <CODE>
              if (this:changed(who = player in this.active))
              player:tell("You are still editing ", this:working_on(who), ".  Please type ABORT or SAVE first.");
              elseif (spec = this:parse_invoke(dobjstr, verb))
              this:init_session(who, @spec);
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>save</NAME>
            <CODE>
              if (!(who = this:loaded(player)))
              player:tell(this:nothing_loaded_msg());
              return;
              endif
              if (!dobjstr)
              note = this.objects[who];
              elseif (1 == (note = this:note_match_failed(dobjstr)))
              return;
              else
              this.objects[who] = note;
              endif
              text = this:text(who);
              strmode = (length(text) &lt;= 1) &amp;&amp; this.strmode[who];
              if (strmode)
              text = text ? text[1] | "";
              endif
              if (ERR == typeof(result = this:set_note_text(note, text)))
              player:tell("Text not saved to ", this:working_on(who), ":  ", result);
              if ((result == E_TYPE) &amp;&amp; (typeof(note) == OBJ))
              player:tell("Do `mode list' and try saving again.");
              elseif (!dobjstr)
              player:tell("Use `save' with an argument to save the text elsewhere.");
              endif
              else
              player:tell("Text written to ", this:working_on(who), strmode ? " as a single string." | ".");
              this:set_changed(who, 0);
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>init_session</NAME>
            <CODE>
              if (this:ok(who = args[1]))
              this.strmode[who] = strmode = typeof(text = args[3]) == STR;
              this:load(who, strmode ? text ? {text} | {} | text);
              this.objects[who] = args[2];
              player:tell("Now editing ", this:working_on(who), ".", strmode ? "  [string mode]" | "");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>working_on</NAME>
            <CODE>
              if (!(who = args[1]))
              return "????";
              endif
              spec = this.objects[who];
              if (typeof(spec) == LIST)
              object = spec[1];
              prop = spec[2];
              else
              object = spec;
              prop = 0;
              endif
              return valid(object) ? tostr("\"", object.name, "\"(", object, ")", prop ? "." + prop | "") | tostr(prop ? ("." + prop) + " on " | "", "invalid object (", object, ")");
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>parse_invoke</NAME>
            <CODE>
              ":parse_invoke(string,verb)";
              " string is the actual commandline string indicating what we are to edit";
              " verb is the command verb that is attempting to invoke the editor";
              if (!(string = args[1]))
              player:tell_lines({("Usage:  " + args[2]) + " &lt;note&gt;   (where &lt;note&gt; is some note object)", ("        " + args[2]) + "          (continues editing an unsaved note)"});
              elseif (1 == (note = this:note_match_failed(string)))
              elseif (ERR == typeof(text = this:note_text(note)))
              player:tell("Couldn't retrieve text:  ", text);
              else
              return {note, text};
              endif
              return 0;
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>note_text</NAME>
            <CODE>
              "WIZARDLY";
              if ((caller != $note_editor) || (caller_perms() != $note_editor.owner))
              return E_PERM;
              endif
              set_task_perms(player);
              if (typeof(spec = args[1]) == OBJ)
              text = spec:text();
              else
              text = `spec[1].(spec[2]) ! ANY';
              endif
              if (((tt = typeof(text)) in {ERR, STR}) || ((tt == LIST) &amp;&amp; ((!text) || (typeof(text[1]) == STR))))
              return text;
              else
              return E_TYPE;
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>set_note_text</NAME>
            <CODE>
              "WIZARDLY";
              if ((caller != $note_editor) || (caller_perms() != $note_editor.owner))
              return E_PERM;
              endif
              set_task_perms(player);
              attempt = E_NONE;
              if (typeof(spec = args[1]) == OBJ)
              return spec:set_text(args[2]);
              elseif ($object_utils:has_callable_verb(spec[1], "set_" + spec[2]))
              attempt = spec[1]:("set_" + spec[2])(args[2]);
              endif
              if (typeof(attempt) == ERR)
              return `spec[1].(spec[2]) = args[2] ! ANY';
              else
              return attempt;
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>note_match_failed</NAME>
            <CODE>
              if (pp = $code_utils:parse_propref(string = args[1]))
              object = pp[1];
              prop = pp[2];
              else
              object = string;
              prop = 0;
              endif
              if ($command_utils:object_match_failed(note = player:my_match_object(object, this:get_room(player)), object))
              elseif (prop)
              if (!$object_utils:has_property(note, prop))
              player:tell(object, " has no \".", prop, "\" property.");
              else
              return {note, prop};
              endif
              elseif ((!$object_utils:has_callable_verb(note, "text")) || (!$object_utils:has_callable_verb(note, "set_text")))
              return {note, "description"};
              "... what we used to do.  but why barf?   that's no fun...";
              player:tell(object, "(", note, ") doesn't look like a note.");
              else
              return note;
              endif
              return 1;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
            <NAME>w*hat</NAME>
            <CODE>
              pass(@args);
              if ((who = this:loaded(player)) &amp;&amp; this.strmode[who])
              player:tell("Text will be stored as a single string instead of a list when possible.");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>mode</NAME>
            <CODE>
              "mode [string|list]";
              if (!(who = this:loaded(player)))
              player:tell(this:nothing_loaded_msg());
              return;
              endif
              if (dobjstr &amp;&amp; (index("string", dobjstr) == 1))
              this.strmode[who] = mode = 1;
              player:tell("Now in string mode:");
              elseif (dobjstr &amp;&amp; (index("list", dobjstr) == 1))
              this.strmode[who] = mode = 0;
              player:tell("Now in list mode:");
              elseif (dobjstr)
              player:tell("Unrecognized mode:  ", dobjstr);
              player:tell("Should be one of `string' or `list'");
              return;
              else
              player:tell("Currently in ", mode = this.strmode[who] ? "string " | "list ", "mode:");
              endif
              if (mode)
              player:tell("  store text as a single string instead of a list when possible.");
              else
              player:tell("  always store text as a list of strings.");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>local_editing_info</NAME>
            <CODE>
              {what, text} = args;
              cmd = (typeof(text) == STR) ? "@set-note-string" | "@set-note-text";
              name = (typeof(what) == OBJ) ? what.name | tostr(what[1].name, ".", what[2]);
              note = (typeof(what) == OBJ) ? what | tostr(what[1], ".", what[2]);
              return {name, text, tostr(cmd, " ", note)};
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>set_*</NAME>
            <CODE>
              if ($perm_utils:controls(caller_perms(), this))
              return pass(@args);
              else
              return E_PERM;
              endif
            </CODE>
          </VERB>
        </OBJECT>
        <OBJECT ID="obj49" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
          <NAME>Verb Editor</NAME>
          <PROPERTY OWNER="obj36" >
            <NAME>objects</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>verbnames</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>readable</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>times</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>commands2</NAME>
            <VALUE>{{"say", "emote", "lis*t", "ins*ert", "n*ext,p*rev", "enter", "del*ete", "f*ind", "s*ubst", "m*ove,c*opy", "join*l", "fill"}, {"y*ank", "w*hat", "e*dit", "com*pile", "abort", "q*uit,done,pause"}}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>help</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>no_text_msg</NAME>
            <VALUE>"Verb body is empty."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>commands</NAME>
            <VALUE>{{"e*dit", "&lt;obj&gt;:&lt;verb&gt;"}, {"com*pile", "[as &lt;obj&gt;:&lt;verb&gt;]"}}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>invoke_task</NAME>
            <VALUE>0</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>exit_on_abort</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>previous_session_msg</NAME>
            <VALUE>"You need to either COMPILE or ABORT this verb before you can start on another."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>stateprops</NAME>
            <VALUE>{{"objects", 0}, {"verbnames", 0}, {"texts", 0}, {"changes", 0}, {"inserting", 1}, {"readable", 0}}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>depart_msg</NAME>
            <VALUE>"You hear the bips of keyclick, the sliding of mice and the hum of computers in the distance as %n fades slowly out of view, heading towards them."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>return_msg</NAME>
            <VALUE>"There are the light bips of keyclick and the sliding of mice as %n fades into view, shoving %r away from the console, which promptly fades away."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>no_littering_msg</NAME>
            <VALUE>{"Keeping your verb for later work.  ", "To return, give the `@edit' command with no arguments.", "Please come back and COMPILE or ABORT if you don't intend to be working on this verb in the immediate future.  Keep Our MOO Clean!  No Littering!"}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>no_change_msg</NAME>
            <VALUE>"The verb has no pending changes."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>change_msg</NAME>
            <VALUE>"You have changed the verb since last successful compile."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>nothing_loaded_msg</NAME>
            <VALUE>"First, you have to select a verb to edit with the EDIT command."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>texts</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>active</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>changes</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>inserting</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>original</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>who_location_msg</NAME>
            <VALUE>"%L [editing verbs]"</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>free_home</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>victim_ejection_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>ejection_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>oejection_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>residents</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>free_entry</NAME>
            <VALUE>1</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>entrances</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>blessed_object</NAME>
            <VALUE>#-1</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>blessed_task</NAME>
            <VALUE>1614342745</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>exits</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>dark</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>ctype</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>key</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>aliases</NAME>
            <VALUE>{"Verb Editor", "vedit", "verbedit", "verb edit"}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>description</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>object_size</NAME>
            <VALUE>{13425, 919123694}</VALUE>
          </PROPERTY>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>e*dit</NAME>
            <CODE>
              if (!args)
              player:tell("edit what?");
              else
              this:invoke(argstr, verb);
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="none" PREP="any" IOBJ="any">
            <NAME>com*pile save</NAME>
            <CODE>
              pas = {{}, {}};
              if (!(who = this:loaded(player)))
              player:tell(this:nothing_loaded_msg());
              return;
              elseif (!args)
              object = this.objects[who];
              vname = this.verbnames[who];
              if (typeof(vname) == LIST)
              vargs = listdelete(vname, 1);
              vname = vname[1];
              else
              vargs = {};
              endif
              changeverb = 0;
              elseif ((args[1] != "as") || ((length(args) &lt; 2) || ((!(spec = $code_utils:parse_verbref(args[2]))) || ((typeof(pas = $code_utils:parse_argspec(@args[3..$])) != LIST) || pas[2]))))
              if (typeof(pas) != LIST)
              player:tell(pas);
              elseif (pas[2])
              player:tell("I don't understand \"", $string_utils:from_list(pas[2], " "), "\"");
              endif
              player:tell("Usage: ", verb, " [as &lt;object&gt;:&lt;verb&gt;]");
              return;
              elseif ($command_utils:object_match_failed(object = player:my_match_object(spec[1], this:get_room(player)), spec[1]))
              return;
              else
              vname = spec[2];
              vargs = pas[1] &amp;&amp; {@pas[1], "none", "none"}[1..3];
              if (vargs)
              vargs[2] = $code_utils:full_prep(vargs[2]) || vargs[2];
              endif
              changeverb = 1;
              endif
              if (vargs)
              vnum = $code_utils:find_verb_named(object, vname);
              while (vnum &amp;&amp; (verb_args(object, vnum) != vargs))
              vnum = $code_utils:find_verb_named(object, vname, vnum + 1);
              endwhile
              if (!vnum)
              player:tell("There is no ", object, ":", vname, " verb with args (", $string_utils:from_list(vargs, " "), ").");
              if (!changeverb)
              player:tell("Use 'compile as ...' to write your code to another verb.");
              endif
              return;
              endif
              objverbname = tostr(object, ":", vname, " (", $string_utils:from_list(vargs, " "), ")");
              else
              vnum = 0;
              objverbname = tostr(object, ":", ($code_utils:toint(vname) == E_TYPE) ? vname | this:verb_name(object, vname));
              endif
              "...";
              "...perform eval_subs on verb code if necessary...";
              "...";
              if (player.eval_subs &amp;&amp; player:edit_option("eval_subs"))
              verbcode = {};
              for x in (this:text(who))
              verbcode = {@verbcode, $code_utils:substitute(x, player.eval_subs)};
              endfor
              else
              verbcode = this:text(who);
              endif
              "...";
              "...write it out...";
              "...";
              if (result = this:set_verb_code(object, vnum ? vnum | vname, verbcode))
              player:tell(objverbname, " not compiled because:");
              for x in (result)
              player:tell("  ", x);
              endfor
              elseif (typeof(result) == ERR)
              player:tell({result, ("You do not have write permission on " + objverbname) + ".", ("The verb " + objverbname) + " does not exist (!?!)", ("The object " + tostr(object)) + " does not exist (!?!)"}[1 + (result in {E_PERM, E_VERBNF, E_INVARG})]);
              if (!changeverb)
              player:tell("Do 'compile as &lt;object&gt;:&lt;verb&gt;' to write your code to another verb.");
              endif
              changeverb = 0;
              else
              player:tell(objverbname, verbcode ? " successfully compiled." | " verbcode removed.");
              this:set_changed(who, 0);
              endif
              if (changeverb)
              this.objects[who] = object;
              this.verbnames[who] = vargs ? {vname, @vargs} | vname;
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>working_on</NAME>
            <CODE>
              if (!(fuckup = this:ok(who = args[1])))
              return fuckup;
              else
              object = this.objects[who];
              verbname = this.verbnames[who];
              if (typeof(verbname) == LIST)
              return tostr(object, ":", verbname[1], " (", $string_utils:from_list(listdelete(verbname, 1), " "), ")");
              else
              return tostr(object, ":", this:verb_name(object, verbname), " (", this:verb_args(object, verbname), ")");
              endif
              endif
              "return this:ok(who = args[1]) &amp;&amp; tostr(this.objects[who]) + \":\" + this.verbnames[who];";
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>init_session</NAME>
            <CODE>
              {who, object, vname, vcode} = args;
              if (this:ok(who))
              this:load(who, vcode);
              this.verbnames[who] = vname;
              this.objects[who] = object;
              this.active[who]:tell("Now editing ", this:working_on(who), ".");
              "this.active[who]:tell(\"Now editing \", object, \":\", vname, \".\");";
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>parse_invoke</NAME>
            <CODE>
              ":parse_invoke(string,v,?code)";
              "  string is the commandline string to parse to obtain the obj:verb to edit";
              "  v is the actual command verb used to invoke the editor";
              " =&gt; {object, verbname, verb_code} or error";
              vref = $string_utils:words(args[1]);
              if ((!vref) || (!(spec = $code_utils:parse_verbref(vref[1]))))
              player:tell("Usage: ", args[2], " object:verb");
              return;
              endif
              if (argspec = listdelete(vref, 1))
              if (typeof(pas = $code_utils:parse_argspec(@argspec)) == LIST)
              if (pas[2])
              player:tell("I don't understand \"", $string_utils:from_list(pas[2], " "), "\"");
              return;
              endif
              argspec = {@pas[1], "none", "none"}[1..3];
              argspec[2] = $code_utils:full_prep(argspec[2]) || argspec[2];
              else
              player:tell(pas);
              return;
              endif
              endif
              if (!$command_utils:object_match_failed(object = player:my_match_object(spec[1], this:get_room(player)), spec[1]))
              vnum = $code_utils:find_verb_named(object, vname = spec[2]);
              if (argspec)
              while (vnum &amp;&amp; (verb_args(object, vnum) != argspec))
              vnum = $code_utils:find_verb_named(object, vname, vnum + 1);
              endwhile
              endif
              if (length(args) &gt; 2)
              code = args[3];
              elseif (vnum)
              code = this:fetch_verb_code(object, vnum);
              else
              code = E_VERBNF;
              endif
              if (typeof(code) == ERR)
              player:tell((code != E_VERBNF) ? code | "That object does not define that verb", argspec ? " with those args." | ".");
              return code;
              else
              return {object, argspec ? {vname, @argspec} | vname, code};
              endif
              endif
              return 0;
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>fetch_verb_code</NAME>
            <CODE>
              "WIZARDLY";
              if ((caller != $verb_editor) || (caller_perms() != $verb_editor.owner))
              return E_PERM;
              else
              set_task_perms(player);
              return `verb_code(args[1], args[2], !player:edit_option("no_parens")) ! ANY';
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>set_verb_code</NAME>
            <CODE>
              "WIZARDLY";
              if ((caller != $verb_editor) || (caller_perms() != $verb_editor.owner))
              return E_PERM;
              else
              set_task_perms(player);
              return `set_verb_code(args[1], args[2], args[3]) ! ANY';
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>local_editing_info</NAME>
            <CODE>
              if (caller == $verb_editor)
              set_task_perms(player);
              endif
              {object, vname, code} = args;
              if (typeof(vname) == LIST)
              vargs = tostr(" ", vname[2], " ", $code_utils:short_prep(vname[3]), " ", vname[4]);
              vname = vname[1];
              else
              vargs = "";
              endif
              name = tostr(object.name, ":", vname);
              "... so the next 2 lines are actually wrong, since verb_info won't";
              "... necessarily retrieve the correct verb if we have more than one";
              "... matching the given same name; anyway, if parse_invoke understood vname,";
              "... so will @program.  I suspect these were put here because in the";
              "... old scheme of things, vname was always a number.";
              "vname = strsub($string_utils:explode(verb_info(object, vname)[3])[1], \"*\", \"\")";
              "vargs = verb_args(object, vname)";
              "";
              return {name, code, tostr("@program ", object, ":", vname, vargs)};
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>verb_name</NAME>
            <CODE>
              "verb_name(object, vname)";
              "Find vname on object and return its full name (quoted).";
              "This is useful for when we're working with verb numbers.";
              if ((caller != $verb_editor) || (caller_perms() != $verb_editor.owner))
              return E_PERM;
              else
              set_task_perms(player);
              given = args[2];
              if (typeof(info = `verb_info(args[1], given) ! ANY') == ERR)
              return tostr(given, "[", info, "]");
              elseif (info[3] == given)
              return given;
              else
              return tostr(given, "/\"", info[3], "\"");
              endif
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>verb_args</NAME>
            <CODE>
              "verb_name(object, vname)";
              "Find vname on object and return its full name (quoted).";
              "This is useful for when we're working with verb numbers.";
              if ((caller != $verb_editor) || (caller_perms() != $verb_editor.owner))
              return E_PERM;
              else
              set_task_perms(player);
              return $string_utils:from_list(`verb_args(args[1], args[2]) ! ANY', " ");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>comment</NAME>
            <CODE>
              "Syntax: comment [&lt;range&gt;]";
              "";
              "Turns the specified range of lines, into comments.";
              if ((caller != player) &amp;&amp; (caller_perms() != player))
              return E_PERM;
              elseif (!(who = this:loaded(player)))
              player:tell(this:nothing_loaded_msg());
              elseif (typeof(range = this:parse_range(who, {"."}, @args)) != LIST)
              player:tell(tostr(range));
              elseif (range[3])
              player:tell_lines($code_utils:verb_documentation());
              else
              text = this.texts[who];
              {from, to, crap} = range;
              cut = $maxint;
              for line in [from..to]
              cut = min(cut, `match(text[line], "[^ ]")[1] ! E_RANGE =&gt; 1');
              endfor
              for line in [from..to]
              text[line] = toliteral(text[line][cut..$]) + ";";
              endfor
              this.texts[who] = text;
              player:tell((to == from) ? "Line" | "Lines", " changed.");
              this.changes[who] = 1;
              this.times[who] = time();
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>uncomment</NAME>
            <CODE>
              "Syntax: uncomment [&lt;range&gt;]";
              "";
              "Turns the specified range of lines from comments to, uh, not comments.";
              if ((caller != player) &amp;&amp; (caller_perms() != player))
              return E_PERM;
              elseif (!(who = this:loaded(player)))
              player:tell(this:nothing_loaded_msg());
              elseif (typeof(range = this:parse_range(who, {"."}, @args)) != LIST)
              player:tell(tostr(range));
              elseif (range[3])
              player:tell_lines($code_utils:verb_documentation());
              else
              text = this.texts[who];
              {from, to, crap} = range;
              bogus = {};
              for line in [from..to]
              if (match(text[line], "^ *\"%([^\\\"]%|\\.%)*\";$"))
              "check from $code_utils:verb_documentation";
              if (!bogus)
              text[line] = $no_one:eval(text[line])[2];
              endif
              else
              bogus = setadd(bogus, line);
              endif
              endfor
              if (bogus)
              player:tell((length(bogus) == 1) ? "Line" | "Lines", " ", $string_utils:english_list(bogus), " ", (length(bogus) == 1) ? "is" | "are", " not comments.");
              player:tell("No changes.");
              return;
              endif
              this.texts[who] = text;
              player:tell((to == from) ? "Line" | "Lines", " changed.");
              this.changes[who] = 1;
              this.times[who] = time();
              endif
            </CODE>
          </VERB>
        </OBJECT>
      </OBJECT>
      <OBJECT ID="obj62" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
        <NAME>The First Room</NAME>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>who_location_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>free_home</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>victim_ejection_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>ejection_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>oejection_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>residents</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>free_entry</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>entrances</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>blessed_object</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>blessed_task</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>exits</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>dark</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>ctype</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>"This is all there is right now."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{4339, 919123699}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>disfunc</NAME>
          <CODE>
            "Copied from The Coat Closet (#11):disfunc by Haakon (#2) Mon May  8 10:41:04 1995 PDT";
            if ((((cp = caller_perms()) == (who = args[1])) || $perm_utils:controls(cp, who)) || (caller == this))
            "need the first check since guests don't control themselves";
            if (who.home == this)
            move(who, $limbo);
            this:announce("You hear a quiet popping sound; ", who.name, " has disconnected.");
            else
            pass(who);
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>enterfunc</NAME>
          <CODE>
            "Copied from The Coat Closet (#11):enterfunc by Haakon (#2) Mon May  8 10:41:38 1995 PDT";
            who = args[1];
            if ($limbo:acceptable(who))
            move(who, $limbo);
            else
            pass(who);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>match</NAME>
          <CODE>
            "Copied from The Coat Closet (#11):match by Lambda (#50) Mon May  8 10:42:01 1995 PDT";
            m = pass(@args);
            if (m == $failed_match)
            "... it might be a player off in the body bag...";
            m = $string_utils:match_player(args[1]);
            if (valid(m) &amp;&amp; (!(m.location in {this, $limbo})))
            return $failed_match;
            endif
            endif
            return m;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>init_for_core</NAME>
          <CODE>
            "Copied from The Coat Closet (#11):init_for_core by Nosredna (#2487) Mon May  8 10:42:52 1995 PDT";
            if (!caller_perms().wizard)
            return E_PERM;
            endif
            for v in ({"announce*", "emote", "button", "knob"})
            if (`verb_info($player_start, v) ! E_VERBNF =&gt; 0')
            delete_verb($player_start, v);
            endif
            endfor
            for p in ({"out", "quiet", "button"})
            if (p in properties($player_start))
            delete_property($player_start, p);
            endif
            endfor
            for p in ($object_utils:all_properties($room))
            clear_property($player_start, p);
            endfor
            $player_start.name = "The First Room";
            $player_start.aliases = {};
            $player_start.description = "This is all there is right now.";
            $player_start.exits = $player_start.entrances = {};
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>keep_clean</NAME>
          <CODE>
            "Copied from The Coat Closet (#11):keep_clean by Haakon (#2) Mon May  8 10:47:08 1995 PDT";
            if ($perm_utils:controls(caller_perms(), this))
            junk = {};
            while (1)
            for x in (junk)
            $command_utils:suspend_if_needed(0);
            if (x in this.contents)
            "This is old junk that's still around five minutes later.  Clean it up.";
            if (!valid(x.owner))
            move(x, $nothing);
            #2:tell("&gt;**&gt; Cleaned up orphan object `", x.name, "' (", x, "), owned by ", x.owner, ", to #-1.");
            elseif (!$object_utils:contains(x, x.owner))
            move(x, x.owner);
            x.owner:tell("You shouldn't leave junk in ", this.name, "; ", x.name, " (", x, ") has been moved to your inventory.");
            #2:tell("&gt;**&gt; Cleaned up `", x.name, "' (", x, "), owned by `", x.owner.name, "' (", x.owner, "), to ", x.owner, ".");
            endif
            endif
            endfor
            junk = {};
            for x in (this.contents)
            if ((seconds_left() &lt; 2) || (ticks_left() &lt; 1000))
            suspend(0);
            endif
            if (!is_player(x))
            junk = {@junk, x};
            endif
            endfor
            suspend(5 * 60);
            endwhile
            endif
          </CODE>
        </VERB>
      </OBJECT>
    </OBJECT>
    <OBJECT ID="obj5" FLAGS="f r" OWNER="obj2" LOCATION="obj-1">
      <NAME>generic thing</NAME>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>drop_failed_msg</NAME>
        <VALUE>"You can't seem to drop %t here."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>drop_succeeded_msg</NAME>
        <VALUE>"You drop %t."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>odrop_failed_msg</NAME>
        <VALUE>"tries to drop %t but fails!"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>odrop_succeeded_msg</NAME>
        <VALUE>"drops %t."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>otake_succeeded_msg</NAME>
        <VALUE>"picks up %t."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>otake_failed_msg</NAME>
        <VALUE>""</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>take_succeeded_msg</NAME>
        <VALUE>"You take %t."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>take_failed_msg</NAME>
        <VALUE>"You can't pick that up."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c">
        <NAME>key</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>aliases</NAME>
        <VALUE>{"generic thing"}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>description</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>object_size</NAME>
        <VALUE>{4763, 919123665}</VALUE>
      </PROPERTY>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="none">
        <NAME>g*et t*ake</NAME>
        <CODE>
          set_task_perms(callers() ? caller_perms() | player);
          if (this.location == player)
          player:tell("You already have that!");
          elseif (this.location != player.location)
          player:tell("I don't see that here.");
          else
          this:moveto(player);
          if (this.location == player)
          player:tell(this:take_succeeded_msg() || "Taken.");
          if (msg = this:otake_succeeded_msg())
          player.location:announce(player.name, " ", msg);
          endif
          else
          player:tell(this:take_failed_msg() || "You can't pick that up.");
          if (msg = this:otake_failed_msg())
          player.location:announce(player.name, " ", msg);
          endif
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="none">
        <NAME>d*rop th*row</NAME>
        <CODE>
          set_task_perms(callers() ? caller_perms() | player);
          if (this.location != player)
          player:tell("You don't have that.");
          elseif (!player.location:acceptable(this))
          player:tell("You can't drop that here.");
          else
          this:moveto(player.location);
          if (this.location == player.location)
          player:tell_lines(this:drop_succeeded_msg() || "Dropped.");
          if (msg = this:odrop_succeeded_msg())
          player.location:announce(player.name, " ", msg);
          endif
          else
          player:tell_lines(this:drop_failed_msg() || "You can't seem to drop that here.");
          if (msg = this:odrop_failed_msg())
          player.location:announce(player.name, " ", msg);
          endif
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>moveto</NAME>
        <CODE>
          where = args[1];
          "if (!valid(where) || this:is_unlocked_for(where))";
          if (this:is_unlocked_for(where))
          pass(where);
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>take_failed_msg take_succeeded_msg otake_failed_msg otake_succeeded_msg drop_failed_msg drop_succeeded_msg odrop_failed_msg odrop_succeeded_msg</NAME>
        <CODE>
          set_task_perms(caller_perms());
          return $string_utils:pronoun_sub(this.(verb));
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="at/to" IOBJ="any">
        <NAME>gi*ve ha*nd</NAME>
        <CODE>
          set_task_perms(callers() ? caller_perms() | player);
          if (this.location != player)
          player:tell("You don't have that!");
          elseif (!valid(player.location))
          player:tell("I see no \"", iobjstr, "\" here.");
          elseif ($command_utils:object_match_failed(who = player.location:match_object(iobjstr), iobjstr))
          elseif (who.location != player.location)
          player:tell("I see no \"", iobjstr, "\" here.");
          elseif (who == player)
          player:tell("Give it to yourself?");
          else
          this:moveto(who);
          if (this.location == who)
          player:tell("You hand ", this:title(), " to ", who:title(), ".");
          who:tell(player:titlec(), " ", $gender_utils:get_conj("hands/hand", player), " you ", this:title(), ".");
          else
          player:tell(who:titlec(), " ", $gender_utils:get_conj("does/do", who), " not want that item.");
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>examine_key</NAME>
        <CODE>
          "examine_key(examiner)";
          "return a list of strings to be told to the player, indicating what the key on this type of object means, and what this object's key is set to.";
          "the default will only tell the key to a wizard or this object's owner.";
          who = args[1];
          if (((caller == this) &amp;&amp; $perm_utils:controls(who, this)) &amp;&amp; (this.key != 0))
          return {tostr(this:title(), " can only be moved to locations matching this key:"), tostr("  ", $lock_utils:unparse_key(this.key))};
          endif
        </CODE>
      </VERB>
      <OBJECT ID="obj8" FLAGS="f r" OWNER="obj2" LOCATION="obj-1">
        <NAME>generic container</NAME>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>oclose_msg</NAME>
          <VALUE>"closes %d."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>close_msg</NAME>
          <VALUE>"You close %d."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>oopen_msg</NAME>
          <VALUE>"opens %d."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>open_msg</NAME>
          <VALUE>"You open %d."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>oput_fail_msg</NAME>
          <VALUE>""</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>put_fail_msg</NAME>
          <VALUE>"You can't put %d in that."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>opaque</NAME>
          <VALUE>1</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>dark</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>oremove_fail_msg</NAME>
          <VALUE>""</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>oremove_msg</NAME>
          <VALUE>"removes %d from %i."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>remove_fail_msg</NAME>
          <VALUE>"You can't remove that."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>remove_msg</NAME>
          <VALUE>"You remove %d from %i."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>oput_msg</NAME>
          <VALUE>"puts %d in %i."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>put_msg</NAME>
          <VALUE>"You put %d in %i."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>oopen_fail_msg</NAME>
          <VALUE>""</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>open_fail_msg</NAME>
          <VALUE>"You can't open that."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>empty_msg</NAME>
          <VALUE>"It is empty."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>opened</NAME>
          <VALUE>1</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c">
          <NAME>open_key</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>drop_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>drop_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>odrop_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>odrop_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>otake_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>otake_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>take_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>take_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c">
          <NAME>key</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"generic container"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>description</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{9323, 919123665}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="in/inside/into" IOBJ="this">
          <NAME>p*ut in*sert d*rop</NAME>
          <CODE>
            if ((this.location != player) &amp;&amp; (this.location != player.location))
            player:tell("You can't get at ", this.name, ".");
            elseif (dobj == $nothing)
            player:tell("What do you want to put ", prepstr, " ", this.name, "?");
            elseif ($command_utils:object_match_failed(dobj, dobjstr))
            elseif ((dobj.location != player) &amp;&amp; (dobj.location != player.location))
            player:tell("You don't have ", dobj.name, ".");
            elseif (!this.opened)
            player:tell(this.name, " is closed.");
            else
            set_task_perms(callers() ? caller_perms() | player);
            dobj:moveto(this);
            if (dobj.location == this)
            player:tell(this:put_msg());
            if (msg = this:oput_msg())
            player.location:announce(player.name, " ", msg);
            endif
            else
            player:tell(this:put_fail_msg());
            if (msg = this:oput_fail_msg())
            player.location:announce(player.name, " ", msg);
            endif
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="out of/from inside/from" IOBJ="this">
          <NAME>re*move ta*ke g*et</NAME>
          <CODE>
            if (!(this.location in {player, player.location}))
            player:tell("Sorry, you're too far away.");
            elseif (!this.opened)
            player:tell(this.name, " is not open.");
            elseif (this.dark)
            player:tell("You can't see into ", this.name, " to remove anything.");
            elseif ((dobj = this:match_object(dobjstr)) == $nothing)
            player:tell("What do you want to take from ", this.name, "?");
            elseif ($command_utils:object_match_failed(dobj, dobjstr))
            elseif (!(dobj in this:contents()))
            player:tell(dobj.name, " isn't in ", this.name, ".");
            else
            set_task_perms(callers() ? caller_perms() | player);
            dobj:moveto(player);
            if (dobj.location == player)
            player:tell(this:remove_msg());
            if (msg = this:oremove_msg())
            player.location:announce(player.name, " ", msg);
            endif
            else
            dobj:moveto(this.location);
            if (dobj.location == this.location)
            player:tell(this:remove_msg());
            if (msg = this:oremove_msg())
            player.location:announce(player.name, " ", msg);
            endif
            player:tell("You can't pick up ", dobj.name, ", so it tumbles onto the floor.");
            else
            player:tell(this:remove_fail_msg());
            if (msg = this:oremove_fail_msg())
            player.location:announce(player.name, " ", msg);
            endif
            endif
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>look_self</NAME>
          <CODE>
            pass();
            if (!this.dark)
            this:tell_contents();
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>acceptable</NAME>
          <CODE>
            return !is_player(args[1]);
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="none">
          <NAME>open</NAME>
          <CODE>
            perms = (callers() &amp;&amp; (caller != this)) ? caller_perms() | player;
            if (this.opened)
            player:tell("It's already open.");
            "elseif (this:is_openable_by(player))";
            elseif (this:is_openable_by(perms))
            this:set_opened(1);
            player:tell(this:open_msg());
            if (msg = this:oopen_msg())
            player.location:announce(player.name, " ", msg);
            endif
            else
            player:tell(this:open_fail_msg());
            if (msg = this:oopen_fail_msg())
            player.location:announce(player.name, " ", msg);
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="this" PREP="with/using" IOBJ="any">
          <NAME>@lock_for_open</NAME>
          <CODE>
            set_task_perms(player);
            key = $lock_utils:parse_keyexp(iobjstr, player);
            if (typeof(key) == STR)
            player:tell("That key expression is malformed:");
            player:tell("  ", key);
            else
            try
            this.open_key = key;
            player:tell("Locked opening of ", this.name, " with this key:");
            player:tell("  ", $lock_utils:unparse_key(key));
            except error (ANY)
            player:tell(error[2], ".");
            endtry
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>is_openable_by</NAME>
          <CODE>
            return (this.open_key == 0) || $lock_utils:eval_key(this.open_key, args[1]);
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="none">
          <NAME>close</NAME>
          <CODE>
            if (!this.opened)
            player:tell("It's already closed.");
            else
            this:set_opened(0);
            player:tell(this:close_msg());
            if (msg = this:oclose_msg())
            player.location:announce(player.name, " ", msg);
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="this" PREP="none" IOBJ="none">
          <NAME>@unlock_for_open</NAME>
          <CODE>
            set_task_perms(player);
            try
            dobj.open_key = 0;
            player:tell("Unlocked ", dobj.name, " for opening.");
            except error (ANY)
            player:tell(error[2], ".");
            endtry
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>tell_contents</NAME>
          <CODE>
            if (this.contents)
            player:tell("Contents:");
            for thing in (this:contents())
            player:tell("  ", thing:title());
            endfor
            elseif (msg = this:empty_msg())
            player:tell(msg);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>set_opened</NAME>
          <CODE>
            if (!$perm_utils:controls(caller.owner, this))
            return E_PERM;
            else
            this.opened = opened = !(!args[1]);
            this.dark = this.opaque &gt; opened;
            return opened;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="this" PREP="is" IOBJ="any">
          <NAME>@opacity</NAME>
          <CODE>
            if (!$perm_utils:controls(player, this))
            player:tell("Can't set opacity of something you don't own.");
            elseif ((iobjstr != "0") &amp;&amp; (!toint(iobjstr)))
            player:tell("Opacity must be an integer (0, 1, 2).");
            else
            player:tell("Opacity changed:  Now " + {"transparent.", "opaque.", "a black hole."}[1 + this:set_opaque(toint(iobjstr))]);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>set_opaque</NAME>
          <CODE>
            if (!$perm_utils:controls(caller.owner, this))
            return E_PERM;
            elseif (typeof(number = args[1]) != INT)
            return E_INVARG;
            else
            number = (number &lt; 0) ? 0 | ((number &gt; 2) ? 2 | number);
            this.dark = number &gt; this.opened;
            return this.opaque = number;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>oclose_msg close_msg oopen_msg open_msg oput_fail_msg put_fail_msg oremove_fail_msg oremove_msg remove_fail_msg remove_msg oput_msg put_msg oopen_fail_msg open_fail_msg empty_msg</NAME>
          <CODE>
            return (msg = `this.(verb) ! ANY') ? $string_utils:pronoun_sub(msg) | "";
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>dark</NAME>
          <CODE>
            return this.(verb);
          </CODE>
        </VERB>
        <OBJECT ID="obj83" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
          <NAME>Feature Warehouse</NAME>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>oclose_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>close_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>oopen_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>open_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>oput_fail_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>put_fail_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>opaque</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>dark</NAME>
            <VALUE>0</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>oremove_fail_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>oremove_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>remove_fail_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>remove_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>oput_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>put_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>oopen_fail_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>open_fail_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>empty_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>opened</NAME>
            <VALUE>1</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>open_key</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>drop_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>drop_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>odrop_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>odrop_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>otake_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>otake_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>take_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>take_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>key</NAME>
            <VALUE>0</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>aliases</NAME>
            <VALUE>{"Feature Warehouse", "warehouse"}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>description</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>object_size</NAME>
            <VALUE>{1590, 919123703}</VALUE>
          </PROPERTY>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="in/inside/into" IOBJ="this">
            <NAME>list</NAME>
            <CODE>
              "Copied from Features Feature Object (#24300):list by Joe (#2612) Mon Oct 10 21:07:35 1994 PDT";
              if (this.contents)
              player:tell(".features objects:");
              player:tell("----------------------");
              first = 1;
              for thing in (this.contents)
              $command_utils:kill_if_laggy(10, "Sorry, the MOO is very laggy, and there are too many feature objects in here to list!");
              $command_utils:suspend_if_needed(0);
              if (!first)
              player:tell();
              endif
              player:tell($string_utils:nn(thing), ":");
              `thing:look_self() ! ANY =&gt; player:tell("&lt;&lt;Error printing description&gt;&gt;")';
              first = 0;
              endfor
              player:tell("----------------------");
              else
              player:tell("No objects in ", this.name, ".");
              endif
            </CODE>
          </VERB>
        </OBJECT>
      </OBJECT>
      <OBJECT ID="obj9" FLAGS="f r" OWNER="obj2" LOCATION="obj-1">
        <NAME>generic note</NAME>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>writers</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c">
          <NAME>encryption_key</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c">
          <NAME>text</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>drop_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>drop_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>odrop_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>odrop_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>otake_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>otake_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>take_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>take_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c">
          <NAME>key</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"generic note"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>"There appears to be some writing on the note ..."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{6228, 919123665}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="none">
          <NAME>r*ead</NAME>
          <CODE>
            if (!this:is_readable_by(valid(caller_perms()) ? caller_perms() | player))
            player:tell("Sorry, but it seems to be written in some code that you can't read.");
            else
            this:look_self();
            player:tell();
            player:tell_lines_suspended(this:text());
            player:tell();
            player:tell("(You finish reading.)");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="none">
          <NAME>er*ase</NAME>
          <CODE>
            if (this:is_writable_by(valid(caller_perms()) ? caller_perms() | player))
            this:set_text({});
            player:tell("Note erased.");
            else
            player:tell("You can't erase this note.");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="on top of/on/onto/upon" IOBJ="this">
          <NAME>wr*ite</NAME>
          <CODE>
            if (this:is_writable_by(valid(caller_perms()) ? caller_perms() | player))
            this:set_text({@this.text, dobjstr});
            player:tell("Line added to note.");
            else
            player:tell("You can't write on this note.");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="out of/from inside/from" IOBJ="this">
          <NAME>del*ete rem*ove</NAME>
          <CODE>
            if (!this:is_writable_by(player))
            player:tell("You can't modify this note.");
            elseif (!dobjstr)
            player:tell("You must tell me which line to delete.");
            else
            line = toint(dobjstr);
            if (line &lt; 0)
            line = (line + length(this.text)) + 1;
            endif
            if ((line &lt;= 0) || (line &gt; length(this.text)))
            player:tell("Line out of range.");
            else
            this:set_text(listdelete(this.text, line));
            player:tell("Line deleted.");
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="this" PREP="with/using" IOBJ="any">
          <NAME>encrypt</NAME>
          <CODE>
            set_task_perms(player);
            key = $lock_utils:parse_keyexp(iobjstr, player);
            if (typeof(key) == STR)
            player:tell("That key expression is malformed:");
            player:tell("  ", key);
            else
            try
            this.encryption_key = key;
            player:tell("Encrypted ", this.name, " with this key:");
            player:tell("  ", $lock_utils:unparse_key(key));
            except error (ANY)
            player:tell(error[2], ".");
            endtry
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="this" PREP="none" IOBJ="none">
          <NAME>decrypt</NAME>
          <CODE>
            set_task_perms(player);
            try
            dobj.encryption_key = 0;
            player:tell("Decrypted ", dobj.name, ".");
            except error (ANY)
            player:tell(error[2], ".");
            endtry
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>text</NAME>
          <CODE>
            cp = caller_perms();
            if ($perm_utils:controls(cp, this) || this:is_readable_by(cp))
            return this.text;
            else
            return E_PERM;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>is_readable_by</NAME>
          <CODE>
            key = this.encryption_key;
            return (key == 0) || $lock_utils:eval_key(key, args[1]);
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>set_text</NAME>
          <CODE>
            cp = caller_perms();
            newtext = args[1];
            if ($perm_utils:controls(cp, this) || this:is_writable_by(cp))
            if (typeof(newtext) == LIST)
            this.text = newtext;
            else
            return E_TYPE;
            endif
            else
            return E_PERM;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>is_writable_by</NAME>
          <CODE>
            who = args[1];
            wr = this.writers;
            if ($perm_utils:controls(who, this))
            return 1;
            elseif (typeof(wr) == LIST)
            return who in wr;
            else
            return wr;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="this" PREP="none" IOBJ="none">
          <NAME>mailme @mailme</NAME>
          <CODE>
            "Usage:  mailme &lt;note&gt;";
            "  uses $network to sends the text of this note to your REAL internet email address.";
            if (!this:is_readable_by(player))
            return player:tell("Sorry, but it seems to be written in some code that you can't read.");
            elseif (!$wiz_utils:get_email_address(player))
            return player:tell("Sorry, you don't have a registered email address.");
            elseif (!$network.active)
            return player:tell("Sorry, internet mail is disabled.");
            elseif (!(text = this:text()))
            return player:tell($string_utils:pronoun_sub("%T is empty--there wouldn't be any point to mailing it."));
            endif
            player:tell("Mailing ", this:title(), " to ", $wiz_utils:get_email_address(player), ".");
            player:tell("... ", length(text), " lines ...");
            suspend(0);
            $network:sendmail($wiz_utils:get_email_address(player), this:titlec(), "", @text);
          </CODE>
        </VERB>
        <OBJECT ID="obj54" FLAGS="f r" OWNER="obj2" LOCATION="obj-1">
          <NAME>generic letter</NAME>
          <PROPERTY OWNER="obj2" PERMS="c r">
            <NAME>oburn_succeeded_msg</NAME>
            <VALUE>"stares at %t; %[tps] bursts into flame and disappears, leaving no ash."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="c r">
            <NAME>oburn_failed_msg</NAME>
            <VALUE>0</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="c r">
            <NAME>burn_failed_msg</NAME>
            <VALUE>"%T might be damp.  In any case, %[tps] won't burn."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="c r">
            <NAME>burn_succeeded_msg</NAME>
            <VALUE>"%T burns with a smokeless flame and leaves no ash."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="c r">
            <NAME>writers</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>encryption_key</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="c">
            <NAME>text</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="c r">
            <NAME>drop_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="c r">
            <NAME>drop_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="c r">
            <NAME>odrop_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="c r">
            <NAME>odrop_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>otake_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>otake_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>take_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>take_failed_msg</NAME>
            <VALUE>"This is a private letter."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>key</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>aliases</NAME>
            <VALUE>{"generic letter"}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>description</NAME>
            <VALUE>"Some writing on the letter explains that you should 'read letter', and when you've finished, 'burn letter'."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>object_size</NAME>
            <VALUE>{2361, 919123696}</VALUE>
          </PROPERTY>
          <VERB OWNER="obj2" PERMS="d r" DOBJ="this" PREP="none" IOBJ="none">
            <NAME>burn</NAME>
            <CODE>
              who = valid(caller_perms()) ? caller_perms() | player;
              if ($perm_utils:controls(who, this) || this:is_readable_by(who))
              result = this:do_burn();
              else
              result = 0;
              endif
              player:tell(result ? this:burn_succeeded_msg() | this:burn_failed_msg());
              if (msg = result ? this:oburn_succeeded_msg() | this:oburn_failed_msg())
              player.location:announce(player.name, " ", msg);
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>burn_succeeded_msg oburn_succeeded_msg burn_failed_msg oburn_failed_msg</NAME>
            <CODE>
              return (msg = this.(verb)) ? $string_utils:pronoun_sub(msg) | "";
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>do_burn</NAME>
            <CODE>
              if ((this != $letter) &amp;&amp; ((caller == this) || $perm_utils:controls(caller_perms(), this)))
              fork (0)
              $recycler:_recycle(this);
              endfork
              return 1;
              else
              return E_PERM;
              endif
            </CODE>
          </VERB>
        </OBJECT>
      </OBJECT>
      <OBJECT ID="obj63" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
        <NAME>Recycling Center</NAME>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>orphans</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>announce_removal_msg</NAME>
          <VALUE>""</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" >
          <NAME>nhist</NAME>
          <VALUE>50</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" >
          <NAME>history</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>lost_souls</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>drop_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>drop_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>odrop_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>odrop_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>otake_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>otake_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>take_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>take_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"Recycling Center", "Center"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>"Object reuse. Call $recycler:_create() to create an object (semantics the same as create()), $recycler:_recycle() to recycle an object. Will create a new object if nothing available in its contents. Note underscores, to avoid builtin :recycle() verb called when objects are recycled. Uses $building_utils:recreate() to prepare objects."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{11726, 919123700}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>_recreate</NAME>
          <CODE>
            "Return a toad (child of #1, owned by $hacker) from this.contents.  Move it to #-1.  Recreate as a child of args[1], or of #1 if no args are given.  Chown to caller_perms() or args[2] if present.";
            {?what = #1, ?who = caller_perms()} = args;
            if (!(caller_perms().wizard || (who == caller_perms())))
            return E_PERM;
            elseif (!(valid(what) &amp;&amp; is_player(who)))
            return E_INVARG;
            elseif ((((who != what.owner) &amp;&amp; (!what.f)) &amp;&amp; (!who.wizard)) &amp;&amp; (!caller_perms().wizard))
            return E_PERM;
            endif
            for potential in (this.contents)
            if (((potential.owner == $hacker) &amp;&amp; (parent(potential) == $garbage)) &amp;&amp; (!children(potential)))
            return this:setup_toad(potential, who, what);
            endif
            endfor
            return E_NONE;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>_recycle</NAME>
          <CODE>
            "Take the object in args[1], and turn it into a child of #1 owned by $hacker.";
            "If the object is a player, decline.";
            item = args[1];
            if (!$perm_utils:controls(caller_perms(), item))
            raise(E_PERM);
            elseif (is_player(item))
            raise(E_INVARG);
            endif
            this:addhist(caller_perms(), item);
            "...recreate can fail (:recycle can crash)...";
            this:add_orphan(item);
            this:kill_all_tasks(item);
            $quota_utils:preliminary_reimburse_quota(item.owner, item);
            $building_utils:recreate(item, $garbage);
            this:remove_orphan(item);
            "...";
            $wiz_utils:set_owner(item, $hacker);
            item.name = tostr("Recyclable ", item);
            `move(item, this) ! ANY =&gt; 0';
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>_create</NAME>
          <CODE>
            e = `set_task_perms(caller_perms()) ! ANY';
            if (typeof(e) == ERR)
            return e;
            else
            val = this:_recreate(@args);
            return (val == E_NONE) ? $quota_utils:bi_create(@args) | val;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>addhist</NAME>
          <CODE>
            if (caller == this)
            h = this.history;
            if ((len = length(h)) &gt; this.nhist)
            h = h[len - this.nhist..len];
            endif
            this.history = {@h, args};
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="none">
          <NAME>show*-history</NAME>
          <CODE>
            if ($perm_utils:controls(valid(caller_perms()) ? caller_perms() | player, this))
            for x in (this.history)
            pname = valid(x[1]) ? x[1].name | "A recycled player";
            oname = valid(x[2]) ? x[2].name | "recycled";
            player:notify(tostr(pname, " (", x[1], ") recycled ", x[2], " (now ", oname, ")"));
            endfor
            else
            player:tell("Sorry.");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="out of/from inside/from" IOBJ="this">
          <NAME>request</NAME>
          <CODE>
            "added check that obj is already $garbage - Bits 12/16/5";
            if (!(caller_perms() in {player, #-1}))
            raise(E_PERM);
            endif
            dobj = valid(dobj) ? dobj | $string_utils:match_object(dobjstr, player.location);
            if (!valid(dobj))
            dobj = (n = toint(dobjstr)) ? toobj(n) | #-1;
            endif
            if (!valid(dobj))
            player:tell("Couldn't parse ", dobjstr, " as a valid object number.");
            elseif (!(dobj in this.contents))
            player:tell("Couldn't find ", dobj, " in ", this.name, ".");
            elseif (!$object_utils:isa(dobj, $garbage))
            player:tell("Sorry, that isn't recyclable.");
            elseif ($object_utils:has_callable_verb(this, "request_refused") &amp;&amp; (msg = this:request_refused(player, dobj)))
            player:tell("Sorry, can't do that:  ", msg);
            else
            if (typeof(emsg = this:setup_toad(dobj, player, $root_class)) != ERR)
            dobj:moveto(player);
            dobj.aliases = {dobj.name = "Object " + tostr(dobj)};
            player:tell("You now have ", dobj, " ready for @recreation.");
            if (this.announce_removal_msg)
            player.location:announce($string_utils:pronoun_sub(this.announce_removal_msg));
            endif
            else
            player:tell(emsg);
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>setup_toad</NAME>
          <CODE>
            "this:setup_toad(objnum,new_owner,parent)";
            "Called by :_create and :request.";
            if (caller != this)
            return E_PERM;
            endif
            {potential, who, what} = args;
            if (!$quota_utils:creation_permitted(who))
            return E_QUOTA;
            else
            $wiz_utils:set_owner(potential, who);
            move(potential, #-1);
            set_task_perms({@callers(), {#-1, "", player}}[2][3]);
            "... if :initialize crashes...";
            this:add_orphan(potential);
            $building_utils:recreate(potential, what);
            this:remove_orphan(potential);
            "... if we don't get this far, the object stays on the orphan list...";
            "... orphan list should be checked periodically...";
            return potential;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>add_orphan</NAME>
          <CODE>
            if (caller == this)
            this.orphans = setadd(this.orphans, args[1]);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>remove_orphan</NAME>
          <CODE>
            if (caller == this)
            this.orphans = setremove(this.orphans, args[1]);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>valid</NAME>
          <CODE>
            "Usage:  valid(object)";
            "True if object is valid and not $garbage.";
            return valid(args[1]) &amp;&amp; (parent(args[1]) != $garbage);
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>init_for_core</NAME>
          <CODE>
            if (caller_perms().wizard)
            this.orphans = {};
            this.history = {};
            this.lost_souls = {};
            pass();
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>resurrect</NAME>
          <CODE>
            who = caller_perms();
            if (!valid(parent = {@args, $garbage}[1]))
            return E_INVARG;
            elseif (!who.wizard)
            return E_PERM;
            elseif (typeof(o = renumber($quota_utils:bi_create(parent, $hacker))) == ERR)
            "..death...";
            elseif (parent == $garbage)
            $recycler:_recycle(o);
            else
            o.aliases = {o.name = tostr("Resurrectee ", o)};
            $wiz_utils:set_owner(o, who);
            move(o, who);
            endif
            reset_max_object();
            return o;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>reclaim_lost_souls</NAME>
          <CODE>
            if (!caller_perms().wizard)
            raise(E_PERM);
            endif
            fork (1800)
            this:(verb)();
            endfork
            for x in (this.lost_souls)
            this.lost_souls = setremove(this.lost_souls, x);
            if ((valid(x) &amp;&amp; (typeof(x.owner.owned_objects) == LIST)) &amp;&amp; (!(x in x.owner.owned_objects)))
            x.owner.owned_objects = setadd(x.owner.owned_objects, x);
            $quota_utils:summarize_one_user(x.owner);
            endif
            $command_utils:suspend_if_needed(0);
            endfor
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>look_self</NAME>
          <CODE>
            if (prepstr in {"in", "inside", "into"})
            recycler = this;
            linelen = ((linelen = abs(player.linelen)) &lt; 20) ? 78 | linelen;
            intercolumn_gap = 2;
            c_width = length(tostr(max_object())) + intercolumn_gap;
            n_columns = (linelen + (c_width - 1)) / c_width;
            things = $list_utils:sort_suspended(0, this.contents);
            header = tostr(this.name, " (", this, ") contains:");
            player:tell_lines({header, @$string_utils:columnize_suspended(0, things, n_columns)});
            else
            return pass(@args);
            endif
            "This code contributed by Mickey.";
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>check_quota_scam</NAME>
          <CODE>
            who = args[1];
            if ($quota_utils.byte_based &amp;&amp; (is_clear_property(who, "size_quota") || is_clear_property(who, "owned_objects")))
            raise(E_QUOTA);
            endif
            cheater = 0;
            other_cheaters = {};
            for x in (this.lost_souls)
            if (((valid(x) &amp;&amp; ((owner = x.owner) != $hacker)) &amp;&amp; (typeof(owner.owned_objects) == LIST)) &amp;&amp; (!(x in owner.owned_objects)))
            if (owner == who)
            who.owned_objects = setadd(who.owned_objects, x);
            cheater = 1;
            else
            "it's someone else's quota scam we're detecting...";
            other_cheaters = setadd(other_cheaters, owner);
            owner.owned_objects = setadd(owner.owned_objects, x);
            this.lost_souls = setremove(this.lost_souls, x);
            endif
            endif
            this.lost_souls = setremove(this.lost_souls, x);
            endfor
            if ($quota_utils.byte_based)
            if (cheater)
            $quota_utils:summarize_one_user(who);
            endif
            if (other_cheaters)
            fork (0)
            for x in (other_cheaters)
            $quota_utils:summarize_one_user(x);
            endfor
            endfork
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>gc</NAME>
          <CODE>
            for x in (this.orphans)
            if ((!valid(x)) || ((x.owner != $hacker) &amp;&amp; (x in x.owner.owned_objects)))
            this.orphans = setremove(this.orphans, x);
            endif
            endfor
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>moveto</NAME>
          <CODE>
            pass(#-1);
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>kill_all_tasks</NAME>
          <CODE>
            "kill_all_tasks ( object being recycled )";
            " -- kill all tasks involving this now-recycled object";
            ((caller == this) || (caller == #0)) || raise(E_PERM);
            {object} = args;
            (typeof(object) == OBJ) || raise(E_INVARG);
            fork (0)
            for t in (queued_tasks())
            for c in (`task_stack(t[1]) ! E_INVARG =&gt; {}')
            if (object in c)
            kill_task(t[1]);
            continue t;
            endif
            endfor
            endfor
            endfork
          </CODE>
        </VERB>
      </OBJECT>
      <OBJECT ID="obj74" FLAGS="f r" OWNER="obj36" LOCATION="obj-1">
        <NAME>Generic Feature Object</NAME>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>warehouse</NAME>
          <VALUE>#83</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>help_msg</NAME>
          <VALUE>"The Generic Feature Object--not to be used as a feature object."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>feature_verbs</NAME>
          <VALUE>{"Using"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>feature_ok</NAME>
          <VALUE>1</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>drop_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>drop_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>odrop_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>odrop_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>otake_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>otake_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>take_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>take_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"Generic Feature Object", "Generic .Features_Huh Object", "Feature Object", ".Features_Huh Object"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>"This is the Generic Feature Object.  It is not meant to be used as a feature object itself, but is handy for making new feature objects."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{6717, 919123701}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>help_msg</NAME>
          <CODE>
            all_help = this.help_msg;
            if (typeof(all_help) == STR)
            all_help = {all_help};
            endif
            helpless = {};
            for vrb in (this.feature_verbs)
            if (loc = $object_utils:has_verb(this, vrb))
            loc = loc[1];
            help = $code_utils:verb_documentation(loc, vrb);
            if (help)
            all_help = {@all_help, "", tostr(loc, ":", verb_info(loc, vrb)[3]), @help};
            else
            helpless = {@helpless, vrb};
            endif
            endif
            endfor
            if (helpless)
            all_help = {@all_help, "", ("No help found on " + $string_utils:english_list(helpless, "nothing", " or ")) + "."};
            endif
            return {@all_help, "----"};
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>look_self</NAME>
          <CODE>
            "Definition from #1";
            desc = this:description();
            if (desc)
            player:tell_lines(desc);
            else
            player:tell("You see nothing special.");
            endif
            player:tell("Please type \"help ", this, "\" for more information.");
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>using this</NAME>
          <CODE>
            "Proper usage for the Generic Feature Object:";
            "";
            "First of all, the Generic Feature Object is constructed with the idea";
            "that its children will be @moved to #24300, which is kind of a warehouse";
            "for feature objects.  If there's enough interest, I'll try to make the";
            "stuff that works with that in mind optional.";
            "";
            "Make a short description.  This is so I can continue to have looking at";
            "#24300 give the descriptions of each of the objects in its .contents.";
            "The :look_msg automatically includes a pointer to `help &lt;this object&gt;',";
            "so you don't have to.";
            "";
            "Put a list of the commands you want people to use in";
            "&lt;this object&gt;.feature_verbs.  (You need to use the :set_feature_verbs";
            "verb to do this.)";
            "";
            "When someone types `help &lt;this object&gt;', they will be told the comment";
            "strings from each of the verbs named in .feature_verbs.";
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>examine_commands_ok</NAME>
          <CODE>
            return this in args[1].features;
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>set_feature_ok</NAME>
          <CODE>
            if ($perm_utils:controls(caller_perms(), this) || (caller == this))
            return this.feature_ok = args[1];
            else
            return E_PERM;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>hidden_verbs</NAME>
          <CODE>
            "Can't see `get' unless it's in the room; can't see `drop' unless it's in the player.  Should possibly go on $thing.";
            "Should use :contents, but I'm in a hurry.";
            hidden = pass(@args);
            if (this.location != args[1])
            hidden = setadd(hidden, {$thing, verb_info($thing, "drop")[3], {"this", "none", "none"}});
            hidden = setadd(hidden, {$thing, verb_info($thing, "give")[3], {"this", "at/to", "any"}});
            endif
            if (this.location != args[1].location)
            hidden = setadd(hidden, {$thing, verb_info($thing, "get")[3], {"this", "none", "none"}});
            endif
            return hidden;
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>set_feature_verbs</NAME>
          <CODE>
            if ($perm_utils:controls(caller_perms(), this) || (caller == this))
            return this.feature_verbs = args[1];
            else
            return E_PERM;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>initialize</NAME>
          <CODE>
            if ((caller == this) || $perm_utils:controls(caller_perms(), this))
            pass(@args);
            this.feature_verbs = {};
            else
            return E_PERM;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>init_for_core</NAME>
          <CODE>
            if (($code_utils:verb_location() == this) &amp;&amp; caller_perms().wizard)
            this.warehouse = $feature_warehouse;
            `delete_property(this, "guest_ok") ! ANY';
            `delete_verb(this, "set_ok_for_guest_use") ! ANY';
            `set_verb_code(this, "player_connected", {"return;"}) ! ANY';
            pass();
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>feature_remove</NAME>
          <CODE>
            "This is just a blank verb definition to encourage others to use this verb name if they care when a user is no longer using that feature.";
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>player_connected</NAME>
          <CODE>
            return;
          </CODE>
        </VERB>
        <OBJECT ID="obj90" FLAGS="f r" OWNER="obj36" LOCATION="obj-1">
          <NAME>Stage-Talk Feature</NAME>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>warehouse</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>help_msg</NAME>
            <VALUE>{"This feature contains various verbs used in stage talk, which allows players to describe their actions in terms of stage directions instead of prose."}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>feature_verbs</NAME>
            <VALUE>{"`", "[", "]", "-", "&lt;"}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>feature_ok</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>drop_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>drop_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>odrop_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>odrop_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>otake_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>otake_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>take_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>take_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>key</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>aliases</NAME>
            <VALUE>{"Stage-Talk Feature"}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>description</NAME>
            <VALUE>{"This feature contains various verbs used in stage talk, which allows players to describe their actions in terms of stage directions instead of prose."}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>object_size</NAME>
            <VALUE>{4209, 919123705}</VALUE>
          </PROPERTY>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>stage `*</NAME>
            <CODE>
              "Say something out loud, directed at someone or something.";
              "Usage:";
              "  `target message";
              "Example:";
              "  Munchkin is talking to Kenneth, who's in the same room with him.  He types:";
              "      `kenneth What is the frequency?";
              "  The room sees:";
              "       Munchkin [to Kenneth]: What is the frequency?";
              name = verb[2..$];
              who = player.location:match_object(name);
              if ($command_utils:object_match_failed(who, name))
              return;
              endif
              player.location:announce_all(player.name, " [to ", who.name, "]: ", argstr);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>stage [*</NAME>
            <CODE>
              "Say something out loud, in some specific way.";
              "Usage:";
              "  [how]: message";
              "Example:";
              "  Munchkin decideds to sing some lyrics.  He types:";
              "      [sings]: I am the eggman";
              "  The room sees:";
              "      Munchkin [sings]: I am the eggman";
              player.location:announce_all((((player.name + " ") + verb) + " ") + argstr);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>stage ]*</NAME>
            <CODE>
              "Perform some physical, non-verbal, action.";
              "Usage:";
              "  ]third person action";
              "Example:";
              "  Munchkin has annoyed some would-be tough guy.  He types:";
              "      ]hides behind the reactor.";
              "  The room sees:";
              "      [Munchkin hides behind the reactor.]";
              player.location:announce_all("[", (((player.name + " ") + verb[2..$]) + (argstr ? " " + argstr | "")) + "]");
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>-*</NAME>
            <CODE>
              "This is the same as `*";
              name = verb[2..$];
              who = player.location:match_object(name);
              argstr = $code_utils:argstr(verb, args, argstr);
              if (!valid(who))
              player.location:announce_all(player.name, " [", name, "]: ", argstr);
              else
              player.location:announce_all(player.name, " [to ", who.name, "]: ", argstr);
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>stage &lt;*</NAME>
            <CODE>
              "Point to yourself.";
              "Usage:";
              "  &lt;message";
              "Example:";
              "  Muchkin decides he's being strange. He types:";
              "    &lt;being strange.";
              "  The room sees:";
              "    Munchkin &lt;- being strange.";
              player.location:announce_all((((player.name + " &lt;- ") + verb[2..$]) + " ") + argstr);
            </CODE>
          </VERB>
        </OBJECT>
        <OBJECT ID="obj91" FLAGS="f r" OWNER="obj36" LOCATION="obj-1">
          <NAME>Pasting Feature</NAME>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>warehouse</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>help_msg</NAME>
            <VALUE>"The Pasting Feature is mostly useful to people with fancy clients (such as Emacs) or who connect using a windowing system that allows them to copy text they've already seen.  It's intended to give people a way to quote verbatim text at other people in the room."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>feature_verbs</NAME>
            <VALUE>{"@paste", "|", "@paste-to"}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>feature_ok</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>drop_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>drop_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>odrop_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>odrop_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>otake_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>otake_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>take_succeeded_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>take_failed_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>key</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>aliases</NAME>
            <VALUE>{"Pasting Feature"}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>description</NAME>
            <VALUE>"Verbs useful to people using a windowing system to paste text at people."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>object_size</NAME>
            <VALUE>{4198, 919123706}</VALUE>
          </PROPERTY>
          <VERB OWNER="obj36" PERMS="x r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>@paste</NAME>
            <CODE>
              "Usage: @paste &lt;prefix&gt; &lt;suffix&gt;";
              "Announce a series of entered lines to the room the player is in.";
              "Before the lines are quoted, player.paste_header is run through";
              "$string_utils:pronoun_sub(), and if the result contains the player's";
              "name, it is used as a header.  Otherwise player.name centered in a";
              "line of dashes is used.";
              "A footer comes afterwards, likewise derived from player.paste_footer.";
              "&lt;prefix&gt; and &lt;suffix&gt; are placed before and after each line.";
              "";
              "This verb is, as one might guess, designed for pasting text to MOO using";
              "GnuEmacs or a windowing system.  You should remember that after you";
              "have pasted the lines in, you must type . on a line by itself, or you'll";
              "sit around waiting for $command_utils:read_lines() to finish _forever_.";
              {?prefix = "", ?suffix = ""} = args;
              lines = $command_utils:read_lines();
              header = $string_utils:pronoun_sub_secure($code_utils:verb_or_property(player, "paste_header"), "") || $string_utils:center(player.name, 75, "-");
              to_tell = {header};
              for line in (lines)
              to_tell = listappend(to_tell, (prefix + line) + suffix);
              endfor
              to_tell = listappend(to_tell, $string_utils:pronoun_sub_secure($code_utils:verb_or_property(player, "paste_footer"), "") || $string_utils:center("finished", 75, "-"));
              for thing in (player.location.contents)
              $command_utils:suspend_if_needed(0);
              thing:tell_lines(to_tell);
              endfor
              player:tell("Done @pasting.");
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>|*</NAME>
            <CODE>
              "Echo a line prefaced by a vertical bar.";
              "Usage:";
              "  |message";
              "Example:";
              "  Hacker wants to echo to the room what he just saw. He enters (either by hand, or with Emacs or a windowing system):";
              "      |Haakon has disconnected.";
              "  The room sees:";
              "      Hacker | Haakon has disconnected.";
              player.location:announce_all((((player.name + " | ") + verb[2..$]) + " ") + argstr);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>@pasteto @paste-to</NAME>
            <CODE>
              "Syntax: @paste-to &lt;player&gt;";
              "";
              "Which will then prompt you for the lines to privately send to &lt;player&gt;. The lines will be surrounded by a default footer and header.";
              target = $string_utils:match_player(dobjstr);
              $command_utils:player_match_result(target, dobjstr);
              if (!valid(target))
              return;
              endif
              prefix = "";
              suffix = "";
              lines = $command_utils:read_lines();
              to_tell = {$string_utils:center("Private message from " + player.name, 75, "-")};
              for line in (lines)
              to_tell = listappend(to_tell, (prefix + line) + suffix);
              endfor
              to_tell = listappend(to_tell, $string_utils:center("end message", 75, "-"));
              target:tell_lines(to_tell);
              player:tell("Done @pasting.");
            </CODE>
          </VERB>
        </OBJECT>
      </OBJECT>
      <OBJECT ID="obj87" FLAGS="r" OWNER="obj2" LOCATION="obj-1">
        <NAME>password verifier</NAME>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>minimum_password_length</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>check_against_name</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>check_against_email</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>check_against_hosts</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>check_against_dictionary</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>require_funky_characters</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>help_msg</NAME>
          <VALUE>{"Password Verifier", "==================", "", "To check for the validity of a password, use", "  :reject_password( password [, for-whom? ] )", "... If it returns a true value, that value will contain the string representing the reason why the password was rejected.  If it returns a false value, the password is OK.", "", "The toggle switches for this checking are:"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>check_against_moo</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>check_obscure_stuff</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>drop_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>drop_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>odrop_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>odrop_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>otake_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>otake_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>take_succeeded_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>take_failed_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c">
          <NAME>key</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"password verifier", "password", "verifier", "pwd"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>"The password verifier verifies passwords."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{10869, 919123705}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>help_msg</NAME>
          <CODE>
            if (typeof(base = this.(verb)) == STR)
            base = {base};
            endif
            base = {@base, "", tostr(".minimum_password_length = ", toliteral(x = this.minimum_password_length)), x ? tostr("Passwords are required to be a minimum of ", $string_utils:english_number(x), " characters in length.") | "There is no minimum length requirement for passwords."};
            base = {@base, "", tostr(".check_against_moo = ", toliteral(x = this.check_against_moo)), tostr("Passwords ", x ? "may not" | "may", " be variants on the MOO's name (", $network.MOO_name, ").")};
            base = {@base, "", tostr(".check_against_name = ", toliteral(x = this.check_against_name)), tostr("Passwords ", x ? "may not" | "may", " be variants on the player's MOO name and/or aliases.")};
            base = {@base, "", tostr(".check_against_email = ", toliteral(x = this.check_against_email)), x ? "Passwords may not be variants on the player's email address." | "Passwords are not checked against the player's email address."};
            base = {@base, "", tostr(".check_against_hosts = ", toliteral(x = this.check_against_hosts)), x ? "Passwords may not be variants on the player's hostname(s)." | "Passwords are not checked against the player's hostname(s)."};
            base = {@base, "", tostr(".check_against_dictionary = ", toliteral(x = this.check_against_dictionary)), tostr("Passwords ", (typeof(x) in {LIST, OBJ}) ? "may not" | "may", " be dictionary words.", (x &amp;&amp; (!$network.active)) ? "  (This option is set but unavailable.)" | "")};
            base = {@base, "", tostr(".require_funky_characters = ", toliteral(x = this.require_funky_characters)), tostr("Non-alphabetic characters are ", x ? "" | "not ", "required in passwords.")};
            base = {@base, "", tostr(".check_obscure_stuff = ", toliteral(x = this.check_obscure_stuff)), x ? "Misc. obscure checks enabled" | "No obscure checks in use."};
            return base;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>reject_password</NAME>
          <CODE>
            ":reject_password ( STR password [ , OBJ for-whom ] );";
            "=&gt; string value [if the password is rejected, why?]";
            "=&gt; false value [if the password isn't rejected]";
            if (length(args) == 1)
            trust = 0;
            else
            if ($perm_utils:controls(caller_perms(), args[2]))
            trust = 1;
            else
            return "Permissions don't permit setting of that password.";
            endif
            endif
            "this is gonna be huge";
            return (((((((this:trivial_check(@args) || (this.minimum_password_length &amp;&amp; this:check_length(@args))) || ((this.check_against_name &amp;&amp; trust) &amp;&amp; this:check_name(@args))) || ((this.check_against_email &amp;&amp; trust) &amp;&amp; this:check_email(@args))) || ((this.check_against_hosts &amp;&amp; trust) &amp;&amp; this:check_hosts(@args))) || ((typeof(this.check_against_dictionary) in {LIST, OBJ}) &amp;&amp; this:check_dictionary(@args))) || (this.require_funky_characters &amp;&amp; this:check_for_funky_characters(@args))) || (this.check_against_moo &amp;&amp; this:check_against_moo(@args))) || (this.check_obscure_stuff &amp;&amp; this:check_obscure_combinations(@args));
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>trivial_check</NAME>
          <CODE>
            if (typeof(pwd = args[1]) != STR)
            return "Passwords must be strings.";
            elseif (index(pwd, " "))
            return "Passwords may not contain spaces.";
            elseif (length(args) == 2)
            if (((typeof(who = args[2]) != OBJ) || (!valid(who))) || (!is_player(who)))
            return "That's not a player.";
            elseif (!$perm_utils:controls(caller_perms(), who))
            return "You can't set the password for that player.";
            elseif ($object_utils:isa(who, $guest))
            return "Sorry, but guest characters are not allowed to change their passwords.";
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>check_length</NAME>
          <CODE>
            if ((l = this.minimum_password_length) &amp;&amp; (length(args[1]) &lt; l))
            return tostr("Passwords must be a minimum of ", $string_utils:english_number(l), (l == 1) ? " character " | " characters ", "long.");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>check_name</NAME>
          <CODE>
            pwd = args[1];
            if (valid($player_db:find_exact(pwd)))
            return "Passwords may not be close to a player's name/alias pair.";
            elseif (valid($player_db:find($string_utils:reverse(pwd))))
            return "Passwords ought not be the reverse of a player's name/alias.";
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>check_email</NAME>
          <CODE>
            {pwd, who} = args;
            if (!$perm_utils:controls(caller_perms(), who))
            return "Permission denied.";
            endif
            email = $wiz_utils:get_email_address(who);
            if (!email)
            "can't check";
            return;
            endif
            if (index(email, pwd))
            return "Passwords can't match your registered email address.";
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>check_hosts</NAME>
          <CODE>
            {pwd, who} = args;
            if (!$perm_utils:controls(caller_perms(), who))
            return "Permission denied.";
            endif
            hosts = who.all_connect_places;
            for x in (hosts)
            if (index(x, pwd))
            return "Passwords may not match hostnames.";
            endif
            endfor
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>check_dictionary</NAME>
          <CODE>
            pwd = args[1];
            if ((typeof(dict = this.check_against_dictionary) == LIST) &amp;&amp; $network.active)
            "assume we're checking an on-line dictionary";
            dict[3] = dict[3] + pwd;
            result = $gopher:get(@dict);
            if (typeof(result) == ERR)
            "we probably can't check the dictionary anyway";
            return;
            elseif ((result[1] &amp;&amp; (result[1][1] != "0")) &amp;&amp; (!this:_is_funky_case(pwd)))
            return "Dictionary words are not permitted for passwords.";
            endif
            elseif (typeof(dict) == OBJ)
            "assume we're checking mr spell";
            try
            if (dict:find_exact(pwd) &amp;&amp; (!this:_is_funky_case(pwd)))
            return "Dictionary words are not permitted for passwords.";
            endif
            except (ANY)
            "in case this is messed up. Just let it go and return 0;";
            endtry
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>check_for_funky_characters</NAME>
          <CODE>
            if (this:_is_funky_case(pwd = args[1]))
            return;
            endif
            alphabet = $string_utils.alphabet;
            for i in [1..length(pwd)]
            if (!index(alphabet, pwd[i]))
            return;
            endif
            endfor
            return "At least one unusual capitalization and/or numeric or punctuation character is required.";
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>check_against_moo</NAME>
          <CODE>
            pwd = args[1];
            moo = $network.MOO_Name;
            if (this:_is_funky_case(pwd))
            return;
            endif
            if (pwd == moo)
            return "The MOO's name is not secure as a password.";
            endif
            if (moo[$ - 2..$] == "MOO")
            if (pwd == moo[1..$ - 3])
            return "The MOO's name is not secure as a password.";
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>_is_funky_case</NAME>
          <CODE>
            pwd = args[1];
            if (!strcmp(pwd, u = $string_utils:uppercase(pwd)))
            return 0;
            elseif (!strcmp(pwd, l = $string_utils:lowercase(pwd)))
            return 0;
            elseif (!strcmp(pwd, tostr(u[1], l[2..$])))
            return 0;
            else
            return 1;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>check_obscure_combinations</NAME>
          <CODE>
            pwd = args[1];
            if (match(pwd, "^[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]$"))
            return "Social security numbers are potentially insecure passwords.";
            elseif (match(pwd, "^[0-9]+/[0-9]+/[0-9]+$"))
            return "Passwords which look like dates are potentially insecure passwords.";
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>init_for_core</NAME>
          <CODE>
            if (caller_perms().wizard)
            pass(@args);
            this.minimum_password_length = this.check_against_name = this.check_against_email = this.check_against_hosts = this.check_against_dictionary = this.require_funky_characters = this.check_against_moo = this.check_obscure_stuff = 0;
            endif
          </CODE>
        </VERB>
      </OBJECT>
    </OBJECT>
    <OBJECT ID="obj6" FLAGS="f r" OWNER="obj2" LOCATION="obj-1">
      <NAME>generic player</NAME>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>features</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>previous_connection</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>email_address</NAME>
        <VALUE>""</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>last_disconnect_time</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>help</NAME>
        <VALUE>#60</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>more_msg</NAME>
        <VALUE>"*** More ***  %n lines left.  Do @more [rest|flush] for more."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>linetask</NAME>
        <VALUE>{0, 0}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>linesleft</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" >
        <NAME>linebuffer</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>pagelen</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>owned_objects</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>linelen</NAME>
        <VALUE>-79</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c">
        <NAME>current_folder</NAME>
        <VALUE>1</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>all_connect_places</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>last_connect_place</NAME>
        <VALUE>"?"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>dict</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>brief</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c">
        <NAME>lines</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>page_absent_msg</NAME>
        <VALUE>"%N is not currently logged in."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>pq</NAME>
        <VALUE>"its"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>pqc</NAME>
        <VALUE>"Its"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>page_origin_msg</NAME>
        <VALUE>"You sense that %n is looking for you in %l."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>page_echo_msg</NAME>
        <VALUE>"Your message has been sent."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>edit_options</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>last_connect_time</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" >
        <NAME>ownership_quota</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>gender</NAME>
        <VALUE>"neuter"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>prc</NAME>
        <VALUE>"Itself"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>ppc</NAME>
        <VALUE>"Its"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>poc</NAME>
        <VALUE>"It"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>psc</NAME>
        <VALUE>"It"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>pr</NAME>
        <VALUE>"itself"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>pp</NAME>
        <VALUE>"its"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>po</NAME>
        <VALUE>"it"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>ps</NAME>
        <VALUE>"it"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>home</NAME>
        <VALUE>#62</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>password</NAME>
        <VALUE>"impossible password to type"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>gaglist</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>paranoid</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>display_options</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>verb_subs</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>first_connect_time</NAME>
        <VALUE>2147483647</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" >
        <NAME>size_quota</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>last_password_time</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>last_connect_attempt</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c">
        <NAME>key</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>aliases</NAME>
        <VALUE>{"generic player"}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>description</NAME>
        <VALUE>"You see a player who should type '@describe me as ...'."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>object_size</NAME>
        <VALUE>{95739, 919123665}</VALUE>
      </PROPERTY>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>init_for_core</NAME>
        <CODE>
          if (caller_perms().wizard)
          pass();
          this.home = (this in {$no_one, $hacker}) ? $nothing | $player_start;
          if (a = $list_utils:assoc(this, {{$prog, {$prog_help, $builtin_function_help, $verb_help, $core_help}}, {$wiz, $wiz_help}, {$builder, $builder_help}, {$mail_recipient_class, $mail_help}, {$frand_class, $frand_help}}))
          this.help = a[2];
          else
          this.help = 0;
          endif
          if (this != $player)
          for p in ({"last_connect_place", "all_connect_places", "features", "previous_connection", "last_connect_time"})
          clear_property(this, p);
          endfor
          if (is_player(this))
          this.first_connect_time = $maxint;
          this.last_disconnect_time = $maxint;
          endif
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>confunc</NAME>
        <CODE>
          if (((valid(cp = caller_perms()) &amp;&amp; (caller != this)) &amp;&amp; (!$perm_utils:controls(cp, this))) &amp;&amp; (caller != #0))
          return E_PERM;
          endif
          this:("@last-connection")();
          $news:check();
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>disfunc</NAME>
        <CODE>
          if (((valid(cp = caller_perms()) &amp;&amp; (caller != this)) &amp;&amp; (!$perm_utils:controls(cp, this))) &amp;&amp; (caller != #0))
          return E_PERM;
          endif
          this:expunge_rmm();
          this:erase_paranoid_data();
          this:gc_gaglist();
          return;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>initialize</NAME>
        <CODE>
          if ((caller == this) || $perm_utils:controls(caller_perms(), this))
          this.help = 0;
          return pass(@args);
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>acceptable</NAME>
        <CODE>
          return !is_player(args[1]);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>my_huh</NAME>
        <CODE>
          "Extra parsing of player commands.  Called by $command_utils:do_huh.";
          "This version of my_huh just handles features.";
          permissions = (((caller == this) || $perm_utils:controls(caller_perms(), this)) &amp;&amp; $command_utils:validate_feature(@args)) ? this | $no_one;
          "verb - obvious                 pass - would be args";
          "plist - list of prepspecs that this command matches";
          "dlist and ilist - likewise for dobjspecs, iobjspecs";
          verb = args[1];
          if ($code_utils:toint(verb))
          return;
          endif
          pass = args[2];
          plist = {"any", prepstr ? $code_utils:full_prep(prepstr) | "none"};
          dlist = dobjstr ? {"any"} | {"none", "any"};
          ilist = iobjstr ? {"any"} | {"none", "any"};
          for fobj in (this.features)
          if (!$recycler:valid(fobj))
          this:remove_feature(fobj);
          elseif (`valid(loc = $object_utils:has_callable_verb(fobj, verb)[1]) ! ANY =&gt; 0')
          vargs = verb_args(loc, verb);
          if ((vargs[2] in plist) &amp;&amp; ((vargs[1] in dlist) &amp;&amp; (vargs[3] in ilist)))
          "(got rid of notify_huh - should write a @which command)";
          "if (this.notify_huh)";
          "player:notify(tostr(\"Using \", what.name, \" (\", what, \")\"));";
          "endif";
          set_task_perms(permissions);
          fobj:(verb)(@pass);
          "Problem with verbs of the same name. If we use which=vrb in the loop instead, we have a problem with verbs that use the variable verb.";
          return 1;
          endif
          endif
          if ($command_utils:running_out_of_time())
          player:tell("You have too many features.  Parsing your command runs out of ticks while checking ", fobj.name, " (", fobj, ").");
          return 1;
          endif
          endfor
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>last_huh</NAME>
        <CODE>
          ":last_huh(verb,args)  final attempt to parse a command...";
          set_task_perms(caller_perms());
          {verb, args} = args;
          if ((verb[1] == "@") &amp;&amp; (prepstr == "is"))
          "... set or show _msg property ...";
          set_task_perms(player);
          $last_huh:(verb)(@args);
          return 1;
          elseif (verb in {"give", "hand", "get", "take", "drop", "throw"})
          $last_huh:(verb)(@args);
          return 1;
          else
          return 0;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>my_match_object</NAME>
        <CODE>
          ":my_match_object(string [,location])";
          return $string_utils:match_object(@{@args, this.location}[1..2], this);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>tell_contents</NAME>
        <CODE>
          c = args[1];
          if (c)
          longear = {};
          gear = {};
          width = player:linelen();
          half = width / 2;
          player:tell("Carrying:");
          for thing in (c)
          cx = tostr(" ", thing:title());
          if (length(cx) &gt; half)
          longear = {@longear, cx};
          else
          gear = {@gear, cx};
          endif
          endfor
          player:tell_lines($string_utils:columnize(gear, 2, width));
          player:tell_lines(longear);
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>titlec</NAME>
        <CODE>
          return `this.namec ! E_PROPNF =&gt; this:title()';
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>notify</NAME>
        <CODE>
          line = args[1];
          if (this.pagelen)
          if (!(this in connected_players()))
          "...drop it on the floor...";
          return 0;
          elseif ((caller != this) &amp;&amp; (!$perm_utils:controls(caller_perms(), this)))
          return E_PERM;
          endif
          "...need wizard perms if this and this.owner are different, since...";
          "...only this can notify() and only this.owner can read .linebuffer...";
          if ((player == this) &amp;&amp; (this.linetask[2] != task_id()))
          "...player has started a new task...";
          "....linetask[2] is the taskid of the most recent player task...";
          if (this.linetask[2] != this.linetask[1])
          this.linesleft = this.pagelen - 2;
          endif
          this.linetask[2] = task_id();
          endif
          "... digest the current line...";
          if (this.linelen &gt; 0)
          lbuf = {@this.linebuffer, @this:linesplit(line, this.linelen)};
          else
          lbuf = {@this.linebuffer, line};
          endif
          "... print out what we can...";
          if (this.linesleft)
          howmany = min(this.linesleft, length(lbuf));
          for l in (lbuf[1..howmany])
          pass(l);
          endfor
          this.linesleft = this.linesleft - howmany;
          lbuf[1..howmany] = {};
          endif
          if (lbuf)
          "...see if we need to say ***More***";
          if (this.linetask[1] != this.linetask[2])
          "....linetask[1] is the taskid of the most recent player task";
          "...   for which ***More*** was printed...";
          this.linetask[1] = this.linetask[2];
          fork (0)
          if (lb = this.linebuffer)
          pass(strsub(this.more_msg, "%n", tostr(length(lb))));
          endif
          endfork
          endif
          llen = length(lbuf);
          if (llen &gt; 500)
          "...way too much saved text, flush some of it...";
          lbuf[1..llen - 100] = {"*** buffer overflow, lines flushed ***"};
          endif
          endif
          this.linebuffer = lbuf;
          else
          if (caller != this)
          set_task_perms(caller_perms());
          endif
          if (this.linelen &gt; 0)
          for l in (this:linesplit(line, this.linelen))
          pass(l);
          endfor
          else
          pass(line);
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>notify_lines</NAME>
        <CODE>
          if (($perm_utils:controls(caller_perms(), this) || (caller == this)) || (caller_perms() == this))
          set_task_perms(caller_perms());
          for line in ((typeof(lines = args[1]) != LIST) ? {lines} | lines)
          this:notify(tostr(line));
          endfor
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>linesplit</NAME>
        <CODE>
          ":linesplit(line,len) =&gt; list of substrings of line";
          "used by :notify to split up long lines if .linelen&gt;0";
          {line, len} = args;
          cline = {};
          while (length(line) &gt; len)
          cutoff = rindex(line[1..len], " ");
          if (nospace = cutoff &lt; ((4 * len) / 5))
          cutoff = len + 1;
          nospace = line[cutoff] != " ";
          endif
          cline = {@cline, line[1..cutoff - 1]};
          line = (nospace ? " " | "") + line[cutoff..$];
          endwhile
          return {@cline, line};
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>linelen</NAME>
        <CODE>
          return abs(this.linelen);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@more</NAME>
        <CODE>
          if (player != this)
          "... somebody's being sneaky...";
          "... Can't do set_task_perms(player) since we need to be `this'...";
          "... to notify and `this.owner' to change +c properties...";
          return;
          elseif (!(lbuf = this.linebuffer))
          this.linesleft = this.pagelen - 2;
          notify(this, "*** No more ***");
          elseif (index("flush", dobjstr || "x") == 1)
          this.linesleft = this.pagelen - 2;
          notify(this, tostr("*** Flushed ***  ", length(lbuf), " lines"));
          this.linebuffer = {};
          elseif ((index("rest", dobjstr || "x") == 1) || (!this.pagelen))
          this.linesleft = this.pagelen - 2;
          for l in (lbuf)
          notify(this, l);
          endfor
          this.linebuffer = {};
          else
          howmany = min(this.pagelen - 2, llen = length(lbuf = this.linebuffer));
          for l in (lbuf[1..howmany])
          notify(this, l);
          endfor
          this.linesleft = (this.pagelen - 2) - howmany;
          this.linebuffer = lbuf[howmany + 1..llen];
          if (howmany &lt; llen)
          notify(this, strsub(this.more_msg, "%n", tostr(llen - howmany)));
          this.linetask[1] = task_id();
          endif
          endif
          this.linetask[2] = task_id();
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d r" DOBJ="none" PREP="any" IOBJ="none">
        <NAME>@wrap</NAME>
        <CODE>
          if (player != this)
          "... someone is being sneaky...";
          "... Can't do set_task_perms(player) since we need to be `this'...";
          "... to notify and `this.owner' to change +c properties...";
          return;
          endif
          linelen = player.linelen;
          if (!(prepstr in {"on", "off"}))
          player:notify("Usage:  @wrap on|off");
          player:notify(tostr("Word wrap is currently ", (linelen &gt; 0) ? "on" | "off", "."));
          return;
          endif
          player.linelen = abs(linelen) * ((prepstr == "on") ? 1 | -1);
          player:notify(tostr("Word wrap is now ", prepstr, "."));
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@linelen*gth</NAME>
        <CODE>
          if (callers() ? (caller != this) &amp;&amp; (!$perm_utils:controls(caller_perms(), this)) | (player != this))
          "... somebody is being sneaky ...";
          return;
          endif
          curlen = player.linelen;
          wrap = curlen &gt; 0;
          wrapstr = wrap ? "on" | "off";
          if (!dobjstr)
          player:notify(tostr("Usage:  ", verb, " &lt;number&gt;"));
          player:notify(tostr("Current line length is ", abs(curlen), ".  Word wrapping is ", wrapstr, "."));
          return;
          endif
          newlen = toint(dobjstr);
          if (newlen &lt; 0)
          player:notify("Line length can't be a negative number.");
          return;
          elseif (newlen &lt; 10)
          player:notify("You don't want your linelength that small.  Setting it to 10.");
          newlen = 10;
          endif
          this:set_linelength(newlen);
          player:notify(tostr("Line length is now ", abs(player.linelen), ".  Word wrapping is ", wrapstr, "."));
          if (!wrap)
          player:notify("To enable word wrapping, type `@wrap on'.");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@pagelen*gth</NAME>
        <CODE>
          "@pagelength number  -- sets page buffering to that many lines (or 0 to turn off page buffering)";
          if (player != this)
          "... somebody is being sneaky ...";
          "... Can't do set_task_perms(player) since we need to be `this'...";
          "... to notify and `this.owner' to change +c properties...";
          return;
          elseif (!dobjstr)
          notify(player, tostr("Usage:  ", verb, " &lt;number&gt;"));
          notify(player, tostr("Current page length is ", player.pagelen, "."));
          return;
          elseif (0 &gt; (newlen = toint(dobjstr)))
          notify(player, "Page length can't be a negative number.");
          return;
          elseif (newlen == 0)
          player.pagelen = 0;
          notify(player, "Page buffering off.");
          if (lb = this.linebuffer)
          "queued text remains";
          this:notify_lines(lb);
          clear_property(this, "linebuffer");
          endif
          elseif (newlen &lt; 5)
          player.pagelen = 5;
          notify(player, "Too small.  Setting it to 5.");
          else
          notify(player, tostr("Page length is now ", player.pagelen = newlen, "."));
          endif
          if (this.linebuffer)
          notify(this, strsub(this.more_msg, "%n", tostr(length(this.linebuffer))));
          player.linetask = {task_id(), task_id()};
          player.linesleft = 0;
          else
          player.linetask = {0, task_id()};
          player.linesleft = player.pagelen - 2;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>tell</NAME>
        <CODE>
          if (this.gaglist || this.paranoid)
          "Check the above first, default case, to save ticks.  Paranoid gaggers are cost an extra three or so ticks by this, probably a net savings.";
          if (this:gag_p())
          return;
          endif
          if (this.paranoid == 1)
          $paranoid_db:add_data(this, {{@callers(1), {player, "&lt;cmd-line&gt;", player}}, args});
          elseif (this.paranoid == 2)
          z = this:whodunnit({@callers(), {player, "", player}}, {this, $no_one}, {})[3];
          args = {"(", z.name, " ", z, ") ", @args};
          endif
          endif
          pass(@args);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>gag_p</NAME>
        <CODE>
          if (player in this.gaglist)
          return 1;
          elseif (gag = this.gaglist)
          for x in (callers())
          if (((x[1] == #-1) &amp;&amp; (x[3] == #-1)) &amp;&amp; (x[2] != ""))
          elseif ((x[1] in gag) || (x[4] in gag))
          return 1;
          endif
          endfor
          endif
          return 0;
          "--- old definition --";
          if (player in this.gaglist)
          return 1;
          elseif (this.gaglist)
          for x in (callers())
          if (valid(x[1]))
          if (x[1] in this.gaglist)
          return 1;
          endif
          endif
          endfor
          endif
          return 0;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>set_gaglist</NAME>
        <CODE>
          ":set_gaglist(@newlist) =&gt; this.gaglist = newlist";
          if (!((caller == this) || $perm_utils:controls(caller_perms(), this)))
          return E_PERM;
          else
          return this.gaglist = args;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>@gag*!</NAME>
        <CODE>
          set_task_perms(player);
          if (player != this)
          player:notify("Permission denied.");
          return;
          endif
          if (!args)
          player:notify(tostr("Usage:  ", verb, " &lt;player or object&gt; [&lt;player or object&gt;...]"));
          return;
          endif
          victims = $string_utils:match_player_or_object(@args);
          changed = 0;
          for p in (victims)
          if (p in player.gaglist)
          player:notify(tostr("You are already gagging ", p.name, "."));
          elseif (p == player)
          player:notify("Gagging yourself is a bad idea.");
          elseif (children(p) &amp;&amp; (verb != "@gag!"))
          player:tell("If you really want to gag all descendents of ", $string_utils:nn(p), ", use `@gag! ", p, "' instead.");
          else
          changed = 1;
          player:set_gaglist(@setadd(this.gaglist, p));
          endif
          endfor
          if (changed)
          this:("@listgag")();
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@listgag @gaglist @gagged</NAME>
        <CODE>
          set_task_perms(valid(caller_perms()) ? caller_perms() | player);
          if (!this.gaglist)
          player:notify(tostr("You are ", callers() ? "no longer gagging anything." | "not gagging anything right now."));
          else
          player:notify(tostr("You are ", callers() ? "now" | "currently", " gagging ", $string_utils:english_list($list_utils:map_arg(2, $string_utils, "pronoun_sub", "%n (%#)", this.gaglist)), "."));
          endif
          gl = {};
          if (args)
          player:notify("Searching for players who may be gagging you...");
          for p in (players())
          if ((typeof(`p.gaglist ! E_PERM') == LIST) &amp;&amp; (this in p.gaglist))
          gl = {@gl, p};
          endif
          $command_utils:suspend_if_needed(10, "...searching gaglist...");
          endfor
          if (gl || (!callers()))
          player:notify(tostr($string_utils:english_list($list_utils:map_arg(2, $string_utils, "pronoun_sub", "%n (%#)", gl), "No one"), " appear", (length(gl) &lt;= 1) ? "s" | "", " to be gagging you."));
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@ungag</NAME>
        <CODE>
          if ((player != this) || ((caller != this) &amp;&amp; (!$perm_utils:controls(caller_perms(), this))))
          player:notify("Permission denied.");
          elseif (dobjstr == "")
          player:notify(tostr("Usage:  ", verb, " &lt;player&gt;  or  ", verb, " everyone"));
          elseif (dobjstr == "everyone")
          this.gaglist = {};
          player:notify("You are no longer gagging anyone or anything.");
          else
          if (valid(dobj))
          match = dobj;
          elseif ((match = toobj(dobjstr)) &gt; #0)
          else
          match = $string_utils:match(dobjstr, this.gaglist, "name", this.gaglist, "aliases");
          endif
          if (match == $failed_match)
          player:notify(tostr("You don't seem to be gagging anything named ", dobjstr, "."));
          elseif (match == $ambiguous_match)
          player:notify(tostr("I don't know which \"", dobjstr, "\" you mean."));
          else
          this.gaglist = setremove(this.gaglist, match);
          player:notify(tostr(valid(match) ? match.name | match, " removed from gag list."));
          endif
          this:("@listgag")();
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>whodunnit</NAME>
        <CODE>
          {record, trust, mistrust} = args;
          s = {this, "???", this};
          for w in (record)
          if (((((!valid(s[3])) || s[3].wizard) || (s[3] in trust)) &amp;&amp; (!(s[3] in mistrust))) || (s[1] == this))
          s = w;
          else
          return s;
          endif
          endfor
          return s;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>@ch*eck-full</NAME>
        <CODE>
          responsible = $paranoid_db:get_data(this);
          if (length(verb) &lt;= 6)
          "@check, not @check-full";
          n = 5;
          trust = {this, $no_one};
          "... trust no one, my friend.... no one....  --Herod";
          mistrust = {};
          for k in (args)
          if (z = $code_utils:toint(k))
          n = z;
          elseif (k[1] == "!")
          mistrust = listappend(mistrust, $string_utils:match_player(k[2..$]));
          else
          trust = listappend(trust, $string_utils:match_player(k));
          endif
          endfor
          msg_width = player:linelen() - 60;
          for q in ((n &gt; (y = length(responsible))) ? responsible | responsible[(y - n) + 1..y])
          msg = tostr(@q[2]);
          if (length(msg) &gt; msg_width)
          msg = msg[1..msg_width];
          endif
          s = this:whodunnit(q[1], trust, mistrust);
          text = valid(s[1]) ? s[1].name | "** NONE **";
          this:notify(tostr($string_utils:left(tostr((length(text) &gt; 13) ? text[1..13] | text, " (", s[1], ")"), 20), $string_utils:left(s[2], 15), $string_utils:left(tostr((length(s[3].name) &gt; 13) ? s[3].name[1..13] | s[3].name, " (", s[3], ")"), 20), msg));
          endfor
          this:notify("*** finished ***");
          else
          "@check-full, from @traceback by APHiD";
          "s_i_n's by Ho_Yan 10/18/94";
          matches = {};
          if (length(match = argstr) == 0)
          player:notify(tostr("Usage: ", verb, " &lt;string&gt; --or-- ", verb, " &lt;number&gt;"));
          return;
          endif
          if (!responsible)
          player:notify("No text has been saved by the monitor.  (See `help @paranoid').");
          else
          if (typeof(x = $code_utils:toint(argstr)) == ERR)
          for line in (responsible)
          if (index(tostr(@line[$]), argstr))
          matches = {@matches, line};
          endif
          endfor
          else
          matches = responsible[($ - x) + 1..$];
          endif
          if (matches)
          for match in (matches)
          $command_utils:suspend_if_needed(3);
          text = tostr(@match[$]);
          player:notify("Traceback for:");
          player:notify(text);
          "Moved cool display code to $code_utils, 3/29/95, Ho_Yan";
          $code_utils:display_callers(listdelete(mm = match[1], length(mm)));
          endfor
          player:notify("**** finished ****");
          else
          player:notify(tostr("No matches for \"", argstr, "\" found."));
          endif
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>@paranoid</NAME>
        <CODE>
          if ((args == {}) || ((typ = args[1]) == ""))
          $paranoid_db:set_kept_lines(this, 10);
          this.paranoid = 1;
          this:notify("Anti-spoofer on and keeping 10 lines.");
          elseif (index("immediate", typ))
          $paranoid_db:set_kept_lines(this, 0);
          this.paranoid = 2;
          this:notify("Anti-spoofer now in immediate mode.");
          elseif (index("off", typ) || (typ == "0"))
          this.paranoid = 0;
          $paranoid_db:set_kept_lines(this, 0);
          this:notify("Anti-spoofer off.");
          elseif ((tostr(y = toint(typ)) != typ) || (y &lt; 0))
          this:notify(tostr("Usage: ", verb, " &lt;lines to be kept&gt;     to turn on your anti-spoofer."));
          this:notify(tostr("       ", verb, " off                    to turn it off."));
          this:notify(tostr("       ", verb, " immediate              to use immediate mode."));
          else
          this.paranoid = 1;
          $paranoid_db:set_kept_lines(this, y = min(y, 30));
          this:notify(tostr("Anti-spoofer on and keeping ", y, " lines."));
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
        <NAME>@sw*eep</NAME>
        <CODE>
          buggers = 1;
          found_listener = 0;
          here = this.location;
          for thing in (setremove(here.contents, this))
          tellwhere = $object_utils:has_verb(thing, "tell");
          notifywhere = $object_utils:has_verb(thing, "notify");
          if (thing in connected_players())
          this:notify(tostr(thing.name, " (", thing, ") is listening."));
          found_listener = 1;
          elseif ($object_utils:has_callable_verb(thing, "sweep_msg") &amp;&amp; (typeof(msg = thing:sweep_msg()) == STR))
          this:notify(tostr(thing.name, " (", thing, ") ", msg, "."));
          found_listener = 1;
          elseif (tellwhere &amp;&amp; (((owner = verb_info(tellwhere[1], "tell")[1]) != this) &amp;&amp; (!owner.wizard)))
          this:notify(tostr(thing.name, " (", thing, ") has been taught to listen by ", owner.name, " (", owner, ")"));
          found_listener = 1;
          elseif (notifywhere &amp;&amp; (((owner = verb_info(notifywhere[1], "notify")[1]) != this) &amp;&amp; (!owner.wizard)))
          this:notify(tostr(thing.name, " (", thing, ") has been taught to listen by ", owner.name, " (", owner, ")"));
          found_listener = 1;
          endif
          endfor
          buggers = {};
          for v in ({"announce", "announce_all", "announce_all_but", "say", "emote", "huh", "here_huh", "huh2", "whisper", "here_explain_syntax"})
          vwhere = $object_utils:has_verb(here, v);
          if (vwhere &amp;&amp; (((owner = verb_info(vwhere[1], v)[1]) != this) &amp;&amp; (!owner.wizard)))
          buggers = setadd(buggers, owner);
          endif
          endfor
          if (buggers != {})
          if ($object_utils:has_verb(here, "sweep_msg") &amp;&amp; (typeof(msg = here:sweep_msg()) == STR))
          this:notify(tostr(here.name, " (", here, ") ", msg, "."));
          else
          this:notify(tostr(here.name, " (", here, ") may have been bugged by ", $string_utils:english_list($list_utils:map_prop(buggers, "name")), "."));
          endif
          elseif (!found_listener)
          this:notify("Communications look secure.");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="at/to" IOBJ="this">
        <NAME>wh*isper</NAME>
        <CODE>
          this:tell(player.name, " whispers, \"", dobjstr, "\"");
          player:tell("You whisper, \"", dobjstr, "\" to ", this.name, ".");
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>page</NAME>
        <CODE>
          nargs = length(args);
          if (nargs &lt; 1)
          player:notify(tostr("Usage: ", verb, " &lt;player&gt; [with &lt;message&gt;]"));
          return;
          endif
          who = $string_utils:match_player(args[1]);
          if ($command_utils:player_match_result(who, args[1])[1])
          return;
          elseif (who in this.gaglist)
          player:tell("You have ", who:title(), " @gagged.  If you paged ", $gender_utils:get_pronoun("o", who), ", ", $gender_utils:get_pronoun("s", who), " wouldn't be able to answer you.");
          return;
          endif
          "for pronoun_sub's benefit...";
          dobj = who;
          iobj = player;
          header = player:page_origin_msg();
          text = "";
          if (nargs &gt; 1)
          if ((args[2] == "with") &amp;&amp; (nargs &gt; 2))
          msg_start = 3;
          else
          msg_start = 2;
          endif
          msg = $string_utils:from_list(args[msg_start..nargs], " ");
          text = tostr($string_utils:pronoun_sub(($string_utils:index_delimited(header, player.name) ? "%S" | "%N") + " %&lt;pages&gt;, \""), msg, "\"");
          endif
          result = text ? who:receive_page(header, text) | who:receive_page(header);
          if (result == 2)
          "not connected";
          player:tell((typeof(msg = who:page_absent_msg()) == STR) ? msg | $string_utils:pronoun_sub("%n is not currently logged in.", who));
          else
          player:tell(who:page_echo_msg());
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>receive_page</NAME>
        <CODE>
          "called by $player:page.  Two args, the page header and the text, all pre-processed by the page command.  Could be extended to provide haven abilities, multiline pages, etc.  Indeed, at the moment it just does :tell_lines, so we already do have multiline pages, if someone wants to take advantage of it.";
          "Return codes:";
          "  1:  page was received";
          "  2:  player is not connected";
          "  0:  page refused";
          "If a specialization wants to refuse a page, it should return 0 to say it was refused.  If it uses pass(@args) it should propagate back up the return value.  It is possible that this code should interact with gagging and return 0 if the page was gagged.";
          if (this:is_listening())
          this:tell_lines_suspended(args);
          return 1;
          else
          return 2;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>page_origin_msg page_echo_msg page_absent_msg</NAME>
        <CODE>
          "set_task_perms(this.owner)";
          return (msg = `this.(verb) ! ANY') ? $string_utils:pronoun_sub(this.(verb), this) | "";
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
        <NAME>i inv*entory</NAME>
        <CODE>
          if (c = player:contents())
          this:tell_contents(c);
          else
          player:tell("You are empty-handed.");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>look_self</NAME>
        <CODE>
          player:tell(this:titlec());
          pass();
          if (!(this in connected_players()))
          player:tell($gender_utils:pronoun_sub("%{:He} %{!is} sleeping.", this));
          elseif ((idle = idle_seconds(this)) &lt; 60)
          player:tell($gender_utils:pronoun_sub("%{:He} %{!is} awake and %{!looks} alert.", this));
          else
          time = $string_utils:from_seconds(idle);
          player:tell($gender_utils:pronoun_sub("%{:He} %{!is} awake, but %{!has} been staring off into space for ", this), time, ".");
          endif
          if (c = this:contents())
          this:tell_contents(c);
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
        <NAME>home</NAME>
        <CODE>
          start = this.location;
          if (start == this.home)
          player:tell("You're already home!");
          return;
          elseif (typeof(this.home) != OBJ)
          player:tell("You've got a weird home, pal.  I've reset it to the default one.");
          this.home = $player_start;
          elseif (!valid(this.home))
          player:tell("Oh no!  Your home's been recycled.  Time to look around for a new one.");
          this.home = $player_start;
          else
          player:tell("You click your heels three times.");
          endif
          this:moveto(this.home);
          if (!valid(start))
          elseif (start == this.location)
          start:announce(player.name, " ", $gender_utils:get_conj("learns", player), " that you can never go home...");
          else
          try
          start:announce(player.name, " ", $gender_utils:get_conj("goes", player), " home.");
          except e (E_VERBNF)
          "start did not support announce";
          endtry
          endif
          if (this.location == this.home)
          this.location:announce(player.name, " ", $gender_utils:get_conj("comes", player), " home.");
          elseif (this.location == start)
          player:tell("Either home doesn't want you, or you don't really want to go.");
          else
          player:tell("Wait a minute!  This isn't your home...");
          if (valid(this.location))
          this.location:announce(player.name, " ", $gender_utils:get_conj("arrives", player), ", looking quite bewildered.");
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
        <NAME>@sethome</NAME>
        <CODE>
          set_task_perms(this);
          here = this.location;
          if (!$object_utils:has_callable_verb(here, "accept_for_abode"))
          player:notify("This is a pretty odd place.  You should make your home in an actual room.");
          elseif (here:accept_for_abode(this))
          this.home = here;
          player:notify(tostr(here.name, " is your new home."));
          else
          player:notify(tostr("This place doesn't want to be your home.  Contact ", here.owner.name, " to be added to the residents list of this place, or choose another place as your home."));
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="none">
        <NAME>g*et take</NAME>
        <CODE>
          player:tell("This is not a pick-up joint!");
          this:tell(player.name, " tried to pick you up.");
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="at/to" IOBJ="any">
        <NAME>@move @teleport</NAME>
        <CODE>
          "'@move &lt;object&gt; to &lt;place&gt;' - Teleport an object. Example: '@move trash to #11' to move trash to the closet.";
          set_task_perms((caller == this) ? this | $no_one);
          dobj = this:my_match_object(dobjstr);
          iobj = this:my_match_object(iobjstr);
          if ($command_utils:object_match_failed(dobj, dobjstr) || ((iobj != $nothing) &amp;&amp; $command_utils:object_match_failed(iobj, iobjstr)))
          return;
          endif
          if ((!$perm_utils:controls(this, dobj)) &amp;&amp; (this != dobj))
          player:tell("You may only @move your own things.");
          return;
          endif
          old_loc = dobj.location;
          if (old_loc == iobj)
          player:tell(dobj.name, " is already ", valid(iobj) ? "in " + iobj.name | "nowhere", ".");
          return;
          endif
          dobj:moveto(iobj);
          if (dobj.location == iobj)
          player:tell("Moved.");
          if (is_player(dobj))
          if (valid(old_loc))
          old_loc:announce_all(dobj.name, " disappears suddenly for parts unknown.");
          if (dobj != player)
          dobj:tell("You have been moved by ", player.name, ".");
          endif
          endif
          if (valid(dobj.location))
          dobj.location:announce(dobj.name, " materializes out of thin air.");
          endif
          endif
          elseif (dobj.location == old_loc)
          if ($object_utils:contains(dobj, iobj))
          player:tell(iobj.name, " is inside of ", dobj.name, "!");
          else
          player:tell($string_utils:pronoun_sub("Either %d doesn't want to go, or %i doesn't want to accept %[dpo]."));
          endif
          elseif (dobj == player)
          player:tell("You have been deflected from your original destination.");
          else
          player:tell($string_utils:pronoun_sub("%D has been deflected from %[dpp] original destination."));
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="out of/from inside/from" IOBJ="any">
        <NAME>@eject @eject! @eject!!</NAME>
        <CODE>
          set_task_perms(player);
          if (iobjstr == "here")
          iobj = player.location;
          elseif (iobjstr == "me")
          iobj = player;
          elseif ($command_utils:object_match_failed(iobj, iobjstr))
          return;
          endif
          if (!$perm_utils:controls(player, iobj))
          player:notify(tostr("You are not the owner of ", iobj.name, "."));
          return;
          endif
          if (dobjstr == "me")
          dobj = player;
          elseif (($failed_match == (dobj = $string_utils:literal_object(dobjstr))) &amp;&amp; $command_utils:object_match_failed(dobj = iobj:match(dobjstr), dobjstr))
          return;
          endif
          if (dobj.location != iobj)
          player:notify(tostr(dobj.name, "(", dobj, ") is not in ", iobj.name, "(", iobj, ")."));
          return;
          endif
          if (dobj.wizard)
          player:notify(tostr("Sorry, you can't ", verb, " a wizard."));
          dobj:tell(player.name, " tried to ", verb, " you.");
          return;
          endif
          iobj:((verb == "@eject") ? "eject" | "eject_basic")(dobj);
          player:notify($object_utils:has_callable_verb(iobj, "ejection_msg") ? iobj:ejection_msg() | $room:ejection_msg());
          if (verb != "@eject!!")
          dobj:tell($object_utils:has_callable_verb(iobj, "victim_ejection_msg") ? iobj:victim_ejection_msg() | $room:victim_ejection_msg());
          endif
          iobj:announce_all_but({player, dobj}, $object_utils:has_callable_verb(iobj, "oejection_msg") ? iobj:oejection_msg() | $room:oejection_msg());
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>where*is @where*is</NAME>
        <CODE>
          if (!args)
          them = connected_players();
          else
          who = $command_utils:player_match_result($string_utils:match_player(args), args);
          if (length(who) &lt;= 1)
          if (!who[1])
          player:notify("Where is who?");
          endif
          return;
          elseif (who[1])
          player:notify("");
          endif
          them = listdelete(who, 1);
          endif
          lmax = rmax = 0;
          for p in (them)
          player:notify(tostr($string_utils:left($string_utils:nn(p), 25), " ", $string_utils:nn(p.location)));
          endfor
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>@who</NAME>
        <CODE>
          if (caller != player)
          return E_PERM;
          endif
          plyrs = args ? listdelete($command_utils:player_match_result($string_utils:match_player(args), args), 1) | connected_players();
          if (!plyrs)
          return;
          elseif (length(plyrs) &gt; 100)
          player:tell("You have requested a listing of ", length(plyrs), " players.  Please either specify individual players you are interested in, to reduce the number of players in any single request, or else use the `@users' command instead.  The lag thanks you.");
          return;
          endif
          $code_utils:show_who_listing(plyrs);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@wizards</NAME>
        <CODE>
          "@wizards [all]";
          if (caller != player)
          return E_PERM;
          endif
          if (args)
          $code_utils:show_who_listing($wiz_utils:all_wizards());
          else
          $code_utils:show_who_listing($wiz_utils:connected_wizards()) || player:notify("No wizards currently logged in.");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>?* help info*rmation @help</NAME>
        <CODE>
          set_task_perms(callers() ? caller_perms() | player);
          "...this code explicitly relies on being !d in several places...";
          if ((index(verb, "?") != 1) || (length(verb) &lt;= 1))
          what = $string_utils:trimr(argstr);
          elseif (argstr)
          what = tostr(verb[2..$], " ", $string_utils:trimr(argstr));
          else
          what = verb[2..$];
          endif
          "...find a db that claims to know about `what'...";
          dblist = $code_utils:help_db_list();
          result = $code_utils:help_db_search(what, dblist);
          if (!result)
          "... note: all of the last-resort stuff...";
          "... is now located on $help:find_topics/get_topic...";
          $wiz_utils:missed_help(what, result);
          player:notify(tostr("Sorry, but no help is available on `", what, "'."));
          elseif (result[1] == $ambiguous_match)
          $wiz_utils:missed_help(what, result);
          player:notify_lines(tostr("Sorry, but the topic-name `", what, "' is ambiguous.  I don't know which of the following topics you mean:"));
          for x in ($help:columnize(@$help:sort_topics(result[2])))
          player:notify(tostr("   ", x));
          endfor
          else
          {help, topic} = result;
          if (topic != what)
          player:notify(tostr("Showing help on `", topic, "':"));
          player:notify("----");
          endif
          dblist = dblist[1 + (help in dblist)..$];
          if (1 == (text = help:get_topic(topic, dblist)))
          "...get_topic took matters into its own hands...";
          elseif (text)
          "...these can get long...";
          for line in ((typeof(text) == LIST) ? text | {text})
          if (typeof(line) != STR)
          player:notify("Odd results from help -- complain to a wizard.");
          else
          player:notify(line);
          endif
          $command_utils:suspend_if_needed(0);
          endfor
          else
          player:notify(tostr("Help DB ", help, " thinks it knows about `", what, "' but something's messed up."));
          player:notify(tostr("Tell ", help.owner.wizard ? "" | tostr(help.owner.name, " (", help.owner, ") or "), "a wizard."));
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>display_option</NAME>
        <CODE>
          ":display_option(name) =&gt; returns the value of the specified @display option";
          if ((caller == this) || $perm_utils:controls(caller_perms(), this))
          return $display_options:get(this.display_options, args[1]);
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>edit_option</NAME>
        <CODE>
          ":edit_option(name) =&gt; returns the value of the specified edit option";
          if ((caller == this) || ($object_utils:isa(caller, $generic_editor) || $perm_utils:controls(caller_perms(), this)))
          return $edit_options:get(this.edit_options, args[1]);
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>set_mail_option set_edit_option set_display_option</NAME>
        <CODE>
          ":set_edit_option(oname,value)";
          ":set_display_option(oname,value)";
          ":set_mail_option(oname,value)";
          "Changes the value of the named option.";
          "Returns a string error if something goes wrong.";
          if (!((caller == this) || $perm_utils:controls(caller_perms(), this)))
          return tostr(E_PERM);
          endif
          "...this is kludgy, but it saves me from writing the same verb 3 times.";
          "...there's got to be a better way to do this...";
          verb[1..4] = "";
          foo_options = verb + "s";
          "...";
          if (typeof(s = #0.(foo_options):set(this.(foo_options), @args)) == STR)
          return s;
          elseif (s == this.(foo_options))
          return 0;
          else
          this.(foo_options) = s;
          return 1;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>@mailo*ptions @mail-o*ptions @edito*ptions @edit-o*ptions @displayo*ptions @display-o*ptions</NAME>
        <CODE>
          "@&lt;what&gt;-option &lt;option&gt; [is] &lt;value&gt;   sets &lt;option&gt; to &lt;value&gt;";
          "@&lt;what&gt;-option &lt;option&gt;=&lt;value&gt;        sets &lt;option&gt; to &lt;value&gt;";
          "@&lt;what&gt;-option +&lt;option&gt;     sets &lt;option&gt;   (usually equiv. to &lt;option&gt;=1";
          "@&lt;what&gt;-option -&lt;option&gt;     resets &lt;option&gt; (equiv. to &lt;option&gt;=0)";
          "@&lt;what&gt;-option !&lt;option&gt;     resets &lt;option&gt; (equiv. to &lt;option&gt;=0)";
          "@&lt;what&gt;-option &lt;option&gt;      displays value of &lt;option&gt;";
          set_task_perms(player);
          what = {"mail", "edit", "display"}[index("med", verb[2])];
          options = what + "_options";
          option_pkg = #0.(options);
          set_option = ("set_" + what) + "_option";
          if (!args)
          player:notify_lines({("Current " + what) + " options:", "", @option_pkg:show(this.(options), option_pkg.names)});
          return;
          elseif (typeof(presult = option_pkg:parse(args)) == STR)
          player:notify(presult);
          return;
          else
          if (length(presult) &gt; 1)
          if (typeof(sresult = this:(set_option)(@presult)) == STR)
          player:notify(sresult);
          return;
          elseif (!sresult)
          player:notify("No change.");
          return;
          endif
          endif
          player:notify_lines(option_pkg:show(this.(options), presult[1]));
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>set_name</NAME>
        <CODE>
          "set_name(newname) attempts to change this.name to newname";
          "  =&gt; E_PERM   if you don't own this";
          "  =&gt; E_INVARG if the name is already taken or prohibited for some reason";
          "  =&gt; E_NACC   if the player database is not taking new names right now.";
          "  =&gt; E_ARGS   if the name is too long (controlled by $login.max_player_name)";
          if (!($perm_utils:controls(caller_perms(), this) || (this == caller)))
          return E_PERM;
          elseif (!is_player(this))
          "we don't worry about the names of player classes.";
          set_task_perms(caller_perms());
          return pass(@args);
          elseif ($player_db.frozen)
          return E_NACC;
          elseif (length(name = args[1]) &gt; $login.max_player_name)
          return E_ARGS;
          elseif (!($player_db:available(name, this) in {this, 1}))
          return E_INVARG;
          else
          old = this.name;
          this.name = name;
          if ((name != old) &amp;&amp; (!(old in this.aliases)))
          $player_db:delete(old);
          endif
          $player_db:insert(name, this);
          return 1;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>set_aliases</NAME>
        <CODE>
          "set_aliases(alias_list)";
          "For changing player aliases, we check to make sure that none of the aliases match existing player names/aliases.  Aliases containing spaces are not entered in the $player_db and so are not subject to this restriction ($string_utils:match_player will not match on them, however, so they only match if used in the immediate room, e.g., with match_object() or somesuch).";
          "Also we make sure that the .name is included in the .alias list.  In any situation where .name and .aliases are both being changed, do the name change first.";
          "  =&gt; 1        if successful, and aliases changed from previous setting.";
          "  =&gt; 0        if resulting work didn't change aliases from previous.";
          "  =&gt; E_PERM   if you don't own this";
          "  =&gt; E_NACC   if the player database is not taking new aliases right now.";
          "  =&gt; E_TYPE   if alias_list is not a list";
          "  =&gt; E_INVARG if any element of alias_list is not a string";
          if (!($perm_utils:controls(caller_perms(), this) || (this == caller)))
          return E_PERM;
          elseif (!is_player(this))
          "we don't worry about the names of player classes.";
          return pass(@args);
          elseif ($player_db.frozen)
          return E_NACC;
          elseif (typeof(aliases = args[1]) != LIST)
          return E_TYPE;
          elseif ((length(aliases = setadd(aliases, this.name)) &gt; ($object_utils:has_property($local, "max_player_aliases") ? $local.max_player_aliases | $maxint)) &amp;&amp; (length(aliases) &gt;= length(this.aliases)))
          return E_INVARG;
          else
          for a in (aliases)
          if (typeof(a) != STR)
          return E_INVARG;
          endif
          if ((!(index(a, " ") || index(a, "	"))) &amp;&amp; (!($player_db:available(a, this) in {this, 1})))
          aliases = setremove(aliases, a);
          endif
          endfor
          changed = 0;
          old = this.aliases;
          this.aliases = aliases;
          for a in (old)
          if (!(a in aliases))
          $player_db:delete2(a, this);
          changed = 1;
          endif
          endfor
          for a in (aliases)
          if (!(index(a, " ") || index(a, "	")))
          $player_db:insert(a, this);
          if (!(a in old))
          changed = 1;
          endif
          endif
          endfor
          return changed;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="at/to" IOBJ="any">
        <NAME>@rename*#</NAME>
        <CODE>
          if ((player != caller) || (player != this))
          return;
          endif
          set_task_perms(player);
          bynumber = verb == "@rename#";
          spec = $code_utils:parse_verbref(dobjstr);
          if (spec)
          if (!player.programmer)
          return player:notify(tostr(E_PERM));
          endif
          object = this:my_match_object(spec[1]);
          if (!$command_utils:object_match_failed(object, spec[1]))
          vname = spec[2];
          if (bynumber)
          vname = $code_utils:toint(vname);
          if (vname == E_TYPE)
          return player:notify("Verb number expected.");
          elseif ((vname &lt; 1) || `vname &gt; length(verbs(object)) ! E_PERM =&gt; 0')
          return player:notify("Verb number out of range.");
          endif
          endif
          try
          info = verb_info(object, vname);
          try
          result = set_verb_info(object, vname, listset(info, iobjstr, 3));
          player:notify("Verb name changed.");
          except e (ANY)
          player:notify(e[2]);
          endtry
          except (E_VERBNF)
          player:notify("That object does not define that verb.");
          except e (ANY)
          player:notify(e[2]);
          endtry
          endif
          elseif (bynumber)
          player:notify("@rename# can only be used with verbs.");
          elseif (pspec = $code_utils:parse_propref(dobjstr))
          if (!player.programmer)
          return player:notify(tostr(E_PERM));
          endif
          object = this:my_match_object(pspec[1]);
          if (!$command_utils:object_match_failed(object, pspec[1]))
          pname = pspec[2];
          try
          info = property_info(object, pname);
          try
          result = set_property_info(object, pname, {@info, iobjstr});
          player:notify("Property name changed.");
          except e (ANY)
          player:notify(e[2]);
          endtry
          except (E_PROPNF)
          player:notify("That object does not define that property.");
          except e (ANY)
          player:notify(e[2]);
          endtry
          endif
          else
          object = this:my_match_object(dobjstr);
          if (!$command_utils:object_match_failed(object, dobjstr))
          old_name = object.name;
          old_aliases = object.aliases;
          if (e = $building_utils:set_names(object, iobjstr))
          if (strcmp(object.name, old_name) == 0)
          name_message = tostr("Name of ", object, " (", old_name, ") is unchanged");
          else
          name_message = tostr("Name of ", object, " changed to \"", object.name, "\"");
          endif
          aliases = $string_utils:from_value(object.aliases, 1);
          if (object.aliases == old_aliases)
          alias_message = tostr(".  Aliases are unchanged (", aliases, ").");
          else
          alias_message = tostr(", with aliases ", aliases, ".");
          endif
          player:notify(name_message + alias_message);
          elseif (e == E_INVARG)
          player:notify("That particular name change not allowed (see help @rename).");
          if (object == player)
          player:notify($player_db:why_bad_name(player, iobjstr));
          endif
          elseif (e == E_NACC)
          player:notify("Oops.  You can't update that name right now; try again in a few minutes.");
          elseif (e == E_ARGS)
          player:notify(tostr("Sorry, name too long.  Maximum number of characters in a name:  ", $login.max_player_name));
          elseif (e == 0)
          player:notify("Name and aliases remain unchanged.");
          else
          player:notify(tostr(e));
          endif
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="at/to" IOBJ="any">
        <NAME>@addalias*# @add-alias*#</NAME>
        <CODE>
          "Syntax: @addalias &lt;alias&gt;[,...,&lt;alias&gt;] to &lt;object&gt;";
          "        @addalias &lt;alias&gt;[,...,&lt;alias&gt;] to &lt;object&gt;:&lt;verb&gt;";
          "";
          "The first form is used to add aliases to an object's list of aliases.  You can separate multiple aliases with commas.  The aliases will be checked against the object's current aliases and all aliases not already in the object's list of aliases will be added.";
          "";
          "Example:";
          "Muchkin wants to add new aliases to Rover the Wonder Dog:";
          "  @addalias Dog,Wonder Dog to Rover";
          "Since Rover the Wonder Dog already has the alias \"Dog\" but does not have the alias \"Wonder Dog\", Munchkin sees:";
          "  Rover the Wonder Dog(#4237) already has the alias Dog.";
          "  Alias Wonder Dog added to Rover the Wonder Dog(#4237).";
          "";
          "If the object is a player, spaces will also be assumed to be separations between aliases and each alias will be checked against the Player Name Database to make sure no one else is using it. Any already used aliases will be identified.";
          "";
          "Example:";
          "Munchkin wants to add his nicknames to his own list of aliases:";
          "  @addalias Foobar Davey to me";
          "@Addalias recognizes that Munchkin is trying to add an alias to a valid player and checks the aliases against the Player Name Database.  Unfortunately, DaveTheMan is already using the alias \"Davey\" so Munchkin sees:";
          "  DaveTheMan(#5432) is already using the alias Davey";
          "  Alias Foobar added to Munchkin(#1523).";
          "";
          "The second form of the @addalias command is for use by programmers, to add aliases to a verb they own.  All commas and spaces are assumed to be separations between aliases.";
          if (player != this)
          return;
          endif
          set_task_perms(player);
          bynumber = verb[$] == "#";
          spec = $code_utils:parse_verbref(iobjstr);
          if (spec)
          if (!player.programmer)
          return player:notify(tostr(E_PERM));
          endif
          object = player:my_match_object(spec[1]);
          if (!$command_utils:object_match_failed(object, spec[1]))
          vname = spec[2];
          if (bynumber)
          if ((vname = $code_utils:toint(vname)) == E_TYPE)
          return player:notify("Verb number expected.");
          elseif ((vname &lt; 1) || `vname &gt; length(verbs(object)) ! E_PERM =&gt; 0')
          return player:notify("Verb number out of range.");
          endif
          endif
          try
          info = verb_info(object, vname);
          old_aliases = $string_utils:explode(info[3]);
          used = {};
          for alias in (new_aliases = $list_utils:remove_duplicates($string_utils:explode(strsub(dobjstr, ",", " "))))
          if (alias in old_aliases)
          used = {@used, alias};
          new_aliases = setremove(new_aliases, alias);
          endif
          endfor
          if (used)
          player:notify(tostr(object.name, "(", object, "):", vname, " already has the alias", (length(used) &gt; 1) ? "es" | "", " ", $string_utils:english_list(used), "."));
          endif
          if (new_aliases)
          info = listset(info, aliases = $string_utils:from_list({@old_aliases, @new_aliases}, " "), 3);
          try
          result = set_verb_info(object, vname, info);
          player:notify(tostr("Alias", (length(new_aliases) &gt; 1) ? "es" | "", " ", $string_utils:english_list(new_aliases), " added to verb ", object.name, "(", object, "):", vname));
          player:notify(tostr("Verbname is now ", object.name, "(", object, "):\"", aliases, "\""));
          except e (ANY)
          player:notify(e[2]);
          endtry
          endif
          except (E_VERBNF)
          player:notify("That object does not define that verb.");
          except e (ANY)
          player:notify(e[2]);
          endtry
          endif
          elseif (bynumber)
          player:notify(tostr(verb, " can only be used with verbs."));
          else
          object = player:my_match_object(iobjstr);
          if (!$command_utils:object_match_failed(object, iobjstr))
          old_aliases = object.aliases;
          used = {};
          for alias in (new_aliases = $list_utils:remove_duplicates($list_utils:map_arg($string_utils, "trim", $string_utils:explode(is_player(object) ? strsub(dobjstr, " ", ",") | dobjstr, ","))))
          if (alias in old_aliases)
          used = {@used, alias};
          new_aliases = setremove(new_aliases, alias);
          elseif (is_player(object) &amp;&amp; valid(someone = $player_db:find_exact(alias)))
          player:notify(tostr(someone.name, "(", someone, ") is already using the alias ", alias, "."));
          new_aliases = setremove(new_aliases, alias);
          endif
          endfor
          if (used)
          player:notify(tostr(object.name, "(", object, ") already has the alias", (length(used) &gt; 1) ? "es" | "", " ", $string_utils:english_list(used), "."));
          endif
          if (new_aliases)
          if ((e = object:set_aliases(aliases = {@old_aliases, @new_aliases})) &amp;&amp; (object.aliases == aliases))
          player:notify(tostr("Alias", (length(new_aliases) &gt; 1) ? "es" | "", " ", $string_utils:english_list(new_aliases), " added to ", object.name, "(", object, ")."));
          player:notify(tostr("Aliases for ", $string_utils:nn(object), " are now ", $string_utils:from_value(aliases, 1)));
          elseif (e)
          player:notify("That particular name change not allowed (see help @rename or help @addalias).");
          elseif (e == E_INVARG)
          if ($object_utils:has_property(#0, "local"))
          if ($object_utils:has_property($local, "max_player_aliases"))
          max = $local.max_player_aliases;
          player:notify(("You are not allowed more than " + tostr(max)) + " aliases.");
          endif
          else
          player:notify("You are not allowed any more aliases.");
          endif
          elseif (e == E_NACC)
          player:notify("Oops.  You can't update that object's aliases right now; try again in a few minutes.");
          elseif (e == 0)
          player:notify("Aliases not changed as expected!");
          player:notify(tostr("Aliases for ", $string_utils:nn(object), " are now ", $string_utils:from_value(object.aliases, 1)));
          else
          player:notify(tostr(e));
          endif
          endif
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="out of/from inside/from" IOBJ="any">
        <NAME>@rmalias*# @rm-alias*#</NAME>
        <CODE>
          "Syntax: @rmalias &lt;alias&gt;[,...,&lt;alias&gt;] from &lt;object&gt;";
          "        @rmalias &lt;alias&gt;[,...,&lt;alias&gt;] from &lt;object&gt;:&lt;verb&gt;";
          "";
          "The first form is used to remove aliases from an object.  If the object is a valid player, space and commas will be assumed to be separations between unwanted aliases.  Otherwise, only commas will be assumed to be separations.";
          "[5/10/93 Nosredna: flushed above is_player feature";
          "Note that @rmalias will not affect the object's name, only its aliases.";
          "";
          "The second form is for use by programmers, to remove aliases from a verb they own.  All spaces and commas are assumed to be separations between unwanted aliases.";
          if (player != this)
          return;
          endif
          set_task_perms(player);
          bynumber = verb[$] == "#";
          spec = $code_utils:parse_verbref(iobjstr);
          if (spec)
          if (!player.programmer)
          player:notify(tostr(E_PERM));
          endif
          object = player:my_match_object(spec[1]);
          if (!$command_utils:object_match_failed(object, spec[1]))
          vname = spec[2];
          if (bynumber)
          if ((vname = $code_utils:toint(vname)) == E_TYPE)
          return player:notify("Verb number expected.");
          elseif ((vname &lt; 1) || `vname &gt; length(verbs(object)) ! E_PERM =&gt; 0')
          return player:notify("Verb number out of range.");
          endif
          endif
          try
          info = verb_info(object, vname);
          old_aliases = $string_utils:explode(info[3]);
          not_used = {};
          for alias in (bad_aliases = $list_utils:remove_duplicates($string_utils:explode(strsub(dobjstr, ",", " "))))
          if (!(alias in old_aliases))
          not_used = {@not_used, alias};
          bad_aliases = setremove(bad_aliases, alias);
          else
          old_aliases = setremove(old_aliases, alias);
          endif
          endfor
          if (not_used)
          player:notify(tostr(object.name, "(", object, "):", vname, " does not have the alias", (length(not_used) &gt; 1) ? "es" | "", " ", $string_utils:english_list(not_used), "."));
          endif
          if (bad_aliases &amp;&amp; old_aliases)
          info = listset(info, aliases = $string_utils:from_list(old_aliases, " "), 3);
          try
          result = set_verb_info(object, vname, info);
          player:notify(tostr("Alias", (length(bad_aliases) &gt; 1) ? "es" | "", " ", $string_utils:english_list(bad_aliases), " removed from verb ", object.name, "(", object, "):", vname));
          player:notify(tostr("Verbname is now ", object.name, "(", object, "):\"", aliases, "\""));
          except e (ANY)
          player:notify(e[2]);
          endtry
          elseif (!old_aliases)
          player:notify("You have to leave a verb with at least one alias.");
          endif
          except (E_VERBNF)
          player:notify("That object does not define that verb.");
          except e (ANY)
          player:notify(e[2]);
          endtry
          endif
          elseif (bynumber)
          player:notify(tostr(verb, " can only be used with verbs."));
          else
          object = player:my_match_object(iobjstr);
          if (!$command_utils:object_match_failed(object, iobjstr))
          old_aliases = object.aliases;
          not_used = {};
          for alias in (bad_aliases = $list_utils:remove_duplicates($list_utils:map_arg($string_utils, "trim", $string_utils:explode(dobjstr, ","))))
          "removed is_player(object) ? strsub(dobjstr, \" \", \",\") | --Nosredna";
          if (!(alias in old_aliases))
          not_used = {@not_used, alias};
          bad_aliases = setremove(bad_aliases, alias);
          else
          old_aliases = setremove(old_aliases, alias);
          endif
          endfor
          if (not_used)
          player:notify(tostr(object.name, "(", object, ") does not have the alias", (length(not_used) &gt; 1) ? "es" | "", " ", $string_utils:english_list(not_used), "."));
          endif
          if (bad_aliases)
          if (e = object:set_aliases(old_aliases))
          player:notify(tostr("Alias", (length(bad_aliases) &gt; 1) ? "es" | "", " ", $string_utils:english_list(bad_aliases), " removed from ", object.name, "(", object, ")."));
          player:notify(tostr("Aliases for ", object.name, "(", object, ") are now ", $string_utils:from_value(old_aliases, 1)));
          elseif (e == E_INVARG)
          player:notify("That particular name change not allowed (see help @rename or help @rmalias).");
          elseif (e == E_NACC)
          player:notify("Oops.  You can't update that object's aliases right now; try again in a few minutes.");
          elseif (e == 0)
          player:notify("Aliases not changed as expected!");
          player:notify(tostr("Aliases for ", $string_utils:nn(object), " are ", $string_utils:from_value(object.aliases, 1)));
          else
          player:notify(tostr(e));
          endif
          endif
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="as" IOBJ="any">
        <NAME>@desc*ribe</NAME>
        <CODE>
          set_task_perms(player);
          dobj = player:my_match_object(dobjstr);
          if ($command_utils:object_match_failed(dobj, dobjstr))
          "...lose...";
          elseif (e = dobj:set_description(iobjstr))
          player:notify("Description set.");
          else
          player:notify(tostr(e));
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@mess*ages</NAME>
        <CODE>
          set_task_perms(player);
          if (dobjstr == "")
          player:notify(tostr("Usage:  ", verb, " &lt;object&gt;"));
          return;
          endif
          dobj = player:my_match_object(dobjstr);
          if ($command_utils:object_match_failed(dobj, dobjstr))
          return;
          endif
          found_one = 0;
          props = $object_utils:all_properties(dobj);
          if (typeof(props) == ERR)
          player:notify("You can't read the messages on that.");
          return;
          endif
          for pname in (props)
          len = length(pname);
          if ((len &gt; 4) &amp;&amp; (pname[len - 3..len] == "_msg"))
          found_one = 1;
          msg = `dobj.(pname) ! ANY';
          if (msg == E_PERM)
          value = "isn't readable by you.";
          elseif (!msg)
          value = "isn't set.";
          elseif (typeof(msg) == LIST)
          value = "is a list.";
          elseif (typeof(msg) != STR)
          value = "is corrupted! **";
          else
          value = "is " + $string_utils:print(msg);
          endif
          player:notify(tostr("@", pname[1..len - 4], " ", dobjstr, " ", value));
          endif
          endfor
          if (!found_one)
          player:notify("That object doesn't have any messages to set.");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@notedit</NAME>
        <CODE>
          $note_editor:invoke(dobjstr, verb);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@last-c*onnection</NAME>
        <CODE>
          "@last-c           reports when and from where you last connected.";
          "@last-c all       adds the 10 most recent places you connected from.";
          "@last-c confunc   is like `@last-c' but is silent on first login.";
          opts = {"all", "confunc"};
          i = 0;
          if (caller != this)
          return E_PERM;
          elseif (args &amp;&amp; ((length(args) &gt; 1) || (!(i = $string_utils:find_prefix(args[1], opts)))))
          this:notify(tostr("Usage:  ", verb, " [all]"));
          return;
          endif
          opt_all = i &amp;&amp; (opts[i] == "all");
          opt_confunc = i &amp;&amp; (opts[i] == "confunc");
          if (!(prev = this.previous_connection))
          this:notify("Something was broken when you logged in; tell a wizard.");
          elseif (prev[1] == 0)
          opt_confunc || this:notify("Your previous connection was before we started keeping track.");
          elseif (prev[1] &gt; time())
          this:notify("This is your first time connected.");
          else
          this:notify(tostr("Last connected ", this:ctime(prev[1]), " from ", prev[2]));
          if (opt_all)
          this:notify("Previous connections have been from the following sites:");
          for l in (this.all_connect_places)
          this:notify("   " + l);
          endfor
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>set_gender</NAME>
        <CODE>
          "set_gender(newgender) attempts to change this.gender to newgender";
          "  =&gt; E_PERM   if you don't own this or aren't its parent";
          "  =&gt; Other return values as from $gender_utils:set.";
          if (!($perm_utils:controls(caller_perms(), this) || (this == caller)))
          return E_PERM;
          else
          result = $gender_utils:set(this, args[1]);
          this.gender = (typeof(result) == STR) ? result | args[1];
          return result;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@gender</NAME>
        <CODE>
          set_task_perms(valid(caller_perms()) ? caller_perms() | player);
          if (!args)
          player:notify(tostr("Your gender is currently ", this.gender, "."));
          player:notify($string_utils:pronoun_sub("Your pronouns:  %s,%o,%p,%q,%r,%S,%O,%P,%Q,%R"));
          player:notify(tostr("Available genders:  ", $string_utils:english_list($gender_utils.genders, "", " or ")));
          else
          result = this:set_gender(args[1]);
          quote = (result == E_NONE) ? "\"" | "";
          player:notify(tostr("Gender set to ", quote, this.gender, quote, "."));
          if (typeof(result) != ERR)
          player:notify($string_utils:pronoun_sub("Your pronouns:  %s,%o,%p,%q,%r,%S,%O,%P,%Q,%R"));
          elseif (result != E_NONE)
          player:notify(tostr("Couldn't set pronouns:  ", result));
          else
          player:notify("Pronouns unchanged.");
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>set_brief</NAME>
        <CODE>
          "set_brief(value)";
          "set_brief(value, anything)";
          "If &lt;anything&gt; is given, add value to the current value; otherwise, just set the value.";
          if (!($perm_utils:controls(caller_perms(), this) || (this == caller)))
          return E_PERM;
          else
          if (length(args) == 1)
          this.brief = args[1];
          else
          this.brief = this.brief + args[1];
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>@mode</NAME>
        <CODE>
          "@mode &lt;mode&gt;";
          "Current modes are brief and verbose.";
          "General verb for setting player `modes'.";
          "Modes are coded right here in the verb.";
          if (caller != this)
          player:tell("You can't set someone else's modes.");
          return E_PERM;
          endif
          modes = {"brief", "verbose"};
          mode = `modes[$string_utils:find_prefix(dobjstr, modes)] ! E_TYPE, E_RANGE =&gt; 0';
          if (!mode)
          player:tell("Unknown mode \"", dobjstr, "\".  Known modes:");
          for mode in (modes)
          player:tell("  ", mode);
          endfor
          return 0;
          elseif (mode == "brief")
          this:set_brief(1);
          elseif (mode == "verbose")
          this:set_brief(0);
          endif
          player:tell($string_utils:capitalize(mode), " mode set.");
          return 1;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@exam*ine</NAME>
        <CODE>
          "This verb should probably go away once 'examine' is in place.";
          if (dobjstr == "")
          player:notify(tostr("Usage:  ", verb, " &lt;object&gt;"));
          return;
          endif
          what = $string_utils:match_object(dobjstr, player.location);
          if ($command_utils:object_match_failed(what, dobjstr))
          return;
          endif
          player:notify(tostr(what.name, " (", what, ") is owned by ", valid(what.owner) ? what.owner.name | "a recycled player", " (", what.owner, ")."));
          player:notify(tostr("Aliases:  ", $string_utils:english_list(what.aliases)));
          desc = what:description();
          if (desc)
          player:notify_lines(desc);
          else
          player:notify("(No description set.)");
          endif
          if ($perm_utils:controls(player, what))
          player:notify(tostr("Key:  ", $lock_utils:unparse_key(what.key)));
          endif
          contents = what.contents;
          if (contents)
          player:notify("Contents:");
          for item in (contents)
          player:notify(tostr("  ", item.name, " (", item, ")"));
          endfor
          endif
          "Use dobjstr, not shortest alias.";
          name = dobjstr;
          "name = what.name;";
          "if (typeof(what.aliases) == LIST &amp;&amp; what.aliases != {})";
          "for alias in (what.aliases)";
          "if (length(alias) &lt;= length(name))";
          "name = alias;";
          "endif";
          "endfor";
          "endif";
          vrbs = {};
          commands_ok = what in {player, player.location};
          dull_classes = {$root_class, $room, $player, $prog};
          what = what;
          printed_working_msg = 0;
          while (what != $nothing)
          if ($command_utils:running_out_of_time())
          if (!printed_working_msg)
          player:notify("Working on list of obvious verbs...");
          printed_working_msg = 1;
          endif
          suspend(0);
          endif
          if (!(what in dull_classes))
          for i in [1..length(verbs(what))]
          if ($command_utils:running_out_of_time())
          if (!printed_working_msg)
          player:notify("Working on list of obvious verbs...");
          printed_working_msg = 1;
          endif
          suspend(0);
          endif
          info = verb_info(what, i);
          syntax = verb_args(what, i);
          if ((index(info[2], "r") &amp;&amp; ((syntax[2..3] != {"none", "this"}) &amp;&amp; (commands_ok || ("this" in syntax)))) &amp;&amp; verb_code(what, i))
          {dobj, prep, iobj} = syntax;
          if (syntax == {"any", "any", "any"})
          prep = "none";
          endif
          if (prep != "none")
          for x in ($string_utils:explode(prep, "/"))
          if (length(x) &lt;= length(prep))
          prep = x;
          endif
          endfor
          endif
          "This is the correct way to handle verbs ending in *";
          vname = info[3];
          while (j = index(vname, "* "))
          vname = tostr(vname[1..j - 1], "&lt;anything&gt;", vname[j + 1..$]);
          endwhile
          if (vname[$] == "*")
          vname = vname[1..$ - 1] + "&lt;anything&gt;";
          endif
          vname = strsub(vname, " ", "/");
          rest = "";
          if (prep != "none")
          rest = " " + ((prep == "any") ? "&lt;anything&gt;" | prep);
          if (iobj != "none")
          rest = tostr(rest, " ", (iobj == "this") ? name | "&lt;anything&gt;");
          endif
          endif
          if (dobj != "none")
          rest = tostr(" ", (dobj == "this") ? name | "&lt;anything&gt;", rest);
          endif
          vrbs = setadd(vrbs, ("  " + vname) + rest);
          endif
          endfor
          endif
          what = parent(what);
          endwhile
          if (vrbs)
          player:notify("Obvious Verbs:");
          player:notify_lines(vrbs);
          printed_working_msg &amp;&amp; player:notify("(End of list.)");
          elseif (printed_working_msg)
          player:notify("No obvious verbs found.");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>exam*ine</NAME>
        <CODE>
          set_task_perms(player);
          if (!dobjstr)
          player:notify(tostr("Usage:  ", verb, " &lt;object&gt;"));
          return E_INVARG;
          endif
          what = player.location:match_object(dobjstr);
          if ($command_utils:object_match_failed(what, dobjstr))
          return;
          endif
          what:do_examine(player);
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>add_feature</NAME>
        <CODE>
          "Add a feature to this player's features list.  Caller must be this or have suitable permissions (this or wizardly).";
          "If this is a nonprogrammer, then ask feature if it is feature_ok (that is, if it has a verb :feature_ok which returns a true value, or a property .feature_ok which is true).";
          "After adding feature, call feature:feature_add(this).";
          "Returns true if successful, E_INVARG if not a valid object, and E_PERM if !feature_ok or if caller doesn't have permission.";
          if ((caller == this) || $perm_utils:controls(caller_perms(), this))
          feature = args[1];
          if ((typeof(feature) != OBJ) || (!valid(feature)))
          return E_INVARG;
          "Not a valid object.";
          endif
          if ($code_utils:verb_or_property(feature, "feature_ok", this))
          "The object is willing to be a feature.";
          if (typeof(this.features) == LIST)
          "If list, we can simply setadd the feature.";
          this.features = setadd(this.features, feature);
          else
          "If not, we erase the old value and create a new list.";
          this.features = {feature};
          endif
          "Tell the feature it's just been added.";
          try
          feature:feature_add(this);
          except (ANY)
          "just ignore errors.";
          endtry
          return 1;
          "We're done.";
          else
          return E_PERM;
          "Feature isn't feature_ok.";
          endif
          else
          return E_PERM;
          "Caller doesn't have permission.";
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>remove_feature</NAME>
        <CODE>
          "Remove a feature from this player's features list.  Caller must be this, or have permissions of this, a wizard, or feature.owner.";
          "Returns true if successful, E_PERM if caller didn't have permission.";
          feature = args[1];
          if (((caller == this) || $perm_utils:controls(caller_perms(), this)) || (caller_perms() == feature.owner))
          if (typeof(this.features) == LIST)
          "If this is a list, we can just setremove...";
          this.features = setremove(this.features, feature);
          "Otherwise, we leave it alone.";
          endif
          "Let the feature know it's been removed.";
          try
          feature:feature_remove(this);
          except (ANY)
          "just ignore errors.";
          endtry
          return 1;
          "We're done.";
          else
          return E_PERM;
          "Caller didn't have permission.";
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@add-feature @addfeature</NAME>
        <CODE>
          "Usage:";
          "  @add-feature";
          "  @add-feature &lt;feature object&gt;";
          "Modified 10 Oct 94, by Michele, to check the warehouse and match.";
          "Lists all features or adds an object to your features list.";
          set_task_perms(player);
          if (dobjstr)
          if (dobj == $failed_match)
          dobj = $feature.warehouse:match_object(dobjstr);
          endif
          if (!$command_utils:object_match_failed(dobj, dobjstr))
          if (dobj in player.features)
          player:tell(dobjstr, " is already one of your features.");
          elseif (player:add_feature(dobj))
          player:tell(dobj, " (", dobj.name, ") added as a feature.");
          else
          player:tell("You can't seem to add ", dobj, " (", dobj.name, ") to your features list.");
          endif
          endif
          else
          player:tell("Usage:  @add-feature &lt;object&gt;");
          if (length($feature.warehouse.contents) &lt; 20)
          player:tell("Available features include:");
          player:tell("--------------------------");
          fe = {};
          for c in ($feature.warehouse.contents)
          fe = {(c in player.features) ? c:title() + " (*)" | c:title()};
          player:tell("  " + $string_utils:english_list(fe));
          endfor
          player:tell("--------------------------");
          player:tell("A * after the feature name means that you already have that feature.");
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@remove-feature @rmfeature</NAME>
        <CODE>
          "Usage:  @remove-feature &lt;feature object&gt;";
          "Remove an object from your .features list.";
          set_task_perms(player);
          if (dobjstr)
          features = player.features;
          if (!valid(dobj))
          dobj = $string_utils:match(dobjstr, features, "name", features, "aliases");
          endif
          if (!$command_utils:object_match_failed(dobj, dobjstr))
          if (dobj in features)
          player:remove_feature(dobj);
          player:tell(dobj, " (", dobj.name, ") removed from your features list.");
          else
          player:tell(dobjstr, " is not one of your features.");
          endif
          endif
          else
          player:tell("Usage:  @remove-feature &lt;object&gt;");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="for/about" IOBJ="any">
        <NAME>@features</NAME>
        <CODE>
          "Usage:  @features [&lt;name&gt;] for &lt;player&gt;";
          "List the feature objects matching &lt;name&gt; used by &lt;player&gt;.";
          if (!iobjstr)
          player:tell("Usage: @features [&lt;name&gt;] for &lt;player&gt;");
          return;
          elseif ($command_utils:player_match_failed(whose = $string_utils:match_player(iobjstr), iobjstr))
          return;
          endif
          features = {};
          for feature in (whose.features)
          if (!valid(feature))
          whose:remove_feature(feature);
          elseif ((!dobjstr) || ((dobjstr in feature.aliases) || ((pref = $string_utils:find_prefix(dobjstr, feature.aliases)) || (pref == $ambiguous_match))))
          features = listappend(features, feature);
          endif
          endfor
          if (features)
          len = max(length("Feature"), length(tostr(max_object()))) + 1;
          player:tell($string_utils:left("Feature", len), "Name");
          player:tell($string_utils:left("-------", len), "----");
          for feature in (features)
          player:tell($string_utils:left(tostr(feature), len), feature.name);
          endfor
          player:tell($string_utils:left("-------", len), "----");
          cstr = ((tostr(length(features)) + " feature") + ((length(features) &gt; 1) ? "s" | "")) + " found";
          if (whose != this)
          cstr = ((((cstr + " on ") + whose.name) + " (") + tostr(whose)) + ")";
          endif
          if (dobjstr)
          cstr = ((cstr + " matching \"") + dobjstr) + "\"";
          endif
          cstr = cstr + ".";
          player:tell(cstr);
          elseif (dobjstr)
          player:tell("No features found on ", whose.name, " (", whose, ") matching \"", dobjstr, "\".");
          else
          player:tell("No features found on ", whose.name, " (", whose, ").");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@features</NAME>
        <CODE>
          "Usage:  @features [&lt;name&gt;]";
          "List the feature objects matching &lt;name&gt; used by player.";
          iobjstr = player.name;
          iobj = player;
          this:("@features")();
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
        <NAME>@memory</NAME>
        <CODE>
          stats = memory_usage();
          if (!stats)
          player:notify("Sorry, but no memory-usage statistics are available for this server.");
          return;
          endif
          su = $string_utils;
          player:notify("Block Size   # In Use    # Free    Bytes In Use   Bytes Free");
          player:notify("----------   --------   --------   ------------   ----------");
          nused = nfree = bytesused = bytesfree = 0;
          kilo = 1024;
          meg = kilo * kilo;
          for x in (stats)
          if (x[2..3] != {0, 0})
          bsize = x[1];
          if ((bsize % meg) == 0)
          bsize = tostr(bsize / meg, " M");
          elseif ((bsize % kilo) == 0)
          bsize = tostr(bsize / kilo, " K");
          endif
          bused = x[1] * x[2];
          bfree = x[1] * x[3];
          player:notify(tostr(su:left(bsize, 10), "   ", su:right(su:group_number(x[2]), 8), "   ", su:right(su:group_number(x[3]), 8), "   ", su:right(su:group_number(bused), 12), "   ", su:right(su:group_number(bfree), 10)));
          nused = nused + x[2];
          nfree = nfree + x[3];
          bytesused = bytesused + bused;
          bytesfree = bytesfree + bfree;
          endif
          endfor
          player:notify("");
          player:notify(tostr(su:left("Totals:", 10), "   ", su:right(su:group_number(nused), 8), "   ", su:right(su:group_number(nfree), 8), "   ", su:right(su:group_number(bytesused), 12), "   ", su:right(su:group_number(bytesfree), 10)));
          player:notify("");
          player:notify(tostr("Total Memory Size: ", su:group_number(bytesused + bytesfree), " bytes."));
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
        <NAME>@version</NAME>
        <CODE>
          if ($object_utils:has_property($local, "server_hardware"))
          hw = (" on " + $local.server_hardware) + ".";
          else
          hw = ".";
          endif
          player:notify(tostr("The MOO is currently running version ", server_version(), " of the LambdaMOO server code", hw));
          try
          {MOOname, sversion, coretime} = $core_history[1];
          player:notify(tostr("The database was derived from a core created on ", $time_utils:time_sub("$n $t, $Y", coretime), " at ", MOOname, " for version ", sversion, " of the server."));
          except (E_RANGE)
          player:notify("The database was created from scratch.");
          except (ANY)
          player:notify("No information is available on the database version.");
          endtry
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
        <NAME>@uptime</NAME>
        <CODE>
          player:notify(tostr("The server has been up for ", $time_utils:english_time(time() - $last_restart_time), "."));
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
        <NAME>@quit</NAME>
        <CODE>
          boot_player(player);
          "-- argh, let the player decide; #3:disfunc() takes care of this --Rog";
          "player:moveto(player.home)";
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>examine_commands_ok</NAME>
        <CODE>
          return this == args[1];
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>is_listening</NAME>
        <CODE>
          "return true if player is active.";
          return typeof(`idle_seconds(this) ! ANY') != ERR;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>moveto</NAME>
        <CODE>
          if (args[1] == #-1)
          return E_INVARG;
          this:notify("You are now in #-1, The Void.  Type `home' to get back.");
          endif
          set_task_perms(caller_perms());
          pass(@args);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>announce*_all_but</NAME>
        <CODE>
          return this.location:(verb)(@args);
          "temporarily let player:announce be noisy to player";
          if (verb == "announce_all_but")
          if (this in args[1])
          return;
          endif
          args = args[2..$];
          endif
          this:tell("(from within you) ", @args);
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>linewrap</NAME>
        <CODE>
          "Return a true value if this needs linewrapping.";
          "default is true if .linelen &gt; 0";
          return this.linelen &gt; 0;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@set-note-string @set-note-text</NAME>
        <CODE>
          "Usage:  @set-note-{string | text} {#xx | #xx.pname}";
          "        ...lines of text...";
          "        .";
          "";
          "For use by clients' local editors, to save new text for a note or object property.  See $note_editor:local_editing_info() for details.";
          set_task_perms(player);
          text = $command_utils:read_lines_escape((active = player in $note_editor.active) ? {} | {"@edit"}, {tostr("Changing ", argstr, "."), @active ? {} | {"Type `@edit' to take this into the note editor."}});
          if (text &amp;&amp; (text[1] == "@edit"))
          $note_editor:invoke(argstr, verb);
          who = $note_editor:loaded(player);
          $note_editor.texts[who] = text[2];
          return;
          endif
          text = text[2];
          if ((verb == "@set-note-string") &amp;&amp; (length(text) &lt;= 1))
          text = text ? text[1] | "";
          endif
          if (spec = $code_utils:parse_propref(argstr))
          o = player:my_match_object(spec[1]);
          p = spec[2];
          if ($object_utils:has_verb(o, vb = "set_" + p) &amp;&amp; (typeof(e = o:(vb)(text)) != ERR))
          player:tell("Set ", p, " property of ", o.name, " (", o, ") via :", vb, ".");
          elseif (text != (e = `o.(p) = text ! ANY'))
          player:tell("Error:  ", e);
          else
          player:tell("Set ", p, " property of ", o.name, " (", o, ").");
          endif
          elseif (typeof(note = $code_utils:toobj(argstr)) == OBJ)
          e = note:set_text(text);
          if (typeof(e) == ERR)
          player:tell("Error:  ", e);
          else
          player:tell("Set text of ", note.name, " (", note, ").");
          endif
          else
          player:tell("Error:  Malformed argument to ", verb, ": ", argstr);
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>verb_sub</NAME>
        <CODE>
          text = args[1];
          if (a = `$list_utils:assoc(text, this.verb_subs) ! ANY')
          return a[2];
          else
          return $gender_utils:get_conj(text, this);
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>ownership_quota</NAME>
        <CODE>
          if ($perm_utils:controls(caller_perms(), this))
          return this.(verb);
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>tell_lines</NAME>
        <CODE>
          lines = args[1];
          if (typeof(lines) != LIST)
          lines = {lines};
          endif
          if (this.gaglist || this.paranoid)
          "Check the above first, default case, to save ticks.  Paranoid gaggers are cost an extra three or so ticks by this, probably a net savings.";
          if (this:gag_p())
          return;
          endif
          if (this.paranoid == 2)
          z = this:whodunnit({@callers(1), {player, "", player}}, {this, $no_one}, {})[3];
          lines = {((("[start text by " + z.name) + " (") + tostr(z)) + ")]", @lines, ((("[end text by " + z.name) + " (") + tostr(z)) + ")]"};
          elseif (this.paranoid == 1)
          $paranoid_db:add_data(this, {{@callers(1), {player, "&lt;cmd-line&gt;", player}}, lines});
          endif
          endif
          "don't gather stats for now: $list_utils:check_nonstring_tell_lines(lines)";
          this:notify_lines(lines);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@lastlog</NAME>
        <CODE>
          "Copied from generic room (#3):@lastlog by Haakon (#2) Wed Dec 30 13:30:02 1992 PST";
          if (dobjstr != "")
          dobj = $string_utils:match_player(dobjstr);
          if (!valid(dobj))
          player:tell("Who?");
          return;
          endif
          folks = {dobj};
          else
          folks = players();
          endif
          day = week = month = ever = never = {};
          a_day = (24 * 60) * 60;
          a_week = 7 * a_day;
          a_month = 30 * a_day;
          now = time();
          for x in (folks)
          when = x.last_connect_time;
          how_long = now - when;
          if ((when == 0) || (when &gt; now))
          never = {@never, x};
          elseif (how_long &lt; a_day)
          day = {@day, x};
          elseif (how_long &lt; a_week)
          week = {@week, x};
          elseif (how_long &lt; a_month)
          month = {@month, x};
          else
          ever = {@ever, x};
          endif
          endfor
          for entry in ({{day, "the last day"}, {week, "the last week"}, {month, "the last 30 days"}, {ever, "recorded history"}})
          if (entry[1])
          player:tell("Players who have connected within ", entry[2], ":");
          for x in (entry[1])
          player:tell("  ", x.name, " last connected ", ctime(x.last_connect_time), ".");
          endfor
          endif
          endfor
          if (never)
          player:tell("Players who have never connected:");
          player:tell("  ", $string_utils:english_list($list_utils:map_prop(never, "name")));
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>set_linelength</NAME>
        <CODE>
          "Set linelength.  Linelength must be an integer &gt;= 10.";
          "If wrap is currently off (i.e. linelength is less than 0), maintains sign.  That is, this function *takes* an absolute value, and coerces the sign to be appropriate.";
          "If you want to override the dwimming of wrap, pass in a second argument.";
          "returns E_PERM if not allowed, E_INVARG if linelength is too low, otherwise the linelength.";
          if ((caller != this) &amp;&amp; (!$perm_utils:controls(caller_perms(), this)))
          return E_PERM;
          elseif (abs(len = args[1]) &lt; 10)
          return E_INVARG;
          elseif (length(args) &gt; 1)
          this.linelen = len;
          else
          "DWIM here.";
          this.linelen = (this.linelen &gt; 0) ? len | (-len);
          return len;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>set_pagelength</NAME>
        <CODE>
          "Set pagelength. Must be an integer &gt;= 5, or 0 to turn pagelength off.";
          "Returns E_PERM if you shouldn't be doing this, E_INVARG if it's too low, otherwise, what it got set to.";
          if ((caller != this) &amp;&amp; (!$perm_utils:controls(caller_perms(), this)))
          return E_PERM;
          elseif (((len = args[1]) &lt; 5) &amp;&amp; (len != 0))
          return E_INVARG;
          else
          if ((this.pagelen = len) == 0)
          if (lb = this.linebuffer)
          "queued text remains";
          this:notify_lines(lb);
          clear_property(this, "linebuffer");
          endif
          endif
          return len;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>set_home</NAME>
        <CODE>
          "set_home(newhome) attempts to change this.home to newhome";
          "E_TYPE   if newhome doesn't have a callable :accept_for_abode verb.";
          "E_INVARG if newhome won't accept you as a resident.";
          "E_PERM   if you don't own this and aren't its parent.";
          "1        if it works.";
          newhome = args[1];
          if ((caller == this) || $perm_utils:controls(caller_perms(), this))
          if ($object_utils:has_callable_verb(newhome, "accept_for_abode"))
          if (newhome:accept_for_abode(this))
          return (typeof(e = `this.home = args[1] ! ANY') != ERR) || e;
          else
          return E_INVARG;
          endif
          else
          return E_TYPE;
          endif
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>@registerme</NAME>
        <CODE>
          "@registerme as &lt;email-address&gt; -- enter a new email address for player";
          "   will change the database entry, assign a new password, and mail the new password to the player at the given email address.";
          if (player != this)
          return player:notify(tostr(E_PERM));
          endif
          who = this;
          if ($object_utils:isa(this, $guest))
          who:notify("Sorry, guests should use the '@request' command to request a character.");
          return;
          endif
          connection = $string_utils:connection_hostname(connection_name(who));
          if (!argstr)
          if ($wiz_utils:get_email_address(who))
          player:tell("You are currently registered as:  ", $wiz_utils:get_email_address(who));
          else
          player:tell("You are not currently registered.");
          endif
          player:tell("Use @registerme as &lt;address&gt; to change this.");
          return;
          elseif (((prepstr != "as") || (!iobjstr)) || dobjstr)
          player:tell("Usage: @registerme as &lt;address&gt;");
          return;
          endif
          email = iobjstr;
          if (email == $wiz_utils:get_email_address(this))
          who:notify("That is your current address.  Not changed.");
          return;
          elseif (reason = $wiz_utils:check_reregistration(this, email, connection))
          if (reason[1] == "-")
          if (!$command_utils:yes_or_no(reason[2..$] + ". Automatic registration not allowed. Ask to be registered at this address anyway?"))
          who:notify("Okay.");
          return;
          endif
          else
          return who:notify(tostr(reason, " Please try again."));
          endif
          endif
          if ($network.active &amp;&amp; (!reason))
          if (!$command_utils:yes_or_no(tostr("If you continue, your password will be changed, the new password mailed to `", email, "'. Do you want to continue?")))
          return who:notify("Registration terminated.");
          endif
          password = $wiz_utils:random_password(5);
          old = $wiz_utils:get_email_address(who) || "[ unregistered ]";
          who:notify(tostr("Registering you, and changing your password and mailing new one to ", email, "."));
          result = $network:sendmail(email, tostr("Your ", $network.MOO_Name, " character, ", who.name), "Reply-to: " + $login.registration_address, @$generic_editor:fill_string(tostr("Your ", $network.MOO_name, " character, ", $string_utils:nn(who), " has been registered to this email address (", email, "), and a new password assigned.  The new password is `", password, "'. Please keep your password secure. You can change your password with the @password command."), 75));
          if (result != 0)
          who:notify(tostr("Mail sending did not work: ", reason, ". Reregistration terminated."));
          return;
          endif
          who:notify(tostr("Mail with your new password forwarded. If you do not get it, send regular email to ", $login.registration_address, " with your character name."));
          $mail_agent:send_message($new_player_log, $new_player_log, "reg " + $string_utils:nn(this), {email, tostr("formerly ", old)});
          $registration_db:add(this, email, "Reregistered at " + ctime());
          $wiz_utils:set_email_address(this, email);
          who.password = crypt(password);
          who.last_password_time = time();
          else
          who:notify("No automatic reregistration: your request will be forwarded.");
          if (typeof(curreg = $registration_db:find(email)) == LIST)
          additional_info = {"Current registration information for this email address:", @$registration_db:describe_registration(curreg)};
          else
          additional_info = {};
          endif
          $mail_agent:send_message(this, $registration_db.registrar, "Registration request", {((("Reregistration request from " + $string_utils:nn(who)) + " connected via ") + connection) + ":", "", (("@register " + who.name) + " ") + email, ("@new-password " + who.name) + " is ", "", "Reason this request was forwarded:", reason, @additional_info});
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>ctime</NAME>
        <CODE>
          ":ctime([INT time]) =&gt; STR as the function.";
          "May be hacked by players and player-classes to reflect differences in time-zone.";
          return ctime(@args);
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>@age</NAME>
        <CODE>
          if ((dobjstr == "") || (dobj == player))
          dobj = player;
          else
          dobj = $string_utils:match_player(dobjstr);
          if (!valid(dobj))
          $command_utils:player_match_failed(dobj, dobjstr);
          return;
          endif
          endif
          time = dobj.first_connect_time;
          if (time == $maxint)
          duration = time() - dobj.last_disconnect_time;
          if (duration &lt; 86400)
          notice = $string_utils:from_seconds(duration);
          else
          notice = $time_utils:english_time((duration / 86400) * 86400);
          endif
          player:notify(tostr(dobj.name, " has never connected.  It was created ", notice, " ago."));
          elseif (time == 0)
          player:notify(tostr(dobj.name, " first connected before initial connections were being recorded."));
          else
          player:notify(tostr(dobj.name, " first connected on ", ctime(time)));
          duration = time() - time;
          if (duration &lt; 86400)
          notice = $string_utils:from_seconds(duration);
          else
          notice = $time_utils:english_time((duration / 86400) * 86400);
          endif
          player:notify(tostr($string_utils:pronoun_sub("%S %&lt;is&gt; ", dobj), notice, " old."));
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
        <NAME>news</NAME>
        <CODE>
          "Usage: news [contents] [articles]";
          "";
          "Common uses:";
          "news           -- display all current news, or as @mail-options decree";
          "news new       -- display articles you haven't seen yet";
          "news all       -- display all current news";
          "news contents  -- display headers of current news";
          "news &lt;article&gt; -- display article";
          "news archive   -- display news which has been marked as archived.";
          set_task_perms(player);
          cur = this:get_current_message($news) || {0, 0};
          arch = 0;
          if (((!args) &amp;&amp; (o = player:mail_option("news"))) &amp;&amp; (o != "all"))
          "no arguments, use the player's default";
          args = {o};
          elseif (args == {"all"})
          args = {};
          elseif (args == {"archive"})
          arch = 1;
          args = {};
          endif
          if (hdrs_only = args &amp;&amp; (args[1] == "contents"))
          "Do the mail contents list";
          args[1..1] = {};
          endif
          if (args)
          if (typeof(seq = $news:_parse(args, @cur)) == STR)
          player:notify(seq);
          return;
          elseif (seq = $seq_utils:intersection(seq, $news.current_news))
          else
          player:notify((args == {"new"}) ? "No new news." | "None of those are current articles.");
          return;
          endif
          elseif (arch &amp;&amp; (seq = $news.archive_news))
          "yduJ hates this coding style.  Just so you know.";
          elseif (seq = $news.current_news)
          else
          player:notify("No news");
          return;
          endif
          if (hdrs_only)
          $news:display_seq_headers(seq, @cur);
          else
          player:set_current_message($news, @$news:news_display_seq_full(seq));
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>@edit</NAME>
        <CODE>
          "Calls the verb editor on verbs, the note editor on properties, and on anything else assumes it's an object for which you want to edit the .description.";
          if (!args)
          ((player in $note_editor.active) ? $note_editor | $verb_editor):invoke(dobjstr, verb);
          elseif ($code_utils:parse_verbref(args[1]))
          if (player.programmer)
          $verb_editor:invoke(argstr, verb);
          else
          player:notify("You need to be a programmer to do this.");
          player:notify("If you want to become a programmer, talk to a wizard.");
          return;
          endif
          else
          $note_editor:invoke(dobjstr, verb);
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>erase_paranoid_data</NAME>
        <CODE>
          if (!($perm_utils:controls(caller_perms(), this) || (this == caller)))
          return E_PERM;
          else
          $paranoid_db:erase_data(this);
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>@move-new</NAME>
        <CODE>
          "'@move &lt;object&gt; to &lt;place&gt;' - Teleport an object. Example: '@move trash to #11' to move trash to the closet.";
          set_task_perms((caller == this) ? this | $no_one);
          if ((prepstr != "to") || (!iobjstr))
          player:tell("Usage: @move &lt;object&gt; to &lt;location&gt;");
          return;
          endif
          if ((!dobjstr) || (dobjstr == "me"))
          dobj = this;
          else
          dobj = here:match_object(dobjstr);
          if (!valid(dobj))
          dobj = player:my_match_object(dobjstr);
          endif
          endif
          if ($command_utils:object_match_failed(dobj, dobjstr))
          return;
          endif
          iobj = this:lookup_room(iobjstr);
          if ((iobj != $nothing) &amp;&amp; $command_utils:object_match_failed(iobj, iobjstr))
          return;
          endif
          if (((!player.programmer) &amp;&amp; (!$perm_utils:controls(this, dobj))) &amp;&amp; (this != dobj))
          player:tell("You may only @move your own things.");
          return;
          endif
          this:teleport(dobj, iobj);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>notify_lines_suspended</NAME>
        <CODE>
          if (($perm_utils:controls(caller_perms(), this) || (caller == this)) || (caller_perms() == this))
          set_task_perms(caller_perms());
          for line in ((typeof(lines = args[1]) != LIST) ? {lines} | lines)
          $command_utils:suspend_if_needed(0);
          this:notify(tostr(line));
          endfor
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>_chparent</NAME>
        <CODE>
          set_task_perms(caller_perms());
          return chparent(@args);
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="none" PREP="none" IOBJ="none">
        <NAME>@users</NAME>
        <CODE>
          "Prints a count and compact list of the currently-connected players.";
          cp = connected_players();
          linelen = abs(player.linelen) || 79;
          player:tell_lines({tostr("There are ", length(cp), " players connected:"), @$generic_editor:fill_string($string_utils:english_list($list_utils:sort_suspended(0, $list_utils:map_prop(cp, "name"))), linelen)});
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
        <NAME>@password</NAME>
        <CODE>
          if (typeof(player.password) != STR)
          if (length(args) != 1)
          return player:notify(tostr("Usage:  ", verb, " &lt;new-password&gt;"));
          else
          new_password = args[1];
          endif
          elseif (length(args) != 2)
          player:notify(tostr("Usage:  ", verb, " &lt;old-password&gt; &lt;new-password&gt;"));
          return;
          elseif (player.password != crypt(tostr(args[1]), player.password))
          player:notify("That's not your old password.");
          return;
          elseif (is_clear_property(player, "password"))
          player:notify("Your password has a `clear' property.  Please refer to a wizard for assistance in changing it.");
          return;
          else
          new_password = args[2];
          endif
          if (r = $password_verifier:reject_password(new_password, player))
          player:notify(r);
          return;
          endif
          player.password = crypt(tostr(new_password));
          player.last_password_time = time();
          player:notify("New password set.");
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>recycle</NAME>
        <CODE>
          if ((caller == this) || $perm_utils:controls(caller_perms(), this))
          pass(@args);
          features = this.features;
          "Have to do this, or :feature_remove thinks you're a liar and doesn't believe.";
          this.features = {};
          for x in (features)
          try
          x:feature_remove(this);
          except (ANY)
          "Ignore errors";
          endtry
          $command_utils:suspend_if_needed(0);
          endfor
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>gc_gaglist</NAME>
        <CODE>
          ((caller == this) || $perm_utils:controls(caller_perms(), this)) || raise(E_PERM);
          if (g = this.gaglist)
          recycler = $recycler;
          for o in (g)
          if (!recycler:valid(o))
          g = setremove(g, o);
          endif
          endfor
          this.gaglist = g;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>email_address</NAME>
        <CODE>
          set_task_perms(caller_perms());
          return this.email_address;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>set_email_address</NAME>
        <CODE>
          set_task_perms(caller_perms());
          this.email_address = args[1];
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>reconfunc</NAME>
        <CODE>
          if (((valid(cp = caller_perms()) &amp;&amp; (caller != this)) &amp;&amp; (!$perm_utils:controls(cp, this))) &amp;&amp; (caller != $sysobj))
          return E_PERM;
          endif
          return this:confunc(@args);
        </CODE>
      </VERB>
      <OBJECT ID="obj40" FLAGS="f r" OWNER="obj2" LOCATION="obj-1">
        <NAME>Generic Mail Receiving Player</NAME>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>_mail_task</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c">
          <NAME>messages_going</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>mail_lists</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>mail_notify</NAME>
          <VALUE>{{}, {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>mail_forward</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>mail_options</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>message_keep_date</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>messages_kept</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c">
          <NAME>current_message</NAME>
          <VALUE>{0, 0}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c">
          <NAME>messages</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>features</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" >
          <NAME>previous_connection</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" >
          <NAME>email_address</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>last_disconnect_time</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>help</NAME>
          <VALUE>#85</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>more_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>linetask</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>linesleft</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" >
          <NAME>linebuffer</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>pagelen</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>owned_objects</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>linelen</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c">
          <NAME>current_folder</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" >
          <NAME>all_connect_places</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" >
          <NAME>last_connect_place</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>dict</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>brief</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c">
          <NAME>lines</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>page_absent_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>pq</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>pqc</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>page_origin_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>page_echo_msg</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>edit_options</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>last_connect_time</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" >
          <NAME>ownership_quota</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>gender</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>prc</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>ppc</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>poc</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>psc</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>pr</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>pp</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>po</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>ps</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>home</NAME>
          <VALUE>#62</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" >
          <NAME>password</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>gaglist</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>paranoid</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>display_options</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>verb_subs</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>first_connect_time</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" >
          <NAME>size_quota</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" >
          <NAME>last_password_time</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" >
          <NAME>last_connect_attempt</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c">
          <NAME>key</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>aliases</NAME>
          <VALUE>{"Generic Mail Receiving Player"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="c r">
          <NAME>description</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{66628, 919123692}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>mail_forward</NAME>
          <CODE>
            if (typeof(mf = this.(verb)) == STR)
            return $string_utils:pronoun_sub(mf, @args);
            else
            return mf;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>receive_message</NAME>
          <CODE>
            ":receive_message(msg,from)";
            if ((!$perm_utils:controls(caller_perms(), this)) &amp;&amp; (caller != this))
            return E_PERM;
            endif
            if (this:mail_option("no_dupcc", args[1][1], args[1][2]))
            "pass to :mail_option the TEXT versions of who the message is from and to";
            recipients = setremove($mail_agent:parse_address_field(args[1][3]), this);
            for x in (recipients)
            if (this:get_current_message(x))
            return 0;
            endif
            endfor
            endif
            if (this:mail_option("netmail"))
            msg = args[1];
            message = {"Forwarded: " + msg[4], "Original-date: " + ctime(msg[1]), "Original-From: " + msg[2], "Original-To: " + msg[3], ((("Reply-To: " + $string_utils:substitute(args[2].name, {{"@", "%"}})) + "@") + $network.moo_name) + ".moo.mud.org"};
            for x in (msg[5..$])
            message = {@message, @$generic_editor:fill_string(x, this:linelen())};
            endfor
            if (this:send_self_netmail(message, @listdelete(args, 1)) == 0)
            return 0;
            endif
            endif
            set_task_perms(this.owner);
            new = this:new_message_num();
            ncur = (new &lt;= 1) ? 0 | min(this:current_message(this), new);
            this:set_current_message(this, ncur);
            new = max(new, ncur + 1);
            this.messages = {@this.messages, {new, args[1]}};
            "... new-mail notification is now done directly by $mail_agent:raw_send";
            "... see :notify_mail...";
            return new;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>display_message</NAME>
          <CODE>
            ":display_message(preamble,msg) --- prints msg to player.";
            vb = ((this._mail_task == task_id()) || (caller == $mail_editor)) ? "notify_lines_suspended" | "tell_lines_suspended";
            preamble = args[1];
            player:(vb)({@(typeof(preamble) == LIST) ? preamble | {preamble}, @args[2], "--------------------------"});
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>parse_message_seq from_msg_seq %from_msg_seq to_msg_seq %to_msg_seq subject_msg_seq body_msg_seq kept_msg_seq unkept_msg_seq display_seq_headers display_seq_full messages_in_seq list_rmm new_message_num length_num_le length_date_le length_date_gt length_all_msgs exists_num_eq msg_seq_to_msg_num_list msg_seq_to_msg_num_string rm_message_seq undo_rmm expunge_rmm renumber keep_message_seq</NAME>
          <CODE>
            "parse_message_seq(strings,cur)         =&gt; msg_seq";
            "messages_in_seq(msg_seq);              =&gt; text of messages in msg_seq";
            "display_seq_headers(msg_seq[,current]) :displays summary lines of those msgs";
            "rmm_message_seq(msg_seq)               =&gt; string giving msg numbers removed";
            "undo_rmm()    =&gt; msg_seq of restored messages";
            "expunge_rmm() =&gt; number of messages expunged";
            "list_rmm()    =&gt; number of messages awaiting expunge";
            "renumber(cur) =&gt; {number of messages in folder, new_cur}";
            "";
            "See the corresponding routines on $mail_agent.";
            if ((caller == $mail_agent) || $perm_utils:controls(caller_perms(), this))
            set_task_perms(this.owner);
            return $mail_agent:(verb)(@args);
            else
            return E_PERM;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>msg_summary_line</NAME>
          <CODE>
            return $mail_agent:msg_summary_line(@args);
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>msg_text</NAME>
          <CODE>
            ":msg_text(@msg) =&gt; list of strings.";
            "msg is a mail message (in the usual transmission format) being read BY this player.";
            "The default version of recipient:msg_full_text calls this to obtain the actual list of strings to display.  (this is a badly named verb).";
            "returns the actual list of strings to display.";
            return $mail_agent:to_text(@args);
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>notify_mail</NAME>
          <CODE>
            ":notify_mail(from,recipients[,msgnums])";
            " used by $mail_agent:raw_send to notify this player about mail being sent";
            " from &lt;from&gt; to &lt;recipients&gt;.  &lt;msgnums&gt; if given gives the message number(s) assigned (in the event that the corresponding recipient actually kept the mail)";
            if (!$object_utils:connected(this))
            return;
            elseif (!((caller in {this, $mail_agent}) || $perm_utils:controls(caller_perms(), this)))
            return E_PERM;
            else
            {from, recipients, ?msgnums = {}} = args;
            from_name = $mail_agent:name(from);
            "... msgnums may be shorter than recipients or may have some slots filled";
            "... with 0's if msg numbers are not available for some recipients.";
            if ((t = this in recipients) &amp;&amp; ((length(msgnums) &gt;= t) &amp;&amp; msgnums[t]))
            "... you are getting the mail and moreover your :receive_message kept it.";
            namelist = $string_utils:english_list($list_utils:map_arg($mail_agent, "name", setremove(recipients, this)), "");
            this:notify(tostr("You have new mail (", msgnums[t], ") from ", from_name, namelist ? " which was also sent to " + namelist | "", "."));
            if (!this:mail_option("expert"))
            this:notify(tostr("Type `help mail' for info on reading it."));
            endif
            else
            "... vanilla notification; somebody got sent mail and you're finding out.";
            namelist = $string_utils:english_list({@t ? {"You"} | {}, @$list_utils:map_arg($mail_agent, "name", setremove(recipients, this))}, "");
            this:tell(tostr(namelist, (length(recipients) == 1) ? " has" | " have", " just been sent new mail by ", from_name, "."));
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>current_message</NAME>
          <CODE>
            ":current_message([recipient])";
            " =&gt; current message number for the given recipient (defaults to this).";
            " =&gt; 0 if we have no record of that recipient";
            "      or current message happens to be 0.";
            "This verb is mostly obsolete; consider using :get_current_message()";
            if ((caller != this) &amp;&amp; (!$perm_utils:controls(caller_perms(), this)))
            raise(E_PERM);
            elseif ((!args) || (args[1] == this))
            return this.current_message[1];
            elseif (a = $list_utils:assoc(args[1], this.current_message))
            return a[2];
            else
            return 0;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>get_current_message</NAME>
          <CODE>
            ":get_current_message([recipient])";
            " =&gt; {msg_num, last_read_date} for the given recipient.";
            " =&gt; 0 if we have no record of that recipient.";
            if ((caller != this) &amp;&amp; (!$perm_utils:controls(caller_perms(), this)))
            raise(E_PERM);
            elseif ((!args) || (args[1] == this))
            if (length(this.current_message) &lt; 2)
            "Whoops, this got trashed---fix it up!";
            this.current_message = {0, time(), @this.current_message};
            endif
            return this.current_message[1..2];
            elseif (a = $list_utils:assoc(args[1], this.current_message))
            return a[2..3];
            else
            return 0;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>set_current_message</NAME>
          <CODE>
            ":set_current_message(recipient[,number[,date]])";
            "Returns the new {number,last-read-date} pair for recipient.";
            if ((caller != this) &amp;&amp; (!$perm_utils:controls(caller_perms(), this)))
            raise(E_PERM);
            endif
            {recip, ?number = E_NONE, ?date = 0} = args;
            cm = this.current_message;
            if (recip == this)
            this.current_message[2] = max(date, cm[2]);
            if (number != E_NONE)
            this.current_message[1] = number;
            endif
            return this.current_message[1..2];
            elseif (i = $list_utils:iassoc(recip, cm))
            return (this.current_message[i] = {recip, (number == E_NONE) ? cm[i][2] | number, max(date, cm[i][3])})[2..3];
            else
            entry = {recip, (number != E_NONE) &amp;&amp; number, date};
            this.current_message = {@cm, entry};
            return entry[2..3];
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>make_current_message</NAME>
          <CODE>
            ":make_current_message(recipient[,index])";
            "starts a new current_message record for recipient.";
            "index, if given, indicates where recipient is to be";
            "  placed (n = at or after nth entry in .current_message).";
            recip = args[1];
            cm = this.current_message;
            if (length(args) &gt; 1)
            i = max(2, min(args[2], length(cm)));
            else
            i = 0;
            endif
            if ((caller != this) &amp;&amp; (!$perm_utils:controls(caller_perms(), this)))
            raise(E_PERM);
            elseif (recip == this)
            "...self...";
            elseif (j = $list_utils:iassoc(recip, cm))
            "...already present...";
            if (i)
            if (j &lt; i)
            this.current_message = {@cm[1..j - 1], @cm[j + 1..i], cm[j], @cm[i + 1..$]};
            elseif (j &gt; (i + 1))
            this.current_message = {@cm[1..i], cm[j], @cm[i + 1..j - 1], @cm[j + 1..$]};
            endif
            endif
            else
            this.current_message = listappend(cm, {recip, 0, 0}, @i ? {i} | {});
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>kill_current_message</NAME>
          <CODE>
            ":kill_current_message(recipient)";
            "entirely forgets current message for this recipient...";
            "Returns true iff successful.";
            if ((caller != this) &amp;&amp; (!$perm_utils:controls(caller_perms(), this)))
            raise(E_PERM);
            else
            return ((recip = args[1]) != this) &amp;&amp; ((i = $list_utils:iassoc(recip, cm = this.current_message)) &amp;&amp; (this.current_message = listdelete(cm, i)));
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>current_folder</NAME>
          <CODE>
            ":current_folder() =&gt; default folder to use, always an object, usually `this'";
            set_task_perms(caller_perms());
            return ((!this:mail_option("sticky")) || this.current_folder) &amp;&amp; this;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>set_current_folder</NAME>
          <CODE>
            set_task_perms(caller_perms());
            return this.current_folder = args[1];
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>parse_folder_spec</NAME>
          <CODE>
            ":parse_folder_spec(verb,args,expected_preposition[,allow_trailing_args_p])";
            " =&gt; {folder, msg_seq_args, trailing_args}";
            set_task_perms(caller_perms());
            folder = this:current_folder();
            if (!prepstr)
            return {folder, args[2], {}};
            endif
            {verb, args, prep, ?extra = 0} = args;
            p = prepstr in args;
            if (prepstr != prep)
            "...unexpected preposition...";
            if (extra &amp;&amp; (!index(prepstr, " ")))
            return {folder, args[1..p - 1], args[p..$]};
            else
            player:tell("Usage:  ", verb, " [&lt;message numbers&gt;] [", prep, " &lt;folder/list-name&gt;]");
            endif
            elseif (!((p &lt; length(args)) &amp;&amp; (fname = args[p + 1])))
            "...preposition but no iobj...";
            player:tell(verb, " ", $string_utils:from_list(args, " "), " WHAT?");
            elseif ($mail_agent:match_failed(folder = $mail_agent:match_recipient(fname, this), fname))
            "...bogus mail folder...";
            else
            return {folder, args[1..p - 1], args[p + 2..$]};
            endif
            return 0;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>parse_mailread_cmd</NAME>
          <CODE>
            ":parse_mailread_cmd(verb,args,default,prep[,trailer])";
            "  handles anything of the form  `VERB message_seq [PREP folder ...]'";
            "    default is the default msg-seq to use if none given";
            "    prep is the expected prepstr (assumes prepstr is set), usually `on'";
            "    trailer, if present and true, indicates trailing args are permitted.";
            "  returns {recipient object, message_seq, current_msg,\"...\"} or 0";
            set_task_perms(caller_perms());
            if (!(pfs = this:parse_folder_spec(@listdelete(args, 3))))
            return 0;
            endif
            {verb, args, default, prep, ?extra = 0} = args;
            folder = pfs[1];
            cur = this:get_current_message(folder) || {0};
            if (typeof(pms = folder:parse_message_seq(pfs[2], @cur)) == LIST)
            rest = {@listdelete(pms, 1), @pfs[3]};
            if ((!extra) &amp;&amp; rest)
            "...everything should have been gobbled by :parse_message_seq...";
            player:tell("I don't understand `", rest[1], "'");
            return 0;
            elseif (pms[1])
            "...we have a nonempty message sequence...";
            return {folder, pms[1], cur, rest};
            elseif (used = (length(pfs[2]) + 1) - length(pms))
            "...:parse_message_seq used some words, but didn't get anything out of it";
            pms = ("%f %&lt;has&gt; no `" + $string_utils:from_list(pfs[2][1..used], " ")) + "' messages.";
            elseif (typeof(pms = folder:parse_message_seq(default, @cur)) == LIST)
            "...:parse_message_seq used nothing, try the default; wow it worked";
            return {folder, pms[1], cur, rest};
            endif
            elseif (typeof(pms) == ERR)
            player:tell($mail_agent:name(folder), " is not readable by you.");
            if (!$object_utils:isa(folder, $mail_recipient))
            player:tell("Use * to indicate a non-player mail recipient.");
            endif
            return 0;
            endif
            if (folder == this)
            subst = {{"%f's", "Your"}, {"%f", "You"}, {"%&lt;has&gt;", "have"}};
            elseif (is_player(folder))
            subst = {{"%f", folder.name}, {"%&lt;has&gt;", $gender_utils:get_conj("has", folder)}};
            else
            subst = {{"%f", $mail_agent:name(folder)}, {"%&lt;has&gt;", "has"}};
            endif
            player:tell($string_utils:substitute(pms, {@subst, {"%%", "%"}}));
            return 0;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@mail</NAME>
          <CODE>
            "@mail &lt;msg-sequence&gt;                --- as in help @mail";
            "@mail &lt;msg-sequence&gt; on &lt;recipient&gt; --- shows mail on mailing list or player.";
            set_task_perms(valid(cp = caller_perms()) ? cp | player);
            if (p = this:parse_mailread_cmd("@mail", args, this:mail_option("@mail") || $mail_agent.("player_default_@mail"), "on"))
            this:set_current_folder(folder = p[1]);
            msg_seq = p[2];
            seq_size = $seq_utils:size(msg_seq);
            if ((lim = player:mail_option("manymsgs")) &amp;&amp; ((lim &lt;= seq_size) &amp;&amp; (!$command_utils:yes_or_no(tostr("You are about to see ", seq_size, " message headers.  Continue?")))))
            player:notify(tostr("Aborted.  @mailoption manymsgs=", lim));
            return;
            endif
            if (1 != seq_size)
            player:notify(tostr(seq_size, " messages", (folder == this) ? "" | (" on " + $mail_agent:name(folder)), ":"));
            endif
            folder:display_seq_headers(msg_seq, @p[3]);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@read @peek</NAME>
          <CODE>
            "@read &lt;msg&gt;...                  -- as in help @read";
            "@read &lt;msg&gt;... on *&lt;recipient&gt;  -- reads messages on recipient.";
            "@peek ...                       -- like @read, but don't set current message";
            set_task_perms(valid(cp = caller_perms()) ? cp | player);
            if (p = this:parse_mailread_cmd("@read", args, "", "on"))
            this:set_current_folder(folder = p[1]);
            msg_seq = p[2];
            if ((lim = player:mail_option("manymsgs")) &amp;&amp; ((lim &lt;= (seq_size = $seq_utils:size(msg_seq))) &amp;&amp; (!$command_utils:yes_or_no(tostr("You are about to see ", seq_size, " messages.  Continue?")))))
            player:notify(tostr("Aborted.  @mailoption manymsgs=", lim));
            return;
            endif
            this._mail_task = task_id();
            if (cur = folder:display_seq_full(msg_seq, tostr("Message %d", (folder == this) ? "" | (" on " + $mail_agent:name(folder)), ":")))
            if (verb != "@peek")
            this:set_current_message(folder, @cur);
            endif
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@next @prev</NAME>
          <CODE>
            set_task_perms(player.owner);
            if (dobjstr &amp;&amp; (!(n = toint(dobjstr))))
            player:notify(tostr("Usage:  ", verb, "[&lt;number&gt;] [on &lt;recipient&gt;]"));
            elseif (dobjstr)
            this:("@read")(tostr(verb[2..5], n), @listdelete(args, 1));
            else
            this:("@read")(verb[2..5], @args);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@rmm*ail</NAME>
          <CODE>
            "@rmm &lt;message-sequence&gt; [from &lt;recipient&gt;].   Use @unrmm if you screw up.";
            " Beware, though.  @unrmm can only undo the most recent @rmm.";
            set_task_perms(player);
            if (!(p = this:parse_mailread_cmd("@rmm", args, "cur", "from")))
            "...parse failed, we've already complained...";
            elseif ((!prepstr) &amp;&amp; ((p[1] != this) &amp;&amp; (!$command_utils:yes_or_no(("@rmmail from " + $mail_agent:name(p[1])) + ".  Continue?"))))
            "...wasn't the folder player was expecting...";
            player:notify("@rmmail aborted.");
            else
            this:set_current_folder(folder = p[1]);
            e = folder:rm_message_seq(p[2]);
            if (typeof(e) == ERR)
            player:notify(tostr($mail_agent:name(folder), ":  ", e));
            else
            count = ((n = $seq_utils:size(p[2])) == 1) ? "." | tostr(" (", n, " messages).");
            fname = (folder == this) ? "" | (" from " + $mail_agent:name(folder));
            player:notify(tostr("Deleted ", e, fname, count));
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
          <NAME>@renumber</NAME>
          <CODE>
            set_task_perms(player);
            if (!dobjstr)
            folder = this:current_folder();
            elseif ($mail_agent:match_failed(folder = $mail_agent:match_recipient(dobjstr), dobjstr))
            return;
            endif
            cur = this:current_message(folder);
            fname = $mail_agent:name(folder);
            if (typeof(h = folder:renumber(cur)) == ERR)
            player:notify(tostr(h));
            else
            if (!h[1])
            player:notify(tostr("No messages on ", fname, "."));
            else
            player:notify(tostr("Messages on ", fname, " renumbered 1-", h[1], "."));
            this:set_current_folder(folder);
            if (h[2] &amp;&amp; this:set_current_message(folder, h[2]))
            player:notify(tostr("Current message is now ", h[2], "."));
            endif
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@unrmm*ail</NAME>
          <CODE>
            "@unrmm [on &lt;recipient&gt;]  -- undoes the previous @rmm on that recipient.";
            set_task_perms(player);
            if (!(p = this:parse_folder_spec("@unrmm", args, "on")))
            return;
            endif
            dobjstr = $string_utils:from_list(p[2], " ");
            keep = 0;
            if ((!dobjstr) || (keep = index("keep", dobjstr) == 1))
            do = "undo_rmm";
            elseif (index("expunge", dobjstr) == 1)
            do = "expunge_rmm";
            elseif (index("list", dobjstr) == 1)
            do = "list_rmm";
            else
            player:notify(tostr("Usage:  ", verb, " [expunge|list] [on &lt;recipient&gt;]"));
            return;
            endif
            this:set_current_folder(folder = p[1]);
            if (msg_seq = folder:(do)(@keep ? {keep} | {}))
            if (do == "undo_rmm")
            player:notify(tostr($seq_utils:size(msg_seq), " messages restored to ", $mail_agent:name(folder), "."));
            folder:display_seq_headers(msg_seq, 0);
            else
            player:notify(tostr(msg_seq, " zombie message", (msg_seq == 1) ? " " | "s ", (do == "expunge_rmm") ? "expunged from " | "on ", $mail_agent:name(folder), "."));
            endif
            elseif (typeof(msg_seq) == ERR)
            player:notify(tostr($mail_agent:name(folder), ":  ", msg_seq));
            else
            player:notify(tostr("No messages to ", (do == "expunge_rmm") ? "expunge from " | "restore to ", $mail_agent:name(folder)));
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@send</NAME>
          <CODE>
            if (args &amp;&amp; (args[1] == "to"))
            args = listdelete(args, 1);
            endif
            subject = {};
            for a in (args)
            if (((i = index(a, "=")) &gt; 3) &amp;&amp; (index("subject", a[1..i - 1]) == 1))
            args = setremove(args, a);
            a[1..i] = "";
            subject = {a};
            endif
            endfor
            $mail_editor:invoke(args, verb, @subject);
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@answer @repl*y</NAME>
          <CODE>
            "@answer &lt;msg&gt; [on *&lt;recipient&gt;] [&lt;flags&gt;...]";
            set_task_perms(who = valid(caller_perms()) ? caller_perms() | player);
            if (p = this:parse_mailread_cmd(verb, args, "cur", "on", 1))
            if ($seq_utils:size(p[2]) != 1)
            player:notify("You can only answer *one* message at a time.");
            elseif (LIST != typeof(flags_replytos = $mail_editor:check_answer_flags(@p[4])))
            player:notify_lines({tostr("Usage:  ", verb, " [message-# [on &lt;recipient&gt;]] [flags...]"), "where flags include any of:", "  all        reply to everyone", "  sender     reply to sender only", "  include    include the original message in your reply", "  noinclude  don't include the original in your reply"});
            else
            this:set_current_folder(p[1]);
            $mail_editor:invoke(2, verb, p[1]:messages_in_seq(p[2])[1][2], @flags_replytos);
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@forward</NAME>
          <CODE>
            "@forward &lt;msg&gt; [on *&lt;recipient&gt;] to &lt;recipient&gt; [&lt;recipient&gt;...]";
            set_task_perms(valid(cp = caller_perms()) ? cp | player);
            if (!(p = this:parse_mailread_cmd(verb, args, "", "on", 1)))
            "...lose...";
            return;
            elseif ($seq_utils:size(sequence = p[2]) != 1)
            player:notify("You can only forward *one* message at a time.");
            return;
            elseif ((length(p[4]) &lt; 2) || (p[4][1] != "to"))
            player:notify(tostr("Usage:  ", verb, " [&lt;message&gt;] [on &lt;folder&gt;] to &lt;recip&gt;..."));
            return;
            endif
            recips = {};
            for rs in (listdelete(p[4], 1))
            if ($mail_agent:match_failed(r = $mail_agent:match_recipient(rs), rs))
            return;
            endif
            recips = {@recips, r};
            endfor
            this:set_current_folder(folder = p[1]);
            m = folder:messages_in_seq(sequence)[1];
            msgnum = m[1];
            msgtxt = m[2];
            from = msgtxt[2];
            if (msgtxt[4] != " ")
            subject = tostr("[", from, ":  ", msgtxt[4], "]");
            elseif ((h = "" in msgtxt) &amp;&amp; (h &lt; length(msgtxt)))
            subject = tostr("[", from, ":  `", msgtxt[h + 1][1..min(20, $)], "']");
            else
            subject = tostr("[", from, "]");
            endif
            result = $mail_agent:send_message(player, recips, subject, $mail_agent:to_text(@msgtxt));
            if (!result)
            player:notify(tostr(result));
            elseif (result[1])
            player:notify(tostr("Message ", msgnum, @(folder == this) ? {} | {" on ", $mail_agent:name(folder)}, " @forwarded to ", $mail_agent:name_list(@listdelete(result, 1)), "."));
            else
            player:notify("Message not sent.");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@gripe</NAME>
          <CODE>
            $mail_editor:invoke($gripe_recipients, "@gripe", "@gripe: " + argstr);
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@typo @bug @suggest*ion @idea @comment</NAME>
          <CODE>
            subject = tostr($string_utils:capitalize(verb[2..$]), ":  ", (loc = this.location).name, "(", loc, ")");
            if (this != player)
            return E_PERM;
            elseif (argstr)
            result = $mail_agent:send_message(this, {loc.owner}, subject, argstr);
            if (result &amp;&amp; result[1])
            player:notify(tostr("Your ", verb, " sent to ", $mail_agent:name_list(@listdelete(result, 1)), ".  Input is appreciated, as always."));
            else
            player:notify(tostr("Huh?  This room's owner (", loc.owner, ") is invalid?  Tell a wizard..."));
            endif
            return;
            elseif (!($object_utils:isa(loc, $room) &amp;&amp; loc.free_entry))
            player:notify_lines({tostr("You need to make it a one-liner, i.e., `", verb, " something or other'."), "This room may not let you back in if you go to the Mail Room."});
            elseif ($object_utils:isa(loc, $generic_editor))
            player:notify_lines({tostr("You need to make it a one-liner, i.e., `", verb, " something or other'."), "Sending you to the Mail Room from an editor is usually a bad idea."});
            else
            $mail_editor:invoke({tostr(loc.owner)}, verb, subject);
            endif
            if (verb == "@bug")
            player:notify("For a @bug report, be sure to mention exactly what it was you typed to trigger the error...");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@skip</NAME>
          <CODE>
            "@skip [*&lt;folder/mailing_list&gt;...]";
            "  sets your last-read time for the given lists to now, indicating your";
            "  disinterest in any new messages that might have appeared recently.";
            set_task_perms(player);
            current_folder = this:current_folder();
            for a in (args || {0})
            if (a ? $mail_agent:match_failed(folder = $mail_agent:match_recipient(a), a) | (folder = this:current_folder()))
            "...bogus folder name, done...  No, try anyway.";
            if (this:kill_current_message(this:my_match_object(a)))
            player:notify("Invalid folder, but found it subscribed anyway.  Removed.");
            endif
            else
            lseq = folder:length_all_msgs();
            unread = (n = this:get_current_message(folder)) ? folder:length_date_gt(n[2]) | lseq;
            this:set_current_message(folder, lseq &amp;&amp; folder:messages_in_seq({lseq, lseq + 1})[1][1], time());
            player:notify(tostr(unread ? tostr("Ignoring ", unread) | "No", " unread message", (unread != 1) ? "s" | "", " on ", $mail_agent:name(folder)));
            if (current_folder == folder)
            this:set_current_folder(this);
            endif
            endif
            endfor
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@subscribe*-quick @unsubscribed*-quick</NAME>
          <CODE>
            "@subscribe *&lt;folder/mailing_list&gt; [with notification] [before|after *&lt;folder&gt;]";
            "  causes you to be notified when new mail arrives on this list";
            "@subscribe";
            "  just lists available mailing lists.";
            "@unsubscribed";
            "  prints out available mailing lists you aren't already subscribed to.";
            "@subscribe-quick and @unsubscribed-quick";
            "  prints out same as above except without mail list descriptions, just names.";
            set_task_perms(player);
            quick = 0;
            if (qi = index(verb, "-q"))
            verb = verb[1..qi - 1];
            quick = 1;
            endif
            fname = {@args, 0}[1];
            if (!fname)
            ml = $list_utils:slice(this.current_message[3..$]);
            all_mlists = {@$mail_agent.contents, @this.mail_lists};
            if ((length(all_mlists) &gt; 50) &amp;&amp; (!$command_utils:yes_or_no(tostr("There are ", length(all_mlists), " mailing lists.  Are you sure you want the whole list?"))))
            return player:tell("OK, aborting.");
            endif
            for c in (all_mlists)
            $command_utils:suspend_if_needed(0);
            if ((c:is_usable_by(this) || c:is_readable_by(this)) &amp;&amp; ((verb != "@unsubscribed") || (!(c in ml))))
            c:look_self(quick);
            endif
            endfor
            player:notify(tostr("-------- end of ", verb, " -------"));
            return;
            elseif (verb == "@unsubscribed")
            player:notify("@unsubscribed does not take arguments.");
            return;
            elseif ($mail_agent:match_failed(folder = $mail_agent:match_recipient(fname), fname))
            return;
            elseif (folder == this)
            player:notify("You don't need to @subscribe to yourself");
            return;
            elseif ($object_utils:isa(folder, $mail_recipient) ? !folder:is_readable_by(this) | (!$perm_utils:controls(this, folder)))
            player:notify("That mailing list is not readable by you.");
            return;
            endif
            notification = this in folder.mail_notify;
            i = 0;
            beforeafter = 0;
            while (length(args) &gt;= 2)
            if (length(args) &lt; 3)
            player:notify(args[2] + " what?");
            return;
            elseif (args[2] in {"with", "without"})
            with = args[2] == "with";
            if (index("notification", args[3]) != 1)
            player:notify(tostr("with ", args[3], "?"));
            return;
            elseif (!$object_utils:isa(folder, $mail_recipient))
            player:notify(tostr("You cannot use ", verb, " to change mail notification from a non-$mail_recipient."));
            elseif ((!with) == (!notification))
            "... nothing to do...";
            elseif (with)
            if (this in folder:add_notify(this))
            notification = 1;
            else
            player:notify("This mail recipient does not allow immediate notification.");
            endif
            else
            folder:delete_notify(this);
            notification = 0;
            endif
            elseif (args[2] in {"before", "after"})
            if (beforeafter)
            player:notify((args[2] == beforeafter) ? tostr("two `", beforeafter, "'s?") | "Only use one of `before' or `after'");
            return;
            elseif ($mail_agent:match_failed(other = $mail_agent:match_recipient(args[3]), args[3]))
            return;
            elseif (other == this)
            i = 2;
            elseif (!(i = $list_utils:iassoc(other, this.current_message)))
            player:notify(tostr("You aren't subscribed to ", $mail_agent:name(other), "."));
            return;
            endif
            beforeafter = args[2];
            i = i - (beforeafter == "before");
            if (this:mail_option("rn_order") != "fixed")
            player:notify("Warning:  Do `@mail-option rn_order=fixed' if you do not want your @rn listing reordered when you next login.");
            endif
            endif
            args[2..3] = {};
            endwhile
            this:make_current_message(folder, @i ? {i} | {});
            len = folder:length_all_msgs();
            player:notify(tostr($mail_agent:name(folder), " has ", len, " message", (len == 1) ? "" | "s", ".", notification ? "  You will be notified immediately when new messages are posted." | "  Notification of new messages will be printed when you connect."));
            this:set_current_folder(folder);
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>mail_catch_up</NAME>
          <CODE>
            set_task_perms((caller == this) ? this.owner | caller_perms());
            this:set_current_folder(this);
            dates = new_cm = head = {};
            sort = this:mail_option("rn_order") || "read";
            for n in (this.current_message)
            $command_utils:suspend_if_needed(0);
            if (typeof(n) != LIST)
            head = {@head, n};
            elseif ($object_utils:isa(folder = n[1], $mail_recipient) &amp;&amp; folder:is_readable_by(this))
            "...set current msg to be the last one you could possibly have read.";
            if (n[3] &lt; folder.last_msg_date)
            i = folder:length_date_le(n[3]);
            n[2] = i &amp;&amp; folder:messages_in_seq(i)[1];
            endif
            if (sort == "fixed")
            new_cm = {n, @new_cm};
            elseif (sort == "send")
            j = $list_utils:find_insert(dates, folder.last_msg_date - 1);
            dates = listinsert(dates, folder.last_msg_date, j);
            new_cm = listinsert(new_cm, n, j);
            else
            new_cm = listappend(new_cm, n, $list_utils:iassoc_sorted(n[3] - 1, new_cm, 3));
            endif
            endif
            endfor
            this.current_message = {@head, @$list_utils:reverse(new_cm)};
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="none" PREP="none" IOBJ="none">
          <NAME>@rn check_mail_lists @subscribed @rn-full</NAME>
          <CODE>
            set_task_perms((caller == this) ? this.owner | caller_perms());
            which = {};
            cm = this.current_message;
            cm[1..2] = ((verb == "@rn") || (verb == "@rn-full")) ? {{this, @cm[1..2]}} | {};
            all = verb == "@subscribed";
            fast = this:mail_option("fast_check") &amp;&amp; (verb != "@rn-full");
            for n in (cm)
            rcpt = n[1];
            if (rcpt == $news)
            "... $news is handled separately ...";
            elseif ($mail_agent:is_recipient(rcpt))
            if (fast)
            if (rcpt == this)
            nmsgs = ((m = this.messages) &amp;&amp; (m[length(m)][2][1] &gt; n[3])) ? $maxint | 0;
            else
            try
            nmsgs = (n[1].last_msg_date &gt; n[3]) ? $maxint | 0;
            except (E_PERM, E_PROPNF)
            player:notify(tostr("Bogus recipient ", rcpt, " removed from .current_message."));
            this.current_message = setremove(this.current_message, n);
            nmsgs = 0;
            endtry
            endif
            else
            nmsgs = n[1]:length_date_gt(n[3]);
            endif
            if (nmsgs || all)
            which = {@which, {n[1], nmsgs}};
            endif
            else
            player:notify(tostr("Bogus recipient ", rcpt, " removed from .current_message."));
            this.current_message = setremove(this.current_message, n);
            endif
            $command_utils:suspend_if_needed(0);
            endfor
            if (which)
            player:notify(tostr((verb == "@subscribed") ? "You are subscribed to the following" | "There is new activity on the following", (length(which) &gt; 1) ? " lists:" | " list:"));
            for w in (which)
            name = (w[1] == this) ? " me" | $mail_agent:name(w[1]);
            player:notify(tostr($string_utils:left("    " + name, 40), " ", (w[2] == $maxint) ? "has" | w[2], " new message", (w[2] == 1) ? "" | "s"));
            $command_utils:suspend_if_needed(0);
            endfor
            if (verb != "check_mail_lists")
            player:notify("-- End of listing");
            endif
            elseif ((verb == "@rn") || (verb == "@rn-full"))
            player:notify("No new activity on any of your lists.");
            elseif (verb == "@subscribed")
            player:notify("You aren't subscribed to any mailing lists.");
            endif
            return which;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>mail_option</NAME>
          <CODE>
            ":mail_option(name)";
            "Returns the value of the specified mail option";
            if ((caller in {this, $mail_editor, $mail_agent}) || $perm_utils:controls(caller_perms(), this))
            return $mail_options:get(this.mail_options, args[1]);
            else
            return E_PERM;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@unsub*scribe</NAME>
          <CODE>
            "@unsubscribe [*&lt;folder/mailing_list&gt; ...]";
            "entirely removes the record of your current message for the named folders,";
            "indicating your disinterest in anything that might appear there in the future.";
            set_task_perms(player);
            unsubscribed = {};
            current_folder = this:current_folder();
            for a in (args || {0})
            if (a != 0)
            folder = $mail_agent:match_recipient(a);
            if (folder == $failed_match)
            folder = this:my_match_object(a);
            endif
            else
            folder = current_folder;
            endif
            if (!valid(folder))
            "...bogus folder name...  try removing it anyway.";
            if (this:kill_current_message(folder))
            player:notify("Invalid folder, but found it subscribed anyway.  Removed.");
            else
            $mail_agent:match_failed(folder, a);
            endif
            elseif (folder == this)
            player:notify(tostr("You can't ", verb, " yourself."));
            else
            if (!this:kill_current_message(folder))
            player:notify(tostr("You weren't subscribed to ", $mail_agent:name(folder)));
            if ($object_utils:isa(folder, $mail_recipient))
            result = folder:delete_notify(this);
            if ((typeof(result) == LIST) &amp;&amp; (result[1] == this))
            player:notify("Removed you from the mail notifications list.");
            endif
            endif
            else
            unsubscribed = {@unsubscribed, folder};
            if ($object_utils:isa(folder, $mail_recipient))
            folder:delete_notify(this);
            endif
            endif
            endif
            endfor
            if (unsubscribed)
            player:notify(tostr("Forgetting about ", $string_utils:english_list($list_utils:map_arg($mail_agent, "name", unsubscribed))));
            if (current_folder in unsubscribed)
            this:set_current_folder(this);
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>send_self_netmail</NAME>
          <CODE>
            ":send_self_netmail(msg [ ,from ])";
            "return 0 if successful, otherwise error.";
            if (!$perm_utils:controls(caller_perms(), this))
            return E_PERM;
            elseif (error = $network:invalid_email_address($wiz_utils:get_email_address(this)))
            return "Invalid email address: " + error;
            else
            msg = args[1];
            if (length(args) &gt; 1)
            from = args[2];
            this:notify(tostr("Receiving mail from ", from:title(), " (", from, ") and forwarding it to your .email_address."));
            endif
            oplayer = player;
            player = this;
            error = $network:sendmail($wiz_utils:get_email_address(this), @msg);
            if (error &amp;&amp; (length(args) &gt; 1))
            this:notify(tostr("Mail sending failed: ", error));
            endif
            player = oplayer;
            return error;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@netforw*ard</NAME>
          <CODE>
            "@netforward &lt;msg&gt;...                  -- as in help on @netforward";
            "@netforward &lt;msg&gt;... on *&lt;recipient&gt;  -- netforwards messages on recipient.";
            "This command forwards mail-messages to your registered email-address.";
            if (player != this)
            return player:tell(E_PERM);
            endif
            if (reason = $network:email_will_fail(email = $wiz_utils:get_email_address(player)))
            return player:notify(tostr("Cannot forward mail to your email address: ", reason));
            endif
            set_task_perms(valid(cp = caller_perms()) ? cp | player);
            if (p = player:parse_mailread_cmd(verb, args, "", "on"))
            player:set_current_folder(folder = p[1]);
            msg_seq = p[2];
            folderstr = (folder == player) ? "" | tostr(" from ", $mail_agent:name(folder));
            if ((!this:mail_option("expert_netfwd")) &amp;&amp; (!$command_utils:yes_or_no(tostr("You are about to forward ", seq_size = $seq_utils:size(msg_seq), " message(s)", folderstr, " to your registered email-address, ", email, ".  Continue?"))))
            player:notify(tostr("@Netforward cancelled."));
            return;
            endif
            player:notify("Attempting to send network mail...");
            player._mail_task = task_id();
            multiple_vals = this:format_for_netforward(folder:messages_in_seq(msg_seq), folderstr);
            netmail = multiple_vals[1];
            header = multiple_vals[2];
            reason = player:send_self_netmail({header, @netmail});
            player:notify((reason == 0) ? tostr("@netforward of ", header, " completed.") | tostr("@netforward failed: ", reason, "."));
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@@sendmail</NAME>
          <CODE>
            "Syntax: @@sendmail";
            "This is intended for use with client editors.  You probably don't want to try using this command manually.";
            "Reads a formatted mail message, extracts recipients, subject line and/or reply-to header and sends message without going to the mailroom.  Example:";
            "";
            "@@send";
            "To: Rog (#4292)";
            "Subject: random";
            "";
            "first line";
            "second line";
            ".";
            "";
            "Currently, header lines must have the same format as in an actual message.";
            set_task_perms(player);
            if (args)
            player:notify(tostr("The ", verb, " command takes no arguments."));
            $command_utils:read_lines();
            return;
            elseif (this != player)
            player:notify(tostr("You can't use ", this.pp, " ", verb, " verb."));
            $command_utils:read_lines();
            return;
            endif
            msg = $command_utils:read_lines();
            end_head = ("" in msg) || (length(msg) + 1);
            from = this;
            subject = "";
            replyto = "";
            rcpts = {};
            body = msg[end_head + 1..$];
            for i in [1..end_head - 1]
            line = msg[i];
            if (index(line, "Subject:") == 1)
            subject = $string_utils:trim(line[9..$]);
            elseif (index(line, "To:") == 1)
            if (!(rcpts = $mail_agent:parse_address_field(line)))
            player:notify("No recipients found in To: line");
            return;
            endif
            elseif (index(line, "Reply-to:") == 1)
            if ((!(replyto = $mail_agent:parse_address_field(line))) &amp;&amp; $string_utils:trim(line[10..$]))
            player:notify("No address found in Reply-to: line");
            return;
            endif
            elseif (index(line, "From:") == 1)
            "... :send_message() bombs if designated sender != player ...";
            if (!(from = $mail_agent:parse_address_field(line)))
            player:notify("No sender found in From: line");
            return;
            elseif (length(from) &gt; 1)
            player:notify("Multiple senders?");
            return;
            endif
            from = from[1];
            elseif (i = index(line, ":"))
            player:notify(tostr("Unknown header \"", line[1..i], "\""));
            return;
            else
            player:notify("Blank line must separate headers from body.");
            return;
            endif
            endfor
            if (!rcpts)
            player:notify("No To: line found.");
            elseif (!(subject || body))
            player:notify("Blank message not sent.");
            else
            player:notify("Sending...");
            result = $mail_agent:send_message(from, rcpts, replyto ? subject | {subject, replyto}, body);
            if (e = result &amp;&amp; result[1])
            if (length(result) == 1)
            player:notify("Mail actually went to no one.");
            else
            player:notify(tostr("Mail actually went to ", $mail_agent:name_list(@listdelete(result, 1)), "."));
            endif
            else
            player:notify(tostr((typeof(e) == ERR) ? e | ("Bogus recipients:  " + $string_utils:from_list(result[2]))));
            player:notify("Mail not sent.");
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@keep-m*ail @keepm*ail</NAME>
          <CODE>
            "@keep-mail [&lt;msg-sequence&gt;|none] [on &lt;recipient&gt;]";
            "marks the indicated messages as `kept'.";
            set_task_perms(valid(cp = caller_perms()) ? cp | player);
            if (!args)
            return player:notify("Usage:  @keep-mail [&lt;msg-sequence&gt;|none] [on &lt;recipient&gt;]");
            elseif (args[1] == "none")
            args[1..1] = {};
            if (!(pfs = this:parse_folder_spec(verb, args, "on", 0)))
            return;
            elseif (pfs[2])
            player:notify(tostr(verb, " &lt;message-sequence&gt; or `none', but not both."));
            return;
            endif
            this:set_current_folder(folder = pfs[1]);
            if (e = folder:keep_message_seq({}))
            player:notify(tostr("Messages on ", $mail_agent:name(folder), " are no longer marked as kept."));
            else
            player:notify(tostr(e));
            endif
            return;
            elseif (p = this:parse_mailread_cmd(verb, args, "", "on"))
            if ((folder = p[1]) != this)
            "... maybe I'll take this clause out some day...";
            player:notify(tostr(verb, " can only be used on your own mail collection."));
            return;
            endif
            this:set_current_folder(folder);
            if (e = folder:keep_message_seq(msg_seq = p[2]))
            player:notify(tostr("Message", match(e, "[.,]") ? "s " | " ", e, " now marked as kept."));
            elseif (typeof(e) == ERR)
            player:notify(tostr(e));
            else
            player:notify(tostr(((seq_size = $seq_utils:size(msg_seq)) == 1) ? "That message is" | "Those messages are", " already marked as kept."));
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>my_match_recipient</NAME>
          <CODE>
            ":my_match_recipient(string) =&gt; matches string against player's private mailing lists.";
            if (!(string = args[1]))
            return $nothing;
            elseif (string[1] == "*")
            string = string[2..$];
            endif
            return $string_utils:match(string, this.mail_lists, "aliases");
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>expire_old_messages</NAME>
          <CODE>
            set_task_perms(caller_perms());
            if (!$perm_utils:controls(caller_perms(), this))
            return E_PERM;
            else
            seq = this:expirable_msg_seq();
            if (seq)
            this:rm_message_seq(seq);
            return this:expunge_rmm();
            else
            return 0;
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>msg_full_text</NAME>
          <CODE>
            ":msg_full_text(@msg) =&gt; list of strings.";
            "msg is a mail message (in the usual transmission format).";
            "display_seq_full calls this to obtain the actual list of strings to display.";
            return player:msg_text(@args);
            "default is to leave it up to the player how s/he wants it to be displayed.";
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@resend</NAME>
          <CODE>
            "@resend &lt;msg&gt; [on *&lt;recipient&gt;] to &lt;recipient&gt; [&lt;recipient&gt;...]";
            set_task_perms(valid(caller_perms()) ? caller_perms() | player);
            "...";
            "... parse command...";
            "...";
            if (!(p = this:parse_mailread_cmd(verb, args, "", "on", 1)))
            "...lose...";
            return;
            elseif ($seq_utils:size(sequence = p[2]) != 1)
            player:notify("You can only resend *one* message at a time.");
            return;
            elseif ((length(p[4]) &lt; 2) || (p[4][1] != "to"))
            player:notify(tostr("Usage:  ", verb, " [&lt;message&gt;] [on &lt;folder&gt;] to &lt;recip&gt;..."));
            return;
            endif
            recips = {};
            for rs in (listdelete(p[4], 1))
            if ($mail_agent:match_failed(r = $mail_agent:match_recipient(rs), rs))
            return;
            endif
            recips = {@recips, r};
            endfor
            this:set_current_folder(folder = p[1]);
            "...";
            "... retrieve original message...";
            "...";
            {msgnum, msgtxt} = folder:messages_in_seq(sequence)[1];
            if (forward_style = this:mail_option("resend_forw"))
            "...message will be from player...";
            pmh = $mail_agent:parse_misc_headers(msgtxt, "Reply-To", "Original-Date", "Original-From");
            orig_from = pmh[3][3] || msgtxt[2];
            else
            "...message will be from author...";
            pmh = $mail_agent:parse_misc_headers(msgtxt, "Reply-To", "Original-Date", "Original-From", "Resent-By", "Resent-To");
            orig_from = pmh[3][3];
            from = $mail_agent:parse_address_field(msgtxt[2])[1];
            to = $mail_agent:parse_address_field(msgtxt[3]);
            endif
            "...";
            "... report bogus headers...";
            "...";
            if (bogus = pmh[2])
            player:notify("Bogus headers stripped from original message:");
            for b in (bogus)
            player:notify("  " + b);
            endfor
            if (!$command_utils:yes_or_no("Continue?"))
            player:notify("Message not resent.");
            return;
            endif
            endif
            "...";
            "... subject, replyto, original-date, original-from ...";
            "...";
            hdrs = {msgtxt[4], pmh[3][1], {"Original-Date", pmh[3][2] || ctime(msgtxt[1])}, @orig_from ? {{"Original-From", orig_from}} | {}, @pmh[1]};
            "...";
            "... send it ...";
            "...";
            if (forward_style)
            result = $mail_agent:send_message(player, recips, hdrs, pmh[4]);
            else
            "... resend inserts resent-to and resent-by...";
            result = $mail_agent:resend_message(player, recips, from, to, hdrs, pmh[4]);
            endif
            "...";
            "... report outcome...";
            "...";
            if (!result)
            player:notify(tostr(result));
            elseif (result[1])
            player:notify(tostr("Message ", msgnum, @(folder == this) ? {} | {" on ", $mail_agent:name(folder)}, " @resent to ", $mail_agent:name_list(@listdelete(result, 1)), "."));
            else
            player:notify("Message not resent.");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>make_current_message_new</NAME>
          <CODE>
            ":make_current_message(recipient[,index])";
            "starts a new current_message record for recipient.";
            "index, if given, indicates where recipient is to be";
            "  placed (n = at or after nth entry in .current_message).";
            recip = args[1];
            cm = this.current_message;
            if (length(args) &gt; 1)
            i = max(2, min(args[2], length(cm)));
            else
            i = 0;
            endif
            if ((caller != this) &amp;&amp; (!$perm_utils:controls(caller_perms(), this)))
            raise(E_PERM);
            elseif (recip == this)
            "...self...";
            elseif (j = $list_utils:iassoc(recip, cm))
            "...already present...";
            if (i)
            if (j &lt; i)
            this.current_message = {@cm[1..j - 1], @cm[j + 1..i], cm[j], @cm[i + 1..$]};
            elseif (j &gt; (i + 1))
            this.current_message = {@cm[1..i], cm[j], @cm[i + 1..j - 1], @cm[j + 1..$]};
            endif
            endif
            else
            this.current_message = listappend(cm, {recip, 0, 0}, @i ? {i} | {});
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>expirable_msg_seq</NAME>
          <CODE>
            "Return a sequence indicating the expirable messages for this player.";
            set_task_perms(caller_perms());
            if (!$perm_utils:controls(caller_perms(), this))
            return E_PERM;
            elseif (!(curmsg = this:get_current_message(this)))
            "No messages!  Don't even try.";
            return {};
            elseif (0 &gt;= (period = this:mail_option("expire") || $mail_agent.player_expire_time))
            "...no expiration allowed here...";
            return {};
            else
            return $seq_utils:remove(this:unkept_msg_seq(), 1 + this:length_date_le(min(time() - period, curmsg[2] - 86400)));
            "... the 86400 is pure fudge...";
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>format_for_netforward</NAME>
          <CODE>
            "Takes a message sequence (the actual messages, not just the sequence describing it) and grovels over it filling text etc.  Returns a two valued list: {formatted message, header for same}";
            set_task_perms(caller_perms());
            {message_seq, folderstr} = args;
            netmail = {};
            linelen = this:linelen();
            maxmsg = minmsg = 0;
            for msg in (message_seq)
            minmsg = minmsg ? min(msg[1], minmsg) | msg[1];
            maxmsg = maxmsg ? max(msg[1], maxmsg) | msg[1];
            lines = {tostr("Message ", msg[1], folderstr, ":"), tostr("Date:     ", ctime(msg[2][1])), "From:     " + msg[2][2], "To:       " + msg[2][3], @(length(subj = msg[2][4]) &gt; 1) ? {"Subject:  " + subj} | {}};
            for line in (msg[2][5..$])
            if (typeof(line) != STR)
            "I don't know how this can happen, but apparently non-strings can end up in the mail message.  So, cope.";
            line = tostr(line);
            endif
            lines = {@lines, @$generic_editor:fill_string(line, linelen)};
            $command_utils:suspend_if_needed(0);
            endfor
            netmail = {@netmail, @lines, "", "--------------------------", "", ""};
            endfor
            header = tostr($network.MOO_name, " Message(s) ", minmsg, @(minmsg != maxmsg) ? {" - ", maxmsg} | {}, folderstr);
            return {netmail, header};
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>format_for_netforward_debug</NAME>
          <CODE>
            "Takes a message sequence (the actual messages, not just the sequence describing it) and grovels over it filling text etc.  Returns a two valued list: {formatted message, header for same}";
            set_task_perms(caller_perms());
            {message_seq, folderstr} = args;
            netmail = {};
            linelen = this:linelen();
            maxmsg = minmsg = 0;
            for msg in (message_seq)
            minmsg = minmsg ? min(msg[1], minmsg) | msg[1];
            maxmsg = maxmsg ? max(msg[1], maxmsg) | msg[1];
            lines = {tostr("Message ", msg[1], folderstr, ":"), tostr("Date:     ", ctime(msg[2][1])), "From:     " + msg[2][2], "To:       " + msg[2][3], @(length(subj = msg[2][4]) &gt; 1) ? {"Subject:  " + subj} | {}};
            for line in (msg[2][5..$])
            if (typeof(line) != STR)
            "I don't know how this can happen, but apparently non-strings can end up in the mail message.  So, cope.";
            line = tostr(line);
            endif
            lines = {@lines, @$generic_editor:fill_string(line, linelen)};
            $command_utils:suspend_if_needed(0);
            endfor
            netmail = {@netmail, @lines, "", "--------------------------", "", ""};
            endfor
            header = tostr($network.MOO_name, " Message(s) ", minmsg, @(minmsg != maxmsg) ? {" - ", maxmsg} | {}, folderstr);
            return {netmail, header};
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="none" PREP="none" IOBJ="none">
          <NAME>@nn</NAME>
          <CODE>
            "@nn  -- reads the first new message on the first mail_recipient (in .current_message) where new mail exists.";
            set_task_perms(valid(cp = caller_perms()) ? cp | player);
            cm = this.current_message;
            cm[1..2] = {{this, @cm[1..2]}};
            for n in (cm)
            if ($mail_agent:is_recipient(n[1]))
            if (new = n[1]:length_date_gt(n[3]))
            next = (n[1]:length_all_msgs() - new) + 1;
            this:set_current_folder(folder = n[1]);
            this._mail_task = task_id();
            cur = folder:display_seq_full({next, next + 1}, tostr("Message %d", " on ", $mail_agent:name(folder), ":"));
            this:set_current_message(folder, @cur);
            return;
            endif
            else
            player:notify(tostr("Bogus recipient ", n[1], " removed from .current_message."));
            this.current_message = setremove(this.current_message, n);
            endif
            endfor
            player:tell("No News (is good news)");
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@unread</NAME>
          <CODE>
            "@unread &lt;msg&gt; [on *&lt;recipient&gt;]  -- resets last-read-date for recipient to just before the first of the indicated messages.";
            set_task_perms(player);
            if (p = this:parse_mailread_cmd("@unread", args, "cur", "on"))
            this:set_current_folder(folder = p[1]);
            msg_ord = $seq_utils:first(msg_seq = p[2]);
            msgdate = folder:messages_in_seq(msg_ord)[2][1] - 1;
            if ((!(cm = this:get_current_message(folder))) || (cm[2] &lt; msgdate))
            player:notify("Already unread.");
            else
            if (folder == this)
            this.current_message[2] = msgdate - 1;
            else
            this:kill_current_message(folder);
            this:set_current_message(folder, cm[1], min(cm[2], msgdate));
            endif
            folder:display_seq_headers({msg_ord, msg_ord + 1}, cm[1], msgdate);
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@refile @copym*ail</NAME>
          <CODE>
            "@refile/@copym*ail &lt;msg-sequence&gt; [on &lt;recipient&gt;] to &lt;recipient&gt;";
            "@refile will delete the messages from the source folder.  @copym does not.";
            "I'm not happy with this one, yet...";
            set_task_perms(player);
            if (!(p = this:parse_mailread_cmd("@refile", args, "cur", "on", 1)))
            "...lose...";
            elseif ((length(p[4]) != 2) || (p[4][1] != "to"))
            player:notify(tostr("Usage:  ", verb, " [&lt;message numbers&gt;] [on &lt;folder&gt;] to &lt;folder&gt;"));
            elseif ($mail_agent:match_failed(dest = $mail_agent:match_recipient(p[4][2]), p[4][2]))
            "...bogus destination folder...";
            else
            source = p[1];
            msg_seq = p[2];
            for m in (source:messages_in_seq(msg_seq))
            if (!(e = dest:receive_message(m[2], source)))
            player:notify(tostr("Copying msg. ", m[1], ":  ", e));
            return;
            endif
            $command_utils:suspend_if_needed(0);
            endfor
            if (refile = verb == "@refile")
            if (typeof(e = source:rm_message_seq(msg_seq)) == ERR)
            player:notify(tostr("Deleting from ", source, ":  ", e));
            endif
            endif
            count = tostr(n = $seq_utils:size(msg_seq), " message", (n == 1) ? "" | "s");
            fname = (source == this) ? "" | tostr(is_player(source) ? " from " | " from *", source.name, "(", source, ")");
            suffix = tostr(is_player(dest) ? " to " | " to *", dest.name, "(", dest, ").");
            player:notify(tostr(refile ? "Refiled " | "Copied ", count, fname, suffix));
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@quickr*eply @qreply</NAME>
          <CODE>
            "@qreply &lt;msg&gt; [on *&lt;recipient&gt;] [&lt;flags&gt;...]";
            "like @reply only, as in @qsend, we prompt for the message text using ";
            "$command_utils:read_lines() rather than invoking the $mail_editor.";
            set_task_perms(who = valid(cp = caller_perms()) ? cp | player);
            if (!(p = this:parse_mailread_cmd(verb, args, "cur", "on", 1)))
            "...garbled...";
            elseif ($seq_utils:size(p[2]) != 1)
            player:notify("You can only answer *one* message at a time.");
            elseif (LIST != typeof(flags_replytos = $mail_editor:check_answer_flags("noinclude", @p[4])))
            player:notify_lines({tostr("Usage:  ", verb, " [message-# [on &lt;recipient&gt;]] [flags...]"), "where flags include any of:", "  all        reply to everyone", "  sender     reply to sender only", tostr("  include    include the original message in reply (can't do this for ", verb, ")"), "  noinclude  don't include the original in your reply"});
            elseif ("include" in flags_replytos[1])
            player:notify(tostr("Can't include message on a ", verb));
            else
            this:set_current_folder(p[1]);
            if (to_subj = $mail_editor:parse_msg_headers(p[1]:messages_in_seq(p[2])[1][2], flags_replytos[1]))
            player:notify(tostr("To:       ", $mail_agent:name_list(@to_subj[1])));
            if (to_subj[2])
            player:notify(tostr("Subject:  ", to_subj[2]));
            endif
            if (replytos = flags_replytos[2])
            player:notify(tostr("Reply-to: ", $mail_agent:name_list(@replytos)));
            endif
            hdrs = {to_subj[2], replytos || {}};
            player:notify("Enter lines of message:");
            message = $command_utils:read_lines_escape((active = player in $mail_editor.active) ? {} | {"@edit"}, {tostr("You are composing mail to ", $mail_agent:name_list(@to_subj[1]), "."), @active ? {} | {"Type `@edit' to take this into the mail editor."}});
            if (typeof(message) == ERR)
            player:notify(tostr(message));
            elseif (message[1] == "@edit")
            $mail_editor:invoke(1, verb, to_subj[1], @hdrs, message[2]);
            elseif (!message[2])
            player:notify("Blank message not sent.");
            else
            result = $mail_agent:send_message(this, to_subj[1], hdrs, message[2]);
            if (result &amp;&amp; result[1])
            player:notify(tostr("Message sent to ", $mail_agent:name_list(@listdelete(result, 1)), "."));
            else
            player:notify("Message not sent.");
            endif
            endif
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="none" PREP="none" IOBJ="none">
          <NAME>@mail-all-new*-mail</NAME>
          <CODE>
            "@mail-all-new-mail";
            " Prints headers for all new mail on every mail-recipient mentioned in .current_message.";
            set_task_perms(valid(cp = caller_perms()) ? cp | player);
            cm = this.current_message;
            cm[1..2] = {{this, @cm[1..2]}};
            this._mail_task = task_id();
            nomail = 1;
            new_cms = {};
            for f in (cm)
            if (!($object_utils:isa(folder = f[1], $player) || $object_utils:isa(folder, $mail_recipient)))
            player:notify(tostr(folder, " is neither a $player nor a $mail_recipient"));
            elseif (typeof(flen = folder:length_all_msgs()) == ERR)
            player:notify(tostr($mail_agent:name(folder), " ", flen));
            elseif (msg_seq = $seq_utils:range(folder:length_date_le(f[3]) + 1, flen))
            nomail = 0;
            player:notify("===== " + $string_utils:left(tostr($mail_agent:name(folder), " (", s = $seq_utils:size(msg_seq), " message", (s == 1) ? ") " | "s) "), 40, "="));
            folder:display_seq_headers(msg_seq, @f[2..3]);
            player:notify("");
            $command_utils:suspend_if_needed(2);
            endif
            endfor
            if (nomail)
            player:notify("You don't have any new mail anywhere.");
            else
            player:notify("===== " + $string_utils:left("End of new mail ", 40, "="));
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
          <NAME>@read-all-new*-mail @ranm</NAME>
          <CODE>
            "@read-all-new-mail [yes]";
            " Prints all new mail on every mail-recipient mentioned in .current_message";
            " Generally this will spam you into next Tuesday.";
            " You will be queried for whether you want your last-read dates updated";
            "   but you can specify \"yes\" on the command line to suppress this.";
            "   If you do so, last-read dates will be updated after each folder read.";
            set_task_perms(valid(cp = caller_perms()) ? cp | player);
            noconfirm = args &amp;&amp; ("yes" in args);
            cm = this.current_message;
            cm[1..2] = {{this, @cm[1..2]}};
            this._mail_task = task_id();
            nomail = 1;
            new_cms = {};
            for f in (cm)
            if (!($object_utils:isa(folder = f[1], $player) || $object_utils:isa(folder, $mail_recipient)))
            player:notify(tostr(folder, " is neither a $player nor a $mail_recipient"));
            elseif (typeof(flen = folder:length_all_msgs()) == ERR)
            player:notify(tostr($mail_agent:name(folder), " ", flen));
            elseif (msg_seq = $seq_utils:range(folder:length_date_le(f[3]) + 1, flen))
            nomail = 0;
            player:notify("===== " + $string_utils:left(tostr($mail_agent:name(folder), " (", s = $seq_utils:size(msg_seq), " message", (s == 1) ? ") " | "s) "), 40, "="));
            player:notify("");
            if (cur = folder:display_seq_full(msg_seq, tostr("Message %d", (folder == this) ? "" | (" on " + $mail_agent:name(folder)), ":")))
            if (noconfirm)
            this:set_current_message(folder, @cur);
            this:set_current_folder(folder);
            else
            new_cms = {@new_cms, {folder, @cur}};
            endif
            player:notify("");
            endif
            endif
            $command_utils:suspend_if_needed(1);
            this._mail_task = task_id();
            endfor
            if (nomail)
            player:notify("You don't have any new mail anywhere.");
            elseif (player:notify("===== " + $string_utils:left("End of new mail ", 40, "=")) || (noconfirm || $command_utils:yes_or_no("Did you get all of that?")))
            for n in (new_cms)
            this:set_current_message(@n);
            this:set_current_folder(n[1]);
            endfor
            player:notify("Last-read-dates updated");
            else
            player:notify("Last-read-dates not updated");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
          <NAME>@quick*send @qsend</NAME>
          <CODE>
            "Syntax: @quicksend &lt;recipients(s)&gt; [subj=&lt;text&gt;] [&lt;message&gt;]";
            "Sends the recipients(s) a quick message, wit{out having to go to the mailroom. If there is more than one recipients, place them all in quotes. If the subj contains spaces, place it in quotes.";
            "To put line breaks in the message, use a caret (^).";
            "If no message is given, prompt for lines of message.";
            "Examples:";
            "@quicksend Alice subj=\"Wonderland is neat!\" Have you checked out the Wonderland scenario yet? I think you'd like it!";
            "@quicksend \"Ethel Fred\" Have you seen Lucy around?^--Ricky";
            set_task_perms($object_utils:isa(player, $guest) ? player.owner | player);
            if (!args)
            player:notify(tostr("Usage: ", verb, " &lt;recipients(s)&gt; [subj=&lt;text&gt;] [&lt;message&gt;]"));
            return E_INVARG;
            elseif (this != player)
            player:notify(tostr("You can't use ", this.pp, " @quicksend verb."));
            return E_PERM;
            elseif (!(recipients = $mail_editor:parse_recipients({}, $string_utils:explode(args[1]))))
            return;
            else
            if ((length(args) &gt; 1) &amp;&amp; ((eq = index(args[2], "=")) &amp;&amp; (index("subject", args[2][1..eq - 1]) == 1)))
            subject = $string_utils:trim(args[2][eq + 1..$]);
            ws = $string_utils:word_start(argstr);
            argstr = argstr[1..ws[1][2]] + argstr[ws[2][2] + 1..$];
            args = listdelete(args, 2);
            else
            subject = "";
            endif
            if (length(args) &gt; 1)
            unbroken = argstr[(argstr[1] == "\"") ? length(args[1]) + 4 | (length(args[1]) + 2)..$] + "^";
            message = {};
            while (unbroken)
            if (i = index(unbroken, "^"))
            message = {@message, unbroken[1..i - 1]};
            endif
            unbroken = unbroken[i + 1..$];
            endwhile
            else
            if (!(subject || player:mail_option("nosubject")))
            player:notify("Subject:");
            subject = $command_utils:read();
            endif
            player:notify("Enter lines of message:");
            message = $command_utils:read_lines_escape((active = player in $mail_editor.active) ? {} | {"@edit"}, {tostr("You are composing mail to ", $mail_agent:name_list(@recipients), "."), @active ? {} | {"Type `@edit' to take this into the mail editor."}});
            if (typeof(message) == ERR)
            player:notify(tostr(message));
            return;
            elseif (message[1] == "@edit")
            $mail_editor:invoke(1, verb, recipients, subject, {}, message[2]);
            return;
            elseif (!(message[2] || subject))
            player:notify("Blank message not sent.");
            return;
            endif
            message = message[2];
            endif
            result = $mail_agent:send_message(this, recipients, subject, message);
            if (result &amp;&amp; result[1])
            player:notify(tostr("Message sent to ", $mail_agent:name_list(@listdelete(result, 1)), "."));
            else
            player:notify("Message not sent.");
            endif
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>init_for_core</NAME>
          <CODE>
            if (caller_perms().wizard)
            pass();
            this.mail_options = {};
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>confunc</NAME>
          <CODE>
            if (((valid(cp = caller_perms()) &amp;&amp; (caller != this)) &amp;&amp; (!$perm_utils:controls(cp, this))) &amp;&amp; (caller != #0))
            return E_PERM;
            endif
            nm = this:length_all_msgs() - this:length_date_le(this:get_current_message()[2]);
            if (nm)
            this:notify(tostr("You have new mail (", nm, " message", (nm == 1) ? "" | "s", ").", this:mail_option("expert") ? "" | "  Type 'help mail' for info on reading it."));
            endif
            this:mail_catch_up();
            this:check_mail_lists();
            pass(@args);
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="at/to" IOBJ="any">
          <NAME>@add-notify</NAME>
          <CODE>
            "Ideally, in order for one person to be notified that another person has new mail, both the mail recipient and the notification recipient should agree that this is an OK transfer of information.";
            "Usage:  @add-notify me to player";
            "    Sends mail to player saying that I want to be added to their mail notification property.";
            "Usage:  @add-notify player to me";
            "    Makes sure that player wants to be notified, if so, adds them to my .mail_notify property.  (Deletes from temporary record.)";
            if (this == dobj)
            target = $string_utils:match_player(iobjstr);
            if ($command_utils:player_match_failed(target, iobjstr))
            return;
            elseif (this in target.mail_notify[1])
            player:tell("You already receive notifications when ", target.name, " receives mail.");
            elseif (this in target.mail_notify[2])
            player:tell("You already asked to be notified when ", target.name, " receives mail.");
            else
            $mail_agent:send_message(player, {target}, "mail notification request", {tostr($string_utils:nn(this), " would like to receive mail notifications when you get mail."), "Please type:", tostr("  @add-notify ", this.name, " to me"), "if you wish to allow this action."});
            player:tell("Notifying ", $string_utils:nn(target), " that you would like to be notified when ", target.ps, " receives mail.");
            target.mail_notify[2] = setadd(target.mail_notify[2], this);
            endif
            elseif (this == iobj)
            target = $string_utils:match_player(dobjstr);
            if ($command_utils:player_match_failed(target, dobjstr))
            return;
            elseif (target in this.mail_notify[2])
            this.mail_notify[1] = setadd(this.mail_notify[1], target);
            this.mail_notify[2] = setremove(this.mail_notify[2], target);
            player:tell(target.name, " will be notified when you receive mail.");
            else
            player:tell("It doesn't look like ", target.name, " wants to be notified when you receive mail.");
            endif
            else
            player:tell("Usage:  @add-notify me to player");
            player:tell("        @add-notify player to me");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>mail_notify</NAME>
          <CODE>
            if ((length(this.mail_notify) &gt; 0) &amp;&amp; (typeof(this.mail_notify[1]) == LIST))
            return this.mail_notify[1];
            else
            return this.mail_notify;
            endif
          </CODE>
        </VERB>
        <OBJECT ID="obj38" FLAGS="r programmer player" OWNER="obj36" LOCATION="obj-1">
          <NAME>Everyman</NAME>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>queued_task_limit</NAME>
            <VALUE>0</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>_mail_task</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>messages_going</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>mail_lists</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>mail_notify</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>mail_forward</NAME>
            <VALUE>"Everyman ($no_one) can not receive mail."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>mail_options</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>message_keep_date</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>messages_kept</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>current_message</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>messages</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>features</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" >
            <NAME>previous_connection</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" >
            <NAME>email_address</NAME>
            <VALUE>""</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>last_disconnect_time</NAME>
            <VALUE>2147483647</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>help</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>more_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>linetask</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>linesleft</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>linebuffer</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>pagelen</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>owned_objects</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>linelen</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>current_folder</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" >
            <NAME>all_connect_places</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" >
            <NAME>last_connect_place</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>dict</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>brief</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>lines</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>page_absent_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>pq</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>pqc</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>page_origin_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>page_echo_msg</NAME>
            <VALUE>"... no one out there to see it."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>edit_options</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>last_connect_time</NAME>
            <VALUE>2147483647</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>ownership_quota</NAME>
            <VALUE>-10000</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>gender</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>prc</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>ppc</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>poc</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>psc</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>pr</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>pp</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>po</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>ps</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>home</NAME>
            <VALUE>#-1</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj2" >
            <NAME>password</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>gaglist</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>paranoid</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>display_options</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>verb_subs</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>first_connect_time</NAME>
            <VALUE>2147483647</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>size_quota</NAME>
            <VALUE>{0, 0, 919123708, 0}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj2" >
            <NAME>last_password_time</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" >
            <NAME>last_connect_attempt</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>key</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>aliases</NAME>
            <VALUE>{"Everyman", "everyone", "no_one", "noone"}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>description</NAME>
            <VALUE>"The character used for \"safe\" evals."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>object_size</NAME>
            <VALUE>{5597, 919123677}</VALUE>
          </PROPERTY>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>eval</NAME>
            <CODE>
              "eval(code)";
              "Evaluate code with $no_one's permissions (so you won't damage anything).";
              "If code does not begin with a semicolon, set this = caller (in the code to be evaluated) and return the value of the first `line' of code.  This means that subsequent lines will not be evaluated at all.";
              "If code begins with a semicolon, set this = caller and let the code decide for itself when to return a value.  This is how to do multi-line evals.";
              exp = args[1];
              if (this:bad_eval(exp))
              return E_PERM;
              endif
              set_task_perms(this);
              if (exp[1] != ";")
              return eval(tostr("this=", caller, "; return ", exp, ";"));
              else
              return eval(tostr("this=", caller, ";", exp, ";"));
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>moveto</NAME>
            <CODE>
              return 0;
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>eval_d</NAME>
            <CODE>
              ":eval_d(code)";
              "exactly like :eval except that the d flag is unset";
              "Evaluate code with $no_one's permissions (so you won't damage anything).";
              "If code does not begin with a semicolon, set this = caller (in the code to be evaluated) and return the value of the first `line' of code.  This means that subsequent lines will not be evaluated at all.";
              "If code begins with a semicolon, set this = caller and let the code decide for itself when to return a value.  This is how to do multi-line evals.";
              exp = args[1];
              if (this:bad_eval(exp))
              return E_PERM;
              endif
              set_task_perms(this);
              if (exp[1] != ";")
              return $code_utils:eval_d(tostr("this=", caller, "; return ", exp, ";"));
              else
              return $code_utils:eval_d(tostr("this=", caller, ";", exp, ";"));
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>call_verb</NAME>
            <CODE>
              "call_verb(object, verb name, args)";
              "Call verb with $no_one's permissions (so you won't damage anything).";
              "One could do this with $no_one:eval, but ick.";
              set_task_perms(this);
              return args[1]:(args[2])(@args[3]);
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>bad_eval</NAME>
            <CODE>
              ":bad_eval(exp)";
              "  Returns 1 if the `exp' is inappropriate for use by $no_one.  In particular,  if `exp' contains calls to `eval', `fork', `suspend', or `call_function' it is  bad.  Similarly, if `player' is a nonvalid object (or a child of $garbage) the  expression is considered `bad' because it is likely an attempt to anonymously  spoof.";
              "  At present, the checks for bad builtins are overzealous.  It should check  for delimited uses of the above calls, in case someone has a variable called  `prevalent'.";
              {exp} = args;
              if (((index(exp, "eval") || index(exp, "fork")) || index(exp, "suspend")) || index(exp, "call_function"))
              "Well, they had one of the evil words in here.  See if it was in a quoted  string or not -- we want to permit player:tell(\"Gentlemen use forks.\")";
              for bad in ({"eval", "fork", "suspend", "call_function"})
              tempindex = 1;
              while (l = index(exp[tempindex..$], bad, 0))
              if ($code_utils:inside_quotes(exp[1..(tempindex + l) - 1]))
              tempindex = tempindex + l;
              else
              "it's there, bad unquoted string";
              return 1;
              endif
              endwhile
              endfor
              endif
              if ((!$recycler:valid(player)) &amp;&amp; (player &gt;= #0))
              return 1;
              endif
              return 0;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>set_*</NAME>
            <CODE>
              if (!caller_perms().wizard)
              return E_PERM;
              else
              return pass(@args);
              endif
            </CODE>
          </VERB>
        </OBJECT>
        <OBJECT ID="obj89" FLAGS="f r" OWNER="obj36" LOCATION="obj-1">
          <NAME>Frand's player class</NAME>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>at_room_width</NAME>
            <VALUE>30</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>at_number</NAME>
            <VALUE>0</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>join_msg</NAME>
            <VALUE>"You join %n."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>object_port_msg</NAME>
            <VALUE>"teleports you."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>victim_port_msg</NAME>
            <VALUE>"teleports you."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>thing_arrive_msg</NAME>
            <VALUE>"%T teleports %n in."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>othing_port_msg</NAME>
            <VALUE>"%T teleports %n out."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>thing_port_msg</NAME>
            <VALUE>"You teleport %n."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>player_arrive_msg</NAME>
            <VALUE>"%T teleports %n in."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>oplayer_port_msg</NAME>
            <VALUE>"%T teleports %n out."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>player_port_msg</NAME>
            <VALUE>"You teleport %n."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>self_arrive_msg</NAME>
            <VALUE>"%&lt;teleports&gt; in."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>oself_port_msg</NAME>
            <VALUE>"%&lt;teleports&gt; out."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>self_port_msg</NAME>
            <VALUE>""</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>rooms</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>refused_origins</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>refused_extra</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>default_refusal_time</NAME>
            <VALUE>604800</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>report_refusal</NAME>
            <VALUE>0</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>refused_actions</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>refused_until</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>page_refused</NAME>
            <VALUE>0</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>page_refused_msg</NAME>
            <VALUE>"%N refuses your page."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>whisper_refused_msg</NAME>
            <VALUE>"%N refuses your whisper."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>mail_refused_msg</NAME>
            <VALUE>"%N refuses your mail."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>spurned_objects</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>_mail_task</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>messages_going</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>mail_lists</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>mail_notify</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>mail_forward</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>mail_options</NAME>
            <VALUE>{}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>message_keep_date</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>messages_kept</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>current_message</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>messages</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>features</NAME>
            <VALUE>{#91, #90}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj2" >
            <NAME>previous_connection</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" >
            <NAME>email_address</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>last_disconnect_time</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>help</NAME>
            <VALUE>#93</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>more_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>linetask</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>linesleft</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>linebuffer</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>pagelen</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>owned_objects</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>linelen</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>current_folder</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" >
            <NAME>all_connect_places</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" >
            <NAME>last_connect_place</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>dict</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>brief</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>lines</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>page_absent_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>pq</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>pqc</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>page_origin_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>page_echo_msg</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>edit_options</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>last_connect_time</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>ownership_quota</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>gender</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>prc</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>ppc</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>poc</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>psc</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>pr</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>pp</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>po</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>ps</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>home</NAME>
            <VALUE>#62</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj2" >
            <NAME>password</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>gaglist</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>paranoid</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>display_options</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>verb_subs</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>first_connect_time</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" >
            <NAME>size_quota</NAME>
            <VALUE>{50000, 0, 0, 1}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj2" >
            <NAME>last_password_time</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" >
            <NAME>last_connect_attempt</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c">
            <NAME>key</NAME>
          </PROPERTY>
          <PROPERTY OWNER="obj2" PERMS="r">
            <NAME>aliases</NAME>
            <VALUE>{"Frand's player class", "player class"}</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="c r">
            <NAME>description</NAME>
            <VALUE>"You see a player who should type '@describe me as ...'."</VALUE>
          </PROPERTY>
          <PROPERTY OWNER="obj36" PERMS="r">
            <NAME>object_size</NAME>
            <VALUE>{69378, 919123705}</VALUE>
          </PROPERTY>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="none" PREP="none" IOBJ="none">
            <NAME>@rooms</NAME>
            <CODE>
              "'@rooms' - List the rooms which are known by name.";
              line = "";
              for item in (this.rooms)
              line = (((line + item[1]) + "(") + tostr(item[2])) + ")   ";
              endfor
              player:tell(line);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>names_of</NAME>
            <CODE>
              "Return a string giving the names of the objects in a list. Now on $string_utils";
              return $string_utils:names_of(@args);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>@go</NAME>
            <CODE>
              "'@go &lt;place&gt;' - Teleport yourself somewhere. Example: '@go liv' to go to the living room.";
              dest = this:lookup_room(dobjstr);
              if (dest == $failed_match)
              player:tell("There's no such place known.");
              else
              this:teleport(player, dest);
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>lookup_room</NAME>
            <CODE>
              "Look up a room in your personal database of room names, returning its object number. If it's not in your database, it checks to see if it's a number or a nearby object.";
              room = args[1];
              if (room == "home")
              return player.home;
              elseif (room == "me")
              return player;
              elseif (room == "here")
              return player.location;
              elseif (!room)
              return $failed_match;
              endif
              index = this:index_room(room);
              if (index)
              return this.rooms[index][2];
              else
              return this:my_match_object(room);
              "old code no longer used, 2/11/96 Heathcliff";
              source = player.location;
              if (!(valid(source) &amp;&amp; ($room in $object_utils:ancestors(source))))
              source = $room;
              endif
              return source:match_object(room);
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>teleport</NAME>
            <CODE>
              "Teleport a player or object. For printing messages, there are three cases: (1) teleport self (2) teleport other player (3) teleport object. There's a spot of complexity for handling the invalid location #-1.";
              set_task_perms((caller == this) ? this | $no_one);
              {thing, dest} = args;
              source = thing.location;
              if (valid(dest))
              dest_name = dest.name;
              else
              dest_name = tostr(dest);
              endif
              if (source == dest)
              player:tell(thing.name, " is already at ", dest_name, ".");
              return;
              endif
              thing:moveto(dest);
              if (thing.location == dest)
              tsd = {thing, source, dest};
              if (thing == player)
              this:teleport_messages(@tsd, this:self_port_msg(@tsd), this:oself_port_msg(@tsd), this:self_arrive_msg(@tsd), "");
              elseif (is_player(thing))
              this:teleport_messages(@tsd, this:player_port_msg(@tsd), this:oplayer_port_msg(@tsd), this:player_arrive_msg(@tsd), this:victim_port_msg(@tsd));
              else
              this:teleport_messages(@tsd, this:thing_port_msg(@tsd), this:othing_port_msg(@tsd), this:thing_arrive_msg(@tsd), this:object_port_msg(@tsd));
              endif
              elseif (thing.location == source)
              if ($object_utils:contains(thing, dest))
              player:tell("Ooh, it's all twisty. ", dest_name, " is inside ", thing.name, ".");
              else
              if ($object_utils:has_property(thing, "po"))
              pronoun = thing.po;
              else
              pronoun = "it";
              endif
              player:tell("Either ", thing.name, " doesn't want to go, or ", dest_name, " didn't accept ", pronoun, ".");
              endif
              else
              thing_name = (thing == player) ? "you" | thing.name;
              player:tell("A strange force deflects ", thing_name, " from the destination.");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>teleport_messages</NAME>
            <CODE>
              "Send teleport messages. There's a slight complication in that the source and dest need not be valid objects.";
              {thing, source, dest, pmsg, smsg, dmsg, tmsg} = args;
              if (pmsg)
              "The player's own message.";
              player:tell(pmsg);
              endif
              if (smsg)
              `source:room_announce_all_but({thing, player}, smsg) ! E_VERBNF, E_INVIND';
              endif
              if (dmsg)
              `dest:room_announce_all_but({thing, player}, dmsg) ! E_VERBNF, E_INVIND';
              endif
              if (tmsg)
              "A message to the victim being teleported.";
              thing:tell(tmsg);
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>@move</NAME>
            <CODE>
              "'@move &lt;object&gt; to &lt;place&gt;' - Teleport an object. Example: '@move trash to #11' to move trash to the closet.";
              here = player.location;
              if ((prepstr != "to") || (!iobjstr))
              player:tell("Usage: @move &lt;object&gt; to &lt;location&gt;");
              return;
              endif
              if ((!dobjstr) || (dobjstr == "me"))
              thing = this;
              else
              thing = `here:match_object(dobjstr) ! E_VERBNF, E_INVIND =&gt; $failed_match';
              if (thing == $failed_match)
              thing = player:my_match_object(dobjstr);
              endif
              endif
              if ($command_utils:object_match_failed(thing, dobjstr))
              return;
              endif
              if ((!player.programmer) &amp;&amp; ((thing.owner != player) &amp;&amp; (thing != player)))
              player:tell("You can only move your own objects.");
              return;
              endif
              dest = this:lookup_room(iobjstr);
              if ((dest == #-1) || (!$command_utils:object_match_failed(dest, iobjstr)))
              this:teleport(thing, dest);
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>index_room</NAME>
            <CODE>
              "'index_room (&lt;room name&gt;)' - Look up a room in your personal database of room names, returning its index in the list. Return 0 if it is not in the list. If the room name is the empty string, then only exact matches are considered; otherwise, a leading match is good enough.";
              room = tostr(args[1]);
              size = length(room);
              index = 1;
              match = 0;
              for item in (this.rooms)
              item_name = item[1];
              if (room == item_name)
              return index;
              elseif ((size &amp;&amp; (length(item_name) &gt;= size)) &amp;&amp; (room == item_name[1..size]))
              match = index;
              endif
              index = index + 1;
              endfor
              return match;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>@addr*oom</NAME>
            <CODE>
              "'@addroom &lt;name&gt; &lt;object&gt;', '@addroom &lt;object&gt; &lt;name&gt;', '@addroom &lt;name&gt;', '@addroom &lt;object&gt;', '@addroom' - Add a room to your personal database of teleport destinations. Example: '@addroom Kitchen #24'. Reasonable &lt;object&gt;s are numbers (#17) and 'here'. If you leave out &lt;object&gt;, the object is the current room. If you leave out &lt;name&gt;, the name is the specified room's name. If you leave out both, you get the current room and its name.";
              if (((!caller) &amp;&amp; (player != this)) || (caller &amp;&amp; (callers()[1][3] != this)))
              if (!caller)
              player:tell(E_PERM);
              endif
              return E_PERM;
              endif
              if (!dobjstr)
              object = this.location;
              name = valid(object) ? object.name | "Nowhere";
              elseif (command = this:parse_out_object(dobjstr))
              name = command[1];
              object = command[2];
              else
              name = dobjstr;
              object = this.location;
              endif
              if (!valid(object))
              player:tell("This is not a valid location.");
              return E_INVARG;
              endif
              player:tell("Adding ", name, "(", tostr(object), ") to your database of rooms.");
              this.rooms = {@this.rooms, {name, object}};
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>@rmr*oom</NAME>
            <CODE>
              "'@rmroom &lt;roomname&gt;' - Remove a room from your personal database of teleport destinations. Example: '@rmroom library'.";
              if (((!caller) &amp;&amp; (player != this)) || (caller &amp;&amp; (callers()[1][3] != this)))
              if (!caller)
              player:tell(E_PERM);
              endif
              return E_PERM;
              endif
              index = this:index_room(dobjstr);
              if (index)
              player:tell("Removing ", this.rooms[index][1], "(", this.rooms[index][2], ").");
              this.rooms = listdelete(this.rooms, index);
              else
              player:tell("That room is not in your database of rooms. Check '@rooms'.");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>@join</NAME>
            <CODE>
              "'@join &lt;player&gt;' - Teleport yourself to the location of any player, whether connected or not.";
              if (dobjstr == "")
              player:tell("Usage: @join &lt;player&gt;. For example, '@join frand'.");
              return;
              endif
              target = $string_utils:match_player(dobjstr);
              $command_utils:player_match_result(target, dobjstr);
              if (valid(target))
              if (target == this)
              if (player == this)
              player:tell("There is little need to join yourself, unless you are split up.");
              else
              player:tell("No thank you. Please get your own join verb.");
              endif
              return;
              endif
              dest = target.location;
              msg = this:enlist(this:join_msg());
              editing = $object_utils:isa(dest, $generic_editor);
              if (editing)
              dest = dest.original[target in dest.active];
              editing_msg = "%N is editing at the moment. You can wait here until %s is done.";
              if (player.location == dest)
              msg = {editing_msg};
              else
              msg = {@msg, editing_msg};
              endif
              endif
              if (msg &amp;&amp; ((player.location != dest) || editing))
              player:tell_lines($string_utils:pronoun_sub(msg, target));
              elseif (player.location == dest)
              player:tell("OK, you're there. You didn't need to actually move, though.");
              return;
              endif
              this:teleport(player, dest);
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>@find</NAME>
            <CODE>
              "'@find #&lt;object&gt;', '@find &lt;player&gt;', '@find :&lt;verb&gt;' '@find .&lt;property&gt;' - Attempt to locate things. Verbs and properties are found on any object in the player's vicinity, and some other places.  '@find ?&lt;help&gt;' looks for a help topic on any available help database.";
              if (!dobjstr)
              player:tell("Usage: '@find #&lt;object&gt;' or '@find &lt;player&gt;' or '@find :&lt;verb&gt;' or '@find .&lt;property&gt;' or '@find ?&lt;help topic&gt;'.");
              return;
              endif
              if (dobjstr[1] == ":")
              name = dobjstr[2..$];
              this:find_verb(name);
              return;
              elseif (dobjstr[1] == ".")
              name = dobjstr[2..$];
              this:find_property(name);
              return;
              elseif (dobjstr[1] == "#")
              target = toobj(dobjstr);
              if (!valid(target))
              player:tell(target, " does not exist.");
              endif
              elseif (dobjstr[1] == "?")
              name = dobjstr[2..$];
              this:find_help(name);
              return;
              else
              target = $string_utils:match_player(dobjstr);
              $command_utils:player_match_result(target, dobjstr);
              endif
              if (valid(target))
              player:tell(target.name, " (", target, ") is at ", valid(target.location) ? target.location.name | "Nowhere", " (", target.location, ").");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>find_verb</NAME>
            <CODE>
              "'find_verb (&lt;name&gt;)' - Search for a verb with the given name. The objects searched are those returned by this:find_verbs_on(). The printing order relies on $list_utils:remove_duplicates to leave the *first* copy of each duplicated element in a list; for example, {1, 2, 1} -&gt; {1, 2}, not to {2, 1}.";
              name = args[1];
              results = "";
              objects = $list_utils:remove_duplicates(this:find_verbs_on());
              for thing in (objects)
              if (valid(thing) &amp;&amp; (mom = $object_utils:has_verb(thing, name)))
              results = ((((results + "   ") + thing.name) + "(") + tostr(thing)) + ")";
              mom = mom[1];
              if (thing != mom)
              results = ((((results + "--") + mom.name) + "(") + tostr(mom)) + ")";
              endif
              endif
              endfor
              if (results)
              this:tell("The verb :", name, " is on", results);
              else
              this:tell("The verb :", name, " is nowhere to be found.");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>@ways</NAME>
            <CODE>
              "'@ways', '@ways &lt;room&gt;' - List any obvious exits from the given room (or this room, if none is given).";
              if (dobjstr)
              room = dobj;
              else
              room = this.location;
              endif
              if ((!valid(room)) || (!($room in $object_utils:ancestors(room))))
              player:tell("You can only pry into the exits of a room.");
              return;
              endif
              exits = {};
              if ($object_utils:has_verb(room, "obvious_exits"))
              exits = room:obvious_exits();
              endif
              exits = this:checkexits(this:obvious_exits(), room, exits);
              exits = this:findexits(room, exits);
              this:tell_ways(exits, room);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>findexits</NAME>
            <CODE>
              "Add to the 'exits' list any exits in the room which have a single-letter alias.";
              {room, exits} = args;
              alphabet = "abcdefghijklmnopqrstuvwxyz0123456789";
              for i in [1..length(alphabet)]
              found = room:match_exit(alphabet[i]);
              if (valid(found) &amp;&amp; (!(found in exits)))
              exits = {@exits, found};
              endif
              endfor
              return exits;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>checkexits</NAME>
            <CODE>
              "Check a list of exits to see if any of them are in the given room.";
              {to_check, room, exits} = args;
              for word in (to_check)
              found = room:match_exit(word);
              if (valid(found) &amp;&amp; (!(found in exits)))
              exits = {@exits, found};
              endif
              endfor
              return exits;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>self_port_msg player_port_msg thing_port_msg join_msg</NAME>
            <CODE>
              "This verb returns messages that go only to you. You don't need to have your name tacked on to the beginning of these. Heh.";
              msg = this.(verb);
              if (msg &amp;&amp; (length(args) &gt;= 3))
              msg = this:msg_sub(msg, @args);
              endif
              return msg;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>oself_port_msg self_arrive_msg oplayer_port_msg player_arrive_msg victim_port_msg othing_port_msg thing_arrive_msg object_port_msg</NAME>
            <CODE>
              "This verb returns messages that go to other players. It does pronoun substitutions; if your name is not included in the final string, it adds the name in front.";
              msg = this.(verb);
              if (!msg)
              msg = $frand_class.(verb);
              endif
              if (length(args) &gt;= 3)
              msg = this:msg_sub(msg, @args);
              endif
              if (!$string_utils:index_delimited(msg, player.name))
              msg = (player.name + " ") + msg;
              endif
              return msg;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>msg_sub</NAME>
            <CODE>
              "Do pronoun and other substitutions on the teleport messages. The arguments are: 1. The original message, before any substitutions; 2. object being teleported; 3. from location; 4. to location. The return value is the final message.";
              {msg, thing, from, to} = args;
              msg = $string_utils:substitute(msg, $string_utils:pronoun_quote({{"%&lt;from room&gt;", valid(from) ? from.name | "Nowhere"}, {"%&lt;to room&gt;", valid(to) ? to.name | "Nowhere"}}));
              msg = $string_utils:pronoun_sub(msg, thing);
              return msg;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>obvious_exits</NAME>
            <CODE>
              "'obvious_exits()' - Return a list of common exit names which are obviously worth looking for in a room.";
              return {"n", "ne", "e", "se", "s", "sw", "w", "nw", "north", "northeast", "east", "southeast", "south", "southwest", "west", "northwest", "u", "d", "up", "down", "out", "exit", "leave", "enter"};
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>tell_ways</NAME>
            <CODE>
              ":tell_ways (&lt;list of exits&gt;)' - Tell yourself a list of exits, for @ways. You can override it to print the exits in any format.";
              exits = args[1];
              answer = {};
              for e in (exits)
              answer = {@answer, ((e.name + " (") + $string_utils:english_list(e.aliases)) + ")"};
              endfor
              player:tell("Obvious exits: ", $string_utils:english_list(answer), ".");
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>tell_obj</NAME>
            <CODE>
              "Return the name and number of an object, e.g. 'Root Class (#1)'.";
              o = args[1];
              return (((valid(o) ? o.name | "Nothing") + " (") + tostr(o)) + ")";
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>parse_out_object</NAME>
            <CODE>
              "'parse_out_object (&lt;string&gt;)' -&gt; {&lt;name&gt;, &lt;object&gt;}, or 0. Given a string, attempt to find an object at its beginning or its end. An object can be either an object number, or 'here'. If this succeeds, return a list of the object and the unmatched part of the string, called the name. If it fails, return 0.";
              words = $string_utils:words(args[1]);
              if (!length(words))
              return 0;
              endif
              word1 = words[1];
              wordN = words[$];
              if (length(word1) &amp;&amp; (word1[1] == "#"))
              start = 2;
              finish = length(words);
              what = toobj(word1);
              elseif (word1 == "here")
              start = 2;
              finish = length(words);
              what = this.location;
              elseif (length(wordN) &amp;&amp; (wordN[1] == "#"))
              start = 1;
              finish = length(words) - 1;
              what = toobj(wordN);
              elseif (wordN == "here")
              start = 1;
              finish = length(words) - 1;
              what = this.location;
              else
              return 0;
              endif
              "toobj() has the nasty property that invalid strings get turned into #0. Here we just pretend that all references to #0 are actually meant for #-1.";
              if (what == #0)
              what = $nothing;
              endif
              name = $string_utils:from_list(words[start..finish], " ");
              if (!name)
              name = valid(what) ? what.name | "Nowhere";
              endif
              return {name, what};
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>enlist</NAME>
            <CODE>
              "'enlist (&lt;x&gt;)' - If x is a list, just return it; otherwise, return {x}. The purpose here is to turn message strings into lists, so that lines can be added. It is not guaranteed to work for non-string non-lists.";
              x = args[1];
              if (!x)
              return {};
              elseif (typeof(x) == LIST)
              return x;
              else
              return {x};
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>@spellm*essages @spellp*roperties</NAME>
            <CODE>
              "@spellproperties &lt;object&gt;";
              "@spellmessages &lt;object&gt;";
              "Spell checks the string properties of an object, or the subset of said properties which are suffixed _msg, respectively.";
              set_task_perms(player);
              if (!dobjstr)
              player:notify(tostr("Usage: ", verb, " &lt;object&gt;"));
              return;
              elseif ($command_utils:object_match_failed(dobj = player:my_match_object(dobjstr), dobjstr))
              return;
              elseif (typeof(props = $object_utils:all_properties(dobj)) == ERR)
              player:notify("Permission denied to read properties on that object.");
              return;
              endif
              props = setremove(props, "messages");
              if (verb[1..7] == "@spellm")
              spell = {};
              for prop in (props)
              if ((index(prop, "_msg") == (length(prop) - 3)) &amp;&amp; index(prop, "_msg"))
              spell = {@spell, prop};
              endif
              endfor
              props = spell;
              endif
              if (props == {})
              player:notify(tostr("No ", (verb[1..7] == "@spellm") ? "messages" | "properties", " found to spellcheck on ", dobj, "."));
              return;
              endif
              for data in (props)
              if (typeof(dd = `dobj.(data) ! ANY') == LIST)
              text = {};
              for linenum in (dd)
              text = listappend(text, linenum);
              endfor
              elseif ((((typeof(dd) == OBJ) || (typeof(dd) == INT)) || (typeof(dd) == ERR)) || (typeof(dd) == FLOAT))
              text = "";
              elseif (typeof(dd) == STR)
              text = dd;
              endif
              if (typeof(text) == STR)
              text = {text};
              endif
              linenumber = 0;
              for thisline in (text)
              $command_utils:suspend_if_needed(0);
              linenumber = linenumber + 1;
              if (((((typeof(thisline) != LIST) &amp;&amp; (typeof(thisline) != OBJ)) &amp;&amp; (typeof(thisline) != INT)) &amp;&amp; (typeof(thisline) != FLOAT)) &amp;&amp; (typeof(thisline) != ERR))
              i = $string_utils:strip_chars(thisline, "!@#$%^&amp;*()_+1234567890={}[]&lt;&gt;?:;,./|\"~'");
              if (i)
              i = $string_utils:words(i);
              for ii in [1..length(i)]
              $command_utils:suspend_if_needed(0);
              if (!$spell:valid(i[ii]))
              if ((rindex(i[ii], "s") == length(i[ii])) &amp;&amp; $spell:valid(i[ii][1..$ - 1]))
              msg = "Possible match: " + i[ii];
              elseif ((rindex(i[ii], "'s") == (length(i[ii]) - 1)) &amp;&amp; $spell:valid(i[ii][1..$ - 2]))
              msg = "Possible match: " + i[ii];
              else
              msg = "Unknown word: " + i[ii];
              endif
              if (length(text) == 1)
              foo = ": ";
              else
              foo = (" (line " + tostr(linenumber)) + "): ";
              endif
              player:notify(tostr(dobj, ".", data, foo, msg));
              endif
              endfor
              endif
              endif
              endfor
              endfor
              player:notify(tostr("Done spellchecking ", dobj, "."));
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>@at</NAME>
            <CODE>
              "'@at' - Find out where everyone is. '@at &lt;player&gt;' - Find out where &lt;player&gt; is, and who else is there. '@at &lt;obj&gt;' - Find out who else is at the same place as &lt;obj&gt;. '@at &lt;place&gt;' - Find out who is at the place. The place can be given by number, or it can be a name from your @rooms list. '@at #-1' - Find out who is at #-1. '@at me' - Find out who is in the room with you. '@at home' - Find out who is at your home.";
              this:internal_at(argstr);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>at_players</NAME>
            <CODE>
              "'at_players ()' - Return a list of players to be displayed by @at.";
              return connected_players();
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>do_at_all</NAME>
            <CODE>
              "'do_at_all ()' - List where everyone is, sorted by popularity of location. This is called when you type '@at'.";
              locations = {};
              parties = {};
              counts = {};
              for who in (this:at_players())
              loc = who.location;
              if (i = loc in locations)
              parties[i] = setadd(parties[i], who);
              counts[i] = counts[i] - 1;
              else
              locations = {@locations, loc};
              parties = {@parties, {who}};
              counts = {@counts, 0};
              endif
              endfor
              locations = $list_utils:sort(locations, counts);
              parties = $list_utils:sort(parties, counts);
              this:print_at_items(locations, parties);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>do_at</NAME>
            <CODE>
              "'do_at (&lt;location&gt;)' - List the players at a given location.";
              loc = args[1];
              party = {};
              for who in (this:at_players())
              if (who.location == loc)
              party = setadd(party, who);
              endif
              endfor
              this:print_at_items({loc}, {party});
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>print_at_items</NAME>
            <CODE>
              "'print_at_items (&lt;locations&gt;, &lt;parties&gt;)' - Print a list of locations and people, for @at. Override this if you want to make a change to @at's output that you can't make in :at_item.";
              {locations, parties} = args;
              for i in [1..length(locations)]
              $command_utils:suspend_if_needed(0);
              player:tell_lines(this:at_item(locations[i], parties[i]));
              endfor
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>at_item</NAME>
            <CODE>
              "'at_item (&lt;location&gt;, &lt;party&gt;)' - Given a location and a list of the people there, return a string displaying the information. Override this if you want to change the format of each line of @at's output.";
              {loc, party} = args;
              su = $string_utils;
              if (this.at_number)
              number = su:right(tostr(loc), 7) + " ";
              else
              number = "";
              endif
              room = su:left(valid(loc) ? loc.name | "[Nowhere]", this.at_room_width);
              if (length(room) &gt; this.at_room_width)
              room = room[1..this.at_room_width];
              endif
              text = (number + room) + " ";
              if (party)
              filler = su:space(length(text) - 2);
              line = text;
              text = {};
              for who in (party)
              name = " " + (valid(who) ? who.name | "[Nobody]");
              if ((length(line) + length(name)) &gt; this:linelen())
              text = {@text, line};
              line = filler + name;
              else
              line = line + name;
              endif
              endfor
              text = {@text, line};
              else
              text = text + " [deserted]";
              endif
              return text;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>internal_at</NAME>
            <CODE>
              "'internal_at (&lt;argument string&gt;)' - Perform the function of @at. The argument string is whatever the user typed after @at. This is factored out so that other verbs can call it.";
              where = $string_utils:trim(args[1]);
              if (where)
              if (where[1] == "#")
              result = toobj(where);
              if ((!valid(result)) &amp;&amp; (result != #-1))
              player:tell("That object does not exist.");
              return;
              endif
              else
              result = this:lookup_room(where);
              if (!valid(result))
              result = $string_utils:match_player(where);
              if (!valid(result))
              player:tell("That is neither a player nor a room name.");
              return;
              endif
              endif
              endif
              if (valid(result) &amp;&amp; (!$object_utils:isa(result, $room)))
              result = result.location;
              endif
              this:do_at(result);
              else
              this:do_at_all();
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>confunc</NAME>
            <CODE>
              "'confunc ()' - Besides the inherited behavior, notify the player's feature objects that the player has connected.";
              if ((valid(cp = caller_perms()) &amp;&amp; (caller != this)) &amp;&amp; (!$perm_utils:controls(cp, this)))
              return E_PERM;
              endif
              pass(@args);
              set_task_perms(this);
              for feature in (this.features)
              try
              feature:player_connected(player, @args);
              except (E_VERBNF)
              continue feature;
              except id (ANY)
              player:tell("Feature initialization failure for ", feature, ": ", id[2], ".");
              endtry
              $command_utils:suspend_if_needed(0);
              endfor
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>disfunc</NAME>
            <CODE>
              "'disfunc ()' - Besides the inherited behavior, notify the player's feature objects that the player has disconnected.";
              if ((valid(cp = caller_perms()) &amp;&amp; (caller != this)) &amp;&amp; (!$perm_utils:controls(cp, this)))
              return E_PERM;
              endif
              pass(@args);
              "This is forked off to protect :disfunc from buggy :player_disconnected verbs.";
              set_task_perms(this);
              fork (max(0, $login:current_lag()))
              for feature in (this.features)
              try
              feature:player_disconnected(player, @args);
              except (ANY)
              continue feature;
              endtry
              endfor
              endfork
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>@addword @adddict</NAME>
            <CODE>
              set_task_perms(player);
              if ((verb == "@adddict") &amp;&amp; (!((player in $spell.trusted) || player.wizard)))
              player:tell("You may not add to the master dictionary. The following words will instead by put in a list of words to be approved for later addition to the dictionary. Thanks for your contribution.");
              endif
              if (!argstr)
              player:notify(tostr("Usage: ", verb, " one or more words"));
              player:notify(tostr("       ", verb, " object:verb"));
              player:notify(tostr("       ", verb, " object.prop"));
              elseif (data = $spell:get_input(argstr))
              num_learned = 0;
              for i in [1..length(data)]
              line = $string_utils:words(data[i]);
              for ii in [1..length(line)]
              if (seconds_left() &lt; 2)
              suspend(0);
              endif
              if (verb == "@adddict")
              result = $spell:add_word(line[ii]);
              if (result == E_PERM)
              if ($spell:find_exact(line[ii]) == $failed_match)
              player:notify(tostr("Submitted for approval:  ", line[ii]));
              $spell:submit(line[ii]);
              else
              player:notify(tostr("Already in dictionary:  " + line[ii]));
              endif
              elseif (typeof(result) == ERR)
              player:notify(tostr(result));
              elseif (result)
              player:notify(tostr("Word added:  ", line[ii]));
              num_learned = num_learned + 1;
              else
              player:notify(tostr("Already in dictionary:  " + line[ii]));
              endif
              elseif (!$spell:valid(line[ii]))
              player.dict = listappend(player.dict, line[ii]);
              player:notify(tostr("Word added:  ", line[ii]));
              num_learned = num_learned + 1;
              endif
              endfor
              endfor
              player:notify(tostr(num_learned ? num_learned | "No", " word", (num_learned != 1) ? "s " | " ", "added to ", (verb == "@adddict") ? "main " | "personal ", "dictionary."));
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>@spell @cspell @complete</NAME>
            <CODE>
              "@spell a word or phrase  -- Spell check a word or phrase.";
              "@spell thing.prop  -- Spell check a property. The value must be a string or a list of strings.";
              "@spell thing:verb  -- Spell check a verb. Only the quoted strings in the verb are checked.";
              "@cspell word  -- Spell check a word, and if it is not in the dictionary, offset suggestions about what the right spelling might be. This actually works with thing.prop and thing:verb too, but it is too slow to be useful--it takes maybe 30 seconds per unknown word.";
              "@complete prefix  -- List all the word in the dictionary which begin with the given prefix. For example, `@complete zoo' lists zoo, zoologist, zoology, and zoom.";
              "";
              "Mr. Spell was written by waffle (waffle@euclid.humboldt.edu), for use by";
              "MOOers all over this big green earth. (....and other places....)";
              "This monstrosity programmed Sept-Oct 1991, when I should have been studying.";
              set_task_perms(player);
              if (!argstr)
              if (verb == "@complete")
              player:notify(tostr("Usage: ", verb, " word-prefix"));
              else
              player:notify(tostr("Usage: ", verb, " object.property"));
              player:notify(tostr("       ", verb, " object:verb"));
              player:notify(tostr("       ", verb, " one or more words"));
              endif
              elseif (verb == "@complete")
              if ((foo = $string_utils:from_list($spell:sort($spell:find_all(argstr)), " ")) == "")
              player:notify(tostr("No words found that begin with `", argstr, "'"));
              else
              player:notify(tostr(foo));
              endif
              else
              "@spell or @cspell.";
              corrected_words = {};
              data = $spell:get_input(argstr);
              if (data)
              misspelling = 0;
              for i in [1..length(data)]
              line = $string_utils:words(data[i]);
              for ii in [1..length(line)]
              $command_utils:suspend_if_needed(0);
              if (!$spell:valid(line[ii]))
              if ((rindex(line[ii], "s") == length(line[ii])) &amp;&amp; $spell:valid(line[ii][1..$ - 1]))
              msg = "Possible match: " + line[ii];
              msg = (msg + " ") + ((length(data) != 1) ? ("(line " + tostr(i)) + ")  " | "  ");
              elseif ((rindex(line[ii], "'s") == (length(line[ii]) - 1)) &amp;&amp; $spell:valid(line[ii][1..$ - 2]))
              msg = "Possible match: " + line[ii];
              msg = (msg + " ") + ((length(data) != 1) ? ("(line " + tostr(i)) + ")  " | "  ");
              else
              misspelling = misspelling + 1;
              msg = ("Unknown word: " + line[ii]) + ((length(data) != 1) ? (" (line " + tostr(i)) + ")  " | "  ");
              if ((verb == "@cspell") &amp;&amp; (!(line[ii] in corrected_words)))
              corrected_words = listappend(corrected_words, line[ii]);
              guesses = $string_utils:from_list($spell:guess_words(line[ii]), " ");
              if (guesses == "")
              msg = msg + "-No guesses";
              else
              msg = msg + "-Possible correct spelling";
              msg = msg + (index(guesses, " ") ? "s: " | ": ");
              msg = msg + guesses;
              endif
              endif
              endif
              player:notify(tostr(msg));
              endif
              endfor
              endfor
              player:notify(tostr("Found ", misspelling ? misspelling | "no", " misspelled word", (misspelling == 1) ? "." | "s."));
              elseif (data != $failed_match)
              player:notify(tostr("Nothing found to spellcheck!"));
              endif
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>@rmword</NAME>
            <CODE>
              set_task_perms(player);
              if (argstr in player.dict)
              player.dict = setremove(player.dict, argstr);
              player:notify(tostr("`", argstr, "' removed from personal dictionary."));
              else
              player:notify(tostr("`", argstr, "' not found in personal dictionary."));
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>@rmdict</NAME>
            <CODE>
              set_task_perms(player);
              result = $spell:remove_word(argstr);
              if (result == E_PERM)
              player:notify("You may not remove words from the main dictionary. Use `@rmword' to remove words from your personal dictionary.");
              elseif (typeof(result) == ERR)
              player:notify(tostr(result));
              elseif (result)
              player:notify(tostr("`", argstr, "' removed."));
              else
              player:notify(tostr("`", argstr, "' not found in dictionary."));
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>find_property</NAME>
            <CODE>
              "'find_property (&lt;name&gt;)' - Search for a property with the given name. The objects searched are those returned by this:find_properties_on(). The printing order relies on $list_utils:remove_duplicates to leave the *first* copy of each duplicated element in a list; for example, {1, 2, 1} -&gt; {1, 2}, not to {2, 1}.";
              name = args[1];
              results = "";
              objects = $list_utils:remove_duplicates(this:find_properties_on());
              for thing in (objects)
              if (valid(thing) &amp;&amp; (mom = $object_utils:has_property(thing, name)))
              results = ((((results + "   ") + thing.name) + "(") + tostr(thing)) + ")";
              mom = this:property_inherited_from(thing, name);
              if (thing != mom)
              if (valid(mom))
              results = ((((results + "--") + mom.name) + "(") + tostr(mom)) + ")";
              else
              results = results + "--built-in";
              endif
              endif
              endif
              endfor
              if (results)
              this:tell("The property .", name, " is on", results);
              else
              this:tell("The property .", name, " is nowhere to be found.");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>find_verbs_on</NAME>
            <CODE>
              "'find_verbs_on ()' -&gt; list of objects - Return the objects that @find searches when looking for a verb. The objects are searched (and the results printed) in the order returned. Feature objects are included in the search. Duplicate entries are removed by the caller.";
              return {this, this.location, @valid(this.location) ? this.location:contents() | {}, @this:contents(), @this.features};
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>find_properties_on</NAME>
            <CODE>
              "'find_properties_on ()' -&gt; list of objects - Return the objects that @find searches when looking for a property. The objects are searched (and the results printed) in the order returned. Feature objects are *not* included in the search. Duplicate entries are removed by the caller.";
              return {this, this.location, @valid(this.location) ? this.location:contents() | {}, @this:contents()};
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>property_inherited_from</NAME>
            <CODE>
              "'property_inherited_from (&lt;object&gt;, &lt;property name&gt;)' -&gt; object - Return the ancestor of &lt;object&gt; on which &lt;object&gt;.&lt;property&gt; is originally defined. If &lt;object&gt;.&lt;property&gt; is not actually defined, return 0. The property is taken as originally defined on the earliest ancestor of &lt;object&gt; which has it. If the property is built-in, return $nothing.";
              {what, prop} = args;
              if (!$object_utils:has_property(what, prop))
              return 0;
              elseif (prop in $code_utils.builtin_props)
              return $nothing;
              endif
              ancestor = what;
              while ($object_utils:has_property(parent(ancestor), prop))
              ancestor = parent(ancestor);
              endwhile
              return ancestor;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>@ref*use</NAME>
            <CODE>
              "'@refuse &lt;action(s)&gt; [ from &lt;player&gt; ] [ for &lt;time&gt; ]' - Refuse all of a list of one or more actions. If a player is given, refuse actions from the player; otherwise, refuse all actions. If a time is specified, refuse the actions for the given amount of time; otherwise, refuse them for a week. If the actions are already refused, then the only their times are adjusted.";
              if (!argstr)
              player:tell("@refuse &lt;action(s)&gt; [ from &lt;player&gt; ] [ for &lt;time&gt; ]");
              return;
              endif
              stuff = this:parse_refuse_arguments(argstr);
              if (stuff)
              if (((typeof(who = stuff[1]) == OBJ) &amp;&amp; (who != $nothing)) &amp;&amp; (!is_player(who)))
              player:tell("You must give the name of some player.");
              else
              "'stuff' is now in the form {&lt;origin&gt;, &lt;actions&gt;, &lt;duration&gt;}.";
              this:add_refusal(@stuff);
              player:tell("Refusal of ", this:refusal_origin_to_name(stuff[1]), " for ", $time_utils:english_time(stuff[3]), " added.");
              endif
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>@unref*use @allow</NAME>
            <CODE>
              "'@unrefuse &lt;action(s)&gt; [ from &lt;player&gt; ]' - Stop refusing all of a list of actions. If a player is given, stop refusing actions by the player; otherwise, stop refusing all actions of the given kinds. '@unrefuse everything' - Remove all refusals.";
              if (argstr == "everything")
              if ($command_utils:yes_or_no("Do you really want to erase all your refusals?"))
              this:clear_refusals();
              player:tell("OK, they are gone.");
              else
              player:tell("OK, no harm done.");
              endif
              return;
              endif
              stuff = this:parse_refuse_arguments(argstr);
              if (!stuff)
              return;
              endif
              "'stuff' is now in the form {&lt;origin&gt;, &lt;actions&gt;, &lt;duration&gt;}.";
              origins = stuff[1];
              actions = stuff[2];
              if (typeof(origins) != LIST)
              origins = {origins};
              endif
              n = 0;
              for origin in (origins)
              n = n + this:remove_refusal(origin, actions);
              endfor
              plural = ((n == 1) &amp;&amp; (length(origins) == 1)) ? "" | "s";
              if (n)
              player:tell("Refusal", plural, " removed.");
              else
              player:tell("You have no such refusal", plural, ".");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="none" PREP="any" IOBJ="any">
            <NAME>@refusals</NAME>
            <CODE>
              "'@refusals' - List your refusals. '@refusals for &lt;player&gt;' - List the given player's refusals.";
              if (iobjstr)
              who = $string_utils:match_player(iobjstr);
              if ($command_utils:player_match_failed(who, iobjstr))
              return;
              endif
              if (!$object_utils:has_verb(who, "refusals_text"))
              player:tell("That player does not have the refusal facility.");
              return;
              endif
              else
              who = player;
              endif
              who:remove_expired_refusals();
              player:tell_lines(this:refusals_text(who));
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
            <NAME>@refusal-r*eporting</NAME>
            <CODE>
              "'@refusal-reporting' - See if refusal reporting is on. '@refusal-reporting on', '@refusal-reporting off' - Turn it on or off..";
              if (!argstr)
              player:tell("Refusal reporting is ", this.report_refusal ? "on" | "off", ".");
              elseif (argstr in {"on", "yes", "y", "1"})
              this.report_refusal = 1;
              player:tell("Refusals will be reported to you as they happen.");
              elseif (argstr in {"off", "no", "n", "0"})
              this.report_refusal = 0;
              player:tell("Refusals will happen silently.");
              else
              player:tell("@refusal-reporting on     - turn on refusal reporting");
              player:tell("@refusal-reporting off    - turn it off");
              player:tell("@refusal-reporting        - see if it's on or off");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>parse_refuse_arguments</NAME>
            <CODE>
              "'parse_refuse_arguments (&lt;string&gt;)' -&gt; {&lt;who&gt;, &lt;actions&gt;, &lt;duration&gt;} - Parse the arguments of a @refuse or @unrefuse command. &lt;who&gt; is the player requested, or $nothing if none was. &lt;actions&gt; is a list of the actions asked for. &lt;duration&gt; is how long the refusal should last, or 0 if no expiration is given. &lt;errors&gt; is a list of actions (or other words) which are wrong. If there are any errors, this prints an error message and returns 0.";
              words = $string_utils:explode(args[1]);
              possible_actions = this:refusable_actions();
              who = $nothing;
              actions = {};
              until = this.default_refusal_time;
              errors = {};
              skip_to = 0;
              for i in [1..length(words)]
              word = words[i];
              if (i &lt;= skip_to)
              elseif (which = $string_utils:find_prefix(word, possible_actions))
              actions = setadd(actions, possible_actions[which]);
              elseif ((word[$] == "s") &amp;&amp; (which = $string_utils:find_prefix(word[1..$ - 1], possible_actions)))
              "The word seems to be the plural of an action.";
              actions = setadd(actions, possible_actions[which]);
              elseif (results = this:translate_refusal_synonym(word))
              actions = $set_utils:union(actions, results);
              elseif ((word == "from") &amp;&amp; (i &lt; length(words)))
              "Modified to allow refusals from all guests at once. 5-27-94, Gelfin";
              if (words[i + 1] == "guests")
              who = "all guests";
              elseif (!(typeof(who = $code_utils:toobj(words[i + 1])) == OBJ))
              who = $string_utils:match_player(words[i + 1]);
              if ($command_utils:player_match_failed(who, words[i + 1]))
              return 0;
              endif
              endif
              skip_to = i + 1;
              elseif ((word == "for") &amp;&amp; (i &lt; length(words)))
              n_words = this:parse_time_length(words[i + 1..$]);
              until = this:parse_time(words[i + 1..i + n_words]);
              if (!until)
              return 0;
              endif
              skip_to = i + n_words;
              else
              errors = {@errors, word};
              endif
              endfor
              if (errors)
              player:tell((length(errors) &gt; 1) ? "These parts of the command were not understood: " | "This part of the command was not understood: ", $string_utils:english_list(errors, 0, " ", " ", " "));
              return 0;
              endif
              return {this:player_to_refusal_origin(who), actions, until};
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>time_word_to_seconds</NAME>
            <CODE>
              "'time_word_to_seconds (&lt;string&gt;)' - The &lt;string&gt; is expected to be a time word, 'second', 'minute', 'hour', 'day', 'week', or 'month'. Return the number of seconds in that amount of time (a month is taken to be 30 days). If &lt;string&gt; is not a time word, return 0. This is used both as a test of whether a word is a time word and as a converter.";
              return $time_utils:parse_english_time_interval("1", args[1]);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>parse_time_length</NAME>
            <CODE>
              "'parse_time_length (&lt;words&gt;)' -&gt; n - Given a list of words which is expected to begin with a time expression, return how many of them belong to the time expression. A time expression can be a positive integer, a time word, or a positive integer followed by a time word. A time word is anything that this:time_word_to_seconds this is one. The return value is 0, 1, or 2.";
              words = {@args[1], "dummy"};
              n = 0;
              if (toint(words[1]) || this:time_word_to_seconds(words[1]))
              n = 1;
              endif
              if (this:time_word_to_seconds(words[n + 1]))
              n = n + 1;
              endif
              return n;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>parse_time</NAME>
            <CODE>
              "'parse_time (&lt;words&gt;)' -&gt; &lt;seconds&gt; - Given a list of zero or more words, either empty or a valid time expression, return the number of seconds that the time expression refers to. This is a duration, not an absolute time.";
              words = args[1];
              "If the list is empty, return the default refusal time.";
              if (!words)
              return this.default_refusal_time;
              endif
              "If the list has one word, either &lt;units&gt; or &lt;n&gt;.";
              "If it is a unit, like 'hour', return the time for 1 &lt;unit&gt;.";
              "If it is a number, return the time for &lt;n&gt; days.";
              if (length(words) == 1)
              return this:time_word_to_seconds(words[1]) || (toint(words[1]) * this:time_word_to_seconds("days"));
              endif
              "The list must contain two words, &lt;n&gt; &lt;units&gt;.";
              return toint(words[1]) * this:time_word_to_seconds(words[2]);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>clear_refusals</NAME>
            <CODE>
              "'clear_refusals ()' - Erase all of this player's refusals.";
              if ((caller != this) &amp;&amp; (!$perm_utils:controls(caller_perms(), this)))
              return E_PERM;
              endif
              this.refused_origins = {};
              this.refused_actions = {};
              this.refused_until = {};
              this.refused_extra = {};
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>set_default_refusal_time</NAME>
            <CODE>
              "'set_default_refusal_time (&lt;seconds&gt;)' - Set the length of time that a refusal lasts if its duration isn't specified.";
              if ((caller != this) &amp;&amp; (!$perm_utils:controls(caller_perms(), this)))
              return E_PERM;
              endif
              this.default_refusal_time = toint(args[1]);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>refusable_actions</NAME>
            <CODE>
              "'refusable_actions ()' -&gt; {'page', 'whisper', ...} - Return a list of the actions that can be refused. This is a verb, rather than a property, so that it can be inherited properly. If you override this verb to add new refusable actions, write something like 'return {@pass (), 'action1', 'action2', ...}'. That way people can add new refusable actions at any level of the player class hierarchy, without clobbering any that were added higher up.";
              return {"page", "whisper", "move", "join", "accept", "mail"};
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>translate_refusal_synonym</NAME>
            <CODE>
              "'translate_refusal_synonym (&lt;word&gt;)' -&gt; list - If the &lt;word&gt; is a synonym for some set of refusals, return the list of those refusals. Otherwise return the empty list, {}. Programmers can override this verb to provide more synonyms.";
              word = args[1];
              if (word == "all")
              return this:refusable_actions();
              endif
              return {};
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>default_refusals_text_filter</NAME>
            <CODE>
              "'default_refusals_text_filter (&lt;origin&gt;, &lt;actions&gt;)' - Return any actions by this &lt;origin&gt; which should be included in the text returned by :refusals_text. This is the default filter, which includes all actions.";
              return args[2];
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>refusals_text</NAME>
            <CODE>
              "'refusals_text (&lt;player&gt;, [&lt;filter verb name&gt;])' - Return text describing the given player's refusals. The filter verb name is optional; if it is given, this verb takes an origin and a list of actions and returns any actions which should be included in the refusals text. This verb works only if &lt;player&gt; is a player who has the refusals facility; it does not check for this itself.";
              {who, ?filter_verb = "default_refusals_text_filter"} = args;
              text = {};
              for i in [1..length(who.refused_origins)]
              origin = who.refused_origins[i];
              actions = this:(filter_verb)(origin, who.refused_actions[i]);
              if (actions)
              line = "";
              for action in (actions)
              line = (line + " ") + action;
              endfor
              line = (this:refusal_origin_to_name(origin) + ": ") + line;
              line = (ctime(who.refused_until[i]) + " ") + line;
              text = {@text, line};
              endif
              endfor
              if (!text)
              text = {"No refusals."};
              endif
              return text;
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>player_to_refusal_origin</NAME>
            <CODE>
              "'player_to_refusal_origin (&lt;player&gt;)' -&gt; &lt;origin&gt; - Convert a player to a unique identifier called the player's 'refusal origin'. For most players, it's just their object number. For guests, it is a hash of the site they are connecting from. Converting an origin to an origin is a safe no-op--the code relies on this.";
              set_task_perms(caller_perms());
              {who} = args;
              if (((typeof(who) == OBJ) &amp;&amp; valid(who)) &amp;&amp; (parent(who) == `$local.guest ! ANY =&gt; $guest'))
              return who:connection_name_hash("xx");
              else
              return who;
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>refusal_origin_to_name</NAME>
            <CODE>
              "'refusal_origin_to_name (&lt;origin&gt;)' -&gt; string - Convert a refusal origin to a name.";
              origin = args[1];
              if (origin in {"all guests", "everybody"})
              return origin;
              elseif (typeof(origin) != OBJ)
              return "a certain guest";
              elseif (origin == #-1)
              return "Everybody";
              else
              return $string_utils:name_and_number(origin);
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>check_refusal_actions</NAME>
            <CODE>
              "'check_refusal_actions (&lt;actions&gt;)' - Check a list of refusal actions, and return whether they are all legal.";
              actions = args[1];
              legal_actions = this:refusable_actions();
              for action in (actions)
              if (!(action in legal_actions))
              return 0;
              endif
              endfor
              return 1;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>add_refusal</NAME>
            <CODE>
              "'add_refusal (&lt;origin&gt;, &lt;actions&gt; [, &lt;duration&gt; [, &lt;extra&gt;]])' - Add refusal(s) to this player's list. &lt;Actions&gt; is a list of the actions to be refused. The list should contain only actions, no synonyms. &lt;Origin&gt; is the actor whose actions are to be refused. &lt;Until&gt; is the time that the actions are being refused until, in the form returned by time(). It is optional; if it's not given, it defaults to .default_refusal_time. &lt;Extra&gt; is any extra information; it can be used for comments, or to make finer distinctions about the actions being refused, or whatever. If it is not given, it defaults to 0. The extra information is per-action; that is, it is stored separately for each action that it applies to.";
              if (caller != this)
              return E_PERM;
              endif
              {orig, actions, ?duration = this.default_refusal_time, ?extra = 0} = args;
              origins = this:player_to_refusal_origin(orig);
              if (typeof(origins) != LIST)
              origins = {origins};
              endif
              if (typeof(actions) != LIST)
              actions = {actions};
              endif
              if (!this:check_refusal_actions(actions))
              return E_INVARG;
              endif
              until = time() + duration;
              for origin in (origins)
              if (i = origin in this.refused_origins)
              this.refused_until[i] = until;
              for action in (actions)
              if (j = action in this.refused_actions[i])
              this.refused_extra[i][j] = extra;
              else
              this.refused_actions[i] = {@this.refused_actions[i], action};
              this.refused_extra[i] = {@this.refused_extra[i], extra};
              endif
              endfor
              else
              this.refused_origins = {@this.refused_origins, origin};
              this.refused_actions = {@this.refused_actions, actions};
              this.refused_until = {@this.refused_until, until};
              this.refused_extra = {@this.refused_extra, $list_utils:make(length(actions), extra)};
              endif
              endfor
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>remove_refusal</NAME>
            <CODE>
              "'remove_refusal (&lt;origin&gt;, &lt;actions&gt;)' - Remove any refused &lt;actions&gt; by &lt;origin&gt;. The &lt;actions&gt; list should contain only actions, no synonyms. Return the number of such refusals found (0 if none).";
              if (caller != this)
              return E_PERM;
              endif
              {origin, actions} = args;
              if (typeof(actions) != LIST)
              actions = {actions};
              endif
              count = 0;
              i = origin in this.refused_origins;
              if (i)
              for action in (actions)
              if (j = action in this.refused_actions[i])
              this.refused_actions[i] = listdelete(this.refused_actions[i], j);
              this.refused_extra[i] = listdelete(this.refused_extra[i], j);
              count = count + 1;
              endif
              endfor
              if (!this.refused_actions[i])
              this.refused_origins = listdelete(this.refused_origins, i);
              this.refused_actions = listdelete(this.refused_actions, i);
              this.refused_until = listdelete(this.refused_until, i);
              this.refused_extra = listdelete(this.refused_extra, i);
              endif
              endif
              return count;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>remove_expired_refusals</NAME>
            <CODE>
              "'remove_expired_refusals ()' - Remove refusal entries which are past their time limits.";
              origins = {};
              "Before removing any refusals, figure out which ones to remove. Removing one changes the indices and invalidates the loop invariant.";
              for i in [1..length(this.refused_origins)]
              if (time() &gt;= this.refused_until[i])
              origins = {@origins, this.refused_origins[i]};
              endif
              endfor
              for origin in (origins)
              this:remove_refusal(origin, this:refusable_actions());
              endfor
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>refuses_action</NAME>
            <CODE>
              "'refuses_action (&lt;origin&gt;, &lt;action&gt;, ...)' - Return whether this object refuses the given &lt;action&gt; by &lt;origin&gt;. &lt;Origin&gt; is typically a player. Extra arguments after &lt;origin&gt;, if any, are used to further describe the action.";
              "Modified by Diopter (#98842) at LambdaMOO";
              {origin, action, @extra_args} = args;
              extra_args = {origin, @extra_args};
              rorigin = this:player_to_refusal_origin(origin);
              if (((which = rorigin in this.refused_origins) &amp;&amp; (action in this.refused_actions[which])) &amp;&amp; this:("refuses_action_" + action)(which, @extra_args))
              return 1;
              elseif (((((typeof(rorigin) == OBJ) &amp;&amp; valid(rorigin)) &amp;&amp; (which = rorigin.owner in this.refused_origins)) &amp;&amp; (action in this.refused_actions[which])) &amp;&amp; this:("refuses_action_" + action)(which, @extra_args))
              return 1;
              elseif ((((which = $nothing in this.refused_origins) &amp;&amp; (rorigin != this)) &amp;&amp; (action in this.refused_actions[which])) &amp;&amp; this:("refuses_action_" + action)(which, @extra_args))
              return 1;
              elseif ((((which = "all guests" in this.refused_origins) &amp;&amp; $object_utils:isa(origin, $guest)) &amp;&amp; (action in this.refused_actions[which])) &amp;&amp; this:("refuses_action_" + action)(which, @extra_args))
              return 1;
              endif
              return 0;
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>refuses_action_*</NAME>
            <CODE>
              "'refuses_action_* (&lt;which&gt;, &lt;origin&gt;, ...)' - The action (such as 'whisper' for the verb :refuses_action_whisper) is being considered for refusal. Return whether the action should really be refused. &lt;Which&gt; is an index into this.refused_origins. By default, always refuse non-outdated actions that get this far.";
              {which, @junk} = args;
              if (time() &gt;= this.refused_until[which])
              fork (0)
              "This &lt;origin&gt; is no longer refused. Remove any outdated refusals.";
              this:remove_expired_refusals();
              endfork
              return 0;
              else
              return 1;
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>report_refusal</NAME>
            <CODE>
              "'report_refusal (&lt;player&gt;, &lt;message&gt;, ...)' - If refusal reporting is turned on, print the given &lt;message&gt; to report the refusal of some action by &lt;player&gt;. The message may take more than one argument. You can override this verb to do more selective reporting.";
              if (this.report_refusal)
              this:tell(@listdelete(args, 1));
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="any" PREP="at/to" IOBJ="this">
            <NAME>wh*isper</NAME>
            <CODE>
              "'whisper &lt;message&gt; to &lt;this player&gt;' - Whisper a message to this player which nobody else can see.";
              if (this:refuses_action(player, "whisper"))
              player:tell(this:whisper_refused_msg());
              this:report_refusal(player, "You just refused a whisper from ", player.name, ".");
              else
              pass(@args);
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>receive_page</NAME>
            <CODE>
              "'receive_page (&lt;message&gt;)' - Receive a page. If the page is accepted, pass(@args) shows it to the player.";
              if (this:refuses_action(player, "page"))
              this.page_refused = task_id();
              return 0;
              endif
              this.page_refused = 0;
              return pass(@args);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>page_echo_msg</NAME>
            <CODE>
              "'page_echo_msg ()' - Return a message to inform the pager what happened to their page.";
              if (task_id() == this.page_refused)
              this:report_refusal(player, "You just refused a page from ", player.name, ".");
              return this:page_refused_msg();
              else
              return pass(@args);
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>moveto acceptable</NAME>
            <CODE>
              "'moveto (&lt;destination&gt;)', 'accept (&lt;object&gt;)' - Check whether this :moveto or :accept is allowed or refused. If it is allowed, do it. This code is slightly modified from an original verb by Grump.  Upgraded by Bits to account for forthcoming 1.8.0 behavior of callers().";
              by = callers();
              "Ignore all the verbs on this.";
              while (((y = by[1])[1] == this) &amp;&amp; (y[2] == verb))
              by = listdelete(by, 1);
              endwhile
              act = (verb == "moveto") ? "move" | "accept";
              if ((player != this) &amp;&amp; this:refuses_action(player, act, args[1]))
              "check player";
              return 0;
              endif
              last = #-1;
              for k in (by)
              if ((((perms = k[3]) == #-1) &amp;&amp; (k[2] != "")) &amp;&amp; (k[1] == #-1))
              elseif ((!perms.wizard) &amp;&amp; (perms != this))
              if (perms != last)
              "check for possible malicious programmer";
              if (this:refuses_action(perms, act, args[1]))
              return 0;
              endif
              last = perms;
              endif
              endif
              endfor
              "Coded added 11/8/98 by TheCat, to refuse spurned objects.";
              if ((act == "accept") &amp;&amp; (typeof(this.spurned_objects) == LIST))
              for item in (this.spurned_objects)
              if ($object_utils:isa(args[1], item))
              return 0;
              endif
              endfor
              endif
              "(end of code added by TheCat)";
              return pass(@args);
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>receive_message</NAME>
            <CODE>
              "'receive_message (&lt;message&gt;, &lt;sender&gt;)' - Receive the given mail message from the given sender. This version handles refusal of the message.";
              if ((!$perm_utils:controls(caller_perms(), this)) &amp;&amp; (caller != this))
              return E_PERM;
              elseif (this:refuses_action(args[2], "mail"))
              return this:mail_refused_msg();
              else
              return pass(@args);
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>whisper_refused_msg page_refused_msg mail_refused_msg</NAME>
            <CODE>
              "'whisper_refused_msg()', 'page_refused_msg()', etc. - Return a message string.";
              return $string_utils:pronoun_sub(this.(verb), this);
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>last_huh</NAME>
            <CODE>
              set_task_perms(caller_perms());
              if (pass(@args))
              return 1;
              endif
              {verb, args} = args;
              if (valid(dobj = $string_utils:literal_object(dobjstr)) &amp;&amp; (r = $match_utils:match_verb(verb, dobj, args)))
              return r;
              elseif (valid(iobj = $string_utils:literal_object(iobjstr)) &amp;&amp; (r = $match_utils:match_verb(verb, iobj, args)))
              return r;
              else
              return 0;
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>ping_features</NAME>
            <CODE>
              ":ping_features()";
              " -- cleans up the .features list to remove !valid objects";
              " ==&gt; cleaned-up .features list";
              features = this.features;
              for x in (features)
              if (!$recycler:valid(x))
              features = setremove(features, x);
              endif
              endfor
              return this.features = features;
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>set_owned_objects</NAME>
            <CODE>
              ":set_owned_objects( LIST owned-objects list )";
              "  -- set your .owned_objects, ordered as you please";
              "  -- no, it will NOT let you set to to anything you want";
              if ((caller == this) || $perm_utils:controls(caller_perms(), this))
              new = args[1];
              old = this.owned_objects;
              "make sure they're the same";
              if (length(new) != length(old))
              return E_INVARG;
              endif
              for i in (new)
              old = setremove(old, i);
              endfor
              if (old)
              "something's funky";
              return E_INVARG;
              endif
              return this.owned_objects = new;
              else
              return E_PERM;
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>init_for_core</NAME>
            <CODE>
              if (caller_perms().wizard)
              pass();
              if ($code_utils:verb_location() == this)
              this.rooms = {};
              delete_verb(this, "@web");
              delete_verb(this, "web_info");
              delete_verb(this, "set_web_info");
              delete_property(this, "web_info");
              else
              clear_property(this, "rooms");
              endif
              this.features = {$pasting_feature, $stage_talk};
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>find_help</NAME>
            <CODE>
              "'find_help (&lt;name&gt;[, databases])'";
              "Search for a help topic with the given name. [&lt;databases&gt;] defaults to the ones returned by $code_utils:help_db_list().";
              {name, ?databases = $code_utils:help_db_list()} = args;
              if (!name)
              this:tell("What topic do you want to search for?");
              elseif (result = $code_utils:help_db_search(name, databases))
              {object, realname} = result;
              if (object == $ambiguous_match)
              this:tell("The help topic \"", name, "\" could refer to any of the following:  ", $string_utils:english_list(realname));
              elseif (((object == $help) &amp;&amp; (!$object_utils:has_property(object, realname))) &amp;&amp; valid(o = $string_utils:match_object(name, player.location)))
              if ($object_utils:has_callable_verb(o, "help_msg"))
              this:tell("That help topic was returned by ", $string_utils:nn(o), ":help_msg().");
              elseif ($object_utils:has_property(o, "help_msg"))
              this:tell("That help topic is located in ", $string_utils:nn(o), ".help_msg.");
              else
              this:tell("That help topic was matched by $help but there doesn't seem to be any help available for it.");
              endif
              elseif (object == $verb_help)
              if (((what = $code_utils:parse_verbref(realname)) &amp;&amp; valid(what[1] = $string_utils:match_object(what[1], player.location))) &amp;&amp; $object_utils:has_verb(@what))
              this:tell("That help topic is located at the beginning of the verb ", $string_utils:nn(what[1]), ":", what[2], ".");
              else
              this:tell("That help topic was matched by $verb_help but there doesn't seem to be any help available for it.");
              endif
              else
              where = {};
              for x in (databases)
              if ({realname} == x:find_topics(realname))
              where = setadd(where, x);
              endif
              endfor
              asname = (name == realname) ? "" | ((" as \"" + realname) + "\"");
              if (where)
              this:tell("That help topic is located on ", $string_utils:nn(where), asname, ".");
              else
              "...this shouldn't happen unless $code_utils:help_db_search finds a match we weren't expecting";
              this:tell("That help topic appears to be located on ", $string_utils:nn(object), asname, ", although this command could not find it.");
              endif
              endif
              else
              this:tell("The help topic \"", name, "\" could not be found.");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
            <NAME>@spurn</NAME>
            <CODE>
              "Prevent an object or any of its descendents from going into your inventory, regardless of whose player perms sent it there.";
              "Syntax:  @spurn &lt;object&gt;";
              "         @spurn !&lt;object&gt;";
              "The second form removes an object from your list of spurned objects.";
              "Verb created by TheCat, 11/8/98";
              if (caller != this)
              return E_PERM;
              endif
              if (!argstr)
              this:tell("Spurn what?");
              elseif (argstr[1] == "!")
              "Stop spurning something.";
              item = this:my_match_object(argstr[2..$]);
              if (item in this.spurned_objects)
              this.spurned_objects = $list_utils:setremove_all(this.spurned_objects, item);
              this:tell(("You are no longer spurning " + $string_utils:nn(item)) + " or any kids of it.");
              else
              this:tell(("You are not spurning " + $string_utils:nn(item)) + ".");
              endif
              else
              "Spurn something.";
              item = this:my_match_object(argstr);
              if (!$command_utils:object_match_failed(item, argstr))
              if (item in this.spurned_objects)
              this:tell(("You are already spurning " + $string_utils:nn(item)) + " plus any and all kids of it.");
              else
              this.spurned_objects = setadd(this.spurned_objects, item);
              this:tell(("You are now spurning " + $string_utils:nn(item)) + " plus any and all kids of it.");
              endif
              endif
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
            <NAME>@spurned</NAME>
            <CODE>
              "Displays a list of spurned objects.";
              "Verb created by TheCat, 11/8/98";
              if (this.spurned_objects)
              this:tell("You are spurning the following objects, including any and all descendents:  " + $string_utils:nn(this.spurned_objects));
              else
              this:tell("You are not spurning any objects.");
              endif
            </CODE>
          </VERB>
          <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
            <NAME>set_spurned_objects</NAME>
            <CODE>
              "Permits programmatic setting of .spurned_objects, which is -c.";
              {spurned_objects} = args;
              if ($perm_utils:controls(caller_perms(), this))
              "Note, the final result must be a list of objects, otherwise there's no point.";
              if (typeof(spurned_objects) != LIST)
              spurned_objects = {spurned_objects};
              endif
              this.spurned_objects = spurned_objects;
              endif
            </CODE>
          </VERB>
          <OBJECT ID="obj4" FLAGS="f r" OWNER="obj2" LOCATION="obj-1">
            <NAME>generic builder</NAME>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>build_options</NAME>
              <VALUE>{}</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>at_room_width</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>at_number</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>join_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>object_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>victim_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>thing_arrive_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>othing_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>thing_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>player_arrive_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>oplayer_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>player_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>self_arrive_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>oself_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>self_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>rooms</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>refused_origins</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>refused_extra</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>default_refusal_time</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>report_refusal</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>refused_actions</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>refused_until</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>page_refused</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>page_refused_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>whisper_refused_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>mail_refused_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>spurned_objects</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>_mail_task</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c">
              <NAME>messages_going</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>mail_lists</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="r">
              <NAME>mail_notify</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>mail_forward</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>mail_options</NAME>
              <VALUE>{}</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>message_keep_date</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>messages_kept</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c">
              <NAME>current_message</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c">
              <NAME>messages</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>features</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>previous_connection</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>email_address</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="r">
              <NAME>last_disconnect_time</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>help</NAME>
              <VALUE>#84</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>more_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>linetask</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>linesleft</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" >
              <NAME>linebuffer</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>pagelen</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="r">
              <NAME>owned_objects</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>linelen</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c">
              <NAME>current_folder</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>all_connect_places</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>last_connect_place</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>dict</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>brief</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c">
              <NAME>lines</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>page_absent_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>pq</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>pqc</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>page_origin_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>page_echo_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>edit_options</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="r">
              <NAME>last_connect_time</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" >
              <NAME>ownership_quota</NAME>
              <VALUE>0</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>gender</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>prc</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>ppc</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>poc</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>psc</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>pr</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>pp</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>po</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>ps</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>home</NAME>
              <VALUE>#62</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>password</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>gaglist</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>paranoid</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>display_options</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>verb_subs</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="r">
              <NAME>first_connect_time</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" >
              <NAME>size_quota</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>last_password_time</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>last_connect_attempt</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c">
              <NAME>key</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="r">
              <NAME>aliases</NAME>
              <VALUE>{"generic builder"}</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="c r">
              <NAME>description</NAME>
              <VALUE>"You see a player who should type '@describe me as ...'."</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>object_size</NAME>
              <VALUE>{35132, 919123665}</VALUE>
            </PROPERTY>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
              <NAME>@quota</NAME>
              <CODE>
                set_task_perms(player);
                if (dobjstr == "")
                dobj = player;
                else
                dobj = $string_utils:match_player(dobjstr);
                endif
                if (!valid(dobj))
                player:notify("Show whose quota?");
                return;
                endif
                $quota_utils:display_quota(dobj);
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
              <NAME>@create</NAME>
              <CODE>
                set_task_perms(player);
                nargs = length(args);
                pos = "named" in args;
                if ((pos &lt;= 1) || (pos == nargs))
                pos = "called" in args;
                endif
                if ((pos &lt;= 1) || (pos == nargs))
                player:notify("Usage:  @create &lt;parent-class&gt; named [name:]alias,...,alias");
                player:notify("   or:  @create &lt;parent-class&gt; named name-and-alias,alias,...,alias");
                player:notify("");
                player:notify("where &lt;parent-class&gt; is one of the standard classes ($note, $letter, $thing, or $container) or an object number (e.g., #999), or the name of some object in the current room.");
                player:notify("You can use \"called\" instead of \"named\", if you wish.");
                return;
                endif
                parentstr = $string_utils:from_list(args[1..pos - 1], " ");
                namestr = $string_utils:from_list(args[pos + 1..$], " ");
                if (!namestr)
                player:notify("You must provide a name.");
                return;
                endif
                if (parentstr[1] == "$")
                parent = #0.(parentstr[2..$]);
                if (typeof(parent) != OBJ)
                player:notify(tostr("\"", parentstr, "\" does not name an object."));
                return;
                endif
                else
                parent = player:my_match_object(parentstr);
                if ($command_utils:object_match_failed(parent, parentstr))
                return;
                endif
                endif
                object = player:_create(parent);
                if (typeof(object) == ERR)
                player:notify(tostr(object));
                return;
                endif
                for f in ($string_utils:char_list(player:build_option("create_flags") || ""))
                object.(f) = 1;
                endfor
                "move() shouldn't, but could bomb. Say if player has a stupid :accept";
                `move(object, player) ! ANY';
                $building_utils:set_names(object, namestr);
                if ((other_names = setremove(object.aliases, object.name)) != {})
                aka = (" (aka " + $string_utils:english_list(other_names)) + ")";
                else
                aka = "";
                endif
                player:notify(tostr("You now have ", object.name, aka, " with object number ", object, " and parent ", parent.name, " (", parent, ")."));
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
              <NAME>@recycle</NAME>
              <CODE>
                set_task_perms(player);
                dobj = player:my_match_object(dobjstr);
                if (dobj == $nothing)
                player:notify(tostr("Usage:  ", verb, " &lt;object&gt;"));
                elseif ($command_utils:object_match_failed(dobj, dobjstr))
                "...bogus object...";
                elseif (player == dobj)
                player:notify($wiz_utils.suicide_string);
                else
                name = dobj.name;
                result = player:_recycle(dobj);
                if (typeof(result) == ERR)
                player:notify(tostr(result));
                else
                player:notify(tostr(name, " (", dobj, ") recycled."));
                endif
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="as" IOBJ="any">
              <NAME>@recreate</NAME>
              <CODE>
                "@recreate &lt;object&gt; as &lt;parent-class&gt; named [name:]alias,alias,...";
                "  effectively recycles and creates &lt;object&gt; all over again.";
                set_task_perms(player);
                as = prepstr in args;
                named = "named" in args;
                if ((named &lt;= (as + 1)) || (named == length(args)))
                named = "called" in args;
                endif
                if ((named &lt;= (as + 1)) || (named == length(args)))
                player:notify_lines({tostr("Usage:  ", verb, " &lt;object&gt; as &lt;parent-class&gt; named [name:]alias,...,alias"), "", "where &lt;parent-class&gt; is one of the standard classes ($note, $letter, $thing, or $container) or an object number (e.g., #999), or the name of some object in the current room.  The [name:]alias... specification is as in @create.", "", "You can use \"called\" instead of \"named\", if you wish."});
                return;
                elseif ($command_utils:object_match_failed(dobj = player:my_match_object(dobjstr), dobjstr))
                return;
                elseif (is_player(dobj))
                player:notify("You really *don't* want to do that!");
                return;
                endif
                parentstr = $string_utils:from_list(args[as + 1..named - 1], " ");
                namestr = $string_utils:from_list(args[named + 1..$], " ");
                if (parentstr[1] == "$")
                parent = #0.(parentstr[2..$]);
                if (typeof(parent) != OBJ)
                player:notify(tostr("\"", parentstr, "\" does not name an object."));
                return;
                endif
                else
                parent = player:my_match_object(parentstr);
                if ($command_utils:object_match_failed(parent, parentstr))
                return;
                endif
                endif
                if (!(e = $building_utils:recreate(dobj, parent)))
                player:notify(tostr(e));
                return;
                endif
                for f in ($string_utils:char_list(player:build_option("create_flags") || ""))
                dobj.(f) = 1;
                endfor
                "move() shouldn't, but could, bomb. Say if player has a stupid :accept";
                `move(dobj, player) ! ANY';
                $building_utils:set_names(dobj, namestr);
                if ((other_names = setremove(dobj.aliases, dobj.name)) != {})
                aka = (" (aka " + $string_utils:english_list(other_names)) + ")";
                else
                aka = "";
                endif
                player:notify(tostr("Object number ", dobj, " is now ", dobj.name, aka, " with parent ", parent.name, " (", parent, ")."));
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
              <NAME>@dig</NAME>
              <CODE>
                set_task_perms(player);
                nargs = length(args);
                if (nargs == 1)
                room = args[1];
                exit_spec = "";
                elseif ((nargs &gt;= 3) &amp;&amp; (args[2] == "to"))
                exit_spec = args[1];
                room = $string_utils:from_list(args[3..$], " ");
                elseif (argstr &amp;&amp; (!prepstr))
                room = argstr;
                exit_spec = "";
                else
                player:notify(tostr("Usage:  ", verb, " &lt;new-room-name&gt;"));
                player:notify(tostr("    or  ", verb, " &lt;exit-description&gt; to &lt;new-room-name-or-old-room-object-number&gt;"));
                return;
                endif
                if (room != tostr(other_room = toobj(room)))
                room_kind = player:build_option("dig_room");
                if (room_kind == 0)
                room_kind = $room;
                endif
                other_room = player:_create(room_kind);
                if (typeof(other_room) == ERR)
                player:notify(tostr("Cannot create new room as a child of ", $string_utils:nn(room_kind), ": ", other_room, ".  See `help @build-options' for information on how to specify the kind of room this command tries to create."));
                return;
                endif
                for f in ($string_utils:char_list(player:build_option("create_flags") || ""))
                other_room.(f) = 1;
                endfor
                other_room.name = room;
                other_room.aliases = {room};
                move(other_room, $nothing);
                player:notify(tostr(other_room.name, " (", other_room, ") created."));
                elseif (nargs == 1)
                player:notify("You can't dig a room that already exists!");
                return;
                elseif ((!valid(player.location)) || (!($room in $object_utils:ancestors(player.location))))
                player:notify(tostr("You may only use the ", verb, " command from inside a room."));
                return;
                elseif ((!valid(other_room)) || (!($room in $object_utils:ancestors(other_room))))
                player:notify(tostr(other_room, " doesn't look like a room to me..."));
                return;
                endif
                if (exit_spec)
                exit_kind = player:build_option("dig_exit");
                if (exit_kind == 0)
                exit_kind = $exit;
                endif
                exits = $string_utils:explode(exit_spec, "|");
                if ((length(exits) &lt; 1) || (length(exits) &gt; 2))
                player:notify("The exit-description must have the form");
                player:notify("     [name:]alias,...,alias");
                player:notify("or   [name:]alias,...,alias|[name:]alias,...,alias");
                return;
                endif
                do_recreate = !player:build_option("bi_create");
                to_ok = $building_utils:make_exit(exits[1], player.location, other_room, do_recreate, exit_kind);
                if (to_ok &amp;&amp; (length(exits) == 2))
                $building_utils:make_exit(exits[2], other_room, player.location, do_recreate, exit_kind);
                endif
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
              <NAME>@audit</NAME>
              <CODE>
                "Usage:  @audit [player] [from &lt;start&gt;] [to &lt;end&gt;] [for &lt;matching string&gt;]";
                set_task_perms(player);
                dobj = $string_utils:match_player(dobjstr);
                if (!dobjstr)
                dobj = player;
                elseif ($command_utils:player_match_result(dobj, dobjstr)[1])
                return;
                endif
                dobjwords = $string_utils:words(dobjstr);
                if (args[1..length(dobjwords)] == dobjwords)
                args = args[length(dobjwords) + 1..$];
                endif
                if (!(parse_result = $code_utils:_parse_audit_args(@args)))
                player:notify(tostr("Usage:  ", verb, " [player] [from &lt;start&gt;] [to &lt;end&gt;] [for &lt;match&gt;]"));
                return;
                endif
                return $building_utils:do_audit(dobj, @parse_result);
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
              <NAME>@count</NAME>
              <CODE>
                if (!dobjstr)
                dobj = player;
                elseif ($command_utils:player_match_result(dobj = $string_utils:match_player(dobjstr), dobjstr)[1])
                return;
                endif
                set_task_perms(player);
                if (typeof(dobj.owned_objects) == LIST)
                count = length(dobj.owned_objects);
                player:notify(tostr(dobj.name, " currently owns ", count, " object", (count == 1) ? "." | "s."));
                if ($quota_utils.byte_based)
                player:notify(tostr("Total bytes consumed:  ", $string_utils:group_number($quota_utils:get_size_quota(dobj)[2]), "."));
                endif
                else
                player:notify(tostr(dobj.name, " is not enrolled in the object ownership system.  Use @countDB instead."));
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
              <NAME>@countDB</NAME>
              <CODE>
                if (!dobjstr)
                dobj = player;
                elseif ($command_utils:player_match_result(dobj = $string_utils:match_player(dobjstr), dobjstr)[1])
                return;
                endif
                set_task_perms(player);
                count = 0;
                for o in [#1..max_object()]
                if ($command_utils:running_out_of_time())
                player:notify("Counting...");
                suspend(5);
                endif
                if (valid(o) &amp;&amp; (o.owner == dobj))
                count = count + 1;
                endif
                endfor
                player:notify(tostr(dobj.name, " currently owns ", count, " object", (count == 1) ? "." | "s."));
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
              <NAME>@sort-owned*-objects</NAME>
              <CODE>
                "$player:owned_objects -- sorts a players .owned_objects property in ascending";
                "order so it looks nice on @audit.";
                if (player != this)
                return E_PERM;
                endif
                if (typeof(player.owned_objects) == LIST)
                if ((!dobjstr) || (index("object", dobjstr) == 1))
                ret = $list_utils:sort_suspended(0, player.owned_objects);
                elseif (index("size", dobjstr) == 1)
                ret = $list_utils:reverse_suspended($list_utils:sort_suspended(0, player.owned_objects, $list_utils:slice($list_utils:map_prop(player.owned_objects, "object_size"))));
                endif
                if (typeof(ret) == LIST)
                player.owned_objects = ret;
                player:tell("Your .owned_objects list has been sorted.");
                return 1;
                else
                player:tell("Something went wrong. .owned_objects not sorted.");
                return 0;
                endif
                else
                player:tell("You are not enrolled in .owned_objects scheme, sorry.");
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
              <NAME>@add-owned</NAME>
              <CODE>
                if (player != this)
                player:tell("Permission Denied");
                return E_PERM;
                endif
                if (!valid(dobj))
                player:tell("Don't understand `", dobjstr, "' as an object to add.");
                elseif (dobj.owner != player)
                player:tell("You don't own ", dobj.name, ".");
                elseif (dobj in player.owned_objects)
                player:tell(dobj.name, " is already recorded in your .owned_objects.");
                else
                player.owned_objects = setadd(player.owned_objects, dobj);
                player:tell("Added ", dobj, " to your .owned_objects.");
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
              <NAME>@verify-owned</NAME>
              <CODE>
                for x in (player.owned_objects)
                if ((!valid(x)) || (x.owner != player))
                player.owned_objects = setremove(player.owned_objects, x);
                if (valid(x))
                player:tell("Removing ", x.name, "(", x, "), owned by ", valid(x.owner) ? x.owner.name | "&lt;recycled player&gt;", " from your .owned_objects property.");
                else
                player:tell("Removing invalid object ", x, " from your .owned_objects property.");
                endif
                endif
                $command_utils:suspend_if_needed(2, tostr("Suspending @verify-owned ... ", x));
                endfor
                player:tell(".owned_objects property verified.");
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
              <NAME>@unlock</NAME>
              <CODE>
                set_task_perms(player);
                dobj = player:my_match_object(dobjstr);
                if ($command_utils:object_match_failed(dobj, dobjstr))
                return;
                endif
                try
                dobj.key = 0;
                player:notify(tostr("Unlocked ", dobj.name, "."));
                except error (ANY)
                player:notify(error[2]);
                endtry
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="with/using" IOBJ="any">
              <NAME>@lock</NAME>
              <CODE>
                set_task_perms(player);
                dobj = player:my_match_object(dobjstr);
                if ($command_utils:object_match_failed(dobj, dobjstr))
                return;
                endif
                key = $lock_utils:parse_keyexp(iobjstr, player);
                if (typeof(key) == STR)
                player:notify("That key expression is malformed:");
                player:notify(tostr("  ", key));
                else
                try
                dobj.key = key;
                player:notify(tostr("Locked ", dobj.name, " to this key:"));
                player:notify(tostr("  ", $lock_utils:unparse_key(key)));
                except error (ANY)
                player:notify(error[2]);
                endtry
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
              <NAME>@newmess*age</NAME>
              <CODE>
                "Usage:  @message &lt;message-name&gt; [&lt;message&gt;] [on &lt;object&gt;]";
                "Add a message property to an object (default is player), and optionally";
                "set its value.  For use by non-programmers, who aren't allowed to add";
                "properties generally.";
                "To undo the effects of this, use @unmessage.";
                set_task_perms(player);
                dobjwords = $string_utils:words(dobjstr);
                if (!dobjwords)
                player:notify(tostr("Usage:  ", verb, " &lt;message-name&gt; [&lt;message&gt;] [on &lt;object&gt;]"));
                return;
                endif
                object = valid(iobj) ? iobj | player;
                name = this:_messagify(dobjwords[1]);
                value = dobjstr[length(dobjwords[1]) + 2..$];
                nickname = "@" + name[1..$ - 4];
                e = `add_property(object, name, value, {player, "rc"}) ! ANY';
                if (typeof(e) != ERR)
                player:notify(tostr(nickname, " on ", object.name, " is now \"", object.(name), "\"."));
                elseif (e != E_INVARG)
                player:notify(tostr(e));
                elseif ($object_utils:has_property(object, name))
                "object already has property";
                player:notify(tostr(object.name, " already has a ", nickname, " message."));
                else
                player:notify(tostr("Unable to add ", nickname, " message to ", object.name, ": ", e));
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
              <NAME>@unmess*age</NAME>
              <CODE>
                "Usage:  @unmessage &lt;message-name&gt; [from &lt;object&gt;]";
                "Remove a message property from an object (default is player).";
                set_task_perms(player);
                if ((!dobjstr) || (length($string_utils:words(dobjstr)) &gt; 1))
                player:notify(tostr("Usage:  ", verb, " &lt;message-name&gt; [from &lt;object&gt;]"));
                return;
                endif
                object = valid(iobj) ? iobj | player;
                name = this:_messagify(dobjstr);
                nickname = "@" + name[1..$ - 4];
                try
                delete_property(object, name);
                player:notify(tostr(nickname, " message removed from ", object.name, "."));
                except (E_PROPNF)
                player:notify(tostr("No ", nickname, " message found on ", object.name, "."));
                except error (ANY)
                player:notify(error[2]);
                endtry
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>_messagify</NAME>
              <CODE>
                "Given any of several formats people are likely to use for a @message";
                "property, return the canonical form (\"foobar_msg\").";
                name = args[1];
                if (name[1] == "@")
                name = name[2..$];
                endif
                if ((length(name) &lt; 4) || (name[$ - 3..$] != "_msg"))
                name = name + "_msg";
                endif
                return name;
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
              <NAME>@kids</NAME>
              <CODE>
                "'@kids &lt;obj&gt;' - List the children of an object. This is handy for seeing whether anybody's actually using your carefully-wrought public objects.";
                thing = player:my_match_object(dobjstr);
                if (!$command_utils:object_match_failed(thing, dobjstr))
                kids = children(thing);
                if (kids)
                player:notify(tostr(thing:title(), "(", thing, ") has ", length(kids), " kid", (length(kids) == 1) ? "" | "s", "."));
                player:notify(tostr($string_utils:names_of(kids)));
                else
                player:notify(tostr(thing:title(), "(", thing, ") has no kids."));
                endif
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
              <NAME>@contents</NAME>
              <CODE>
                "'@contents &lt;obj&gt; - list the contents of an object, with object numbers.";
                set_task_perms(player);
                if (!dobjstr)
                dobj = player.location;
                else
                dobj = player:my_match_object(dobjstr);
                endif
                if ($command_utils:object_match_failed(dobj, dobjstr))
                else
                contents = dobj.contents;
                if (contents)
                player:notify(tostr(dobj:title(), "(", dobj, ") contains:"));
                player:notify(tostr($string_utils:names_of(contents)));
                else
                player:notify(tostr(dobj:title(), "(", dobj, ") contains nothing."));
                endif
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
              <NAME>@par*ents</NAME>
              <CODE>
                "'@parents &lt;thing&gt;' - List &lt;thing&gt; and its ancestors, all the way back to the Root Class (#1).";
                if (player != this)
                return player:notify("Permission denied: not a builder.");
                elseif (!dobjstr)
                player:notify(tostr("Usage:  ", verb, " &lt;object&gt;"));
                return;
                endif
                set_task_perms(player);
                o = player:my_match_object(dobjstr);
                if (!$command_utils:object_match_failed(o, dobjstr))
                player:notify($string_utils:names_of({o, @$object_utils:ancestors(o)}));
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
              <NAME>@location*s</NAME>
              <CODE>
                "@locations &lt;thing&gt; - List &lt;thing&gt; and its containers, all the way back to the outermost one.";
                set_task_perms(player);
                if (!dobjstr)
                what = player;
                elseif ((!valid(what = player:my_match_object(dobjstr))) &amp;&amp; (!valid(what = $string_utils:match_player(dobjstr))))
                $command_utils:object_match_failed(dobj, dobjstr);
                return;
                endif
                player:notify($string_utils:names_of({what, @$object_utils:locations(what)}));
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
              <NAME>@cl*asses</NAME>
              <CODE>
                "$class_registry is in the following format:";
                "        { {name, description, members}, ... }";
                "where `name' is the name of a particular class of objects, `description' is a one-sentence description of the membership of the class, and `members' is a list of object numbers, the members of the class.";
                "";
                if (!$command_utils:yes_or_no("This command can be very spammy.  Are you certain you need this information?"))
                return player:tell("OK, aborting.  The lag thanks you.");
                endif
                if (args)
                members = {};
                for name in (args)
                class = $list_utils:assoc_prefix(name, $class_registry);
                if (class)
                for o in (class[3])
                members = setadd(members, o);
                endfor
                else
                player:tell("There is no defined class of objects named `", name, "'; type `@classes' to see a complete list of defined classes.");
                return;
                endif
                endfor
                printed = {};
                for o in (members)
                what = o;
                while (valid(what))
                printed = setadd(printed, what);
                what = parent(what);
                endwhile
                endfor
                player:tell("Members of the class", (length(args) &gt; 1) ? "es" | "", " named ", $string_utils:english_list(args), ":");
                player:tell();
                set_task_perms(player);
                this:classes_2($root_class, "", members, printed);
                player:tell();
                else
                "List all class names and descriptions";
                player:tell("The following classes of objects have been defined:");
                for class in ($class_registry)
                name = class[1];
                description = class[2];
                player:tell();
                player:tell("-- ", name, ": ", description);
                endfor
                player:tell();
                player:tell("Type `@classes &lt;name&gt;' to see the members of the class with the given &lt;name&gt;.");
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>classes_2</NAME>
              <CODE>
                {root, indent, members, printed} = args;
                if (root in members)
                player:tell(indent, root.name, " (", root, ")");
                else
                player:tell(indent, "&lt;", root.name, " (", root, ")&gt;");
                endif
                printed = setremove(printed, root);
                indent = indent + "  ";
                set_task_perms(caller_perms());
                for c in ($list_utils:sort_suspended(2, $set_utils:intersection(children(root), printed)))
                $command_utils:suspend_if_needed(10);
                this:classes_2(c, indent, members, printed);
                endfor
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>_create</NAME>
              <CODE>
                set_task_perms(caller_perms());
                if (this:build_option("bi_create"))
                return $quota_utils:bi_create(@args);
                else
                return $recycler:(verb)(@args);
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>_recycle</NAME>
              <CODE>
                set_task_perms(caller_perms());
                if (this:build_option("bi_create"))
                return recycle(@args);
                else
                return $recycler:(verb)(@args);
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="at/to" IOBJ="any">
              <NAME>@chparent</NAME>
              <CODE>
                set_task_perms(player);
                if ($command_utils:object_match_failed(object = player:my_match_object(dobjstr), dobjstr))
                "...bogus object...";
                elseif ($command_utils:object_match_failed(parent = player:my_match_object(iobjstr), iobjstr))
                "...bogus new parent...";
                elseif ((this != player) &amp;&amp; (!$object_utils:isa(player, $player)))
                "...They chparented to #1 and want to chparent back to $prog.  Probably for some nefarious purpose...";
                player:notify("You don't seem to already be a valid player class.  Perhaps chparenting away from the $player hierarchy was not such a good idea.  Permission denied.");
                elseif (is_player(object) &amp;&amp; (!$object_utils:isa(parent, $player)))
                player:notify(tostr(object, " is a player and ", parent, " is not a player class."));
                player:notify("You really *don't* want to do this.  Trust me.");
                else
                if ($object_utils:isa(object, $mail_recipient))
                if (!$command_utils:yes_or_no("Chparenting a mailing list is usually a really bad idea.  Do you really want to do it?  (If you don't know why we're asking this question, please say 'no'.)"))
                return player:tell("Aborted.");
                endif
                endif
                try
                result = player:_chparent(object, parent);
                player:notify("Parent changed.");
                except (E_INVARG)
                if (valid(object) &amp;&amp; valid(parent))
                player:notify(tostr("Some property existing on ", parent, " is defined on ", object, " or one of its descendants."));
                player:notify(tostr("Try @check-chparent ", dobjstr, " to ", iobjstr));
                else
                player:notify("Either that is not a valid object or not a valid parent");
                endif
                except (E_PERM)
                player:notify("Either you don't own the object, don't own the parent, or the parent is not fertile.");
                except (E_RECMOVE)
                player:notify("That parent object is a descendant of the object!");
                endtry
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="at/to" IOBJ="any">
              <NAME>@check-chp*arent</NAME>
              <CODE>
                "Copied from generic programmer (#217):@check-chparent by ur-Rog (#6349) Sun Nov  8 22:13:53 1992 PST";
                "@check-chparent object to newparent";
                "checks for property name conflicts that would make @chparent bomb.";
                set_task_perms(player);
                if (!(dobjstr &amp;&amp; iobjstr))
                player:notify(tostr("Usage:  ", verb, " &lt;object&gt; to &lt;newparent&gt;"));
                elseif ($command_utils:object_match_failed(object = player:my_match_object(dobjstr), dobjstr))
                "...bogus object...";
                elseif ($command_utils:object_match_failed(parent = player:my_match_object(iobjstr), iobjstr))
                "...bogus new parent...";
                elseif (player != this)
                player:notify(tostr(E_PERM));
                elseif (typeof(result = $object_utils:property_conflicts(object, parent)) == ERR)
                player:notify(tostr(result));
                elseif (result)
                su = $string_utils;
                player:notify("");
                player:notify(su:left("Property", 30) + "Also Defined on");
                player:notify(su:left("--------", 30) + "---------------");
                for r in (result)
                player:notify(su:left(tostr(parent, ".", r[1]), 30) + su:from_list(listdelete(r, 1), " "));
                $command_utils:suspend_if_needed(0);
                endfor
                else
                player:notify("No property conflicts found.");
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="at/to" IOBJ="any">
              <NAME>@set*prop</NAME>
              <CODE>
                "Syntax:  @set &lt;object&gt;.&lt;prop-name&gt; to &lt;value&gt;";
                "";
                "Changes the value of the specified object's property to the given value.";
                "You must have permission to modify the property, either because you own the property or if it is writable.";
                set_task_perms(player);
                if (this != player)
                return player:tell(E_PERM);
                endif
                l = $code_utils:parse_propref(dobjstr);
                if (l)
                dobj = player:my_match_object(l[1], player.location);
                if ($command_utils:object_match_failed(dobj, l[1]))
                return;
                endif
                prop = l[2];
                to_i = "to" in args;
                at_i = "at" in args;
                i = (to_i &amp;&amp; at_i) ? min(to_i, at_i) | (to_i || at_i);
                iobjstr = argstr[$string_utils:word_start(argstr)[i][2] + 1..$];
                iobjstr = $string_utils:trim(iobjstr);
                if (!iobjstr)
                try
                val = dobj.(prop) = "";
                except e (ANY)
                player:tell("Unable to set ", dobj, ".", prop, ": ", e[2]);
                return;
                endtry
                iobjstr = "\"\"";
                "elseif (iobjstr[1] == \"\\\"\")";
                "val = dobj.(prop) = iobjstr;";
                "iobjstr = \"\\\"\" + iobjstr + \"\\\"\";";
                else
                val = $string_utils:to_value(iobjstr);
                if (!val[1])
                player:tell("Could not parse: ", iobjstr);
                return;
                elseif (!$object_utils:has_property(dobj, prop))
                player:tell("That object does not define that property.");
                return;
                endif
                try
                val = dobj.(prop) = val[2];
                except e (ANY)
                player:tell("Unable to set ", dobj, ".", prop, ": ", e[2]);
                return;
                endtry
                endif
                player:tell("Property ", dobj, ".", prop, " set to ", $string_utils:print(val), ".");
                else
                player:tell("Property ", dobjstr, " not found.");
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>build_option</NAME>
              <CODE>
                ":build_option(name)";
                "Returns the value of the specified builder option";
                if ((caller == this) || $perm_utils:controls(caller_perms(), this))
                return $build_options:get(this.build_options, args[1]);
                else
                return E_PERM;
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>set_build_option</NAME>
              <CODE>
                ":set_build_option(oname,value)";
                "Changes the value of the named option.";
                "Returns a string error if something goes wrong.";
                if (!((caller == this) || $perm_utils:controls(caller_perms(), this)))
                return tostr(E_PERM);
                endif
                "...this is kludgy, but it saves me from writing the same verb n times.";
                "...there's got to be a better way to do this...";
                verb[1..4] = "";
                foo_options = verb + "s";
                "...";
                if (typeof(s = #0.(foo_options):set(this.(foo_options), @args)) == STR)
                return s;
                elseif (s == this.(foo_options))
                return 0;
                else
                this.(foo_options) = s;
                return 1;
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
              <NAME>@build-o*ptions @buildo*ptions @builder-o*ptions @buildero*ptions</NAME>
              <CODE>
                "@&lt;what&gt;-option &lt;option&gt; [is] &lt;value&gt;   sets &lt;option&gt; to &lt;value&gt;";
                "@&lt;what&gt;-option &lt;option&gt;=&lt;value&gt;        sets &lt;option&gt; to &lt;value&gt;";
                "@&lt;what&gt;-option +&lt;option&gt;     sets &lt;option&gt;   (usually equiv. to &lt;option&gt;=1";
                "@&lt;what&gt;-option -&lt;option&gt;     resets &lt;option&gt; (equiv. to &lt;option&gt;=0)";
                "@&lt;what&gt;-option !&lt;option&gt;     resets &lt;option&gt; (equiv. to &lt;option&gt;=0)";
                "@&lt;what&gt;-option &lt;option&gt;      displays value of &lt;option&gt;";
                set_task_perms(player);
                what = "build";
                options = what + "_options";
                option_pkg = #0.(options);
                set_option = ("set_" + what) + "_option";
                if (!args)
                player:notify_lines({("Current " + what) + " options:", "", @option_pkg:show(this.(options), option_pkg.names)});
                return;
                elseif (typeof(presult = option_pkg:parse(args)) == STR)
                player:notify(presult);
                return;
                else
                if (length(presult) &gt; 1)
                if (typeof(sresult = this:(set_option)(@presult)) == STR)
                player:notify(sresult);
                return;
                elseif (!sresult)
                player:notify("No change.");
                return;
                endif
                endif
                player:notify_lines(option_pkg:show(this.(options), presult[1]));
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
              <NAME>@measure</NAME>
              <CODE>
                "Syntax:";
                "  @measure object &lt;object name&gt;";
                "  @measure summary [player]";
                "  @measure new [player]";
                "  @measure breakdown &lt;object name&gt;";
                "  @measure recent [number of days] [player]";
                if (length(args) &lt; 1)
                player:tell_lines($code_utils:verb_documentation());
                return;
                endif
                if (index("object", args[1]) == 1)
                "Object.";
                what = player.location:match_object(name = $string_utils:from_list(args[2..$], " "));
                if (!valid(what))
                player:tell("Sorry, I didn't understand `", name, "'");
                elseif ((((($object_utils:has_property(what, "object_size") &amp;&amp; (what.object_size[1] &gt; $byte_quota_utils.too_large)) &amp;&amp; (!player.wizard)) &amp;&amp; (player != $byte_quota_utils.owner)) &amp;&amp; (player != $hacker)) &amp;&amp; (player != what.owner))
                player:tell($string_utils:nn(what), " when last measured was ", $string_utils:group_number(what.object_size[1]), " bytes.  To reduce lag induced by multiple players re-measuring large objects multiple times, you may not measure that object.");
                elseif ((`what.object_size[2] ! ANY =&gt; 0' &gt; (time() - 86400)) &amp;&amp; (!$command_utils:yes_or_no(tostr("That object was measured only ", $string_utils:from_seconds(time() - what.object_size[2]), " ago.  Please don't lag the MOO by remeasuring things frequently.  Are you sure you want to remeasure it?"))))
                return player:tell("Not measuring.  It was ", $string_utils:group_number(what.object_size[1]), " bytes when last measured.");
                else
                player:tell("Checking size of ", what.name, " (", what, ")...");
                player:tell("Size of ", what.name, " (", what, ") is ", $byte_quota_utils:object_bytes(what), " bytes.");
                endif
                elseif (index("summary", args[1]) == 1)
                "Summarize player.";
                if (length(args) == 1)
                what = player;
                else
                what = $string_utils:match_player(name = $string_utils:from_list(args[2..$], " "));
                endif
                if (!valid(what))
                player:tell("Sorry, I don't know who you mean by `", name, "'");
                else
                $byte_quota_utils:do_summary(what);
                endif
                elseif (index("new", args[1]) == 1)
                if (length(args) == 1)
                what = player;
                elseif (!valid(what = $string_utils:match_player(name = $string_utils:from_list(args[2..$], " "))))
                return $command_utils:player_match_failed(what, name);
                endif
                player:tell("Measuring the sizes of ", what.name, "'s recently created objects...");
                total = 0;
                unmeasured_index = 4;
                unmeasured_multiplier = 100;
                nunmeasured = 0;
                if (typeof(what.owned_objects) == LIST)
                for x in (what.owned_objects)
                if (!$object_utils:has_property(x, "object_size"))
                nunmeasured = nunmeasured + 1;
                elseif (!x.object_size[1])
                player:tell("Measured ", $string_utils:nn(x), ":  ", size = $byte_quota_utils:object_bytes(x), " bytes.");
                total = total + size;
                endif
                $command_utils:suspend_if_needed(5);
                endfor
                if (nunmeasured &amp;&amp; (what.size_quota[unmeasured_index] &lt; (unmeasured_multiplier * nunmeasured)))
                what.size_quota[unmeasured_index] = (what.size_quota[unmeasured_index] % unmeasured_multiplier) + (nunmeasured * unmeasured_multiplier);
                endif
                player:tell("Total bytes used in new creations: ", total, ".", nunmeasured ? tostr("There were a total of ", nunmeasured, " object(s) found with no .object_size property.  This will prevent additional building.") | "");
                else
                player:tell("Sorry, ", what.name, " is not enrolled in the object measurement scheme.");
                endif
                elseif (index("recent", args[1]) == 1)
                "@measure recent days player";
                if (length(args) &gt; 1)
                days = $code_utils:toint(args[2]);
                else
                days = $byte_quota_utils.cycle_days;
                endif
                if (!days)
                return player:tell("Couldn't understand `", args[2], "' as a positive integer.");
                endif
                if (length(args) &gt; 2)
                if (!valid(who = $string_utils:match_player(name = $string_utils:from_list(args[3..$], " "))))
                return $command_utils:player_match_failed(who, name);
                endif
                else
                who = player;
                endif
                if (typeof(who.owned_objects) == LIST)
                player:tell("Re-measuring objects of ", $string_utils:nn(who), " which have not been measured in the past ", days, " days.");
                when = time() - (days * 86400);
                which = {};
                for x in (who.owned_objects)
                if (x.object_size[2] &lt; when)
                $byte_quota_utils:object_size(x);
                which = setadd(which, x);
                $command_utils:suspend_if_needed(3, "...measuring");
                endif
                endfor
                player:tell("Done, re-measured ", length(which), " objects.", (length(which) &gt; 0) ? "  Recommend you use @measure summary to update the display of @quota." | "");
                else
                player:tell("Sorry, ", who.name, " is not enrolled in the object measurement scheme.");
                endif
                elseif (index("breakdown", args[1]) == 1)
                what = player.location:match_object(name = $string_utils:from_list(args[2..$], " "));
                if (!valid(what))
                player:tell("Sorry, I didn't understand `", name, "'");
                elseif (!$byte_quota_utils:can_peek(player, what.owner))
                return player:tell("Sorry, you don't control ", what.name, " (", what, ")");
                else
                if (mail = $command_utils:yes_or_no("This might be kinda long.  Want me to mail you the result?"))
                player:tell("Result will be mailed.");
                endif
                info = $byte_quota_utils:do_breakdown(what);
                if (typeof(info) == ERR)
                player:tell(info);
                endif
                if (mail)
                $mail_agent:send_message($byte_quota_utils.owner, {player}, tostr("Object breakdown of ", what.name, " (", what, ")"), info);
                else
                player:tell_lines_suspended(info);
                endif
                endif
                else
                player:tell("Not a sub-command of @measure: ", args[1]);
                player:tell_lines($code_utils:verb_documentation());
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>init_for_core</NAME>
              <CODE>
                if (caller_perms().wizard)
                if (this == $builder)
                this.build_options = {};
                else
                clear_property(this, "build_options");
                endif
                return pass(@args);
                endif
              </CODE>
            </VERB>
            <OBJECT ID="obj58" FLAGS="f r" OWNER="obj2" LOCATION="obj-1">
              <NAME>generic programmer</NAME>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>eval_subs</NAME>
                <VALUE>{}</VALUE>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>eval_ticks</NAME>
                <VALUE>3</VALUE>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>eval_env</NAME>
                <VALUE>"here=player.location;me=player"</VALUE>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>prog_options</NAME>
                <VALUE>{}</VALUE>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>build_options</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>at_room_width</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>at_number</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>join_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>object_port_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>victim_port_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>thing_arrive_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>othing_port_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>thing_port_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>player_arrive_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>oplayer_port_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>player_port_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>self_arrive_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>oself_port_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>self_port_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>rooms</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>refused_origins</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>refused_extra</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>default_refusal_time</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>report_refusal</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>refused_actions</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>refused_until</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>page_refused</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>page_refused_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>whisper_refused_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>mail_refused_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>spurned_objects</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>_mail_task</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c">
                <NAME>messages_going</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>mail_lists</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>mail_notify</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>mail_forward</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>mail_options</NAME>
                <VALUE>{}</VALUE>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>message_keep_date</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>messages_kept</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c">
                <NAME>current_message</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c">
                <NAME>messages</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>features</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" >
                <NAME>previous_connection</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" >
                <NAME>email_address</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="r">
                <NAME>last_disconnect_time</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>help</NAME>
                <VALUE>{#22, #28, #19, #18}</VALUE>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>more_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>linetask</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>linesleft</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" >
                <NAME>linebuffer</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>pagelen</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="r">
                <NAME>owned_objects</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>linelen</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c">
                <NAME>current_folder</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" >
                <NAME>all_connect_places</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" >
                <NAME>last_connect_place</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>dict</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>brief</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c">
                <NAME>lines</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>page_absent_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>pq</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>pqc</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>page_origin_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>page_echo_msg</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>edit_options</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="r">
                <NAME>last_connect_time</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" >
                <NAME>ownership_quota</NAME>
                <VALUE>0</VALUE>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>gender</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>prc</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>ppc</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>poc</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>psc</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>pr</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>pp</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>po</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>ps</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>home</NAME>
                <VALUE>#62</VALUE>
              </PROPERTY>
              <PROPERTY OWNER="obj2" >
                <NAME>password</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>gaglist</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>paranoid</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>display_options</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>verb_subs</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="r">
                <NAME>first_connect_time</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj36" >
                <NAME>size_quota</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" >
                <NAME>last_password_time</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" >
                <NAME>last_connect_attempt</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c">
                <NAME>key</NAME>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="r">
                <NAME>aliases</NAME>
                <VALUE>{"generic", "programmer"}</VALUE>
              </PROPERTY>
              <PROPERTY OWNER="obj2" PERMS="c r">
                <NAME>description</NAME>
                <VALUE>"You see a player who is too experienced to have any excuse for not having a description."</VALUE>
              </PROPERTY>
              <PROPERTY OWNER="obj36" PERMS="r">
                <NAME>object_size</NAME>
                <VALUE>{58760, 919123697}</VALUE>
              </PROPERTY>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@prop*erty</NAME>
                <CODE>
                  set_task_perms(player);
                  if (!player.programmer)
                  player:notify("You need to be a programmer to do this.");
                  player:notify("If you want to become a programmer, talk to a wizard.");
                  return;
                  elseif (!$quota_utils:property_addition_permitted(player))
                  player:tell("Property addition not permitted because quota exceeded.");
                  return;
                  endif
                  nargs = length(args);
                  usage = tostr("Usage:  ", verb, " &lt;object&gt;.&lt;prop-name&gt; [&lt;init_value&gt; [&lt;perms&gt; [&lt;owner&gt;]]]");
                  if ((nargs &lt; 1) || (!(spec = $code_utils:parse_propref(args[1]))))
                  player:notify(usage);
                  return;
                  endif
                  object = player:my_match_object(spec[1]);
                  name = spec[2];
                  if ($command_utils:object_match_failed(object, spec[1]))
                  return;
                  endif
                  if (nargs &lt; 2)
                  value = 0;
                  else
                  q = $string_utils:prefix_to_value(argstr[$string_utils:word_start(argstr)[2][1]..$]);
                  if (q[1] == 0)
                  player:notify(tostr("Syntax error in initial value:  ", q[2]));
                  return;
                  endif
                  value = q[2];
                  args = {args[1], value, @$string_utils:words(q[1])};
                  nargs = length(args);
                  endif
                  default = player:prog_option("@prop_flags");
                  if (!default)
                  default = "rc";
                  endif
                  perms = (nargs &lt; 3) ? default | $perm_utils:apply(default, args[3]);
                  if (nargs &lt; 4)
                  owner = player;
                  else
                  owner = $string_utils:match_player(args[4]);
                  if ($command_utils:player_match_result(owner, args[4])[1])
                  return;
                  endif
                  endif
                  if (nargs &gt; 4)
                  player:notify(usage);
                  return;
                  endif
                  try
                  add_property(object, name, value, {owner, perms});
                  player:notify(tostr("Property added with value ", toliteral(object.(name)), "."));
                  except (E_INVARG)
                  if ($object_utils:has_property(object, name))
                  player:notify(tostr("Property ", object, ".", name, " already exists."));
                  else
                  for i in [1..length(perms)]
                  if (!index("rcw", perms[i]))
                  player:notify(tostr("Unknown permission bit:  ", perms[i]));
                  return;
                  endif
                  endfor
                  "...the only other possibility...";
                  player:notify("Property is already defined on one or more descendents.");
                  player:notify(tostr("Try @check-prop ", args[1]));
                  endif
                  except e (ANY)
                  player:notify(e[2]);
                  endtry
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@chmod*#</NAME>
                <CODE>
                  set_task_perms(player);
                  bynumber = verb == "@chmod#";
                  if (length(args) != 2)
                  player:notify(tostr("Usage:  ", verb, " &lt;object-or-property-or-verb&gt; &lt;permissions&gt;"));
                  return;
                  endif
                  {what, perms} = args;
                  if (spec = $code_utils:parse_verbref(what))
                  if (!player.programmer)
                  player:notify("You need to be a programmer to do this.");
                  player:notify("If you want to become a programmer, talk to a wizard.");
                  return;
                  endif
                  if (valid(object = player:my_match_object(spec[1])))
                  vname = spec[2];
                  if (bynumber)
                  vname = $code_utils:toint(vname);
                  if (vname == E_TYPE)
                  return player:notify("Verb number expected.");
                  elseif ((vname &lt; 1) || `vname &gt; length(verbs(object)) ! E_PERM =&gt; 0')
                  return player:notify("Verb number out of range.");
                  endif
                  endif
                  try
                  info = verb_info(object, vname);
                  if (!valid(owner = info[1]))
                  player:notify(tostr("That verb is owned by an invalid object (", owner, "); it needs to be @chowned."));
                  elseif (!is_player(owner))
                  player:notify(tostr("That verb is owned by a non-player object (", owner.name, ", ", owner, "); it needs to be @chowned."));
                  else
                  info[2] = perms = $perm_utils:apply(info[2], perms);
                  try
                  result = set_verb_info(object, vname, info);
                  player:notify(tostr("Verb permissions set to \"", perms, "\"."));
                  except (E_INVARG)
                  player:notify(tostr("\"", perms, "\" is not a valid permissions string for a verb."));
                  except e (ANY)
                  player:notify(e[2]);
                  endtry
                  endif
                  except (E_VERBNF)
                  player:notify("That object does not define that verb.");
                  except error (ANY)
                  player:notify(error[2]);
                  endtry
                  return;
                  endif
                  elseif (bynumber)
                  return player:notify("@chmod# can only be used for verbs.");
                  elseif (index(what, ".") &amp;&amp; (spec = $code_utils:parse_propref(what)))
                  if (valid(object = player:my_match_object(spec[1])))
                  pname = spec[2];
                  try
                  info = property_info(object, pname);
                  info[2] = perms = $perm_utils:apply(info[2], perms);
                  try
                  result = set_property_info(object, pname, info);
                  player:notify(tostr("Property permissions set to \"", perms, "\"."));
                  except (E_INVARG)
                  player:notify(tostr("\"", perms, "\" is not a valid permissions string for a property."));
                  except error (ANY)
                  player:notify(error[2]);
                  endtry
                  except (E_PROPNF)
                  player:notify("That object does not have that property.");
                  except error (ANY)
                  player:notify(error[2]);
                  endtry
                  return;
                  endif
                  elseif (valid(object = player:my_match_object(what)))
                  perms = $perm_utils:apply(((object.r ? "r" | "") + (object.w ? "w" | "")) + (object.f ? "f" | ""), perms);
                  r = w = f = 0;
                  for i in [1..length(perms)]
                  if (perms[i] == "r")
                  r = 1;
                  elseif (perms[i] == "w")
                  w = 1;
                  elseif (perms[i] == "f")
                  f = 1;
                  else
                  player:notify(tostr("\"", perms, "\" is not a valid permissions string for an object."));
                  return;
                  endif
                  endfor
                  try
                  object.r = r;
                  object.w = w;
                  object.f = f;
                  player:notify(tostr("Object permissions set to \"", perms, "\"."));
                  except (E_PERM)
                  player:notify("Permission denied.");
                  endtry
                  return;
                  endif
                  $command_utils:object_match_failed(object, what);
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@args*#</NAME>
                <CODE>
                  if (player != caller)
                  return;
                  endif
                  set_task_perms(player);
                  if (!player.programmer)
                  player:notify("You need to be a programmer to do this.");
                  player:notify("If you want to become a programmer, talk to a wizard.");
                  return;
                  endif
                  if (!(args &amp;&amp; (spec = $code_utils:parse_verbref(args[1]))))
                  player:notify(tostr(args ? ("\"" + args[1]) + "\"?  " | "", "&lt;object&gt;:&lt;verb&gt;  expected."));
                  elseif ($command_utils:object_match_failed(object = player:my_match_object(spec[1]), spec[1]))
                  "...can't find object...";
                  else
                  if (verb == "@args#")
                  name = $code_utils:toint(spec[2]);
                  if (name == E_TYPE)
                  return player:notify("Verb number expected.");
                  elseif ((name &lt; 1) || `name &gt; length(verbs(object)) ! E_PERM =&gt; 0')
                  return player:notify("Verb number out of range.");
                  endif
                  endif
                  try
                  info = verb_args(object, name = spec[2]);
                  if (typeof(pas = $code_utils:parse_argspec(@listdelete(args, 1))) != LIST)
                  "...arg spec is bogus...";
                  player:notify(tostr(pas));
                  elseif (!(newargs = pas[1]))
                  player:notify($string_utils:from_list(info, " "));
                  elseif (pas[2])
                  player:notify(tostr("\"", pas[2][1], "\" unexpected."));
                  else
                  info[2] = info[2][1..index(info[2] + "/", "/") - 1];
                  info = {@newargs, @info[length(newargs) + 1..$]};
                  try
                  result = set_verb_args(object, name, info);
                  player:notify("Verb arguments changed.");
                  except (E_INVARG)
                  player:notify(tostr("\"", info[2], "\" is not a valid preposition (?)"));
                  except error (ANY)
                  player:notify(error[2]);
                  endtry
                  endif
                  except (E_VERBNF)
                  player:notify("That object does not have a verb with that name.");
                  except error (ANY)
                  player:notify(error[2]);
                  endtry
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>eval*-d</NAME>
                <CODE>
                  "A MOO-code evaluator.  Type `;CODE' or `eval CODE'.";
                  "Calls player:eval_cmd_string to first transform CODE in any way appropriate (e.g., prefixing .eval_env) and then do the actual evaluation.  See documentation for this:eval_cmd_string";
                  "If you set your .eval_time property to 1, you find out how many ticks and seconds you used.";
                  "If eval-d is used, the evaluation is performed as if the debug flag were unset.";
                  if (player != this)
                  player:tell("I don't understand that.");
                  return;
                  elseif (!player.programmer)
                  player:tell("You need to be a programmer to eval code.");
                  return;
                  endif
                  set_task_perms(player);
                  result = player:eval_cmd_string(argstr, verb != "eval-d");
                  if (result[1])
                  player:notify(this:eval_value_to_string(result[2]));
                  if (player:prog_option("eval_time") &amp;&amp; (!`output_delimiters(player)[2] ! ANY'))
                  player:notify(tostr("[used ", result[3], " tick", (result[3] != 1) ? "s, " | ", ", result[4], " second", (result[4] != 1) ? "s" | "", ".]"));
                  endif
                  else
                  player:notify_lines(result[2]);
                  nerrors = length(result[2]);
                  player:notify(tostr(nerrors, " error", (nerrors == 1) ? "." | "s."));
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@rmprop*erty</NAME>
                <CODE>
                  set_task_perms(player);
                  if ((length(args) != 1) || (!(spec = $code_utils:parse_propref(args[1]))))
                  player:notify(tostr("Usage:  ", verb, " &lt;object&gt;.&lt;property&gt;"));
                  return;
                  endif
                  object = player:my_match_object(spec[1]);
                  pname = spec[2];
                  if ($command_utils:object_match_failed(object, spec[1]))
                  return;
                  endif
                  try
                  result = delete_property(object, pname);
                  player:notify("Property removed.");
                  except (E_PROPNF)
                  player:notify("That object does not define that property.");
                  except res (ANY)
                  player:notify(res[2]);
                  endtry
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@verb</NAME>
                <CODE>
                  set_task_perms(player);
                  if (!player.programmer)
                  player:notify("You need to be a programmer to do this.");
                  player:notify("If you want to become a programmer, talk to a wizard.");
                  return;
                  elseif (!$quota_utils:verb_addition_permitted(player))
                  player:tell("Verb addition not permitted because quota exceeded.");
                  return;
                  endif
                  if (!(args &amp;&amp; (spec = $code_utils:parse_verbref(args[1]))))
                  player:notify(tostr("Usage:  ", verb, " &lt;object&gt;:&lt;verb-name(s)&gt; [&lt;dobj&gt; [&lt;prep&gt; [&lt;iobj&gt; [&lt;permissions&gt; [&lt;owner&gt;]]]]]"));
                  return;
                  elseif ($command_utils:object_match_failed(object = player:my_match_object(spec[1]), spec[1]))
                  return;
                  endif
                  name = spec[2];
                  "...Adding another verb of the same name is often a mistake...";
                  namelist = $string_utils:explode(name);
                  for n in (namelist)
                  if (i = index(n, "*"))
                  n = n[1..i - 1] + n[i + 1..$];
                  endif
                  if ((hv = $object_utils:has_verb(object, n)) &amp;&amp; (hv[1] == object))
                  player:notify(tostr("Warning:  Verb `", n, "' already defined on that object."));
                  endif
                  endfor
                  if (typeof(pas = $code_utils:parse_argspec(@listdelete(args, 1))) != LIST)
                  player:notify(tostr(pas));
                  return;
                  endif
                  verbargs = pas[1] || (player:prog_option("verb_args") || {});
                  verbargs = {@verbargs, "none", "none", "none"}[1..3];
                  rest = pas[2];
                  if (verbargs == {"this", "none", "this"})
                  perms = "rxd";
                  else
                  perms = "rd";
                  endif
                  if (rest)
                  perms = $perm_utils:apply(perms, rest[1]);
                  endif
                  if (length(rest) &lt; 2)
                  owner = player;
                  elseif (length(rest) &gt; 2)
                  player:notify(tostr("\"", rest[3], "\" unexpected."));
                  return;
                  elseif ($command_utils:player_match_result(owner = $string_utils:match_player(rest[2]), rest[2])[1])
                  return;
                  elseif (owner == $nothing)
                  player:notify("Verb can't be owned by no one!");
                  return;
                  endif
                  try
                  x = add_verb(object, {owner, perms, name}, verbargs);
                  player:notify(tostr("Verb added (", length(verbs(object)), ")."));
                  except (E_INVARG)
                  player:notify(tostr(rest ? tostr("\"", perms, "\" is not a valid set of permissions.") | tostr("\"", verbargs[2], "\" is not a valid preposition (?)")));
                  except e (ANY)
                  player:notify(e[2]);
                  endtry
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
                <NAME>@rmverb*#</NAME>
                <CODE>
                  set_task_perms(player);
                  if (!(args &amp;&amp; (spec = $code_utils:parse_verbref(args[1]))))
                  player:notify(tostr("Usage:  ", verb, " &lt;object&gt;:&lt;verb&gt;"));
                  elseif ($command_utils:object_match_failed(object = player:my_match_object(spec[1]), spec[1]))
                  "...bogus object...";
                  elseif (typeof(argspec = $code_utils:parse_argspec(@listdelete(args, 1))) != LIST)
                  player:notify(tostr(argspec));
                  elseif (argspec[2])
                  player:notify($string_utils:from_list(argspec[2], " ") + "??");
                  elseif (length(argspec = argspec[1]) in {1, 2})
                  player:notify({"Missing preposition", "Missing iobj specification"}[length(argspec)]);
                  else
                  verbname = spec[2];
                  if (verb == "@rmverb#")
                  loc = $code_utils:toint(verbname);
                  if (loc == E_TYPE)
                  return player:notify("Verb number expected.");
                  elseif ((loc &lt; 1) || (loc &gt; `length(verbs(object)) ! E_PERM =&gt; 0'))
                  return player:notify("Verb number out of range.");
                  endif
                  else
                  if (index(verbname, "*") &gt; 1)
                  verbname = strsub(verbname, "*", "");
                  endif
                  loc = $code_utils:find_last_verb_named(object, verbname);
                  if (argspec)
                  argspec[2] = $code_utils:full_prep(argspec[2]) || argspec[2];
                  while (loc &amp;&amp; (`verb_args(object, loc) ! ANY' != argspec))
                  loc = $code_utils:find_last_verb_named(object, verbname, loc - 1);
                  endwhile
                  endif
                  if (!loc)
                  player:notify(tostr("That object does not define that verb", argspec ? " with those args." | "."));
                  return;
                  endif
                  endif
                  info = `verb_info(object, loc) ! ANY';
                  vargs = `verb_args(object, loc) ! ANY';
                  try
                  delete_verb(object, loc);
                  if (info)
                  player:notify(tostr("Verb ", object, ":", info[3], " (", loc, ") {", $string_utils:from_list(vargs, " "), "} removed."));
                  else
                  player:notify(tostr("Unreadable verb ", object, ":", loc, " removed."));
                  endif
                  except e (ANY)
                  player:notify(e[2]);
                  endtry
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
                <NAME>@forked</NAME>
                <CODE>
                  "Syntax:  @forked [player]";
                  "         @forked all wizards";
                  "";
                  "For a normal player, shows all the tasks you have waiting in your queue, especially those forked or suspended. A wizard will see all the tasks of all the players unless the optional argument is provided.";
                  "The second form is only usable by wizards and provides an output of all tasks owned by characters who are .wizard=1. Useful to find a task that may get put in a random queue due to $wiz_utils:random_wizard. Or even finding verbs that run with wizard permissions that shouldn't be.";
                  set_task_perms(player);
                  if (!dobjstr)
                  tasks = queued_tasks();
                  elseif ((dobjstr == "all wizards") &amp;&amp; player.wizard)
                  tasks = {};
                  for t in (queued_tasks())
                  if (valid(t[5]) &amp;&amp; t[5].wizard)
                  tasks = {@tasks, t};
                  endif
                  $command_utils:suspend_if_needed(1);
                  endfor
                  elseif ($command_utils:player_match_result(dobj = $string_utils:match_player(dobjstr), dobjstr)[1])
                  return;
                  elseif (typeof(tasks = $wiz_utils:queued_tasks(dobj)) != LIST)
                  player:notify(tostr(verb, " ", dobj.name, "(", dobj, "):  ", tasks));
                  return;
                  endif
                  if (tasks)
                  su = $string_utils;
                  player:notify("Queue ID    Start Time            Owner         Verb (Line) [This]");
                  player:notify("--------    ----------            -----         -----------------");
                  now = time();
                  for task in (tasks)
                  $command_utils:suspend_if_needed(0);
                  {q_id, start, nu, nu2, owner, vloc, vname, lineno, this} = task;
                  time = (start &gt;= now) ? ctime(start)[5..24] | su:left((start == -1) ? "Reading input ..." | tostr(now - start, " seconds ago..."), 20);
                  owner_name = valid(owner) ? owner.name | tostr("Dead ", owner);
                  player:notify(tostr(su:left(tostr(q_id), 10), "  ", time, "  ", su:left(owner_name, 12), "  ", vloc, ":", vname, " (", lineno, ")", (this != vloc) ? tostr(" [", this, "]") | ""));
                  if (index(vname, "suspend") &amp;&amp; (vloc == $command_utils))
                  "Find out the first line of the callers() list from task_stack()";
                  {sthis, svname, sprogger, svloc, splayer, slineno} = task_stack(q_id, 1)[2];
                  player:notify(tostr("                    Called By...  ", su:left(valid(sprogger) ? sprogger.name | tostr("Dead ", sprogger), 12), "  ", svloc, ":", svname, (sthis != svloc) ? tostr(" [", sthis, "]") | "", " (", slineno, ")"));
                  endif
                  endfor
                  player:notify("-----------------------------------------------------------------");
                  else
                  player:notify("No tasks.");
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
                <NAME>@kill @killq*uiet</NAME>
                <CODE>
                  "Kills one or more tasks.";
                  "Arguments:";
                  "   object:verb -- kills all tasks which were started from that object and verb.";
                  "   all -- kills all tasks owned by invoker";
                  "   all player-name -- wizard variant:  kills all tasks owned by player.";
                  "   all everyone -- wizard variant:  really kills all tasks.";
                  "   Integer taskid -- kills the specifically named task.";
                  "   soon [integer] -- kills all tasks scheduled to run in the next [integer] seconds, which defaults to 60.";
                  "   %integer -- kills all tasks which end in the digits contained in integer.";
                  "   The @killquiet alias kills tasks without the pretty printout if more than one task is being killed.";
                  set_task_perms(player);
                  quiet = index(verb, "q");
                  if (length(args) == 0)
                  player:notify_lines({tostr("Usage:  ", verb, " [object]:[verb]"), tostr("        ", verb, " task_id"), tostr("        ", verb, " soon [number-of-seconds]", player.wizard ? " [everyone|&lt;player name&gt;]" | ""), tostr("        ", verb, " all", player.wizard ? " [everyone|&lt;player name&gt;]" | "")});
                  return;
                  elseif (taskid = toint(args[1]))
                  elseif (all = args[1] == "all")
                  everyone = 0;
                  realplayer = player;
                  if (player.wizard &amp;&amp; (length(args) &gt; 1))
                  realplayer = $string_utils:match_player(args[2]);
                  everyone = args[2] == "everyone";
                  if ((!valid(realplayer)) &amp;&amp; (!everyone))
                  $command_utils:player_match_result(realplayer, args[2]);
                  return;
                  elseif (!everyone)
                  set_task_perms(realplayer);
                  endif
                  endif
                  elseif (soon = args[1] == "soon")
                  realplayer = player;
                  if (length(args) &gt; 1)
                  soon = toint(args[2]);
                  if ((soon &lt;= 0) &amp;&amp; (!player.wizard))
                  player:notify(tostr("Usage:  ", verb, " soon [positive-number-of-seconds]"));
                  return;
                  elseif (player.wizard)
                  result = this:kill_aux_wizard_parse(@args[2..$]);
                  soon = result[1];
                  if (result[1] &lt; 0)
                  "already gave them an error message";
                  return;
                  elseif (result[2] == 1)
                  everyone = 1;
                  else
                  everyone = 0;
                  set_task_perms(result[2]);
                  realplayer = result[2];
                  endif
                  endif
                  else
                  soon = 60;
                  everyone = 0;
                  endif
                  elseif (percent = args[1][1] == "%")
                  l = length(args[1]);
                  digits = toint(args[1][2..l]);
                  percent = toint("1" + "0000000000"[1..l - 1]);
                  elseif (colon = index(argstr, ":"))
                  whatstr = argstr[1..colon - 1];
                  vrb = argstr[colon + 1..$];
                  if (whatstr)
                  what = player:my_match_object(whatstr);
                  endif
                  else
                  player:notify_lines({tostr("Usage:  ", verb, " [object]:[verb]"), tostr("        ", verb, " task_id"), tostr("        ", verb, " soon [number-of-seconds]", player.wizard ? " [everyone|&lt;player name&gt;]" | ""), tostr("        ", verb, " all", player.wizard ? " [\"everyone\"|&lt;player name&gt;]" | "")});
                  return;
                  endif
                  "OK, parsed the line, and punted them if it was bogus.  This verb could have been a bit shorter at the expense of readability.  I think it's getting towards unreadable as is.  At this point we've set_task_perms'd, and set up an enormous number of local variables.  Evaluate them in the order we set them, and we should never get var not found.";
                  queued_tasks = queued_tasks();
                  killed = 0;
                  if (taskid)
                  try
                  kill_task(taskid);
                  player:notify(tostr("Killed task ", taskid, "."));
                  killed = 1;
                  except error (ANY)
                  player:notify(tostr("Can't kill task ", taskid, ": ", error[2]));
                  endtry
                  elseif (all)
                  for task in (queued_tasks)
                  if (everyone || (realplayer == task[5]))
                  `kill_task(task[1]) ! ANY';
                  killed = killed + 1;
                  if (!quiet)
                  this:_kill_task_message(task);
                  endif
                  endif
                  $command_utils:suspend_if_needed(3, "... killing tasks");
                  endfor
                  elseif (soon)
                  now = time();
                  for task in (queued_tasks)
                  if (((task[2] - now) &lt; soon) &amp;&amp; ((!player.wizard) || (everyone || (realplayer == task[5]))))
                  `kill_task(task[1]) ! ANY';
                  killed = killed + 1;
                  if (!quiet)
                  this:_kill_task_message(task);
                  endif
                  endif
                  $command_utils:suspend_if_needed(3, "... killing tasks");
                  endfor
                  elseif (percent)
                  for task in (queued_tasks)
                  if (digits == (task[1] % percent))
                  `kill_task(task[1]) ! ANY';
                  killed = killed + 1;
                  if (!quiet)
                  this:_kill_task_message(task);
                  endif
                  endif
                  $command_utils:suspend_if_needed(3, "... killing tasks");
                  endfor
                  elseif ((colon || vrb) || whatstr)
                  for task in (queued_tasks)
                  if ((((((whatstr == "") || (valid(task[6]) &amp;&amp; (index(task[6].name, whatstr) == 1))) || (valid(task[9]) &amp;&amp; (index(task[9].name, whatstr) == 1))) || (task[9] == what)) || (task[6] == what)) &amp;&amp; ((vrb == "") || (index(" " + strsub(task[7], "*", ""), " " + vrb) == 1)))
                  `kill_task(task[1]) ! ANY';
                  killed = killed + 1;
                  if (!quiet)
                  this:_kill_task_message(task);
                  endif
                  endif
                  $command_utils:suspend_if_needed(3, "... killing tasks");
                  endfor
                  else
                  player:notify("Something is funny; I didn't understand your @kill command.  You shouldn't have gotten here.  Please send yduJ mail saying you got this message from @kill, and what you had typed to @kill.");
                  endif
                  if (!killed)
                  player:notify("No tasks killed.");
                  elseif (quiet)
                  player:notify(tostr("Killed ", killed, " tasks."));
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="at/to" IOBJ="any">
                <NAME>@copy @copy-x @copy-move</NAME>
                <CODE>
                  "Usage:  @copy source:verbname to target[:verbname]";
                  "  the target verbname, if not given, defaults to that of the source.  If the target verb doesn't already exist, a new verb is installed with the same args, names, code, and permission flags as the source.  Otherwise, the existing target's verb code is overwritten and no other changes are made.";
                  "This the poor man's version of multiple inheritance... the main problem is that someone may update the verb you're copying and you'd never know.";
                  "  if @copy-x is used, makes an unusable copy (!x, this none this).  If @copy-move is used, deletes the source verb as well.";
                  set_task_perms(player);
                  if (!player.programmer)
                  player:notify("You need to be a programmer to do this.");
                  player:notify("If you want to become a programmer, talk to a wizard.");
                  return;
                  elseif ((verb != "@copy-move") &amp;&amp; (!$quota_utils:verb_addition_permitted(player)))
                  player:notify("Verb addition not permitted because quota exceeded.");
                  return;
                  elseif ((!(from = $code_utils:parse_verbref(dobjstr))) || (!iobjstr))
                  player:notify(tostr("Usage:  ", verb, " obj:verb to obj:verb"));
                  player:notify(tostr("        ", verb, " obj:verb to obj"));
                  player:notify(tostr("        ", verb, " obj:verb to :verb"));
                  return;
                  elseif ($command_utils:object_match_failed(fobj = player:my_match_object(from[1]), from[1]))
                  return;
                  elseif (iobjstr[1] == ":")
                  to = {fobj, iobjstr[2..$]};
                  elseif (!(to = $code_utils:parse_verbref(iobjstr)))
                  iobj = player:my_match_object(iobjstr);
                  if ($command_utils:object_match_failed(iobj, iobjstr))
                  return;
                  endif
                  to = {iobj, from[2]};
                  elseif ($command_utils:object_match_failed(tobj = player:my_match_object(to[1]), to[1]))
                  return;
                  else
                  to[1] = tobj;
                  endif
                  from[1] = fobj;
                  if (verb == "@copy-move")
                  if ((!$perm_utils:controls(player, fobj)) &amp;&amp; (!$quota_utils:verb_addition_permitted(player)))
                  player:notify("Won't be able to delete old verb.  Quota exceeded, so unable to continue.  Aborted.");
                  return;
                  elseif ($perm_utils:controls(player, fobj))
                  "only try to move if the player controls the verb. Otherwise, skip and treat as regular @copy";
                  if (typeof(result = $code_utils:move_verb(@from, @to)) == ERR)
                  player:notify(tostr("Unable to move verb from ", from[1], ":", from[2], " to ", to[1], ":", to[2], " --&gt; ", result));
                  else
                  player:notify(tostr("Moved verb from ", from[1], ":", from[2], " to ", result[1], ":", result[2]));
                  endif
                  return;
                  else
                  player:notify("Won't be able to delete old verb.  Treating this as regular @copy.");
                  endif
                  endif
                  to_firstname = strsub(to[2][1..index(to[2] + " ", " ") - 1], "*", "") || "*";
                  if ((!(hv = $object_utils:has_verb(to[1], to_firstname))) || (hv[1] != to[1]))
                  if ((!(info = `verb_info(@from) ! ANY')) || (!(vargs = `verb_args(@from) ! ANY')))
                  player:notify(tostr("Retrieving ", from[1], ":", from[2], " --&gt; ", info &amp;&amp; vargs));
                  return;
                  endif
                  if (!player.wizard)
                  info[1] = player;
                  endif
                  if (verb == "@copy-x")
                  "... make sure this is an unusable copy...";
                  info[2] = strsub(info[2], "x", "");
                  vargs = {"this", "none", "this"};
                  endif
                  if (from[2] != to[2])
                  info[3] = to[2];
                  endif
                  if (ERR == typeof(e = `add_verb(to[1], info, vargs) ! ANY'))
                  player:notify(tostr("Adding ", to[1], ":", to[2], " --&gt; ", e));
                  return;
                  endif
                  endif
                  code = `verb_code(@from) ! ANY';
                  owner = `verb_info(@from)[1] ! ANY';
                  if (typeof(code) == ERR)
                  player:notify(tostr("Couldn't retrieve code from ", from[1].name, " (", from[1], "):", from[2], " =&gt; ", code));
                  return;
                  endif
                  if (owner != player)
                  code = {tostr("\"Copied from ", from[1].name, " (", from[1], "):", from[2], (from[1] == owner) ? " " | tostr(" by ", owner.name, " (", owner, ") "), ctime(), "\";"), @code};
                  if (!player:prog_option("copy_expert"))
                  player:notify("Use of @copy is discouraged.  Please do not use @copy if you can use inheritance or features instead.  Use @copy carefully, and only when absolutely necessary, as it is wasteful of database space.");
                  endif
                  endif
                  if (ERR == typeof(e = `set_verb_code(to[1], to_firstname, code) ! ANY'))
                  player:notify(tostr("Copying ", from[1], ":", from[2], " to ", to[1], ":", to[2], " --&gt; ", e));
                  else
                  player:notify(tostr(to[1], ":", to[2], " code set."));
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                <NAME>_kill_task_message</NAME>
                <CODE>
                  set_task_perms(caller_perms());
                  task = args[1];
                  player:notify(tostr("Killed: ", $string_utils:right(tostr("task ", task[1]), 17), ", verb ", task[6], ":", task[7], ", line ", task[8], (task[9] != task[6]) ? ", this==" + tostr(task[9]) | ""));
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@prog*ram @program#</NAME>
                <CODE>
                  "This version of @program deals with multiple verbs having the same name.";
                  "... @program &lt;object&gt;:&lt;verbname&gt; &lt;dobj&gt; &lt;prep&gt; &lt;iobj&gt;  picks the right one.";
                  if (player != caller)
                  return;
                  endif
                  set_task_perms(player);
                  "...";
                  "...catch usage errors first...";
                  "...";
                  punt = "...set punt to 0 only if everything works out...";
                  if (!(args &amp;&amp; (spec = $code_utils:parse_verbref(args[1]))))
                  player:notify(tostr("Usage: ", verb, " &lt;object&gt;:&lt;verb&gt; [&lt;dobj&gt; &lt;prep&gt; &lt;iobj&gt;]"));
                  elseif ($command_utils:object_match_failed(object = player:my_match_object(spec[1]), spec[1]))
                  "...bogus object...";
                  elseif (typeof(argspec = $code_utils:parse_argspec(@listdelete(args, 1))) != LIST)
                  player:notify(tostr(argspec));
                  elseif (verb == "@program#")
                  verbname = $code_utils:toint(spec[2]);
                  if (verbname == E_TYPE)
                  player:notify("Verb number expected.");
                  elseif (length(args) &gt; 1)
                  player:notify("Don't give args for @program#.");
                  elseif ((verbname &lt; 1) || `verbname &gt; length(verbs(object)) ! E_PERM')
                  player:notify("Verb number out of range.");
                  else
                  argspec = 0;
                  punt = 0;
                  endif
                  elseif (argspec[2])
                  player:notify($string_utils:from_list(argspec[2], " ") + "??");
                  elseif (length(argspec = argspec[1]) in {1, 2})
                  player:notify({"Missing preposition", "Missing iobj specification"}[length(argspec)]);
                  else
                  punt = 0;
                  verbname = spec[2];
                  if (index(verbname, "*") &gt; 1)
                  verbname = strsub(verbname, "*", "");
                  endif
                  endif
                  "...";
                  "...if we have an argspec, we'll need to reset verbname...";
                  "...";
                  if (punt)
                  elseif (argspec)
                  if (!(argspec[2] in {"none", "any"}))
                  argspec[2] = $code_utils:full_prep(argspec[2]);
                  endif
                  loc = $code_utils:find_verb_named(object, verbname);
                  while ((loc &gt; 0) &amp;&amp; (`verb_args(object, loc) ! ANY' != argspec))
                  loc = $code_utils:find_verb_named(object, verbname, loc + 1);
                  endwhile
                  if (!loc)
                  punt = "...can't find it....";
                  player:notify("That object has no verb matching that name + args.");
                  else
                  verbname = loc;
                  endif
                  else
                  loc = 0;
                  endif
                  "...";
                  "...get verb info...";
                  "...";
                  if (punt || (!(punt = "...reset punt to TRUE...")))
                  else
                  try
                  info = verb_info(object, verbname);
                  punt = 0;
                  aliases = info[3];
                  if (!loc)
                  loc = aliases in (verbs(object) || {});
                  endif
                  except (E_VERBNF)
                  player:notify("That object does not have that verb definition.");
                  except error (ANY)
                  player:notify(error[2]);
                  endtry
                  endif
                  "...";
                  "...read the code...";
                  "...";
                  if (punt)
                  player:notify(tostr("Now ignoring code for ", args ? args[1] | "nothing in particular", "."));
                  $command_utils:read_lines();
                  player:notify("Verb code ignored.");
                  else
                  player:notify(tostr("Now programming ", object.name, ":", aliases, "(", (!loc) ? "??" | loc, ")."));
                  lines = $command_utils:read_lines_escape((active = player in $verb_editor.active) ? {} | {"@edit"}, {tostr("You are editing ", $string_utils:nn(object), ":", verbname, "."), @active ? {} | {"Type `@edit' to take this into the verb editor."}});
                  if (lines[1] == "@edit")
                  player:tell(toliteral(lines));
                  $verb_editor:invoke(args[1], "@program", lines[2]);
                  return;
                  endif
                  try
                  if (result = set_verb_code(object, verbname, lines[2]))
                  player:notify_lines(result);
                  player:notify(tostr(length(result), " error(s)."));
                  player:notify("Verb not programmed.");
                  else
                  player:notify("0 errors.");
                  player:notify("Verb programmed.");
                  endif
                  except error (ANY)
                  player:notify(error[2]);
                  player:notify("Verb not programmed.");
                  endtry
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@setenv</NAME>
                <CODE>
                  "Usage: @setenv &lt;environment string&gt;";
                  "Set your .eval_env property.";
                  set_task_perms(player);
                  if (!argstr)
                  player:notify(tostr("Usage:  ", verb, " &lt;environment string&gt;"));
                  return;
                  endif
                  player:notify(tostr("Current eval environment is: ", player.eval_env));
                  result = player:set_eval_env(argstr);
                  if (typeof(result) == ERR)
                  player:notify(tostr(result));
                  return;
                  endif
                  player:notify(tostr(".eval_env set to \"", player.eval_env, "\" (", player.eval_ticks, " ticks)."));
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@pros*pectus pros*pectus</NAME>
                <CODE>
                  "Usage: @prospectus &lt;player&gt; [from &lt;start&gt;] [to &lt;end&gt;]";
                  set_task_perms((caller_perms() == $nothing) ? player | caller_perms());
                  dobj = dobjstr ? $string_utils:match_player(dobjstr) | player;
                  if ($command_utils:player_match_result(dobj, dobjstr)[1])
                  return;
                  endif
                  dobjwords = $string_utils:words(dobjstr);
                  if (args[1..length(dobjwords)] == dobjwords)
                  args = args[length(dobjwords) + 1..$];
                  endif
                  if (!(parse_result = $code_utils:_parse_audit_args(@args)))
                  player:notify(tostr("Usage:  ", verb, " player [from &lt;start&gt;] [to &lt;end&gt;]"));
                  return;
                  endif
                  return $building_utils:do_prospectus(dobj, @parse_result);
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
                <NAME>@d*isplay</NAME>
                <CODE>
                  "@display &lt;object&gt;[.[property]]*[,[inherited_property]]*[:[verb]]*[;[inherited_verb]]*";
                  if (player != this)
                  player:notify(tostr("Sorry, you can't use ", this:title(), "'s `", verb, "' command."));
                  return E_PERM;
                  endif
                  "null names for properties and verbs are interpreted as meaning all of them.";
                  opivu = {{}, {}, {}, {}, {}};
                  string = "";
                  punc = 1;
                  literal = 0;
                  set_task_perms(player);
                  for jj in [1..length(argstr)]
                  j = argstr[jj];
                  if (literal)
                  string = string + j;
                  literal = 0;
                  elseif (j == "\\")
                  literal = 1;
                  elseif (y = index(".,:;", j))
                  opivu[punc] = {@opivu[punc], string};
                  punc = 1 + y;
                  string = "";
                  else
                  string = string + j;
                  endif
                  endfor
                  opivu[punc] = {@opivu[punc], string};
                  objname = opivu[1][1];
                  it = this:my_match_object(objname);
                  if ($command_utils:object_match_failed(it, objname))
                  return;
                  endif
                  readable = (it.owner == this) || (it.r || this.wizard);
                  cant = {};
                  if ("" in opivu[2])
                  if (readable)
                  prop = properties(it);
                  else
                  prop = {};
                  cant = setadd(cant, it);
                  endif
                  if (!this:display_option("thisonly"))
                  what = it;
                  while ((!prop) &amp;&amp; valid(what = parent(what)))
                  if ((what.owner == this) || (what.r || this.wizard))
                  prop = properties(what);
                  else
                  cant = setadd(cant, what);
                  endif
                  endwhile
                  endif
                  else
                  prop = opivu[2];
                  endif
                  if ("" in opivu[3])
                  inh = {};
                  for what in ({it, @$object_utils:ancestors(it)})
                  if (((what.owner == this) || what.r) || this.wizard)
                  inh = {@inh, @properties(what)};
                  else
                  cant = setadd(cant, what);
                  endif
                  endfor
                  else
                  inh = opivu[3];
                  endif
                  for q in (inh)
                  if (q in `properties(it) ! ANY =&gt; {}')
                  prop = setadd(prop, q);
                  inh = setremove(inh, q);
                  endif
                  endfor
                  vrb = {};
                  if ("" in opivu[4])
                  if (readable)
                  vrbs = verbs(it);
                  else
                  vrbs = $object_utils:accessible_verbs(it);
                  cant = setadd(cant, it);
                  endif
                  what = it;
                  if (!this:display_option("thisonly"))
                  while ((!vrbs) &amp;&amp; valid(what = parent(what)))
                  if ((what.owner == this) || (what.r || this.wizard))
                  vrbs = verbs(what);
                  else
                  cant = setadd(cant, what);
                  endif
                  endwhile
                  endif
                  for n in [1..length(vrbs)]
                  vrb = setadd(vrb, {what, n});
                  endfor
                  else
                  for w in (opivu[4])
                  if (y = $object_utils:has_verb(it, w))
                  vrb = setadd(vrb, {y[1], w});
                  else
                  this:notify(tostr("No such verb, \"", w, "\""));
                  endif
                  endfor
                  endif
                  if ("" in opivu[5])
                  for z in ({it, @$object_utils:ancestors(it)})
                  if (((this == z.owner) || z.r) || this.wizard)
                  for n in [1..length(verbs(z))]
                  vrb = setadd(vrb, {z, n});
                  endfor
                  else
                  cant = setadd(cant, z);
                  endif
                  endfor
                  else
                  for w in (opivu[5])
                  if (typeof(y = $object_utils:has_verb(it, w)) == LIST)
                  vrb = setadd(vrb, {y[1], w});
                  else
                  this:notify(tostr("No such verb, \"", w, "\""));
                  endif
                  endfor
                  endif
                  if (({""} in opivu) || (opivu[2..5] == {{}, {}, {}, {}}))
                  this:notify(tostr(it.name, " (", it, ") [ ", it.r ? "readable " | "", it.w ? "writeable " | "", it.f ? "fertile " | "", is_player(it) ? "(player) " | "", it.programmer ? "programmer " | "", it.wizard ? "wizard " | "", "]"));
                  if (it.owner != (is_player(it) ? it | this))
                  this:notify(tostr("  Owned by ", valid(p = it.owner) ? p.name | "** extinct **", " (", p, ")."));
                  endif
                  this:notify(tostr("  Child of ", valid(p = parent(it)) ? p.name | "** none **", " (", p, ")."));
                  if (it.location != $nothing)
                  this:notify(tostr("  Location ", valid(p = it.location) ? p.name | "** unplace (tell a wizard, fast!) **", " (", p, ")."));
                  endif
                  if ($quota_utils.byte_based &amp;&amp; $object_utils:has_property(it, "object_size"))
                  this:notify(tostr("  Size: ", $string_utils:group_number(it.object_size[1]), " bytes at ", this:ctime(it.object_size[2])));
                  endif
                  endif
                  blankargs = this:display_option("blank_tnt") ? {"this", "none", "this"} | #-1;
                  for b in (vrb)
                  $command_utils:suspend_if_needed(0);
                  where = b[1];
                  q = b[2];
                  short = (typeof(q) == INT) ? q | strsub(y = index(q, " ") ? q[1..y - 1] | q, "*", "");
                  inf = `verb_info(where, short) ! ANY';
                  if ((typeof(inf) == LIST) || (inf == E_PERM))
                  name = (typeof(inf) == LIST) ? index(inf[3], " ") ? ("\"" + inf[3]) + "\"" | inf[3] | q;
                  line = $string_utils:left(tostr($string_utils:right(tostr(where), 6), ":", name, " "), 32);
                  if (inf == E_PERM)
                  line = line + "   ** unreadable **";
                  else
                  line = $string_utils:left(tostr(line, inf[1].name, " (", inf[1], ") "), 53) + ((i = inf[2] in {"x", "xd", "d", "rd"}) ? {" x", " xd", "  d", "r d"}[i] | inf[2]);
                  vargs = `verb_args(where, short) ! ANY';
                  if (vargs != blankargs)
                  if (this:display_option("shortprep") &amp;&amp; (!(vargs[2] in {"any", "none"})))
                  vargs[2] = $code_utils:short_prep(vargs[2]);
                  endif
                  line = $string_utils:left(line + " ", 60) + $string_utils:from_list(vargs, " ");
                  endif
                  endif
                  this:notify(line);
                  elseif (inf == E_VERBNF)
                  this:notify(tostr(inf));
                  this:notify(tostr("  ** no such verb, \"", short, "\" **"));
                  else
                  this:notify("This shouldn't ever happen. @display is buggy.");
                  endif
                  endfor
                  all = {@prop, @inh};
                  max = (length(all) &lt; 4) ? 999 | (this:linelen() - 56);
                  depth = (length(all) &lt; 4) ? -1 | 1;
                  truncate_owner_names = length(all) &gt; 1;
                  for q in (all)
                  $command_utils:suspend_if_needed(0);
                  inf = `property_info(it, q) ! ANY';
                  if (inf == E_PROPNF)
                  if (q in $code_utils.builtin_props)
                  this:notify(tostr($string_utils:left("," + q, 25), "Built in property            ", $string_utils:abbreviated_value(it.(q), max, depth)));
                  else
                  this:notify(tostr("  ** property not found, \"", q, "\" **"));
                  endif
                  else
                  pname = $string_utils:left(tostr((q in `properties(it) ! ANY =&gt; {}') ? "." | (`is_clear_property(it, q) ! ANY' ? " " | ","), q, " "), 25);
                  if (inf == E_PERM)
                  this:notify(pname + "   ** unreadable **");
                  else
                  oname = inf[1].name;
                  truncate_owner_names &amp;&amp; ((length(oname) &gt; 12) &amp;&amp; (oname = oname[1..12]));
                  `inf[2][1] != "r" ! E_RANGE =&gt; 1' &amp;&amp; (inf[2][1..0] = " ");
                  `inf[2][2] != "w" ! E_RANGE =&gt; 1' &amp;&amp; (inf[2][2..1] = " ");
                  this:notify($string_utils:left(tostr($string_utils:left(tostr(pname, oname, " (", inf[1], ") "), 47), inf[2], " "), 54) + $string_utils:abbreviated_value(it.(q), max, depth));
                  endif
                  endif
                  endfor
                  if (cant)
                  failed = {};
                  for k in (cant)
                  failed = listappend(failed, tostr(k.name, " (", k, ")"));
                  endfor
                  this:notify($string_utils:centre(tostr(" no permission to read ", $string_utils:english_list(failed, ", ", " or ", " or "), ". "), 75, "-"));
                  else
                  this:notify($string_utils:centre(" finished ", 75, "-"));
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
                <NAME>@db*size</NAME>
                <CODE>
                  set_task_perms(player);
                  "Let 'em @kill it.";
                  count = 0;
                  for i in [#0..max_object()]
                  if ($command_utils:running_out_of_time())
                  player:notify(tostr("Counting... [", count, "/", i, "]"));
                  suspend(0);
                  endif
                  if (valid(i))
                  count = count + 1;
                  endif
                  endfor
                  player:notify(tostr("There are ", count, " valid objects out of ", toint(max_object()) + 1, " allocated object numbers."));
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@gethelp</NAME>
                <CODE>
                  "@gethelp [&lt;topic&gt;] [from &lt;db or dblist&gt;]";
                  "  Prints the raw text of topic from the appropriate help db.";
                  "  With no argument, gets the blank (\"\") topic from wherever it lives";
                  "  Text is printed as a script for changing this help topic ";
                  "  (somewhat like @dump...)";
                  if (!prepstr)
                  topic = argstr;
                  dblist = $code_utils:help_db_list();
                  elseif (prepstr != "from")
                  player:notify("Usage:  ", verb, " [&lt;topic&gt;] [from &lt;db&gt;]");
                  return;
                  elseif (!(e = $no_one:eval_d(iobjstr = argstr[$string_utils:word_start(argstr)[(prepstr in args) + 1][1]..$])))
                  player:notify(tostr(e));
                  return;
                  elseif (!e[1])
                  player:notify_lines(e[2]);
                  return;
                  elseif (!(typeof(dblist = e[2]) in {OBJ, LIST}))
                  player:notify(tostr(iobjstr, " =&gt; ", dblist, " -- not an object or a list"));
                  return;
                  else
                  topic = dobjstr;
                  if (typeof(dblist) == OBJ)
                  dblist = {dblist};
                  endif
                  endif
                  search = $code_utils:help_db_search(topic, dblist);
                  if (!search)
                  player:notify("Topic not found.");
                  elseif (search[1] == $ambiguous_match)
                  player:notify(tostr("Topic `", topic, "' ambiguous:  ", $string_utils:english_list(search[2], "none", " or ")));
                  elseif (typeof(text = (db = search[1]):dump_topic(fulltopic = search[2])) == ERR)
                  "...ok...shoot me.  This is a -d verb...";
                  player:notify(tostr("Cannot retrieve `", fulltopic, "' on ", $code_utils:corify_object(db), ":  ", text));
                  else
                  player:notify_lines(text);
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@grep @egrep</NAME>
                <CODE>
                  set_task_perms(player);
                  if (prepstr == "in")
                  pattern = dobjstr;
                  objlist = player:eval_cmd_string(iobjstr, 0);
                  if (!objlist[1])
                  player:notify(tostr("Had trouble reading `", iobjstr, "':  "));
                  player:notify_lines(@objlist[2]);
                  return;
                  elseif (typeof(objlist[2]) == OBJ)
                  objlist = {objlist[2..2]};
                  elseif (typeof(objlist[2]) != LIST)
                  player:notify(tostr("Value of `", iobjstr, "' is not an object or list:  ", toliteral(objlist[2])));
                  return;
                  else
                  objlist = objlist[2..2];
                  endif
                  elseif ((prepstr == "from") &amp;&amp; (player.wizard &amp;&amp; (n = toint(toobj(iobjstr)))))
                  pattern = dobjstr;
                  objlist = {n};
                  elseif (args &amp;&amp; player.wizard)
                  pattern = argstr;
                  objlist = {};
                  else
                  player:notify(tostr("Usage:  ", verb, " &lt;pattern&gt; ", player.wizard ? "[in {&lt;objectlist&gt;} | from &lt;number&gt;]" | "in {&lt;objectlist&gt;}"));
                  return;
                  endif
                  player:notify(tostr("Searching for verbs ", @prepstr ? {prepstr, " ", iobjstr, " "} | {}, (verb == "@egrep") ? "matching the pattern " | "containing the string ", toliteral(pattern), " ..."));
                  player:notify("");
                  $code_utils:((verb == "@egrep") ? "find_verbs_matching" | "find_verbs_containing")(pattern, @objlist);
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@s*how</NAME>
                <CODE>
                  set_task_perms(player);
                  if (dobjstr == "")
                  player:notify(tostr("Usage:  ", verb, " &lt;object-or-property-or-verb&gt;"));
                  return;
                  endif
                  if (index(dobjstr, ".") &amp;&amp; (spec = $code_utils:parse_propref(dobjstr)))
                  if (valid(object = player:my_match_object(spec[1])))
                  return $code_utils:show_property(object, spec[2]);
                  endif
                  elseif (spec = $code_utils:parse_verbref(dobjstr))
                  if (valid(object = player:my_match_object(spec[1])))
                  return $code_utils:show_verbdef(object, spec[2]);
                  endif
                  elseif (((dobjstr[1] == "$") &amp;&amp; ((pname = dobjstr[2..$]) in properties(#0))) &amp;&amp; (typeof(#0.(pname)) == OBJ))
                  if (valid(object = #0.(pname)))
                  return $code_utils:show_object(object);
                  endif
                  elseif ((dobjstr[1] == "$") &amp;&amp; (spec = $code_utils:parse_propref(dobjstr)))
                  return $code_utils:show_property(#0, spec[2]);
                  else
                  if (valid(object = player:my_match_object(dobjstr)))
                  return $code_utils:show_object(object);
                  endif
                  endif
                  $command_utils:object_match_failed(object, dobjstr);
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
                <NAME>@check-p*roperty</NAME>
                <CODE>
                  "@check-prop object.property";
                  "  checks for descendents defining the given property.";
                  set_task_perms(player);
                  if (!(spec = $code_utils:parse_propref(dobjstr)))
                  player:notify(tostr("Usage:  ", verb, " &lt;object&gt;.&lt;prop-name&gt;"));
                  elseif ($command_utils:object_match_failed(object = player:my_match_object(spec[1]), spec[1]))
                  "...bogus object...";
                  elseif (!($perm_utils:controls(player, object) || object.w))
                  player:notify("You can't create a property on that object anyway.");
                  elseif ($object_utils:has_property(object, prop = spec[2]))
                  player:notify("That object already has that property.");
                  elseif (olist = $object_utils:descendants_with_property_suspended(object, prop))
                  player:notify("The following descendents have this property defined:");
                  player:notify("  " + $string_utils:from_list(olist, " "));
                  else
                  player:notify("No property name conflicts found.");
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                <NAME>set_eval_env</NAME>
                <CODE>
                  "set_eval_env(string);";
                  "Run &lt;string&gt; through eval.  If it doesn't compile, return E_INVARG.  If it crashes, well, it crashes.  If it works okay, set .eval_env to it and set .eval_ticks to the amount of time it took.";
                  if (is_player(this) &amp;&amp; $perm_utils:controls(caller_perms(), this))
                  program = args[1];
                  value = $no_one:eval_d((";ticks = ticks_left();" + program) + ";return ticks - ticks_left() - 2;");
                  if (!value[1])
                  return E_INVARG;
                  elseif (typeof(value[2]) == ERR)
                  return value[2];
                  endif
                  try
                  ok = this.eval_env = program;
                  this.eval_ticks = value[2];
                  return 1;
                  except error (ANY)
                  return error[1];
                  endtry
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
                <NAME>@clearp*roperty @clprop*erty</NAME>
                <CODE>
                  "@clearproperty &lt;obj&gt;.&lt;prop&gt;";
                  "Set the value of &lt;obj&gt;.&lt;prop&gt; to `clear', making it appear to be the same as the property on its parent.";
                  set_task_perms(player);
                  if (!(l = $code_utils:parse_propref(dobjstr)))
                  player:notify(tostr("Usage:  ", verb, " &lt;object&gt;.&lt;property&gt;"));
                  elseif ($command_utils:object_match_failed(dobj = player:my_match_object(l[1]), l[1]))
                  "... bogus object...";
                  endif
                  try
                  if (is_clear_property(dobj, prop = l[2]))
                  player:notify(tostr("Property ", dobj, ".", prop, " is already clear!"));
                  return;
                  endif
                  clear_property(dobj, prop);
                  player:notify(tostr("Property ", dobj, ".", prop, " cleared; value is now ", toliteral(dobj.(prop)), "."));
                  except (E_INVARG)
                  player:notify(tostr("You can't clear ", dobj, ".", prop, "; none of the ancestors define that property."));
                  except error (ANY)
                  player:notify(error[2]);
                  endtry
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@disown @disinherit</NAME>
                <CODE>
                  "Syntax: @disown &lt;object&gt; [from &lt;object&gt;]";
                  "This command is used to remove unwanted children of objects you control. If you control an object, and there is a child of that object you do not want, this command will chparent() the object to its grandparent.";
                  set_task_perms(player);
                  if (prepstr)
                  if (prepstr != "from")
                  player:notify("Usage:  ", verb, " &lt;object&gt; [from &lt;object&gt;]");
                  return;
                  elseif ($command_utils:object_match_failed(iobj = player:my_match_object(iobjstr), iobjstr))
                  "... from WHAT?..";
                  return;
                  elseif (valid(dobj = $string_utils:literal_object(dobjstr)))
                  "... literal object number...";
                  if (parent(dobj) != iobj)
                  player:notify(tostr(dobj, " is not a child of ", iobj.name, " (", iobj, ")"));
                  return;
                  endif
                  elseif ($command_utils:object_match_failed(dobj = $string_utils:match(dobjstr, children(iobj), "name", children(iobj), "aliases"), dobjstr))
                  "... can't match dobjstr against any children of iobj";
                  return;
                  endif
                  elseif ($command_utils:object_match_failed(dobj = player:my_match_object(dobjstr), dobjstr))
                  "... can't match dobjstr...";
                  return;
                  endif
                  try
                  if ($object_utils:disown(dobj))
                  player:notify(tostr(dobj.name, " (", dobj, ")'s parent is now ", (grandparent = parent(dobj)).name, " (", grandparent, ")."));
                  else
                  "this should never happen";
                  endif
                  except e (E_PERM, E_INVARG)
                  {code, message, value, traceback} = e;
                  player:notify(message);
                  endtry
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                <NAME>eval_cmd_string</NAME>
                <CODE>
                  ":eval_cmd_string(string[,debug])";
                  "Evaluates the string the way this player would normally expect to see it evaluated if it were typed on the command line.  debug (defaults to 1) indicates how the debug flag should be set during the evaluation.";
                  " =&gt; {@eval_result, ticks, seconds}";
                  "where eval_result is the result of the actual eval() call.";
                  "";
                  "For the case where string is an expression, we need to prefix `return ' and append `;' to string before passing it to eval().  However this is not appropriate for statements, where it is assumed an explicit return will be provided somewhere or that the return value is irrelevant.  The code below assumes that string is an expression unless it either begins with a semicolon `;' or one of the MOO language statement keywords.";
                  "Next, the substitutions described by this.eval_subs, which should be a list of pairs {string, sub}, are performed on string";
                  "Finally, this.eval_env is prefixed to the beginning while this.eval_ticks is subtracted from the eventual tick count.  This allows string to refer to predefined variables like `here' and `me'.";
                  set_task_perms(caller_perms());
                  {program, ?debug = 1} = args;
                  program = program + ";";
                  debug = debug ? 33 | 0;
                  if (!match(program, "^ *%(;%|%(if%|fork?%|return%|while%|try%)[^a-z0-9A-Z_]%)"))
                  program = "return " + program;
                  endif
                  program = tostr(this.eval_env, ";", $code_utils:substitute(program, this.eval_subs));
                  ticks = ((ticks_left() - 48) - this.eval_ticks) + debug;
                  seconds = seconds_left();
                  value = debug ? eval(program) | $code_utils:eval_d(program);
                  seconds = seconds - seconds_left();
                  ticks = ticks - ticks_left();
                  return {@value, ticks, seconds};
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@dump</NAME>
                <CODE>
                  "@dump something [with [id=...] [noprops] [noverbs] [create]]";
                  "This spills out all properties and verbs on an object, calling suspend at appropriate intervals.";
                  "   id=#nnn -- specifies an idnumber to use in place of the object's actual id (for porting to another MOO)";
                  "   noprops -- don't show properties.";
                  "   noverbs -- don't show verbs.";
                  "   create  -- indicates that a @create command should be generated and all of the verbs be introduced with @verb rather than @args; the default assumption is that the object already exists and you're just doing this to have a look at it.";
                  set_task_perms(player);
                  dobj = player:my_match_object(dobjstr);
                  if ($command_utils:object_match_failed(dobj, dobjstr))
                  return;
                  endif
                  if (prepstr &amp;&amp; (prepstr != "with"))
                  player:notify(tostr("Usage:  ", verb, " something [with [id=...] [noprops] [noverbs] [create]]"));
                  return;
                  endif
                  targname = tostr(dobj);
                  options = {"props", "verbs"};
                  create = 0;
                  if (iobjstr)
                  for o in ($string_utils:explode(iobjstr))
                  if (index(o, "id=") == 1)
                  targname = o[4..$];
                  elseif (o in {"noprops", "noverbs"})
                  options = setremove(options, o[3..$]);
                  elseif (o in {"create"})
                  create = 1;
                  else
                  player:notify(tostr("`", o, "' not understood as valid option."));
                  player:notify(tostr("Usage:  ", verb, " something [with [id=...] [noprops] [noverbs] [create]]"));
                  return;
                  endif
                  endfor
                  endif
                  if (create)
                  player:notify($code_utils:dump_preamble(dobj));
                  endif
                  if ("props" in options)
                  player:notify_lines_suspended($code_utils:dump_properties(dobj, create));
                  endif
                  if (!("verbs" in options))
                  player:notify("\"***finished***");
                  return;
                  endif
                  player:notify("");
                  player:notify_lines_suspended($code_utils:dump_verbs(dobj, create));
                  player:notify("\"***finished***");
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>#*</NAME>
                <CODE>
                  "Copied from Player Class hacked with eval that does substitutions and assorted stuff (#8855):# by Geust (#24442) Sun May  9 20:19:05 1993 PDT";
                  "#&lt;string&gt;[.&lt;property&gt;|.parent] [exit|player|inventory] [for &lt;code&gt;] returns information about the object (we'll call it &lt;thing&gt;) named by string.  String is matched in the current room unless one of exit|player|inventory is given.";
                  "If neither .&lt;property&gt;|.parent nor &lt;code&gt; is specified, just return &lt;thing&gt;.";
                  "If .&lt;property&gt; is named, return &lt;thing&gt;.&lt;property&gt;.  .parent returns parent(&lt;thing&gt;).";
                  "If &lt;code&gt; is given, it is evaluated, with the value returned by the first part being substituted for %# in &lt;code&gt;.";
                  "For example, the command";
                  "  #JoeFeedback.parent player for toint(%#)";
                  "will return 26026 (unless Joe has chparented since writing this).";
                  set_task_perms(player);
                  if (!(whatstr = verb[2..dot = min(index(verb + ".", "."), index(verb + ":", ":")) - 1]))
                  player:notify("Usage:  #string [exit|player|inventory]");
                  return;
                  elseif (!args)
                  what = player:my_match_object(whatstr);
                  elseif (index("exits", args[1]) == 1)
                  what = player.location:match_exit(whatstr);
                  elseif (index("inventory", args[1]) == 1)
                  what = player:match(whatstr);
                  elseif (index("players", args[1]) == 1)
                  what = $string_utils:match_player(whatstr);
                  if ($command_utils:player_match_failed(what, whatstr))
                  return;
                  endif
                  else
                  what = player:my_match_object(whatstr);
                  endif
                  if ((!valid(what)) &amp;&amp; match(whatstr, "^[0-9]+$"))
                  what = toobj(whatstr);
                  endif
                  if ($command_utils:object_match_failed(what, whatstr))
                  return;
                  endif
                  while (index(verb, ".parent") == (dot + 1))
                  what = parent(what);
                  dot = dot + 7;
                  endwhile
                  if (dot &gt;= length(verb))
                  val = what;
                  elseif ((value = $code_utils:eval_d(tostr("return ", what, verb[dot + 1..$], ";")))[1])
                  val = value[2];
                  else
                  player:notify_lines(value[2]);
                  return;
                  endif
                  if (prepstr)
                  program = strsub(iobjstr + ";", "%#", toliteral(val));
                  end = 1;
                  "while (\"A\" &lt;= (l = argstr[end]) &amp;&amp; l &lt;= \"Z\")";
                  while (("A" &lt;= (l = program[end])) &amp;&amp; (l &lt;= "Z"))
                  end = end + 1;
                  endwhile
                  if ((program[1] == ";") || (program[1..end - 1] in {"if", "for", "fork", "return", "while", "try"}))
                  program = $code_utils:substitute(program, this.eval_subs);
                  else
                  program = $code_utils:substitute("return " + program, this.eval_subs);
                  endif
                  if ((value = eval(program))[1])
                  player:notify(this:eval_value_to_string(value[2]));
                  else
                  player:notify_lines(value[2]);
                  nerrors = length(value[2]);
                  player:notify(tostr(nerrors, " error", (nerrors == 1) ? "." | "s."));
                  endif
                  else
                  player:notify(this:eval_value_to_string(val));
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                <NAME>eval_value_to_string</NAME>
                <CODE>
                  set_task_perms(caller_perms());
                  if (typeof(val = args[1]) == OBJ)
                  return tostr("=&gt; ", val, "  ", valid(val) ? ("(" + val.name) + ")" | ((a = $list_utils:assoc(val, {{#-1, "&lt;$nothing&gt;"}, {#-2, "&lt;$ambiguous_match&gt;"}, {#-3, "&lt;$failed_match&gt;"}})) ? a[2] | "&lt;invalid&gt;"));
                  elseif (typeof(val) == ERR)
                  return tostr("=&gt; ", toliteral(val), "  (", val, ")");
                  else
                  return tostr("=&gt; ", toliteral(val));
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@progo*ptions @prog-o*ptions @programmero*ptions @programmer-o*ptions</NAME>
                <CODE>
                  "@&lt;what&gt;-option &lt;option&gt; [is] &lt;value&gt;   sets &lt;option&gt; to &lt;value&gt;";
                  "@&lt;what&gt;-option &lt;option&gt;=&lt;value&gt;        sets &lt;option&gt; to &lt;value&gt;";
                  "@&lt;what&gt;-option +&lt;option&gt;     sets &lt;option&gt;   (usually equiv. to &lt;option&gt;=1";
                  "@&lt;what&gt;-option -&lt;option&gt;     resets &lt;option&gt; (equiv. to &lt;option&gt;=0)";
                  "@&lt;what&gt;-option !&lt;option&gt;     resets &lt;option&gt; (equiv. to &lt;option&gt;=0)";
                  "@&lt;what&gt;-option &lt;option&gt;      displays value of &lt;option&gt;";
                  set_task_perms(player);
                  what = "prog";
                  options = what + "_options";
                  option_pkg = #0.(options);
                  set_option = ("set_" + what) + "_option";
                  if (!args)
                  player:notify_lines({("Current " + what) + " options:", "", @option_pkg:show(this.(options), option_pkg.names)});
                  return;
                  elseif (typeof(presult = option_pkg:parse(args)) == STR)
                  player:notify(presult);
                  return;
                  else
                  if (length(presult) &gt; 1)
                  if (typeof(sresult = this:(set_option)(@presult)) == STR)
                  player:notify(sresult);
                  return;
                  elseif (!sresult)
                  player:notify("No change.");
                  return;
                  endif
                  endif
                  player:notify_lines(option_pkg:show(this.(options), presult[1]));
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                <NAME>prog_option</NAME>
                <CODE>
                  ":prog_option(name)";
                  "Returns the value of the specified prog option";
                  if ((caller == this) || $perm_utils:controls(caller_perms(), this))
                  return $prog_options:get(this.prog_options, args[1]);
                  else
                  return E_PERM;
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                <NAME>set_prog_option</NAME>
                <CODE>
                  ":set_prog_option(oname,value)";
                  "Changes the value of the named option.";
                  "Returns a string error if something goes wrong.";
                  if (!((caller == this) || $perm_utils:controls(caller_perms(), this)))
                  return tostr(E_PERM);
                  endif
                  "...this is kludgy, but it saves me from writing the same verb 3 times.";
                  "...there's got to be a better way to do this...";
                  verb[1..4] = "";
                  foo_options = verb + "s";
                  "...";
                  if (typeof(s = #0.(foo_options):set(this.(foo_options), @args)) == STR)
                  return s;
                  elseif (s == this.(foo_options))
                  return 0;
                  else
                  this.(foo_options) = s;
                  return 1;
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                <NAME>@list*#</NAME>
                <CODE>
                  "@list &lt;obj&gt;:&lt;verb&gt; [&lt;dobj&gt; &lt;prep&gt; &lt;iobj&gt;] [with[out] paren|num] [all] [ranges]";
                  set_task_perms(player);
                  bynumber = verb == "@list#";
                  pflag = player:prog_option("list_all_parens");
                  nflag = !player:prog_option("list_no_numbers");
                  permflag = player:prog_option("list_show_permissions");
                  aflag = 0;
                  argspec = {};
                  range = {};
                  spec = args ? $code_utils:parse_verbref(args[1]) | E_INVARG;
                  args = spec ? listdelete(args, 1) | E_INVARG;
                  while (args)
                  if (args[1] &amp;&amp; ((index("without", args[1]) == 1) || (args[1] == "wo")))
                  "...w,wi,wit,with =&gt; 1; wo,witho,withou,without =&gt; 0...";
                  fval = !index(args[1], "o");
                  if (`index("parentheses", args[2]) ! ANY' == 1)
                  pflag = fval;
                  args[1..2] = {};
                  elseif (`index("numbers", args[2]) ! ANY' == 1)
                  nflag = fval;
                  args[1..2] = {};
                  else
                  player:notify(tostr(args[1], " WHAT?"));
                  args = E_INVARG;
                  endif
                  elseif (index("all", args[1]) == 1)
                  if (bynumber)
                  player:notify("Don't use `all' with @list#.");
                  args = E_INVARG;
                  else
                  aflag = 1;
                  args[1..1] = {};
                  endif
                  elseif (index("0123456789", args[1][1]) || (index(args[1], "..") == 1))
                  if (E_INVARG == (s = $seq_utils:from_string(args[1])))
                  player:notify(tostr("Garbled range:  ", args[1]));
                  args = E_INVARG;
                  else
                  range = $seq_utils:union(range, s);
                  args = listdelete(args, 1);
                  endif
                  elseif (bynumber)
                  player:notify("Don't give args with @list#.");
                  args = E_INVARG;
                  elseif (argspec)
                  "... second argspec?  Not likely ...";
                  player:notify(tostr(args[1], " unexpected."));
                  args = E_INVARG;
                  elseif (typeof(pas = $code_utils:parse_argspec(@args)) == LIST)
                  argspec = pas[1];
                  if (length(argspec) &lt; 2)
                  player:notify(tostr("Argument `", @argspec, "' malformed."));
                  args = E_INVARG;
                  else
                  argspec[2] = $code_utils:full_prep(argspec[2]) || argspec[2];
                  args = pas[2];
                  endif
                  else
                  "... argspec is bogus ...";
                  player:notify(tostr(pas));
                  args = E_INVARG;
                  endif
                  endwhile
                  if (args == E_INVARG)
                  if (bynumber)
                  player:notify(tostr("Usage:  ", verb, " &lt;object&gt;:&lt;verbnumber&gt; [with|without parentheses|numbers] [ranges]"));
                  else
                  player:notify(tostr("Usage:  ", verb, " &lt;object&gt;:&lt;verb&gt; [&lt;dobj&gt; &lt;prep&gt; &lt;iobj&gt;] [with|without parentheses|numbers] [all] [ranges]"));
                  endif
                  return;
                  elseif ($command_utils:object_match_failed(object = player:my_match_object(spec[1]), spec[1]))
                  return;
                  endif
                  shown_one = 0;
                  for what in ({object, @$object_utils:ancestors(object)})
                  if (bynumber)
                  vname = $code_utils:toint(spec[2]);
                  if (vname == E_TYPE)
                  return player:notify("Verb number expected.");
                  elseif ((vname &lt; 1) || `vname &gt; length(verbs(what)) ! E_PERM =&gt; 0')
                  return player:notify("Verb number out of range.");
                  endif
                  code = `verb_code(what, vname, pflag) ! ANY';
                  elseif (argspec)
                  vnum = $code_utils:find_verb_named(what, spec[2]);
                  while (vnum &amp;&amp; (`verb_args(what, vnum) ! ANY' != argspec))
                  vnum = $code_utils:find_verb_named(what, spec[2], vnum + 1);
                  endwhile
                  vname = vnum;
                  code = (!vnum) ? E_VERBNF | `verb_code(what, vnum, pflag) ! ANY';
                  else
                  vname = spec[2];
                  code = `verb_code(what, vname, pflag) ! ANY';
                  endif
                  if (code != E_VERBNF)
                  if (shown_one)
                  player:notify("");
                  elseif (what != object)
                  player:notify(tostr("Object ", object, " does not define that verb", argspec ? " with those args" | "", ", but its ancestor ", what, " does."));
                  endif
                  if (typeof(code) == ERR)
                  player:notify(tostr(what, ":", vname, " -- ", code));
                  else
                  info = verb_info(what, vname);
                  vargs = verb_args(what, vname);
                  fullname = info[3];
                  if (index(fullname, " "))
                  fullname = toliteral(fullname);
                  endif
                  if (index(vargs[2], "/"))
                  vargs[2] = tostr("(", vargs[2], ")");
                  endif
                  player:notify(tostr(what, ":", fullname, "   ", $string_utils:from_list(vargs, " "), permflag ? " " + info[2] | ""));
                  if (code == {})
                  player:notify("(That verb has not been programmed.)");
                  else
                  lineseq = {1, length(code) + 1};
                  range &amp;&amp; (lineseq = $seq_utils:intersection(range, lineseq));
                  if (!lineseq)
                  player:notify("(No lines in that range.)");
                  endif
                  for k in [1..length(lineseq) / 2]
                  for i in [lineseq[(2 * k) - 1]..lineseq[2 * k] - 1]
                  if (nflag)
                  player:notify(tostr(" "[1..i &lt; 10], i, ":  ", code[i]));
                  else
                  player:notify(code[i]);
                  endif
                  $command_utils:suspend_if_needed(0);
                  endfor
                  endfor
                  endif
                  endif
                  shown_one = 1;
                  endif
                  if (shown_one &amp;&amp; (!aflag))
                  return;
                  endif
                  endfor
                  if (!shown_one)
                  player:notify(tostr("That object does not define that verb", argspec ? " with those args." | "."));
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d x r" DOBJ="none" PREP="none" IOBJ="none">
                <NAME>set_eval_subs</NAME>
                <CODE>
                  "Copied from Player Class hacked with eval that does substitutions and assorted stuff (#8855):set_eval_subs by Geust (#24442) Fri Aug  5 13:18:59 1994 PDT";
                  if (!$perm_utils:controls(caller_perms(), this))
                  return E_PERM;
                  elseif (typeof(subs = args[1]) != LIST)
                  return E_TYPE;
                  else
                  for pair in (subs)
                  if (((length(pair) != 2) || typeof(pair[1] != STR)) || typeof(pair[2] != STR))
                  return E_INVARG;
                  endif
                  endfor
                  endif
                  return `this.eval_subs = subs ! ANY';
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
                <NAME>@verbs*</NAME>
                <CODE>
                  set_task_perms(player);
                  if (!dobjstr)
                  try
                  if ((verb[7] != "(") &amp;&amp; (verb[$] != ")"))
                  player:tell("Usage:  @verbs &lt;object&gt;");
                  return;
                  else
                  dobjstr = verb[8..$ - 1];
                  endif
                  except (E_RANGE)
                  return player:tell("Usage:  @verbs &lt;object&gt;");
                  endtry
                  endif
                  thing = player:my_match_object(dobjstr);
                  if (!$command_utils:object_match_failed(thing, dobjstr))
                  verbs = $object_utils:accessible_verbs(thing);
                  player:tell(";verbs(", thing, ") =&gt; ", toliteral(verbs));
                  endif
                </CODE>
              </VERB>
              <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
                <NAME>@forked-v*erbose</NAME>
                <CODE>
                  "Syntax:  @forked-v*erbose [player]";
                  "         @forked-v*erbose all wizards";
                  "";
                  "For a normal player, shows all the tasks you have waiting in your queue, especially those forked or suspended. A wizard will see all the tasks of all the players unless the optional argument is provided. For a task which has suspended, and not a fresh fork, shows the full callers() stack.";
                  "The second form is only usable by wizards and provides an output of all tasks owned by characters who are .wizard=1. Useful to find a task that may get put in a random queue due to $wiz_utils:random_wizard. Or even finding verbs that run with wizard permissions that shouldn't be.";
                  set_task_perms(player);
                  if (!dobjstr)
                  tasks = queued_tasks();
                  elseif ((dobjstr == "all wizards") &amp;&amp; player.wizard)
                  tasks = {};
                  for t in (queued_tasks())
                  if (valid(t[5]) &amp;&amp; t[5].wizard)
                  tasks = {@tasks, t};
                  endif
                  $command_utils:suspend_if_needed(1);
                  endfor
                  elseif ($command_utils:player_match_result(dobj = $string_utils:match_player(dobjstr), dobjstr)[1])
                  return;
                  elseif (typeof(tasks = $wiz_utils:queued_tasks(dobj)) != LIST)
                  player:notify(tostr(verb, " ", dobj.name, "(", dobj, "):  ", tasks));
                  return;
                  endif
                  if (tasks)
                  su = $string_utils;
                  player:notify("Queue ID    Start Time            Owner         Verb (Line) [This]");
                  player:notify("--------    ----------            -----         -----------------");
                  now = time();
                  for task in (tasks)
                  $command_utils:suspend_if_needed(0);
                  {q_id, start, nu, nu2, owner, vloc, vname, lineno, this} = task;
                  time = (start &gt;= now) ? ctime(start)[5..24] | su:left((start == -1) ? "Reading input ..." | tostr(now - start, " seconds ago..."), 20);
                  owner_name = valid(owner) ? owner.name | tostr("Dead ", owner);
                  player:notify(tostr(su:left(tostr(q_id), 10), "  ", time, "  ", su:left(owner_name, 12), "  ", vloc, ":", vname, " (", lineno, ")", (this != vloc) ? tostr(" [", this, "]") | ""));
                  if (stack = `task_stack(q_id, 1) ! E_INVARG =&gt; 0')
                  for frame in (listdelete(stack, 1))
                  {sthis, svname, sprogger, svloc, splayer, slineno} = frame;
                  player:notify(tostr("                    Called By...  ", su:left(valid(sprogger) ? sprogger.name | tostr("Dead ", sprogger), 12), "  ", svloc, ":", svname, (sthis != svloc) ? tostr(" [", sthis, "]") | "", " (", slineno, ")"));
                  endfor
                  endif
                  endfor
                  player:notify("-----------------------------------------------------------------");
                  else
                  player:notify("No tasks.");
                  endif
                </CODE>
              </VERB>
              <OBJECT ID="obj36" FLAGS="r programmer player" OWNER="obj36" LOCATION="obj-1">
                <NAME>Hacker</NAME>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>eval_subs</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>eval_ticks</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>eval_env</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>prog_options</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>build_options</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>at_room_width</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>at_number</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>join_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>object_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>victim_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>thing_arrive_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>othing_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>thing_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>player_arrive_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>oplayer_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>player_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>self_arrive_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>oself_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>self_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>rooms</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>refused_origins</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>refused_extra</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>default_refusal_time</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>report_refusal</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>refused_actions</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>refused_until</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>page_refused</NAME>
                  <VALUE>0</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>page_refused_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>whisper_refused_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>mail_refused_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>spurned_objects</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>_mail_task</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c">
                  <NAME>messages_going</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>mail_lists</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>mail_notify</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>mail_forward</NAME>
                  <VALUE>{#2}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>mail_options</NAME>
                  <VALUE>{}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>message_keep_date</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>messages_kept</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c">
                  <NAME>current_message</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c">
                  <NAME>messages</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>features</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>previous_connection</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>email_address</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>last_disconnect_time</NAME>
                  <VALUE>2147483647</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>help</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>more_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>linetask</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>linesleft</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" >
                  <NAME>linebuffer</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>pagelen</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>owned_objects</NAME>
                  <VALUE>0</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>linelen</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c">
                  <NAME>current_folder</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>all_connect_places</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>last_connect_place</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>dict</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>brief</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c">
                  <NAME>lines</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>page_absent_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>pq</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>pqc</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>page_origin_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>page_echo_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>edit_options</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>last_connect_time</NAME>
                  <VALUE>2147483647</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" >
                  <NAME>ownership_quota</NAME>
                  <VALUE>21763</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>gender</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>prc</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>ppc</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>poc</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>psc</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>pr</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>pp</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>po</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>ps</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>home</NAME>
                  <VALUE>#-1</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>password</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>gaglist</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>paranoid</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>display_options</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>verb_subs</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>first_connect_time</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" >
                  <NAME>size_quota</NAME>
                  <VALUE>{5000000, -1688265, 919123708, 1}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>last_password_time</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>last_connect_attempt</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c">
                  <NAME>key</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>aliases</NAME>
                  <VALUE>{"Hacker"}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="c r">
                  <NAME>description</NAME>
                  <VALUE>"A system character used to own non-wizardly system verbs , properties, and objects in the core."</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>object_size</NAME>
                  <VALUE>{2080, 919123677}</VALUE>
                </PROPERTY>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>init_for_core</NAME>
                  <CODE>
                    if (caller_perms().wizard)
                    pass();
                    this.mail_forward = {#2};
                    endif
                  </CODE>
                </VERB>
              </OBJECT>
              <OBJECT ID="obj57" FLAGS="r" OWNER="obj2" LOCATION="obj-1">
                <NAME>generic wizard</NAME>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>newt_victim_msg</NAME>
                  <VALUE>""</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>newt_msg</NAME>
                  <VALUE>"%n @newts %d (%[#d])"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>public_identity</NAME>
                  <VALUE>#-1</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>programmer_msg</NAME>
                  <VALUE>"%d is now a programmer."</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>programmer_victim_msg</NAME>
                  <VALUE>"You are now a programmer."</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>toad_victim_msg</NAME>
                  <VALUE>"Have a nice life..."</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>toad_msg</NAME>
                  <VALUE>"%n @toads %d (%[#d])"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c">
                  <NAME>mail_identity</NAME>
                  <VALUE>#-1</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>advertised</NAME>
                  <VALUE>1</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>eval_subs</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>eval_ticks</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>eval_env</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>prog_options</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>build_options</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>at_room_width</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>at_number</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>join_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>object_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>victim_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>thing_arrive_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>othing_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>thing_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>player_arrive_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>oplayer_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>player_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>self_arrive_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>oself_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>self_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>rooms</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>refused_origins</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>refused_extra</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>default_refusal_time</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>report_refusal</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>refused_actions</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>refused_until</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>page_refused</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>page_refused_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>whisper_refused_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>mail_refused_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>spurned_objects</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>_mail_task</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c">
                  <NAME>messages_going</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>mail_lists</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>mail_notify</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>mail_forward</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>mail_options</NAME>
                  <VALUE>{}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>message_keep_date</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>messages_kept</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c">
                  <NAME>current_message</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c">
                  <NAME>messages</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>features</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>previous_connection</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>email_address</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>last_disconnect_time</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>help</NAME>
                  <VALUE>#23</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>more_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>linetask</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>linesleft</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" >
                  <NAME>linebuffer</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>pagelen</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>owned_objects</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>linelen</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c">
                  <NAME>current_folder</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>all_connect_places</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>last_connect_place</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>dict</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>brief</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c">
                  <NAME>lines</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>page_absent_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>pq</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>pqc</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>page_origin_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>page_echo_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>edit_options</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>last_connect_time</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" >
                  <NAME>ownership_quota</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>gender</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>prc</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>ppc</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>poc</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>psc</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>pr</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>pp</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>po</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>ps</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>home</NAME>
                  <VALUE>#62</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>password</NAME>
                  <VALUE>"really impossible password to type"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>gaglist</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>paranoid</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>display_options</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>verb_subs</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>first_connect_time</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" >
                  <NAME>size_quota</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>last_password_time</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>last_connect_attempt</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c">
                  <NAME>key</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>aliases</NAME>
                  <VALUE>{"player"}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="c r">
                  <NAME>description</NAME>
                  <VALUE>"You see a wizard who chooses not to reveal its true appearance."</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>object_size</NAME>
                  <VALUE>{54636, 919123697}</VALUE>
                </PROPERTY>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@chown*#</NAME>
                  <CODE>
                    if ((!player.wizard) || (player != this))
                    player:notify("Sorry.");
                    return;
                    endif
                    set_task_perms(player);
                    args = setremove(args, "to");
                    if ((length(args) != 2) || (!args[2]))
                    player:notify(tostr("Usage:  ", verb, " &lt;object-or-property-or-verb&gt; &lt;owner&gt;"));
                    return;
                    endif
                    what = args[1];
                    owner = $string_utils:match_player(args[2]);
                    bynumber = verb == "@chown#";
                    if ($command_utils:player_match_result(owner, args[2])[1])
                    elseif (spec = $code_utils:parse_verbref(what))
                    object = this:my_match_object(spec[1]);
                    if (!$command_utils:object_match_failed(object, spec[1]))
                    vname = spec[2];
                    if (bynumber)
                    vname = $code_utils:toint(vname);
                    if (vname == E_TYPE)
                    return player:notify("Verb number expected.");
                    elseif ((vname &lt; 1) || (vname &gt; length(verbs(object))))
                    return player:notify("Verb number out of range.");
                    endif
                    endif
                    info = `verb_info(object, vname) ! ANY';
                    if (info == E_VERBNF)
                    player:notify("That object does not define that verb.");
                    elseif (typeof(info) == ERR)
                    player:notify(tostr(info));
                    else
                    try
                    result = set_verb_info(object, vname, listset(info, owner, 1));
                    player:notify("Verb owner set.");
                    except e (ANY)
                    player:notify(e[2]);
                    endtry
                    endif
                    endif
                    elseif (bynumber)
                    player:notify("@chown# can only be used with verbs.");
                    elseif (index(what, ".") &amp;&amp; (spec = $code_utils:parse_propref(what)))
                    object = this:my_match_object(spec[1]);
                    if (!$command_utils:object_match_failed(object, spec[1]))
                    pname = spec[2];
                    e = $wiz_utils:set_property_owner(object, pname, owner);
                    if (e == E_NONE)
                    player:notify("+c Property owner set.  Did you really want to do that?");
                    else
                    player:notify(tostr(e &amp;&amp; "Property owner set."));
                    endif
                    endif
                    else
                    object = this:my_match_object(what);
                    if (!$command_utils:object_match_failed(object, what))
                    player:notify(tostr($wiz_utils:set_owner(object, owner) &amp;&amp; "Object ownership changed."));
                    endif
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@shout</NAME>
                  <CODE>
                    if (caller != this)
                    raise(E_PERM);
                    endif
                    set_task_perms(player);
                    if ((length(args) == 1) &amp;&amp; (argstr[1] == "\""))
                    argstr = args[1];
                    endif
                    shout = $gender_utils:get_conj("shouts", player);
                    for person in (connected_players())
                    if (person != player)
                    person:notify(tostr(player.name, " ", shout, ", \"", argstr, "\""));
                    endif
                    endfor
                    player:notify(tostr("You shout, \"", argstr, "\""));
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="at/to" IOBJ="any">
                  <NAME>@grant @grants* @transfer</NAME>
                  <CODE>
                    "@grant &lt;object&gt; to &lt;player&gt;";
                    "@grants &lt;object&gt; to &lt;player&gt;   --- same as @grant but may suspend.";
                    "@transfer &lt;expression&gt; to &lt;player&gt; -- like 'grant', but evalutes a possible list of objects to transfer, and modifies quota.";
                    "Ownership of the object changes as in @chown and :set_owner (i.e., .owner and all c properties change).  In addition all verbs and !c properties owned by the original owner change ownership as well.  Finally, for !c properties, instances on descendant objects change ownership (as in :set_property_owner).";
                    if ((!player.wizard) || (player != this))
                    player:notify("Sorry.");
                    return;
                    endif
                    set_task_perms(player);
                    if ((!iobjstr) || (!dobjstr))
                    return player:notify(tostr("Usage:  ", verb, " &lt;object&gt; to &lt;player&gt;"));
                    endif
                    if ($command_utils:player_match_failed(newowner = $string_utils:match_player(iobjstr), iobjstr))
                    "...newowner is bogus...";
                    return;
                    endif
                    if (verb == "@transfer")
                    objlist = player:eval_cmd_string(dobjstr, 0);
                    if (!objlist[1])
                    player:notify(tostr("Had trouble reading `", dobjstr, "': "));
                    player:notify_lines(@objlist[2]);
                    return;
                    elseif (typeof(objlist[2]) == OBJ)
                    objlist = objlist[2..2];
                    elseif (typeof(objlist[2]) != LIST)
                    player:notify(tostr("Value of `", dobjstr, "' is not an object or list:  ", toliteral(objlist[2])));
                    return;
                    else
                    objlist = objlist[2];
                    endif
                    elseif ($command_utils:object_match_failed(object = this:my_match_object(dobjstr), dobjstr))
                    "...object is bogus...";
                    return;
                    else
                    objlist = {object};
                    endif
                    "Used to check for quota of newowner, but doesn't anymore, cuz the quota check doesn't work";
                    suspendok = verb != "@grant";
                    player:tell("Transferring ", toliteral(objlist), " to ", $string_utils:nn(newowner));
                    for object in (objlist)
                    $command_utils:suspend_if_needed(0);
                    same = object.owner == newowner;
                    for vnum in [1..length(verbs(object))]
                    info = verb_info(object, vnum);
                    if (!((info[1] != object.owner) &amp;&amp; (valid(info[1]) &amp;&amp; is_player(info[1]))))
                    same = same &amp;&amp; (info[1] == newowner);
                    set_verb_info(object, vnum, listset(info, newowner, 1));
                    endif
                    endfor
                    for prop in (properties(object))
                    if (suspendok &amp;&amp; ((ticks_left() &lt; 5000) || (seconds_left() &lt; 2)))
                    suspend(0);
                    endif
                    info = property_info(object, prop);
                    if (!(index(info[2], "c") || (((info[1] != object.owner) &amp;&amp; valid(info[1])) &amp;&amp; is_player(info[1]))))
                    same = same &amp;&amp; (info[1] == newowner);
                    $wiz_utils:set_property_owner(object, prop, newowner, suspendok);
                    endif
                    endfor
                    if (suspendok)
                    suspend(0);
                    endif
                    $wiz_utils:set_owner(object, newowner, suspendok);
                    if (same)
                    player:notify(tostr(newowner.name, " already owns everything ", newowner.ps, " is entitled to on ", object.name, "."));
                    else
                    player:notify(tostr("Ownership changed on ", $string_utils:nn(object), ", verb, properties and descendants' properties."));
                    endif
                    endfor
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
                  <NAME>@programmer</NAME>
                  <CODE>
                    set_task_perms(player);
                    dobj = $string_utils:match_player(dobjstr);
                    if (dobj == $nothing)
                    player:notify(tostr("Usage:  ", verb, " &lt;playername&gt;"));
                    elseif ($command_utils:player_match_result(dobj, dobjstr)[1])
                    elseif ($wiz_utils:check_prog_restricted(dobj))
                    return player:notify(tostr("Sorry,", dobj.name, " is not allowed to be a programmer."));
                    elseif ((dobj.description == $player.description) &amp;&amp; (!$command_utils:yes_or_no($string_utils:pronoun_sub("@Programmer %d despite %[dpp] lack of description?"))))
                    player:notify(tostr("Okay, leaving ", dobj.name, " !programmer."));
                    return;
                    elseif (result = $wiz_utils:set_programmer(dobj))
                    player:notify(tostr(dobj.name, " (", dobj, ") is now a programmer.  ", dobj.ppc, " quota is currently ", $quota_utils:get_quota(dobj), "."));
                    player:notify(tostr(dobj.name, " and the other wizards have been notified."));
                    if (msg = this:programmer_victim_msg())
                    dobj:notify(msg);
                    endif
                    if ($object_utils:isa(dobj.location, $room) &amp;&amp; (msg = this:programmer_msg()))
                    dobj.location:announce_all_but({dobj}, msg);
                    endif
                    elseif (result == E_NONE)
                    player:notify(tostr(dobj.name, " (", dobj, ") is already a programmer..."));
                    else
                    player:notify(tostr(result));
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
                  <NAME>make-core-database</NAME>
                  <CODE>
                    if (!player.wizard)
                    player:notify("Nice try, but permission denied.");
                    return;
                    elseif (args == {})
                    player:notify(tostr("Continuing with this command will destroy all but the central core of the database.  If you're really sure that you want to do this, type '", verb, " ", toint(o = $quota_utils:bi_create(#1)), "' now."));
                    recycle(o);
                    return;
                    elseif (toobj(toint(args[1])) != max_object())
                    player:notify(tostr("Nice try, but you mistyped the self-destruct password.  Type '", verb, "' again to get a new password."));
                    return;
                    elseif (verb_info($wiz, verb)[1] != player)
                    player:notify("Sorry, but you must own this verb in order to use it.");
                    return;
                    endif
                    "----------------------------------------";
                    player:notify("Blowing away $local...");
                    $local = #-1;
                    "----------------------------------------";
                    player:notify("Identifying objects to be saved...");
                    saved = {#0, player};
                    saved_props = {};
                    for p in (properties(#0))
                    v = #0.(p);
                    if ((typeof(v) == OBJ) &amp;&amp; valid(v))
                    saved = setadd(saved, v);
                    saved_props = {@saved_props, p};
                    endif
                    endfor
                    for o in (saved)
                    "Also save non-$ objects that are ancestors of $ objects";
                    "but leave out non-$ player classes and room classes";
                    "Come to think of it, what's the point of this? Can't we just give the generic gendered object a $-name? --Nosredna";
                    if ((!$object_utils:isa(o, $player)) &amp;&amp; (!$object_utils:isa(o, $room)))
                    p = parent(o);
                    while (valid(p))
                    saved = setadd(saved, p);
                    p = parent(p);
                    endwhile
                    endif
                    endfor
                    $player_class = $mail_recipient_class;
                    "----------------------------------------";
                    player:notify("Killing all queued tasks ...");
                    for t in (queued_tasks())
                    kill_task(t[1]);
                    endfor
                    "----------------------------------------";
                    player:notify("Stripping you of any personal verbs and/or properties ...");
                    suspend(0);
                    for i in [1..length(verbs(player))]
                    delete_verb(player, 1);
                    endfor
                    for p in (properties(player))
                    delete_property(player, p);
                    endfor
                    chparent(player, $wiz);
                    for p in ($object_utils:all_properties(player))
                    clear_property(player, p);
                    endfor
                    player.name = "Wizard";
                    player.aliases = {"Wizard"};
                    player.description = "";
                    player.key = 0;
                    player.ownership_quota = 100;
                    player.password = 0;
                    player.last_password_time = 0;
                    $gender_utils:set(player, "neuter");
                    "----------------------------------------";
                    suspend(0);
                    player:notify("Making you or $hacker the owner of every saved object, verb and property ...");
                    for i in [1..length(saved)]
                    if ($command_utils:running_out_of_time())
                    suspend(0);
                    player:notify(tostr("... finished ", i - 1, " out of ", length(saved), " saved objects ..."));
                    endif
                    o = saved[i];
                    if (valid(o.owner) &amp;&amp; o.owner.wizard)
                    o.owner = player;
                    else
                    o.owner = $hacker;
                    endif
                    old_verbs = {};
                    for j in [1..length(verbs(o))]
                    if ((seconds_left() &lt; 1) || (ticks_left() &lt; 2000))
                    suspend(0);
                    player:notify(tostr("... finished ", i - 1, " out of ", length(saved), " saved objects ..."));
                    endif
                    info = verb_info(o, j);
                    if (valid(info[1]) &amp;&amp; info[1].wizard)
                    info = listset(info, player, 1);
                    else
                    info = listset(info, $hacker, 1);
                    endif
                    set_verb_info(o, j, info);
                    if (index(info[3], "(old)"))
                    old_verbs = {j, @old_verbs};
                    endif
                    endfor
                    for vname in (old_verbs)
                    delete_verb(o, vname);
                    endfor
                    for p in ($object_utils:all_properties(o))
                    if ((seconds_left() &lt; 2) || (ticks_left() &lt; 2000))
                    suspend(0);
                    player:notify(tostr("... finished ", i - 1, " out of ", length(saved), " saved objects ..."));
                    endif
                    info = property_info(o, p);
                    if (valid(info[1]) &amp;&amp; info[1].wizard)
                    info = listset(info, player, 1);
                    else
                    info = listset(info, $hacker, 1);
                    endif
                    set_property_info(o, p, info);
                    endfor
                    endfor
                    "----------------------------------------";
                    player:notify("Removing all unsaved :recycle and :exitfunc verbs ...");
                    for o in [#0..max_object()]
                    i = toint(o);
                    if (i &amp;&amp; ((i % 1000) == 0))
                    player:notify(tostr("... ", o));
                    endif
                    $command_utils:suspend_if_needed(0);
                    if (valid(o) &amp;&amp; (!(o in saved)))
                    for v in ({"recycle", "exitfunc"})
                    while ($object_utils:defines_verb(o, v))
                    delete_verb(o, v);
                    endwhile
                    endfor
                    endif
                    endfor
                    "----------------------------------------";
                    player:notify("Recycling unsaved objects ...");
                    add_property(this, "mcd_pos", toint(max_object()), {player, "r"});
                    add_property(this, "mcd_save", {saved, saved_props}, {player, "r"});
                    suspend(0);
                    this:mcd_2(saved, saved_props);
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@shutdown</NAME>
                  <CODE>
                    if (!player.wizard)
                    player:notify("Sorry.");
                    return;
                    elseif ($code_utils:task_valid($shutdown_task))
                    player:notify("Shutdown already in progress.");
                    return;
                    endif
                    if (s = match(argstr, "^in +%([0-9]+%) +"))
                    bounds = s[3][1];
                    delay = toint(argstr[bounds[1]..bounds[2]]);
                    argstr = argstr[s[2] + 1..$];
                    else
                    delay = 2;
                    endif
                    if (!$command_utils:yes_or_no(tostr("Do you really want to shut down the server in ", delay, " minutes?")))
                    player:notify("Aborted.");
                    return;
                    endif
                    announce_times = {};
                    if (delay &gt; 0)
                    while (delay &gt; 0)
                    announce_times = {@announce_times, delay * 60};
                    delay = delay / 2;
                    endwhile
                    announce_times = {@announce_times, 30, 10};
                    $shutdown_time = time() + announce_times[1];
                    endif
                    $shutdown_message = tostr(player.name, " (", player, "): ", argstr);
                    $shutdown_task = task_id();
                    for i in [1..length(announce_times)]
                    msg = $generic_editor:fill_string(tostr("*** The server will be shut down by ", player.name, " (", player, ") in ", $time_utils:english_time(announce_times[i]), ": ", argstr, " ***"));
                    "...use raw notify() since :notify() verb could be broken...";
                    for p in (connected_players())
                    for line in (msg)
                    notify(p, line);
                    endfor
                    $command_utils:suspend_if_needed(0);
                    endfor
                    suspend(announce_times[i] - {@announce_times, 0}[i + 1]);
                    endfor
                    for p in (connected_players())
                    notify(p, tostr("*** Server shutdown by ", player.name, " (", player, "): ", argstr, " ***"));
                    boot_player(p);
                    endfor
                    suspend(0);
                    $shutdown_task = E_NONE;
                    set_task_perms(player);
                    shutdown(argstr);
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="none" PREP="none" IOBJ="none">
                  <NAME>@dump-d*atabase</NAME>
                  <CODE>
                    set_task_perms(player);
                    dump_database();
                    player:notify("Dumping...");
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@who-calls</NAME>
                  <CODE>
                    set_task_perms(player);
                    if (argstr[1] != ":")
                    argstr = ":" + argstr;
                    endif
                    player:notify(tostr("Searching for verbs that appear to call ", argstr, " ..."));
                    player:notify("");
                    $code_utils:find_verbs_containing(argstr + "(");
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="none" PREP="none" IOBJ="none">
                  <NAME>mcd_2</NAME>
                  <CODE>
                    if (!caller_perms().wizard)
                    return;
                    elseif (!("mcd_pos" in properties(this)))
                    return;
                    endif
                    end = this.mcd_pos;
                    saved = args[1];
                    saved_props = args[2];
                    player:notify(tostr("*** Recycling from #", end, " ..."));
                    suspend(0);
                    fork (0)
                    this:mcd_2(saved, saved_props);
                    endfork
                    for i in [0..end]
                    this.mcd_pos = end - i;
                    o = toobj(end - i);
                    if ($command_utils:running_out_of_time())
                    return;
                    endif
                    if (valid(o) &amp;&amp; (!(o in saved)))
                    for x in (o.contents)
                    move(x, #-1);
                    endfor
                    if (is_player(o))
                    o.features = {};
                    set_player_flag(o, 0);
                    endif
                    recycle(o);
                    endif
                    endfor
                    delete_property(this, "mcd_pos");
                    "----------------------------------------";
                    suspend(0);
                    player:notify("Killing queued tasks ...");
                    for t in (queued_tasks())
                    kill_task(t[1]);
                    endfor
                    "----------------------------------------";
                    player:notify("Compacting object numbers ...");
                    alist = {};
                    for p in (saved_props)
                    $command_utils:suspend_if_needed(0);
                    if (pair = $list_utils:assoc(#0.(p), alist))
                    #0.(p) = pair[2];
                    elseif (#0.(p) != player)
                    old = #0.(p);
                    #0.(p) = renumber(#0.(p));
                    alist = {@alist, {old, #0.(p)}};
                    endif
                    endfor
                    for o in (saved)
                    if (valid(o) &amp;&amp; (o != player))
                    renumber(o);
                    endif
                    endfor
                    reset_max_object();
                    "----------------------------------------";
                    player:notify("Performing miscellaneous cleanups ...");
                    for o in [#0..max_object()]
                    $command_utils:suspend_if_needed(0);
                    try
                    if (o == player)
                    move(o, $player_start);
                    elseif ($object_utils:isa(o, $mail_recipient))
                    move(o, $mail_agent);
                    else
                    move(o, #-1);
                    endif
                    except e (ANY)
                    player:notify(tostr("Couldn't move ", o, " =&gt; ", e[2]));
                    player:notify(toliteral(e[4]));
                    endtry
                    if ($object_utils:has_callable_verb(o, "init_for_core"))
                    try
                    o:init_for_core();
                    except e (ANY)
                    player:notify(tostr("Error from ", o, ":init_for_core =&gt; ", e[2]));
                    player:notify(toliteral(e[4]));
                    endtry
                    endif
                    endfor
                    player:notify("Re-measuring everything ...");
                    for o in [#0..max_object()]
                    $command_utils:suspend_if_needed(0);
                    if (o != $spell)
                    $byte_quota_utils:object_bytes(o);
                    endif
                    endfor
                    $wiz_utils:initialize_owned();
                    $byte_quota_utils:summarize_one_user(player);
                    delete_property(this, "mcd_save");
                    player:notify("Core database extraction is complete.  Type @shutdown to save it.");
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@toad @toad! @toad!!</NAME>
                  <CODE>
                    "@toad[!][!] &lt;player&gt; [blacklist|redlist|graylist] [commentary]";
                    whostr = args[1];
                    comment = $string_utils:first_word(argstr)[2];
                    if (verb == "@toad!!")
                    listname = "redlist";
                    elseif (verb == "@toad!")
                    listname = "blacklist";
                    elseif ((ln = {@args, ""}[2]) &amp;&amp; (index(listname = $login:listname(ln), ln) == 1))
                    "...first word of coment is one of the magic words...";
                    comment = $string_utils:first_word(comment)[2];
                    else
                    listname = "";
                    endif
                    if ((!player.wizard) || (player != this))
                    player:notify("Yeah, right... you wish.");
                    return;
                    elseif ($command_utils:player_match_failed(who = $string_utils:match_player(whostr), whostr))
                    return;
                    elseif (((whostr != who.name) &amp;&amp; (!(whostr in who.aliases))) &amp;&amp; (whostr != tostr(who)))
                    player:notify(tostr("Must be a full name or an object number:  ", who.name, "(", who, ")"));
                    return;
                    elseif (who == player)
                    player:notify("If you want to toad yourself, you have to do it by hand.");
                    return;
                    endif
                    dobj = who;
                    if (msg = player:toad_victim_msg())
                    notify(who, msg);
                    endif
                    if ($wiz_utils:rename_all_instances(who, "disfunc", "toad_disfunc"))
                    player:notify(tostr(who, ":disfunc renamed."));
                    endif
                    if ($wiz_utils:rename_all_instances(who, "recycle", "toad_recycle"))
                    player:notify(tostr(who, ":recycle renamed."));
                    endif
                    "MOO-specific cleanup while still a player object.";
                    this:toad_cleanup(who);
                    e = $wiz_utils:unset_player(who, $hacker);
                    player:notify(e ? tostr(who.name, "(", who, ") is now a toad.") | tostr(e));
                    if (e &amp;&amp; ($object_utils:isa(who.location, $room) &amp;&amp; (msg = player:toad_msg())))
                    who.location:announce_all_but({who}, msg);
                    endif
                    if (listname &amp;&amp; (!$login:(listname + "ed")(cname = $string_utils:connection_hostname(who.last_connect_place))))
                    $login:(listname + "_add")(cname);
                    player:notify(tostr("Site ", cname, " ", listname, "ed."));
                    else
                    cname = "";
                    endif
                    if (!comment)
                    player:notify("So why is this person being toaded?");
                    comment = $command_utils:read();
                    endif
                    $mail_agent:send_message(player, $toad_log, tostr("@toad ", who.name, " (", who, ")"), {$string_utils:from_list(who.all_connect_places, " "), @cname ? {$string_utils:capitalize(listname + "ed:  ") + cname} | {}, @comment ? {comment} | {}});
                    player:notify(tostr("Mail sent to ", $mail_agent:name($toad_log), "."));
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@untoad @detoad</NAME>
                  <CODE>
                    "@untoad &lt;object&gt; [as namespec]";
                    "Turns object into a player.  Anything that isn't a guest is chowned to itself.";
                    if (!player.wizard)
                    player:notify("Yeah, right... you wish.");
                    elseif (prepstr &amp;&amp; (prepstr != "as"))
                    player:notify(tostr("Usage:  ", verb, " &lt;object&gt; [as name,alias,alias...]"));
                    elseif ($command_utils:object_match_failed(dobj, dobjstr))
                    elseif (prepstr &amp;&amp; (!(e = $building_utils:set_names(dobj, iobjstr))))
                    player:notify(tostr("Initial rename failed:  ", e));
                    elseif (e = $wiz_utils:set_player(dobj, g = $object_utils:isa(dobj, $guest)))
                    player:notify(tostr(dobj.name, "(", dobj, ") is now a ", g ? "usable guest." | "player."));
                    elseif (e == E_INVARG)
                    player:notify(tostr(dobj.name, "(", dobj, ") is not of an appropriate player class."));
                    player:notify("@chparent it to $player or some descendant.");
                    elseif (e == E_NONE)
                    player:notify(tostr(dobj.name, "(", dobj, ") is already a player."));
                    elseif (e == E_NACC)
                    player:notify("Wait until $player_db is finished updating...");
                    elseif (e == E_RECMOVE)
                    player:notify(tostr("The name `", dobj.name, "' is currently unavailable."));
                    player:notify(tostr("Try again with   ", verb, " ", dobj, " as &lt;newname&gt;"));
                    else
                    player:notify(tostr(e));
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="is" IOBJ="any">
                  <NAME>@quota</NAME>
                  <CODE>
                    "@quota &lt;player&gt; is [public] &lt;number&gt; [&lt;reason&gt;]";
                    "  changes a player's quota.  sends mail to the wizards.";
                    if (player != this)
                    return player:notify("Permission denied.");
                    endif
                    set_task_perms(player);
                    dobj = $string_utils:match_player(dobjstr);
                    if ($command_utils:player_match_result(dobj, dobjstr)[1])
                    return;
                    elseif (!valid(dobj))
                    player:notify("Set whose quota?");
                    return;
                    endif
                    if (iobjstr[1..min(7, $)] == "public ")
                    iobjstr[1..7] = "";
                    if ($object_utils:has_property($local, "public_quota_log"))
                    recipients = {$quota_log, $local.public_quota_log};
                    else
                    player:tell("No public quota log.");
                    return E_INVARG;
                    endif
                    else
                    recipients = {$quota_log};
                    endif
                    old = $quota_utils:get_quota(dobj);
                    qstr = iobjstr[1..(n = index(iobjstr + " ", " ")) - 1];
                    new = $code_utils:toint((qstr[1] == "+") ? qstr[2..$] | qstr);
                    reason = iobjstr[n + 1..$] || "(none)";
                    if (typeof(new) != INT)
                    player:notify(tostr("Set ", dobj.name, "'s quota to what?"));
                    return;
                    elseif (qstr[1] == "+")
                    new = old + new;
                    endif
                    result = $quota_utils:set_quota(dobj, new);
                    if (typeof(result) == ERR)
                    player:notify(tostr(result));
                    else
                    player:notify(tostr(dobj.name, "'s quota set to ", new, "."));
                    endif
                    $mail_agent:send_message(player, recipients, tostr("@quota ", dobj.name, " (", dobj, ") ", new, " (from ", old, ")"), tostr("Reason for quota ", ((new - old) &lt; 0) ? "decrease: " | "increase: ", reason, index("?.!", reason[$]) ? "" | "."));
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@players</NAME>
                  <CODE>
                    set_task_perms(player);
                    "The time below is Oct. 1, 1990, roughly the birthdate of the LambdaMOO server.";
                    start = 654768000;
                    now = time();
                    day = (24 * 60) * 60;
                    week = 7 * day;
                    month = 30 * day;
                    days_objects = days_players = {0, 0, 0, 0, 0, 0, 0};
                    weeks_objects = weeks_players = {0, 0, 0, 0};
                    months_objects = months_players = {};
                    nonplayer_objects = invalid_objects = 0;
                    always_objects = always_players = 0;
                    never_objects = never_players = 0;
                    numo = 0;
                    if (argstr)
                    if (((!dobjstr) &amp;&amp; (prepstr == "with")) &amp;&amp; (index("objects", iobjstr) == 1))
                    with_objects = 1;
                    else
                    player:notify(tostr("Usage:  ", verb, " [with objects]"));
                    return;
                    endif
                    else
                    with_objects = 0;
                    players = players();
                    endif
                    for i in [1..with_objects ? toint(max_object()) + 1 | length(players)]
                    if (with_objects)
                    o = toobj(i - 1);
                    else
                    o = players[i];
                    endif
                    if ($command_utils:running_out_of_time())
                    player:notify(tostr("... ", o));
                    suspend(0);
                    endif
                    if (valid(o))
                    numo = numo + 1;
                    p = is_player(o) ? o | o.owner;
                    if (!valid(p))
                    invalid_objects = invalid_objects + 1;
                    elseif (!$object_utils:isa(p, $player))
                    nonplayer_objects = nonplayer_objects + 1;
                    else
                    seconds = now - p.last_connect_time;
                    days = seconds / day;
                    weeks = seconds / week;
                    months = seconds / month;
                    if (seconds &lt; 0)
                    if (is_player(o))
                    always_players = always_players + 1;
                    else
                    always_objects = always_objects + 1;
                    endif
                    elseif (seconds &gt; (now - start))
                    if (is_player(o))
                    never_players = never_players + 1;
                    else
                    never_objects = never_objects + 1;
                    endif
                    elseif (months &gt; 0)
                    while (months &gt; length(months_players))
                    months_players = {@months_players, 0};
                    months_objects = {@months_objects, 0};
                    endwhile
                    if (is_player(o))
                    months_players[months] = months_players[months] + 1;
                    endif
                    months_objects[months] = months_objects[months] + 1;
                    elseif (weeks &gt; 0)
                    if (is_player(o))
                    weeks_players[weeks] = weeks_players[weeks] + 1;
                    endif
                    weeks_objects[weeks] = weeks_objects[weeks] + 1;
                    else
                    if (is_player(o))
                    days_players[days + 1] = days_players[days + 1] + 1;
                    endif
                    days_objects[days + 1] = days_objects[days + 1] + 1;
                    endif
                    endif
                    endif
                    endfor
                    player:notify("");
                    player:notify(tostr("Last connected"));
                    player:notify(tostr("at least this     Num.     Cumul.   Cumul. %", with_objects ? "     Num.     Cumul.   Cumul. %" | ""));
                    player:notify(tostr("long ago        players   players   players ", with_objects ? "   objects   objects   objects" | ""));
                    player:notify(tostr("---------------------------------------------", with_objects ? "--------------------------------" | ""));
                    su = $string_utils;
                    col1 = 14;
                    col2 = 7;
                    col3 = 10;
                    col4 = 9;
                    col5 = 11;
                    col6 = 11;
                    col7 = 10;
                    nump = length(players());
                    totalp = totalo = 0;
                    for x in ({{days_players, days_objects, "day", 1}, {weeks_players, weeks_objects, "week", 0}, {months_players, months_objects, "month", 0}})
                    pcounts = x[1];
                    ocounts = x[2];
                    unit = x[3];
                    offset = x[4];
                    for i in [1..length(pcounts)]
                    $command_utils:suspend_if_needed(0);
                    j = i - offset;
                    player:notify(tostr(su:left(tostr(j, " ", unit, (j == 1) ? ":" | "s:"), col1), su:right(pcounts[i], col2), su:right(totalp = totalp + pcounts[i], col3), su:right((totalp * 100) / nump, col4), "%", with_objects ? tostr(su:right(ocounts[i], col5), su:right(totalo = totalo + ocounts[i], col6), su:right((totalo * 100) / numo, col7), "%") | ""));
                    endfor
                    player:notify("");
                    endfor
                    player:notify(tostr(su:left("Never:", col1), su:right(never_players, col2), su:right(totalp = totalp + never_players, col3), su:right((totalp * 100) / nump, col4), "%", with_objects ? tostr(su:right(never_objects, col5), su:right(totalo = totalo + never_objects, col6), su:right((totalo * 100) / numo, col7), "%") | ""));
                    player:notify(tostr(su:left("Always:", col1), su:right(always_players, col2), su:right(totalp = totalp + always_players, col3), su:right((totalp * 100) / nump, col4), "%", with_objects ? tostr(su:right(always_objects, col5), su:right(totalo = totalo + always_objects, col6), su:right((totalo * 100) / numo, col7), "%") | ""));
                    with_objects &amp;&amp; player:notify(tostr(su:left("Non-player owner:", (((col1 + col2) + col3) + col4) + 1), su:right(nonplayer_objects, col5), su:right(totalo = totalo + nonplayer_objects, col6), su:right((totalo * 100) / numo, col7), "%"));
                    with_objects &amp;&amp; player:notify(tostr(su:left("Invalid owner:", (((col1 + col2) + col3) + col4) + 1), su:right(invalid_objects, col5), su:right(totalo = totalo + invalid_objects, col6), su:right((totalo * 100) / numo, col7), "%"));
                    player:notify("");
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>kill_aux_wizard_parse</NAME>
                  <CODE>
                    "Auxiliary verb for parsing @kill soon [#-of-seconds] [player | everyone]";
                    "Args[1] is either # of seconds or player/everyone.";
                    "Args[2], if it exists, is player/everyone, and forces args[1] to have been # of seconds.";
                    "Return value: {# of seconds [default 60] , 1 for all, object for player.}";
                    set_task_perms(caller_perms());
                    nargs = length(args);
                    soon = toint(args[1]);
                    if (nargs &gt; 1)
                    everyone = args[2];
                    elseif (soon &lt;= 0)
                    everyone = args[1];
                    else
                    everyone = 0;
                    endif
                    if (everyone == "everyone")
                    everyone = 1;
                    elseif (typeof(everyone) == STR)
                    result = $string_utils:match_player(everyone);
                    if ($command_utils:player_match_failed(result, everyone))
                    player:notify(tostr("Usage:  ", callers()[1][2], " soon [number of seconds] [\"everyone\" | player name]"));
                    return {-1, -1};
                    else
                    return {soon ? soon | 60, result};
                    endif
                    endif
                    return {soon ? soon | 60, everyone ? everyone | player};
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@grepcore @egrepcore</NAME>
                  <CODE>
                    set_task_perms(player);
                    if (!args)
                    player:notify(tostr("Usage:  ", verb, " &lt;pattern&gt;"));
                    return;
                    endif
                    pattern = argstr;
                    regexp = verb == "@egrepcore";
                    player:notify(tostr("Searching for core verbs ", regexp ? "matching the regular expression " | "containing the string ", toliteral(pattern), " ..."));
                    player:notify("");
                    $code_utils:(regexp ? "find_verbs_matching" | "find_verbs_containing")(pattern, $core_objects());
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@net-who @@who</NAME>
                  <CODE>
                    "@net-who prints all connected users and hosts.";
                    "@net-who player player player prints specified users and current or most recent connected host.";
                    "@net-who from hoststring prints all players who have connected from that host or host substring.  Substring can include *'s, e.g. @net-who from *.foo.edu.";
                    set_task_perms(player);
                    su = $string_utils;
                    if ((prepstr == "from") &amp;&amp; dobjstr)
                    player:notify(tostr("Usage:  ", verb, " from &lt;host string&gt;"));
                    elseif (((prepstr != "from") || dobjstr) || (!iobjstr))
                    "Not parsing 'from' here...  Instead printing connected/recent users.";
                    if (!(pstrs = args))
                    unsorted = connected_players();
                    else
                    unsorted = listdelete($command_utils:player_match_result(su:match_player(pstrs), pstrs), 1);
                    endif
                    if (!unsorted)
                    return;
                    endif
                    $wiz_utils:show_netwho_listing(player, unsorted);
                    else
                    $wiz_utils:show_netwho_from_listing(player, iobjstr);
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@make-player</NAME>
                  <CODE>
                    "Creates a player.";
                    "Syntax:  @make-player name email-address comments....";
                    "Generates a random password for the player.";
                    if ((!player.wizard) || callers())
                    return E_PERM;
                    elseif (!args)
                    player:tell("Syntax:  @make-player name email-address comments....");
                    return;
                    elseif (args[2] == "for")
                    "common mistake: @make-player &lt;name&gt; for &lt;email-address&gt; ...";
                    args = listdelete(args, 2);
                    endif
                    return $wiz_utils:do_make_player(@args);
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@abort-sh*utdown</NAME>
                  <CODE>
                    if (!player.wizard)
                    player:notify("Sorry.");
                    elseif (!$code_utils:task_valid($shutdown_task))
                    player:notify("No server shutdown in progress.");
                    $shutdown_task = E_NONE;
                    else
                    "... Reset time so that $login:check_for_shutdown shuts up...";
                    kill_task($shutdown_task);
                    $shutdown_task = E_NONE;
                    $shutdown_time = time() - 1;
                    for p in (connected_players())
                    notify(p, tostr("*** Server shutdown ABORTED by ", player.name, " (", player, ")", argstr &amp;&amp; (":  " + argstr), " ***"));
                    endfor
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>toad_msg toad_victim_msg programmer_msg programmer_victim_msg newt_msg newt_victim_msg</NAME>
                  <CODE>
                    "This is the canonical doing-something-to-somebody message.";
                    "The corresponding property can either be";
                    "   string             msg for all occasions";
                    "   list of 2 strings  {we-are-there-msg,we-are-elsewhere-msg}";
                    m = this.(verb);
                    if (typeof(m) != LIST)
                    return $string_utils:pronoun_sub(m);
                    elseif ((this.location == dobj.location) || (length(m) &lt; 2))
                    return $string_utils:pronoun_sub(m[1]);
                    else
                    return $string_utils:pronoun_sub(m[2]);
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>moveto</NAME>
                  <CODE>
                    set_task_perms((caller in {this, $generic_editor, $verb_editor, $mail_editor, $note_editor}) ? this.owner | caller_perms());
                    return `move(this, args[1]) ! ANY';
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@newt</NAME>
                  <CODE>
                    "@newt &lt;player&gt; [commentary]";
                    "turns a player into a newt.  It can get better...";
                    "adds player to $login.newted, they will not be allowed to log in.";
                    "Sends mail to $newt_log giving .all_connect_places and commentary.";
                    whostr = args[1];
                    comment = $string_utils:first_word(argstr)[2];
                    if (!player.wizard)
                    player:notify("Yeah, right.");
                    elseif ($command_utils:player_match_failed(who = $string_utils:match_player(whostr), whostr))
                    return;
                    elseif (((whostr != who.name) &amp;&amp; (!(whostr in who.aliases))) &amp;&amp; (whostr != tostr(who)))
                    player:notify(tostr("Must be a full name or an object number:  ", who.name, "(", who, ")"));
                    return;
                    elseif (who == player)
                    player:notify("If you want to newt yourself, you have to do it by hand.");
                    return;
                    elseif (who in $login.newted)
                    player:notify(tostr(who.name, " appears to already be a newt."));
                    return;
                    else
                    $wiz_utils:newt_player(who, comment);
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@unnewt @denewt @get-better</NAME>
                  <CODE>
                    "@denewt &lt;player&gt; [commentary]";
                    "Remove the player from $Login.newted";
                    "Sends mail to $newt_log with commentary.";
                    whostr = args[1];
                    comment = $string_utils:first_word(argstr)[2];
                    if (!player.wizard)
                    player:notify("Yeah, right.");
                    elseif ($command_utils:player_match_failed(who = $string_utils:match_player(whostr), whostr))
                    return;
                    else
                    "Should parse email address and register user in some clever way.  Ick.";
                    if (!(who in $login.newted))
                    player:notify(tostr(who.name, " does not appear to be a newt."));
                    else
                    $login.newted = setremove($login.newted, who);
                    if (entry = $list_utils:assoc(who, $login.temporary_newts))
                    $login.temporary_newts = setremove($login.temporary_newts, entry);
                    endif
                    player:notify(tostr(who.name, " (", who, ") got better."));
                    $mail_agent:send_message(player, $newt_log, tostr("@denewt ", who.name, " (", who, ")"), comment ? {comment} | {});
                    endif
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@register</NAME>
                  <CODE>
                    "Registers a player.";
                    "Syntax:  @register name email-address [additional commentary]";
                    "Email-address is stored in $registration_db and on the player object.";
                    if (!player.wizard)
                    return player:tell(E_PERM);
                    endif
                    $wiz_utils:do_register(@args);
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="is" IOBJ="any">
                  <NAME>@new-password @newpassword</NAME>
                  <CODE>
                    "@newpassword player is [string]";
                    "Set's a player's password; omit string to have one randomly generated.";
                    "Offer to email the password.";
                    if (!player.wizard)
                    return E_PERM;
                    elseif ($command_utils:player_match_failed(dobj = $string_utils:match_player(dobjstr), dobjstr))
                    return;
                    elseif (!(dobjstr in {@dobj.aliases, tostr(dobj)}))
                    player:notify(tostr("Must be a full name or an object number: ", dobj.name, " (", dobj, ")"));
                    else
                    $wiz_utils:do_new_password(dobj, iobjstr);
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@log</NAME>
                  <CODE>
                    "@log [&lt;string&gt;]    enters a comment in the server log.";
                    "If no string is given, you are prompted to enter one or more lines for an extended comment.";
                    set_task_perms(player);
                    whostr = tostr("from ", player.name, " (", player, ")");
                    if ((!player.wizard) || (player != caller))
                    player:notify("Yeah, right.");
                    elseif (argstr)
                    server_log(tostr("COMMENT: [", whostr, "]  ", argstr));
                    player:notify("One-line comment logged.");
                    elseif (lines = $command_utils:read_lines())
                    server_log(tostr("COMMENT: [", whostr, "]"));
                    for l in (lines)
                    server_log(l);
                    endfor
                    server_log(tostr("END_COMMENT."));
                    player:notify(tostr(length(lines), " lines logged as extended comment."));
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
                  <NAME>@guests</NAME>
                  <CODE>
                    set_task_perms(player);
                    n = (dobjstr == "all") ? 0 | $code_utils:toint(dobjstr || "20");
                    if (caller != this)
                    player:notify("You lose.");
                    elseif ((n == E_TYPE) &amp;&amp; (index("now", dobjstr) != 1))
                    player:notify(tostr("Usage:  ", verb, " &lt;number&gt;  (where &lt;number&gt; indicates how many entries to look at in the guest log)"));
                    player:notify(tostr("Usage:  ", verb, " now (to see information about currently connected guests only)"));
                    elseif ((!dobjstr) || (index("now", dobjstr) != 1))
                    $guest_log:last(n);
                    else
                    "*way* too much copied code in here from @who...  Sorry.  --yduJ";
                    su = $string_utils;
                    conn = connected_players();
                    unsorted = {};
                    for g in ($object_utils:leaves($guest))
                    if (g in conn)
                    unsorted = {@unsorted, g};
                    endif
                    endfor
                    if (!unsorted)
                    player:tell("No guests found.");
                    return;
                    endif
                    footnotes = {};
                    alist = {};
                    nwidth = length("Player name");
                    for u in (unsorted)
                    pref = u.programmer ? "% " | "  ";
                    u.programmer &amp;&amp; (footnotes = setadd(footnotes, "prog"));
                    u3 = {tostr(pref, u.name, " (", u, ")"), su:from_seconds(connected_seconds(u)), su:from_seconds(idle_seconds(u)), where = $string_utils:connection_hostname(connection_name(u))};
                    nwidth = max(length(u3[1]), nwidth);
                    if ($login:blacklisted(where))
                    where = "(*) " + where;
                    footnotes = setadd(footnotes, "black");
                    elseif ($login:graylisted(where))
                    where = "(+) " + where;
                    footnotes = setadd(footnotes, "gray");
                    endif
                    alist = {@alist, u3};
                    $command_utils:suspend_if_needed(0);
                    endfor
                    alist = $list_utils:sort_alist_suspended(0, alist, 3);
                    $command_utils:suspend_if_needed(0);
                    headers = {"Player name", "Connected", "Idle Time", "From Where"};
                    time_width = length("59 minutes") + 2;
                    before = {0, w1 = nwidth + 3, w2 = w1 + time_width, w3 = w2 + time_width};
                    tell1 = "  " + headers[1];
                    tell2 = "  " + su:space(headers[1], "-");
                    for j in [2..4]
                    tell1 = su:left(tell1, before[j]) + headers[j];
                    tell2 = su:left(tell2, before[j]) + su:space(headers[j], "-");
                    endfor
                    player:notify(tell1);
                    player:notify(tell2);
                    active = 0;
                    for a in (alist)
                    $command_utils:suspend_if_needed(0);
                    tell1 = a[1];
                    for j in [2..4]
                    tell1 = su:left(tell1, before[j]) + tostr(a[j]);
                    endfor
                    player:notify(tell1[1..min($, 79)]);
                    endfor
                    if (footnotes)
                    player:notify("");
                    if ("prog" in footnotes)
                    player:notify(" %  == programmer.");
                    endif
                    if ("black" in footnotes)
                    player:notify("(*) == blacklisted site.");
                    endif
                    if ("gray" in footnotes)
                    player:notify("(+) == graylisted site.");
                    endif
                    endif
                    player:tell("@guests display complete.");
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="none" PREP="none" IOBJ="none">
                  <NAME>@rn mail_catch_up check_mail_lists current_message set_current_message get_current_message make_current_message kill_current_message @nn</NAME>
                  <CODE>
                    if (caller != this)
                    set_task_perms(valid(caller_perms()) ? caller_perms() | player);
                    endif
                    use = this.mail_identity;
                    if (valid(use) &amp;&amp; (use != this))
                    return use:(verb)(@args);
                    else
                    return pass(@args);
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@blacklist @graylist @redlist @unblacklist @ungraylist @unredlist @spooflist @unspooflist</NAME>
                  <CODE>
                    "@[un]blacklist [&lt;site or subnet&gt;  [for &lt;duration&gt;] [commentary]]";
                    "@[un]graylist  [&lt;site or subnet&gt;  [for &lt;duration&gt;] [commentary]]";
                    "@[un]redlist   [&lt;site or subnet&gt;  [for &lt;duration&gt;] [commentary]]";
                    "@[un]spooflist [&lt;site of subnet&gt;  [for &lt;duration&gt;] [commentary]]";
                    "The `for &lt;duration&gt;' is for temporary colorlisting a site only. The duration should be in english time units:  for 1 hour, for 1 day 2 hours 15 minutes, etc. The commentary should be after all durations. Note, if you are -not- using a duration, do not start your commentary with the word `for'.";
                    set_task_perms(player);
                    if ((player != this) || (!player.wizard))
                    player:notify("Ummm.  no.");
                    return;
                    endif
                    undo = verb[2..3] == "un";
                    which = $login:listname(verb[undo ? 4 | 2]);
                    downgrade = {"", "graylist", "blacklist"}[1 + index("br", which[1])];
                    if (!(fw = $string_utils:first_word(argstr)))
                    "... Just print the list...";
                    this:display_list(which);
                    return;
                    endif
                    target = fw[1];
                    if (fw[2] &amp;&amp; (parse = this:parse_templist_duration(fw[2]))[1])
                    if ((typeof(parse[3]) == ERR) || (!parse[3]))
                    player:notify(tostr("Could not parse the duration for @", which, "ing site \"", target, "\""));
                    return;
                    endif
                    start = parse[2];
                    duration = parse[3];
                    comment = parse[4] ? {parse[4]} | {};
                    comment = {tostr("for ", $time_utils:english_time(duration)), @comment};
                    elseif (fw[2])
                    comment = fw[2];
                    else
                    "Get the right vars set up as though parse had been called";
                    parse = {0, ""};
                    comment = {};
                    endif
                    if (is_literal = $site_db:domain_literal(target))
                    if (target[$] == ".")
                    target = target[1..$ - 1];
                    endif
                    fullname = "subnet " + target;
                    else
                    if (target[1] == ".")
                    target[1..1] = "";
                    endif
                    fullname = ("domain `" + target) + "'";
                    endif
                    entrylist = $login.(which)[1 + (!is_literal)];
                    if ((!undo) &amp;&amp; (target in entrylist))
                    player:notify(tostr(fullname, " is already ", which, "ed."));
                    return;
                    endif
                    entrylist = setremove(entrylist, target);
                    if (!(result = this:check_site_entries(undo, which, target, is_literal, entrylist))[1])
                    return;
                    endif
                    rm = result[2];
                    namelist = $string_utils:english_list(rm);
                    downgraded = {};
                    if (rm)
                    ntries = (length(rm) == 1) ? "ntry" | "ntries";
                    if ($command_utils:yes_or_no(tostr("Remove e", ntries, " for ", namelist, "?")))
                    dg = undo &amp;&amp; (downgrade &amp;&amp; $command_utils:yes_or_no(downgrade + " them?"));
                    for s in (rm)
                    $login:(which + "_remove")(s);
                    dg &amp;&amp; ($login:(downgrade + "_add")(s) &amp;&amp; (downgraded = {@downgraded, s}));
                    endfor
                    player:notify(tostr("E", ntries, " removed", @dg ? {" and ", downgrade, "ed."} | {"."}));
                    else
                    player:notify(tostr(namelist, " will continue to be ", which, "ed."));
                    rm = {};
                    endif
                    endif
                    if (downgraded)
                    comment[1..0] = {tostr(downgrade, "ed ", $string_utils:english_list(downgraded), ".")};
                    endif
                    tempentrylist = $login.("temporary_" + which)[1 + (!is_literal)];
                    if ((!undo) &amp;&amp; (target in $list_utils:slice(tempentrylist)))
                    player:notify(tostr(fullname, " is already temporarily ", which, "ed."));
                    return;
                    endif
                    if (en = $list_utils:assoc(target, tempentrylist))
                    tempentrylist = setremove(tempentrylist, en);
                    endif
                    if (!(result = this:check_site_entries(undo, which, target, is_literal, $list_utils:slice(tempentrylist)))[1])
                    return;
                    endif
                    rmtemp = result[2];
                    tempnamelist = $string_utils:english_list(rmtemp);
                    tempdowngraded = {};
                    if (rmtemp)
                    ntries = (length(rmtemp) == 1) ? "ntry" | "ntries";
                    if ($command_utils:yes_or_no(tostr("Remove e", ntries, " for ", tempnamelist, "?")))
                    dg = undo &amp;&amp; (downgrade &amp;&amp; $command_utils:yes_or_no(downgrade + " them?"));
                    for s in (rmtemp)
                    old = $list_utils:assoc(s, tempentrylist);
                    $login:(which + "_remove_temp")(s);
                    dg &amp;&amp; ($login:(downgrade + "_add_temp")(s, old[2], old[3]) &amp;&amp; (tempdowngraded = {@tempdowngraded, s}));
                    endfor
                    player:notify(tostr("E", ntries, " removed", @dg ? {" and ", downgrade, "ed with durations transferred."} | {"."}));
                    else
                    player:notify(tostr(tempnamelist, " will continue to be temporarily ", which, "ed."));
                    rmtemp = {};
                    endif
                    endif
                    if (tempdowngraded)
                    comment[1..0] = {tostr(downgrade, "ed ", $string_utils:english_list(tempdowngraded), ".")};
                    endif
                    if (!undo)
                    if (parse[1])
                    $login:(which + "_add_temp")(target, start, duration);
                    player:notify(tostr(fullname, " ", which, "ed for ", $time_utils:english_time(duration)));
                    else
                    $login:(which + "_add")(target);
                    player:notify(tostr(fullname, " ", which, "ed."));
                    endif
                    if (rm)
                    comment[1..0] = {tostr("Subsumes ", which, "ing for ", namelist, ".")};
                    endif
                    if (rmtemp)
                    comment[1..0] = {tostr("Subsumes temporary ", which, "ing for ", tempnamelist, ".")};
                    endif
                    elseif ($login:(which + "_remove")(target))
                    player:notify(tostr(fullname, " un", which, "ed."));
                    if (!downgrade)
                    elseif ($command_utils:yes_or_no(downgrade + " it?"))
                    $login:(downgrade + "_add")(target) &amp;&amp; (downgraded = {target, @downgraded});
                    player:notify(tostr(fullname, " ", downgrade, "ed."));
                    else
                    player:notify(tostr(fullname, " not ", downgrade, "ed."));
                    endif
                    if (downgraded)
                    comment[1..0] = {tostr(downgrade, "ed ", $string_utils:english_list(downgraded), ".")};
                    endif
                    if (rm)
                    comment[1..0] = {tostr("Also removed ", namelist, ".")};
                    endif
                    elseif ((old = $list_utils:assoc(target, $login.("temporary_" + which)[1 + (!is_literal)])) &amp;&amp; $login:(which + "_remove_temp")(target))
                    player:notify(tostr(fullname, " un", which, "ed."));
                    if (!downgrade)
                    elseif ($command_utils:yes_or_no(downgrade + " it?"))
                    $login:(downgrade + "_add_temp")(target, old[2], old[3]) &amp;&amp; (tempdowngraded = {target, @tempdowngraded});
                    player:notify(tostr(fullname, " ", downgrade, "ed, currently for ", $time_utils:english_time(old[3]), " from ", $time_utils:time_sub("$1/$3", old[2])));
                    else
                    player:notify(tostr(fullname, " not ", downgrade, "ed."));
                    endif
                    if (tempdowngraded)
                    comment[1..0] = {tostr(downgrade, "ed ", $string_utils:english_list(tempdowngraded), "with durations transferred.")};
                    endif
                    if (rmtemp)
                    comment[1..0] = {tostr("Also removed ", tempnamelist, ".")};
                    endif
                    elseif (rm || rmtemp)
                    player:notify(tostr(fullname, " itself was never actually ", which, "ed."));
                    comment[1..0] = {tostr("Removed ", namelist, " from regular and ", tempnamelist, " from temporary.")};
                    else
                    player:notify(tostr(fullname, " was not ", which, "ed before."));
                    return;
                    endif
                    subject = tostr(undo ? "@un" | "@", which, " ", fullname);
                    $mail_agent:send_message(player, $site_log, subject, comment);
                    "...";
                    "... make sure we haven't screwed ourselves...";
                    uhoh = {};
                    for site in (player.all_connect_places)
                    if (index(site, target) &amp;&amp; $login:(which + "ed")(site))
                    uhoh = {@uhoh, site};
                    endif
                    endfor
                    if (uhoh)
                    player:notify(tostr("WARNING:  ", $string_utils:english_list(uhoh), " are now ", which, "ed!"));
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="as" IOBJ="any">
                  <NAME>@corify</NAME>
                  <CODE>
                    "Usage:  @corify &lt;object&gt; as &lt;propname&gt;";
                    "Adds &lt;object&gt; to the core, as $&lt;propname&gt;";
                    "Reminds the wizard to write an :init_for_core verb, if there isn't one already.";
                    if (!player.wizard)
                    player:tell("Sorry, the core is wizardly territory.");
                    return;
                    endif
                    if (dobj == $failed_match)
                    dobj = player:my_match_object(dobjstr);
                    endif
                    if ($command_utils:object_match_failed(dobj, dobjstr))
                    return;
                    endif
                    if (!iobjstr)
                    player:tell("Usage:  @corify &lt;object&gt; as &lt;propname&gt;");
                    return;
                    elseif (iobjstr[1] == "$")
                    iobjstr = iobjstr[2..$];
                    endif
                    try
                    add_property(#0, iobjstr, dobj, {player, "r"});
                    except e (ANY)
                    return player:tell(e[1], ":", e[2]);
                    endtry
                    if (!("init_for_core" in verbs(dobj)))
                    player:tell(dobj:titlec(), " has no :init_for_core verb.  Strongly consider adding one before doing anything else.");
                    else
                    player:tell("Corified ", $string_utils:nn(dobj), " as $", iobjstr, ".");
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="none" IOBJ="none">
                  <NAME>@make-guest</NAME>
                  <CODE>
                    "Usage:  @make-guest &lt;guestname&gt;";
                    "Creates a player called &lt;guestname&gt;_Guest owned by $hacker and a child of $guest. Or, if $local.guest exists, make a child of that, assuming that all other guests are children of it too.";
                    if (!player.wizard)
                    player:tell("If you think this MOO needs more guests, you should contact a wizard.");
                    return E_PERM;
                    endif
                    if (length(args) != 1)
                    player:tell("Usage: ", verb, " &lt;guest name&gt;");
                    return;
                    endif
                    guest_parent = (($object_utils:has_property($local, "guest") &amp;&amp; valid($local.guest)) &amp;&amp; $object_utils:isa($local.guest, $guest)) ? $local.guest | $guest;
                    i = length(children(guest_parent));
                    while (!$player_db:available(guestnum = tostr("Guest", i = i + 1)))
                    endwhile
                    guestname = args[1] + "_Guest";
                    guestaliases = {guestname, adj = args[1], guestnum};
                    if (!player.wizard)
                    return;
                    elseif ($player_db.frozen)
                    player:tell("Sorry, the player db is frozen, so no players can be made right now.  Please try again in a few minutes.");
                    return;
                    elseif (!$player_db:available(guestname))
                    player:tell("\"", guestname, "\" is not an available name.");
                    return;
                    elseif (!$player_db:available(adj))
                    player:Tell("\"", adj, "\" is not an available name.");
                    return;
                    else
                    new = $quota_utils:bi_create(guest_parent, $hacker);
                    new:set_name(guestname);
                    new:set_aliases(guestaliases);
                    if (!(e = $wiz_utils:set_player(new, 1)))
                    player:Tell("Unable to make ", new.name, " (", new, ") a player.");
                    player:Tell(tostr(e));
                    else
                    player:Tell("Guest: ", new.name, " (", new, ") made.");
                    new.default_description = {"By definition, guests appear nondescript."};
                    new.description = new.default_description;
                    new.last_connect_time = $maxint;
                    new.last_disconnect_time = time();
                    new.password = 0;
                    new.size_quota = new.size_quota;
                    new:set_gender(new.default_gender);
                    move(new, $player_start);
                    player:tell("Now don't forget to @describe ", new, " as something.");
                    endif
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="for/about" IOBJ="any">
                  <NAME>@temp-newt</NAME>
                  <CODE>
                    if (!player.wizard)
                    return player:tell("Permission denied.");
                    elseif (!valid(who = $string_utils:match_player(dobjstr)))
                    return $command_utils:player_match_failed(who, dobjstr);
                    elseif (((dobjstr != who.name) &amp;&amp; (!(dobjstr in who.aliases))) &amp;&amp; (dobjstr != tostr(who)))
                    return player:tell(tostr("Must be a full name or an object number:  ", who.name, "(", who, ")"));
                    elseif (who == player)
                    player:notify("If you want to newt yourself, you have to do it by hand.");
                    return;
                    elseif (!(howlong = $time_utils:parse_english_time_interval(iobjstr)))
                    return player:tell("Can't parse time: ", howlong);
                    else
                    if (who in $login.newted)
                    player:notify(tostr(who.name, " appears to already be a newt."));
                    else
                    $wiz_utils:newt_player(who, "", ("For " + iobjstr) + ".  ");
                    endif
                    if (index = $list_utils:iassoc(who, $login.temporary_newts))
                    $login.temporary_newts[index][2] = time();
                    $login.temporary_newts[index][3] = howlong;
                    else
                    $login.temporary_newts = {@$login.temporary_newts, {who, time(), howlong}};
                    endif
                    player:tell(who.name, " (", who, ") will be a newt until ", ctime(time() + howlong));
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@deprog*rammer</NAME>
                  <CODE>
                    "@deprogrammer victim [for &lt;duration&gt;] [reason]";
                    "";
                    "Removes the prog-bit from victim.  If a duration is specified (see help $time_utils:parse_english_time_interval), then the victim is put into the temporary list. He will be automatically removed the first time he asks for a progbit after the duration expires.  Either with or without the duration you can specify a reason, or you will be prompted for one. However, if you don't have a duration, don't start the reason with the word `For'.";
                    set_task_perms(player);
                    if ((player != this) || (!player.wizard))
                    player:notify("No go.");
                    return;
                    endif
                    if (!args)
                    player:notify(tostr("Usage:  ", verb, " &lt;playername&gt; [for &lt;duration&gt;] [reason]"));
                    endif
                    fw = $string_utils:first_word(argstr);
                    if (fw[2] &amp;&amp; (parse = this:parse_templist_duration(fw[2]))[1])
                    if ((typeof(parse[3]) == ERR) || (!parse[3]))
                    player:notify(tostr("Could not parse the duration for restricting programming for ", fw[1], "."));
                    return;
                    endif
                    start = parse[2];
                    duration = parse[3];
                    reason = parse[4] ? {parse[4]} | {};
                    else
                    start = duration = 0;
                    reason = fw[2] ? {fw[2]} | {};
                    endif
                    if (!reason)
                    reason = {$command_utils:read("reason for resetting programmer flag")};
                    endif
                    if (duration)
                    reason = {tostr("for ", $time_utils:english_time(duration)), @reason};
                    endif
                    if ($command_utils:player_match_failed(victim = $string_utils:match_player(fw[1]), fw[1]))
                    "...done...";
                    elseif (result = $wiz_utils:unset_programmer(victim, reason, @start ? {start, duration} | {}))
                    player:notify(tostr(victim.name, " (", victim, ") is no longer a programmer.", duration ? tostr("  This restriction will be lifted in ", $string_utils:from_seconds(duration), ".") | ""));
                    elseif (result == E_NONE)
                    player:notify(tostr(victim.name, " (", victim, ") was already a nonprogrammer..."));
                    else
                    player:notify(tostr(result));
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>display_list</NAME>
                  <CODE>
                    if ((caller != this) &amp;&amp; (!caller_perms().wizard))
                    return E_PERM;
                    endif
                    which = args[1];
                    slist = {};
                    if (s = $login.(which)[1])
                    slist = {@slist, "--- Subnets ---", @s};
                    endif
                    if (s = $login.(which)[2])
                    slist = {@slist, "--- Domains ---", @s};
                    endif
                    if (s = $login.("temporary_" + which)[1])
                    slist = {@slist, "--- Temporary Subnets ---"};
                    for d in (s)
                    slist = {@slist, tostr(d[1], " until ", $time_utils:time_sub("$1/$3 $H:$M", d[2] + d[3]))};
                    $command_utils:suspend_if_needed(2);
                    endfor
                    endif
                    if (s = $login.("temporary_" + which)[2])
                    slist = {@slist, "--- Temporary Domains ---"};
                    for d in (s)
                    slist = {@slist, tostr(d[1], " until ", $time_utils:time_sub("$1/$3 $H:$M", d[2] + d[3]))};
                    $command_utils:suspend_if_needed(2);
                    endfor
                    endif
                    if (slist)
                    player:notify_lines($string_utils:columnize(slist, 2));
                    else
                    player:notify(tostr("The ", which, " is empty."));
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>parse_templist_duration</NAME>
                  <CODE>
                    "parses out the time interval at the beginning of the args[1], assumes rest is commentary.";
                    if ((fw = $string_utils:first_word(args[1]))[1] == "for")
                    words = $string_utils:words(fw[2]);
                    try_ = {};
                    ind = cont = 1;
                    while (cont)
                    word = words[ind];
                    cont = ind;
                    if (toint(word))
                    try_ = {@try_, word};
                    ind = ind + 1;
                    else
                    for set in ($time_utils.time_units)
                    if (word in set)
                    try_ = {@try_, word};
                    ind = ind + 1;
                    endif
                    endfor
                    endif
                    if ((cont == ind) || (ind &gt; length(words)))
                    cont = 0;
                    endif
                    endwhile
                    dur = $time_utils:parse_english_time_interval(@try_);
                    rest = $string_utils:from_list(words[ind..$], " ");
                    return {1, time(), dur, rest};
                    else
                    return {0, argstr};
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>check_site_entries</NAME>
                  <CODE>
                    "Called by @[un]&lt;color&gt;list to check existence of the target site.";
                    "=&gt; {done okay, LIST of sites to remove}";
                    if (caller != this)
                    return E_PERM;
                    endif
                    {undo, which, target, is_literal, entrylist} = args;
                    rm = {};
                    confirm = 0;
                    if (is_literal)
                    for s in (entrylist)
                    if ((i = index(s, target + ".")) == 1)
                    "... target is a prefix of s, s should probably go...";
                    rm = {@rm, s};
                    elseif (index(target + ".", s + ".") != 1)
                    "... s is not a prefix of target...";
                    elseif (undo)
                    player:notify(tostr("You will need to un", which, " subnet ", s, " as well."));
                    elseif (confirm)
                    player:notify(tostr("...Subnet ", s, " already ", which, "ed..."));
                    else
                    player:notify(tostr("Subnet ", s, " already ", which, "ed."));
                    if (!(confirm = $command_utils:yes_or_no(tostr(which, " ", target, " anyway?"))))
                    return {0, {}};
                    endif
                    endif
                    endfor
                    else
                    for s in (entrylist)
                    if ((i = rindex(s, "." + target)) &amp;&amp; (i == (length(s) - length(target))))
                    "... target is a suffix of s, s should probably go...";
                    rm = {@rm, s};
                    elseif ((!(i = rindex("." + target, "." + s))) || (i &lt; ((length(target) - length(s)) + 1)))
                    "... s is not a suffix of target...";
                    elseif (undo)
                    player:notify(tostr("You will need to un", which, " domain `", s, "' as well."));
                    elseif (confirm)
                    player:notify(tostr("...Domain `", s, "' already ", which, "ed..."));
                    else
                    player:notify(tostr("Domain `", s, "' already ", which, "ed."));
                    if (!(confirm = $command_utils:yes_or_no(tostr(which, " ", target, " anyway?"))))
                    return {0, {}};
                    endif
                    endif
                    endfor
                    endif
                    return {1, rm};
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>@lock-login @unlock-login @lock-login!</NAME>
                  <CODE>
                    "Syntax:  @lock-login &lt;message&gt;";
                    "         @lock-login! &lt;message&gt;";
                    "         @unlock-login";
                    "";
                    "The @lock-login calls prevent all non-wizard users from logging in, displaying &lt;message&gt; to them when they try.  (The second syntax, with @lock-login!, additionally boots any nonwizards who are already connected.)  @unlock-login turns this off.";
                    if (caller != this)
                    raise(E_PERM);
                    elseif (verb[2] == "u")
                    $no_connect_message = 0;
                    player:notify("Login restrictions removed.");
                    elseif (!argstr)
                    player:notify("You must provide some message to display to users who attempt to login:  @lock-login &lt;message&gt;");
                    else
                    $no_connect_message = argstr;
                    player:notify(tostr("Logins are now blocked for non-wizard players.  Message displayed when attempted:  ", $no_connect_message));
                    if (verb == "@lock-login!")
                    wizards = $wiz_utils:all_wizards_unadvertised();
                    for x in (connected_players())
                    if (!(x in wizards))
                    boot_player(x);
                    endif
                    endfor
                    player:notify("All nonwizards have been booted.");
                    endif
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>__fix</NAME>
                  <CODE>
                    "...was on $player, now archived here for posterity...";
                    "Runs the old-&gt;new format conversion on every message in this.messages.";
                    " =&gt; 1 if successful";
                    " =&gt; 0 if anything toward happened during a suspension";
                    "      (e.g., new message received, someone deleted stuff) ";
                    "      in which case this.messages is left as if this routine were never run.";
                    if (!$perm_utils:controls(caller_perms(), this))
                    return E_PERM;
                    endif
                    msgs = {};
                    i = 1;
                    for m in (oldmsgs = this.messages)
                    msgs = {@msgs, {m[1], $mail_agent:__convert_new(@m[2])}};
                    if ($command_utils:running_out_of_time())
                    player:notify(tostr("...", i, " ", this));
                    suspend(0);
                    if (oldmsgs != this.messages)
                    return 0;
                    endif
                    endif
                    i = i + 1;
                    endfor
                    this.messages = msgs;
                    return 1;
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>toad_cleanup</NAME>
                  <CODE>
                    if ((!player.wizard) || (caller != this))
                    raise(E_PERM);
                    endif
                    "Noop. Placeholder verb for MOO-specific cleanups.";
                  </CODE>
                </VERB>
                <OBJECT ID="obj2" FLAGS="wizard programmer player" OWNER="obj2" LOCATION="obj15">
                  <NAME>Wizard</NAME>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>newt_victim_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>newt_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>public_identity</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>programmer_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>programmer_victim_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>toad_victim_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>toad_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c">
                    <NAME>mail_identity</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>advertised</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>eval_subs</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>eval_ticks</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>eval_env</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>prog_options</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>build_options</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>at_room_width</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>at_number</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>join_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>object_port_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>victim_port_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>thing_arrive_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>othing_port_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>thing_port_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>player_arrive_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>oplayer_port_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>player_port_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>self_arrive_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>oself_port_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>self_port_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>rooms</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>refused_origins</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>refused_extra</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>default_refusal_time</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>report_refusal</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>refused_actions</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>refused_until</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>page_refused</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>page_refused_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>whisper_refused_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>mail_refused_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>spurned_objects</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>_mail_task</NAME>
                    <VALUE>1141650456</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c">
                    <NAME>messages_going</NAME>
                    <VALUE>{}</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>mail_lists</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="r">
                    <NAME>mail_notify</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>mail_forward</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>mail_options</NAME>
                    <VALUE>{}</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>message_keep_date</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>messages_kept</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c">
                    <NAME>current_message</NAME>
                    <VALUE>{0, 0, {#61, 0, 919120149}, {#17, 0, 0}, {#29, 0, 0}, {#34, 0, 0}, {#70, 0, 0}}</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c">
                    <NAME>messages</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>features</NAME>
                    <VALUE>{#91, #90}</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" >
                    <NAME>previous_connection</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" >
                    <NAME>email_address</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="r">
                    <NAME>last_disconnect_time</NAME>
                    <VALUE>923782101</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>help</NAME>
                    <VALUE>0</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>more_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>linetask</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>linesleft</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" >
                    <NAME>linebuffer</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>pagelen</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="r">
                    <NAME>owned_objects</NAME>
                    <VALUE>{#0, #1, #2, #3, #4, #5, #6, #7, #8, #9, #10, #11, #12, #15, #20, #21, #24, #29, #34, #40, #42, #52, #53, #54, #56, #57, #58, #70, #72, #75, #87, #88, #78, #82, #86}</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>linelen</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c">
                    <NAME>current_folder</NAME>
                    <VALUE>#2</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" >
                    <NAME>all_connect_places</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" >
                    <NAME>last_connect_place</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>dict</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>brief</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c">
                    <NAME>lines</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>page_absent_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>pq</NAME>
                    <VALUE>"its"</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>pqc</NAME>
                    <VALUE>"Its"</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>page_origin_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>page_echo_msg</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>edit_options</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="r">
                    <NAME>last_connect_time</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" >
                    <NAME>ownership_quota</NAME>
                    <VALUE>-10000</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>gender</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>prc</NAME>
                    <VALUE>"Itself"</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>ppc</NAME>
                    <VALUE>"Its"</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>poc</NAME>
                    <VALUE>"It"</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>psc</NAME>
                    <VALUE>"It"</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>pr</NAME>
                    <VALUE>"itself"</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>pp</NAME>
                    <VALUE>"its"</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>po</NAME>
                    <VALUE>"it"</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>ps</NAME>
                    <VALUE>"it"</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>home</NAME>
                    <VALUE>#62</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" >
                    <NAME>password</NAME>
                    <VALUE>0</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>gaglist</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>paranoid</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>display_options</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>verb_subs</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="r">
                    <NAME>first_connect_time</NAME>
                    <VALUE>2147483647</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" >
                    <NAME>size_quota</NAME>
                    <VALUE>{1000000, 744746, 919123664, 1}</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" >
                    <NAME>last_password_time</NAME>
                    <VALUE>0</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" >
                    <NAME>last_connect_attempt</NAME>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c">
                    <NAME>key</NAME>
                    <VALUE>0</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="r">
                    <NAME>aliases</NAME>
                    <VALUE>{"Wizard"}</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj2" PERMS="c r">
                    <NAME>description</NAME>
                    <VALUE>""</VALUE>
                  </PROPERTY>
                  <PROPERTY OWNER="obj36" PERMS="r">
                    <NAME>object_size</NAME>
                    <VALUE>{5462, 919123664}</VALUE>
                  </PROPERTY>
                </OBJECT>
              </OBJECT>
              <OBJECT ID="obj71" FLAGS="r programmer player" OWNER="obj71" LOCATION="obj-1">
                <NAME>housekeeper</NAME>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>recycle_bins</NAME>
                  <VALUE>{}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>owners</NAME>
                  <VALUE>{#2}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>cleaning</NAME>
                  <VALUE>#-1</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>litter</NAME>
                  <VALUE>{}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>eschews</NAME>
                  <VALUE>{}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>public_places</NAME>
                  <VALUE>{}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>task</NAME>
                  <VALUE>0</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>requestors</NAME>
                  <VALUE>{}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>destination</NAME>
                  <VALUE>{}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="r">
                  <NAME>clean</NAME>
                  <VALUE>{}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>testing</NAME>
                  <VALUE>0</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="r">
                  <NAME>player_queue</NAME>
                  <VALUE>{}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>take_away_msg</NAME>
                  <VALUE>"%[tpsc] arrives to cart %n off to bed."</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>drop_off_msg</NAME>
                  <VALUE>"%[tpsc] arrives to drop off %n, who is sound asleep."</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="r">
                  <NAME>move_player_task</NAME>
                  <VALUE>52319183</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>moveto_task</NAME>
                  <VALUE>302592506</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>cleaning_index</NAME>
                  <VALUE>0</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>eval_subs</NAME>
                  <VALUE>{}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>eval_ticks</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>eval_env</NAME>
                  <VALUE>"here=player.location;me=player"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>prog_options</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>build_options</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>at_room_width</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>at_number</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>join_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>object_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>victim_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>thing_arrive_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>othing_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>thing_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>player_arrive_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>oplayer_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>player_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>self_arrive_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>oself_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>self_port_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>rooms</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>refused_origins</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>refused_extra</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>default_refusal_time</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>report_refusal</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>refused_actions</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>refused_until</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>page_refused</NAME>
                  <VALUE>0</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>page_refused_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>whisper_refused_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>mail_refused_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>spurned_objects</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>_mail_task</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c">
                  <NAME>messages_going</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>mail_lists</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>mail_notify</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>mail_forward</NAME>
                  <VALUE>{#2}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>mail_options</NAME>
                  <VALUE>{}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>message_keep_date</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>messages_kept</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c">
                  <NAME>current_message</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c">
                  <NAME>messages</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>features</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>previous_connection</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>email_address</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>last_disconnect_time</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>help</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>more_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>linetask</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>linesleft</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" >
                  <NAME>linebuffer</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>pagelen</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>owned_objects</NAME>
                  <VALUE>{#71}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>linelen</NAME>
                  <VALUE>-80</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c">
                  <NAME>current_folder</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>all_connect_places</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>last_connect_place</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>dict</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>brief</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c">
                  <NAME>lines</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>page_absent_msg</NAME>
                  <VALUE>"The housekeeper is too busy putting away all of the junk all over LambdaMoo that there isn't time to listen to pages and stuff like that so your page isn't listened to, too bad."</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>pq</NAME>
                  <VALUE>"the housekeeper's"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>pqc</NAME>
                  <VALUE>"The housekeeper's"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>page_origin_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>page_echo_msg</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>edit_options</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>last_connect_time</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj36" >
                  <NAME>ownership_quota</NAME>
                  <VALUE>-9993</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>gender</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>prc</NAME>
                  <VALUE>"'Self"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>ppc</NAME>
                  <VALUE>"The housekeeper's"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>poc</NAME>
                  <VALUE>"The housekeeper"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>psc</NAME>
                  <VALUE>"The housekeeper"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>pr</NAME>
                  <VALUE>"'self"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>pp</NAME>
                  <VALUE>"the housekeeper's"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>po</NAME>
                  <VALUE>"the housekeeper"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>ps</NAME>
                  <VALUE>"the housekeeper"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>home</NAME>
                  <VALUE>#62</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>password</NAME>
                  <VALUE>"Impossible password to type"</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>gaglist</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>paranoid</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>display_options</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>verb_subs</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>first_connect_time</NAME>
                  <VALUE>0</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" >
                  <NAME>size_quota</NAME>
                  <VALUE>{100000, 21114, 919123701, 0}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>last_password_time</NAME>
                  <VALUE>0</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj2" >
                  <NAME>last_connect_attempt</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c">
                  <NAME>key</NAME>
                </PROPERTY>
                <PROPERTY OWNER="obj2" PERMS="r">
                  <NAME>aliases</NAME>
                  <VALUE>{"housekeeper"}</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj71" PERMS="c r">
                  <NAME>description</NAME>
                  <VALUE>"A very clean, neat, tidy person who doesn't mind lugging players and their gear all over the place."</VALUE>
                </PROPERTY>
                <PROPERTY OWNER="obj36" PERMS="r">
                  <NAME>object_size</NAME>
                  <VALUE>{21114, 919123701}</VALUE>
                </PROPERTY>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>look_self</NAME>
                  <CODE>
                    player:tell_lines(this:description());
                    player:tell($string_utils:pronoun_sub("%S %&lt;is&gt; moving around from room to room, cleaning up.", this));
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>cleanup</NAME>
                  <CODE>
                    "$housekeeper:cleanup([insist]) =&gt; clean up player's objects. Argument is 'up' or 'up!' for manually requested cleanups (notify player differently)";
                    if (caller_perms() != this)
                    return E_PERM;
                    endif
                    for object in (this.clean)
                    x = object in this.clean;
                    if (this.requestors[x] == player)
                    if (result = this:replace(object, @args))
                    player:tell(result, ".");
                    endif
                    endif
                    $command_utils:suspend_if_needed(0);
                    endfor
                    player:tell("The housekeeper has finished cleaning up your objects.");
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>replace</NAME>
                  <CODE>
                    "replace the object given to its proper spot (if there is one).";
                    {object, ?insist = 0} = args;
                    i = object in this.clean;
                    if (!i)
                    return tostr(object, " is not on the ", this.name, "'s cleanup list");
                    endif
                    place = this.destination[i];
                    if (!(($recycler:valid(object) &amp;&amp; ($recycler:valid(place) || (place == #-1))) &amp;&amp; (!(object.location in this.recycle_bins))))
                    "object no longer valid (recycled or something), remove it.";
                    this.clean = listdelete(this.clean, i);
                    this.requestors = listdelete(this.requestors, i);
                    this.destination = listdelete(this.destination, i);
                    return tostr(object) + " is no longer valid, removed from cleaning list";
                    endif
                    oldloc = loc = object.location;
                    if (object.location == place)
                    "already in its place";
                    return "";
                    endif
                    requestor = this.requestors[i];
                    if (insist != "up!")
                    if ($code_utils:verb_or_property(object, "in_use"))
                    return ("Not returning " + object.name) + " because it claims to be in use";
                    endif
                    for thing in (object.contents)
                    if (thing:is_listening())
                    return ((("Not returning " + object.name) + " because ") + thing.name) + " is inside";
                    endif
                    $command_utils:suspend_if_needed(0);
                    endfor
                    if (valid(loc) &amp;&amp; (loc != $limbo))
                    if (loc:is_listening())
                    return ((("Not returning " + object.name) + " because ") + loc.name) + " is holding it";
                    endif
                    for y in (loc:contents())
                    if ((y != object) &amp;&amp; y:is_listening())
                    return (((("Not returning " + object.name) + " because ") + y.name) + " is in ") + loc.name;
                    endif
                    $command_utils:suspend_if_needed(0);
                    endfor
                    endif
                    endif
                    if (valid(place) &amp;&amp; (!place:acceptable(object)))
                    return (place.name + " won't accept ") + object.name;
                    endif
                    try
                    requestor:tell("As you requested, the housekeeper tidies ", $string_utils:nn(object), " from ", $string_utils:nn(loc), " to ", $string_utils:nn(place), ".");
                    if ($object_utils:has_verb(loc, "announce_all_but"))
                    loc:announce_all_but({requestor, object}, "At ", requestor.name, "'s request, the ", this.name, " sneaks in, picks up ", object.name, " and hurries off to put ", ($object_utils:has_property(object, "po") &amp;&amp; (typeof(object.po) == STR)) ? object.po | "it", " away.");
                    endif
                    except (ANY)
                    "Ignore errors";
                    endtry
                    this:moveit(object, place, requestor);
                    if ((loc = object.location) == oldloc)
                    return (object.name + " wouldn't go; ") + ((!place:acceptable(object)) ? (" perhaps " + $string_utils:nn(place)) + " won't let it in" | ((" perhaps " + $string_utils:nn(loc)) + " won't let go of it"));
                    endif
                    try
                    object:tell("The housekeeper puts you away.");
                    if ($object_utils:isa(loc, $room))
                    loc:announce_all_but({object}, "At ", requestor.name, "'s request, the housekeeper sneaks in, deposits ", object:title(), " and leaves.");
                    else
                    loc:tell("You notice the housekeeper sneak in, give you ", object:title(), " and leave.");
                    endif
                    except (ANY)
                    "Ignore errors";
                    endtry
                    return "";
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
                  <NAME>cleanup_list</NAME>
                  <CODE>
                    if (args)
                    if (!valid(who = args[1]))
                    return;
                    endif
                    player:tell(who.name, "'s personal cleanup list:");
                    else
                    who = 0;
                    player:tell("Housekeeper's complete cleanup list:");
                    endif
                    player:tell("------------------------------------------------------------------");
                    printed_anything = 0;
                    objs = this.clean;
                    reqs = this.requestors;
                    dest = this.destination;
                    for i in [1..length(objs)]
                    $command_utils:suspend_if_needed(2);
                    req = reqs[i];
                    ob = objs[i];
                    place = dest[i];
                    if (((who == 0) || (req == who)) || (ob.owner == who))
                    if (!valid(ob))
                    player:tell($string_utils:left(tostr(ob), 7), $string_utils:left("** recycled **", 50), "(", req.name, ")");
                    else
                    player:tell($string_utils:left(tostr(ob), 7), $string_utils:left(ob.name, 26), "=&gt;", $string_utils:left(tostr(place), 7), place.name || "nowhere", " (", req.name, ")");
                    endif
                    printed_anything = 1;
                    endif
                    endfor
                    if (!printed_anything)
                    player:tell("** The housekeeper has nothing in the cleanup list.");
                    endif
                    player:tell("------------------------------------------------------------------");
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="any" PREP="any" IOBJ="any">
                  <NAME>add_cleanup</NAME>
                  <CODE>
                    if (!$perm_utils:controls(caller_perms(), this))
                    return E_PERM;
                    endif
                    {what, ?who = player, ?where = what.location} = args;
                    if ((what &lt; #1) || (!valid(what)))
                    return "invalid object";
                    endif
                    if ($object_utils:isa(who, $guest))
                    return tostr("Guests can't use the ", this.name, ".");
                    endif
                    if (!is_player(who))
                    return tostr("Non-players can't use the ", this.name, ".");
                    endif
                    if (!valid(where))
                    return tostr("The ", this.name, "doesn't know how to find ", where, " in order to put away ", what.name, ".");
                    endif
                    if (is_player(what))
                    return ("The " + this.name) + " doesn't do players, except to cart them home when they fall asleep.";
                    endif
                    for x in (this.eschews)
                    if ($object_utils:isa(what, x[1]))
                    ok = 0;
                    for y in [3..length(x)]
                    if ($object_utils:isa(what, x[y]))
                    ok = 1;
                    endif
                    endfor
                    if (!ok)
                    return tostr("The ", this.name, " doesn't do ", x[2], "!");
                    endif
                    endif
                    endfor
                    if ($object_utils:has_callable_verb(where, "litterp") ? where:litterp(what) | ((where in this.public_places) &amp;&amp; (!(what in where.residents))))
                    return tostr("The ", this.name, " won't litter ", where.name, "!");
                    endif
                    if (i = what in this.clean)
                    if ((!this:controls(i, who)) &amp;&amp; valid(this.destination[i]))
                    return tostr(this.requestors[i].name, " already asked that ", what.name, " be kept at ", this.destination[i].name, "!");
                    endif
                    this.requestors[i] = who;
                    this.destination[i] = where;
                    else
                    this.clean = {what, @this.clean};
                    this.requestors = {who, @this.requestors};
                    this.destination = {where, @this.destination};
                    endif
                    return tostr("The ", this.name, " will keep ", what.name, " (", what, ") at ", valid(where) ? ((where.name + " (") + tostr(where)) + ")" | where, ".");
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
                  <NAME>remove_cleanup</NAME>
                  <CODE>
                    if (!$perm_utils:controls(caller_perms(), this))
                    return E_PERM;
                    endif
                    {what, ?who = player} = args;
                    if (i = what in this.clean)
                    if (!this:controls(i, who))
                    return tostr("You may remove an object from ", this.name, " list only if you own the object, the place it is kept, or if you placed the original cleaning order.");
                    endif
                    this.clean = listdelete(this.clean, i);
                    this.destination = listdelete(this.destination, i);
                    this.requestors = listdelete(this.requestors, i);
                    return tostr(what.name, " (", what, ") removed from cleanup list.");
                    else
                    return tostr(what.name, " not in cleanup list.");
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>controls</NAME>
                  <CODE>
                    "does player control entry I?";
                    {i, who} = args;
                    if ((who in {this.owner, @this.owners}) || who.wizard)
                    return "Yessir.";
                    endif
                    cleanable = this.clean[i];
                    if (this.requestors[i] == who)
                    return "you asked for the previous result, you can change this one.";
                    elseif (((who == cleanable.owner) || (!valid(dest = this.destination[i]))) || (who == dest.owner))
                    return "you own the object or the place where it is being cleaned to, or the destination is no longer valid.";
                    else
                    return "";
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>continuous</NAME>
                  <CODE>
                    "start the housekeeper cleaning continuously. Kill any previous continuous";
                    "task. Not meant to be called interactively.";
                    if (!$perm_utils:controls(caller_perms(), this))
                    return E_PERM;
                    endif
                    if ($code_utils:task_valid(this.task))
                    taskn = this.task;
                    this.task = 0;
                    kill_task(taskn);
                    endif
                    fork taskn (0)
                    while (1)
                    index = 1;
                    while (index &lt; length(this.clean))
                    x = this.clean[index];
                    index = index + 1;
                    try
                    this:replace(x);
                    except id (ANY)
                    endtry
                    suspend(this.testing ? 2 | this:time());
                    endwhile
                    suspend(5);
                    this:litterbug();
                    endwhile
                    endfork
                    this.task = taskn;
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>litterbug</NAME>
                  <CODE>
                    for room in (this.public_places)
                    for thingy in (room.contents)
                    suspend(10);
                    if (((thingy.location == room) &amp;&amp; this:is_litter(thingy)) &amp;&amp; (!this:is_watching(thingy, $nothing)))
                    "if it is litter and no-one is watching";
                    fork (0)
                    this:send_home(thingy);
                    endfork
                    suspend(0);
                    endif
                    endfor
                    endfor
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>is_watching</NAME>
                  <CODE>
                    return valid(thing = args[1]) &amp;&amp; thing:is_listening();
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>send_home</NAME>
                  <CODE>
                    if (caller != this)
                    return E_PERM;
                    endif
                    litter = args[1];
                    littering = litter.location;
                    this:ejectit(litter, littering);
                    home = litter.location;
                    if ($object_utils:isa(home, $room))
                    home:announce_all("The ", this.name, " sneaks in, deposits ", litter:title(), " and leaves.");
                    else
                    home:tell("You notice the ", this.name, " sneak in, give you ", litter:title(), " and leave.");
                    endif
                    if ($object_utils:has_callable_verb(littering, "announce_all_but"))
                    littering:announce_all_but({litter}, "The ", this.name, " sneaks in, picks up ", litter:title(), " and rushes off to put it away.");
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>moveit</NAME>
                  <CODE>
                    "Wizardly verb to move object with requestor's permission";
                    if (caller != this)
                    return E_PERM;
                    else
                    set_task_perms(player = args[3]);
                    return args[1]:moveto(args[2]);
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>ejectit</NAME>
                  <CODE>
                    "this:ejectit(object,room): Eject args[1] from args[2].  Callable only by housekeeper's quarters verbs.";
                    if (caller == this)
                    args[2]:eject(args[1]);
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>is_object_cleaned</NAME>
                  <CODE>
                    what = args[1];
                    if (!(where = what in this.clean))
                    return 0;
                    else
                    return {this.destination[where], this.requestors[where]};
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>is_litter</NAME>
                  <CODE>
                    thingy = args[1];
                    for x in (this.litter)
                    if ($object_utils:isa(thingy, x[1]) &amp;&amp; (!$object_utils:isa(thingy, x[2])))
                    return 1;
                    endif
                    endfor
                    return 0;
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>init_for_core</NAME>
                  <CODE>
                    if (caller_perms().wizard)
                    this.password = "Impossible password to type";
                    this.last_password_time = 0;
                    this.litter = {};
                    this.public_places = {};
                    this.requestors = {};
                    this.destination = {};
                    this.clean = {};
                    this.eschews = {};
                    this.recycle_bins = {};
                    this.cleaning = #-1;
                    this.task = 0;
                    this.owners = {#2};
                    this.mail_forward = {#2};
                    this.player_queue = {};
                    this.move_player_task = 0;
                    this.moveto_task = 0;
                    pass(@args);
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>clean_status</NAME>
                  <CODE>
                    count = 0;
                    for i in (this.requestors)
                    if (i == player)
                    count = count + 1;
                    endif
                    $command_utils:suspend_if_needed(1);
                    endfor
                    player:tell("Number of items in cleanup list: ", tostr(length(this.clean)));
                    player:tell("Number of items you requested to be tidied: ", tostr(count));
                    player:tell("Number of requestors: ", tostr(length($list_utils:remove_duplicates(this.requestors))));
                    player:tell("Time to complete one cleaning circuit: ", $time_utils:english_time(length(this.clean) * this:time()));
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>is_cleaning</NAME>
                  <CODE>
                    "return a string status if the hosuekeeper is cleaning this object";
                    cleanable = args[1];
                    info = this:is_object_cleaned(cleanable);
                    if (info == 0)
                    return tostr(cleanable.name, " is not cleaned by the ", this.name, ".");
                    else
                    return tostr(cleanable.name, " is kept tidy at ", info[1].name, " (", info[1], ") at ", info[2].name, "'s request.");
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>time</NAME>
                  <CODE>
                    "Returns the amount of time to suspend between objects while continuous cleaning.";
                    "Currently set to try to complete cleaning circuit in one hour, but not exceed one object every 20 seconds.";
                    return max(20 + $login:current_lag(), length(this.clean) ? 3600 / length(this.clean) | 0);
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>acceptable</NAME>
                  <CODE>
                    return caller == this;
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>move_players_home</NAME>
                  <CODE>
                    if (!$perm_utils:controls(caller_perms(), this))
                    "perms don't control the $housekeeper; probably not called by $room:disfunc then. Used to let args[1] call this. No longer.";
                    return E_PERM;
                    endif
                    this.player_queue = {@this.player_queue, {args[1], time() + 300}};
                    if ($code_utils:task_valid(this.move_player_task))
                    "the move-players-home task is already running";
                    return;
                    endif
                    fork tid (10)
                    while (this.player_queue)
                    if ((mtime = this.player_queue[1][2]) &lt; (time() + 10))
                    who = this.player_queue[1][1];
                    "Remove from queue first so that if they do something malicious, like put a kill_task in a custom :accept_for_abode, they won't be in the queue when the task restarts with the next player disconnect. Ho_Yan 12/3/98";
                    this.player_queue = listdelete(this.player_queue, 1);
                    if (is_player(who) &amp;&amp; (!$object_utils:connected(who)))
                    dest = `who.home:accept_for_abode(who) ! ANY =&gt; 0' ? who.home | $player_start;
                    if (who.location != dest)
                    player = who;
                    this:move_em(who, dest);
                    endif
                    endif
                    else
                    suspend(mtime - time());
                    endif
                    $command_utils:suspend_if_needed(1);
                    endwhile
                    endfork
                    this.move_player_task = tid;
                  </CODE>
                </VERB>
                <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>move_em</NAME>
                  <CODE>
                    if (caller == this)
                    {who, dest} = args;
                    set_task_perms(who);
                    fork (0)
                    fork (0)
                    "This is forked so that it's protected from aborts due to errors in the player's :moveto verb.";
                    if (who.location != dest)
                    "Unfortunately, if who is -already- at $player_start, move() won't call :enterfunc and the sleeping body never goes to $limbo. Have to call explicitly for that case. Ho_Yan 11/2/95";
                    if (who.location == $player_start)
                    $player_start:enterfunc(who);
                    else
                    move(who, $player_start);
                    endif
                    endif
                    endfork
                    start = who.location;
                    this:set_moveto_task();
                    who:moveto(dest);
                    if (who.location != start)
                    start:announce(this:take_away_msg(who));
                    endif
                    if (who.location == dest)
                    dest:announce(this:drop_off_msg(who));
                    endif
                    endfork
                    else
                    return E_PERM;
                    endif
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>take_away_msg drop_off_msg</NAME>
                  <CODE>
                    return $string_utils:pronoun_sub(this.(verb), args[1], this);
                  </CODE>
                </VERB>
                <VERB OWNER="obj71" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
                  <NAME>set_moveto_task</NAME>
                  <CODE>
                    "sets $housekeeper.moveto_task to the current task_id() so player:moveto's can check for validity.";
                    if (caller != this)
                    return E_PERM;
                    endif
                    this.moveto_task = task_id();
                  </CODE>
                </VERB>
              </OBJECT>
            </OBJECT>
          </OBJECT>
          <OBJECT ID="obj31" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
            <NAME>Generic Guest</NAME>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>default_gender</NAME>
              <VALUE>"neuter"</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>default_description</NAME>
              <VALUE>{"By definition, guests appear nondescript."}</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>request</NAME>
              <VALUE>0</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>extra_confunc_msg</NAME>
              <VALUE>""</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>free_to_use</NAME>
              <VALUE>1</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>at_room_width</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>at_number</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>join_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>object_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>victim_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>thing_arrive_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>othing_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>thing_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>player_arrive_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>oplayer_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>player_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>self_arrive_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>oself_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>self_port_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>rooms</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>refused_origins</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>refused_extra</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>default_refusal_time</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>report_refusal</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>refused_actions</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>refused_until</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>page_refused</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>page_refused_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>whisper_refused_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>mail_refused_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>spurned_objects</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>_mail_task</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c">
              <NAME>messages_going</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>mail_lists</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>mail_notify</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>mail_forward</NAME>
              <VALUE>"%t (%[#t]) is a guest character."</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>mail_options</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>message_keep_date</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>messages_kept</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c">
              <NAME>current_message</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c">
              <NAME>messages</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>features</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>previous_connection</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>email_address</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="r">
              <NAME>last_disconnect_time</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>help</NAME>
              <VALUE>0</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>more_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>linetask</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>linesleft</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" >
              <NAME>linebuffer</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>pagelen</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="r">
              <NAME>owned_objects</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>linelen</NAME>
              <VALUE>79</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c">
              <NAME>current_folder</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>all_connect_places</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>last_connect_place</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>dict</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>brief</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c">
              <NAME>lines</NAME>
              <VALUE>30</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>page_absent_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>pq</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>pqc</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>page_origin_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>page_echo_msg</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>edit_options</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="r">
              <NAME>last_connect_time</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" >
              <NAME>ownership_quota</NAME>
              <VALUE>0</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>gender</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>prc</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>ppc</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>poc</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>psc</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>pr</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>pp</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>po</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>ps</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>home</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>password</NAME>
              <VALUE>0</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>gaglist</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>paranoid</NAME>
              <VALUE>1</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>display_options</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>verb_subs</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="r">
              <NAME>first_connect_time</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" >
              <NAME>size_quota</NAME>
              <VALUE>{0, 0, 0, 0}</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>last_password_time</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" >
              <NAME>last_connect_attempt</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c">
              <NAME>key</NAME>
            </PROPERTY>
            <PROPERTY OWNER="obj2" PERMS="r">
              <NAME>aliases</NAME>
              <VALUE>{"Generic Guest"}</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="c r">
              <NAME>description</NAME>
              <VALUE>{"By definition, guests appear nondescript."}</VALUE>
            </PROPERTY>
            <PROPERTY OWNER="obj36" PERMS="r">
              <NAME>object_size</NAME>
              <VALUE>{12540, 919123676}</VALUE>
            </PROPERTY>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>boot</NAME>
              <CODE>
                if (!caller_perms().wizard)
                return;
                endif
                player = this;
                this:notify(tostr("Sorry, but you've been here for ", $string_utils:from_seconds(connected_seconds(this)), " and someone else wants to be a guest now.  Feel free to come back", @$login:player_creation_enabled(player) ? {" or even create your own character if you want..."} | {" or type `create' to learn more about how to get a character of your own."}));
                "boot_player(this)";
                return;
                "See #0:user_reconnected.";
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>disfunc</NAME>
              <CODE>
                if ((((valid(cp = caller_perms()) &amp;&amp; (caller != this)) &amp;&amp; (!$perm_utils:controls(cp, this))) &amp;&amp; (cp != this)) &amp;&amp; (caller != #0))
                return E_PERM;
                endif
                "Don't let another guest use this one until all this is done. See :defer, Ho_Yan 1/19/94";
                this.free_to_use = 0;
                this:log_disconnect();
                this:erase_paranoid_data();
                try
                if (this.location != this.home)
                this:room_announce(player.name, " has disconnected.");
                this:room_announce($string_utils:pronoun_sub($housekeeper.take_away_msg, this, $housekeeper));
                move(this, this.home);
                this:room_announce($string_utils:pronoun_sub($housekeeper.drop_off_msg, this, $housekeeper));
                endif
                finally
                this:do_reset();
                this.free_to_use = 1;
                endtry
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>defer</NAME>
              <CODE>
                "Called by #0:connect_player when this object is about to be used as the next guest character.  Usually returns `this', but if for some reason some other guest character should be used, that player object is returned instead";
                if (!caller_perms().wizard)
                "...caller is not :do_login_command; doesn't matter what we return...";
                return this;
                elseif ($login:blacklisted($string_utils:connection_hostname(connection_name(player))))
                return #-2;
                elseif (!(this in connected_players()))
                "...not logged in, no problemo...";
                return this;
                endif
                longest = 900;
                "...guests get 15 minutes before they can be dislodged...";
                candidate = #-1;
                free = {};
                for g in ($object_utils:leaves($guest))
                if (!is_player(g))
                "...a toaded guest?...";
                elseif ((!(con = g in connected_players())) &amp;&amp; g.free_to_use)
                "...yay; found an unused guest...and their last :disfunc is complete";
                free = {@free, g};
                elseif (con &amp;&amp; ((t = connected_seconds(g)) &gt; longest))
                longest = t;
                candidate = g;
                endif
                endfor
                if (free)
                candidate = free[random($)];
                elseif (valid(candidate))
                "...someone's getting bumped...";
                candidate:boot();
                endif
                return candidate;
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>mail_catch_up</NAME>
              <CODE>
                return;
              </CODE>
            </VERB>
            <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
              <NAME>create</NAME>
              <CODE>
                if ($login:player_creation_enabled(player))
                player:tell("First @quit, then connect to the MOO again and, rather than doing `connect guest' do `create &lt;name&gt; &lt;password&gt;'");
                else
                player:tell($login:registration_string());
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>eject</NAME>
              <CODE>
                return pass(@args);
              </CODE>
            </VERB>
            <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>log</NAME>
              <CODE>
                ":log(islogin,time,where) adds an entry to the connection log for this guest.";
                if (caller != this)
                return E_PERM;
                elseif (length(this.connect_log) &lt; this.max_connect_log)
                this.connect_log = {args, @this.connect_log};
                else
                this.connect_log = {args, @this.connect_log[1..this.max_connect_log - 1]};
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>confunc</NAME>
              <CODE>
                if ((((valid(cp = caller_perms()) &amp;&amp; (caller != this)) &amp;&amp; (!$perm_utils:controls(cp, this))) &amp;&amp; (cp != this)) &amp;&amp; (caller != #0))
                return E_PERM;
                else
                $guest_log:enter(1, time(), $string_utils:connection_hostname(connection_name(this)));
                ret = pass(@args);
                this:tell_lines(this:extra_confunc_msg());
                return ret;
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>log_disconnect</NAME>
              <CODE>
                if (caller != this)
                return E_PERM;
                else
                cname = `connection_name(this) ! ANY' || this.last_connect_place;
                $guest_log:enter(0, time(), $string_utils:connection_hostname(cname));
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="none">
              <NAME>@last-c*onnection</NAME>
              <CODE>
                if (!valid(caller_perms()))
                player:tell("Sorry, that information is not available.");
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>my_huh</NAME>
              <CODE>
                if (caller_perms() != this)
                return E_PERM;
                else
                return pass(@args);
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
              <NAME>@read @peek</NAME>
              <CODE>
                return pass(@args);
              </CODE>
            </VERB>
            <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>set_current_folder</NAME>
              <CODE>
                return pass(@args);
                "only for setting permission";
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>init_for_core</NAME>
              <CODE>
                if (caller_perms().wizard)
                this.extra_confunc_msg = "";
                clear_property(this, "features");
                clear_property(this, "rooms");
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>set_name set_aliases</NAME>
              <CODE>
                "disallow guests from setting aliases on themselves";
                if ($perm_utils:controls(caller_perms(), this))
                return pass(@args);
                else
                return E_PERM;
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>extra_confunc_msg</NAME>
              <CODE>
                return $string_utils:pronoun_sub(this.(verb));
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>do_reset</NAME>
              <CODE>
                if (!caller_perms().wizard)
                return E_PERM;
                else
                flush_input(this, 0);
                for x in ({"paranoid", "lines", "responsible", "linelen", "linebuffer", "brief", "gaglist", "rooms", "pagelen", "current_message", "current_folder", "messages", "messages_going", "request", "mail_options", "edit_options", "home", "spurned_objects", "web_info"})
                if ($object_utils:has_property(parent(this), x))
                clear_property(this, x);
                endif
                endfor
                this:set_description(this.default_description);
                this:set_gender(this.default_gender);
                for x in (this.contents)
                this:eject(x);
                endfor
                for x in (this.features)
                if (!(x in $guest.features))
                this:remove_feature(x);
                endif
                endfor
                for x in ($guest.features)
                if (!(x in this.features))
                this:add_feature(x);
                endif
                endfor
                for x in ($object_utils:descendants($generic_editor))
                if (loc = this in x.active)
                x:kill_session(loc);
                endif
                endfor
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d r" DOBJ="any" PREP="any" IOBJ="any">
              <NAME>@request</NAME>
              <CODE>
                "Copied from Generic Guest (#5678):@request by Froxx (#49853) Mon Apr  4 10:49:26 1994 PDT";
                "Usage:  @request &lt;player-name&gt; for &lt;email-address&gt;";
                if (player != this)
                return player:tell(E_PERM);
                endif
                if (this.request)
                return player:tell("Sorry, you appear to have already requested a character.");
                endif
                name = dobjstr;
                if ((prepstr != "for") || ((!dobjstr) || index(address = iobjstr, " ")))
                return player:notify_lines($code_utils:verb_usage());
                endif
                if ($login:request_character(player, name, address))
                this.request = 1;
                endif
              </CODE>
            </VERB>
            <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
              <NAME>connection_name_hash</NAME>
              <CODE>
                "Compute an encrypted hash of the guest's (last) connection, using 'crypt'. Basically, you can't tell where the guest came from, but it is unlikely that two guests will have the same hash";
                "You can use guest:connection_name_hash(seed) as a string to identify whether two guests are from the same place.";
                hash = toint(caller_perms());
                host = $string_utils:connection_hostname(this.last_connect_place);
                for i in [1..length(host)]
                hash = (hash * 14) + index($string_utils.ascii, host[i]);
                endfor
                return crypt(tostr(hash), @args);
              </CODE>
            </VERB>
          </OBJECT>
        </OBJECT>
      </OBJECT>
    </OBJECT>
    <OBJECT ID="obj7" FLAGS="f r" OWNER="obj2" LOCATION="obj-1">
      <NAME>generic exit</NAME>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>obvious</NAME>
        <VALUE>1</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>source</NAME>
        <VALUE>#-1</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>dest</NAME>
        <VALUE>#-1</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>nogo_msg</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>onogo_msg</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>arrive_msg</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>oarrive_msg</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>oleave_msg</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>leave_msg</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c">
        <NAME>key</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>aliases</NAME>
        <VALUE>{"generic exit"}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>description</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>object_size</NAME>
        <VALUE>{7147, 919123665}</VALUE>
      </PROPERTY>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>invoke</NAME>
        <CODE>
          set_task_perms(caller_perms());
          this:move(player);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>move</NAME>
        <CODE>
          set_task_perms(caller_perms());
          what = args[1];
          "if ((what.location != this.source) || (!(this in this.source.exits)))";
          "  player:tell(\"You can't go that way.\");";
          "  return;";
          "endif";
          unlocked = this:is_unlocked_for(what);
          if (unlocked)
          this.dest:bless_for_entry(what);
          endif
          if (unlocked &amp;&amp; this.dest:acceptable(what))
          start = what.location;
          if (msg = this:leave_msg(what))
          what:tell_lines(msg);
          endif
          what:moveto(this.dest);
          if (what.location != start)
          "Don't print oleave messages if WHAT didn't actually go anywhere...";
          this:announce_msg(start, what, (this:oleave_msg(what) || this:defaulting_oleave_msg(what)) || "has left.");
          endif
          if (what.location == this.dest)
          "Don't print arrive messages if WHAT didn't really end up there...";
          if (msg = this:arrive_msg(what))
          what:tell_lines(msg);
          endif
          this:announce_msg(what.location, what, this:oarrive_msg(what) || "has arrived.");
          endif
          else
          if (msg = this:nogo_msg(what))
          what:tell_lines(msg);
          else
          what:tell("You can't go that way.");
          endif
          if (msg = this:onogo_msg(what))
          this:announce_msg(what.location, what, msg);
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>recycle</NAME>
        <CODE>
          if ((caller == this) || $perm_utils:controls(caller_perms(), this))
          try
          this.source:remove_exit(this);
          this.dest:remove_entrance(this);
          except id (ANY)
          endtry
          return pass(@args);
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>leave_msg oleave_msg arrive_msg oarrive_msg nogo_msg onogo_msg</NAME>
        <CODE>
          msg = this.(verb);
          return msg ? $string_utils:pronoun_sub(msg, @args) | "";
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>set_name</NAME>
        <CODE>
          if ($perm_utils:controls(cp = caller_perms(), this) || (valid(this.source) &amp;&amp; (this.source.owner == cp)))
          return (typeof(e = `this.name = args[1] ! ANY') != ERR) || e;
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>set_aliases</NAME>
        <CODE>
          if ($perm_utils:controls(cp = caller_perms(), this) || (valid(this.source) &amp;&amp; (this.source.owner == cp)))
          if (typeof(e = `this.aliases = args[1] ! ANY') == ERR)
          return e;
          else
          return 1;
          endif
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>announce_all_but</NAME>
        <CODE>
          "This is intended to be called only by exits, for announcing various oxxx messages.  First argument is room to announce in.  Second argument is as in $room:announce_all_but's first arg, who not to announce to.  Rest args are what to say.  If the final arg is a list, prepends all the other rest args to the first line and emits the lines separately.";
          where = args[1];
          whobut = args[2];
          last = args[$];
          if (typeof(last) == LIST)
          where:announce_all_but(whobut, @args[3..$ - 1], last[1]);
          for line in (last[2..$])
          where:announce_all_but(whobut, line);
          endfor
          else
          where:announce_all_but(@args[3..$]);
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>defaulting_oleave_msg</NAME>
        <CODE>
          for k in ({this.name, @this.aliases})
          if (k in {"east", "west", "south", "north", "northeast", "southeast", "southwest", "northwest", "out", "up", "down", "nw", "sw", "ne", "se", "in"})
          return ("goes " + k) + ".";
          elseif (k in {"leave", "out", "exit"})
          return "leaves";
          endif
          endfor
          if ((index(this.name, "an ") == 1) || (index(this.name, "a ") == 1))
          return ("leaves for " + this.name) + ".";
          else
          return ("leaves for the " + this.name) + ".";
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>moveto</NAME>
        <CODE>
          if ((caller in {this, this.owner}) || $perm_utils:controls(caller_perms(), this))
          return pass(@args);
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>examine_key</NAME>
        <CODE>
          "examine_key(examiner)";
          "return a list of strings to be told to the player, indicating what the key on this type of object means, and what this object's key is set to.";
          "the default will only tell the key to a wizard or this object's owner.";
          who = args[1];
          if (((caller == this) &amp;&amp; $perm_utils:controls(who, this)) &amp;&amp; (this.key != 0))
          return {tostr(this:title(), " will only transport objects matching this key:"), tostr("  ", $lock_utils:unparse_key(this.key))};
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>announce_msg</NAME>
        <CODE>
          ":announce_msg(place, what, msg)";
          "  announce msg in place (except to what). Prepend with what:title if it isn't part of the string";
          msg = args[3];
          what = args[2];
          title = what:titlec();
          if (!$string_utils:index_delimited(msg, title))
          msg = tostr(title, " ", msg);
          endif
          args[1]:announce_all_but({what}, msg);
        </CODE>
      </VERB>
    </OBJECT>
    <OBJECT ID="obj10" FLAGS="r" OWNER="obj2" LOCATION="obj-1">
      <NAME>Login Commands</NAME>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>welcome_message</NAME>
        <VALUE>{"Welcome to the LambdaCore database.", "", "Type 'connect wizard' to log in.", "", "You will probably want to change this text and the output of the `help' command, which are stored in $login.welcome_message and $login.help_message, respectively."}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>newt_registration_string</NAME>
        <VALUE>"Your character is temporarily hosed."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>registration_string</NAME>
        <VALUE>"Character creation is disabled."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>registration_address</NAME>
        <VALUE>""</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>create_enabled</NAME>
        <VALUE>1</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>bogus_command</NAME>
        <VALUE>"?"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>blank_command</NAME>
        <VALUE>"welcome"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>graylist</NAME>
        <VALUE>{{}, {}}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>blacklist</NAME>
        <VALUE>{{}, {}}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>redlist</NAME>
        <VALUE>{{}, {}}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>who_masks_wizards</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>max_player_name</NAME>
        <VALUE>40</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>spooflist</NAME>
        <VALUE>{{}, {}}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>ignored</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="c r">
        <NAME>max_connections</NAME>
        <VALUE>99999</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>connection_limit_msg</NAME>
        <VALUE>"*** The MOO is too busy! The current lag is %l; there are %n connected.  WAIT FIVE MINUTES BEFORE TRYING AGAIN."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>lag_samples</NAME>
        <VALUE>{0, 0, 0, 0, 0}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>request_enabled</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>help_message</NAME>
        <VALUE>{"Sorry, but there's no help here yet.  Type `?' for a list of commands."}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>last_lag_sample</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>lag_sample_interval</NAME>
        <VALUE>15</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>boot_process</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>lag_cutoff</NAME>
        <VALUE>5</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>lag_exemptions</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>newted</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>current_connections</NAME>
        <VALUE>{#-2}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>current_numcommands</NAME>
        <VALUE>{12}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>max_numcommands</NAME>
        <VALUE>20</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c">
        <NAME>temporary_newts</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>downtimes</NAME>
        <VALUE>{{923782066, 0}, {919535621, 0}, {919532339, 0}, {919278243, 0}, {919272725, 0}, {919226807, 0}, {919218273, 0}, {919137152, 0}}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>print_lag</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="r">
        <NAME>current_lag</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>temporary_blacklist</NAME>
        <VALUE>{{}, {}}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>temporary_redlist</NAME>
        <VALUE>{{}, {}}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>temporary_spooflist</NAME>
        <VALUE>{{}, {}}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>temporary_graylist</NAME>
        <VALUE>{{}, {}}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" >
        <NAME>intercepted_players</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" >
        <NAME>intercepted_actions</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>goaway_message</NAME>
        <VALUE>{"                          ***************************", "                          *  Welcome to LagdaMOO!  *", "                          ***************************", "                                       ", "                      Running Version %v of LagdaMOO", "", "PLEASE NOTE:", "   LagdaMOO is a new kind of society, where thousands of people voluntarily", "come together from all over the world.  What these people say or do may not", "always be to your liking; as when visiting any international city, it is wise", "to be careful who you associate with and what you say.", "   The operators of LagdaMOO have provided the materials for the buildings of", "this community, but are not responsible for what is said or done in them.  In", "particular, you must assume responsibility if you permit minors or others to", "access LagdaMOO through your facilities.  The statements and viewpoints", "expressed here are not necessarily those of the wizards, Pavel Curtis, ", "Stanford University, or Placeware Inc., and those parties disclaim any ", "responsibility for them.", "", "NOTICE FOR JOURNALISTS AND RESEARCHERS:", "  The citizens of LagdaMOO request that you ask for permission from all", "direct participants before quoting any material collected here.", "", "For assistance either now or later, type `help'."}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>checkpoint_in_progress</NAME>
        <VALUE>0</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c">
        <NAME>key</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>aliases</NAME>
        <VALUE>{"Login Commands"}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>description</NAME>
        <VALUE>"This provides everything needed by #0:do_login_command.  See `help $login' on $core_help for details."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>object_size</NAME>
        <VALUE>{42253, 919123666}</VALUE>
      </PROPERTY>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="any">
        <NAME>?</NAME>
        <CODE>
          if ((caller != #0) &amp;&amp; (caller != this))
          return E_PERM;
          else
          clist = {};
          for j in ({this, @$object_utils:ancestors(this)})
          for i in [1..length(verbs(j))]
          if ((verb_args(j, i) == {"any", "none", "any"}) &amp;&amp; index((info = verb_info(j, i))[2], "x"))
          vname = $string_utils:explode(info[3])[1];
          star = index(vname + "*", "*");
          clist = {@clist, $string_utils:uppercase(vname[1..star - 1]) + strsub(vname[star..$], "*", "")};
          endif
          endfor
          endfor
          notify(player, "I don't understand that.  Valid commands at this point are");
          notify(player, "   " + $string_utils:english_list(setremove(clist, "?"), "", " or "));
          return 0;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="any">
        <NAME>wel*come @wel*come</NAME>
        <CODE>
          if ((caller != #0) &amp;&amp; (caller != this))
          return E_PERM;
          else
          msg = this.welcome_message;
          version = server_version();
          for line in ((typeof(msg) == LIST) ? msg | {msg})
          if (typeof(line) == STR)
          notify(player, strsub(line, "%v", version));
          endif
          endfor
          this:check_player_db();
          this:check_for_shutdown();
          this:check_for_checkpoint();
          this:maybe_print_lag();
          return 0;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="any">
        <NAME>w*ho @w*ho</NAME>
        <CODE>
          masked = $login.who_masks_wizards ? $wiz_utils:connected_wizards() | {};
          if ((caller != #0) &amp;&amp; (caller != this))
          return E_PERM;
          elseif (!args)
          plyrs = connected_players();
          if (length(plyrs) &gt; 100)
          this:notify(tostr("You have requested a listing of ", length(plyrs), " players.  Please restrict the number of players in any single request to a smaller number.  The lag thanks you."));
          return 0;
          else
          $code_utils:show_who_listing($set_utils:difference(plyrs, masked)) || this:notify("No one logged in.");
          endif
          else
          plyrs = listdelete($command_utils:player_match_result($string_utils:match_player(args), args), 1);
          if (length(plyrs) &gt; 100)
          this:notify(tostr("You have requested a listing of ", length(plyrs), " players.  Please restrict the number of players in any single request to a smaller number.  The lag thanks you."));
          return 0;
          endif
          $code_utils:show_who_listing(plyrs, $set_utils:intersection(plyrs, masked));
          endif
          return 0;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="any">
        <NAME>co*nnect @co*nnect</NAME>
        <CODE>
          "$login:connect(player-name [, password])";
          " =&gt; 0 (for failed connections)";
          " =&gt; objnum (for successful connections)";
          ((caller == #0) || (caller == this)) || raise(E_PERM);
          "=================================================================";
          "=== Check arguments, print usage notice if necessary";
          try
          {name, ?password = 0} = args;
          name = strsub(name, " ", "_");
          except (E_ARGS)
          notify(player, tostr("Usage:  ", verb, " &lt;existing-player-name&gt; &lt;password&gt;"));
          return 0;
          endtry
          try
          "=================================================================";
          "=== Is our candidate name invalid?";
          if (!valid(candidate = orig_candidate = this:_match_player(name)))
          raise(E_INVARG, tostr("`", name, "' matches no player name."));
          endif
          "=================================================================";
          "=== Is our candidate unable to connect for generic security";
          "=== reasons (ie clear password, non-player object)?";
          if (`is_clear_property(candidate, "password") ! E_PROPNF' || (!$object_utils:isa(candidate, $player)))
          server_log(tostr("FAILED CONNECT: ", name, " (", candidate, ") on ", connection_name(player), ($string_utils:connection_hostname(connection_name(player)) in candidate.all_connect_places) ? "" | "******"));
          raise(E_INVARG);
          endif
          "=================================================================";
          "=== Check password";
          if (typeof(cp = candidate.password) == STR)
          "=== Candidate requires a password";
          if (password)
          "=== Candidate requires a password, and one was provided";
          if (strcmp(crypt(password, cp), cp))
          "=== Candidate requires a password, and one was provided, which was wrong";
          server_log(tostr("FAILED CONNECT: ", name, " (", candidate, ") on ", connection_name(player), ($string_utils:connection_hostname(connection_name(player)) in candidate.all_connect_places) ? "" | "******"));
          raise(E_INVARG, "Invalid password.");
          else
          "=== Candidate requires a password, and one was provided, which was right";
          endif
          else
          "=== Candidate requires a password, and none was provided";
          set_connection_option(player, "binary", 1);
          notify(player, "Password: ");
          set_connection_option(player, "binary", 0);
          set_connection_option(player, "client-echo", 0);
          this:add_interception(player, "intercepted_password", candidate);
          return 0;
          endif
          elseif (cp == 0)
          "=== Candidate does not require a password";
          else
          "=== Candidate has a nonstandard password; something's wrong";
          raise(E_INVARG);
          endif
          "=================================================================";
          "=== Is the player locked out?";
          if ($no_connect_message &amp;&amp; (!candidate.wizard))
          notify(player, $no_connect_message);
          server_log(tostr("REJECTED CONNECT: ", name, " (", candidate, ") on ", connection_name(player)));
          return 0;
          endif
          "=================================================================";
          "=== Check guest connections";
          if ($object_utils:isa(candidate, $guest) &amp;&amp; (!valid(candidate = candidate:defer())))
          if (candidate == #-2)
          server_log(tostr("GUEST DENIED: ", connection_name(player)));
          notify(player, "Sorry, guest characters are not allowed from your site at the current time.");
          else
          notify(player, "Sorry, all of our guest characters are in use right now.");
          endif
          return 0;
          endif
          "=================================================================";
          "=== Check newts";
          if (candidate in this.newted)
          if (entry = $list_utils:assoc(candidate, this.temporary_newts))
          if ((uptime = this:uptime_since(entry[2])) &gt; entry[3])
          "Temporary newting period is over.  Remove entry.  Oh, send mail, too.";
          this.temporary_newts = setremove(this.temporary_newts, entry);
          this.newted = setremove(this.newted, candidate);
          fork (0)
          player = this.owner;
          $mail_agent:send_message(player, $newt_log, tostr("automatic @unnewt ", candidate.name, " (", candidate, ")"), {"message sent from $login:connect"});
          endfork
          else
          notify(player, "");
          notify(player, this:temp_newt_registration_string(entry[3] - uptime));
          boot_player(player);
          return 0;
          endif
          else
          notify(player, "");
          notify(player, this:newt_registration_string());
          boot_player(player);
          return 0;
          endif
          endif
          "=================================================================";
          "=== Connection limits based on lag";
          if ((((!candidate.wizard) &amp;&amp; (!(candidate in this.lag_exemptions))) &amp;&amp; ((howmany = length(connected_players())) &gt;= (max = this:max_connections()))) &amp;&amp; (!$object_utils:connected(candidate)))
          notify(player, $string_utils:subst(this.connection_limit_msg, {{"%n", tostr(howmany)}, {"%m", tostr(max)}, {"%l", tostr(this:current_lag())}, {"%t", candidate.last_connect_attempt ? ctime(candidate.last_connect_attempt) | "not recorded"}}));
          if ($object_utils:has_property($local, "mudlist"))
          notify(player, "You may wish to try another MUD while waiting for the MOO to unlag.  Here are a few that we know of:");
          for l in ($local.mudlist:choose(3))
          notify(player, l);
          endfor
          endif
          candidate.last_connect_attempt = time();
          server_log(tostr("CONNECTION LIMIT EXCEEDED: ", name, " (", candidate, ") on ", connection_name(player)));
          boot_player(player);
          return 0;
          endif
          "=================================================================";
          "=== Log the player on!";
          if (candidate != orig_candidate)
          notify(player, tostr("Okay,... ", name, " is in use.  Logging you in as `", candidate.name, "'"));
          endif
          this:record_connection(candidate);
          return candidate;
          except (E_INVARG)
          notify(player, "Either that player does not exist, or has a different password.");
          return 0;
          endtry
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="any">
        <NAME>cr*eate @cr*eate</NAME>
        <CODE>
          if ((caller != #0) &amp;&amp; (caller != this))
          return E_PERM;
          "... caller isn't :do_login_command()...";
          elseif (!this:player_creation_enabled(player))
          notify(player, this:registration_string());
          "... we've disabled player creation ...";
          elseif (length(args) != 2)
          notify(player, tostr("Usage:  ", verb, " &lt;new-player-name&gt; &lt;new-password&gt;"));
          elseif ($player_db.frozen)
          notify(player, "Sorry, can't create any new players right now.  Try again in a few minutes.");
          elseif ((!(name = args[1])) || (name == "&lt;&gt;"))
          notify(player, "You can't have a blank name!");
          if (name)
          notify(player, "Also, don't use angle brackets (&lt;&gt;).");
          endif
          elseif ((name[1] == "&lt;") &amp;&amp; (name[$] == "&gt;"))
          notify(player, "Try that again but without the angle brackets, e.g.,");
          notify(player, tostr(" ", verb, " ", name[2..$ - 1], " ", strsub(strsub(args[2], "&lt;", ""), "&gt;", "")));
          notify(player, "This goes for other commands as well.");
          elseif (index(name, " "))
          notify(player, "Sorry, no spaces are allowed in player names.  Use dashes or underscores.");
          "... lots of routines depend on there not being spaces in player names...";
          elseif ((!$player_db:available(name)) || (this:_match_player(name) != $failed_match))
          notify(player, "Sorry, that name is not available.  Please choose another.");
          "... note the :_match_player call is not strictly necessary...";
          "... it is merely there to handle the case that $player_db gets corrupted.";
          elseif (!(password = args[2]))
          notify(player, "You must set a password for your player.");
          else
          new = $quota_utils:bi_create($player_class, $nothing);
          set_player_flag(new, 1);
          new.name = name;
          new.aliases = {name};
          new.programmer = $player_class.programmer;
          new.password = crypt(password);
          new.last_password_time = time();
          new.last_connect_time = $maxint;
          "Last disconnect time is creation time, until they login.";
          new.last_disconnect_time = time();
          "make sure the owership quota isn't clear!";
          $quota_utils:initialize_quota(new);
          this:record_connection(new);
          $player_db:insert(name, new);
          `move(new, $player_start) ! ANY';
          return new;
          endif
          return 0;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="any">
        <NAME>q*uit @q*uit</NAME>
        <CODE>
          if ((caller != #0) &amp;&amp; (caller != this))
          return E_PERM;
          else
          boot_player(player);
          return 0;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="any">
        <NAME>up*time @up*time</NAME>
        <CODE>
          if ((caller != #0) &amp;&amp; (caller != this))
          return E_PERM;
          else
          notify(player, tostr("The server has been up for ", $time_utils:english_time(time() - $last_restart_time), "."));
          return 0;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="any">
        <NAME>v*ersion @v*ersion</NAME>
        <CODE>
          if ((caller != #0) &amp;&amp; (caller != this))
          return E_PERM;
          else
          notify(player, tostr("The MOO is currently running version ", server_version(), " of the LambdaMOO server code."));
          return 0;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>parse_command</NAME>
        <CODE>
          ":parse_command(@args) =&gt; {verb, args}";
          "Given the args from #0:do_login_command,";
          "  returns the actual $login verb to call and the args to use.";
          "Commands available to not-logged-in users should be located on this object and given the verb_args \"any none any\"";
          if ((caller != #0) &amp;&amp; (caller != this))
          return E_PERM;
          endif
          if (li = this:interception(player))
          return {@li, @args};
          endif
          if (!args)
          return {this.blank_command, @args};
          elseif ((verb = args[1]) &amp;&amp; (!$string_utils:is_numeric(verb)))
          for i in ({this, @$object_utils:ancestors(this)})
          try
          if ((verb_args(i, verb) == {"any", "none", "any"}) &amp;&amp; index(verb_info(i, verb)[2], "x"))
          return args;
          endif
          except (ANY)
          continue i;
          endtry
          endfor
          endif
          return {this.bogus_command, @args};
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>check_for_shutdown</NAME>
        <CODE>
          when = $shutdown_time - time();
          if (when &gt;= 0)
          line = "***************************************************************************";
          notify(player, "");
          notify(player, "");
          notify(player, line);
          notify(player, line);
          notify(player, "****");
          notify(player, ("****  WARNING:  The server will shut down in " + $time_utils:english_time(when - (when % 60))) + ".");
          for piece in ($generic_editor:fill_string($shutdown_message, 60))
          notify(player, "****            " + piece);
          endfor
          notify(player, "****");
          notify(player, line);
          notify(player, line);
          notify(player, "");
          notify(player, "");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>check_player_db</NAME>
        <CODE>
          if ($player_db.frozen)
          line = "***************************************************************************";
          notify(player, "");
          notify(player, line);
          notify(player, "***");
          for piece in ($generic_editor:fill_string("The character-name matcher is currently being reloaded.  This means your character name might not be recognized even though it still exists.  Don't panic.  You can either wait for the reload to finish or you can connect using your object number if you remember it (e.g., `connect #1234 yourpassword').", 65))
          notify(player, "***       " + piece);
          endfor
          notify(player, "***");
          for piece in ($generic_editor:fill_string("Repeat:  Do not panic.  In particular, please do not send mail to any wizards or the registrar asking about this.  It will finish in time.  Thank you for your patience.", 65))
          notify(player, "***       " + piece);
          endfor
          if (this:player_creation_enabled(player))
          notify(player, "***       This also means that character creation is disabled.");
          endif
          notify(player, "***");
          notify(player, line);
          notify(player, "");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>_match_player</NAME>
        <CODE>
          ":_match_player(name)";
          "This is the matching routine used by @connect.";
          "returns either a valid player corresponding to name or $failed_match.";
          name = args[1];
          if (valid(candidate = $string_utils:literal_object(name)) &amp;&amp; is_player(candidate))
          return candidate;
          endif
          ".....uncomment this to trust $player_db and have `connect' recognize aliases";
          if (valid(candidate = $player_db:find_exact(name)) &amp;&amp; is_player(candidate))
          return candidate;
          endif
          ".....uncomment this if $player_db gets hosed and you want by-name login";
          ". for candidate in (players())";
          ".   if (candidate.name == name)";
          ".     return candidate; ";
          ".   endif ";
          ". endfor ";
          ".....";
          return $failed_match;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>notify</NAME>
        <CODE>
          set_task_perms(caller_perms());
          `notify(player, args[1]) ! ANY';
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>tell</NAME>
        <CODE>
          "keeps bad things from happening if someone brings this object into a room and talks to it.";
          return 0;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>player_creation_enabled</NAME>
        <CODE>
          "Accepts a player object.  If player creation is enabled for that player object, then return true.  Otherwise, return false.";
          "Default implementation checks the player's connecting host via $login:blacklisted to decide.";
          if (caller_perms().wizard)
          return this.create_enabled &amp;&amp; (!this:blacklisted($string_utils:connection_hostname(connection_name(args[1]))));
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>newt_registration_string registration_string</NAME>
        <CODE>
          return $string_utils:subst(this.(verb), {{"%e", this.registration_address}, {"%%", "%"}});
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>init_for_core</NAME>
        <CODE>
          if (caller_perms().wizard)
          pass();
          this.lag_exemptions = {};
          this.max_connections = 99999;
          this.lag_samples = {0, 0, 0, 0, 0};
          this.print_lag = 0;
          this.last_lag_sample = 0;
          this.bogus_command = "?";
          this.blank_command = "welcome";
          this.create_enabled = 1;
          this.registration_address = "";
          this.registration_string = "Character creation is disabled.";
          this.newt_registration_string = "Your character is temporarily hosed.";
          this.welcome_message = {"Welcome to the LambdaCore database.", "", "Type 'connect wizard' to log in.", "", "You will probably want to change this text and the output of the `help' command, which are stored in $login.welcome_message and $login.help_message, respectively."};
          this.help_message = {"Sorry, but there's no help here yet.  Type `?' for a list of commands."};
          this.redlist = this.blacklist = this.graylist = this.spooflist = {{}, {}};
          this.temporary_redlist = this.temporary_blacklist = this.temporary_graylist = this.temporary_spooflist = {{}, {}};
          this.who_masks_wizards = 0;
          this.newted = this.temporary_newts = {};
          this.downtimes = {};
          if ("monitor" in properties(this))
          delete_property(this, "monitor");
          endif
          if ("monitor" in verbs(this))
          delete_verb(this, "monitor");
          endif
          if ("record_connection(real)" in verbs(this))
          delete_verb(this, "record_connection");
          info = verb_info(this, "record_connection(real)");
          set_verb_info(this, "record_connection(real)", {info[1], "rxd", "record_connection"});
          endif
          if ("special_action" in verbs(this))
          set_verb_code(this, "special_action", {});
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="x" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>special_action</NAME>
        <CODE>
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>blacklisted graylisted redlisted spooflisted</NAME>
        <CODE>
          ":blacklisted(hostname) =&gt; is hostname on the .blacklist";
          ":graylisted(hostname)  =&gt; is hostname on the .graylist";
          ":redlisted(hostname)   =&gt; is hostname on the .redlist";
          sitelist = this.(this:listname(verb));
          if (!caller_perms().wizard)
          return E_PERM;
          elseif (((hostname = args[1]) in sitelist[1]) || (hostname in sitelist[2]))
          return 1;
          elseif ($site_db:domain_literal(hostname))
          for lit in (sitelist[1])
          if ((index(hostname, lit) == 1) &amp;&amp; ((hostname + ".")[length(lit) + 1] == "."))
          return 1;
          endif
          endfor
          else
          for dom in (sitelist[2])
          if (index(dom, "*"))
          "...we have a wildcard; let :match_string deal with it...";
          if ($string_utils:match_string(hostname, dom))
          return 1;
          endif
          else
          "...tail of hostname ...";
          if ((r = rindex(hostname, dom)) &amp;&amp; ((("." + hostname)[r] == ".") &amp;&amp; (((r - 1) + length(dom)) == length(hostname))))
          return 1;
          endif
          endif
          endfor
          endif
          return this:(verb + "_temp")(hostname);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>blacklist_add*_temp graylist_add*_temp redlist_add*_temp spooflist_add*_temp</NAME>
        <CODE>
          "To add a temporary entry, only call the `temp' version.";
          "blacklist_add_temp(Site, start time, duration)";
          if (!caller_perms().wizard)
          return E_PERM;
          endif
          {where, ?start, ?duration} = args;
          lname = this:listname(verb);
          which = 1 + (!$site_db:domain_literal(where));
          if (index(verb, "temp"))
          lname = "temporary_" + lname;
          this.(lname)[which] = setadd(this.(lname)[which], {where, start, duration});
          else
          this.(lname)[which] = setadd(this.(lname)[which], where);
          endif
          return 1;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>blacklist_remove*_temp graylist_remove*_temp redlist_remove*_temp spooflist_remove*_temp</NAME>
        <CODE>
          "The temp version removes from the temporary property if it exists.";
          if (!caller_perms().wizard)
          return E_PERM;
          endif
          where = args[1];
          lname = this:listname(verb);
          which = 1 + (!$site_db:domain_literal(where));
          if (index(verb, "temp"))
          lname = "temporary_" + lname;
          if (entry = $list_utils:assoc(where, this.(lname)[which]))
          this.(lname)[which] = setremove(this.(lname)[which], entry);
          return 1;
          else
          return E_INVARG;
          endif
          elseif (where in this.(lname)[which])
          this.(lname)[which] = setremove(this.(lname)[which], where);
          return 1;
          else
          return E_INVARG;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>listname</NAME>
        <CODE>
          return {"???", "blacklist", "graylist", "redlist", "spooflist"}[1 + index("bgrs", (args[1] || "?")[1])];
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>who(vanilla)</NAME>
        <CODE>
          if (caller != #0)
          return E_PERM;
          elseif (!args)
          $code_utils:show_who_listing(connected_players()) || this:notify("No one logged in.");
          else
          plyrs = listdelete($command_utils:player_match_result($string_utils:match_player(args), args), 1);
          $code_utils:show_who_listing(plyrs);
          endif
          return 0;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>record_connection</NAME>
        <CODE>
          ":record_connection(plyr) update plyr's connection information";
          "to reflect impending login.";
          if (!caller_perms().wizard)
          return E_PERM;
          else
          plyr = args[1];
          plyr.first_connect_time = min(time(), plyr.first_connect_time);
          plyr.previous_connection = {plyr.last_connect_time, $string_utils:connection_hostname(plyr.last_connect_place)};
          plyr.last_connect_time = time();
          plyr.last_connect_place = cn = connection_name(player);
          chost = $string_utils:connection_hostname(cn);
          acp = setremove(plyr.all_connect_places, chost);
          plyr.all_connect_places = {chost, @acp[1..min($, 15)]};
          if (!$object_utils:isa(plyr, $guest))
          $site_db:add(plyr, chost);
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>sample_lag</NAME>
        <CODE>
          if (!caller_perms().wizard)
          return E_PERM;
          endif
          lag = (time() - this.last_lag_sample) - 15;
          this.lag_samples = {lag, @this.lag_samples[1..3]};
          "Now compute the current lag and store it in a property, instead of computing it in :current_lag, which is called a hundred times a second.";
          thislag = max(0, (time() - this.last_lag_sample) - this.lag_sample_interval);
          if (thislag &gt; (60 * 60))
          "more than an hour, probably the lag sampler stopped";
          this.current_lag = 0;
          else
          samples = this.lag_samples;
          sum = 0;
          cnt = 0;
          for x in (listdelete(samples, 1))
          sum = sum + x;
          cnt = cnt + 1;
          endfor
          this.current_lag = max(thislag, samples[1], samples[2], sum / cnt);
          endif
          fork (15)
          this:sample_lag();
          endfork
          this.last_lag_sample = time();
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>is_lagging</NAME>
        <CODE>
          return this:current_lag() &gt; this.lag_cutoff;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>max_connections</NAME>
        <CODE>
          max = this.max_connections;
          if (typeof(max) == LIST)
          if (this:is_lagging())
          max = max[1];
          else
          max = max[2];
          endif
          endif
          return max;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>request_character</NAME>
        <CODE>
          "request_character(player, name, address)";
          "return true if succeeded";
          if (!caller_perms().wizard)
          return E_PERM;
          endif
          {who, name, address} = args;
          connection = $string_utils:connection_hostname(connection_name(who));
          if (reason = $wiz_utils:check_player_request(name, address, connection))
          prefix = "";
          if (reason[1] == "-")
          reason = reason[2..$];
          prefix = "Please";
          else
          prefix = "Please try again, or, to register another way,";
          endif
          notify(who, reason);
          msg = tostr(prefix, " send mail to ", $login.registration_address, ", with the character name you want.");
          for l in ($generic_editor:fill_string(msg, 70))
          notify(who, l);
          endfor
          return 0;
          endif
          if (lines = $no_one:eval_d("$local.help.(\"multiple-characters\")")[2])
          notify(who, "Remember, in general, only one character per person is allowed.");
          notify(who, tostr("Do you already have a ", $network.moo_name, " character? [enter `yes' or `no']"));
          answer = read(who);
          if (answer == "yes")
          notify(who, "Process terminated *without* creating a character.");
          return 0;
          elseif (answer != "no")
          return notify(who, tostr("Please try again; when you get this question, answer `yes' or `no'. You answered `", answer, "'"));
          endif
          notify(who, "For future reference, do you want to see the full policy (from `help multiple-characters'?");
          notify(who, "[enter `yes' or `no']");
          if (read(who) == "yes")
          for x in (lines)
          for y in ($generic_editor:fill_string(x, 70))
          notify(who, y);
          endfor
          endfor
          endif
          endif
          notify(who, tostr("A character named `", name, "' will be created."));
          notify(who, tostr("A random password will be generated, and e-mailed along with"));
          notify(who, tostr(" an explanatory message to: ", address));
          notify(who, tostr(" [Please double-check your email address and answer `no' if it is incorrect.]"));
          notify(who, "Is this OK? [enter `yes' or `no']");
          if (read(who) != "yes")
          notify(who, "Process terminated *without* creating a character.");
          return 0;
          endif
          if (!$network.active)
          $mail_agent:send_message(this.owner, $registration_db.registrar, "Player request", {"Player request from " + connection, ":", "", (("@make-player " + name) + " ") + address});
          notify(who, tostr("Request for new character ", name, " email address '", address, "' accepted."));
          notify(who, tostr("Please be patient until the registrar gets around to it."));
          notify(who, tostr("If you don't get email within a week, please send regular"));
          notify(who, tostr("  email to: ", $login.registration_address, "."));
          elseif ($player_db.frozen)
          notify(who, "Sorry, can't create any new players right now.  Try again in a few minutes.");
          else
          new = $wiz_utils:make_player(name, address);
          password = new[2];
          new = new[1];
          notify(who, tostr("Character ", name, " (", new, ") created."));
          notify(who, tostr("Mailing password to ", address, "; you should get the mail very soon."));
          notify(who, tostr("If you do not get it, please do NOT request another character."));
          notify(who, tostr("Instead, send regular email to ", $login.registration_address, ","));
          notify(who, tostr("with the name of the character you requested."));
          $mail_agent:send_message(this.owner, $new_player_log, tostr(name, " (", new, ")"), {address, tostr(" Automatically created at request of ", valid(player) ? player.name | "unconnected player", " from ", connection, ".")});
          $wiz_utils:send_new_player_mail(tostr("Someone connected from ", connection, " at ", ctime(), " requested a character on ", $network.moo_name, " for email address ", address, "."), name, address, new, password);
          return 1;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="any">
        <NAME>req*uest @req*uest</NAME>
        <CODE>
          if ((caller != #0) &amp;&amp; (caller != this))
          return E_PERM;
          endif
          "must be #0:do_login_command";
          if (!this.request_enabled)
          for line in ($generic_editor:fill_string(this:registration_string(), 70))
          notify(player, line);
          endfor
          elseif ((length(args) != 3) || (args[2] != "for"))
          notify(player, tostr("Usage:  ", verb, " &lt;new-player-name&gt; for &lt;email-address&gt;"));
          elseif ($login:request_character(player, args[1], args[3]))
          boot_player(player);
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="any" PREP="none" IOBJ="any">
        <NAME>h*elp @h*elp</NAME>
        <CODE>
          if ((caller != #0) &amp;&amp; (caller != this))
          return E_PERM;
          else
          msg = this.help_message;
          for line in ((typeof(msg) == LIST) ? msg | {msg})
          if (typeof(line) == STR)
          notify(player, line);
          endif
          endfor
          return 0;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>maybe_print_lag</NAME>
        <CODE>
          if ((caller == this) || (caller_perms() == player))
          if (this.print_lag)
          lag = this:current_lag();
          if (lag &gt; 1)
          lagstr = tostr("approximately ", lag, " seconds");
          elseif (lag == 1)
          lagstr = "approximately 1 second";
          else
          lagstr = "low";
          endif
          notify(player, tostr("The lag is ", lagstr, "; there ", ((l = length(connected_players())) == 1) ? "is " | "are ", l, " connected."));
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>current_lag</NAME>
        <CODE>
          return this.current_lag;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>maybe_limit_commands</NAME>
        <CODE>
          "This limits the number of commands that can be issued from the login prompt to prevent haywire login programs from lagging the MOO.";
          "$login.current_connections has the current player id's of people at the login prompt.";
          "$login.current_numcommands has the number of commands they have issued at the prompt so far.";
          "$login.max_numcommands has the maximum number of commands they may try before being booted.";
          if (!caller_perms().wizard)
          return E_PERM;
          else
          if (iconn = player in this.current_connections)
          knocks = this.current_numcommands[iconn] = this.current_numcommands[iconn] + 1;
          else
          this.current_connections = {@this.current_connections, player};
          this.current_numcommands = {@this.current_numcommands, 1};
          knocks = 1;
          "...sweep idle connections...";
          for p in (this.current_connections)
          if (typeof(`idle_seconds(p) ! ANY') == ERR)
          n = p in this.current_connections;
          this.current_connections = listdelete(this.current_connections, n);
          this.current_numcommands = listdelete(this.current_numcommands, n);
          endif
          endfor
          endif
          if (knocks &gt; this.max_numcommands)
          notify(player, "Sorry, too many commands issued without connecting.");
          boot_player(player);
          return 1;
          else
          return 0;
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>server_started</NAME>
        <CODE>
          "Called by #0:server_started when the server restarts.";
          if (caller_perms().wizard)
          this.lag_samples = {0, 0, 0, 0, 0};
          this.downtimes = {{time(), this.last_lag_sample}, @this.downtimes[1..min($, 100)]};
          this.intercepted_players = this.intercepted_actions = {};
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>uptime_since</NAME>
        <CODE>
          "uptime_since(time): How much time has LambdaMOO been up since `time'";
          since = args[1];
          up = time() - since;
          for x in (this.downtimes)
          if (x[1] &lt; since)
          "downtime predates when we're asking about";
          return up;
          endif
          "since the server was down between x[2] and x[1], don't count it as uptime";
          up = up - (x[1] - max(x[2], since));
          endfor
          return up;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>count_bg_players</NAME>
        <CODE>
          caller_perms().wizard || $error:raise(E_PERM);
          now = time();
          tasks = queued_tasks();
          sum = 0;
          for t in (tasks)
          delay = t[2] - now;
          interval = (delay &lt;= 0) ? 1 | (delay * 2);
          "SUM is measured in hundredths of a player for the moment...";
          (delay &lt;= 300) &amp;&amp; (sum = sum + (2000 / interval));
          endfor
          count = sum / 100;
          return count;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>blacklisted_temp graylisted_temp redlisted_temp spooflisted_temp</NAME>
        <CODE>
          ":blacklisted_temp(hostname) =&gt; is hostname on the .blacklist...";
          ":graylisted_temp(hostname)  =&gt; is hostname on the .graylist...";
          ":redlisted_temp(hostname)   =&gt; is hostname on the .redlist...";
          ":spooflisted_temp(hostname) =&gt; is hostname on the .spooflist...";
          "";
          "... and the time limit hasn't run out.";
          lname = this:listname(verb);
          sitelist = this.("temporary_" + lname);
          if (!caller_perms().wizard)
          return E_PERM;
          elseif (entry = $list_utils:assoc(hostname = args[1], sitelist[1]))
          return this:templist_expired(lname, @entry);
          elseif (entry = $list_utils:assoc(hostname, sitelist[2]))
          return this:templist_expired(lname, @entry);
          elseif ($site_db:domain_literal(hostname))
          for lit in (sitelist[1])
          if ((index(hostname, lit[1]) == 1) &amp;&amp; ((hostname + ".")[length(lit[1]) + 1] == "."))
          return this:templist_expired(lname, @lit);
          endif
          endfor
          else
          for dom in (sitelist[2])
          if (index(dom[1], "*"))
          "...we have a wildcard; let :match_string deal with it...";
          if ($string_utils:match_string(hostname, dom[1]))
          return this:templist_expired(lname, @dom);
          endif
          else
          "...tail of hostname ...";
          if ((r = rindex(hostname, dom[1])) &amp;&amp; ((("." + hostname)[r] == ".") &amp;&amp; (((r - 1) + length(dom[1])) == length(hostname))))
          return this:templist_expired(lname, @dom);
          endif
          endif
          endfor
          endif
          return 0;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>templist_expired</NAME>
        <CODE>
          "check to see if duration has expired on temporary_&lt;colorlist&gt;. Removes entry if so, returns true if still &lt;colorlisted&gt;";
          ":(listname, hostname, start time, duration)";
          {lname, hname, start, duration} = args;
          if (!caller_perms().wizard)
          return E_PERM;
          endif
          if (this:uptime_since(start) &gt; duration)
          this:(lname + "_remove_temp")(hname);
          return 0;
          else
          return 1;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>temp_newt_registration_string</NAME>
        <CODE>
          return ("Your character is unavailable for another " + $time_utils:english_time(args[1])) + ".";
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>add_interception</NAME>
        <CODE>
          (caller == this) || raise(E_PERM);
          {who, verbname, @arguments} = args;
          (who in this.intercepted_players) &amp;&amp; raise(E_INVARG, "Player already has an interception set.");
          this.intercepted_players = {@this.intercepted_players, who};
          this.intercepted_actions = {@this.intercepted_actions, {verbname, @arguments}};
          return 1;
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>delete_interception</NAME>
        <CODE>
          (caller == this) || raise(E_PERM);
          {who} = args;
          if (loc = who in this.intercepted_players)
          this.intercepted_players = listdelete(this.intercepted_players, loc);
          this.intercepted_actions = listdelete(this.intercepted_actions, loc);
          return 1;
          else
          "raise an error?  nah.";
          return 0;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>interception</NAME>
        <CODE>
          (caller == this) || raise(E_PERM);
          {who} = args;
          return (loc = who in this.intercepted_players) ? this.intercepted_actions[loc] | 0;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>intercepted_password</NAME>
        <CODE>
          (caller == #0) || raise(E_PERM);
          this:delete_interception(player);
          set_connection_option(player, "client-echo", 1);
          notify(player, "");
          try
          {candidate, ?password = ""} = args;
          except (E_ARGS)
          return 0;
          endtry
          return this:connect(tostr(candidate), password);
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>do_out_of_band_command doobc</NAME>
        <CODE>
          "This is where oob handlers need to be put to handle oob commands issued prior to assigning a connection to a player object.  Right now it simply returns.";
          return;
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>check_for_checkpoint</NAME>
        <CODE>
          if (this.checkpoint_in_progress)
          line = "***************************************************************************";
          notify(player, "");
          notify(player, "");
          notify(player, line);
          notify(player, line);
          notify(player, "****");
          notify(player, "****  NOTICE:  The server is very slow now.");
          notify(player, "****           The database is being saved to disk.");
          notify(player, "****");
          notify(player, line);
          notify(player, line);
          notify(player, "");
          notify(player, "");
          endif
        </CODE>
      </VERB>
    </OBJECT>
    <OBJECT ID="obj11" FLAGS="r" OWNER="obj2" LOCATION="obj-1">
      <NAME>Player Last_huh Verbs</NAME>
      <PROPERTY OWNER="obj2" PERMS="c">
        <NAME>key</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>aliases</NAME>
        <VALUE>{"Player Last_huh Verbs"}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>description</NAME>
        <VALUE>"A repository of last-resort player verbs to be called by $player:last_huh"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>object_size</NAME>
        <VALUE>{4582, 919123667}</VALUE>
      </PROPERTY>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>@*</NAME>
        <CODE>
          "{last_huh}  @&lt;msg_name&gt; &lt;object&gt; is [&lt;text&gt;]";
          "If &lt;text&gt; is given calls &lt;object&gt;:set_message(&lt;msg_name&gt;,&lt;text&gt;),";
          "otherwise prints the value of the specified message property";
          set_task_perms(caller_perms());
          nargs = length(args);
          pos = "is" in args;
          if (pos == 1)
          player:notify(tostr("Usage:  ", verb, " &lt;object&gt; is &lt;message&gt;"));
          return;
          endif
          dobjstr = $string_utils:from_list(args[1..pos - 1], " ");
          message = $string_utils:from_list(args[pos + 1..nargs], " ");
          msg_name = verb[2..$];
          dobj = player:my_match_object(dobjstr);
          if ($command_utils:object_match_failed(dobj, dobjstr))
          "... oh well ...";
          elseif (pos == nargs)
          if (E_PROPNF == (get = `dobj.(msg_name + "_msg") ! ANY'))
          player:notify(tostr(dobj.name, " (", dobj, ") has no \"", msg_name, "\" message."));
          elseif (typeof(get) == ERR)
          player:notify(tostr(get));
          elseif (!get)
          player:notify("Message is not set.");
          else
          player:notify(tostr("The \"", msg_name, "\" message of ", dobj.name, " (", dobj, "):"));
          player:notify(tostr(get));
          endif
          else
          set = dobj:set_message(msg_name, message);
          if (set)
          if (typeof(set) == STR)
          player:notify(set);
          else
          player:notify(tostr("You set the \"", msg_name, "\" message of ", dobj.name, " (", dobj, ")."));
          endif
          elseif (set == E_PROPNF)
          player:notify(tostr(dobj.name, " (", dobj, ") has no \"", msg_name, "\" message to set."));
          elseif (typeof(set) == ERR)
          player:notify(tostr(set));
          else
          player:notify(tostr("You clear the \"", msg_name, "\" message of ", dobj.name, " (", dobj, ")."));
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>give hand</NAME>
        <CODE>
          "{last_huh}  give any to any";
          "a give \"verb\" that works for non-$things.";
          set_task_perms(caller_perms());
          if (((verb == "give") &amp;&amp; (dobjstr == "up")) &amp;&amp; (!prepstr))
          player:tell("Try this instead: @quit");
          elseif (dobj == $nothing)
          player:tell("What do you want to give?");
          elseif (iobj == $nothing)
          player:tell("To whom/what do you want to give it?");
          elseif ($command_utils:object_match_failed(dobj, dobjstr) || $command_utils:object_match_failed(iobj, iobjstr))
          "...lose...";
          elseif (dobj.location != player)
          player:tell("You don't have that!");
          elseif (iobj.location != player.location)
          player:tell("I don't see ", iobj.name, " here.");
          else
          dobj:moveto(iobj);
          if (dobj.location == iobj)
          player:tell("You give ", dobj:title(), " to ", iobj.name, ".");
          iobj:tell(player.name, " gives you ", dobj:title(), ".");
          else
          player:tell("Either that doesn't want to be given away or ", iobj.name, " doesn't want it.");
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>get take</NAME>
        <CODE>
          "{last_huh}  get/take any";
          "a take \"verb\" that works for non-$things.";
          set_task_perms(caller_perms());
          if (dobj == $nothing)
          player:tell(verb, " what?");
          elseif ($command_utils:object_match_failed(dobj, dobjstr))
          "...lose...";
          elseif (dobj.location == player)
          player:tell("You already have that!");
          elseif (dobj.location != player.location)
          player:tell("I don't see that here.");
          else
          dobj:moveto(player);
          if (dobj.location == player)
          player:tell("Taken.");
          player.location:announce(player.name, " takes ", dobj.name, ".");
          else
          player:tell("You can't pick that up.");
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>drop throw</NAME>
        <CODE>
          "{last_huh}  drop/throw any";
          "a drop \"verb\" that works for non-$things.";
          set_task_perms(caller_perms());
          if (dobj == $nothing)
          player:tell(verb, " what?");
          elseif ($command_utils:object_match_failed(dobj, dobjstr))
          "...lose...";
          elseif (dobj.location != player)
          player:tell("You don't have that.");
          elseif (!player.location:acceptable(dobj))
          player:tell("You can't drop that here.");
          else
          dobj:moveto(player.location);
          if (dobj.location == player.location)
          player:tell_lines((verb[1] == "d") ? "Dropped." | "Thrown.");
          player.location:announce(player.name, (verb[1] == "d") ? " dropped " | " threw away ", dobj.name, ".");
          else
          player:tell_lines("You can't seem to drop that here.");
          endif
          endif
        </CODE>
      </VERB>
    </OBJECT>
    <OBJECT ID="obj12"  OWNER="obj2" LOCATION="obj-1">
      <NAME>Guest Log</NAME>
      <PROPERTY OWNER="obj2" >
        <NAME>connections</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" >
        <NAME>max_entries</NAME>
        <VALUE>199</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c">
        <NAME>key</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>aliases</NAME>
        <VALUE>{"Guest Log"}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>description</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>object_size</NAME>
        <VALUE>{3722, 919123667}</VALUE>
      </PROPERTY>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>enter</NAME>
        <CODE>
          ":enter(who,islogin,time,site)";
          "adds an entry to the connection log for a given guest (caller).";
          if ($object_utils:isa(caller, $guest))
          $guest_log.connections = {{caller, @args}, @$guest_log.connections[1..min($guest_log.max_entries, $)]};
          else
          return E_PERM;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>last</NAME>
        <CODE>
          ":last([n,[guest_list]])";
          "print list of the last n entries in the guest log";
          " (use n=0 if you want all entries)";
          " optional second arg limits listing to the specified guest(s)";
          set_task_perms(caller_perms());
          {?howmany = 0, ?which = 0} = args;
          howmany = min(howmany || $maxint, length($guest_log.connections));
          if (!caller_perms().wizard)
          player:notify("Sorry.");
          else
          current = {};
          listing = {};
          last = 0;
          for c in ($guest_log.connections[1..howmany])
          if (which &amp;&amp; (!(c[1] in which)))
          elseif (c[2])
          "...login...";
          if (a = $list_utils:assoc(c[1], current))
          listing[a[2]][3] = c[3];
          current = setremove(current, a);
          else
          listing = {@listing, {c[1], c[4], c[3], $object_utils:connected(c[1]) ? -idle_seconds(c[1]) | 1}};
          last = last + 1;
          endif
          else
          "...logout...";
          listing = {@listing, {c[1], c[4], 0, c[3]}};
          last = last + 1;
          if (i = $list_utils:iassoc(c[1], current))
          current[i][2] = last;
          else
          current = {@current, {c[1], last}};
          endif
          endif
          $command_utils:suspend_if_needed(2);
          endfor
          su = $string_utils;
          player:notify(su:left(su:left(su:left("Guest", 20) + "Connected", 36) + "Idle/Disconn.", 52) + "From");
          player:notify(su:left(su:left(su:left("-----", 20) + "---------", 36) + "-------------", 52) + "----");
          for l in (listing)
          on = l[3] ? (ct = ctime(l[3]))[1..3] + ct[9..19] | "earlier";
          off = (l[4] &gt; 0) ? (ct = ctime(l[4]))[1..3] + ct[9..19] | ("  " + $string_utils:from_seconds(-l[4]));
          player:notify(su:left(su:left(su:right(tostr(strsub(l[1].name, "uest", "."), " (", l[1], ")  "), -20) + on, 36) + off, 52) + l[2]);
          $command_utils:suspend_if_needed(2);
          endfor
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>init_for_core</NAME>
        <CODE>
          if (caller_perms().wizard)
          pass(@args);
          this.connections = {};
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>find</NAME>
        <CODE>
          ":find(guest_id,time)";
          " =&gt; site name of guest logged in at that time";
          " =&gt; 0 if not logged in";
          " =&gt; E_NACC if this is earlier than the earliest guest recorded";
          set_task_perms(caller_perms());
          {who, when} = args;
          if (!caller_perms().wizard)
          raise(E_PERM);
          else
          found = (who in connected_players()) ? $string_utils:connection_hostname(who.last_connect_place) | 0;
          for c in ($guest_log.connections)
          if (c[3] &lt; when)
          return found;
          elseif (c[1] != who)
          "... different guest...";
          elseif (c[2])
          "...login...";
          if (c[3] == when)
          return found;
          endif
          found = 0;
          else
          "...logout...";
          found = c[4];
          endif
          endfor
          return E_NACC;
          endif
        </CODE>
      </VERB>
    </OBJECT>
    <OBJECT ID="obj15" FLAGS="r" OWNER="obj2" LOCATION="obj-1">
      <NAME>Limbo</NAME>
      <PROPERTY OWNER="obj2" PERMS="c">
        <NAME>key</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>aliases</NAME>
        <VALUE>{"The Body Bag"}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj2" PERMS="c r">
        <NAME>description</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>object_size</NAME>
        <VALUE>{2310, 919123668}</VALUE>
      </PROPERTY>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>acceptable</NAME>
        <CODE>
          what = args[1];
          return is_player(what) &amp;&amp; (!(what in connected_players()));
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>confunc</NAME>
        <CODE>
          (caller == #0) || raise(E_PERM);
          {who} = args;
          "this:eject(who)";
          if (!$recycler:valid(home = who.home))
          clear_property(who, "home");
          home = who.home;
          if (!$recycler:valid(home))
          home = who.home = $player_start;
          endif
          endif
          "Modified 08-22-98 by TheCat to foil people who manually set their home to places they shouldn't.";
          if ((!home:acceptable(who)) || (!home:accept_for_abode(who)))
          home = $player_start;
          endif
          try
          move(who, home);
          except (ANY)
          move(who, $player_start);
          endtry
          who.location:announce_all_but({who}, who.name, " has connected.");
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>who_location_msg</NAME>
        <CODE>
          return $player_start:who_location_msg(@args);
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>moveto</NAME>
        <CODE>
          "Don't go anywhere.";
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>eject</NAME>
        <CODE>
          if ($perm_utils:controls(caller_perms(), this))
          if ((what = args[1]).wizard &amp;&amp; (what.location == this))
          move(what, what.home);
          else
          return pass(@args);
          endif
          endif
        </CODE>
      </VERB>
    </OBJECT>
    <OBJECT ID="obj18" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
      <NAME>Verb Help DB</NAME>
      <PROPERTY OWNER="obj36" PERMS="c r">
        <NAME>help_msg</NAME>
        <VALUE>{"This is not a help database in the same way that children of $generic_help are. This object does the work when someone calls help in this way:", "", "    help &lt;object&gt;:&lt;verb&gt;", "", "It parses out the object and verb reference, pulls out the comments at the beginning of the verb, and returns them to the help system for nice display.", "", "    :find_topics(string)", "       tries to pull out an object:verb reference from string", "       returns {string} if successful", "       returns {} if not", "", "    :get_topic(string)", "       tries to pull out an object:verb reference from string (returns 0 if", "          it fails to do so)", "       tries to match the object", "       checks the object to see if the verb exists", "       pulls out the initial comments from the verb if they exist", "       returns a meaningful list of strings to be displayed to the player", "", "    :dump_topic(string)", "       does the same as :get_topic above, but returns the verb documentation", "          in dump form.", "----"}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="c">
        <NAME>key</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="c r">
        <NAME>aliases</NAME>
        <VALUE>{"verbhelp", "vh"}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="c r">
        <NAME>description</NAME>
        <VALUE>"A `help database' that knows about all of the documented verbs."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>object_size</NAME>
        <VALUE>{3946, 919123670}</VALUE>
      </PROPERTY>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>find_topics</NAME>
        <CODE>
          if ($code_utils:parse_verbref(what = args[1]))
          "... hey wow, I found it!...";
          return {what};
          else
          return {};
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>get_topic</NAME>
        <CODE>
          "Help facility for verbs that people have bothered to document.  If the argument is a verb specification, this retrieves the code and prints any documentation lines that might be at the beginning.  Returns true if the arg can actually be interpreted as a verb specification, whether or not it is a correct one.";
          set_task_perms(caller_perms());
          if (!(spec = $code_utils:parse_verbref(args[1])))
          return 0;
          elseif ($command_utils:object_match_failed(object = $string_utils:match_object(spec[1], player.location), spec[1]))
          return 1;
          elseif (!(hv = $object_utils:has_verb(object, spec[2])))
          return "That object does not define that verb.";
          elseif (typeof(verbdoc = $code_utils:verb_documentation(object = hv[1], spec[2])) == ERR)
          return tostr(verbdoc);
          elseif (typeof(info = `verb_info(object, spec[2]) ! ANY') == ERR)
          return tostr(info);
          else
          objverb = tostr(object.name, "(", object, "):", strsub(info[3], " ", "/"));
          if (verbdoc)
          return {tostr("Information about ", objverb), "----", @verbdoc};
          else
          return tostr("No information about ", objverb);
          endif
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>dump_topic</NAME>
        <CODE>
          set_task_perms(caller_perms());
          if (!(spec = $code_utils:parse_verbref(args[1])))
          return E_INVARG;
          elseif ($command_utils:object_match_failed(object = $string_utils:match_object(spec[1], player.location), spec[1]))
          return E_INVARG;
          elseif (!(hv = $object_utils:has_verb(object, spec[2])))
          return E_VERBNF;
          elseif (typeof(vd = $code_utils:verb_documentation(hv[1], spec[2])) != LIST)
          return vd;
          else
          return {tostr(";$code_utils:set_verb_documentation(", $code_utils:corify_object(hv[1]), ",", $string_utils:print(spec[2]), ",$command_utils:read_lines())"), @$command_utils:dump_lines(vd)};
          endif
        </CODE>
      </VERB>
    </OBJECT>
    <OBJECT ID="obj30" FLAGS="f r" OWNER="obj36" LOCATION="obj-1">
      <NAME>Generic Help Database</NAME>
      <PROPERTY OWNER="obj36" PERMS="c r">
        <NAME>index</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>index_cache</NAME>
        <VALUE>{}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="c">
        <NAME>key</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="c r">
        <NAME>aliases</NAME>
        <VALUE>{"Generic Help Database"}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="c r">
        <NAME>description</NAME>
        <VALUE>"A help database of the standard form in need of a description. See `help $generic_help'..."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>object_size</NAME>
        <VALUE>{9453, 919123676}</VALUE>
      </PROPERTY>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>find_topics</NAME>
        <CODE>
          "WIZARDLY";
          if (args)
          "...check for an exact match first...";
          search = args[1];
          if (`$object_utils:has_property(parent(this), search) ! ANY')
          if ($object_utils:has_property(this, " " + search))
          return {search};
          endif
          elseif ($object_utils:has_property(this, search))
          return {search};
          endif
          "...search for partial matches, allowing for";
          "...confusion between topics that do and don't start with @, and";
          ".. confusion between - and _ characters.";
          props = properties(this);
          topics = {};
          if (search[1] == "@")
          search = search[2..$];
          endif
          search = strsub(search, "-", "_");
          if (!search)
          "...don't try searching for partial matches if the string is empty or @";
          "...we'd get *everything*...";
          return {};
          endif
          for prop in (props)
          if (((i = index(strsub(prop, "-", "_"), search)) == 1) || ((i == 2) &amp;&amp; index(" @", prop[1])))
          topics = {@topics, (prop[1] == " ") ? prop[2..$] | prop};
          endif
          endfor
          return topics;
          else
          "...return list of all topics...";
          props = setremove(properties(this), "");
          for p in (`$object_utils:all_properties(parent(this)) ! ANY =&gt; {}')
          if (i = (" " + p) in props)
          props = {p, @listdelete(props, i)};
          endif
          endfor
          return props;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>get_topic</NAME>
        <CODE>
          "WIZARDLY";
          {topic, ?dblist = {}} = args;
          if (`$object_utils:has_property(parent(this), topic) ! ANY')
          text = `this.(" " + topic) ! ANY';
          else
          text = `this.(topic) || this.(" " + topic) ! ANY';
          endif
          if (typeof(text) == LIST)
          if (text &amp;&amp; (text[1] == (("*" + (vb = strsub(text[1], "*", ""))) + "*")))
          text = `this:(vb)(listdelete(text, 1), dblist) ! ANY';
          endif
          endif
          return text;
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>sort_topics</NAME>
        <CODE>
          ":sort_topics(list_of_topics) -- sorts the given list of strings, assuming that they're help-system topic names";
          buckets = "abcdefghijklmnopqrstuvwxyz";
          keys = names = $list_utils:make(length(buckets) + 1, {});
          for name in (setremove(args[1], ""))
          key = index(".@", name[1]) ? name[2..$] + " " | name;
          k = index(buckets, key[1]) + 1;
          bucket = keys[k];
          i = $list_utils:find_insert(bucket, key);
          keys[k] = listinsert(bucket, key, i);
          names[k] = listinsert(names[k], name, i);
          $command_utils:suspend_if_needed(0);
          endfor
          return $list_utils:append(@names);
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>columnize</NAME>
        <CODE>
          ":columnize(@list_of_strings) -- prints the given list in a number of columns wide enough to accomodate longest entry. But no more than 4 columns.";
          longest = $list_utils:longest(args);
          for d in ({4, 3, 2, 1})
          if ((79 / d) &gt;= length(longest))
          return $string_utils:columnize_suspended(0, args, d);
          endif
          endfor
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>forward pass</NAME>
        <CODE>
          "{\"*forward*\", topic, @rest}  =&gt; text for topic from this help db.";
          "{\"*pass*\",    topic, @rest}  =&gt; text for topic from next help db.";
          "In both cases the text of @rest is appended.  ";
          "@rest may in turn begin with a *&lt;verb&gt;*";
          {text, ?dblist = {}} = args;
          if (verb == "forward")
          first = this:get_topic(text[1], dblist);
          elseif ((result = $code_utils:help_db_search(text[1], dblist)) &amp;&amp; ((db = result[1]) != $ambiguous_match))
          first = db:get_topic(result[2], dblist[(db in dblist) + 1..$]);
          else
          first = {};
          endif
          if (2 &lt;= length(text))
          if (text[2] == (("*" + (vb = strsub(text[2], "*", ""))) + "*"))
          return {@first, @`this:(vb)(text[3..$], dblist) ! ANY =&gt; {}'};
          else
          return {@first, @text[2..$]};
          endif
          else
          return first;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>subst</NAME>
        <CODE>
          "{\"*subst*\", @text} =&gt; text with the following substitutions:";
          "  \"...%[expr]....\" =&gt; \"...\"+value of expr (assumed to be a string)+\"....\"";
          "  \"%;expr\"         =&gt; @(value of expr (assumed to be a list of strings))";
          newlines = {};
          for old in (args[1])
          new = "";
          bomb = 0;
          while ((prcnt = index(old, "%")) &amp;&amp; (prcnt &lt; length(old)))
          new = new + old[1..prcnt - 1];
          code = old[prcnt + 1];
          old = old[prcnt + 2..$];
          if (code == "[")
          prog = "";
          while ((b = index(old + "]", "]")) &gt; (p = index(old + "%", "%")))
          prog = (prog + old[1..p - 1]) + old[p + 1];
          old = old[p + 2..$];
          endwhile
          prog = prog + old[1..b - 1];
          old = old[b + 1..$];
          value = $no_one:eval_d(prog);
          if (value[1])
          new = tostr(new, value[2]);
          else
          new = tostr(new, toliteral(value[2]));
          bomb = 1;
          endif
          elseif ((code != ";") || new)
          new = (new + "%") + code;
          else
          value = $no_one:eval_d(old);
          if (value[1] &amp;&amp; (typeof(r = value[2]) == LIST))
          newlines = {@newlines, @r[1..$ - 1]};
          new = tostr(r[$]);
          else
          new = tostr(new, toliteral(value[2]));
          bomb = 1;
          endif
          old = "";
          endif
          endwhile
          if (bomb)
          newlines = {@newlines, new + old, tostr("@@@ Helpfile alert:  Previous line is messed up; notify ", this.owner.wizard ? "" | tostr(this.owner.name, " (", this.owner, ") or "), "a wizard. @@@")};
          else
          newlines = {@newlines, new + old};
          endif
          endfor
          return newlines;
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>index</NAME>
        <CODE>
          "{\"*index*\" [, title]}";
          "This produces a columnated list of topics in this help db, headed by title.";
          $command_utils:suspend_if_needed(0);
          title = args[1] ? args[1][1] | tostr(this.name, " (", this, ")");
          su = $string_utils;
          return {"", title, su:from_list($list_utils:map_arg(su, "space", su:explode(title), "-"), " "), @this:columnize(@this:sort_topics(this:find_topics()))};
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>initialize</NAME>
        <CODE>
          pass(@args);
          if ($perm_utils:controls(caller_perms(), this))
          this.r = 1;
          this.f = 0;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>verbdoc</NAME>
        <CODE>
          "{\"*verbdoc*\", \"object\", \"verbname\"}  use documentation for this verb";
          set_task_perms(this.owner);
          if (!valid(object = $string_utils:match_object(args[1][1], player.location)))
          return E_INVARG;
          elseif (!(hv = $object_utils:has_verb(object, vname = args[1][2])))
          return E_VERBNF;
          else
          return $code_utils:verb_documentation(hv[1], vname);
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>dump_topic</NAME>
        <CODE>
          try
          text = this.(fulltopic = args[1]);
          return {tostr(";;", $code_utils:corify_object(this), ".(", toliteral(fulltopic), ") = $command_utils:read_lines()"), @$command_utils:dump_lines(text)};
          except error (ANY)
          return error[1];
          endtry
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>objectdoc</NAME>
        <CODE>
          "{\"*objectdoc*\", \"object\"} =&gt; text for topic from object:help_msg";
          if (!valid(object = $string_utils:literal_object(args[1][1])))
          return E_INVARG;
          elseif (!($object_utils:has_verb(object, "help_msg") || $object_utils:has_property(object, "help_msg")))
          return E_VERBNF;
          else
          return $code_utils:verb_or_property(object, "help_msg");
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>find_index_topics</NAME>
        <CODE>
          ":find_index_topic([search])";
          "Return the list of index topics of this help DB";
          "(i.e., those which contain an index (list of topics)";
          "this DB, return it, otherwise return false.";
          "If search argument is given and true,";
          "we first remove any cached information concerning index topics.";
          {?search = 0} = args;
          if (this.index_cache &amp;&amp; (!search))
          "...make sure every topic listed in .index_cache really is an index topic";
          for p in (this.index_cache)
          if (!("*index*" in `this.(p) ! ANY =&gt; {}'))
          search = 1;
          endif
          endfor
          if (!search)
          return this.index_cache;
          endif
          elseif ($generic_help == this)
          return {};
          endif
          itopics = {};
          for p in (properties(this))
          if ((h = `this.(p) ! ANY') &amp;&amp; ("*index*" in h))
          itopics = {@itopics, p};
          endif
          endfor
          this.index_cache = itopics;
          return itopics;
        </CODE>
      </VERB>
      <OBJECT ID="obj19" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
        <NAME>Core Utility Help</NAME>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$login</NAME>
          <VALUE>{"$login", "------", "This object manages command parsing for unconnected players and governs the initiation of an actual connection.  There are verbs pertaining to registration, controlling player creation, and doing site-locks (see `help blacklist' on $wiz_help).", "", "COMMANDS FOR UNCONNECTED PLAYERS", "", "Recall that for each line that an unconnected player types, the server parses that line into words (the same way normal commands are parsed into a list of words that is then assigned to `args') and then #0:do_login_command is called.", "", "  :parse_command (@args) =&gt; {verb, @args}", "    given the sequence of arguments that were fed to #0:do_login_command", "    this returns the name of a verb on $login to be called together with a ", "    list of arguments to be passed to it.", "", "By default this just returns args iff args[1] names an actual verb on $login that is +x and has args {\"any\",\"none\",\"any\"}.  Otherwise, it returns one of", "", "  .blank_command   -- verb to call if command line is empty", "  .bogus_command   -- verb to call if command line otherwise unintelligible", "", "In both cases :parse_command returns a verbname followed by the entire args list passed to it (including the would-be verb at the beginning if any).", "", "Currently the following verbs are available to non-connected players", "", "  h*elp @h*elp       -- print .welcome_message", "  ?                  -- print a short list of available commands", "  w*ho @w*ho         -- print a list of logged in players (excluding wizards)", "  co*nnect @co*nnect -- connect to an existing player", "  cr*eate @cr*eate   -- create a new player", "  up*time @up*time   -- tell how long the server has been running", "  version @version   -- tell which version of the server is running", "  q*uit @q*uit       -- logoff", "", "Adding a new command is fairly straightforward; just create a verb on $login, making sure a previous verb doesn't already match the name you want to give it.  Then give it args of \"any\" \"none \"any\" and make sure it is +x.  Such a verb should begin with `if (caller != #0) return E_PERM; ...' so as to prevent anyone other from a not-logged-in player from making use of it.", "", "CUSTOMIZATIONS", "", "  .welcome_message ", "    -- the message for \"help\" to print.", "  .create_enabled ", "    == 0 =&gt; @create prints .registration_string if one tries to use it", "    == 1 =&gt; anyone from a non-blacklisted site (see `help blacklist')", "            may use @create to make a new player", "", "  .registration_address", "    -- an email address for character creation requests", "  .registration_string  ", "    -- string to print to players to give them information about how to get ", "       a character created for them, .registration_address is substituted ", "       for %e, % for %%", "  .newt_registration_string", "    -- string to print to @newted players (see `help @newt').", "       same substitutions as for .registration_string.", "", "  .max_connections", "    -- integer representing the maximum connected players permitted on this moo.", "  .connection_limit_msg", "    -- string printed out when this is reached.", "  .lag_exemptions", "    -- list of non-wizard players who may login anyway.", "", "Other verbs", "   :registration_string()      =&gt; .registration_string with substitutions", "   :newt_registration_string() =&gt; .newt_registration_string with substitutions", "   :player_creation_enabled(connection) ", "       decides whether someone on connection should be allowed to create ", "       a player.  If you decide this shouldn't depend strictly on the blacklist", "       and on the value of .create_enabled, here's where the extra code can go.", "   :check_for_shutdown()", "       prints a warning message to append to the login banner in the event ", "       that the server will be going down soon.", "   :check_player_db()", "       prints a warning message to append to the login banner in the event ", "       that $player_db is being reloaded to warn players that their character", "       names might not be recognized.", "", "SITE LOCKS", "see `help blacklist'", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$container</NAME>
          <VALUE>{"The Generic Container (for programmers)", "", "In addition to the command verbs described under `help containers'", "and the _msg properties described in `help container-messages',", "the following verbs and properties are available for use within programs", "", ".opened == TRUE iff the container is open", ".dark   == TRUE iff the contents of the container may be seen", ".opaque -- describes the correlation between .open and .dark", "   == 0  container is always !dark", "   == 1  container is dark iff it is closed", "   == 2  container is always dark              ", "", ":set_opaque(newvalue)   ", "  changes the .opaque value for the container", "  =&gt; newvalue or E_PERM or E_INVARG", "", ":set_opened(newvalue)   ", "  opens/closes the container (updates .open and .dark) according to newvalue", "  =&gt; newvalue or E_PERM", "", ":is_openable_by(player) ", " what the :open command uses to test whether the player should be able to open", " the container.  By default this refers to .open_key  (set by", " @(un)lock_for_open), but the object owner is free to customize this.", "", "N.B.:  There is no way to directly set .dark; .dark can be changed only by ", "changing one of .opaque or .opened.  Use :set_opaque(0) and :set_opaque(2)", "to have .dark change independently of the value of .opened."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$mail_agent</NAME>
          <VALUE>{"$mail_agent", "", "This object contains a two distinct sets of routines:", "", "  1.  utilities for performing basic mailsystem functions, e.g.,", "      matching on recipient names, resolving mail forwarding, ", "      formatting messages, sending messages", "", "Recipient Matching", "", "match           - match on a $mail_recipient", "match_recipient - match on either a $mail_recipient or a player", "match_failed    - print angry messages to the user for $failed/ambiguous_match", "", "look_self  - provides a list of available $mail_recipients", "check_names", "touch", "accept", "", "Message Format", "", "make_message        - produces a message in the canonical transmission format", "name                - single recipient     =&gt; string for address field", "name_list           - list of recipients   =&gt; string for address field", "parse_address_field - address field string =&gt; object list", "", "Sending Messages", "", "send_message  - advertised message sending routine.", "raw_send      - raw message sending routine ", "                (only called by $mail_editor:send and this:send_message)", "resolve_addr  - converts a given list recipients into a list of actual ", "                recipients and objects to be notified.", "sends_to      - Does X forward (transitively) to Y", "", "Mail Options", "", "option         ", "option_verbose", "", "  2.  canonical versions of mail_recipient verbs", "", "Ideally, the verbs to perform operations on a given mail recipient would be located on the recipient itself, except for the fact that these verbs also need to be located on players, which for various reasons, shouldn't be children of $mail_recipient.  Multiple inheritance would solve our problems, but we don't have it yet.  Ergo, both $mail_recipient and $player refer to the following verbs here:", "", "display_seq_full     print entire text of messages  (@read)", "display_seq_headers  print headers of messages      (@mail)", "rm_message_seq       remove messages                (@rmm)", "undo_rmm             undo last rm_message_seq       (@unrmm)", "expunge_rmm          flush removed messages         (@unrmm expunge)", "list_rmm             list removed messages          (@unrmm list)", "renumber             renumber messages              (@renumber)", "msg_summary_line     msg header =&gt; display_seq_headers/list_rmm summary line", "", "parse_message_seq    command line msg sequence spec =&gt; message sequence", "new_message_num      =&gt; message number of next new message", "length_all_msgs      =&gt; number of messages (total)", "length_num_le        =&gt; number of messages numbered &lt;= some number", "length_date_le       =&gt; number of messages dated &lt;= some date", "exists_num_eq        =&gt; true iff there exists a messsage with the given number", "from_msg_seq         =&gt; message sequence of msgs from given sender(s)", "to_msg_seq           =&gt; message sequence of msgs to given recipient(s)", "subject_msg_seq      =&gt; message sequence of msgs with subjects containing text", "body_msg_seq         =&gt; message sequence of msgs with bodies containing text", "messages_in_seq      =&gt; list of {message number, message} pairs", "", "messages             == :messages_in_seq(1,:length_all_msgs()+1)   (obsolete)", "", "The $mail_agent versions of these verbs are set_task_perms(caller_perms()) and perform their operations on caller, which in turn is assumed to have done any necessary security checks."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>MR-subscribing</NAME>
          <VALUE>{"Subscribing to Mail Recipients", "------------------------------", "There are two notions of being \"subscribed\" to a mailing list/recipient.", "", "(1) Hard subscribed == being on the recipient's .mail_forward list so that mail sent to this list is forwarded to one's own .messages as well (see `help mail-forwarding').", "", "(2) Soft subscribed == keeping track of a current message for this recipient and (optionally) being on the recipient's .mail_notify list.", "", "", "Each player has a .current_message property that contains, for each recipient the player cares to keep track of, a current message number and a last read date.", "", "player:current_message(rcpt)                 (somewhat obsolete)", " =&gt; player's current message number for rcpt ", "", "player:get_current_message(rcpt) ", " =&gt; player's {current message number for rcpt, last-read-date for rcpt}", "", "player:make_current_message(rcpt)", " =&gt; adds a current_message entry for rcpt  (NOOP if rcpt == player)", "", "player:set_current_message(rcpt,n|E_NONE,[,date])", " =&gt; sets player's current message number for rcpt to n iff n!=E_NONE", "    updates the last-read-date for rcpt to date iff date &gt; last-read-date", "", "player:kill_current_message(rcpt)", " =&gt; removes current-message info for rcpt  (NOOP if rcpt == player)", "", "", "On $mail_recipient, .mail_forward and .mail_notify are -c so one needs to use the following verbs to actually modify them.", "", "    :add_forward(@new_recipients)", "    :delete_forward(@recpients)", "    :add_notify(@new_notifiees)", "    :delete_notify(@notifiees)", "", "A recipient's owner is, of course, allowed to make arbitrary changes to .mail_forward and .mail_notify.  However, the default versions of these verbs also allow any player to add him/herself to a recipient's .mail_forward or .mail_notify if the recipient is readable (see `help MR-access') by him/her.", "", "Likewise any player may use the :delete* verbs to delete him/herself from any .mail_forward/.mail_notify list, regardless of his actual access to the list."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>MR-naming</NAME>
          <VALUE>{"One may always refer to a list by its object number.  In order to refer to it by name, it must be contained in $mail_agent, which holds all mailing lists, i.e., those that you want others to be able to refer to by name.", "", "The .aliases field holds the names by which one may refer to the list, but only those names not containing spaces actually count for anything.  As with certain other types of objects (e.g., players), set_aliases() needs to be called in order to change the .aliases field.", "", "$mail_agent:match(name) ", "    is the canonical way to obtain the objectid of a mailing list ", "    given the name (\"*\" is assumed; an initial \"*\" will be dropped).", "", "$mail_agent:match_recipient(name) ", "    is the canonical way to obtain the objectid of a list or player", "    matching the given name.  An initial \"*\" indicates that this is ", "    supposed to be a list.", "", "$mail_agent:match_failed(objid,name) ", "    is the mail_recipient counterpart to $command_utils:object_match_failed"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>MR-access</NAME>
          <VALUE>{"Controlling Access to Mail Recipients", "-------------------------------------", ":is_writable_by(one) - one may alter/add/remove saved messages", ":is_readable_by(one) - one may read messages.", ":is_usable_by(one)   - one may send to this list", "", "By default, these verbs refer to the following properties:", "", "writers   - list of players other from the owner who can do anything", "readers   - if == 1, indicates a public mailing list.", "            list of additional readers (by default anyone who receives mail ", "            sent to the list can read the saved messages).", "moderated - if false, indicates a normal mail recipient everyone can send to.", "            otherwise this should be a list of approved senders.", "", "Terminology:", "  A mailing list is \"public\" if everyone can read it.", "  A mailing list is \"moderated\" if not everyone can send to it.", "", "Note that while being able to write to a recipient implies being able to read from it or send to it, neither of read-ability or send-ability implies the other.", "", "It is highly recommended that if you are creating custom mail recipients with variable reader/sender lists, i.e., you find you need to write your own :is_readable/usable/writabe_by verbs, you are best off if such verbs are of the form", "", "  return pass(@args) || &lt;&lt; your_test(args[1]) &gt;&gt;", "", "and have .writers == .readers == {} and .moderated == 1.  This will ensure", " (1) wizards having write access", "     --- necessary in order for :receive_message to work", " (2) writers being able to read and send (the converse being a ludicrous ", "     situation), ", " (3) persons on the mail_forward list of someone with reader access will also", "     have read access (convenient)."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$mail_recipient</NAME>
          <VALUE>{"Generic Mail Recipient", "----------------------", "A \"mail recipient\" is, by definition, an object that can be sent mail.", "Mail recipients must either be players or descendants of $mail_recipient.", "", "One source of confusion is that the terms \"mail recipient\", \"mail folder\", \"mailing list\", and \"mail collection\" really all refer to the same kind of object.  It so happens that $mail_recipient serve several distinct functions and we tend to use whatever term happens to best match the application under discussion, e.g., it's a \"mailing list\" if we're playing with its .mail_forward property but it's also a \"mail folder\" if we're examining the messages that have been saved in it.", "", "Note that, by default, a freshly created recipient is accessibly only by you.  If you wish to make a publically accessible recipient, set .readers=1.  Furthermore, if you want to allow a message on your recipient to be removed by its sender without your intervention, set .rmm_own_msgs=1.  Finally, in order for other players to be able to refer to your recipient by name, the object must reside in $mail_agent.  $mail_agent will not accept the object unless it has an actual description and a name distinct from all other mail recipient names/aliases.", "", "Topics:", "", "  MR-access       -- controlling read, write and send access to a recipient", "  MR-naming       -- naming conventions and how to match on recipient names", "  MR-sequences    -- message sequence arguments to $mail_recipient verbs", "  MR-reading      -- reading messages/headers on recipients", "  MR-searching    -- searching message lists for patterns in certain fields", "  MR-writing      -- removing and renumbering messages", "  MR-subscribing  -- updating .mail_forward, .mail_notify ", "                       and the story of .current_message", "  MR-expiration   -- expiring and netmailing messages from recipients"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>receiving-mail</NAME>
          <VALUE>{"Receiving Mail", "--------------", "By definition a recipient \"receives\" a mail message when its :receive_message verb is called with that message as an argument.", "", ":new_message_num()", "=&gt; number that will be assigned to the next incoming message.", "By default this returns the maximum of the message numbers appearing in ", "messages or .messages_going, incremented by 1.  If the recipient is a player", "then the value returned will be 1 higher if it conflicts with the player's ", "current message number for him/herself.", "", ":receive_message(msg,sender)", "By default this first calls this:new_message_num to obtain a message number to assign to the incoming message and then appends {num,msg} to this.messages.  ", "`sender', the original sender, is supplied in case one wants different ", "action depending on who is sending the message (e.g., mail-gagging).", "The return value should be an error or string if :receive_message is considered to have failed in some way.  Otherwise, a number should be returned --- this number is given to any :notify_mail routines that are called and is expected to either be 0 or the number assigned to the incoming message.", "", "Note that :receive_message can do arbitrary things, including resending the same message to a new destination.  Hacking :receive_message to resend messages is different from using .mail_forward in the following respects", "  (1) the resent message is considered to be a distinct message having this ", "      object as its \"author\" --- i.e., the From: line will necessarily be ", "      different.", "  (2) since this \"forwarding\" is invisible to the mailsystem, ", "      there is no protection against loops and multiple copies.", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>mail-format</NAME>
          <VALUE>{"Mail Transmission Format", "------------------------", "There is a standard message format used for transmitting messages.  This is the format that $mail_editor:make_message produces, and that :receive_message verbs on players and $mail_recipients expect to see.  The (currently experimental) @refile and @copym commands also use this format to transfer messages.", "", "This *transmission* format is distinct from the *storage* format, though, for convenience this same format is often used as well for storing messages in player collections and ordinary $mail_recipient children though, in general, there is no requirement that this be the case.", "", "A transmitted message is a list in the following form", "", "   date (number),", "     the time() value at the time the message was sent.", "   from (string),", "     the sending object (address list form)", "     if this is not a player, an additional header will indicate the ", "     current ownership of the object.", "   to  (string),", "     recipients (address list form) which can either be players ", "     or $mail_recipient descendents.", "   subject (string),", "     subject of the message, or \" \" if there is no subject,", "  @additional optional headers (list of strings),", "     each header has the form \"&lt;header-name&gt;: text\" where &lt;header-name&gt;: ", "     is padded out to a width of 10 columns for the convenience of ", "     :display_message.  Currently \"Reply-to: &lt;address list&gt;\" is the only ", "     additional header in use,", "   \"\",", "  @body of message (list of strings)", "", "Note that the from, to and subject lines do *not* include a header name like \"From:\", \"To:\", or \"Subject:\".  The @'s indicate that the lists in question get spliced in (as usual), thus the entire message is a list whose first element is a number and the rest are strings.", "", "The address lists that appear in the from and to lines is a string in the form a sequence of object ids, each enclosed in parentheses and preceded by optional text, e.g.,", "", "  \"*Core-DB-Issues (#8175), Rog (#4292), and Haakon (#2)\"", "", "The text is intended to give the current name of each object for the benefit of human readers, but is actually ignored by all header parsing routines.  The convention is that the text is either a player name or a * followed by a mailing list name."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>mail-resolve</NAME>
          <VALUE>{"Resolving Mail Forwarding &amp; Notification", "----------------------------------------", "For each recipient of a given mail message, the following two verbs are called to determine where the message should actually go and who should be notified about it:", "", ":mail_forward([from])", "    should return either", "     . a list of objects (either players or $mail_recipients)", "         to which mail for this recipient will be redirected.", "     . a string error message to be printed to the player sending the message.", "         If this recipient is one of the original destinations (i.e., not the", "         result of a previous forwarding), no mail is actually sent.", "", "    If :mail_forward returns a nonempty list, the recipient itself will *not*", "    actually receive the mail message unless it is included in the list.", "    #-1 is allowed to be on the list; it is ignored but does make the list ", "    nonempty.  Thus, having :mail_forward() return {#-1} is the canonical way", "    to have arriving mail disappear without being kept or forwarded.", "", ":mail_notify([from]) ", "    should return a list of objects that are to be told about any mail sent ", "    to this recipient (whether or not the recipient actually receives it).", "    Said objects must have a :notify_mail verb, but other from that, there ", "    is no restriction on what these can be.", "", "    object:notify_mail is called with the arguments ", "    (sender,recipients,msgnumbers) where ", "      recipients  == list of recipients including object in .mail_notify", "      msgsnumbers == corresponding list of :receive_message return values", "                 (or 0 if :receive_message is not actually called, which", "                  will be the case if the recipient forwards without keeping)", "", "When called as part of a mail send, the `from' argument is the immediate predecessor on the forwarding chain.  The default versions of these verbs return the values of .mail_forward and .mail_notify respectively (pronoun_subbing if the value is a string), unless this is a moderated mailing list and `from' is an unapproved sender (see `help MR-access') in which case the following verbs are called instead:", "", ":moderator_forward(from) ", "    what :mail_forward should return for mail coming from unapproved senders", "    This returns .moderator_forward (pronoun_subbed if a string) by default.", "", ":moderator_notify(from)", "    what :mail_notify should return for mail coming from unapproved senders", "    This returns .moderator_notify (pronoun_subbed if a string) by default.", "", "Since the :mail_forward verbs only see the previous sender in the forwarding chain, if, e.g, B is moderated but A can send to B (i.e., B:mail_forward(A) returns an actual list), then any mail sent to A goes to B even if the original sender isn't normally allowed to send to B directly.", "", "These verbs should all allow `from' to be omitted in which case they should return as if `from' were a generic approved sender (e.g., wizard).", "", "It should rarely be necessary to actually modify any of :*_forward/*_notify verbs, since one has a fair amount of control over their behavior via the following properties", "", "  .mail_forward", "  .mail_notify", "  .moderated          (see `help MR-access')", "  .moderator_forward", "  .moderator_notify"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>sending-mail</NAME>
          <VALUE>{"Sending Mail", "------------", "$mail_agent:send_message(from,recipients,headers,body)", "  from:        sender of the message ", "               (this must be you or something you own; otherwise =&gt; E_PERM)", "  recipients:  object or list of objects (must all be players or ", "               $mail_recipient descendants)", "  headers:     either a string (contents of the Subject: line) ", "               or a list {subject,replytos} replytos is a list ", "               of objects designated to receive replies.", "               Use {\"\",replytos} to have a Reply-to: without a Subject:", "", "This is the canonical way to send a mail message from a program.", "This calls $mail_agent:make_message to format the arguments into an actual message (see `help mail-format') and then $mail_agent:raw_send to do the actual sending which goes as follows:", "", "  (1) Call :mail_forward on all recipients add any new recipients thus obtained to final recipient list, keep calling mail:forward on the new recipients until we obtain no additional recipients.  If one of the initial recipients is invalid, is not a player or $mail_recipient, or has its mail_forward return a string error, then we print the error message and abort at this point with no mail being sent.  If one of the later recipients bombs similarly, error messages are printed, but in this case mail still goes out to the other recipients.", "", "  (2) Call :mail_notify on all recipients encountered in stage (1) to get a list of objects to notify.", "", "  (3) All final recipients receive the message (see `help receive-mail')", "  (4) All notifications are delivered (using :notify_mail())", "", "We return {0, @failed_recipients} if we bombed out at step 1.", "Otherwise return {1, @actual_rcpts} indicating what mail was sent."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>mail-system</NAME>
          <VALUE>{"Mail System", "-----------", "The following topics describe the guts of the LambdaCore mail system", "", "sending-mail     -- how to send mail from a program; what happens.", "mail-forwarding  -- how to do mail forwarding/notification (the simple version)", "mail-resolve     -- how mail forwarding/notification works, in gory detail", "receiving-mail   -- what :receive_message should do", "mail-format      -- format of transmitted messages", "mail-command-parsing   (TODO) -- routines for parsing mail commands", "", "$mail_recipient  -- generic non-player mail recipient", "$mail_agent      -- mail utility object"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$player_db</NAME>
          <VALUE>{"", "Database of Players", "-------------------", "This is an instance of the Generic Database ($generic_db) that", "holds the {name/alias,#objectid} pairs for every ", "name and alias of every player in the MOO.", "", "Verbs supplied include", "", "  :find(string)        =&gt; player or $ambiguous_match or $failed_match", "  :find_exact(string)  =&gt; player or $failed_match (does not do partial matches)", "  :find_all(string)    =&gt; list of all matching players", "", "  :insert(string,player) ", "       records that string is now a name or alias of player", "  :delete(string) ", "       removes string from the db", "  :available(string)", "       returns 1 if string is available as a player name or alias,", "       an object if string is in use, or 0 if string is otherwise unavailable.", "  :load()", "       resets the db, inserting all current player names and aliases.", "", "The internal representation and all of the above verbs (except :load() and", ":available()) are as described for $generic_db.", "", "It should be noted that for any application that involves resolving a player name from a command line, you should be using $string_utils:match_player() rather than $player_db:find(), since the former will deal correctly with other ways of referring to players apart from their names and aliases (e.g., literal object numbers, \"me\", \"$no_one\"...).", "", ":load() needs to be done periodically as it is possible for the player db ", "to get out of synch with reality.  In particular, there is currently no way", "to block someone writing his own player :recycle() verb that neglects to ", "remove his names from the player db.", "", "While a :load() is in progress the .frozen property is set to 1 to indicate that any results of :find*() are not to be trusted."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>core-index</NAME>
          <VALUE>{"*index*", "Core Utility Help Topics"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>object-matching</NAME>
          <VALUE>{"", "Which :match...() Verb Do I Call?", "---------------------------------", "There are many situations where one wishes to obtain an object from a room or a player's .contents whose name/aliases matches a particular string.  There are four main verbs available for this and it is important to understand the distinctions between them and how they are supposed to be used.", "", "(*)  LOC:match(\"X\")", "     -- what you get looking for something that is inside LOC and named \"X\".", "        By default, this looks through LOC.contents to find a unique object ", "        having a name or alias that has \"X\" as a prefix.", "", "Essentially, you can think of :match as a contents-matching verb, though, e.g., for rooms you also get matches on exits as well.", "", "(*)  LOC:match_object(\"X\", YOU)           [YOU defaults to player]", "(*)  YOU:my_match_object(\"X\", LOC)        [LOC defaults to player.location]", "     -- what YOU get being located at LOC and looking for something named \"X\".", "        By default these both return $string_utils:match_object(\"X\",LOC,YOU)", "", "(*)  $string_utils:match_object(\"X\", LOC, YOU) ", "   -- what you *would* get *if* YOU were a typical player, YOU were inside LOC,", "      YOU were looking for something named \"X\", *and* LOC were a typical place.", "", "In other words, $string_utils:match_object describes the :match_object() algorithm for \"typical places\" and the :my_match_object for \"typical players\":", "", "    (1)  check for \"X\" being one of \"\", \"me\", \"here\", \"$something\", or \"#n\"", "    (2)  try YOU:match(\"X\") i.e., something in your inventory (maybe)", "    (3)  try LOC:match(\"X\") i.e., some object in the room (maybe)", "", "The distinction between these location:match_object and player:my_match_object has to do with whether the player or the location should determine what the matching algorithm is.  Which one you should use depends on the command that you are writing.  If you are writing a command with a virtual-reality flavor, then you should be respecting the room owner's idea of which objects you can \"see\" and thus the command should be calling the location's :match_object verb.  If you are writing a building/programming command where it is appropriate for the player to determine the matching algorithm  --- whether because the current location is irrelevant, not to be trusted, or both --- then the player's :my_match_object verb should be called.", "", "Examples:", "", "  `look diamond in box'", "      calls box:match(\"diamond\").  This is a match on the contents of box.", "", "  `take ball', ", "      calls player.location:match_object(\"ball\")", "      to determine which \"ball\" to take.  Note that if the room is dark, ", "      we might not be able to find any \"ball\".", "", "  `@program widget:foo', ", "      calls player:my_match_object(\"widget\") to get the player's own idea", "      of what \"widget\" should be.  Note that if I were carrying something ", "      named \"widget\" and expecting to be programming a :foo() verb on it,", "      it would be potentially disastrous should the room where I am decide", "      for me to be programming something else (not even necessarily ", "      called \"widget\").", "", "Object Matching Failures", "------------------------", "As with other matching routines, one gets back ", "", "  $failed_match in the case of no matching object", "  $ambiguous_match in the case of more than one matching object", "  $nothing in the case of a blank string argument", "", "or an object-id.  In these first 3 cases, one usually wants to translate these nonresults to the player; this is what $command_utils:object_match_failed.  The standard idiom to mimic what the builtin parser does, say, with the direct object is", "", "  dobj = foo:match_???(dobjstr);", "  if($command_utils:object_match_failed(dobj, dobjstr))", "    \"...give up.  nothing to do.   error message has already printed...\";", "  else", "    \"...dobj is something useful.  Continue...\";", "    ...", "  endif"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$no_one</NAME>
          <VALUE>{"$no_one", "-------", "... is a powerless player.  He owns no objects, not even himself; nor does he own any verbs.  He is, however, a programmer and thus may use eval().  In fact his sole purpose is to evaluate questionable code.  `questionable' could be in either or both of the following senses ", "", "(1) Its origin is sufficiently uncertain so that there is no obvious way of deciding whose permissions it should run under.", "(2) The code itself is potentially malicious, i.e., to the extent that one does not want to be evaluating it using one's own permissions.", "", "set_task_perms($no_one);  is thus the canonical idiom in wizard code for rendering anything that follows mostly harmless.  For use by ordinary programmers, we have:", "", "    $no_one:eval(string)", "", "which attempts to evaluate an arbitrary string using $no_one's permissions.", "string is either an expression or \";\" followed by one or more statements, of which the final semicolon may be omitted.  return values are what eval() would return (either {1,value} or {0,@error_messages}).", "", "Similarly, we have", "", "    $no_one:eval_d(string)", "", "which attempts to evaluate the specified string, but does it without the debug flag turned on (so that, for example, you'll get an error as opposed to terminating by traceback).", "", "And, as a helpful utility for calling verbs whose behavior may be unpredictable, there is", "", "    $no_one:call_verb(object, verb name, args)", "", "which calls the specified verb with $no_one's permissions."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$exit</NAME>
          <VALUE>{"Exits", "-----", "An exit can be renamed by either the owner of the exit or the owner of its source.", "", "The standard verbs that are called in exit movement are:", "", ":move(object)  - moves the object via this exit", ":invoke()      - equivalent to :move(player)", "", "When an exit is invoked on a particular object (via exit:move(object)), the following occurs.", "", "(1) The exit may be locked against the object, in which case we print the ", "   nogo messages and quit.", "", "(2) (room=exit.dest):bless_for_entry(object) is called.  Assuming that exit is recognized by room as being a legitimate entrance (i.e., is in room.entrances), this will enable room:accept(object) to return true.", "", "(3) object:moveto(room) is called and the various messages (see `help exit-messages') are :announced/:told.  Note that this, in accordance with the way the builtin move() (and hence the default :moveto()) works, we get a call to room:accept(object) which checks for the room itself being locked against the object, and otherwise returns true if the blessing in the previous step worked.  The move is performed, here:exitfunc(object) and room:enterfunc(object) are called.  In particular, room:enterfunc clears the blessing bestowed in (2) now that it is no longer needed.", "", "In general, the move may fail, in which case we :announce the (o)nogo_msgs."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$room</NAME>
          <VALUE>{"The Generic Room ($room)", "----------------", "", "(1)  Announcements", "", ":announce         (@text)         =&gt; broadcasts to all except player", ":announce_all     (@text)         =&gt; broadcasts to all", ":announce_all_but (objects,@text) =&gt; broadcasts to all except those in objects", "", "say, emote", "", "", "(2)  Command recovery", "", ":huh            (verb,args) - server hook: last chance to make sense of verb", ":here_huh       (verb,args) - room's last attempt to parse something", ":here_explain_syntax (this,verb,args) - attempts to explain usage of verb", "", "", "(3)  Residency", "", "free_home  - true =&gt; @sethome allows anyone to set his .home to be here", "residents  - objects on this list may teleport in and/or set their homes here.", "", ":accept_for_abode(player) ", "            =&gt; true iff player should be allowed to set .home to this room.", "", "@resident*s", "", "", "(4)  Looking", "", "dark  - true =&gt; contents are not visible", "ctype - 0..3 for four different styles of .contents lists", "", ":match         (string)        =&gt; exit or object in room's .contents", ":tell_contents (objects,ctype) - format objects according to ctype, tell player", "", "l*ook", "", "", "(5)  Entrance and exit.", "", ":accept (object) - Called by move() and :moveto() before an object enters a room, if false is returned, movement is prevented.  Protocol permits this verb to make noise (though this is discouraged) as this is the only place the room will learn the object's original location.", "", ":acceptable (object) - Called by verbs which wish to check whether movement will be possible.  Protocol prohibits this verb from making noise and requires it to return the same value as :accept would for the same arguments.", "", ":is_unlocked_for (object) - interface with the @lock protocol.  Returns true or false depending on the state of locks for the object with the room.  Other things may prevent entrance even if this returns true.  Protocol prohibits this verb from making noise. ", "", ":enterfunc (object) - called after entrance has succeeded.  Noise is fine.", "", ":exitfunc (object) - called after an object has successfully left.  Noisemaking is fine.", "", "(6)  Topology and Movement via Exits", "", "See `help $exit' for an explanation of how the generic $exit works.", "", "free_entry     - true  =&gt; `teleporting' in is allowed", "                  false =&gt; only residents may teleport in", "exits          - list of invokable exits leading from this room", "entrances      - list of recognized exits leading to this room", "blessed_object - object currently entering via an exit", "blessed_task   - task_id for entering object", "", ":match_exit      (string) =&gt; exit whose name matches string", ":bless_for_entry (object) - set up room to accept object arriving from entrance", ":add_exit        (exit)", ":add_entrance    (exit)", ":remove_exit     (exit)", ":remove_entrance (exit)", "", "e/east/w/west/s/south/n/north/ne/northeast/nw/northwest/se/southeast/sw/southwest/u/up/d/down, go, @add-exit, @add-entrance, @remove-exit, @remove-entrance, @exits, @entrances ", "", "", "(7)  Ejection", "", "victim_ejection_msg/oejection_msg/ejection_msg", ":*_msg()  messages", "", "@eject", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$help</NAME>
          <VALUE>{"*forward*", "$generic_help"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$generic_db</NAME>
          <VALUE>{"Generic Database", "----------------", "This holds a collection of {string key, datum} pairs, where datum can be anything.  At most one datum may be associated with any given string.  Data may be anything (lists, strings, numbers, objectids).  If you like, you can think of this as an array indexed by strings.", "Verbs supplied include", "", "  :find(string)          =&gt; datum, $ambiguous_match or $failed_match", "  :find_key(string)      =&gt; full string key,  $ambiguous_match or $failed_match", "  :find_exact(string)    =&gt; datum or $failed_match (no partial matches)", "  :find_all(string)      =&gt; list of all data corresponding to matching strings", "  :find_all_keys(string) =&gt; list of all matching strings", "", "  :insert(string,datum)  ", "       if the string is already present in the db, ", "       changes the associated datum and returns {old_datum};", "       otherwise enters a new {string,datum} pair and return 0.", "  :delete(string)", "       if there is a datum associated with string, ", "       remove this association and return {datum}; otherwise return 0.", "  :delete2(string,datum)", "       if the given datum is associated with string, ", "       removes that association and return {datum}, ", "       if some other datum is associated with string, just return {other datum}", "       otherwise return 0.", "  :clearall([4|3])", "       removes all associations from the database.", "       optional argument changes the type of the database ", "       (4 is normal, 3 is a kludge for when the data are simply boolean flags", "        i.e., this is a set of strings rather than a string-indexed array;", "        more on this below)", "", "  count [entries|chars] in this", "        provide some vague statistics about how big this thing is.", "", "N.B.  As entries get made, properties belonging to $generic_db.owner will be created on the db object itself.  These properties will be created having flags as specified by .node_perms, which by default is \"r\", but can be changed to \"\" should you want to ensure that randoms don't have access to the raw information.", "", "Implementation notes", " - - - - - - - - - -", "The representation is as a `trie', a tree in which each internal node corresponds to a prefix shared by two or more strings in the db.", "Each internal node is kept in a property named \" \"+&lt;prefix&gt;, where &lt;prefix&gt; is a prefix shared by all strings in the subtree under this node.", "The property value is a 4 element list", "", "this.(\" \"+&lt;prefix&gt;)[1] = &lt;common&gt;", "   maximal continuation shared by all strings beginning with prefix", "   i.e., all these names actually begin with &lt;prefix&gt;+&lt;common&gt;", "", "this.(\" \"+&lt;prefix&gt;)[2] = &lt;continuations&gt;", "   string of all characters &lt;c&gt; that can follow &lt;prefix&gt;+&lt;common&gt; for which", "   there is more than one string in the db beginning with &lt;prefix&gt;+&lt;common&gt;+&lt;c&gt;", "", "this.(\" \"+&lt;prefix&gt;)[3] = &lt;exact_matches&gt;", "   list of all strings in this subtree for which ", "   the character (or lack thereof) following the &lt;prefix&gt;+&lt;common&gt; substring ", "   suffices to determine the string.", "", "this.(\" \"+&lt;prefix&gt;)[4] = &lt;data&gt;", "   list of data corresponding to the strings in [3].", "", "Child nodes are       this.(\" \"+&lt;prefix&gt;+&lt;common&gt;+&lt;c&gt;) ", "       for all &lt;c&gt; in this.(\" \"+&lt;prefix&gt;)[2].", "The root node is this.(\" \").", "If, e.g., there are 2 or more strings in the db beginning with a, ", "there will be a node this.(\" a\").  ", "If all of these strings actually begin with \"ani\", then this.(\" a\")[1]==\"ni\".", "The db consisting of the 5 correspondences", "", "  {\"animal\", #1}", "  {\"anime\",  #2}", "  {\"anil\",   #3}", "  {\"anile\",  #4}", "  {\"banal\",  #5}", "", "would be represented", "", "this.(\" \")    =={\"\",  \"a\",  {\"banal\"},         {#5}}", "this.(\" a\")   =={\"ni\",\"lm\", {},                {}}", "this.(\" anim\")=={\"\",  \"\",   {\"animal\",\"anime\"},{#1,#2}}", "this.(\" anil\")=={\"\",  \"\",   {\"anil\",\"anile\"},  {#3,#4}}", "", "In some cases one may merely wish to hold a collection of strings without trying to associate a particular datum with each string.  One may then instead set up a db without the fourth field on each of the properties.  In this case the datum is taken to be the found string itself and that is what gets returned by :find*() in the event of a successful search.   :find and :find_key are then equivalent as are :find_all and :find_all_keys.  To setup the db this way, do a :clearall(3).  :clearall(4) reverts to the above described type of db with a separately kept datum.  Note that you can't change the type without emptying the db.  3 and 4 are currently the only db types allowed."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$generic_editor</NAME>
          <VALUE>{"The Generic Editor enables a player to edit a list of strings.  While one might contrive to use it directly, it is rather intended as a parent for some actual editor.  It supplies the following commands:", "", "say         &lt;text&gt;                      w*hat       ", "emote       &lt;text&gt;                      abort       ", "lis*t       [&lt;range&gt;] [nonum]           q*uit,done,pause ", "ins*ert     [&lt;ins&gt;] [\"&lt;text&gt;]           ", "n*ext,p*rev [n] [\"&lt;text&gt;]               ", "del*ete     [&lt;range&gt;]                   ", "f*ind       /&lt;str&gt;[/[c][&lt;range&gt;]]       ", "s*ubst      /&lt;str1&gt;/&lt;str2&gt;[/[g][c][&lt;range&gt;]]", "m*ove,c*opy [&lt;range&gt;] to &lt;ins&gt;          ", "join*l      [&lt;range&gt;]                   ", "fill        [&lt;range&gt;] [@&lt;col&gt;]          ", "", "$editor_help.(cmdname) descrbes cmdname", "$editor_help.insert    descrbes insertion points (&lt;ins&gt;)", "$editor_help.ranges    descrbes range specifications (&lt;range&gt;)", "", "You'll notice that nowhere does it say how to load in a given list of strings or how and where one may save said list away when one is done editing.  These commands are supplied by the child editor object.  The generic editor contains only the code for editing lines, though it defines additional functions for use by the children:", "", "  :loaded(player)", "     returns the index (player in this.active) iff text has been loaded", "     from somewhere, otherwise returns 0.", "", "     Note that, by default, there is a difference between ", "", "        having nothing loaded                (:text(who)==0) and ", "        having loaded something with no text (:text(who)=={}).", "", "     If you don't care about this distinction in a particular case,", "     just do (player in this.active) instead of this:loaded(player).  ", "     If you don't want your editor to make this distinction at all, do", "", "        @stateprop texts={} for &lt;youreditor&gt;", "", "     which changes the initial value of :text() to {} ", "", "In all functions below, 'who' is the index returned by :loaded(player) ", "", "BTW, be careful about using 'player' in non-user (i.e., +x this-none-this) verbs --- much better to have the user verb get the index with :loaded() and then pass that around.  ", "", "Also be careful about suspend() and verbs that call suspend().  In particular, the player's index in the .active list can change during the suspend interval, so you must be sure to obtain the index (e.g., using :loaded()) again after the suspend() returns.", "", "For your non-user verbs, we have", "", "  :ok(who)", "     returns E_PERM if the caller is not an editor verb and E_RANGE", "     if 'who' does not point to a valid session.", "", "which should take care of the more egregious security holes (but maybe not the less egregious ones).  For getting and loading text, we have", "", "  :text(who)    ", "     the current text string list or 0 if nothing loaded yet.", "  :load(who,text)", "     loads the given list of strings as the text to be edited.", "     this also resets the 'changed' flag and pushes the insertion ", "     point to the end.", "", "and various flags and properties (all of the set_* routines return E_PERM when not called from an editor verb, E_RANGE if who is out of bounds, E_INVARG if something is wrong with the 2nd arg, or the new value, which may not necessarily be the same as the 2nd arg (e.g., set_insertion(..,37) on a 5 line text buffer returns 6).", "", "  :changed(who)", "     has the text been altered since the last save/load?", "     (the child editor gets to define what \"save\" means).", "  :set_changed(who,value)", "     Any child editor command that is considered to save the text should do a ", "     :set_changed(who,0).  ", "     Note that if the changed flag is 0, the session will be flushed when ", "     the player leaves the editor, so you may also want certain commands to", "     do set_changed(who,1)...", "", "  :origin(who)", "     room where the player came from.  ", "  :set_origin(who,room)", "     can be used to change the room the player will return to when finished", "     editing.  Since origin gets set even in cases where the player teleports", "     into the editor you probably won't usually need to do this.", "", "  :insertion(who)", "     current insertion point.", "  :set_insertion(who,linenumber)", "     linenumber needs to be a positive integer and will get ", "", "  :readable(who)", "     whether the current editing session has been made globally readable.", "  :set_readable(who,boolean)", "     change the readability of the current editing session.", "     This is used by the publish/perish verbs.", "", "We also provide", "", "  :invoke(...)", "      If the player has a previous unsaved (i.e., :changed()!=0)", "      session, we return to it, moving the player to the editor.  ", "      If the player is already in the editor, this has no effect other", "      than to print a few nasty messages.  In any case a :changed()", "      session must be aborted or set_changed(,0) before anything else ", "      can be started", "", "      Otherwise, we pass the arguments (which are assumed to be the", "      result of some munging of the command line) to :parse_invoke(),", "      move the player to the editor and load whatever parse_invoke()", "      specified.  The only interpretation the generic editor makes on", "      the arguments is that if the boolean value of the first is true,", "      this indicates that the player wanted to load something as", "      opposed to resume a previous session.  Usually a command calling", "      :invoke will have a true (i.e., nonzero number, nonempty list or", "      string) first arg iff the command line is nonempty, in which case ", "      'args' works fine for this purpose.", "", "      If the command parses sucessfully (:parse_invoke() returns a list),", "      we move the player to the editor if necessary and then call ", "      :init_session() to set things up.", "", "The child editor is assumed to provide", "", "  :parse_invoke(...)", "     given :invoke()'s arguments, determines what the player wants to edit.", "     It either returns 0 and reports syntax errors to player,", "     or it returns some list that :init_session() will understand.", "", "  :init_session(who,@spec)", "     where spec is something that was returned by :parse_invoke().", "     Loads the text and sets the stateprops (below) to indicate that ", "     we are working on whatever it is we're suppose to be working on.", "", "  :working_on(who)   ", "     returns a string X as in \"You are working on X.\"", "     This is called by the 'w*hat' command, among other things.", "", "Child editors may have their own properties giving state information for the various editing sessions.  The value of each such property will be a list giving a value for each player in the editor.  For each such property, you should, once the editor object has been created, initialize the property to {} and do one of", "", "    @stateprop &lt;propname&gt;                 for &lt;editor&gt;", "    @stateprop &lt;propname&gt;=&lt;default-value&gt; for &lt;editor&gt;", "               (0 is the default &lt;default-value&gt;)", "", "Henceforth, adding and deleting new editing sessions will amend the list held by the given property.  The value of the property for a given session can be obtained via this.&lt;propname&gt;[player in this.active] and can be changed with a corresponding listset() call.  The usual idiom for an editor command is", "", "   if(!(who=this:loaded(player)))", "     player:tell(nothing_loaded_msg());", "   else", "      ... various references to  this.&lt;propname&gt;[who] ...", "   endif", "", "To remove such a property from the list of such state properties:", "", "    @rmstateprop &lt;propname&gt; from &lt;editor&gt;", "", "Note that you can only do this with properties defined on the child editor itself.  ", "", "Sometimes you may wish to @stateprop a new property on an editor where active editing sessions exist.  @stateprop will fail if the property in question does not hold a list of the correct length (== length(editor.active); one value for each editing session).  You need to either give the @flush command to clear out all sessions and boot all players currently in the editor or somehow manually initialize the property to a list of appropriate values and pray that nobody enters/exits the editor between the property initialization and the @stateprop command --- this problem can be avoided by doing an eval() that does all of the initializations (beware of suspends()) and calls :set_stateprops directly.", "", "Incidentally, the @flush command may be used at any time to clean out the editor or to remove all sessions older than a given date.", "", "There are also numerous _msg properties that may be customized", "", "    @depart          announced at the origin when :invoke() is called. ", "    @return          announced at the origin the player is returned there.", "    @nothing_loaded  printed when user attempts editing ", "                     before anything has been loaded.", "    @no_text         response to 'list' when :text()=={}", "    @no_change       printed by 'what' when :changed()==0", "    @change          printed by 'what' when :changed()==1", "    @no_littering    printed upon leaving the editor with :changed()==1.", "    @previous_session  printed by :invoke() when player tries to start a ", "                     new session without aborting or saving the old one", "", "The general procedure for creating a child editor:", "", ". @create $generic_editor named &lt;editor&gt;", "", ". define additional &lt;editor&gt; verbs/properties", "    At the very least you need 'edit' and 'save' commands.", "    Usually you can get away with just having 'edit' call :invoke();", "    Presumably, you'll need at least a command to load text from somewhere", "    as well as a command to save it back out.", "", ". define a verb (somewhere) to invoke the editor ", "    This could be just a one-liner that calls &lt;editor&gt;:invoke(args,verb).", "    Either that or", "      .  you have to set up an exit somewhere whose destination is &lt;editor&gt;", "      .  you have to advertise the object number so that people can ", "         teleport to it.", "  ", ". @stateprop x for &lt;editor&gt;", "", ". if you want the 'abort' command to boot the player from the editor do", "    &lt;editor&gt;.exit_on_abort = 1;", "", ". set &lt;editor&gt;.commands to be the list of additional commands defined", "    by &lt;editor&gt;.  ", "    Each element of the list is itself a list of the form {name,args}.", "  set &lt;editor&gt;.commands2 to be the list of commands that should appear", "    in the `look' listing, and should be a list of strings appearing ", "    as names in .commands on either &lt;editor&gt; or some editor ancestor.", "  look at $verb_editor or $note_editor for an example.", "", ". If you want to have help text for new verbs you define, create a child of ", "    $generic_help and add properties to this object for each of the topics ", "    that you want to provide help text.", "    Finally, set &lt;editor&gt;.help = {this object} so that the help system", "    knows to consult this object."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$generic_help</NAME>
          <VALUE>{"The Help System", "---------------", "When a player types help, the following list of objects is consulted for .help properties:  the player itself, all ancestors of player up to and including $player, and, if the current location is a room, the current location together with all ancestors of the current location back to and including $room.  Each help property should have as value either an object or a list of objects (otherwise we just ignore it).  These objects are then strung together as a list of `help databases' to be searched in order for the requested topic.", "", "A help database (in the sense of anything that is usable by $player:help()) is any object having the following three verbs:", "", "  :find_topics([string])", "     where string is a supposed help topic, returns a list of strings,", "     i.e., actual help topics that this db knows about, or some boolean ", "     false value in the event that this db is clueless...", "     If no arguments are given, this should return a list of all topics", "     in the db", "", "  :get_topic(string)", "     given one of the strings returned by :find_topics this either", "     returns a list of strings (text to be spewed to the player) or", "     returns 1 to indicate that it has already taken care of printing", "     information to the player.", "", "  :dump_topic(string)", "     like get_topic, but instead returns the raw text of a help topic", "     as a (download/upload) script", "", "In short if :find_topic reports that a particular db knows about a given topic", "it returns the full topic name, so that :get_topic may be called on it later.", ":dump_topic is used by maintainers (see $wiz:@gethelp) to edit help topics.", "", "$generic_help and $help", "-----------------------", "The Generic Help Database, $generic_help, is the parent class of a particular kind of help database of which $help is an instance.  On help databases of this type, every help topic has a corresponding property, interpreted as follows:", "", "  this.(topic) = string             ", "      one-line help text.", "", "  this.(topic) = {\"*&lt;verb&gt;*\",@args}", "      call this:&lt;verb&gt;(args,dblist) to get text where dblist is the list of ", "      help objects that would have been consulted had the topic not been found ", "      on this object.", "", "  this.(topic) = other list of strings ", "      multi-line help text", "", "For the {\"*&lt;verb&gt;*\",...} form, the current verbs available are", "", "  {\"*forward*\", topic, @rest}   ", "     - get help text for topic and then append the lines of `rest'.  ", "       rest may, in turn, begin with a \"*&lt;verb&gt;*\"...", "", "  {\"*pass*\", topic, @rest}   ", "     - get help text for topic from the first help database after this one", "       that actually has help text for topic, and then append lines of `rest'.", "       As with \"*forward*\" rest may, in turn, begin with a \"*&lt;verb&gt;*\"...", "", "  {\"*subst*\", @lines} ", "     - All occurences of %[exp] in lines are replaced with the value of exp", "         which is assumed to evaluate to a string.  ", "       All lines beginning with %;exp are replaced with the value of exp ", "         which is assumed to evaluate to a list of strings.", "       Evaluation is done using $no_one's permissions so exp in either case", "       can only refer to public information.", "", "  {\"*index*\", title}", "     - returns a list of all topics in this database, arranged in columns.", "       title is used as a heading for this index.", "", "       In order for your help database to appear in the list presented", "       by 'help index', your db object must be set to +r.", "", "  {\"*objectdoc*\", object}", "     - gets the documentation for the given object (i.e., object:help_msg())", "       N.B. as with all other *verb* arguments, object must be a string.", "", "  {\"*verbdoc*\", object, verbname}", "     - gets the documentation for the named verb on the given object", "       (i.e., any strings at the beginning of said verbcode)", "", "Individual help dbs are free to define additional verbs that may be used in this context.  $help itself defines the following additional such verbs:", "", "  {\"*index_list*\"}", "     - returns a list of all index topics in all databases in the search list.", "       An index topic is one whose actual text is {\"*index*\", something}.", "       When creating a help db, you should be sure to make an index topic.", "", "  {\"*full_index*\"}", "     - prints indices for all help databases in the search list.", "", "It should be noted (once again) that help databases need not be children of $generic_help, so long as they have :find_topics/:get_topic/:dump_topic working as specified above."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$generic_options</NAME>
          <VALUE>{"Generic Option Package", "----------------------", "It occasionally happens that one has a command or set of commands for which one wishes to provide several options/flags that a player can set to customize the command's behavior for him/herself.  Making each option a separate property is a bit expensive, especially when the option in question is merely a boolean flag that gets set to false in most cases.  This package provides an alternative, as well as providing a uniform set of commands for setting these flags/options and checking that the values given are of appropriate types.", "", "Instead of needing several properties, only one is required to store a list containing values for all of the options.  An \"option package\" (pkg, below) is then an object of this class, which provides routines for manipulating such lists.", "", "The set of option names is divided into a set of \"real\" options, those whose names will actually appear in a given list, and \"extras\" which are either synonyms for or represent combinations of real options.", "", " pkg:add_name(name)      adds name to .names  (remove it from .extras if there)", " pkg:add_name(name,1)    adds name to .extras (remove it from .names if there)", "    =&gt; 1 - ok, 0 - already added, E_INVARG - illegal name, E_PERM", "", " pkg:remove_name(name)   remove name from either .names or .extras", "    =&gt; 1 - ok, 0 - not present, E_PERM", "", "For setting or retrieving values we have", "", " pkg:get(options,name) ", "    =&gt; value (or 0 if name isn't a real option)", " pkg:set(options,name,value)", "    =&gt; revised options (or string error message if something goes wrong)", "", "By default, a given option can only be a boolean flag, having one of the values 0 (absent from the list), or 1 (present in the list).  :set translates 0/\"\"/{} to 0 and any other non-object value to 1.", "", "One may however designate a wider range of possible values for an option \"foo\" by either installing one of", "", "  pkg.type_foo", "    -- list of allowed types, ", "       e.g., {NUM,STR}   =&gt; must be a number or a string", "       e.g., {OBJ,{OBJ}} =&gt; must be an object or a list of objects", "    for anything fancier use:", "", "  pkg:check_foo(value)", "    =&gt; string error message or {value munged as desired}", "", "In general, the only restriction on option values is that 0 is the only false value; setting an option to \"\" or {} sets it to 0.  Every option defaults to 0, and no matter what you install as .type_foo or :check_foo(), 0 will always be a legal value for option \"foo\".", "", "When presented with an option that is in .extras, :set will typecheck the value as described, however, then :actual(name, value) will be called to obtain a list of {name-of-real-option, value} pairs indicating which combination of real options should be set.", "", "Other verbs", "  pkg:parse(args,...)", "    parses the command line arguments of a @whatever_option command", "    =&gt; {optionname, value}  if the player wants to set an option", "    =&gt; {optionname}         if the player wants to view an option", "    =&gt; string error message  otherwise", "", "  one may install pkg:parse_foo to parse arguments for option \"foo\" ", "    !foo     =&gt; {\"foo\",0}  (:parse_foo not called)", "    foo=     =&gt; {\"foo\",0}  (:parse_foo not called)", "    -foo     =&gt; {\"foo\",0}  (:parse_foo not called)", "    +foo     =&gt; pkg:parse_foo(\"foo\",1)", "    foo=word =&gt; pkg:parse_foo(\"foo\",\"word\")", "    foo word1 word2    =&gt; pkg:parse_foo(\"foo\",{\"word1\",\"word2\"})", "    foo is word1 word2 =&gt; pkg:parse_foo(\"foo\",{\"word1\",\"word2\"})", "", " pkg:show(options,name|list of names)", "    =&gt; list of strings describing the current value of the named option(s).", "       calls     pkg:show_foo(options,list of names) or", "       refers to pkg.show_foo", "       to describe option \"foo\"", "", "(see sources for details...  at some point I'll finish writing this... --Rog)"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>MR-sequences</NAME>
          <VALUE>{"Message Sequences", "-----------------", "A \"message sequence\" is a handle by which one may refer to a particular subset of a mail recipient's (player or $mail_recipient-descendant) saved messages.  Routines like rcpt:display_seq_headers or rcpt:display_seq_full need to be supplied with message-sequence arguments to deterimine which headers or full-messages to display.", "", "Message sequences can in turn be obtained from routines like rcpt:parse_message_seq, which takes a command-line description of a message sequence on that particular recipient and returns the corresponding message sequence handle.", "", "The actual form of a message sequence (though you shouldn't actually need to make use of this) is that of a set of integers in the format used by $seq_utils (see `help $seq_utils').  It should however be noted that these integers are *not* themselves message numbers, but rather indices into the list of saved messages.  For example, if a particular recipient holds 5 messages numbered 1,3,5,7,9.  Then the message sequence handle representing messages 3,5,7 collectively, would be {2,5} which is $seq_utils-ese for the range 2..4, namely the second, third and fourth messages saved on that recipient.", "", "The following verbs are available for obtaining indices to use in message sequences", "", "  :length_all_msgs()    =&gt; total number of messages, or equivalently,", "                        =&gt; index of last message", "  :length_num_le(n)     =&gt; number of messages numbered &lt;= n, or equivalently,", "                        =&gt; index of highest numbered message &lt;= n", "  :exists_num_eq(n)     =&gt; 0 unless there exists a message numbered n in which", "                           case we return the index of that message.", "  :length_date_le(date) =&gt; number of messages dated &lt;= date, or equivalently,", "                        =&gt; index of most recent message dated &lt;= date", "", "  :length_date_gt(date) =&gt; number of messages dated &gt; date", "", "Note that r:length_date_gt(date) == r:length_all_msgs()-r:length_date_le(date).", "The only reason :length_date_gt is provided as a separate routine is in order ", "to do quick checks for the existence of new mail (as @rn needs to do)."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>MR-reading</NAME>
          <VALUE>{"Read verbs", "----------", "The following verbs may be used to extract headers/messages from readable mail recipients/players;", "", ":display_seq_headers (message sequence, current message number, last_read_date)", "  Does a @mail listing of the given message sequence.  If current message", "  number is given and the sequence includes it, we mark it with a `&gt;'.", "  Likewise if the sequence includes any new messages (i.e., dated after ", "  last_read_date), these are also indicated as such.", "", "display_seq_full (message sequence, preamble)", "  Does a @read listing of the given message sequence.  Each message is preceded", "  by preamble.", "  =&gt; {new current message number, new last_read_date}", "", ":messages_in_seq (index)", "  =&gt; {n, msg}", ":messages_in_seq (message sequence)", "  =&gt; {{n_1,msg_1},{n_2,msg_2},...}", "  where the n_i are message numbers and the msg_i are messages in transmission", "  format (see `help mail-format')", "", ":list_rmm ()", "  Does an `@unrmm list' listing of messages in .messages_going"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>MR-writing</NAME>
          <VALUE>{"Write verbs", "-----------", "The following verbs can be used to manipulate writable mail recipients/players:", "", ":rm_message_seq (message sequence)", "  Does an @rmmail.  Messages in message sequence are removed from this ", "  recipient's saved .messages and written to .messages_going.", "", ":undo_rmm ()", "  Does an @unrmm.  Messages in .messages_going are copied back to .messages.", "", ":expunge_rmm ()", "  Does an @unrmm expunge.  Blows away .messages_going.", "", ":renumber ()", "  Does a @renumber.", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>MR-searching</NAME>
          <VALUE>{"Search verbs", "------------", "The following verbs can be used on a readable mail-recipient/player to search for messages with fields matching a given pattern.", "", "from_msg_seq (objectid or list [,mask])", "  =&gt; message sequence: messages from (one of) the given objectid(s)", "", "%from_msg_seq (string or list [,mask])", "  =&gt; message sequence: messages with (one of) the given string(s)", "     in the From: line", "", "to_msg_seq (objectid or list [,mask])", "  =&gt; message sequence: messages to (one of) the given objectid(s)", "", "%to_msg_seq (string or list [,mask])", "  =&gt; message sequence: messages with (one of) the given string(s)", "     in the To: line", "", "subject_msg_seq (string [,mask])", "  =&gt; message sequence: messages with given string occurring in Subject:", "", "body_msg_seq (string [,mask])", "  =&gt; message sequence: messages with given string occurring in body of message", "", "In all cases `mask' is a message sequence which one may supply to limit the range of the search.  One way of looking at it is that the message sequence to be returned is first intersected with mask."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$housekeeper</NAME>
          <VALUE>{"The housekeeper is an object that can help keep other objects where they belong.  New MOOs may want to add their own user interface for the housekeeper; here is some information that may be helpful.", "", "To indicate what objects should be cleaned:", "", "  :add_cleanup(object[, requestor[, where]])", "    Ask the housekeeper to clean 'object' for 'requestor' to 'where'.", "    Requestor defaults to 'player'.", "    Where defaults to object.location.", "", "  :remove_cleanup(what[, requestor])", "    Remove 'what' from the cleanup list at 'requestor's request.", "    Will remove it only if 'requestor' made the original request and owns", "    the object or the destination.", "", "To actually get the housekeeper to clean stuff up:", "", "  :cleanup([insist])", "    Clean up player's objects.  Argument is 'up' or 'up!' for manually", "    requested cleanups.  'up!' means to clean things even if it's against", "    the housekeeper's better judgement.", "", "  :replace(object[, insist])", "    Clean up the indicated object.  'insist' is as in :cleanup.", "", "  :continuous()", "    Starts the housekeeper cleaning continuously, killing any previous", "    continuous task.  This should be called only when starting up a new MOO,", "    or if something has gone wrong, as normally it will just keep going", "    without any help.", "", "  :litterbug()", "    Clean up all the places in housekeeper.public_places by getting rid of", "    all contents not in their .residents lists.  This is called by", "    :continuous, so it doesn't need to be called directly.", "", "To find out what's being cleaned to where for whom:", "", "  :cleanup_list([whom])", "    Show 'player' the personal cleanup list for 'whom', or the housekeeper's", "    complete list if no argument is given.", "", "  :clean_status()", "    Show 'player' a brief summary of eir personal cleanup list."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>$recycler</NAME>
          <VALUE>{"$recycler", "=========", "", "Rather than having the server built-in recycle() and create() functions handle the creation and destruction of objects, a recycling center has been created to simulate these actions by  changing objects that would have been recycled into children of $garbage (The Generic Garbage Object) and making them owned by Hacker, and then when they're needed again, to avoid a raw create() command, those objects are given to whoever's asking for them.", "", "Most Useful Verbs", "-----------------", "", "$recycler:_recycle( object )", "  This will effectively recycle an object. (As a point of fact, it changes ownership of the object to Hacker and makes the object a child of $garbage.)  It handles .ownership_quota and .owned_objects properly.  Generally, use this instead of a recycle() in your verbs.", "", "$recycler:_create( parent object [ , new owner object ] )", "  This effectively creates an object (with the specified parent, if possible, and with the specified owner, if possible; these are the same restrictions as on the server create() builtin).  This is what should generally be used instead of create() in your programming.", "", "$recycler:valid ( object )", "  This is a variant of the server built-in valid() except that it handles the $garbage objects as well.  It returns a 1 if the object specified -is- valid and is -not- a $garbage object.", "", "Other Notes", "-----------", "", "request &lt;object&gt; from &lt;recycler&gt;", "  This is not an internal verb (it's !x).  It is, however, a command-line verb that can be used to request a specific object from the recycler.  It's also useful for the creation of objects like a Magic Number Repository.  When the object is removed from the recycler, the .announce_removal_msg is announced to the room if it's set (it's piped through $string_utils for pronoun substitution).", "", "show-history &lt;recycler&gt;", "  This is a wizardly verb which allows wizards to check the `history list' of the recycler. The history maintains the latest ($recycler.nhist) entries.", "", "$recycler.orphans", "  This maintains a list of objects for which the recreation process got mangled. It ought to be checked every once in a while to see what's up."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>$error</NAME>
          <VALUE>{"$error", "======", "", "The Error Generator, $error, may be used to automatically generate errors. This is particularly useful if you are working in a !d verb but have occasion to -want- to crash with traceback. To raise a specific error, use $error:raise(error type) -- for example, $error:raise(E_PERM) will produce traceback resulting from a Permission Denied error.", "", "Random notes about $error:", "", "+ The complete list of errors is stored in $error.names.", "+ The seemingly useless :accept() verb on $error is so that $error:E_RECMOVE and $error:E_NACC will be guaranteed success (success meaning, of course, a termination by traceback).", "+ There is, unfortunately, no way to raise the error E_NONE."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>$biglist</NAME>
          <VALUE>{"Generic BigList Utilities", "----------------------------", "$biglist is a collection of routines for maintaining huge persistent (sorted) lists in a format that is less likely to spam the server (which runs into a certain amount of trouble dealing with long ordinary lists --- btw we use `biglist' to refer to the huge data structure we're about to describe and `list' to refer to ordinary MOO lists {...}).  The biglist in question lives on a particular object, to which we will refer in the discussion below as the `home' object, and its various elements appear as leaves of a tree whose nodes are kept in properties of the home object.  It should be noted that the home object does not need to be (and in fact should *not* be) a descendant of $biglist one; $biglist merely provides utilities for manipulating the properties on the home object that are used in a particular biglist manipulation.  ", "", "All of the utilities below refer to `caller' to locate the home object.  Thus verbs to manipulate a given biglist must be located on or inherited by its home object itself.  The home object needs to define the following verbs", "", "  :_make(@args)     =&gt; new property on home object with value args", "  :_kill(prop)      delete a given property that was created by :_make", "  :_get(prop)       =&gt; home.prop", "  :_put(prop,@args) set home.prop = args", "  :_ord(element)    given something that is of the form of a biglist element", "                    return the corresponding ordinal (for sorting purposes).", "                    If you never intend to use :find_ord, then this can be a ", "                    routine that always returns 0 or some other random value.", "", "See $generic_biglist_home or $big_mail_recipient for examples.", "", "Those of the following routines that take a biglist argument are expecting", "either {} (empty biglist) or some biglist returned by one of the other routines", "", "  :length(biglist)          =&gt; length(biglist) (i.e., number of elements)", "  :find_nth(biglist,n)      =&gt; biglist[n]", "  :find_ord(biglist,k,comp) =&gt; n where n is", "     the largest such that home:(comp)(k,home:_ord(biglist[n])) is false, or", "     the smallest such that home:(comp)(k,home:_ord(biglist[n+1])) is true.", "     Always returns a value between 0 and length(biglist) inclusive.", "     This assumes biglist to be sorted in order of increasing :_ord values ", "     with respect to home:(comp)().", "     Standard situation is :_ord returns a number and comp is a &lt; verb.", "", "  :start(biglist,s,e)  =&gt; {biglist[s..?],@handle} or {}", "  :next(@handle)       =&gt; {biglist[?+1..??],@newhandle} or {}", "     These two are used for iterating over a range of elements of a biglist", "     The canonical incantation for doing", "        for elt in (biglist[first..last])", "          ...", "        endfor", "     is", "        handle = :start(biglist,first,last);", "        while(handle)", "          for elt in (handle[1])", "            ...", "          endfor", "          handle = :next(@listdelete(handle,1));", "        endwhile", "", "The following all destructively modify their biglist argument(s) L (and M).", "", "  :set_nth(L,n,value)  =&gt;  L[n] = value", "     replaces the indicated element", "", "  :insert_before(L,M,n) =&gt; {@L[1..n-1],@M,@L[n..length(L)]}", "  :insert_after (L,M,n) =&gt; {@L[1..n],  @M,@L[n+1..length(L)]}", "     takes two distinct biglists, inserts one into the other at the given point", "     returns the resulting consolidated biglist", "", "  :extract_range(L,m,n) =&gt; {{@L[1..m-1],@L[n+1..]}, L[m..n]} ", "     breaks the given biglist into two distinct biglists.", "", "  :delete_range(L,m,n[,leafkiller]) =&gt; {@L[1..m-1],@L[n+1..]}", "  :keep_range  (L,m,n[,leafkiller]) =&gt; L[m..n]", "     like extract_range only we destroy what we don't want.", "", "  :insertlast(L,value)  =&gt; {@L,value}", "     inserts a new element at the end of biglist.  ", "     If find_ord is to continue to work properly, it is assumed that the ", "     home:_ord(elt) is greater (comp-wise) than all of the :_ord values", "     of elements currently in the biglist.", "", "  :kill(L[,leafkiller]) ", "     destroys all nodes used by biglist.  ", "     Calls home:leafkiller on each element."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$guest_log</NAME>
          <VALUE>{"$guest_log", "", "records guest connect/disconnect events.", "", ".max_events  -- maximum number of connect/disconnect events kept", ".connections -- actual list of events, the most recent ones first", "    each element is of the form", "      {object, is_connect, time, site}", "    object is the particular guest that (dis)connected", "    is_connect 1 or 0 according as this is a connect or not.", "", ":find(who,when)", "  =&gt; site name of WHO at the particular time", "     (or 0 if WHO was not logged in then)", "", ":last(n) ", "  prints a listing of the last n events"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>mail-resolution</NAME>
          <VALUE>{"*forward*", "mail-resolve"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$news</NAME>
          <VALUE>{"*subst*", "$news", "-----", "This object is a mail_recipient like any other (see `help $mail_recipient').  One may send messages to it and use the usual recipient manipulation commands (@mail, @read, @rmm,...).  ", "", "Selected messages on this recipient are ordered in reverse date order (i.e., most recent first) and concatenated to produce the \"news\" that is printed in response to the player `news' command.  Each news item is thus a distinct message.  The default $player:confunc checks to see if any new messages have been selected for inclusion in the \"news\" since the player last read the news.", "", "The property $news.current_news holds the message sequence of messages currently considered as comprising \"the news\".  The following commands are used to change .current_news:", "", "  @addnews &lt;message-seq&gt; to %[$news]", "  @rmnews &lt;message-seq&gt; from %[$news]", "  @setnews %[$news] to &lt;message-seq&gt;", "", "@addnews includes the specified messages, @rmnews excludes the specified messages, and @setnews changes .current_news to be the given message sequence.  Note that these ONLY change whether a given message is marked as being \"in the news\" and do not actually add or remove messages from the mail recipient $news.", "", "The procedure for adding a news article is", "", "  Send a mail message to %[$mail_agent:name($news)]", "  @addnews last to %[$news]", "    This marks the message as belonging to the current newspaper.", "    This also announces to any player who have not yet read this message ", "    that there is a new version of the newspaper.", "", "The preferred method for updating a news items is to send a new version of the item, @rmnews the old version and @addnews the new one.", "", "The following ordinary mail commands behave differently", "  @rmm   removes any reference to message from .current_news ", "         in addition to removing the message itself from .messages", "  @unrmm completely undoes the effect of the previous @rmm; ", "         this includes restoring .current_news.", "", "By default, the newspaper is moderated, however there is the possibility of unmoderating it (see `help MR-access'), letting arbitrary players send mail to it; administrators could then @addnews those items deemed worthy."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>matching</NAME>
          <VALUE>{"*forward*", "object-matching"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>MR-expiration</NAME>
          <VALUE>{"The mail messages stored in mail recipients may be removed automatically by a weekly expiration task. New core owners who wish to turn this feature on and cut down on the db space used by mail recipients (Remember, players are mail recipients too) should start this task:", "", "    $wiz_utils:expire_mail_weekly", "", "When this task runs, it searches through all mail recipients and checks their .expire_period property. This property contains a time, in seconds, that messages should expire after. If this property is set to 0, then no expiration will take place from that recipient. The task, then, will compile a list of messages that are older than the expire period (e.g., if the property is set to 30 days, messages older than 30 days from the current date will expire). The default expiration period for mail recipients is 30 days.", "", "Normally, when the mail messages are expired from the recipient they are deleted. However, the owner of the recipient may elect to have the messages mailed to an email address prior to their erasure. There are two methods for doing this, one for players and one for children of $mail_recipient.", "", "Players:", "", "  Players may completely turn off mail expiration by setting the mail option `expire' off. If it is on, then $mail_agent.player_expire_time is the expire period used for mail on players. ", "  If a player has a registered email address, he may simply turn the mail option `no_auto_forward' off in order to have the expired messages sent to his email address before they are deleted. (The reversed logic saves on db space). See `help mail-options' and `help @registerme'.", "", "Mail Recipients:", "", "  The command to set the expiration period of a mail recipient is:", "", "    @set_expire &lt;recipient&gt; to &lt;time&gt;", "", "The &lt;time&gt; specified can be in english format (30 days, 60 days, etc.). If left off (the owner types `@set_expire &lt;recipient&gt; to'), the command will print out the current expiration information for that recipient. A list owner may set the expiration period up to a maximum of 180 days.", "", "  Similar to players, the owner of a mail recipient may have the mail sent to either his registered email address or to any other address he specifies before it expires. To prevent unsolicited email from going to a random address, confirmation must be made before the owner may set the address to something other than his registered address.", "", "  The command is:", "", "    @register &lt;recipient&gt; to &lt;address&gt;", "", "If the owner leaves off the &lt;address&gt;, the current registered address (if any) and expiration period will be returned. Again, if the address specified is the player's registered address, nothing more need be done. If it is not, then an email message will be sent to that address containing a password. Presumably, the owner can retrieve that password and then log back into the MOO and type:", "", "   @validate &lt;recipient&gt; with &lt;password&gt;", "", "which will enable the mail forwarding before expiration."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>mail-expiration</NAME>
          <VALUE>{"*forward*", "MR-expiration"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$big_mail_recipient</NAME>
          <VALUE>{"Generic Large Capacity Mail Recipient", "-------------------------------------", "Since any modifications to large lists entail copying the entire list over, operations on ordinary mail recipients having large numbers of messages, that actually change the content of .messages will take inordinately long.  Thus we have this version which makes use of the $biglist package, scattering the messages onto numerous properties so that write operations involving only a few messages will not require recopying of the entire list.", "", "In nearly all respects it behaves as the ordinary Mail Recipient, except that it is faster for certain kinds of operations.", "", "Certain unimplemented verbs, like :date_sort(), and :messages() currently return E_VERBNF.", "", "To convert an existing $mail_recipient-child (call it #MR) into a $big_mail_recipient-child the basic procedure is", "", "    ;;something.foo= #MR:messages();", "    @rmm 1-$ from #MR", "    @unrmm expunge", "    @chparent #MR to $big_mail_recipient", "    ;#MR:receive_batch(@something.foo);", "", "Reconstructing Damaged Big Mail Recipients", "------------------------------------------", "On rare occasions, the tree structure created by $biglist can be corrupted (this can happen on lists sufficiently large that a list-modification operation (e.g., @rmm, @renumber) runs out of ticks/seconds).  In the vast majority of such cases, your messages are all still there; it's simply that the tree we use for finding/searching them is messed up.", "", "To recover messages from a damaged big mail recipient (#DBMR)", " --- read to the end before you start typing any commands ---", "", "create a fresh $big_mail_recipient (#NEWBMR) and then do the following:", "", "   ;#NEWBMR:restore_from(#DBMR)", "", "When this finishes, #NEWBMR will contain all of the mail messages we were able to find.  (note that this will include messages that you had deleted from #DBMR but not expunged).  #NEWMBR should thenceforth be useable in place of #DBMR, however if #DBMR contains custom verbs and non-clear properties, these will also need to be copied over.", "", "Alternatively, one may do", "", "   @copyobject #DBMR to #TEMPBMR", "   ;#DBMR:restore_from(#TEMPBMR)", "", "to rebuild #DBMR in place.  This, however, will take about twice as long.", "", "oooooooooooooooooooooooooooooooo", "WARNING!!! WARNING!!! WARNING!!!", "oooooooooooooooooooooooooooooooo", "", "Calling #OBJ:restore_from(...) COMPLETELY AND IRREVOCABLY REMOVES ALL MESSAGES from the object that it is run on (#OBJ); you MUST be sure to EITHER have made a copy of #OBJ OR be doing the restore to a DIFFERENT object."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>index</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>index_cache</NAME>
          <VALUE>{"core-index"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"Core Utility Help"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>"Help database for LambdaCore utility objects and generics."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{95139, 919123670}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>find_topics</NAME>
          <CODE>
            if (!args)
            l = {};
            for p in (properties(#0))
            if ((p[max(1, $ - 5)..$] == "_utils") &amp;&amp; `#0.(p):help_msg() ! ANY')
            l = {@l, "$" + p};
            endif
            endfor
            return {@pass(@args), @l};
            elseif (ts = pass(@args))
            return ts;
            elseif ((what = args[1])[1] != "$")
            return {};
            elseif (ts = pass("$generic_" + what[2..$]))
            return ts;
            elseif ((r = rindex(w = strsub(what[2..$], "-", "_"), "_utils")) &amp;&amp; ((r == (length(w) - 5)) &amp;&amp; (`valid(#0.(w)) ! ANY' &amp;&amp; `#0.(w):help_msg() ! ANY')))
            return {what};
            else
            return {};
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>get_topic</NAME>
          <CODE>
            topic = args[1];
            if ((topic == (("$" + topic[2..$ - 5]) + "utils")) &amp;&amp; (valid(#0.(w = strsub(topic[2..$], "-", "_"))) &amp;&amp; (uhelp = #0.(w):description())))
            return {tostr("General information on $", w, ":"), "----", @(typeof(uhelp) == STR) ? {uhelp} | uhelp};
            else
            return pass(@args);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>dump_topic</NAME>
          <CODE>
            if ((E_PROPNF != (text = pass(@args))) || ((args[1][1] != "$") || ((!((uprop = args[1][2..$]) in properties(#0))) || (typeof(uobj = #0.(uprop)) != OBJ))))
            return text;
            else
            udesc = uobj.description;
            return {tostr(";;$", uprop, ".description = $command_utils:read_lines()"), @$command_utils:dump_lines((typeof(udesc) == LIST) ? udesc | {udesc})};
            endif
          </CODE>
        </VERB>
      </OBJECT>
      <OBJECT ID="obj22" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
        <NAME>Programmer Help</NAME>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@check-property</NAME>
          <VALUE>{"*forward*", "@check-chparent"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@check-chparent</NAME>
          <VALUE>{"Syntax:  @check-property &lt;object&gt;.&lt;propname&gt;", "         @check-chparent &lt;object&gt; to &lt;newparent&gt;", "         ", "You cannot add a new property to an object if an ancestor or a descendant already defines a property with the same name.  @check-property will give you the list of all descendants of &lt;object&gt; that that define .&lt;propname&gt;.  ", "", "Likewise you cannot chparent an object to a new parent if the new parent has a property that is also defined on the object or some descendant.  Use @check-chparent to find out all instances of conflicting properties that would interfere with @chparent in this manner.", "", "Note that @check-property requires either that you own the object or that it be writeable, the same conditions that need to hold if you are to create new properties on the object.  Similarly, @check-chparent requires that you own the object and that the new parent is either fertile or likewise owned by you.", "", "For objects with large numbers of descendants, these commands can be time-consuming."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@egrep</NAME>
          <VALUE>{"*forward*", "@grep"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>regular-expressions</NAME>
          <VALUE>{"Regular expression matching allows you to test whether a string fits into a specific syntactic shape.  You can also search a string for a substring that fits a pattern.  See also the built-in function match()/rmatch().", "", "A regular expression describes a set of strings.  The simplest case is one that describes a particular string; for example, the string `foo' when regarded as a regular expression matches `foo' and nothing else.  Nontrivial regular expressions use certain special constructs so that they can match more than one string.  For example, the regular expression `foo%|bar' matches either the string `foo' or the string `bar'; the regular expression `c[ad]*r' matches any of the strings `cr', `car', `cdr', `caar', `cadddar' and all other such strings with any number of `a''s and `d''s.", "", "Regular expressions have a syntax in which a few characters are special constructs and the rest are \"ordinary\".  An ordinary character is a simple regular expression that matches that character and nothing else.  The special characters are `$', `^', `.', `*', `+', `?', `[', `]' and `%'.  Any other character appearing in a regular expression is ordinary, unless a `%' precedes it.", "", "For example, `f' is not a special character, so it is ordinary, and therefore `f' is a regular expression that matches the string `f' and no other string.  (It does *not*, for example, match the string `ff'.)  Likewise, `o' is a regular expression that matches only `o'.", "", "Any two regular expressions A and B can be concatenated.  The result is a regular expression which matches a string if A matches some amount of the beginning of that string and B matches the rest of the string.", "", "As a simple example, we can concatenate the regular expressions `f' and `o' to get the regular expression `fo', which matches only the string `fo'.  Still trivial.", "", "The following are the characters and character sequences that have special meaning within regular expressions.  Any character not mentioned here is not special; it stands for exactly itself for the purposes of searching and matching.", "", "`.'  is a special character that matches any single character.  Using", "     concatenation, we can make regular expressions like `a.b', which matches", "     any three-character string that begins with `a' and ends with `b'.", "", "`*'  is not a construct by itself; it is a suffix that means that the preceding", "     regular expression is to be repeated as many times as possible.  In `fo*',", "     the `*' applies to the `o', so `fo*' matches `f' followed by any number of", "     `o''s.", "", "     The case of zero `o''s is allowed: `fo*' does match `f'.", "", "     `*' always applies to the *smallest* possible preceding expression.  Thus,", "     `fo*' has a repeating `o', not a repeating `fo'.", "", "     The matcher processes a `*' construct by matching, immediately, as many", "     repetitions as can be found.  Then it continues with the rest of the", "     pattern.  If that fails, it backtracks, discarding some of the matches of", "     the `*''d construct in case that makes it possible to match the rest of", "     the pattern.  For example, matching `c[ad]*ar' against the string", "     `caddaar', the `[ad]*' first matches `addaa', but this does not allow the", "     next `a' in the pattern to match.  So the last of the matches of `[ad]' is", "     undone and the following `a' is tried again.  Now it succeeds.", "", "`+'  is like `*' except that at least one match for the preceding pattern is", "     required for `+'.  Thus, `c[ad]+r' does not match `cr' but does match", "     anything else that `c[ad]*r' would match.", "", "`?'  is like `*' except that it allows either zero or one match for the", "     preceding pattern.  Thus, `c[ad]?r' matches `cr' or `car' or `cdr', and", "     nothing else.", "", "`[ ... ]'", "     `[' begins a \"character set\", which is terminated by a `]'.  In the", "     simplest case, the characters between the two brackets form the set.", "     Thus, `[ad]' matches either `a' or `d', and `[ad]*' matches any string of", "     `a''s and `d''s (including the empty string), from which it follows that", "     `c[ad]*r' matches `car', etc.", "", "     Character ranges can also be included in a character set, by writing two", "     characters with a `-' between them.  Thus, `[a-z]' matches any lower-case", "     letter.  Ranges may be intermixed freely with individual characters, as in", "     `[a-z$%.]', which matches any lower case letter or `$', `%' or period.", "", "     Note that the usual special characters are not special any more inside a", "     character set.  A completely different set of special characters exists", "     inside character sets: `]', `-' and `^'.", "", "     To include a `]' in a character set, you must make it the first character.", "     For example, `[]a]' matches `]' or `a'.  To include a `-', you must use it", "     in a context where it cannot possibly indicate a range: that is, as the", "     first character, or immediately after a range.", "", "`[^ ... ]'", "     `[^' begins a \"complement character set\", which matches any character", "     except the ones specified.  Thus, `[^a-z0-9A-Z]' matches all characters", "     *except* letters and digits.", "", "     `^' is not special in a character set unless it is the first character.", "     The character following the `^' is treated as if it were first (it may be", "     a `-' or a `]').", "", "`^'  is a special character that matches the empty string -- but only if at the", "     beginning of the string being matched.  Otherwise it fails to match", "     anything.  Thus, `^foo' matches a `foo' which occurs at the beginning of", "     the string.", "", "`$'  is similar to `^' but matches only at the *end* of the string.  Thus,", "     `xx*$' matches a string of one or more `x''s at the end of the string.", "", "`%'  has two functions: it quotes the above special characters (including `%'),", "     and it introduces additional special constructs.", "", "     Because `%' quotes special characters, `%$' is a regular expression that", "     matches only `$', and `%[' is a regular expression that matches only `[',", "     and so on.", "", "     For the most part, `%' followed by any character matches only that", "     character.  However, there are several exceptions: characters that, when", "     preceded by `%', are special constructs.  Such characters are always", "     ordinary when encountered on their own.", "", "     No new special characters will ever be defined.  All extensions to the", "     regular expression syntax are made by defining new two-character", "     constructs that begin with `%'.", "", "`%|' specifies an alternative.  Two regular expressions A and B with `%|' in", "     between form an expression that matches anything that either A or B will", "     match.", "", "     Thus, `foo%|bar' matches either `foo' or `bar' but no other string.", "", "     `%|' applies to the largest possible surrounding expressions.  Only a", "     surrounding `%( ... %)' grouping can limit the grouping power of `%|'.", "", "     Full backtracking capability exists for when multiple `%|''s are used.", "", "`%( ... %)'", "     is a grouping construct that serves three purposes:", "", "       1. To enclose a set of `%|' alternatives for other operations.  Thus,", "          `%(foo%|bar%)x' matches either `foox' or `barx'.", "", "       2. To enclose a complicated expression for a following `*', `+', or `?'", "          to operate on.  Thus, `ba%(na%)*' matches `bananana', etc., with any", "          number of `na''s, including none.", "", "       3. To mark a matched substring for future reference.", "", "     This last application is not a consequence of the idea of a parenthetical", "     grouping; it is a separate feature that happens to be assigned as a second", "     meaning to the same `%( ... %)' construct because there is no conflict in", "     practice between the two meanings.  Here is an explanation of this", "     feature:", "", "`%DIGIT'", "     After the end of a `%( ... %)' construct, the matcher remembers the", "     beginning and end of the text matched by that construct.  Then, later on", "     in the regular expression, you can use `%' followed by DIGIT to mean", "     \"match the same text matched by the DIGIT'th `%( ... %)' construct in the", "     pattern.\"  The `%( ... %)' constructs are numbered in the order that their", "     `%(''s appear in the pattern.", "", "     The strings matching the first nine `%( ... %)' constructs appearing in a", "     regular expression are assigned numbers 1 through 9 in order of their", "     beginnings.  `%1' through `%9' may be used to refer to the text matched by", "     the corresponding `%( ... %)' construct.", "", "     For example, `%(.*%)%1' matches any string that is composed of two", "     identical halves.  The `%(.*%)' matches the first half, which may be", "     anything, but the `%1' that follows must match the same exact text.", "", "`%b' matches the empty string, but only if it is at the beginning or end of a", "     word.  Thus, `%bfoo%b' matches any occurrence of `foo' as a separate word.", "     `%bball%(s%|%)%b' matches `ball' or `balls' as a separate word.", "", "     For the purposes of this construct and the five that follow, a word is", "     defined to be a sequence of letters and/or digits.", "", "`%B' matches the empty string, provided it is *not* at the beginning or end of", "     a word.", "", "`%&lt;' matches the empty string, but only if it is at the beginning of a word.", "", "`%&gt;' matches the empty string, but only if it is at the end of a word.", "", "`%w' matches any word-constituent character (i.e., any letter or digit).", "", "`%W' matches any character that is not a word constituent."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@show</NAME>
          <VALUE>{"Syntax:  @show &lt;object&gt;", "         @show &lt;object&gt;.&lt;prop-name&gt;", "         @show &lt;object&gt;:&lt;verb-name&gt;", "", "Displays quite detailed information about an object, property or verb, including its name, owner, permission bits, etc.  The information displayed for an object can be quite long.", "", "See also @display, which displays different information and is controlled differently."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@grep</NAME>
          <VALUE>{"Syntax:  @grep &lt;string&gt; in &lt;object&gt;", "         @grep &lt;string&gt; in {&lt;objectlist&gt;}", "", "         @egrep &lt;regexp&gt; in &lt;object&gt;", "         @egrep &lt;regexp&gt; in {&lt;objectlist&gt;}", "", "These are named for the corresponding unix utilities.", "@grep searches the given object(s) for verbs whose verbcode contains the given string as a substring of one of its lines.  ", "@egrep searches the given object(s) for verbs whose verbcode contains a substring matching the given regular expression (see `help regular-expressions')."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>prog-index</NAME>
          <VALUE>{"*index*", "Programmer Help Topics"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>help</NAME>
          <VALUE>{"*pass*", "help", "", "For programmers, the help system provides the following additional forms:", "", "  help object:verbname   -- prints any documentation strings that are present", "                            at the beginning of the program for that verb.", "  help $&lt;whatever&gt;_utils -- prints general information about one of the ", "                            $..._utils objects (e.g., $string_utils, ", "                            $list_utils, etc...), which are all libraries ", "                            of generally used verbs.", "  help builtin()         -- prints documentation from the programmers manual", "                            about the named primitive, for example length()", "", "For information about how the help system itself works and about how to associate local help databases with specific rooms or player classes, see `help $help'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>prepositions</NAME>
          <VALUE>{"*prepositions*", "The complete list of prepositions recognized by the command-line parser:", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>;</NAME>
          <VALUE>{"*forward*", "eval"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>utilities</NAME>
          <VALUE>{"The core database has a number of objects serving as libraries of useful verbs.", "More detailed information can be obtained for (some of) these, via `help $whatever_utils'", "", "$building_utils -- ", "$code_utils     -- parsing and manipulating verb code", "$command_utils  -- reporting matching errors to the player", "$gender_utils   -- managing gendered objects", "$list_utils     -- list manipulation", "$set_utils      -- set manipulation", "$lock_utils     -- key expression manipulation", "$match_utils    -- ", "$object_utils   -- object information ", "                  (inheritance/location hierarchy, verb/property lists)", "$perm_utils     -- permissions", "$string_utils   -- string manipulation", "$time_utils     -- time (numeric and verbal) manipulation", "$trig_utils     -- trigonometric and other numerical utilities"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>truth</NAME>
          <VALUE>{"Several kinds of statements, expressions, and functions in the MOO programming language use a notion that some MOO values are 'true' and others 'false'.", "", "The only values that are considered true are non-zero numbers, non-empty strings, and non-empty lists.", "", "All other values (i.e., 0, \"\", {}, objects, and errors) are considered false."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>tasks</NAME>
          <VALUE>{"A task is an execution of a MOO program.  There are five ways for tasks to be created in LambdaMOO:", "   + Every time a player types a command, a task is created to execute that command; we call these 'command tasks'.", "   + Whenever a player connects or disconnects from the MOO, the server starts a task to do whatever processing is necessary, such as printing out 'Munchkin has connected' to all of the players in the same room; these are called 'server tasks'.", "   + The FORK statement in the programming language creates a task whose execution is delayed for at least some given number of seconds; these are 'forked tasks'.", "   + The suspend() function suspends the execution of the current task.  A snapshot is taken of whole state of the execution, and the execution will be resumed later.  These are called `suspended tasks'.", "   + The read() function also suspends the execution of the current task, in this case waiting for the player to type a line of input.  When the line is received, the task resumes with the read() function returning the input line as result.  These are called `reading tasks'.", "", "The last three kinds of tasks above are collectively known as `queued tasks' or `waiting tasks', since they may not run immediately.", "", "To prevent a maliciously- or incorrectly-written MOO program from running forever and monopolizing the server, limits are placed on the running time of every task.  One limit is that no task is allowed to run longer than 15 seconds; this limit is, in practice, never reached.  The reason is that there is a second limit on the number of operations a task may execute.", "", "The server counts down 'ticks' as any task executes.  Roughly speaking, it counts one tick for every expression evaluation (other than variables and literals), one for every `if', `fork' or `return' statement, and one for every iteration of a loop.  If the count gets all the way down to zero, the task is immediately and unceremoniously aborted.  All tasks begin or resume with an store of 30,000 ticks; this is enough for almost all normal uses.", "", "Because queued tasks may exist for long periods of time before they begin execution, there are commands to list the ones that you own and to kill them before they execute.  These commands are covered in the following help topics:", "", "@forked -- listing the forked tasks that you own", "@kill -- killing a particular forked task"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>statements</NAME>
          <VALUE>{"The following kinds of statements exist in the MOO programming language:", "", "        ;", "The null statement does nothing.", "", "        expression ;", "The expression statement evaluates the expression and then discards the value.", "", "        IF ( expression ) statements ENDIF", "        IF ( expression ) statements ELSE statements ENDIF", "        IF ( expression )", "          statements", "        ELSEIF ( expression )", "          statements", "        ...", "        ELSE", "          statements", "        ENDIF", "The conditional statement evaluates each expression in turn and executes the statements associated with the first one to return a true value; the ELSE statements are executed if none of the expressions returns a true value.  There can be any number of ELSEIF clauses and the ELSE part is optional.  See 'help truth' for the definition of 'true value'.", "", "        FOR name IN ( expression ) statements ENDFOR", "The list iteration statement first evaluates the expression, which must return a list.  It then executes the statements once for each element of that list, each time with the named variable having the value of the corresponding list element.", "", "        FOR name IN [ expression .. expression ] statements ENDFOR", "The numeric iteration statement first evaluates the two expressions, both of which must return numbers; call those numbers N1 and N2, respectively.  The statements are then executed once for each integer I such that N1 &lt;= I &lt;= N2, in increasing order; each time, the named variable has the corresponding value of I.", "", "        WHILE ( expression ) statements ENDWHILE", "The indefinite iteration statement repeatedly evaluates the expression and, each time it returns a true value, executes the statements.  The loop stops the first time that the expression returns a false value.  The definitions of 'true' and 'false' values is in 'help truth'.", "", "        BREAK ;", "        BREAK name ;", "Each `break' statement indicates a specific surrounding loop; if &lt;name&gt; is not given, the statement refers to the innermost one. If it is given, &lt;name&gt; must be the name appearing right after the `for' or `while' keyword of the desired enclosing loop. When the `break' statement is executed, the indicated loop is immediately terminated and executing continues just as if the loop had completed its iterations normally.", "", "        CONTINUE ;", "        CONTINUE name ;", "Allows you to terminate just the current iteration of a loop, making it immediately go on to the next one if any. ", "", "        RETURN ;", "        RETURN expression ;", "The return statement evaluates the expression, if any, and returns the resulting value (or 0 if there is no expression) to the verb that called the current one.  Execution of the current verb is immediately terminated.", "", "        TRY", "          statements-0 ;", "        EXCEPT variable-1 (codes-1)", "          statements-1 ;", "        EXCEPT variable-2 (codes-2)", "          statements-2 ;", "        ... (up to 255)", "        ENDTRY", "Each of the `statements-x' may be any number or combination of MOO statements and function calls. Each of the `codes-x' may be either the keyword `ANY' or else a comma-separated list of expressions that yield error codes. If the execution of `statements-0' raises an error listed in the `codes-x', then the statements associated in that EXCEPT clause where the code was listed are executed. When this occurs, `variable-x' is assigned this information about the error being raised:  {&lt;error code&gt;, &lt;error message&gt;, &lt;value&gt;, &lt;traceback&gt;}. If the error raised is not listed in any EXCEPT clause (which means the `ANY' keyword was not used), then the error continues to be raised. ", "", "        TRY", "          statements-0 ;", "        FINALLY", "          statements-last ;", "        ENDTRY", "In this construct, `statements-0' are executed. Then, whether an error was raised by their execution or not, `statements-last' are executed. If `statements-0' transfers control somewhere else, that transfer is interrupted so that `statements-last' can be run. If `statements-last' transfers control, then that overrides the first transfer. (Transfers include raising an error, returning from this verb, terminating the current iteration of a surrounding loop). `Statements-last' will always be executed, providing a good place for necessary cleanup code that will run even if `statements-0' doesn't simply run normally to completion.", "", "        FORK ( expression ) statements ENDFORK", "        FORK name ( expression ) statements ENDFORK", "The fork statement first executes the expression, which must return a number; call that number N.  It then creates a new MOO task that will, after at least N seconds, execute the statements.  When the new task begins, all variables will have the values they had at the time the FORK statement was executed.  The task executing the FORK statement immediately continues execution.  If a variable name is given after the FORK keyword, then it is assigned the 'queue ID' of the newly-created task.  The value of this variable is visible both to the task executing the fork statement and to the statements in the newly-created task.  See 'help tasks' for more information about forked tasks."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>programming</NAME>
          <VALUE>{"MOO contains a rich programming language for the creation of interesting rooms, exits, and other objects.  Help is available on the following topics concerning programming in MOO:", "", "language -- a brief reference for the syntax and semantics of the MOO language", "tasks -- a brief description of MOO tasks and their resource limits", "", "@property -- adding a property to an object", "@rmproperty -- removing a property from an object", "", "@verb   -- adding a verb to an object", "@rmverb -- removing a verb from an object", "@args   -- changing the syntax of a verb", "@copy   -- copying a verb from one object to another", "", ".program/@program -- entering the program for a verb", "@list -- printing a listing of the program for a verb", "@edit -- editing verb code", "", "@show     -- looking at all the details of an object, a property, or a verb", "@parents  -- listing the ancestors of an object", "@kids     -- listing the children of an object", "@contents -- listing the contents of an object", "@chmod    -- changing the permissions on an object, a property, or a verb", "@chparent -- changing the parent of an object", "@rename   -- changing the name of a verb or object", "", "eval -- executing MOO statements and expressions without writing a verb"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>precedence</NAME>
          <VALUE>{"The table below gives the relative precedence of all of the MOO operators; operators on higher lines in the table have higher precedence and those on the same line have identical precedence:", "", "        !       - (without a left operand)", "        ^", "        *       /       %", "        +       -", "        ==      !=      &lt;       &lt;=      &gt;       &gt;=      in", "        &amp;&amp;      ||", "        ... ? ... | ... (the conditional expression)", "        =", "", "Thus, the horrendous expression", "", "        x = a &lt; b &amp;&amp; c &gt; d + e * f ? w in y | - q - r", "", "would be grouped as follows:", "", "        x = (((a &lt; b) &amp;&amp; (c &gt; (d + (e * f)))) ? (w in y) | ((- q) - r))"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>language</NAME>
          <VALUE>{"The MOO programming language is described in excruciating detail in the LambdaMOO Programmer's Manual, available for FTP from ftp.lambda.moo.mud.org in the file pub/MOO/ProgrammersManual.txt, and on the Worldwide Web at ftp://ftp.lambda.moo.mud.org/pub/MOO/html/ProgrammersManual_toc.html.  The online help consists of a few quick reference guides here in the help system under the following topics:", "", "statements -- the syntax and semantics of the various kinds of MOO statements", "expressions -- the same for the various kinds of MOO expressions", "functions -- a list of the primitive functions available to MOO programs"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>functions</NAME>
          <VALUE>{"There are many, many built-in functions available to MOO programmers.  The following list gives a brief summary of the arguments and purpose of each function; for more information, see the LambdaMOO Programmer's Manual.  ", "", "pass(arg, ...)   -- calling a verb defined on this object's parent", "", "time()           -- current time in seconds since midnight GMT, 1 Jan 70", "ctime([time])    -- time (or current time) converted to a human-readable string", "", "eval(string)     -- parsing and executing strings as MOO code", "", "typeof(value)      -- determining the data type of a value", " tostr(value, ...) -- converting any set of values into a string", " toint(value)      -- converting any non-list value into an integer", " tonum(value)      -- converting any non-list value into an integer (obsolete)", " tofloat(value)    -- converting any non-list value into a floating-point", " toobj(value)      -- converting any non-list value into an object", " toliteral(value)  -- converting any value into a literal string", "length(value)      -- returns the length of a string or list", "", "equal(val1, val2)          -- is val1 indistinguishable from val2", "min(n1, n2, ...)           -- minimum of n1,n2,...", "max(n1, n2, ...)           -- maximum of n1,n2,...", "abs(n)                     -- absolute value of n", "sin(n), cos(n), tan(n)     -- sine, cosine, tangent of n", "asin(n), acos(n), atan(n)  -- arc-sine, arc-cosine, arc-tangent of n", "sinh(n), cosh(n), tanh(n)  -- hyperbolic sine, cosine, tangent of n", "exp(n)                     -- `e' raised to the power of n", "log(n), log10(n)           -- natural or base 10 logarithm of n (n &gt; 0)", "sqrt(n)                    -- square root of n, rounded down", "random(n)                  -- random integer between 1 and n inclusive", "floatstr(float, precision, sci) -- format a floating-point into string", "ceil(f)          -- smallest integer &gt; float f as a floating-point", "floor(f)         -- largest integer &lt; float f as floating-point", "trunc(f)         -- truncate f at the decimal point, as floating-point", "", "index(str1, str2 [, case-matters])  -- index of first str2 in str1", "rindex(str1, str2 [, case-matters]) -- index of last  str2 in str1", "strcmp(str1, str2) -- case-sensitive string comparison", "strsub(subject, what, with [, case-matters]) -- substitution in a string", "match(str1, str2 [, case-matters])  -- match first regular expr str2 in str1", "rmatch(str1, str2 [, case-matters]) -- match last regular expr str2 in str1", "substitute(template, subs)          -- perform substitutions on template", "", "decode_binary(bin-string [, fully]) -- convert from a binary string", "encode_binary(arg, ...)             -- convert to a binary string", "      crypt(string [, salt])        -- one-way string encryption", "string_hash(text)                 -- MD5 cryptographically secure hash of text", "binary_hash(bin-string)           -- same but for a binary string", " value_hash(value)                -- string_hash(toliteral(value))", "", " is_member(value, list)           -- is exact value (case sensitive) in list", "listappend(list, value [, index]) -- adding an element at the end of a list", "listinsert(list, value [, index]) -- adding an element at the head of a list", "   listset(list, value, index)    -- updating a list at some index", "listdelete(list, index)           -- removing an element from a list", "    setadd(list, element) -- adding an element to a set represented as a list", " setremove(list, element) -- removing an element from such a set", "", "   valid(object)             -- testing whether an object exists", "  create(parent [, owner(*)])-- creating a new MOO object", " recycle(object)             -- destroying a MOO object", "    move(object, where)      -- altering the object-containment hierarchy", "chparent(object, new-parent) -- altering the object-inheritance hierarchy", "  parent(object)             -- object's parent   in the inheritance hierarchy", "children(object)             -- object's children in the inheritance hierarchy", "max_object()       -- the highest-numbered object in the MOO", "renumber(obj)      -- changes an object's number to lowest available one (*)", "reset_max_object() -- resets max_object() to the largest valid object (*)", "", "     properties(object) -- a list of the properties defined on an object", "   add_property(object, prop-name, value, info) -- add a new property", "delete_property(object, prop-name)              -- remove a property", "    property_info(object, prop-name)       -- {owner, perms} info on a property", "set_property_info(object, prop-name, info) -- setting same", "is_clear_property(object, prop-name) -- find out if a property is \"clear\"", "   clear_property(object, prop-name) -- make a property \"clear\"", "", "      verbs(object) -- a list of the verbs defined on an object", "   add_verb(object, info, args)  -- add a verb to an object", "delete_verb(object, verb-name)   -- remove a verb from an object", "    verb_info(object, verb-name) -- {owner, perms, names} info for a verb defn.", "    verb_args(object, verb-name) -- {dobj, prep, iobj} argument info for a verb", "    verb_code(object, verb-name [, fully-paren [, indent]]) -- program listing", "set_verb_info(object, verb-name, {owner, perms, names})", "set_verb_args(object, verb-name, {dobj, prep, iobj})   ", "set_verb_code(object, verb-name, {line, line, ...})", "disassemble(object, verb-desc)   -- listing of server's internal `compile' ", "", "        is_player(object) -- testing whether or not object is a player", "          players()       -- a list of all players, active or not", "connected_players()       -- a list of all currently-connected players", "     idle_seconds(player) -- seconds since given player typed anything", "connected_seconds(player) -- seconds given player has been logged in", "    boot_player(player)        -- disconnect player from the MOO immediately(*)", "set_player_flag(player, value) -- set/clear player bit; boot player if clear(*)", "connection_name(player)   -- a server-assigned name for player's connection", "", "open_network_connection(@args) -- open a connection to another network site (*)", "notify(player, string)    -- sending text to a player's terminal", "read()                    -- reading a line of input from the player (*)", "buffered_output_length([player])      -- how much output pending", "force_input(player, str [, at-front]) -- put str in player's output queue", "flush_input(player [, show-messages]) -- clear a player's output queue", "output_delimiters(player) -- return {prefix,suffix} set by PREFIX/SUFFIX cmds", "set_connection_option(player, option, value) -- set I/O options for player", "   connection_options(player) -- list current I/O options for player", "    connection_option(player, option) -- return setting of option for player", "", "   listen(conn, point [, print-messages]) -- create server listening point (*)", "u nlisten(canon) -- close the server listening point described by canon (*)", "listeners() -- list of all listening points", "", "        raise(code [, message [, value]]) -- raise code just like an error", "call_function(func-name, arg, ...)        -- call func-name", "function_info([name])   -- descriptions of available built-in functions", "", "caller_perms()         -- the player whose permissions your caller was using", "set_task_perms(player) -- changing permissions of the running task (*)", "callers()      -- list of {obj, verb, owner, vloc, player}: this task's stack", "suspend([secs])  -- suspending the current task for a number of seconds", "resume(task [, value]) -- resume the given task with value returned", "seconds_left() -- number of seconds left in the current task", "ticks_left()   -- number of ticks   left in the current task", "task_id()      -- a random number representing the currently-running task", "queue_info([player]) -- who has tasks, or how many player has", "queued_tasks() -- list of {id,start,0,20000,owner,obj,verb,line,this}", "kill_task(id)  -- delete one of your tasks from the queue", "task_stack(task-id [, include-line-numbers]) -- info about suspended task", "", "server_log(string) -- add a comment to the server log file", "server_version() -- a string of three numbers \"major.minor.release\"", "memory_usage()   -- {{blocksize, nused, nfree}, ...}, the server's memory stats", "shutdown(msg)    -- print msg and kill the server (*)", "dump_database()  -- what it says (*)", "db_disk_size()   -- size in bytes of recent full database", "", " value_bytes(value)  -- memory required to store value", "object_bytes(object) -- memory required to store object", "", "(*) =&gt; as you might have expected, these usually require wizard permissions."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>expressions</NAME>
          <VALUE>{"The following kinds of expressions exist in the MOO programming language:", "", "        number", "        # integer", "        # - integer", "        \"character string\"", "        error-name", "Literal expressions return the obvious values: numbers (floating-point or integers), object numbers, strings, and errors.", "", "        { expression , expression , ... , expression }", "The list-construction expression evaluates the each of the expressions in turn and returns a list whose elements are the results of those expressions.  Any of the expressions may be prefixed with an at-sign ('@'); in this case, that expression must return a list and, rather than that list becoming an element of the final list, its elements are spliced into the final list.", "", "        name", "Variable expressions return the current value of the named variable.  Variable names must start with a letter or underscore ('_') and contain only letters, digits, and underscores.  The following variables are predefined:", "            OBJ, STR, LIST, ERR, INT, FLOAT, NUM (same as INT)", "            player, caller, this, verb, args", "            argstr, dobj, dobjstr, prepstr, iobj, iobjstr", "Their initial values are described in detail in the LambdaMOO Programmer's Manual.", "", "        expression . name", "        expression . ( expression )", "        $ name", "Property-reading expressions return the current value of a named property on the object that is the value of the first subexpression.  In the second form, the second subexpression must return a string, the name of the property to be read.  The third form is an abbreviation for '#0.name'.", "", "        expression : name ( arguments )", "        expression : ( expression ) ( arguments )", "Verb-call expressions invoke a named verb on the object that is the value of the first subexpression, passing the given arguments.  In the second form, the second subexpression must return a string, the name of the verb to invoke.  The syntax and semantics of arguments is exactly as in the list-construction expression but no initial or final curly-braces ('{' or '}') are used.", "", "        function ( arguments )", "The function-call expression invokes one of the MOO primitive functions, as listed in 'help functions', passing the given arguments.", "", "        expression [ expression ]", "The indexing expression first evaluates the two subexpressions; call their values S and N, respectively.  S must be a string or a list and N must be a integer between 1 and the length of S, inclusive.  The Nth element of S is returned.  The elements of a string are themselves one-character strings. The special character `$' maybe used for N as shorthand for the length of the string or list S.", "", "        expression [ expression .. expression ]", "The subsequence expression first evaluates the three subexpressions; call their values S, N1, and N2, respecitively.  S must be a string or a list and N1 and N2 must be integers.  If N1 &lt;= N2, then both must be between 1 and the length of S, inclusive (the shorthand character `$' may be used); the subsequence of S beginning at index N1 and continuing through index N2 is returned.  If N1 &gt; N2, the empty sequence of the same type as S is returned, either \"\" or {}.", "", "        name = expression", "        expression . name = expression", "        expression . ( expression ) = expression", "        $ name = expression", "Assignment expressions give new values to variables and object properties.  For the second and third forms, the expressions on the left-hand side of the '=' are evaluated first.  Then the right-hand side expression is evaluated and result is stored in the indicated variable or object property.", "There is a special kind of assignment involving lists on the left hand side. See `help scattering' for details.", "", "        expression + expression", "        expression - expression", "        expression * expression", "        expression / expression", "        expression % expression", "        - expression", "        expression ^ expression", "The arithmetic expressions evaluate the subexpressions, all of which must return numbers of the same type (integer or floating-point), and then perform addition, subtraction, multiplication, division, remaindering, negation, or raising to a power, respectively.  For addition, the subexpressions may both return strings as well; in this case, the result is the concatenation of the two strings. For the last operation, raising to a power, if the first expression is an integer, the second must also be an integer. But if it is floating-point, then the second can be either floating point or an integer. This is the only type mixing permitted. You must do explicit type conversions with built-in functions (toint(), tofloat()) before evaluation mixed expressions on the other operations.", "", "        expression == expression", "        expression != expression", "        expression &lt; expression", "        expression &lt;= expression", "        expression &gt; expression", "        expression &gt;= expression", "The comparison expressions evaluate the subexpressions and then test whether or not the first result is equal to, unequal to, less than, less than or equal to, greater than, or greater than or equal to the second result, respectively.  If the indicated relation holds then they return 1 and otherwise they return 0.  Comparisons of strings are performed case-insensitively, those of lists are performed on an element-by-element basis, objects are compared by their object numbers, and errors by an ordering given in the LambdaMOO Programmer's Manual.", "", "        expression ? expression | expression", "        expression &amp;&amp; expression", "        expression || expression", "        ! expression", "The logical expressions each return results based upon the truth value of their first subexpression; call the value of this expression X.  The first of these returns the value of the second subexpression if X is a true value and that of the third expression if X is a false value; the unused subexpression is not evaluated.  The definitions of 'true value' and 'false value' are given in 'help truth'.  The expression 'E1 &amp;&amp; E2' is an abbreviation for 'E1 ? E2 | E1' except that E1 is only evaluated once.  The expression 'E1 || E2' is an abbreviation for 'E1 ? E1 | E2' except that E1 is only evaluated once.  The expression '! E' is an abbreviation for 'E ? 0 | 1'.", "", "        expression IN expression", "The list-membership expression first evaluates both subexpressions; call their values E and L, respectively.  L must be a list.  If E is an element of L, then the index of the first occurence of E in L is returned.  If E is not an element of L, then 0 is returned.", "", "        `expression-1 ! codes =&gt; expression-2'", "NOTE: the open- and close-quotation marks are really part of the syntax; they must be typed in. `Codes' is either the keywoard ANY or a comma-separated list of expressions that when evaluated should yied a list of error codes to be caught if they're raised. If `expression-1' is evaluated without raising an error, then its value is the value of the entire expresion. If it raises an error that is listed in `codes', it is caught. If the `=&gt; expression-2' part was included (it is optional), then it is evaluated and its value is the result of the entire expression. If `expression-2' was omitted, then the error is the value of the expression. If the error was not listed and caught, then the error contines to be raised.", "", "The method for disambiguating the meaning of a complex MOO expression in the absence of sufficient parentheses is described in 'help precedence'.", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>eval</NAME>
          <VALUE>{"Syntax:  eval &lt;MOO-code&gt;", "         ; &lt;MOO-code&gt;", "         eval-d &lt;MOO-code&gt;", "", "Evaluates the given piece of MOO code and prints the resulting value.  If the MOO code begins with one of the MOO language keywords ('if', 'for', 'while', 'fork', or 'return') or with the character ';', then the entire piece of code is treated as the program for a verb, with ';' appended to the end.  Otherwise, 'return' is appended to the front and ';' is appended to the end and that string is treated as the code for a verb.  In either case, the resulting verb is invoked and whatever value it returns is printed.", "", "For programmers, this is such a mind-bogglingly useful thing to do that there is a simple abbreviation for this command; any command beginning with a semicolon (';') is treated as a use of 'eval'.", "", "Eval treats specially a duplicated semicolon at the beginning.  It enables you to make multi-statement programs within eval (but does not by default print the return value).", "", "Eval-d (no \";\" abbreviation for this) evaluates the following text exactly as eval, except that the \"d\" debug flag (see programmer's manual for explanation) is turned off.  Thus errors will cause an error return value rather than a traceback.", "", "If you set the programmer option `eval_time' to 1 (see `help @prog-options'), then eval will print out how many ticks and seconds the program required.", "", "Examples:", "   eval 3 + 4", "   =&gt;  7", "   ;3+4", "   =&gt;  7", "   ;for x in (player.aliases) player:tell(x); endfor", "   Haakon", "   Wizard", "   ArchWizard", "   =&gt;  0", "   ;;l = {}; for i in [1..10] l = {@l, i}; endfor return l", "   =&gt;  {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}", "   eval-d 8 + \"foo\"", "   =&gt; E_TYPE  (Type mismatch)", "", "You may customize your evaluation environment.  The player property .eval_env may contain statements to be executed prior to any evaluated program.  Two caveats:  This will throw off the tick count.  You can account for additional ticks inserted by your environment with the .eval_ticks property; just set it to the number of ticks you'd like subtracted from the total.  Additionally, if you make a syntax error in your program, the line reported will be wrong (it will count those initial statements), and if you make an error in the eval_env itself, you can be in deep trouble.  Despite these drawbacks, the eval_env property can be quite useful.  The following is a sample:", "", "Eval_env:    \"me=player;here=player.location;\"", "eval_ticks:  3", "", "See also @setenv.", "", "You can also define textual substitutions in a separate property, called eval_subs.  These are discouraged, however, for anything that can be done with variable assignments, because the overhead of replacing the strings in the evaluated program is significant.  However, some things, such as substituting characters which can't be typed easily on one keyboard (e.g. \"[]\" is difficult to type on some IBM keyboards), can only be done by textual substitutions.  Note that the eval substitutions are also interpreted by the verb editor when \"eval_subs\" is selected in your .edit_options property (see `help editors').  This adds to their overhead, but again, makes it possible for people to program who otherwise can't type the full character set.  Remember:  Don't use eval_subs unless you really have to!"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>errors</NAME>
          <VALUE>{"*errors*", "The complete list of error codes:", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@verb</NAME>
          <VALUE>{"Syntax:  @verb &lt;object&gt;:&lt;verb-name(s)&gt;", "         @verb &lt;object&gt;:&lt;verb-name(s)&gt; &lt;dobj&gt; [&lt;prep&gt; [&lt;iobj&gt;]]", "", "Adds a new verb with the given name(s) to the named object.  If there are multiple names, they should be separated by spaces and all enclosed in quotes:", "", "        @verb foo:\"bar baz mum*ble\"", "", "The direct and indirect object specifiers (&lt;dobj&gt; and &lt;iobj&gt;) must be either 'none', 'this', or 'any'; their meaning is discussed in the LambdaMOO Programmer's Manual.  The preposition specifier (&lt;prep&gt;) must be either 'none', 'any', or one of the prepositional phrases listed in `help prepositions' (a prepositional phrase with more than one word must be enclosed in quotes (\"\")).  All three specifiers default to 'none'.", "", "It is also possible to specify the new verb's permissions and owner as part of the same command (rather than having to issue separate @chmod/@chown commands)", "", "     @verb &lt;object&gt;:&lt;verb-name(s)&gt; &lt;dobj&gt; &lt;prep&gt; &lt;iobj&gt; &lt;permissions&gt;", "     @verb &lt;object&gt;:&lt;verb-name(s)&gt; &lt;dobj&gt; &lt;prep&gt; &lt;iobj&gt; &lt;permissions&gt; &lt;owner&gt;", "", "&lt;permissions&gt; are as with @chmod, i.e., must be some subset of \"rwxd\".  They default to \"rd\" (specifying \"w\" for a verb is highly inadvisable).  The owner defaults to the player typing the command; only wizards can create verbs with owners other than themselves.", "", "You may also use \"tnt\" in place of \"this none this\" for the dobj prep iobj arguments.  \"this none this\" is used to indicate non-command verbs, since the parser can't possibly interpret a command as \"this none this\".  For these verbs, the permissions default to \"rxd\"; the \"x\" bit is set so that they can be called from other programs.  (If they couldn't be used as commands, and they couldn't be called from programs, they wouldn't be good for anything!)"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@setenv</NAME>
          <VALUE>{"Syntax:  @setenv &lt;environment string&gt;", "", "Defines the environment for eval (property player.eval_env).  See \"help eval\"", "for more information.", "", "Example:", "", "  @setenv me=player;here=player.location;"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@rmverb</NAME>
          <VALUE>{"Syntax:  @rmverb &lt;object&gt;:&lt;verb-name&gt;", "         @rmverb &lt;object&gt;:&lt;verb-name&gt;  &lt;dobj&gt; &lt;prep&gt; &lt;iobj&gt;", "         @rmverb# &lt;object&gt;:&lt;verb-number&gt;", "", "Removes the named verb from the named object.", "If there is more than one verb matching the given verb-name, this removes the most recently defined one.", "", "With the 2nd form of the command the verb removed is the most recent one matching both the given verb-name *and* the given dobj/prep/iobj specifiers.", "", "To remove the ambiguity in verbs with the same name, @rmverb# is provided where you can specify the verb by its 1-based index in the verbs() list output. Use of this form is strongly encouraged."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@rmproperty</NAME>
          <VALUE>{"Syntax:  @rmproperty &lt;object&gt;.&lt;prop-name&gt;", "", "Removes the named property from the named object.  '@rmproperty' may be abbreviated as '@rmprop'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@prospectus</NAME>
          <VALUE>{"Usage:  @prospectus player [from number] [to number]", "", "Like @audit, but displays more information.  The optional from and to arguments are for restricting the display to specific object numbers, if you happen to know the player only owns objects in the included range.", "", "Example:", "   Objects owned by Frand (from #0 to #54949):", "     P[ 23]    #47 Frand                          [Hyperspace Hovel]", "     T        #152 Frand's trio of shoes          [Frand]", "   KfT[ 10]   #391 Frand's notifier class         [Nowhere]", "     T[  8]   #393 Frand's chessboard             [The Dining Room]", "   KfT[ 11]   #775 Frand's generic game board     [Nowhere]", "     T[  6]   #893 Ghost game                     [The Dining Room]", "     T[ 16]   #894 Frand's mind bender            [The Dining Room]", "     C        #997 polka-dot hole                 [Hyperspace Hovel]", "     R[  1]  #1002 Hyperspace Hovel              ", "     E      #11958 out                            Monster Cage-&gt;*Dr. Empirico's Lab", "      ...", "", "The K in the first column indicates that the object has children owned by other players.  A lowercase k indicates the object has children but owned only by the player.  The second column indicates whether the object is publicly readable or publicly parentable.  An r indicates readability.  A lowercase f indicates the object is both readable and allows children (is fertile).  An uppercase F indicates the object is not readable, yet allows children to be created.  (This is usually an error.)  If the object is readable by the issuer of the @prospectus command (that is, publicly readable or owned by the issuer), then the number in brackets indicates the number of verbs which have been defined on this object (not including any verbs from any parents).", "", "The third column indicates what type of object this is.", "        T       Thing", "        E       Exit", "        R       Room", "        C       Container", "        N       Note", "        P       Player", "        F       Feature", "        M       Mail Recipient", "        H       Help Database", "        D       Database", "        U       Utilities Package", "        O       Options Package", "        p       Parent object appropriate for players (\"Player class\")", "        blank   Other"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@property</NAME>
          <VALUE>{"Syntax:  @property &lt;object&gt;.&lt;prop-name&gt;", "         @property &lt;object&gt;.&lt;prop-name&gt; &lt;initial-value&gt;", "", "Adds a new property named &lt;prop-name&gt; to the named object.  The initial value is given by the second argument, if present; it defaults to 0.  ", "", "Normally, a property is created with permissions 'rc' and owned by whoever types the command.  However, you may also specify these explicitly", "", "         @property &lt;object&gt;.&lt;prop-name&gt; &lt;initial-value&gt; &lt;permissions&gt;", "         @property &lt;object&gt;.&lt;prop-name&gt; &lt;initial-value&gt; &lt;permissions&gt; &lt;owner&gt;", "", "Only wizards can create properties with owners other than themselves.", "", "'@property' can be abbreviated as '@prop'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@program</NAME>
          <VALUE>{"Syntax:  @program &lt;object&gt;:&lt;verb-name&gt;", "         @program &lt;object&gt;:&lt;verb-name&gt; &lt;dobj&gt; &lt;preposition&gt; &lt;iobj&gt;", "         @program# &lt;object&gt;:&lt;verb-number&gt;", "", "Changes the MOO program associated with the named verb on the named object.", "If you provide &lt;dobj&gt; &lt;preposition&gt; and &lt;iobj&gt; as in the second form of this command, then it is the first verb with matching direct object, preposition and indirect object specifiers that is the one getting the new program.  This is useful if you have several verbs matching the same name.", "", "Or, you can use @program# if you know the verb's number. This is the 1-based index of the verb as it appears in the verbs() (or @verbs) output list.", "", "Typing the @program command always puts the server into a line-reading mode, in which each line you type is saved away without any action unless said line is one of the following:", "", "  .", "  @abort", "  .&lt;text&gt;", "", "A period on a line by itself ends the line-reading mode and continues with the command, in this case, the saved lines are considered as a program, checked for syntax errors and, if no errors are found, installed as the new program for the specified verb.  ", "", "@abort causes the command to terminate immediately with no change to any verb's program.  .&lt;text&gt; enters &lt;text&gt; literally as one of the lines to be saved, which is used for when, e.g., you want to enter the line `.' or the line `@abort'.", "", "Note that this command *always* enters the line-reading mode, even if the indicated verb is not found.  In this case, lines of text are still read but they are ignored.  After any @program command, you always need to type a period or `@abort' to get back into the normal command-reading mode."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@list</NAME>
          <VALUE>{"Syntax:  @list &lt;object&gt;:&lt;verb&gt;", "         @list &lt;object&gt;:&lt;verb&gt; [with|without parentheses|numbers] [all]", "         @list &lt;object&gt;:&lt;verb&gt; &lt;dobj&gt; &lt;prep&gt; &lt;iobj&gt;", "         @list &lt;object&gt;:&lt;verb&gt; &lt;start&gt;..&lt;end&gt;", "         @list# &lt;object&gt;:&lt;verb-number&gt; [any of the above]", "", "Prints out the code for the MOO program associated with the named verb on the named object.  ", "", "Normally, the code is shown with each line numbered and with only those parentheses that are necessary to show the meaning of the program.  You can e.g., specify `without numbers' to have the numbers omitted or `with parentheses' to include all parentheses or even `with parentheses without numbers' to do both.  You can change the default behavior of this command via @prog-options (which see).", "", "Normally, the @list command only shows the code for the named verb on the object itself or on the nearest ancestor that defines it; if you give the `all' option, it shows the code for the named verb on every ancestor that defines it, as well as on the object itself.", "", "The 3rd form of the verb lists the verb matching the given dobj/prep/iobj specification if such exists.  ", "The 4th form prints only those lines in the specified range.", "", "Example:", "  Type `@list $room:say' to see the code for the `say' command, or even `@list $prog:@list' to see the code implementing @list itself...", "", "The 2nd-4th forms may be combined, e.g.,", "", "  @list frobule:burfle this in front of any without numbers 1..10", "", "which would be useful if `frobule' had more than one `burfle' verb and we wanted to see the first 10 lines of the one having `this' `in front of' `any' as its respective dobj/prep/iobj specifiers.", "", "Or, if you know the verb's number, you can use @list# to unambiguously refer to the verb. The number comes from the 1-based index of the verb as it appears in the verbs() (or @verbs) output list."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@kill</NAME>
          <VALUE>{"Syntax:  @kill task_id", "         @kill [object]:[verb]", "         @kill soon [number-of-seconds]", "         @kill all", "         @kill %trailing_id", "", "", "Immediately kills one or more forked tasks.  The '@forked' command is useful for finding out what tasks you have pending; see 'help @forked' for details.  Only the owner of a task may kill it.", "", "@kill task_id kills only the task with that id.", "", "@kill object:verb kills all tasks which were scheduled by the object running the verb named.  Both object and verb are optional:  @kill object: kills all tasks scheduled by that object, and @kill :verb kills all tasks which were scheduled by any object running that verb.  This can be useful if you have several similar objects which are running tasks from similarly named verbs.  (Perversely, @kill : kills all tasks...  Any object running any task.)", "", "@kill soon kills all tasks scheduled within the next minute.  @kill soon number kills all tasks scheduled within that number of seconds, e.g. @kill soon 300 would kill all tasks scheduled within the next five minutes.  This can be useful if you have a runaway task you want to quickly remove, but don't want to kill you later tasks.", "", "@kill all kills all tasks.  Like @kill soon, but more dramatic.", "", "@kill %trailing_id expects you to specify the last few digits of a task id.  It then kills all tasks that end with those digits.", "", "@killq*uiet does all of the above without the pretty printout if more than one task is being killed.  It tells you the number of tasks that have been killed when it's finished.", "", "Example:", "  @forked", "  1359083655  Sep 16 21:45:00 1991  yduJ          #5803:heartbeat (10) [#68]", "  @kill %655", "  Killed:   task 1359083655, verb #5803:heartbeat, line 10, this==#68"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@kids</NAME>
          <VALUE>{"Syntax:  @kids object", "", "A quick way to find out the children of an object.  Prints out the names and object numbers of the found children.  Note: this is not a list of all descendents, just direct children.", "", "Example:", "  @kids #3107", "  Generic Body of Chlorinated Water(#3107) has 3 kids.", "  The Pool(#1428)   The Hot Tub(#388)   Deep Blue Underground Pool(#17340)"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@forked</NAME>
          <VALUE>{"Syntax:  @forked[-v*erbose] [all wizards]", "", "Gives a list of all of the forked tasks you own, along with detailed information about each one.  Wizardly characters may specify `all wizards' and see the queued tasks which are owned by a player with .wizard=1. This is useful to find a task that $wiz_utils:random_wizard has put in various queues, and to also find code which is running with wizardly permissions that shouldn't be.", "", "The information displayed includes the following:", "", "Queue ID:", "   A numeric identifier for the task, for use in killing it (see 'help @kill').", "", "Start Time:", "   The time after which the task will begin execution.", "", "Owner:", "   The player whose permissions under which the task is running.", "   Unless you are a wizard, @forked will show only your tasks.", "", "Verb:", "   The object and verb-name of the code that forked the task.", "", "Line:", "   The line number of the first statement that the task will execute when it starts.  Note that the code for the verb in question may have changed since the task was forked; the forked task will use the version that was being executed when it was forked.", "", "This:", "   The value of `this' for the forked task, in the case that it is different from (i.e., is a descendant of) the object on which the verb code lives.", "", "For a more verbose output, use `@forked-v*erbose'. This will display the same information as the above, but for any task which is not a fresh fork or foreground task, a callers()-style listing of the stack trace will be displayed."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@display</NAME>
          <VALUE>{"Syntax: @display &lt;object&gt;.[property]", "                         ,[inherited_property]", "                         :[verb]", "                         ;[inherited_verb]", "", "@display is a fancy version of @show.  As @show, it can select individual verbs or properties to display.  In addition, it can display all the verbs or properties defined on an object, or all the verbs or properties defined on any of the object's ancestors.  Don't specify a property or verbname after the punctuation mark to get the \"all\" feature.  Its display is more compact than that of @show (it uses a one-line format, and truncates values that don't fit in the value field).", "", "You may mix properties and verbs on the command line, but the parser may become confused.  (E.g. @display object,: displays all properties including inherited ones plus all locally defined verbs on the object.)", "", "Examples:", "Individual property:", "  @display poolsweep.count", "  .count                   yduJ (#68)            r c    8", "", "Individual verb:", "  @display poolsweep:tell", "  #3560:tell                     yduJ (#68)           rxd    this none this", "", "All properties, including one truncated value:", "  @display poolsweep.", "  poolsweep (#3560) [ readable ]", "    Owned by yduJ (#68).", "    Child of generic thing (#5).", "    Location The Pool (#1428).", "  .gagged                  yduJ (#68)            r c    0", "  .count                   yduJ (#68)            r c    8", "  .messages                yduJ (#68)            r c    {\"The poolsweep stir..", "  .index                   yduJ (#68)            r c    2", "  .quantum                 yduJ (#68)            r c    20", "", "Inherited verbs, edited for brevity, showing verbs from various parents, with owners, permissions, and argument lists.", "  @d poolsweep;", "  poolsweep (#3560) [ readable ]", "   #3560:tell                     yduJ (#68)           rxd    this none this", "   #3560:description              yduJ (#68)           rxd    this none this", "      #5:\"g*et t*ake\"             Haakon (#2)          rxd    this none none", "      #5:\"d*rop th*row\"           Haakon (#2)          rxd    this none none", "      #5:moveto                   Haakon (#2)          rxd    this none this", "      #1:description              Haakon (#2)          rxd    this none this", "      #1:look_self                Haakon (#2)          rxd    this none this", "", "Some aspects of @display can be customized (see `help @display-options')."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@dbsize</NAME>
          <VALUE>{"Syntax:  @dbsize", "", "@dbsize goes through the entire database, counting the valid and invalid objects, giving a summary at the end.  This information can be useful, but because this command is cpu intensive, it should be used sparingly."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@copy</NAME>
          <VALUE>{"Syntax:  @copy &lt;object&gt;:&lt;verb&gt; to [&lt;newobject&gt;][:&lt;newverb&gt;]", "         @copy-move &lt;object&gt;:&lt;verb&gt; to [&lt;newobject&gt;][:&lt;newverb&gt;]", "", "Copies the code of the named verb to the new object and verbname.  Permissions, and arguments of the new verb are set to match those of the old verb in the event that the new verb does not already exist.  One of &lt;newobject&gt; or :&lt;newverb&gt; must be supplied.  If no new verbname is given, the old name is retained.  Likewise, &lt;newobject&gt; defaults to &lt;object&gt; if not given.", "", "@copy-move will delete the old verb after it has copied.  Useful for restructuring code/object hierarchies.", "", "Examples:", "  @copy me:verbname to myobject", "  @copy me:test_verb to myobject:real_verb", "", "In general, @copy'ing verbs is a bad idea.  In the vast majority of cases, the desired effect can be accomplished with parenting (i.e., having &lt;object&gt; be an ancestor of &lt;newobject&gt;), which has the advantage that if a verb is updated or fixed, this immediately becomes available to child objects that inherit this verb.  In such a case, copies that were made using @copy have to be tracked down and fixed by hand.", "", "This facility is provided for those rare occasions where one has no choice but to actually copy the verb."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@chparent</NAME>
          <VALUE>{"Syntax:  @chparent &lt;object&gt; to &lt;new parent&gt;", "", "Changes the parent of the named object to be the named parent.  The object acquires all the verb and property definitions of its parent.  Newly acquired properties are initilialized with `clear' values so that they inherit whatever values are currently assigned to the parent's corresponding properties (see `help @clearproperty').", "", "If the player does not own &lt;new parent&gt;, it must have been set `fertile'.  &lt;object&gt; must be owned by the player.  Neither &lt;object&gt; nor any descendant can define any property which already exist on &lt;new parent&gt;.  Use @check-chparent (see `help @check-chparent') to list such property conflicts.", "", "It is also sometimes the case that you will own some object and want to @chparent some child of that object that you do not own.  Use @disinherit (see `help @disinherit') in such situations."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@chmod</NAME>
          <VALUE>{"Syntax:  @chmod &lt;object&gt; &lt;object-permissions&gt;", "         @chmod &lt;object&gt;.&lt;prop-name&gt; &lt;property-permissions&gt;", "         @chmod &lt;object&gt;:&lt;verb-name&gt; &lt;verb-permissions&gt;", "         @chmod# &lt;object&gt;:&lt;verb-number&gt; &lt;verb-permissions&gt;", "", "Changes the permissions of an object, property or verb, to those given.  The following table shows what permission bits are allowed for each form of the command:", "        &lt;object-permissions&gt;        r, w, f", "        &lt;property-permissions&gt;      r, w, c", "        &lt;verb-permissions&gt;          r, w, x, d", "", "See the LambdaMOO Programmer's Manual for their meanings.", "", "The form @chmod# is used to unambiguously refer to a verb by its 1-based index as it appears in the verbs() (or @verbs()) output list.", "", "To clear all of the permissions for an object, verb, or property, use \"\" as the second argument.", "", "@chmod also accepts +, !, and - as modifiers for a single permission to add or subtract that permission from the current set.  (! and - are the same.)", "", "Examples:", "", "Set a verb to be Readable and Callable:", "  @chmod chair:sit rx", "", "Set a verb to be not Callable, without changing its other permissions:", "  @chmod cookies:eat !x", "", "Set an object to be Fertile in addition to any current bits:", "  @chmod table +f"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@args</NAME>
          <VALUE>{"Syntax:  @args &lt;object&gt;:&lt;verb-name&gt; &lt;dobj&gt;", "         @args &lt;object&gt;:&lt;verb-name&gt; &lt;dobj&gt; &lt;prep&gt;", "         @args &lt;object&gt;:&lt;verb-name&gt; &lt;dobj&gt; &lt;prep&gt; &lt;iobj&gt;", "         @args# &lt;object&gt;:&lt;verb-number&gt; [any above combinations]", "", "Changes the direct object, preposition, and/or indirect object specifiers for the named verb on the named object.  Any specifiers not provided on the command line are not changed.  The direct and indirect object specifiers (&lt;dobj&gt; and &lt;iobj&gt;) must be either 'none', 'this', or 'any'.  The preposition specifier (&lt;prep&gt;) must be either 'none', 'any', or one of the prepositional phrases listed in `help prepositions'.", "", "To unambiguously refer to the verb on the object, in case there are more than one with the same name, use @args#. This takes the 1-based index of the verb as it appears in the verbs() (or @verbs()) output list.", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>.program</NAME>
          <VALUE>{"Syntax:  .program &lt;object&gt;:&lt;verb-name&gt;", "              :", "              :", "              &lt;lines of MOO code&gt;", "              :", "              :", "         .", "", "Provides or changes the MOO program associated with the named verb on the named object.", "", "This command is mostly obsolete.  Use @program instead.  The only reason this command still exists is that it is a server builtin command that will continue to work in the (unlikely) event that @program gets trashed ...", "", "This command works differently from most other MOO commands, in that it actually changes how the server will interpret later lines that you type to it.  After typing the '.program' line, you are in 'programming mode'.  All lines that you type in this mode are simply saved away in the server until you type a line containing only a single period ('.').  At that point, those lines are interpreted as a MOO program and are checked for syntax errors.  If none are found, a message to that effect is printed and the code you typed is installed as the program for the verb in question.  In any case, after typing the '.' line, you are returned to the normal input-handling mode."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@clearproperty</NAME>
          <VALUE>{"Syntax:   @clearproperty &lt;object&gt;.&lt;prop-name&gt;", "", "This clears &lt;object&gt;'s &lt;prop-name&gt; property.  That is the property value becomes `clear' and all further references to this property will use the value of the same property on the parent object.  Note that you can only clear inherited properties.  Nor is this the same as removing a property; the property continues to exist.", "", "`@clearproperty' can be abbreviated as `@clearp'.", "", "Example:", "", "  @create #1 named foo", "  You now have foo with object number #42 and parent Root Class (#1).", "    [foo, as a child of #1 has a .description property which starts out clear]", "  ;#1.description", "  =&gt; \"\"", "  ;#1.description = \"You see nothing special\"", "  =&gt; \"You see nothing special\"", "  ;#42.description  ", "  =&gt; \"You see nothing special\"", "  ;#42.description = \"Something special\"", "  =&gt; \"Something special\"", "   [foo.description is now no longer clear; it has a value of its own]", "  ;#1.description = \"Boring\"", "  =&gt; \"Boring\"", "  ;#42.description  ", "  =&gt; \"Something special\"", "   ", "  @clearp foo.description", "  Property #42.description cleared; value is now \"Boring\".", "   [foo.description is now clear again]", "  ;#1.description = \"\"", "  =&gt; \"\"", "  ;#42.description", "  =&gt; \"\""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@disown</NAME>
          <VALUE>{"*forward*", "@disinherit"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@disinherit</NAME>
          <VALUE>{"Syntax:   @disinherit &lt;object&gt; ", "          @disinherit &lt;object&gt; [from &lt;parent&gt;]", "", "Synonym:  @disown", "", "This command is used to remove an unwanted child from an object you own.  If you owned said child, you could use @chparent; this command is to cover the other case, namely where you don't own the child.  ", "", "Both forms of this command chparent &lt;object&gt; to its grandparent, provided you own the parent.  The second form matches the string you supply for &lt;object&gt; against the list of children of the given &lt;parent&gt;.", "", "Turning off the fertile bit (.f) for a particular object prevents others from creating children of it or chparenting to it (see `help @chmod').", "Note also that, though the name might seem to indicate otherwise, this command does not change the ownership of any object."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@displayoptions</NAME>
          <VALUE>{"*forward*", "@display-options"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@display-options</NAME>
          <VALUE>{"Syntax:  @display-option", "         @display-option &lt;option&gt;", "", "Synonym:  @displayoption", "", "The display options customize the behavior of the @display command to your particular taste.  The first form of this command displays all of your display options.  The second form displays just that one option, one of the flags listed below.", "", "The remaining forms of this command are for setting your display options:", "", "         @display-option +&lt;flag&gt;", "         @display-option -&lt;flag&gt;", "         @display-option !&lt;flag&gt;           (equivalent to -&lt;flag&gt;)", "", "These respectively set and reset the specified flag", "", "-blank_tnt     Show the verb args on all verbs.", "+blank_tnt     Don't show the verb args on `this none this' verbs.", "-shortprep     Use full prepositions  (e.g., \"on top of/on/onto/upon\")", "+shortprep     Use short prepositions (e.g., \"on\")", "-thisonly      Specifying . (:) to retrieve all properties (verbs) will go", "               up the ancestor chain until it finds a readable object with", "               properties (verbs) defined on it.", "+thisonly      Specifying . (:) to retrieve all properties (verbs) will only", "               display properties (verbs) defined on the object itself."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@add-feature</NAME>
          <VALUE>{"*pass*", "@add-feature", "", "Note to programmers: @add-feature and @remove-feature are front-ends for player:add_feature and :remove_feature.", "", ":add_feature returns", "", " * E_PERM unless caller == this || $perm_utils:controls(caller_perms())", "", " * E_INVARG if feature is not an object or is invalid", "", " * E_PERM if the object is not feature_ok", "", " * a true value otherwise", "", "and calls feature:feature_add, if the verb exists.", "", ":remove_feature returns", "", " * E_PERM unless caller == this || $perm_utils:controls(caller_perms()) || caller_perms() == feature.owner", "", " * a true value otherwise", "", "and calls feature:feature_remove, if the verb exists."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@remove-feature</NAME>
          <VALUE>{"*forward*", "@add-feature"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>features</NAME>
          <VALUE>{"*pass*", "features", "", "Note to programmers: In order to be available for general use as a feature, an object must have a verb or property named \"feature_ok\" which returns a true value.", "", "When a feature is added to a player's features list, feature:feature_add is called, if it exists, with the player in question as its argument.  Likewise, when a feature is removed, feature:feature_remove is called."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>examine</NAME>
          <VALUE>{"*pass*", "examine", "", "[Note to programmers: the 'obvious' verbs are those that can be invoked as commands and are not specified by the :hidden_verbs verb.  The default definition of \"hidden\" is \"not readable\".  You can override this definition with a :hidden_verbs verb that gets the default list with pass(@args) and then alters that list.]"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>mail</NAME>
          <VALUE>{"*pass*", "mail", " - - - - -", "See `help mail-system' for a description of the programming interface to the mail system.", "In particular, see `help $mail_recipient' for information on creating new mail collections."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>#</NAME>
          <VALUE>{"#&lt;string&gt;[.&lt;property&gt;|.parent] [exit|player|inventory] [for &lt;code&gt;] returns information about the object (we'll call it &lt;thing&gt;) named by string.  String is matched in the current room unless one of exit|player|inventory is given.", "If neither .&lt;property&gt;|.parent nor &lt;code&gt; is specified, just return &lt;thing&gt;.", "If .&lt;property&gt; is named, return &lt;thing&gt;.&lt;property&gt;.  .parent returns parent(&lt;thing&gt;).", "If &lt;code&gt; is given, it is evaluated, with the value returned by the first part being substituted for %# in &lt;code&gt;.", "For example, the command", "  #JoeFeedback.parent player for tonum(%#)", "will return 26026 (unless Joe has chparented since writing this)."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@programmer-options</NAME>
          <VALUE>{"*forward*", "@prog-options"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@programmeroptions</NAME>
          <VALUE>{"*forward*", "@prog-options"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@progoptions</NAME>
          <VALUE>{"*forward*", "@prog-options"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@prog-options</NAME>
          <VALUE>{"Syntax:  @prog-option", "         @prog-option &lt;option&gt;", "", "Synonyms:  @progoption, @programmer-option @programmeroption", "", "The first form displays all of your programmer options", "The second displays just that one option, which may be one of the flags listed below.  The programmer options control various annoying details of your programming commands (e.g., @list, eval, @copy, ...)", "", "The remaining forms of this command are for setting your programmer options:", "", "         @prog-option +&lt;flag&gt;", "         @prog-option -&lt;flag&gt;", "         @prog-option !&lt;flag&gt;           (equivalent to -&lt;flag&gt;)", "", "These respectively set and reset the specified flag", "", " -list_all_parens    @list shows only necessary parentheses by default", " +list_all_parens    @list shows all parentheses by default", " -list_no_numbers    @list gives line numbers by default", " +list_no_numbers    @list does not give line numbers by default", " -eval_time          eval does not show ticks/seconds consumed.", " +eval_time          eval shows ticks/seconds consumed.", " -copy_expert        @copy prints warning message.", " +copy_expert        @copy prints no warning message.", " -list_show_permissions  @list does not display permissions in header", " +list_show_permissions  @list displays permissions in header", "", "All flags default to the `-' settings.  ", "Finally, we have", "", "         @prog-option verb_args [is] &lt;dobj&gt; &lt;prep&gt; &lt;iobj&gt;", "         @prog-option verb_args=\"&lt;dobj&gt; &lt;prep&gt; &lt;iobj&gt;\"", "         @prog-option -verb_args", "                      (equivalent to verb_args=\"none none none\")", "         @prog-option +verb_args", "                      (equivalent to verb_args=\"this none this\")", "", "which all serve to specify the (direct/indirect)-object and preposition to use in a @verb command for which these are not given at all."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>options</NAME>
          <VALUE>{"*pass*", "options", "", "  @prog-options    --- programming commands (@list, @verb, ...)", "  @display-options --- @display (*)"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>utils</NAME>
          <VALUE>{"*forward*", "utilities"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@killquiet</NAME>
          <VALUE>{"*forward*", "@kill"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>scattering</NAME>
          <VALUE>{"It is often the case in MOO programming that you will want to access the elements of a list individually, with each element stored in a separate variables.  This desire arises, for example, at the beginning of almost every MOO verb, since the arguments to all verbs are delivered all bunched together in a single list.  In such circumstances, you could write statements like these:", "", "first = args[1];", "second = args[2];", "if (length(args) &gt; 2)", "  third = args[3];", "else", "  third = 0;", "endif", "", "This approach gets pretty tedious, both to read and to write, and it's prone to errors if you mistype one of the indices. Also, you often want to check whether or not any extra list elements were present, adding to the tedium.", "", "MOO provides a special kind of assignment expression, called `scattering assignment' made just for cases such as these. A scattering assignment expression looks like this:", "", "{&lt;target&gt;, ...} = &lt;expr&gt;", "", "where each &lt;target&gt; describes a place to store elements of the list that results from evaluating &lt;expr&gt;. A &lt;target&gt; has one of the following forms:", "", "`variable'", "   This is the simplest target, just a simple variable; the list element in the corresponding position is assigned to the variable.  This is called a `required' target, since the assignment is required to put one of the list elements into the variable.", "", "`?variable'", "   This is called an `optional' target, since it doesn't always get assigned an element. If there are any list elements left over after all of the required targets have been accounted for (along with all of the other optionals to the left of this one), then this variable is treated like a required one and the list element in the corresponding position is assigned to the variable. If there aren't enough elements to assign one to this target, then no assignment is made to this variable, leaving it with whatever its previous value was.", "", "`?variable' = `default-expr'", "   This is also an optional target, but if there aren't enough list elements available to assign one to this target, the result of evaluating `default-expr' is assigned to it instead. Thus, `default-expr' provides a default value for the variable. The default value expressions are evaluated and assigned working from left to right -after- all of the other assignments have been performed.", "", "`@variable'", "   By analogy with the @ syntax in list construction, this variable is assigned a list of all of the `leftover' list elements in this part of the list after all of the other targets have been filled in. It is assigned the empty list if there aren't any elements left over. This is called a `rest' target, since it gets the rest of the elements. There may be at most one rest target in each scattering assignment expression.", "", "If there aren't enough list elements to fill all of the required targets, or if there are more than enough to fill all of the required and optional targets but there isn't a rest target to take the leftover ones, then E_ARGS is raised.", "", "Here are some examples of how this works.  Assume first that the verb me:foo() contains the following code:", "", "b = c = e = 17;", "{a, ?b, ?c = 8, @d, ?e = 9, f} = args;", "return {a, b, c, d, e, f};", "", "Then the following calls return the given values:", "", "me:foo(1)                        error--&gt;   E_ARGS", "me:foo(1, 2)                     =&gt;   {1, 17, 8, {}, 9, 2}", "me:foo(1, 2, 3)                  =&gt;   {1, 2, 8, {}, 9, 3}", "me:foo(1, 2, 3, 4)               =&gt;   {1, 2, 3, {}, 9, 4}", "me:foo(1, 2, 3, 4, 5)            =&gt;   {1, 2, 3, {}, 4, 5}", "me:foo(1, 2, 3, 4, 5, 6)         =&gt;   {1, 2, 3, {4}, 5, 6}", "me:foo(1, 2, 3, 4, 5, 6, 7)      =&gt;   {1, 2, 3, {4, 5}, 6, 7}", "me:foo(1, 2, 3, 4, 5, 6, 7, 8)   =&gt;   {1, 2, 3, {4, 5, 6}, 7, 8}", "", "Using scattering assignment, the example at the begining of this section could be rewritten more simply, reliably, and readably:", "", "{first, second, ?third = 0} = args;", "", "It is good MOO programming style to use a scattering assignment at the top of nearly every verb, since it shows so clearly just what kinds of arguments the verb expects."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>.flush</NAME>
          <VALUE>{"Syntax:  .flush", "", "Clear out all recent lines of input that haven't been processed yet by the server. Useful when you change your mind about lines you have typed that haven't run yet.", "", "This command name can be changed by the `set_connection_option()' built-in function, or if $server_options.default_flush_command exists and is non-empty, that value is used. If it exists and -is- empty, then no flush command exists at all."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@rmverb#</NAME>
          <VALUE>{"*forward*", "@rmverb"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@list#</NAME>
          <VALUE>{"*forward*", "@list"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@program#</NAME>
          <VALUE>{"*forward*", "@program"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@args#</NAME>
          <VALUE>{"*forward*", "@args"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@chmod#</NAME>
          <VALUE>{"*forward*", "@chmod"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@rename#</NAME>
          <VALUE>{"*pass*", "@rename"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@addalias#</NAME>
          <VALUE>{"*pass*", "@addalias"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@add-alias#</NAME>
          <VALUE>{"*pass*", "@addalias"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@rmalias#</NAME>
          <VALUE>{"*pass*", "@rmalias"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@rm-alias#</NAME>
          <VALUE>{"*pass*", "@rmalias"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>index</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>index_cache</NAME>
          <VALUE>{"prog-index"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"Programmer Help"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>"This provides help on the programmer commands available on $prog and related topics."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{88371, 919123672}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>errors</NAME>
          <CODE>
            text = args[1];
            for i in [1..length($code_utils.error_list)]
            text = {@text, tostr("    ", $string_utils:left($code_utils.error_names[i], 15), $code_utils.error_list[i])};
            endfor
            return text;
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>prepositions</NAME>
          <CODE>
            text = args[1];
            for p in ($code_utils:prepositions())
            text = {@text, tostr($string_utils:space(4), p)};
            endfor
            return text;
          </CODE>
        </VERB>
      </OBJECT>
      <OBJECT ID="obj23" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
        <NAME>Wizard Help</NAME>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@guests</NAME>
          <VALUE>{"", "@guests now  [shows information about currently connected guests]", "@guests all  [shows all entries in $guest_log]", "@guests &lt;n&gt;  [shows the last &lt;n&gt; entries of $guest_log]", "", "Note, some wizards prefer to use verbs on $guest_log manually, particularly :last()."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@log</NAME>
          <VALUE>{"Syntax:  @log &lt;message&gt;", "         @log", "", "The first form enters &lt;message&gt; as a one-line comment in the server log.", "The second form prompts for a sequence of lines to be collectively entered as an extended comment.  This uses $command_utils:read_lines so all of those conventions apply, i.e., a period on a line by itself ends the text, `@abort' aborts the command, etc...).  Example:  If Wizard (#2) types", "", "    @log I did $dump_interval=3600", "", "the following line appears in the server log", "", "    Aug 19 22:36:52:  COMMENT:  from Wizard (#2):  I did $dump_interval=3600"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@egrep</NAME>
          <VALUE>{"*forward*", "@grep"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@unnewt</NAME>
          <VALUE>{"*forward*", "@denewt"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@denewt</NAME>
          <VALUE>{"Syntax:    @denewt &lt;player&gt; [commentary]", "", "Synonyms:  @unnewt", "           @get-better", "", "@denewt reverses the effects of @newt, removing the player from $login.newted, and if appropriate, $login.temporary_newts.", "", "Mail is sent to $newt_log including any commentary you provide.  E.g.,", "", "  @denewt Twit  He promises not to do it again."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@newt</NAME>
          <VALUE>{"*subst*", "Syntax:  @newt &lt;player&gt; [commentary]", "         @temp-newt &lt;player&gt; for &lt;period&gt;", "", "The @newt command temporarily prevents logins on a given player.", "It works by adding the player to $login.newted, and for @temp-newt, also adding the player and an end time to $login.temporary_newts.  $login will deny connection to any player in $login.newted, unless they are temporarily newted and their time has expired, in which case it will clean up---denewt them---and allow the connection attempt.  Use @denewt to reverse this.", "", "You must give either the player's full name or its object number.", "Also, this command does not let you @newt yourself.", "", "Mail will be sent to $newt_log, listing the player's .all_connect_places and including any commentary you provide.  E.g.,", "", "  @newt Twit  did real annoying things.", "", "As with @toad and @programmer, there are messages that one may set", "", "@newt  [%[$wiz.newt_msg]]", "  Printed to everyone in the room in which the victim is being @newted.", "  If you're worried about accidentally newting yourself in the process of", "  setting this message, you can't (see above).", "", "@newt_victim  [%[$wiz.newt_victim_msg]]", "  Printed to the victim.  ", "  This is followed by $login:newt_registration_string().", "", "See `help @toad' if you need something more drastic.", "", "The @temp-newt variant of @newt permits you to specify a time period during which this player may not use the MOO.  Time units must be acceptable to $time_utils:parse_english_time_interval."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@grep</NAME>
          <VALUE>{"*pass*", "@grep", "", "For wizards, the following forms are also available for doing full-db searches", "", "         @grep  &lt;pattern&gt;", "         @egrep &lt;pattern&gt;", "         @grep  &lt;pattern&gt; from [#]&lt;n&gt;", "         @egrep &lt;pattern&gt; from [#]&lt;n&gt;", "", "the first two search all objects in the database while the last two search the range [#&lt;n&gt;..max_object()]", "", "See also:  @grepcore, @who-calls."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>$site_db</NAME>
          <VALUE>{"Database of places", "------------------", "i.e., places people have connected from.", "", "  :add(sitename,player)", "      records the fact that player connected from sitename.", "  :load()", "      clears the db and reloads all of the player connection info.", "", "  .domain", "      default domain for unqualified sitenames given to :add.", "      ", "For each domain we keep a list of players and subdomains. ", "For example, :add(\"doc.ic.ac.uk\",#666) enters #666 on the lists for \"doc.ic.ac.uk\", and, if we have to create an entry for \"doc.ic.ac.uk\", we enter \"doc\" on the list for \"ic.ac.uk\", \"ic\" on the list for \"ac.uk\", etc....  In this case, :find(\"ic\") will return the \"ic.ac.uk\" list if there is no other domain in $site_db starting with \"ic\".  Note that the \"ic.ac.uk\" list may contain both objects, i.e., namely players that have connected from the site \"ic.ac.uk\", and strings, i.e., subdomains of \"ic.ac.uk\" like \"doc\".", "", "  :find_exact(string)    =&gt; player/subdomain list or $failed_match", "  :find_all_keys(string) =&gt; list of all domains that begin with string", "  :find_key     (string) =&gt; unique domain that begins with string, ", "                            $ambiguous_match or $failed_match", "", "The other $generic_db functions (:find, :find_all) are also available, though admittedly less useful."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>graylist</NAME>
          <VALUE>{"*forward*", "blacklist"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>blacklist</NAME>
          <VALUE>{"", "The Site Blacklist", "------------------", "$login maintains three lists of hosts/domains to support player registration schemes and blocking of connections from highly untrusted hosts:", "", "  .redlist   -- all connections from these sites are disabled ", "  .blacklist -- player creation and guest logins are disabled", "  .graylist  -- advisory list of potential trouble spots (putting a site on the", "                .graylist merely annotates it in @net-who listings).", "  .spooflist -- guests from these sites cannot use @request to request ", "                a character", "", "The lists are kept in a special format so it is highly recommended that you ", "either use $wiz:@*list/@un*list or the following verbs to query/update the ", "respective lists rather than bash them directly:", "", "  $login:*listed     (host)              is host is on .*list?", "  $login:*list_add   (domain or subnet)  add domain or subnet to .*list", "  $login:*list_remove(domain or subnet)  remove domain or subnet from .*list", "", "where `*' is one of `black', `red', `gray', or `spoof'.", "", "There are also temporary versions of the above four lists, stored in associated $login.temporary_*list in the same format, except two additional bits of data are stored.  The time the temporary *listing started, and the duration that it will last.  In addition there exists:", "", "  $login:*list_add_temp(domain or subnet, start time, duration)", "  $login:*list_remove_temp(domain or subnet)", "", "When the normal $login:*listed verb is called, both the regular *list and the temporary *list are checked.  If the host is on the temporary list, then the length of MOO up time since the start time is checked against the duration.  If expired, the host is removed from the temporary *list and a false value is returned (meaning that the host is not *listed).", "", "One may either specify a domain name (e.g., \"baz.edu\") or a numeric IP address (e.g., \"36.0.23.17\").  Domain names match all hosts underneath that domain, so, e.g., puting \"baz.edu\" on a list effectively adds \"x.bax.edu\" for all x as well.  ", "Likewise, an incomplete numeric address, e.g., \"128.42\" will match that entire subnet, in this case all hosts whose IP numbers have the form \"128.42.m.n\" for arbitrary integers m and n.", "", "One may also give a domain name containing a wildcard (\"*\"), e.g., \"fritz*.baz.edu\", in which case all hostnames matching in the sense of $string_utils:match_string() are considred to be on the list.  Wildcard matching should be avoided since it is more time-consuming.", "", "It should be noted that, since there is no direct access to the domain name service from within the MOO, it is possible for a host to be blacklisted or redlisted via its domain name, and yet have someone be able to connect from that host (and, in the case of a blacklisted host, create a character) --- this can happen if the name service is down and connection_name() on that player thus has given the numeric IP address rather than the domain name.  Similarly, if you list a host by IP number alone, it will still be possible to get in via the site's domain name.  Thus to be completely assured of shutting out a site, you need to list it both by domain name and IP number."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@recycle</NAME>
          <VALUE>{"*pass*", "@recycle", "", "Of course, wizards are allowed to @recycle anything at all.", "", "There is, however, a block (in $player:recycle) against recycling actual players, i.e., descendants of $player that have the player flag set.  This is mainly to prevent stupid mistakes.  If, for some reason, you want to recycle a player, you need to @toad it first."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>wiz-index</NAME>
          <VALUE>{"*index*", "Wizard Help Topics"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@dump-database</NAME>
          <VALUE>{"Syntax:  @dump-database", "", "Invokes the builtin dump_database(), which requests that the server checkpoint the database at its next opportunity.  It is not normally necessary to call this function; the server automatically checkpoints the database at regular intervals; see the chapter on server assumptions about the database for details."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@players</NAME>
          <VALUE>{"Syntax:  @players [with objects]", "", "Hmmm... what *does* this do, anyway?"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@net-who</NAME>
          <VALUE>{"Syntax:  @net-who [&lt;player&gt;...]", "         @net-who from [&lt;domain&gt;]", "", "Synonym: @@who", "", "@net-who without any arguments prints all connected users and hosts.  If one or more &lt;player&gt; arguments are given, the specified users are printed along with their current or most recent connected hosts.  If any of these hosts are mentioned on $login.blacklist or $login.graylist (see `help blacklist'), ", "an annotation appears.", "", "With a `from...' argument, this command consults $site_db and prints all players who have ever connected from the given domain."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@@who</NAME>
          <VALUE>{"*forward*", "@net-who"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>make-core-database</NAME>
          <VALUE>{"Syntax:  make-core-database", "", "...makes a core database (surprise).  Film at 11..."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@quota</NAME>
          <VALUE>{"*pass*", "@quota", "", " - - - - - - - - - - - - - - - - - - - - - - - - - -", "Syntax:  @quota &lt;player&gt; is [public] [+]&lt;number&gt; [&lt;reason&gt;]", "", "This second and more interesting form of the verb is used to set a player's quota.  Mail will be sent to $quota_log, and also $local.public_quota_log if there is one and if the \"public\" argument is given; if a reason is supplied, it will be included in the message.  If the number is prefixed with a +, it's taken as an amount to add to the player's current quota; if not, it's an absolute amount."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@detoad</NAME>
          <VALUE>{"*forward*", "@untoad"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@untoad</NAME>
          <VALUE>{"Syntax:  @untoad &lt;object&gt; [as &lt;name&gt;,&lt;alias&gt;,&lt;alias&gt;...]", "", "Synonym: @detoad", "", "Turns the object into a player.  ", "If the name/alias... specification is given, the object is also renamed.", "In order for this to work, the object must be a nonplayer descendant of $player and the new object name (or the original name if none is given in the command line) must be available for use as a player name.  As with ordinary player @renaming, any aliases which are unavailable for use as player names are eliminated.", "", "If the object is a descendant of $guest, then it becomes a new guest character.", "Otherwise the object is chowned to itself.  In the latter case, it is advisable to check that the .password property has something nontrivial in it.", "", "If the object is a descendant of $prog, then its .programmer flag is set.", "Note that the .wizard flag is not set under any circumstances."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@toad</NAME>
          <VALUE>{"*subst*", "Syntax:  @toad   &lt;player&gt;  [graylist|blacklist|redlist]", "         @toad!  &lt;player&gt;", "         @toad!! &lt;player&gt;", "", "Resets the player flag of &lt;player&gt; (thus causing &lt;player&gt; to be booted), resets the .programmer and .wizard flags, chowns the player object to $hacker, and removes all of its names and aliases from $player_db.", "", "You must give either the player's full name or its object number.", "Also, this command does not let you @toad yourself.", "", "In some cases you may wish to add the player's last connected site to the site graylist, blacklist or redlist --- see `help blacklist' --- in order to invoke various kinds of blocking on that site (e.g., if player creation is enabled, you may want to enter the player on the blacklist to keep him from immediately creating a new character).  Specifying one of the listnames `graylist', `blacklist' or `redlist' will do this.", "", "@toad!  &lt;player&gt;  is synonymous with  @toad &lt;player&gt; blacklist", "@toad!! &lt;player&gt;  is synonymous with  @toad &lt;player&gt; redlist", "", "There are messages that one may set to customize toading.  After all, a toading is (supposed to be) a rare event and you will doubtless want to put on a good show.  Thus we have", "", "@toad  [%[$wiz.toad_msg]]", "  Printed to everyone in the room in which the victim is being @toaded.", "  If you're worried about accidentally toading yourself in the process of", "  setting this message, see above.", "", "@toad_victim  [%[$wiz.toad_victim_msg]]", "  Printed to the victim.", "", "These are pronoun_subbed with victim == dobj."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@grepcore</NAME>
          <VALUE>{"Syntax:  @grepcore &lt;pattern&gt;", "         @who-calls &lt;verbname&gt;", "", "@grepcore pattern is @grep pattern in {all core objects}.  Core objects are computed for you by #0:core_objects().", "", "@who-calls greps for the verbname + \"(\", hoping to catch it as a verb call.  Currently @who-calls does not allow you to restrict the search as @grep does.  (Volunteers?)"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@who-calls</NAME>
          <VALUE>{"*forward*", "@grepcore"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@abort-shutdown</NAME>
          <VALUE>{"Syntax:  @abort-sh*utdown [&lt;text&gt;]", "", "This aborts any shutdown currently in progress (i.e., set in motion by @shutdown).  All players are notified that no shutdown will actually occur; &lt;text&gt;, if given will be included in this notification."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@shutdown</NAME>
          <VALUE>{"Syntax:  @shutdown [in &lt;m&gt;] [&lt;text&gt;]", "", "This is the friendly way to do a server shutdown; it arranges for the actual shutdown to take place `m' minutes hence (default two).  Shutdown is preceded by a sequence of warnings to all connected players.  Warnings are likewise given to all players who connect during this time.  &lt;text&gt;, if given is included in these warning messages, perhaps as an explanation for why the server is being shut down.", "", "Shutdown may be aborted at any time by using @abort-shutdown."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@programmer</NAME>
          <VALUE>{"*subst*", "Syntax:  @programmer &lt;player&gt;", "", "Sets the programmer flag on the indicated player and sends mail to $new_prog_log.  ", "", "If the player is not already a descendant of $prog, we @chparent him/her to $prog.  In this case, if $prog has a larger .ownership_quota than its ancestors, then we raise the player's quota by the difference between $prog.ownership_quota and the .ownership_quota of the common ancestor of player and $prog, be this $player or some intermediate class.", "", "There are messages that one may set to customize how the granting of a programmer bit looks to the victim and to any onlookers.  After all, this is a seminal event in a MOOer's life...  Thus we have", "", "@programmer  [%[$wiz.programmer_msg]]", "  Printed to everyone in the room with the victim being @programmer'ed.", "", "@programmer_victim  [%[$wiz.programmer_victim_msg]]", "  Printed to the victim.", "", "These are pronoun subbed with victim == dobj."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@shout</NAME>
          <VALUE>{"Syntax:  @shout &lt;text&gt;", "", "Broadcasts the given text to all connected players."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@chown</NAME>
          <VALUE>{"Syntax:  @chown &lt;object&gt;            [to] &lt;owner&gt;", "         @chown &lt;object&gt;.&lt;propname&gt; [to] &lt;owner&gt;", "         @chown &lt;object&gt;:&lt;verbname&gt; [to] &lt;owner&gt;", "         @chown# &lt;object&gt;:&lt;verbnumber&gt; [to] &lt;owner&gt;", "", "Changes the ownership of the indicated object, property or verb.", "", "Verb ownership changes are fairly straightforward, being merely a matter of changing the verb_info() on a single verb. Referring to a verb isn't as straightforward since two verbs on the same object can have the same name. So, @chown# is provided where you can refer to a verb by it's 1-based index in the output of the verbs() builtin.", "", "Changing an object ownership includes changing the ownership on all +c properties on that object.  Note that @chown will not change the ownership of any other properties, nor will it change verb ownerships.  Use @grant if you need to do a more complete ownership change.  The quota of the former owner is increased by one, as is the quota of the new owner decreased by one.", "", "Changing a property ownership is truly hairy.  If the property is +c one shouldnot be doing this, unless it is to correct a past injustice which caused the property to be owned by the wrong player.  In the case of -c properties, the property ownership is changed on all descendent objects (currently, if +c instances of a -c property are found in the traversal of all of the descendants, these are not changed, being deemed sufficiently weird that they should be handled on a case-by-case basis...).", "", "If there's any justice, a future version of the server will prevent occurrences of (1) +c properties being owned by someone other than the object owner (2) -c properties with different owners on descendant objects (3) -c properties that are +c on some descendants."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>redlist</NAME>
          <VALUE>{"*forward*", "blacklist"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@blacklist</NAME>
          <VALUE>{"Syntax:  @redlist   [&lt;domain or subnet&gt; [for &lt;duration&gt;] [commentary]]", "         @blacklist [&lt;domain or subnet&gt; [for &lt;duration&gt;] [commentary]]", "         @graylist  [&lt;domain or subnet&gt; [for &lt;duration&gt;] [commentary]]", "         @spooflist [&lt;domain or subnet&gt; [for &lt;duration&gt;] [commentary]]", "", "Syntax:  @unredlist   [&lt;domain or subnet&gt; [commentary]]", "         @unblacklist [&lt;domain or subnet&gt; [commentary]]", "         @ungraylist  [&lt;domain or subnet&gt; [commentary]]", "         @unspooflist [&lt;domain or subnet&gt; [commentary]]", "", "With no argument, the current contents of the corresponding list are printed.", "Otherwise, the specified domain or subnet is added to or removed from the list and mail will be sent to $site_log.", "", "To add a domain or subnet to a *list only temporarily, include a `for &lt;duration&gt;' statement before any commentary.  The &lt;duration&gt; should be in english form such as 1 day or 1 month 2 weeks or 1 year 3 months 2 weeks 4 days.  No commas should separate increments in the duration.  See `help $time_utils:parse_english_time_interval' for more details.  If you are not temporarily *listing a domain or subnet, but are including a commentary, be sure that the commentary does not start with the word `for'.", "", "If the given domain or subnet has subdomains/subsubnets that are already on the list, you will be prompted as to whether you want to remove them.  Note that adding an entry for a particular domain or subnet effectively adds all subdomains/subsubnets, so unless there's some reason for keeping an explicit entry for a particular subdomain, chances are you will indeed want to remove them.  One reason to keep an explicit entry for a subdomain would be if you intended to unlist the full domain later but wanted to be sure you didn't unlist the subdomain in the process.", "", "See `help blacklist' for a description of the functions of these lists."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@graylist</NAME>
          <VALUE>{"*forward*", "@blacklist"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@redlist</NAME>
          <VALUE>{"*forward*", "@blacklist"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@make-guest</NAME>
          <VALUE>{"Syntax:  @make-guest &lt;adjective&gt;", "", "This creates a new guest character.  For example,", "  @make-guest Loud", "creates a child of $guest, owned by $hacker, named Loud_Guest and with aliases Loud and Loud_Guest.", "", "Note that in order to have `connect guest' connect to a guest character, there needs to exist some guest character having \"Guest\" as a name or alias.", "", "See also `help @make-player'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@spooflist</NAME>
          <VALUE>{"*forward*", "@blacklist"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>spooflist</NAME>
          <VALUE>{"*forward*", "blacklist"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@make-player</NAME>
          <VALUE>{"@make-player name[,aliases] [email-address [commentary]]", "Creates a player.", "Generates a random password for the player.", "Email-address is stored in $registration_db and on the player object.", "Comments should be enclosed in quotes.", "", "Example: @make-player George sanford@frobozz.com \"George shares email with Fred Sanford (Fred #5461)\"", "", "If the email address is already in use, prompts for confirmation.  If the name is already in use, prompts for confirmation.  (Say no, this is a bug: it will break if you say yes.)  If you say no at one of the confirming prompts, character is not made.", "", "If network is enabled (via $network.active) then asks if you want to mail the password to the user after character is made."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@register</NAME>
          <VALUE>{"Information about $wizard:@register", "----", "Registers a player.", "Syntax:  @register name email-address [additional commentary]", "Email-address is stored in $registration_db and on the player object."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@new-password</NAME>
          <VALUE>{"@new-password player is [password]", "Sets a player's password; omit password string to have one randomly generated.  Prints the encrypted old string when done for error recovery.  [No current software will allow you to give the encrypted string as input.]", "", "Offers to send mail to the user with the new password, if the user has a registered email address and the network is enabled."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@deprogrammer</NAME>
          <VALUE>{"Information about $wiz:@deprog*rammer", "----", "@deprogrammer victim [for &lt;duration&gt;] [reason]", "", "Removes the prog-bit from victim.  If a duration is specified (see help $time_utils:parse_english_time_interval), then the victim is put into the temporary list. He will be automatically removed the first time he asks for a progbit after the duration expires.  Either with or without the duration you can specify a reason, or you will be prompted for one. However, if you don't have a duration, don't start the reason with the word `For'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>forked-tasks</NAME>
          <VALUE>{"If you are a wizard, '@forked' with no arguments will spam you with all the forked tasks that there are (this is useful sometimes, but it's nice to know ahead of time).", "", "To see just your own, type '@forked me'.  To see just one player's, type '@forked &lt;player&gt;'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>mail-lists</NAME>
          <VALUE>{"You probably want to subscribe to (or at least be familiar with) the following mailing lists:", "", "*Player-Creation-Log", "*New-Prog-Log", "*Quota-Log", "*News", "*Site-Locks", "*Password-Change-Log", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@grant</NAME>
          <VALUE>{"Information about generic wizard(#218):@grant/@grants*/@transfer", "----", "@grant &lt;object&gt; to &lt;player&gt;", "@grants &lt;object&gt; to &lt;player&gt;   --- same as @grant but may suspend.", "@transfer &lt;expression&gt; to &lt;player&gt; -- like 'grant', but evalutes a possible list of objects to transfer.", "", "Ownership of the object changes as in @chown and :set_owner (i.e., .owner and all c properties change).  In addition all verbs and !c properties owned by the original owner change ownership as well.  Finally, for !c properties, instances on descendant objects change ownership (as in :set_property_owner).", "", "This verb does the transfer whether the recipient has enough quota for it or not."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>adding-help-text</NAME>
          <VALUE>{"For information about how the help system itself works and about how to associate local help databases with specific rooms or player classes, see `help $help'.", "", "To get a list of the object numbers associated with various $help databases, type 'help index'.", "", "If you need to modify existing help text, and need to find which help database the relevant property is defined on, use 'help full-index'.  (Note, it's spammy, but tells you what you need to know.)"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>further-reading</NAME>
          <VALUE>{"Other topics of interest to wizards:", "", "$login", "$guest_log", "$no_one", "$recycler", "$help"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@temp-newt</NAME>
          <VALUE>{"Information about $wiz:@temp-newt", "----", "@temp-newt victim [for duration] [reason]", "", "Temporarily newts victim.  If a duration is specified (see help $time_utils:parse_english_time_interval), then the victim is put into the temporary list. E will be automatically removed the first time e tries to connect after the duration expires.  You will be prompted for a reason for the newting, but as of this writing, specifying a reason from the command line isn't an option."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>site-info</NAME>
          <VALUE>{"To look at where a player is currently connecting from, use @netwho.  To see previous connect sites, look at &lt;player&gt;.all_connect_places."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>recycling-players</NAME>
          <VALUE>{"General procedure:", "", "  Make sure e doesn't own anything.", "  @toad em", "  @recycle em", "", "It makes a real mess if you don't clean up .owned_objects.  See $wiz_utils:initialize_owned, but note, running this verb takes maybe three hours (at last report) and adds to lag.  This is why we frown so severely on leaving blood on the carpet."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>advertised</NAME>
          <VALUE>{"Some wizards choose not to be among those listed when a player types '@wizards' (or similar).", "", "The property $wiz.advertised defaults to 1; set it to 0 to remove yourself from the list.", "", "To keep your non-wizard character off the list, set your wizard character's .public_identity character to 0.  To get it back on, set .public_identity to the object number of your non-wizard character.", "", "$wiz_utils:is_wizard returns true for the wizard and the corresponding .public_identity player.  Both will likewise appear in $wiz_utils:connected_wizards_unadvertised() and $wiz_utils:all_wizards_unadvertised().", "", ":is_wizard is for checking permissions on wizard feature-objects and the like, while :all/connected_wizards_unadvertised wouble be for things like wizard-shouts (e.g., the one issued by $player:recycle)."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>news-items</NAME>
          <VALUE>{"*subst*", "To add a news item:", "", "Send regular mail to *news with the message you want in the news.  Then:", "", "  @addnews &lt;message-number&gt; to %[tostr($news)]", "", "To remove a news item:", "", "  @rmnews &lt;message-number&gt; from %[tostr($news)]", "", "Note, the message date doesn't show up, so you might consider adding a date to the message body itself."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>routine_tasks</NAME>
          <VALUE>{"There are a number of routine daily or weekly tasks that can help keep your MOO clean or otherwise well-maintained.", "", "", "$byte_quota_utils:schedule_measurement_task", "        If you are using byte quota, this will schedule your quota measurement task.  Every night, every item on the moo which has not been measured in the last $byte_quota_utils.cycle_days will be measured.  A report will be mailed to $byte_quota_utils.report_recipients.  You may wish to edit this verb to change the time that it runs---it will run at midnight PST.", "", "$wiz_utils:expire_mail_weekly", "        If you wish to expire old mail from users and mailing lists, run this verb.  Once a week (scheduled from the first time you type ;$wiz_utils:expire_mail_weekly(), not at a particular hour) it will go through and expire mail based on players' @mail-options settings.", "", "$wiz_utils:flush_editors", "        Once a week this will remove all sessions which were begun more than 30 days ago in the note, verb, and mail editors.  Schedule is from when first typed.", "", "$paranoid_db:weekly", "        This will go through the @paranoid database and remove entries for players who have not connected within the past three days, and for those users who have turned off the @paranoid function.  Schedule is at 11pm PST.", "", "$login:sample_lag", "        This will provide an estimate of the CPU portion of what is normally called \"lag\"---that is, the delay between entering a command and having that command fulfilled.", "", "$housekeeper:continuous", "        If you wish to provide players with the ability to have individual items transported to a known starting location, use this verb.", "", "", "Additionally, there are tasks that you don't have to start manually, but which get started by various actions in the MOO.", "", "$network:add_queued_mail", "        This indicates that there was a temporary failure to deliver email.  If this task is constantly in the queue, it is worth checking $network.queued_mail, deleting those which will never be delivered.  Queued mail does not expire.", "", "$housekeeper:move_players_home", "        This task is used to consolidate the tasks spawned by disconnecting players---they get a 5 minute grace period to log back in before they are moved back home."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@chown#</NAME>
          <VALUE>{"*forward*", "@chown"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>index</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>index_cache</NAME>
          <VALUE>{"wiz-index"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"Wizard Help"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>{"This describes the various commands available on $wiz."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{31502, 919123672}</VALUE>
        </PROPERTY>
      </OBJECT>
      <OBJECT ID="obj28" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
        <NAME>Builtin Function Help</NAME>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>match()</NAME>
          <VALUE>{"Syntax:  match (STR &lt;subject&gt;, STR &lt;pattern&gt; [, &lt;case-matters&gt;])  =&gt; LIST", "         rmatch (STR &lt;subject&gt;, STR &lt;pattern&gt; [, &lt;case-matters&gt;])  =&gt; LIST", "", "The function `match()' (`rmatch()') searches for the first (last) occurrence of the regular expression &lt;pattern&gt; in the string &lt;subject&gt;.  If &lt;pattern&gt; is syntactically malformed, then E_INVARG is raised. The process of matching can in some cases consume a great deal of memory in the server; should this memory consumption become excessive, then the matching process is aborted and E_QUOTA is raised.", "", "If no match is found, the empty list is returned; otherwise, these functions return a list containing information about the match (see below).  By default, the search ignores upper/lower case distinctions.  If &lt;case-matters&gt; is provided and true, then case is treated as significant in all comparisons.", "", "The list that `match()' (`rmatch()') returns contains the details about the match made.  The list is in the form:", "", "     {&lt;start&gt;, &lt;end&gt;, &lt;replacements&gt;, &lt;subject&gt;}", "", "where &lt;start&gt; is the index in STRING of the beginning of the match, &lt;end&gt; is the index of the end of the match, &lt;replacements&gt; is a list described below, and &lt;subject&gt; is the same string that was given as the first argument to the `match()' or `rmatch()'.", "", "The &lt;replacements&gt; list is always nine items long, each item itself being a list of two numbers, the start and end indices in &lt;subject&gt; matched by some parenthesized sub-pattern of &lt;pattern&gt;.  The first item in &lt;replacements&gt; carries the indices for the first parenthesized sub-pattern, the second item carries those for the second sub-pattern, and so on.  If there are fewer than nine parenthesized sub-patterns in &lt;pattern&gt;, or if some sub-pattern was not used in the match, then the corresponding item in &lt;replacements&gt; is the list {0, -1}.  See the discussion of `%)' in `help regular-expressions', for more information on parenthesized sub-patterns.", "", "   match(\"foo\", \"f*o\")          =&gt;  {1, 2, {{0, -1}, ...}, \"foo\"}", "   match(\"foo\", \"fo*\")          =&gt;  {1, 3, {{0, -1}, ...}, \"foo\"}", "   match(\"foobar\", \"o*b\")       =&gt;  {2, 4, {{0, -1}, ...}, \"foobar\"}", "   rmatch(\"foobar\", \"o*b\")      =&gt;  {4, 4, {{0, -1}, ...}, \"foobar\"}", "   match(\"foobar\", \"f%(o*%)b\")  =&gt;  {1, 4, {{2, 3}, {0, -1}, ...}, \"foobar\"}", "", "See `help regular-expressions' for information on the syntax and semantics of patterns."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>rmatch()</NAME>
          <VALUE>{"*forward*", "match()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>substitute()</NAME>
          <VALUE>{"Syntax:  substitute (STR &lt;template&gt;, LIST &lt;subs&gt;)  =&gt; STR", "", "Performs a standard set of substitutions on the string &lt;template&gt;, using the information contained in &lt;subs&gt;, returning the resulting, transformed &lt;template&gt;.  &lt;Subs&gt; should be a list like those returned by `match()' or `rmatch()' when the match succeeds.", "", "In &lt;template&gt;, the strings `%1' through `%9' will be replaced by the text matched by the first through ninth parenthesized sub-patterns when `match()' or `rmatch()' was called.  The string `%0' in &lt;template&gt; will be replaced by the text matched by the pattern as a whole when `match()' or `rmatch()' was called. The string '%%' will be replaced by a single '%' sign. If '%' appears in &lt;template&gt; followed by any other character, E_INVARG will be raised.", "", "     subs = match(\"*** Welcome to LambdaMOO!!!\", \"%(%w*%) to %(%w*%)\");", "     substitute(\"I thank you for your %1 here in %2.\", subs)", "             =&gt;   \"I thank you for your Welcome here in LambdaMOO.\""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>sqrt()</NAME>
          <VALUE>{"Syntax:  sqrt (FLOAT &lt;x&gt;)  =&gt; FLOAT", "", "Returns the square root of &lt;x&gt;.  If &lt;x&gt; is negative, then E_INVARG is raised."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>server_log()</NAME>
          <VALUE>{"Syntax:  server_log (STR &lt;message&gt; [, &lt;is-error&gt;])  =&gt; none", "", "The text in &lt;message&gt; is sent to the server log.  If the programmer is not a wizard, then E_PERM is raised.  If &lt;is-error&gt; is provided and true, then &lt;message&gt; is marked in the server log as an error."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>pass()</NAME>
          <VALUE>{"Syntax:  pass (&lt;arg&gt;, ...)   =&gt; value", "", "Often, it is useful for a child object to define a verb that *augments* the behavior of a verb on its parent object. For example, the root object (an ancestor of every other object) defines a :description() verb that simply returns the value of `this.description'; this verb is used by the implementation of the `look' command. In many cases, a programmer would like the description of some object to include some non-constant part; for example, a sentence about whether or not the object was `awake' or `sleeping'.  This sentence should be added onto the end of the normal description.  The programmer would like to have a means of calling the normal `description' verb and then appending the sentence onto the end of that description.  The function `pass()' is for exactly such situations.", "", "`Pass()' calls the verb with the same name as the current verb but as defined on the parent of the object that defines the current verb.  The arguments given to the called verb are the ones given to pass() and the returned value of the called verb is returned from the call to pass(). The initial value of `this' in the called verb is the same as in the calling verb.", "", "Thus, in the example above, the child-object's :description() verb might have the following implementation:", "", "    return pass(@args) + \"  It is \" + (this.awake ? \"awake.\" | \"sleeping.\");", "", "That is, it calls its parent's :description() verb and then appends to the result a sentence whose content is computed based on the value of a property on the object.", "", "In the above example, `pass()' would have worked just as well, since :description() is not normally given any arguements.  However, it is a good idea to get into the habit of using `pass(@args)' rather than `pass(args[1])' or `pass()' even if the verb being pass()ed to is already known to take a set number of arguments or none at all.  For one thing, though the args may be irrelevant to the code that you've written, it may be that the corresponding verb on the parent has been rewritten to take additional arguments, in which case you will want your verb to continue to work..."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>builtin-index</NAME>
          <VALUE>{"*index*", "Server Built-in Functions"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>open_network_connection()</NAME>
          <VALUE>{"Syntax:  open_network_connection (&lt;value&gt;, ...)   =&gt; obj", "", "Establishes a network connection to the place specified by the arguments and more-or-less pretends that a new, normal player connection has been established from there.  The new connection, as usual, will not be logged in initially and will have a negative object number associated with it for use with `read()', `notify()', and `boot_player()'.  This object number is the value returned by this function.", "", "If the programmer is not a wizard or if the `OUTBOUND_NETWORK' compilation option was not used in building the server, then `E_PERM' is raised.  If the network connection cannot be made for some reason, then other errors will be returned, depending upon the particular network implementation in use.", "", "For the TCP/IP network implementations (the only ones as of this writing that support outbound connections), there must be two arguments, a string naming a host (possibly using the numeric Internet syntax) and an integer specifying a TCP port.  If a connection cannot be made because the host does not exist, the port does not exist, the host is not reachable or refused the connection, `E_INVARG' is raised.  If the connection cannot be made for other reasons, including resource limitations, then `E_QUOTA' is raised.", "", "The outbound connection process involves certain steps that can take quite a long time, during which the server is not doing anything else, including responding to user commands and executing MOO tasks.  See the chapter on server assumptions about the database for details about how the server limits the amount of time it will wait for these steps to successfully complete.", "", "It is worth mentioning one tricky point concerning the use of this function.  Since the server treats the new connection pretty much like any normal player connection, it will naturally try to parse any input from that connection as commands in the usual way.  To prevent this treatment, you should use `set_connection_option()' to set the `\"hold-input\"' option true on the connection."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>connection_name()</NAME>
          <VALUE>{"Syntax:  connection_name (obj &lt;player&gt;)   =&gt; str", "", "Returns a network-specific string identifying the connection being used by the given player.  If the programmer is not a wizard and not &lt;player&gt;, then E_PERM is raised.  If &lt;player&gt; is not currently connected, then E_INVARG is raised.", "", "For the TCP/IP networking configurations, for in-bound connections, the string has the form", "", "  \"port &lt;lport&gt; from &lt;host&gt;, port &lt;port&gt;\"", "", "where &lt;lport&gt; is the listening port on which the connection arrived, &lt;host&gt; is either the name or decimal TCP address of the host to which the connection was opened, and &lt;port&gt; is the decimal TCP port of the connection on that host.", "", "For the System V 'local' networking configuration, the string is the UNIX login name of the connecting user or, if no such name can be found, something of the form", "", "  \"User &lt;#number&gt;\"", "", "where &lt;#number&gt; is a UNIX numeric user ID.", "", "For the other networking configurations, the string is the same for all connections and, thus, useless."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>shutdown()</NAME>
          <VALUE>{"Syntax:  shutdown ([STR &lt;message&gt;])   =&gt; none", "", "Requests that the server shut itself down at its next opportunity.  Before doing so, the given &lt;message&gt; is printed to all connected players.  If the programmer is not a wizard, then E_PERM is raised."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>dump_database()</NAME>
          <VALUE>{"Syntax:  dump_database ()   =&gt; none", "", "Requests that the server checkpoint the database at its next opportunity.  It is not normally necessary to call this function; the server automatically checkpoints the database at regular intervals; see the chapter on server assumptions about the database for details.  If the programmer is not a wizard, then E_PERM is raised."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>memory_usage()</NAME>
          <VALUE>{"Syntax:  memory_usage ()   =&gt; list", "", "On some versions of the server, this returns statistics concerning the server", "consumption of system memory.  The result is a list of lists, each in the", "following format:", "", "    {&lt;block-size&gt;, &lt;nused&gt;, &lt;nfree&gt;}", "", "where &lt;block-size&gt; is the size in bytes of a particular class of memory", "fragments, &lt;nused&gt; is the number of such fragments currently in use in the", "server, and &lt;nfree&gt; is the number of such fragments that have been reserved", "for use but are currently free.", "", "On servers for which such statistics are not available, `memory_usage()'", "returns `{}'.  The compilation option `USE_SYSTEM_MALLOC' controls", "whether or not statistics are available; if the option is provided, statistics", "are not available."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>reset_max_object()</NAME>
          <VALUE>{"Syntax:  reset_max_object ()   =&gt; none", "", "The server's idea of the highest object number ever used is changed to be the highest object number of a currently-existing object, thus allowing reuse of any higher numbers that refer to now-recycled objects.  If the programmer is not a wizard, then E_PERM is raised.", "", "This operation is intended for use in making new versions of the LambdaCore database from the then-current LambdaMOO database, and other similar situations.  Its use requires great care."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>renumber()</NAME>
          <VALUE>{"Syntax:  renumber (OBJ &lt;object&gt;)   =&gt; OBJ", "", "The object number of the object currently numbered &lt;object&gt; is changed to be the least nonnegative object number not currently in use and the new object number is returned.  If &lt;object&gt; is not valid, then E_INVARG is raised.  If the programmer is not a wizard, then E_PERM is raised. If there are no unused nonnegative object numbers less than &lt;object&gt;, then &lt;object&gt; is returned and no changes take place.", "", "The references to &lt;object&gt; in the parent/children and location/contents hierarchies are updated to use the new object number, and any verbs, properties and/or objects owned by &lt;object&gt; are also changed to be owned by the new object number.  The latter operation can be quite time consuming if the database is large.  No other changes to the database are performed; in particular, no object references in property values or verb code are updated.", "", "This operation is intended for use in making new versions of the LambdaCore database from the then-current LambdaMOO database, and other similar situations.  Its use requires great care."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>server_version()</NAME>
          <VALUE>{"Syntax:  server_version ()   =&gt; str", "", "Returns a string giving the version number of the MOO server in the following", "format:", "", "    \"&lt;major&gt;.&lt;minor&gt;.&lt;release&gt;\"", "", "where &lt;major&gt;, &lt;minor&gt;, and &lt;release&gt; are all decimal numbers.", "", "The major version number changes very slowly, only when existing MOO code might", "stop working, due to an incompatible change in the syntax or semantics of the", "programming language, or when an incompatible change is made to the database", "format.", "", "The minor version number changes more quickly, whenever an upward-compatible", "change is made in the programming language syntax or semantics.  The most", "common cause of this is the addition of a new kind of expression, statement, or", "built-in function.", "", "The release version number changes as frequently as bugs are fixed in the", "server code.  Changes in the release number indicate changes that should only", "be visible to users as bug fixes, if at all."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>output_delimiters()</NAME>
          <VALUE>{"Syntax:  output_delimiters (OBJ &lt;player&gt;)   =&gt; LIST", "", "Returns a list of two strings, the current \"output prefix\" and \"output suffix\" for &lt;player&gt;.  If &lt;player&gt; does not have an active network connection, then E_INVARG is raised.  If either string is currently undefined, the value `\"\"' is used instead.  See the discussion of the `PREFIX' and `SUFFIX' commands in the LambdaMOO Programmers Manual for more information about the output prefix and suffix."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>callers()</NAME>
          <VALUE>{"Syntax:  callers ([include-line-numbers])   =&gt; list", "", "Returns information on each of the verbs and built-in functions currently waiting to resume execution in the current task.  When one verb or function calls another verb or function, execution of the caller is temporarily suspended, pending the called verb or function returning a value.  At any given time, there could be several such pending verbs and functions: the one that called the currently executing verb, the verb or function that called that one, and so on.  The result of `callers()' is a list, each element of which gives information about one pending verb or function in the following format:", "", "  {&lt;this&gt;, &lt;verb-name&gt;, &lt;programmer&gt;, &lt;verb-loc&gt;, &lt;player&gt;, &lt;line-number&gt;}", "", "For verbs, &lt;this&gt; is the initial value of the variable `this' in that verb, &lt;verb-name&gt; is the name used to invoke that verb, &lt;programmer&gt; is the player with whose permissions that verb is running, &lt;verb-loc&gt; is the object on which that verb is defined, and &lt;player&gt; is the initial value of the variable `player' in that verb, and &lt;line-number&gt; indicates which line of the verb's code is executing. The &lt;line-number&gt; element is included only if the `include-line-numbers' argument was provided and is true.", "", "For functions, &lt;this&gt;, &lt;programmer&gt;, and &lt;verb-loc&gt; are all #-1, &lt;verb-name&gt; is the name of the function, and &lt;line-number&gt; is an index used internally to determine the current state of the built-in function. The simplest correct test for a built-in function entry is", "", "(VERB-LOC == #-1 &amp;&amp; PROGRAMMER == #-1 &amp;&amp; VERB-NAME != \"\")", "", "", "The first element of the list returned by `callers()' gives information on the verb that called the currently-executing verb, the second element describes the verb that called that one, and so on.  The last element of the list describes the first verb called in this task."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>kill_task()</NAME>
          <VALUE>{"Syntax:  kill_task (INT &lt;task-id&gt;)   =&gt; none", "", "Removes the task with the given &lt;task-id&gt; from the queue of waiting tasks. If the programmer is not the owner of that task and not a wizard, then E_PERM is raised.  If there is no task on the queue with the given &lt;task-id&gt;, then E_INVARG is raised."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>queued_tasks()</NAME>
          <VALUE>{"Syntax:  queued_tasks ()   =&gt; LIST", "", "Returns information on each of the background tasks (i.e., forked, suspended, or reading)  owned by the programmer (or, if the programmer is a wizard, all queued tasks). The returned value is a list of lists, each of which encodes certain information about a particular queued task in the following format:", "", "    {&lt;task-id&gt;, &lt;start-time&gt;, &lt;ticks&gt;, &lt;clock-id&gt;,", "     &lt;programmer&gt;, &lt;verb-loc&gt;, &lt;verb-name&gt;, &lt;line&gt;, &lt;this&gt;}", "", "where &lt;task-id&gt; is a numeric identifier for this queued task, &lt;start-time&gt; is the time after which this task will begin execution (in `time()' format), &lt;ticks&gt; is the number of ticks this task will have when it starts (always 20,000 now, though this is changeable. This makes this value obsolete and no longer interesting), &lt;clock-id&gt; is a number whose value is no longer interesting, &lt;programmer&gt; is the permissions with which this task will begin execution (and also the player who \"owns\" this task), &lt;verb-loc&gt; is the object on which the verb that forked this task was defined at the time, &lt;verb-name&gt; is that name of that verb, &lt;line&gt; is the number of the first line of the code in that verb that this task will execute, and &lt;this&gt; is the value of the variable `this' in that verb. For reading tasks, &lt;start-time&gt; is `-1'.", "", "The &lt;ticks&gt; and &lt;clock-id&gt; fields are now obsolete and are retained only for backward-compatibility reasons.  They may disappear in a future version of the server."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>read()</NAME>
          <VALUE>{"Syntax:  read ([OBJ &lt;conn&gt;] [, non-blocking])   =&gt; STR", "", "Reads and returns a line of input from the connection &lt;conn&gt; (or, if not provided, from the player that typed the command that initiated the current task). If &lt;non-blocking&gt; is false or not provided, this function suspends the current task, resuming it when there is input available to be read. If &lt;non-blocking&gt; is provided and true, this function never suspends the calling task; if there is no input currently available for input, `read()' simply returns 0 immediately.", "", "If &lt;conn&gt; is provided, then the programmer must either be a wizard or the owner of &lt;conn&gt;, if &lt;conn&gt; is not provided, then `read()' may only be called by a wizard and only in the task that was last spawned by a command from the connection in question. Otherwise, E_PERM is raised. If the given &lt;conn&gt; is not currently connected and has no pending lines of input, or if the connection is closed while a task is waiting for input but before any lines of input are received, then `read()' raises E_INVARG.", "", "The restriction on the use of `read()' without any arguments preserves the following simple invariant: if input is being read from a player, it is for the task started by the last command that the player typed. This invariant adds responsibility to the programmer, however. If your program calls another verb before doing a `read()', then either that verb must not suspend, or else you must arrange that no commands will be read from the connection in the meantime. The most straightforward way to do this is to call", "", "  set_connection_option(&lt;conn&gt;, \"hold-input\", 1)", "", "before any task suspension could happen, then make all of your calls to `read()' and other code that might suspend, and finally call", "", "  set_connection_option(&lt;conn&gt;, \"hold-input\", 0)", "", "to allow commands once again to be read and interpreted normally.", "", "As an example, consider the following, which refers to the verbs programmed in the `suspend()' example in `help suspend()':  ", "", "    .program   #0:read_twice_A", "    s = read();        /* success depends on programmer's permissions */", "    #0:callee_A();     /* callee_A does not suspend */", "    t = read();        /* success depends on programmer's permissions */", "    .", "", "    .program   #0:read_twice_B", "    s = read();        /* success depends on programmer's permissions */", "    #0:callee_B();     /* callee_B does suspend */", "    t = read();        /* fails, returning E_PERM */", "    .", "", "In three of the four calls to `read()', success depends on on the programmer's permissions.  However, the second `read()' in `#0:read_twice_B' always fails and raises E_PERM.  This is because the task was suspended, even though `#0:read_twice_B' did not do the actual suspending.  Hence, if you want to read some input (by using `read()' directly or by calling other verbs which do the reading), you must make sure that the task is not suspended before the reading.  This includes making sure that any verbs you call, directly or indirectly, also do not suspend.", "", "It is possible to call `read()' many times in the same command task, so long as the task does not call `suspend()' or an explicit argument is given.  The best use for `read()' with an explicit argument is in conjunction with `open_network_connection()', if it is enabled."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>suspend()</NAME>
          <VALUE>{"Syntax:  suspend ([INT &lt;seconds&gt;])   =&gt; value", "", "Suspends the current task, and resumes it after at least &lt;seconds&gt; seconds. (If &lt;seconds&gt; is not provided, the task is suspended indefinitely; such a task can only be resumed by use of the `resume()' function.) When the task is resumed, it will have a full quota of ticks and seconds.  This function is useful for programs that run for a long time or require a lot of ticks.  If &lt;seconds&gt; is negative, then E_INVARG is raised. `Suspend()' returns zero unless it was resumed via `resume()' in which case it returns the second argument given to that function.", "", "In some sense, this function forks the `rest' of the executing task.  However, there is a major difference between the use of `suspend(&lt;seconds&gt;)' and the use of the `fork (&lt;seconds&gt;)'.  The `fork' statement creates a new task (a \"forked task\") while the currently-running task still goes on to completion, but a `suspend()' suspends the currently-running task (thus making it into a \"suspended task\").  This difference may be best explained by the following examples, in which one verb calls another:", "", "    .program   #0:caller_A", "    #0.prop = 1;", "    #0:callee_A();", "    #0.prop = 2;", "    .", "", "    .program   #0:callee_A", "    fork(5)", "      #0.prop = 3;", "    endfork", "    .", "", "    .program   #0:caller_B", "    #0.prop = 1;", "    #0:callee_B();", "    #0.prop = 2;", "    .", "", "    .program   #0:callee_B", "    suspend(5);", "    #0.prop = 3;", "    .", "", "Consider `#0:caller_A', which calls `#0:callee_A'.  Such a task would assign 1 to `#0.prop', call `#0:callee_A', fork a new task, return to `#0:caller_A', and assign 2 to `#0.prop', ending this task.  Five seconds later, if the forked task had not been killed, then it would begin to run; it would assign 3 to `#0.prop' and then stop.  So, the final value of `#0.prop' (i.e., the value after more than 5 seconds) would be 3.", "", "Now consider `#0:caller_B', which calls `#0:callee_B' instead of `#0:callee_A'.  This task would assign 1 to `#0.prop', call `#0:callee_B', and suspend.  Five seconds later, if the suspended task had not been killed, then it would resume; it would assign 3 to `#0.prop', return to `#0:caller', and assign 2 to `#0.prop', ending the task. So, the final value of `#0.prop' (i.e., the value after more than 5 seconds) would be 2.", "", "A suspended task, like a forked task, can be described by the `queued_tasks()' function and killed by the `kill_task()' function. Suspending a task does not change its task id.  A task can be suspended again and again by successive calls to `suspend()'.", "", "Once `suspend()' has been used in a particular task, then the `read()' function will always raise E_PERM in that task.  For more details, see the description of `read()'.", "", "By default, there is no limit to the number of tasks any player may suspend, but such a limit can be imposed from within the database. See the chapter in the LambdaMOO Programmers Manual on server assumptions about the database for details."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>task_id()</NAME>
          <VALUE>{"Syntax:  task_id ()   =&gt; INT", "", "Returns the numeric identifier for the currently-executing task.  Such numbers are randomly selected for each task and can therefore safely be used in circumstances where unpredictability is required."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>seconds_left()</NAME>
          <VALUE>{"*forward*", "ticks_left()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>ticks_left()</NAME>
          <VALUE>{"Syntax:  ticks_left ()   =&gt; INT", "       seconds_left ()   =&gt; INT", "", "These two functions return the number of ticks or seconds (respectively) left to the current task before it will be forcibly terminated.  These are useful, for example, in deciding when to fork another task to continue a long-lived computation."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>caller_perms()</NAME>
          <VALUE>{"Syntax:  caller_perms ()   =&gt; obj", "", "Returns the permissions in use by the verb that called the currently-executing", "verb.  If the currently-executing verb was not called by another verb (i.e., it", "is the first verb called in a command or server task), then", "`caller_perms()' returns `#-1'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>set_task_perms()</NAME>
          <VALUE>{"Syntax:  set_task_perms (OBJ &lt;player&gt;)   =&gt; none", "", "Changes the permissions with which the currently-executing verb is running to be those of &lt;player&gt;.  If &lt;player&gt; is not of type OBJ, then E_INVARG is raised.  If the programmer is neither &lt;player&gt; nor a wizard, then E_PERM is raised.", "", "Note: This does not change the owner of the currently-running verb, only the permissions of this particular invocation.  It is used in verbs owned by wizards to make themselves run with lesser (usually non-wizard) permissions."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>eval()</NAME>
          <VALUE>{"Syntax:  eval (str &lt;string&gt;)   =&gt; list", "", "The MOO-code compiler processes &lt;string&gt; as if it were to be the program associated with some verb and, if no errors are found, that fictional verb is invoked.  If the programmer is not, in fact, a programmer, then E_PERM is raised.  The normal result of calling `eval()' is a two element list. The first element is true if there were no compilation errors and false otherwise.  The second element is either the result returned from the fictional verb (if there were no compilation errors) or a list of the compiler's error messages (otherwise).", "", "When the fictional verb is invoked, the various built-in variables have values as shown below:", "", "    player    the same as in the calling verb", "    this      #-1", "    caller    the same as the initial value of `this' in the calling verb", "", "    args      {}", "    argstr    \"\"", "", "    verb      \"\"", "    dobjstr   \"\"", "    dobj      #-1", "    prepstr   \"\"", "    iobjstr   \"\"", "    iobj      #-1", "", "The fictional verb runs with the permissions of the programmer and as if its `d' permissions bit were on.", "", "    eval(\"return 3 + 4;\")   =&gt;   {1, 7}"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>boot_player()</NAME>
          <VALUE>{"Syntax:  boot_player (obj &lt;player&gt;)   =&gt; none", "", "Immediately terminates any currently-active connection to the given &lt;player&gt;.  The connection will not actually be closed until the currently-running task returns or suspends, but all MOO functions (such as notify(), connected_players(), and the like) immediately behave as if the connection no longer exists. If the programmer is not either a wizard or the same as &lt;player&gt;, then `E_PERM' is returned.  If there is no currently-active connection to &lt;player&gt;, then this function does nothing.", "", "If there was a currently-active connection, then the following verb call is made when the connection is actually closed:", "", "$user_disconnected(player)", "", "It is not an error if this verb does not exist; the corresponding call is simply skipped."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>notify()</NAME>
          <VALUE>{"Syntax:  notify (OBJ conn, STR string [, no-flush]) =&gt; 0 or 1", "", "Enqueues &lt;string&gt; for output (on a line by itself) on the connection &lt;conn&gt;. If the programmer is not &lt;conn&gt; or a wizard, then E_PERM is raised. If &lt;conn&gt; is not a currently-active connection, then this function does nothing. Output is normally written to connections only between tasks, not during execution.", "", "The server will not queue an arbitrary amount of output for a connection; the `MAX_QUEUED_OUTPUT' compilation option (in `options.h') controls the limit. When an attempt is made to enqueue output that would take the server over its limit, it first tries to write as much output as possible to the connection without having to wait for the other end. If that doesn't result in the new output being able to fit in the queue, the server starts throwing away the oldest lines in the queue until the new output will fit. The server remembers how many lines of output it has `flushed' in this way and, when next it can succeed in writing anything to the connection, it first writes a line like `&gt;&gt; Network buffer overflow; X lines of output to you have been lost &lt;&lt;' where &lt;X&gt; is the number of of flushed lines.", "", "If &lt;no-flush&gt; is provided and true, then `notify()' never flushes any output from the queue; instead it immediately returns false. `Notify()' otherwise always returns true."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>idle_seconds()</NAME>
          <VALUE>{"*forward*", "connected_seconds()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>connected_seconds()</NAME>
          <VALUE>{"Syntax:  connected_seconds (obj &lt;player&gt;)   =&gt; int", "              idle_seconds (obj &lt;player&gt;)   =&gt; int", "", "These functions return the number of seconds that the currently-active connection to &lt;player&gt; has existed and been idle, respectively.  If &lt;player&gt; is not the object number of a player object with a currently-active connection, then E_INVARG is raised."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>connected_players()</NAME>
          <VALUE>{"Syntax:  connected_players ([include-all])   =&gt; LIST", "", "Returns a list of the object numbers of those player objects with currently-active connections. If &lt;include-all&gt; is provided and true, includes the object numbers associated with all current connections, including those that are outbound and/or not yet logged-in."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>set_player_flag()</NAME>
          <VALUE>{"Syntax:  set_player_flag (OBJ &lt;object&gt;, &lt;value&gt;)   =&gt; none", "", "Confers or removes the ``player object'' status of the given &lt;object&gt;, depending upon the truth value of &lt;value&gt;.  If &lt;object&gt; is not valid, E_INVARG is raised.  If the programmer is not a wizard, then E_PERM is raised.", "", "If &lt;value&gt; is true, then &lt;object&gt; gains (or keeps) \"player object\" status: it will be an element of the list returned by `players()', the expression `is_player(&lt;object&gt;)' will return true, and users can connect to &lt;object&gt; by name when they log into the server.", "", "If &lt;value&gt; is false, the &lt;object&gt; loses (or continues to lack) \"player object\" status: it will not be an element of the list returned by `players()', the expression `is_player(&lt;object&gt;)' will return false, and users cannot connect to &lt;object&gt; by name when they log into the server.  In addition, if a user is connected to &lt;object&gt; at the time that it loses ``player object'' status, then that connection is immediately broken, just as if `boot_player(&lt;object&gt;)' had been called (see the description of `boot_player()' below)."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>is_player()</NAME>
          <VALUE>{"Syntax:  is_player (OBJ &lt;object&gt;)   =&gt; INT", "", "Returns a true value if the given &lt;object&gt; is a player object and a false value otherwise.  If &lt;object&gt; is not valid, E_INVARG is raised."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>players()</NAME>
          <VALUE>{"Syntax:  players ()   =&gt; list", "", "Returns a list of the object numbers of all player objects in the database."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>set_verb_code()</NAME>
          <VALUE>{"*forward*", "verb_code()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>verb_code()</NAME>
          <VALUE>{"Syntax:  verb_code (OBJ &lt;object&gt;, STR &lt;verb-name&gt; [, &lt;fully-paren&gt; [, &lt;indent&gt;]])   =&gt; LIST", "     set_verb_code (OBJ &lt;object&gt;, STR &lt;verb-name&gt;, LIST &lt;code&gt;)   =&gt; LIST", "", "These functions get and set (respectively) the MOO-code program associated with the verb named &lt;verb-name&gt; on &lt;object&gt;.  The program is represented as a list of strings, one for each line of the program; this is the kind of value returned by `verb_code()' and expected as the third argument to `set_verb_code()'.  For `verb_code()', the expressions in the returned code are usually written with the minimum-necessary parenthesization; if &lt;full-paren&gt; is true, then all expressions are fully parenthesized. Also for `verb_code()', the lines in the returned code are usually not indented at all; if &lt;indent&gt; is true, each line is indented to better show the nesting of statements.", "", "If &lt;object&gt; is not valid, then E_INVARG is raised.  If &lt;object&gt; does not define a verb named &lt;verb-name&gt;, then E_VERBNF is raised.  If the programmer does not have read (write) permission on the verb in question, then `verb_code()' (`set_verb_code()') raises E_PERM.  If the programmer is not, in fact, a programmer, then E_PERM is raised.", "", "For `set_verb_code()', the result is a list of strings, the error messages generated by the MOO-code compiler during processing of &lt;code&gt;.  If the list is non-empty, then `set_verb_code()' did not install &lt;code&gt;; the program associated with the verb in question is unchanged."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>delete_verb()</NAME>
          <VALUE>{"Syntax:  delete_verb (obj &lt;object&gt;, str &lt;verb-name&gt;)   =&gt; none", "", "Removes the verb named &lt;verb-name&gt; from the given &lt;object&gt;.  If &lt;object&gt; is not valid, then E_INVARG is raised.  If the programmer does not have write permission on &lt;object&gt;, then E_PERM is raised. If &lt;object&gt; does not define a verb named &lt;verb-name&gt;, then E_VERBNF is raised."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>add_verb()</NAME>
          <VALUE>{"Syntax:  add_verb (obj &lt;object&gt;, list &lt;info&gt;, list &lt;args&gt;)   =&gt; none", "", "Defines a new verb on the given &lt;object&gt;.  The new verb's owner, permission", "bits and name(s) are given by &lt;info&gt; in the same format as is returned by", "`verb_info()'.  The new verb's direct-object, preposition, and indirect-object", "specifications are given by &lt;args&gt; in the same format as is returned by", "`verb_args()'.  The new verb initially has the empty program associated with ", "it; this program does nothing but return an unspecified value.", "", "If &lt;object&gt; is not valid, or &lt;info&gt; does not specify a legitimate owner", "and permission bits, or &lt;args&gt; is not a legitimate syntax specification,", "then `E_INVARG' is retuned.  If the programmer does not have write", "permission on &lt;object&gt; or if the owner specified by &lt;info&gt; is not the", "programmer and the programmer is not a wizard, then `E_PERM' is returned."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>set_verb_args()</NAME>
          <VALUE>{"*forward*", "verb_args()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>verb_args()</NAME>
          <VALUE>{"Syntax:  verb_args (OBJ &lt;object&gt;, STR &lt;verb-name&gt;)   =&gt; LIST", "     set_verb_args (OBJ &lt;object&gt;, STR &lt;verb-name&gt;, LIST &lt;args&gt;)   =&gt; none", "", "These two functions get and set (respectively) the direct-object, preposition, and indirect-object specifications for the verb named &lt;verb-name&gt; on the given &lt;object&gt;.  If &lt;object&gt; is not valid, then E_INVARG is raised.  If &lt;object&gt; does not define a verb named &lt;verb-name&gt;, then E_VERBNF is raised.  If the programmer does not have read (write) permission on the verb in question, then `verb_args()' (`set_verb_args()') raises E_PERM.  Verb args specifications have the following form:", "", "    {&lt;dobj&gt;, &lt;prep&gt;, &lt;iobj&gt;}", "", "where &lt;dobj&gt; and &lt;iobj&gt; are strings drawn from the set `\"this\"', `\"none\"', and `\"any\"', and &lt;prep&gt; is a string that is either `\"none\"', `\"any\"', or one of the prepositional phrases listed much earlier in the description of verbs in the first chapter.  This is the kind of value returned by `verb_info()' and expected as the third argument to `set_verb_info()'.  Note that for `set_verb_args()', &lt;prep&gt; must be only one of the prepositional phrases, not (as is shown in that table) a set of such phrases separated by `/' characters.  `Set_verb_args()' raises E_INVARG if any of the &lt;dobj&gt;, &lt;prep&gt;, or &lt;iobj&gt; strings is illegal.", "", "    verb_args($container, \"take\")", "                        =&gt;   {\"any\", \"out of/from inside/from\", \"this\"}", "    set_verb_args($container, \"take\", {\"any\", \"from\", \"this\"})"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>set_verb_info()</NAME>
          <VALUE>{"*forward*", "verb_info()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>verb_info()</NAME>
          <VALUE>{"Syntax:  verb_info (OBJ &lt;object&gt;, STR &lt;verb-name&gt;)   =&gt; LIST", "     set_verb_info (OBJ &lt;object&gt;, STR &lt;verb-name&gt;, LIST &lt;info&gt;)   =&gt; none", "", "These two functions get and set (respectively) the owner, permission bits, and name(s) for the verb named &lt;verb-name&gt; on the given &lt;object&gt;.  If &lt;object&gt; is not valid, then E_INVARG is raised.  If &lt;object&gt; does not define a verb named &lt;verb-name&gt;, then E_VERBNF is raised. If the programmer does not have read (write) permission on the verb in question, then `verb_info()' (`set_verb_info()') raises E_PERM.  Verb info has the following form:", "", "    {&lt;owner&gt;, &lt;perms&gt;, &lt;names&gt;}", "", "where &lt;owner&gt; is an object, &lt;perms&gt; is a string containing only characters from the set `r', `w', `x', and `d', and &lt;names&gt; is a string.  This is the kind of value returned by `verb_info()' and expected as the third argument to `set_verb_info()'. The latter function raises E_INVARG if &lt;owner&gt; is not valid, if &lt;perms&gt; contains any illegal characters, or if &lt;names&gt; is the empty string or consists entirely of spaces; it raises E_PERM if &lt;owner&gt; is not the programmer and the programmer is not a wizard."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>verbs()</NAME>
          <VALUE>{"Syntax:  verbs (OBJ &lt;object&gt;)   =&gt; LIST", "", "Returns a list of the names of the verbs defined directly on the given &lt;object&gt;, not inherited from its parent.  If &lt;object&gt; is not valid, then E_INVARG is raised.  If the programmer does not have read permission on &lt;object&gt;, then E_PERM is raised."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>delete_property()</NAME>
          <VALUE>{"Syntax:  delete_property (obj &lt;object&gt;, str &lt;prop-name&gt;)   =&gt; none", "", "Removes the property named &lt;prop-name&gt; from the given &lt;object&gt; and all of its descendants.  If &lt;object&gt; is not valid, then E_INVARG is raised.  If the programmer does not have write permission on &lt;object&gt;, then E_PERM is raised.  If &lt;object&gt; does not directly define a property named &lt;prop-name&gt; (as opposed to inheriting one from its parent), then `E_PROPNF' is raised."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>add_property()</NAME>
          <VALUE>{"Syntax:  add_property (obj &lt;object&gt;, str &lt;prop-name&gt;, &lt;value&gt;, list &lt;info&gt;)   =&gt; none", "", "Defines a new property on the given &lt;object&gt;, inherited by all of its descendants; the property is named &lt;prop-name&gt;, its initial value is &lt;value&gt;, and its owner and initial permission bits are given by &lt;info&gt; in the same format as is returned by `property_info()'. If &lt;object&gt; is not valid or &lt;object&gt; already has a property named &lt;prop-name&gt; or &lt;info&gt; does not specify a legitimate owner and permission bits, then E_INVARG is raised.  If the programmer does not have write permission on &lt;object&gt; or if the owner specified by &lt;info&gt; is not the programmer and the programmer is not a wizard, then E_PERM is raised."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>set_property_info()</NAME>
          <VALUE>{"*forward*", "property_info()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>property_info()</NAME>
          <VALUE>{"Syntax:  property_info (OBJ &lt;object&gt;, STR &lt;prop-name&gt;)   =&gt; LIST", "     set_property_info (OBJ &lt;object&gt;, STR &lt;prop-name&gt;, LIST &lt;info&gt;)   =&gt; none", "", "These two functions get and set (respectively) the owner and permission bits for the property named &lt;prop-name&gt; on the given &lt;object&gt;.  If &lt;object&gt; is not valid, then E_INVARG is raised.  If &lt;object&gt; has no non-built-in property named &lt;prop-name&gt;, then E_PROPNF is raised.  If the programmer does not have read (write) permission on the property in question, then `property_info()' (`set_property_info()') raises E_PERM.  Property info has the following form:", "", "    {&lt;owner&gt;, &lt;perms&gt; [, new-name]}", "", "where &lt;owner&gt; is an object and &lt;perms&gt; is a string containing only characters from the set `r', `w', and `c', and &lt;new-name&gt; is a string; &lt;new-name&gt; is never part of the value returned by `property_info()', but it may optionally be given as part of the value provided to `set_property_info()'.  This list is the kind of value returned by `property_info()' and expected as the third argument to `set_property_info()'; the latter function raises E_INVARG if &lt;owner&gt; is not valid or &lt;perms&gt; contains any illegal characters, or, when &lt;new-name&gt; is given, if &lt;prop-name&gt; is not defined directly on &lt;object&gt; or &lt;new-name&gt; names an existing property defined on &lt;object&gt; or any of its ancestors or descendants."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>properties()</NAME>
          <VALUE>{"Syntax:  properties (OBJ &lt;object&gt;)   =&gt; LIST", "", "Returns a list of the names of the properties defined directly on the given &lt;object&gt;, not inherited from its parent.  If &lt;object&gt; is not valid, then E_INVARG is raised.  If the programmer does not have read permission on &lt;object&gt;, then E_PERM is raised."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>move()</NAME>
          <VALUE>{"Syntax:  move (OBJ &lt;what&gt;, OBJ &lt;where&gt;)   =&gt; none", "", "Changes &lt;what&gt;'s location to be &lt;where&gt;.  This is a complex process because a number of permissions checks and notifications must be performed. The actual movement takes place as described in the following paragraphs.", "", "&lt;what&gt; should be a valid object and &lt;where&gt; should be either a valid object or `#-1' (denoting a location of 'nowhere'); otherwise E_INVARG is raised.  The programmer must be either the owner of &lt;what&gt; or a wizard; otherwise, E_PERM is raised.", "", "If &lt;where&gt; is a valid object, then the verb-call", "", "    &lt;where&gt;:accept(&lt;what&gt;)", "", "is performed before any movement takes place.  If the verb returns a false value and the programmer is not a wizard, then &lt;where&gt; is considered to have refused entrance to &lt;what&gt;; `move()' raises E_NACC.  If &lt;where&gt; does not define an `accept' verb, then it is treated as if it defined one that always returned false.", "", "If moving &lt;what&gt; into &lt;where&gt; would create a loop in the containment hierarchy (i.e., &lt;what&gt; would contain itself, even indirectly), then E_RECMOVE is raised instead.", "", "The `location' property of &lt;what&gt; is changed to be &lt;where&gt;, and the `contents' properties of the old and new locations are modified appropriately.  Let &lt;old-where&gt; be the location of &lt;what&gt; before it was moved.  If &lt;old-where&gt; is a valid object, then the verb-call", "", "    &lt;old-where&gt;:exitfunc(&lt;what&gt;)", "", "is performed and its result is ignored; it is not an error if &lt;old-where&gt; does not define a verb named `exitfunc'.  Finally, if &lt;where&gt; and &lt;what&gt; are still valid objects, and &lt;where&gt; is still the location of &lt;what&gt;, then the verb-call", "", "    &lt;where&gt;:enterfunc(&lt;what&gt;)", "", "is performed and its result is ignored; again, it is not an error if &lt;where&gt; does not define a verb named `enterfunc'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>max_object()</NAME>
          <VALUE>{"Syntax:  max_object ()   =&gt; obj", "", "Returns the largest object number yet assigned to a created object.  Note that", "the object with this number may no longer exist; it may have been recycled.", "The next object created will be assigned the object number one larger than the", "value of `max_object()'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>recycle()</NAME>
          <VALUE>{"Syntax:  recycle (OBJ &lt;object&gt;)   =&gt; none", "", "The given &lt;object&gt; is destroyed, irrevocably.  The programmer must either own &lt;object&gt; or be a wizard; otherwise, E_PERM is raised.  If &lt;object&gt; is not valid, then E_INVARG is raised.  The children of &lt;object&gt; are reparented to the parent of &lt;object&gt;.  Before &lt;object&gt; is recycled, each object in its contents is moved to `#-1' (implying a call to &lt;object&gt;'s `exitfunc' verb, if any) and then &lt;object&gt;'s `recycle' verb, if any, is called with no arguments.", "", "After &lt;object&gt; is recycled, if the owner of the former object has a property named `ownership_quota' and the value of that property is a number, then `recycle()' treats that value as a \"quota\" and increments it by one, storing the result back into the `ownership_quota' property."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>children()</NAME>
          <VALUE>{"*forward*", "parent()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>parent()</NAME>
          <VALUE>{"Syntax:  parent (OBJ &lt;object&gt;)   =&gt; OBJ", "       children (OBJ &lt;object&gt;)   =&gt; LIST", "", "These functions return the parent and a list of the children of &lt;object&gt;, respectively.  If &lt;object&gt; is not valid, then E_INVARG is raised."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>valid()</NAME>
          <VALUE>{"Syntax:  valid (OBJ &lt;object&gt;)   =&gt; INT", "", "Returns a non-zero integer (i.e., a true value) if &lt;object&gt; is a valid object (one that has been created and not yet recycled) and zero (i.e., a false value) otherwise.", "", "    valid(#0)    =&gt;   1", "    valid(#-1)   =&gt;   0"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>chparent()</NAME>
          <VALUE>{"Syntax:  chparent (obj &lt;object&gt;, obj &lt;new-parent&gt;)   =&gt; none", "", "Changes the parent of &lt;object&gt; to be &lt;new-parent&gt;. If &lt;object&gt; is not valid, or if &lt;new-parent&gt; is neither valid nor equal to #-1, then E_INVARG is raised. If the programmer is neither a wizard or the owner of &lt;object&gt;, or if &lt;new-parent&gt; is not fertile (i.e., its `f' bit is not set) and the programmer is neither the owner of &lt;new-parent&gt; nor a wizard, then `E_PERM' is raised.  If &lt;new-parent&gt; is equal to &lt;object&gt; or one of its current ancestors, E_RECMOVE is raised. If &lt;object&gt; or one of its descendants defines a property with the same name as one defined either on &lt;new-parent&gt; or on one of its ancestors, then `E_INVARG' is returned.", "", "Changing an object's parent can have the effect of removing some properties from and adding some other properties to that object and all of its descendants (i.e., its children and its children's children, etc.).  Let &lt;common&gt; be the nearest ancestor that &lt;object&gt; and &lt;new-parent&gt; have in common before the parent of &lt;object&gt; is changed.  Then all properties defined by ancestors of &lt;object&gt; under &lt;common&gt; (that is, those ancestors of &lt;object&gt; that are in turn descendants of &lt;common&gt;) are removed from &lt;object&gt; and all of its descendants.  All properties defined by &lt;new-parent&gt; or its ancestors under &lt;common&gt; are added to &lt;object&gt; and all of its descendants.  As with `create()', the newly-added properties are given the same permission bits as they have on &lt;new-parent&gt;, the owner of each added property is either the owner of the object it's added to (if the `c' permissions bit is set) or the owner of that property on &lt;new-parent&gt;, and the value of each added property is \"clear\"; see the description of the built-in function `clear_property()' for details.  All properties that are not removed or added in the reparenting process are completely unchanged.", "", "If &lt;new-parent&gt; is equal to #-1, then &lt;object&gt; is given no parent at all; it becomes a new root of the parent/child hierarchy. In this case, all formerly inherited properties on &lt;object&gt; are simply removed."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>create()</NAME>
          <VALUE>{"Syntax:  create (obj &lt;parent&gt; [, obj &lt;owner&gt;])   =&gt; obj", "", "Creates and returns a new object whose parent is &lt;parent&gt; and whose owner is as described below.  Either the given &lt;parent&gt; object must be fertile (i.e., its `f' bit must be set) or else the programmer must own &lt;parent&gt; or be a wizard; otherwise `E_PERM' is raised. `E_PERM' is also raised if &lt;owner&gt; is provided and not the same as the programmer, unless the programmer is a wizard.  After the new object is created, its `initialize' verb, if any, is called with no arguments.", "", "The new object is assigned the least non-negative object number that has not yet been used for a created object.  Note that no object number is ever reused, even if the object with that number is recycled.", "", "The owner of the new object is either the programmer (if &lt;owner&gt; is not provided), the new object itself (if &lt;owner&gt; was given as `#-1'), or &lt;owner&gt; (otherwise).", "", "The other built-in properties of the new object are initialized as follows:", "    name         \"\"", "    location     #-1", "    contents     {}", "    programmer   0", "    wizard       0", "    r            0", "    w            0", "    f            0", "", "In addition, the new object inherits all of the other properties on &lt;parent&gt;.  These properties have the same permission bits as on &lt;parent&gt;.  If the `c' permissions bit is set, then the owner of the property on the new object is the same as the owner of the new object itself; otherwise, the owner of the property on the new object is the same as that on &lt;parent&gt;.  The initial value of every inherited property is \"clear\"; see the description of the built-in function `clear_property()' for details.", "", "", "If the intended owner of the new object has a property named `ownership_quota' and the value of that property is a number, then `create()' treats that value as a \"quota\".  If the quota is less than or equal to zero, then the quota is considered to be exhausted and `create()' raises `E_QUOTA' instead of creating an object. Otherwise, the quota is decremented and stored back into the `ownership_quota' property as a part of the creation of the new object."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>setremove()</NAME>
          <VALUE>{"*forward*", "setadd()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>setadd()</NAME>
          <VALUE>{"Syntax:  setadd (LIST &lt;list&gt;, &lt;value&gt;)   =&gt; LIST", "      setremove (LIST &lt;list&gt;, &lt;value&gt;)   =&gt; LIST", "", "Returns a copy of &lt;list&gt; with the given &lt;value&gt; added or removed, as appropriate.  `Setadd()' only adds &lt;value&gt; if it is not already an element of &lt;list&gt;; &lt;list&gt; is thus treated as a mathematical set. &lt;value&gt; is added at the end of the resulting list, if at all.  Similarly, `setremove()' returns a list identical to &lt;list&gt; if &lt;value&gt; is not an element.  If &lt;value&gt; appears more than once in &lt;list&gt;, only the first occurrence is removed in the returned copy.", "", "    setadd({1, 2, 3}, 3)         =&gt;   {1, 2, 3}", "    setadd({1, 2, 3}, 4)         =&gt;   {1, 2, 3, 4}", "    setremove({1, 2, 3}, 3)      =&gt;   {1, 2}", "    setremove({1, 2, 3}, 4)      =&gt;   {1, 2, 3}", "    setremove({1, 2, 3, 2}, 2)   =&gt;   {1, 3, 2}"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>listset()</NAME>
          <VALUE>{"Syntax:  listset (LIST &lt;list&gt;, &lt;value&gt;, INT &lt;index&gt;)   =&gt; LIST", "", "Returns a copy of &lt;list&gt; with the &lt;index&gt;th element replaced by &lt;value&gt;.  If &lt;index&gt; is not in the range `[1..length(&lt;list&gt;)]', then E_RANGE is raised.", "", "    x = {\"foo\", \"bar\", \"baz\"};", "    listset(x, \"mumble\", 2)   =&gt;   {\"foo\", \"mumble\", \"baz\"}", "", "This function exists primarly for historical reasons; it was used heavily before the server supported indexed assignments like x[i] = v. New code should always use indexed assignment instead of `listset()' wherever possible."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>listdelete()</NAME>
          <VALUE>{"Syntax:  listdelete (LIST &lt;list&gt;, INT &lt;index&gt;)   =&gt; LIST", "", "Returns a copy of &lt;list&gt; with the &lt;index&gt;th element removed.  If &lt;index&gt; is not in the range `[1..length(&lt;list&gt;)]', then E_RANGE is raised.", "", "    x = {\"foo\", \"bar\", \"baz\"};", "    listdelete(x, 2)   =&gt;   {\"foo\", \"baz\"}"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>listinsert()</NAME>
          <VALUE>{"Syntax:  listinsert (LIST &lt;list&gt;, &lt;value&gt; [, INT &lt;index&gt;])   =&gt; list", "         listappend (LIST &lt;list&gt;, &lt;value&gt; [, INT &lt;index&gt;])   =&gt; list", "", "These functions return a copy of &lt;list&gt; with &lt;value&gt; added as a new element.  `listinsert()' and `listappend()' add &lt;value&gt; before and after (respectively) the existing element with the given &lt;index&gt;, if provided.", "", "The following three expressions always have the same value:", "", "    listinsert(&lt;list&gt;, &lt;element&gt;, &lt;index&gt;)", "    listappend(&lt;list&gt;, &lt;element&gt;, &lt;index&gt; - 1)", "    {@&lt;list&gt;[1..&lt;index&gt; - 1], &lt;element&gt;, @&lt;list&gt;[&lt;index&gt;..length(&lt;list&gt;)]}", "", "If &lt;index&gt; is not provided, then `listappend()' adds the &lt;value&gt; at the end of the list and `listinsert()' adds it at the beginning; this usage is discouraged, however, since the same intent can be more clearly expressed using the list-construction expression, as shown in the examples below.", "", "    x = {1, 2, 3};", "    listappend(x, 4, 2)   =&gt;   {1, 2, 4, 3}", "    listinsert(x, 4, 2)   =&gt;   {1, 4, 2, 3}", "    listappend(x, 4)      =&gt;   {1, 2, 3, 4}", "    listinsert(x, 4)      =&gt;   {4, 1, 2, 3}", "    {@x, 4}               =&gt;   {1, 2, 3, 4}", "    {4, @x}               =&gt;   {4, 1, 2, 3}"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>listappend()</NAME>
          <VALUE>{"*forward*", "listinsert()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>strcmp()</NAME>
          <VALUE>{"Syntax:  strcmp (STR &lt;str1&gt;, STR &lt;str2&gt;)   =&gt; INT", "", "Performs a case-sensitive comparison of the two argument strings.  If &lt;str1&gt; is lexicographically less than &lt;str2&gt;, the `strcmp()' returns a negative number.  If the two strings are identical, `strcmp()' returns zero.  Otherwise, `strcmp()' returns a positive number.  The ASCII character ordering is used for the comparison."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>rindex()</NAME>
          <VALUE>{"*forward*", "index()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>index()</NAME>
          <VALUE>{"Syntax:  index (STR &lt;str1&gt;, STR &lt;str2&gt; [, &lt;case-matters&gt;])   =&gt; INT", "        rindex (STR &lt;str1&gt;, STR &lt;str2&gt; [, &lt;case-matters&gt;])   =&gt; INT", "", "The function `index()' (`rindex()') returns the index of the first character of the first (last) occurrence of &lt;str2&gt; in &lt;str1&gt;, or zero if &lt;str2&gt; does not occur in &lt;str1&gt; at all.  By default the search for an occurrence of &lt;str2&gt; is done while ignoring the upper/lower case distinction.  If &lt;case-matters&gt; is provided and true, then case is treated as significant in all comparisons.", "", "    index(\"foobar\", \"o\")        =&gt;   2", "    rindex(\"foobar\", \"o\")       =&gt;   3", "    index(\"foobar\", \"x\")        =&gt;   0", "    index(\"foobar\", \"oba\")      =&gt;   3", "    index(\"Foobar\", \"foo\", 1)   =&gt;   0"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>crypt()</NAME>
          <VALUE>{"Syntax:  crypt (str &lt;text&gt; [, str &lt;salt&gt;])   =&gt; str", "", "Encrypts the given &lt;text&gt; using the standard UNIX encryption method.  If", "provided, &lt;salt&gt; should be a two-character string for use as the extra", "encryption ``salt'' in the algorithm.  If &lt;salt&gt; is not provided, a random", "pair of characters is used.  In any case, the salt used is also returned as the", "first two characters of the resulting encrypted string.", "", "Aside from the possibly-random selection of the salt, the encryption algorithm", "is entirely deterministic.  In particular, you can test whether or not a given", "string is the same as the one used to produced a given piece of encrypted text;", "simply extract the first two characters of the encrypted text and pass the", "candidate string and those two characters to `crypt()'.  If the result is", "identical to the given encrypted text, then you've got a match.", "", "    crypt(\"foobar\")         =&gt;   \"J3fSFQfgkp26w\"", "    crypt(\"foobar\", \"J3\")   =&gt;   \"J3fSFQfgkp26w\"", "    crypt(\"mumble\", \"J3\")   =&gt;   \"J3D0.dh.jjmWQ\"", "    crypt(\"foobar\", \"J4\")   =&gt;   \"J4AcPxOJ4ncq2\""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>strsub()</NAME>
          <VALUE>{"Syntax:  strsub (STR &lt;subject&gt;, STR &lt;what&gt;, STR &lt;with&gt; [, &lt;case-matters&gt;])   =&gt; STR", "", "Replaces all occurrences in &lt;subject&gt; of &lt;what&gt; with &lt;with&gt;, performing string substitution.  The occurrences are found from left to right and all substitutions happen simultaneously.  By default, occurrences of &lt;what&gt; are searched for while ignoring the upper/lower case distinction. If &lt;case-matters&gt; is provided and true, then case is treated as significant in all comparisons.", "", "    strsub(\"%n is a fink.\", \"%n\", \"Fred\")   =&gt;   \"Fred is a fink.\"", "    strsub(\"foobar\", \"OB\", \"b\")             =&gt;   \"fobar\"", "    strsub(\"foobar\", \"OB\", \"b\", 1)          =&gt;   \"foobar\""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>length()</NAME>
          <VALUE>{"Syntax:  length (&lt;list or string&gt;)   =&gt; int", "", "Returns the number of characters in &lt;list or string&gt;.  ", "", "    length(\"foo\")       =&gt;   3", "    length(\"\")          =&gt;   0", "    length({1, 2, 3})   =&gt;   3", "    length({})          =&gt;   0"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>ctime()</NAME>
          <VALUE>{"Syntax:  ctime ([INT &lt;time&gt;])   =&gt; str", "", "Interprets &lt;time&gt; as a time, using the same representation as given in the description of `time()', and converts it into a 28-character, human-readable string in the following format:", "", "    Mon Aug 13 19:13:20 1990 PDT", "", "If the current day of the month is less than 10, then an extra blank appears between the month and the day:", "", "    Mon Apr  1 14:10:43 1991 PST", "", "If &lt;time&gt; is not provided, then the current time is used.", "", "Note that `ctime()' interprets &lt;time&gt; for the local time zone of the computer on which the MOO server is running."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>time()</NAME>
          <VALUE>{"Syntax:  time ()   =&gt; INT", "", "Returns the current time, represented as the number of seconds that have elapsed since midnight on 1 January 1970, Greenwich Mean Time."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>random()</NAME>
          <VALUE>{"Syntax:  random ([INT &lt;mod&gt;])   =&gt; INT", "", "&lt;Mod&gt; must be a positive integer; otherwise, E_INVARG is raised.  An integer is chosen randomly from the range `[1..&lt;mod&gt;]' and returned. If &lt;mod&gt; is not provided, it defaults to the largest MOO integer, 2147483647."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>abs()</NAME>
          <VALUE>{"Syntax:  abs (num &lt;x&gt;)   =&gt; num", "", "Returns the absolute value of &lt;x&gt;.  If &lt;x&gt; is negative, then the result is `-&lt;x&gt;'; otherwise, the result is &lt;x&gt;. The number x can be either integer or floating-point; the result is of the same kind."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>max()</NAME>
          <VALUE>{"*forward*", "min()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>min()</NAME>
          <VALUE>{"Syntax:  min (num &lt;x&gt;, ...)   =&gt; num", "         max (num &lt;x&gt;, ...)   =&gt; num", "", "These two functions return the smallest or largest of their arguments, respectively.  All of the arguments must be numbers of the same kind (i.e., either integer or floating-point); otherwise E_TYPE is raised."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>toobj()</NAME>
          <VALUE>{"Syntax:  toobj (&lt;value&gt;)   =&gt; OBJ", "", "Converts the given MOO value into an object number and returns that object number.  The conversions are very similar to those for `toint()' except that for strings, the number *may* be preceded by `#'.", "", "    toobj(\"34\")       =&gt;   #34", "    toobj(\"#34\")      =&gt;   #34", "    toobj(\"foo\")      =&gt;   #0", "    toobj({1, 2})     -error-&gt;   E_TYPE"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>tonum()</NAME>
          <VALUE>{"Syntax:  toint (&lt;value&gt;)   =&gt; INT", "         tonum (&lt;value&gt;)   =&gt; INT", "", "Converts the given MOO value into an integer and returns that integer. Floating-point numbers are rounded toward zero, truncating their fractional parts. Object numbers are converted into the equivalent integers, strings are parsed as the decimal encoding of a real number which is then converted to an integer. Errors are converted into integers obeying the same ordering (with respect to `&lt;=' as the errors themselves.) `Toint()' raises E_TYPE if &lt;value&gt; is a LIST.  If &lt;value&gt; is a string but the string does not contain a syntactically-correct number, then `toint()' returns 0.", "", "    toint(34.7)        =&gt;   34", "    toint(-34.7)       =&gt;   34", "    toint(#34)         =&gt;   34", "    toint(\"34\")        =&gt;   34", "    toint(\"34.7\")      =&gt;   34", "    toint(\" - 34  \")   =&gt;  -34", "    toint(E_TYPE)      =&gt;    1"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>tostr()</NAME>
          <VALUE>{"Syntax:  tostr (&lt;value&gt;, ...)   =&gt; STR", "", "Converts all of the given MOO values into strings and returns the concatenation of the results.", "", "    tostr(17)                  =&gt;   \"17\"", "    tostr(1.0/3.0)             =&gt;   \"0.333333333333333\"", "    tostr(#17)                 =&gt;   \"#17\"", "    tostr(\"foo\")               =&gt;   \"foo\"", "    tostr({1, 2})              =&gt;   \"{list}\"", "    tostr(E_PERM)              =&gt;   \"Permission denied\"", "    tostr(\"3 + 4 = \", 3 + 4)   =&gt;   \"3 + 4 = 7\"", "", "Note that `tostr()' does not do a good job of converting lists into strings; all lists, including the empty list, are converted into the string `\"{list}\"'. The function `toliteral()' is better for this purpose."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>typeof()</NAME>
          <VALUE>{"Syntax:  typeof (&lt;value&gt;)   =&gt; INT", "", "Takes any MOO value and returns a number representing the type of &lt;value&gt;. The result is the same as the initial value of one of these built-in variables: `INT', `FLOAT', `STR', `LIST', `OBJ', or `ERR'.  Thus, one usually writes code like this:", "", "    if (typeof(x) == LIST) ...", "", "and not like this:", "", "    if (typeof(x) == 4) ...", "", "because the former is much more readable than the latter."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>clear_property()</NAME>
          <VALUE>{"Syntax:  clear_property (OBJ &lt;object&gt;, STR &lt;prop-name&gt;)  =&gt; none", "      is_clear_property (OBJ &lt;object&gt;, STR &lt;prop-name&gt;)  =&gt; INT", "", "These two functions test for clear and set to clear, respectively, the property named &lt;prop-name&gt; on the given &lt;object&gt;.  If &lt;object&gt; is not valid, then E_INVARG is raised.  If &lt;object&gt; has no non-built-in property named &lt;prop-name&gt;, then E_PROPNF is raised.  If the programmer does not have read (write) permission on the property in question, then `is_clear_property()' (`clear_property()') raises E_PERM. If a property is clear, then when the value of that property is queried the value of the parent's property of the same name is returned.  If the parent's property is clear, then the parent's parent's value is examined, and so on. If &lt;object&gt; is the definer of the property &lt;prop-name&gt;, as opposed to an inheritor of the property, then `clear_property()' raises E_INVARG."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>is_clear_property()</NAME>
          <VALUE>{"*forward*", "clear_property()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>set_connection_option()</NAME>
          <VALUE>{"Syntax:  set_connection_option (OBJ conn, STR option, value)   =&gt; none", "", "Controls a number of optional behaviors associated with the connection &lt;conn&gt;. Raises E_INVARG if &lt;conn&gt; does not specify a current connection and E_PERM if the programmer is neither &lt;conn&gt; nor a wizard. The following values for &lt;option are currently supported:", "", "\"hold-input\"", "   If &lt;value&gt; is true, then input received on &lt;conn&gt; will never be treated as a command; instead, it will remain in the queue until retrieved by a call to `read()'. ", "", "\"client-echo\"", "   Send the Telnet Protocol `WONT ECHO' or `WILL ECHO' command, depending on whether &lt;value&gt; is true or false, respectively. For clients that support the Telnet Protocol, this should toggle whether or not the client echoes locally the characters typed by the user. Note that the server itself never echoes input characters under any circumstances. (This option is only available under the TCP/IP networking configurations.)", "", "\"binary\"", "   If &lt;value&gt; is true, then both input from and output to &lt;conn&gt; can contain arbitrary bytes. Input from a connection in binary mode is not broken into lines at all; it is delivered to either the `read()' function or built-in command parser as `binary strings', in whatever size chunks come back from the operating system. (See the early section in the LambdaMOO Programmers Manual on MOO value types for a description of the binary string representation.) For output to a connection in binary mode, the second argument to `notify()' must be a binary string; if it is malformed, E_INVARG is raised.", "", "\"flush-command\"", "   If &lt;value&gt; is a non-empty string, then it becomes the new `flush' command for this connection, by which the player can flush all queued input that has not yet been processed by the server. If &lt;value&gt; is not a non-empty string, then &lt;conn&gt; is set to have no flush command at all. The default value of this option can be set via the property `$server_options.default_flush_command'; see the chapter in the LambdaMOO Programmers Manual on server assumptions about the database for details."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>queue_info()</NAME>
          <VALUE>{"queue_info([obj user])", "", "Returns the number of forked tasks that &lt;user&gt; has at the moment.  Since it doesn't say which tasks, security is not a significant issue.  If no argument is given, then gives a list of all users with task queues in the server.  (Essentially all connected players + all open connections + all users with tasks running in the background.)"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>is_member()</NAME>
          <VALUE>{"Syntax:  is_member (ANY value, LIST list)   =&gt; INT", "", "Returns true if there is an element of &lt;list&gt; that is completely indistinguishable from &lt;value&gt;. This is much the same operation as \"&lt;value&gt; in &lt;list&gt;\" except that, unlike `in', the `is_member()' function does not treat upper- and lower-case characters in strings as equal.", "", "Raises E_ARGS if two values are given or if more than two values are given. Raises E_TYPE if the second argument is not a list. Otherwise returns the index of &lt;value&gt; in &lt;list&gt;, or 0 if it's not in there.", "", "  is_member(3, {3, 10, 11})                 =&gt; 1", "  is_member(\"a\", {\"A\", \"B\", \"C\"})           =&gt; 0", "  is_member(\"XyZ\", {\"XYZ\", \"xyz\", \"XyZ\"})   =&gt; 3"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>equal()</NAME>
          <VALUE>{"Syntax:  equal(value1, value2)   =&gt; INT", "", "Returns true if &lt;value1&gt; is completely indistinguishable from &lt;value2&gt;. This is much the same operation as \"&lt;value1&gt; == &lt;value2&gt;\" except that, unlike ==, the `equal()' function does not treat upper- and lower-case characters in strings as equal.", "", "Raises E_ARGS if none, one, or more than two arguments are given.", "", "equal(1, 2)                   =&gt; 0", "equal(\"ChIcKeN\", \"chicken\")   =&gt; 0", "equal(\"ABC123\", \"ABC123\")     =&gt; 1"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>toliteral()</NAME>
          <VALUE>{"Syntax:  toliteral (&lt;value&gt;)   =&gt; STR", "", "Returns a string containing a MOO literal expression that, when evaluated, would be equal to &lt;value&gt;. If no arguments or more than one argument is given, E_ARGS is raised.", "", "Examples:", "toliteral(43)                       =&gt;  \"43\"", "toliteral(1.0/3.0)                  =&gt;  \"0.33333333333333\"", "toliteral(#17)                      =&gt;  \"#17\"", "toliteral(E_PERM)                   =&gt;  \"E_PERM\"", "toliteral({\"A\", \"B\", {\"C\", 123}})   =&gt;  \"{\\\"A\\\", \\\"B\\\", {\\\"C\\\", 123}}\""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>value_bytes()</NAME>
          <VALUE>{"Syntax:  value_bytes(&lt;value&gt;)   =&gt; INT", "", "Returns the number of bytes of the server's memory required to store the given &lt;value&gt;."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>acos()</NAME>
          <VALUE>{"Syntax:  acos (FLOAT &lt;x&gt;)   =&gt; FLOAT", "", "Returns the arc-cosine (inverse cosine) of x, in the range [0..pi]. Raises E_INVARG if x is outside the range [-1.0..1.0]."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>asin()</NAME>
          <VALUE>{"Syntax:  asin (FLOAT &lt;x&gt;)   =&gt; FLOAT", "", "Returns the arc-sine (inverse sine) of x, in the range [-pi/2..pi/2]. Raises E_INVARG if x is outside the range [-1.0..1.0]."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>atan()</NAME>
          <VALUE>{"Syntax:  atan (FLOAT &lt;y&gt; [, FLOAT &lt;x&gt;])   =&gt; FLOAT", "", "Returns the arc-tangent (inverse tangent) of y in the range [-pi/2..pi/2] if x is not provided, or of y/x in the range [-pi..pi] if x is provided."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>binary_hash()</NAME>
          <VALUE>{"Syntax:  binary_hash (STR bin-string)   =&gt; STR", "         string_hash (STR text)         =&gt; STR", "", "Returns a 32-character hexadecimal string encoding the result of applying the MD5 cryptographically secure hash function to the contents of the string `text' or the binary string `bin-string'. MD5, like other such functions, has the property that, if", "", "string_hash(x) == string_hash(y)", "", "then, almost certainly", "", "equal(x, y)", "", "This can be useful, for example, in certain networking applications:  after sending a large piece of text across a connection, also send across the result of applying string_hash() to the text; if the destination site also applies string_hash() to the text and gets the same result, you can be quite confident that the large text has arrived unchanged."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>string_hash()</NAME>
          <VALUE>{"*forward*", "binary_hash()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>buffered_output_length()</NAME>
          <VALUE>{"Syntax:  buffered_output_length ([OBJ conn])   =&gt; INT", "", "Returns the number of bytes currently buffered for output to the connection `conn'.  If conn is not provided, returns the maximum number of bytes that will be buffered up for output on any connection."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>call_function()</NAME>
          <VALUE>{"Syntax:  call_function (STR func-name, arg, ...)   =&gt; value", "", "Calls the built-in function named `func-name', passing the given arguments, and returns whatever that function returns. Raises E_INVARG if func-name is not recognized as the name of a known built-in function. This allows you to compute the name of the function to call and, in particular, allows you to write a call to a built-in function that may or may not exist in the particular version of the server you're using."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>ceil()</NAME>
          <VALUE>{"Syntax:  ceil (FLOAT &lt;x&gt;)   =&gt; FLOAT", "", "Returns the smallest integer not less than x, as a floating-point number."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>connection_options()</NAME>
          <VALUE>{"Syntax:  connection_options (OBJ conn, STR name)   =&gt; LIST", "", "Return a list of (&lt;name&gt;, &lt;value&gt;) pairs describing the current settings of all of the allowed options for the connection &lt;conn&gt;. Raises E_INVARG if &lt;conn&gt; does not specify a current connection and E_PERM if the programmer is neither &lt;conn&gt; nor a wizard."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>connection_option()</NAME>
          <VALUE>{"Syntax:  connection_option (OBJ conn, STR name)   =&gt; value", "", "Returns the current setting of the option &lt;name&gt; for the connection &lt;conn&gt;. Raises E_INVARG if &lt;conn&gt; does not specify a current connection and E_PERM if the programmer is neither &lt;conn&gt; nor a wizard."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>sin()</NAME>
          <VALUE>{"Syntax:  cos (FLOAT x)   =&gt; FLOAT", "         sin (FLOAT x)   =&gt; FLOAT", "         tan (FLOAT x)   =&gt; FLOAT", "", "Returns the cosine, sine, or tangent of &lt;x&gt;, respectively."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>cos()</NAME>
          <VALUE>{"*forward*", "sin()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>tan()</NAME>
          <VALUE>{"*forward*", "sin()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>sinh()</NAME>
          <VALUE>{"Syntax:  cosh (FLOAT x)   =&gt; FLOAT", "         sinh (FLOAT x)   =&gt; FLOAT", "         tanh (FLOAT x)   =&gt; FLOAT", "", "Returns the hyperbolic cosine, sine, or tangent of &lt;x&gt;, respectively."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>cosh()</NAME>
          <VALUE>{"*forward*", "sinh()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>tanh()</NAME>
          <VALUE>{"*forward*", "sinh()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>db_disk_size()</NAME>
          <VALUE>{"Syntax:  db_disk_size()   =&gt; INT", "", "Returns the total size, in bytes, of the most recent full representation of the database as one or more disk files. Raises E_QUOTA if, for some reason, no such on-disk representation is currently available."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>decode_binary()</NAME>
          <VALUE>{"Syntax:  decode_binary (STR bin-string [, fully])   =&gt; LIST", "", "Returns a list of strings and/or integers representing the bytes in the binary string &lt;bin-string&gt; in order. If &lt;fully&gt; is false or omitted, the list contains an integer only for each non-printing, non-space byte; all other characters are grouped into the longest possible contiguous substrings. If &lt;fully&gt; is proved and true, the list contains only integers, one for each byte represented in &lt;bin-string&gt;. Raises E_INVARG if &lt;bin-string&gt; is not a properly-formed binary string. (See the LambdaMOO programmer's manual on MOO value types for a full description of binary strings.)", "", "decode_binary(\"foo\")               =&gt;  {\"foo\"}", "decode_binary(\"~~foo\")             =&gt;  {\"~foo\"}", "decode_binary(\"foo~0D~0A\")         =&gt;  {\"foo\", 13, 10}", "decode_binary(\"foo~0Abar~0Abaz\")   =&gt;  {\"foo\", 10, \"bar\", 10, \"baz\"}", "decode_binary(\"foo~0D~0A\", 1)      =&gt;  {102, 111, 111, 13, 10}"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>disassemble()</NAME>
          <VALUE>{"Syntax:  disassemble (OBJ object, STR verb-desc)   =&gt; LIST", "", "Returns a (longish) list of strings giving a listing of the server's internal \"compiled\" form of the verb as specified by &lt;verb-desc&gt; on &lt;object&gt;. This format is not documented and may indeed change from release to release, but some programmers may nonetheless find the output of `disassemble()' interesting to peruse as a way to gain a deeper appreciation of how the server works.", "", "If &lt;object&gt; is not valid, then E_INVARG is raised. If &lt;object&gt; does not define a verb as specified by &lt;verb-desc&gt;, then E_VERBNF is raised. If the programmer does not have read permission on the verb in question, then disassemble() raises E_PERM."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>encode_binary()</NAME>
          <VALUE>{"Syntax:  encode_binary(arg, ...)   =&gt; STR", "", "Each argument must be an integer between 0 and 255, a string, or a list containing only legal arguments for this function. This function translates each integer and string in turn into its binary string equivalent, returning the concatenation of all these substrings into a single binary string. (See the early sections in the LambdaMOO Programmer's Manual on MOO value types for a full description of binary strings.)", "", "encode_binary(\"~foo\")                     =&gt;  \"~7Efoo\"", "encode_binary({\"foo\", 10}, {\"bar\", 13})   =&gt;  \"foo~0Abar~0D\"", "encode_binary(\"foo\", 10, \"bar\", 13)       =&gt;  \"foo~0Abar~0D\""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>exp()</NAME>
          <VALUE>{"Syntax:  exp (FLOAT x)   =&gt; FLOAT", "", "Returns `e' raised to the power of &lt;x&gt;."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>floatstr()</NAME>
          <VALUE>{"Syntax:  floatstr (FLOAT x, INT precision [, scientific])   =&gt; STR", "", "Converts &lt;x&gt; into a string with more control than provided by either `tostr()' or `toliteral()'. &lt;Precision&gt; is the number of digits to appear to the right of the decimal point, capped at 4 more than the maximum available precision, a total of 19 on most machines; this makes it possible to avoid rounding errors if the resulting string is subsequently read back as a floating-point value. If &lt;scientific&gt; is false or not provided, the result is a string in the form \"MMMMMMM.DDDDDD\", preceded by a minus sign if and only if &lt;x&gt; is negative. If &lt;scientific&gt; is provided and true, the result is a string in the form \"M.DDDDDDe+EEE\", again preceded by a minus sign if and only if &lt;x&gt; is negative."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>floor()</NAME>
          <VALUE>{"Syntax:  floor (FLOAT x)   =&gt; FLOAT", "", "Returns the largest integer not greater than x, as a floating-point number."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>flush_input()</NAME>
          <VALUE>{"Syntax:  flush_input (OBJ conn [, show-messages])   =&gt; none", "", "Performs the same actions as if the connection &lt;conn&gt;'s definied flush command had been received on that connection, i.e., removes all pending lines of input from &lt;conn&gt;'s queue and, if &lt;show-messages&gt; is provided and true, prints a messages to &lt;conn&gt; listing the flushed lines, if any.  See the chapter in the LambdaMOO Programmer's Manual on server assumptions about the database for more information about a connection's defined flush command."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>force_input()</NAME>
          <VALUE>{"Syntax:  force_input (OBJ conn, STR line [, at-front])   =&gt; none", "", "Inserts the string &lt;line&gt; as an input task in the queue for the connection &lt;conn&gt;, just as if it had arrived as input over the network. If &lt;at-front&gt; is provided and true, then the new line of input is put at the front of &lt;conn&gt;'s queue, so that it will be the very next line of input processed even if there is already some other input in that queue. Raises E_INVARG if &lt;conn&gt; does not specify a current connection and E_PERM if the programmer is neither &lt;conn&gt; nor a wizard."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>function_info()</NAME>
          <VALUE>{"Syntax:  function_info ([STR name])   =&gt; LIST", "", "Returns descriptions of the various built-in functions available on the server. If &lt;name&gt; is provided, only the description of the function with that name is returned. If &lt;name&gt; is omitted, a list of descriptions is returned, one for each function available on the server. E_INVARG is raised if &lt;name&gt; is provided but no function with that name is available on the server.", "", "Each function description is a list of the following form:", "", "  {&lt;name&gt;, &lt;min-args&gt;, &lt;max-args&gt;, &lt;types&gt;}", "", "where &lt;name&gt; is the name of the built-in function, &lt;min-args&gt; is the minimum number of arguments that must be to the function, &lt;max-args&gt; is the maximum number of arguments that can be provided to the function or -1 if there is no maximum, and &lt;types&gt; is a list of &lt;max-args&gt; integers (or &lt;min-args&gt; if &lt;max-args&gt; is -1), each of which represents the type of argument required in the corresponding position. Each type number is as would be returned from the `typeof()' built-in function except that -1 indicates that any type of value is acceptable and -2 indicates that either integers or floating-point numbers may be given. For example, here are several entries from the list:", "", "  {\"listdelete\", 2, 2, {4, 0}}", "  {\"suspend\", 0, 1, {0}}", "  {\"server_log\", 1, 2, {2, -1}}", "  {\"max\", 1, -1, {-2}}", "  {\"tostr\", 0, -1, {}}", "", "`Listdelete()' takes exactly 2 arguments, of which the first must be a list (LIST == 4) and the second must be an integer (INT == 0). `Suspend()' has one optional argument that, if provided, must be an integer. `Server_log()' has one required argument that must be a string (STR == 2) and one optional argument that, if provided, may be of any type. `Max()' requires at least one argument but can take any number above that, and the first argument must be either an integer or a floating-point number; the type(s) required for any other arguments can't be determined from this description. Finally, `tostr()' takes any number of arguments at all, but it can't be determined from this description which argument types would be acceptable in which positions."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>listen()</NAME>
          <VALUE>{"Syntax:  listen (OBJ object, point [, print-messages])   =&gt; value", "", "Create a new point at which the server will listen for network connections, just as it does normally. &lt;Object&gt; is the object whose verbs `do_login_command', `do_command', `do_out_of_band_command', `user_connected', `user_created', `user_reconnected', `user_disconnected', and `user_client_disconnected' will be called at appropriate points asthese verbs are called on #0 for normal connections. (See the chapter in the LambdaMOO Programmer's Manual on server assumptions about the database for the complete story on when these functions are called.) &lt;Point&gt; is a network-configuration-specific parameter describing the listening point. If &lt;print-messages&gt; is provided and true, then the various database-configurable messages (also detailed in the chapter on server assumptions) will be printed on connections received at the new listening point. `Listen()' returns &lt;canon&gt;, a `canonicalized' version of &lt;point&gt;, with any configuration-specific defaulting or aliasing accounted for.", "", "This raises E_PERM if the programmer is not a wizard, E_INVARG if &lt;object&gt; is invalid or there is already a listening point described by &lt;point&gt;, and E_QUOTA if some network-configuration-specific error occurred.", "", "For the TCP/IP configurations, &lt;point&gt; is a TCP port number on which to listen and &lt;canon&gt; is equal to &lt;point&gt; unless &lt;point&gt; is zero, in which case &lt;canaon&gt; is a port number assigned by the operating system.", "", "For the local multi-user configurations, &lt;point&gt; is the UNIX file name to be used as the connection point and &lt;canon&gt; is always equal to &lt;point&gt;.", "", "In the single-user configuration, there can be only one listening point at a time; &lt;point&gt; can be any value at all and &lt;canon&gt; is always zero."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>listeners()</NAME>
          <VALUE>{"Syntax:  listeners ()  =&gt; LIST", "", "Returns a list describing all existing listening points, including the default one set up automatically by the server when it was started (unless that one has since been destroyed by a call to `unlisten()'). Each element of the list has the following form:", "", "  {&lt;object&gt;, &lt;canon&gt;, &lt;print-messages&gt;}", "", "where &lt;object&gt; is the first argument given in the call to `listen()' to create this listening point, &lt;print-messages&gt; is true if the third argument in that call was provided and true, and &lt;canon&gt; was the value returned by that call. (For the initial listening point, &lt;object&gt; is #0, &lt;canon&gt; is determined by the command-line arguments or a network-configuration-specific default, and &lt;print-messages&gt; is true.)"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>log()</NAME>
          <VALUE>{"Syntax:  log (FLOAT x)     =&gt; FLOAT", "         log10 (FLOAT x)   =&gt; FLOAT", "", "Returns the natural or base 10 logarithm of &lt;x&gt;. Raises E_INVARG if &lt;x&gt; is not positive."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>log10()</NAME>
          <VALUE>{"*forward*", "log()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>object_bytes()</NAME>
          <VALUE>{"Syntax:  object_bytes (OBJ object)   =&gt; INT", "", "Returns the number of bytes of the server's memory required to store the given &lt;object&gt;, including the space used by the values of all its non-clear properties and by the verbs and properties defined directly on the object. Raises E_INVARG if &lt;object&gt; is not a valid object and E_PERM if the programmer is not a wizard."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>raise()</NAME>
          <VALUE>{"Syntax:  raise (code [, STR message [, value]])   =&gt; none", "", "Raises &lt;code&gt; as an error in the same way as other MOO expressions, statements, and functions do. &lt;Message&gt;, which defaults to the value `tostr(&lt;code&gt;)', and &lt;value&gt;, which defaults to zero, are made available to any `try-except' statements to catch the error. If the error is not caught, then &lt;message&gt; will appear on the first line of the traceback printed to the user."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>resume()</NAME>
          <VALUE>{"Syntax:  resume (INT task-id [, value])   =&gt; none", "", "Immediately ends the suspension of the suspended task with the given &lt;task-id&gt;; that task's call to `suspend()' will return &lt;value&gt;, which defaults to zero. `Resume()' raises E_INVARG if &lt;task-id&gt; does not specify an existing suspended task and E_PERM if the programmer is neither a wizard nor the owner of the specified task."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>task_stack()</NAME>
          <VALUE>{"Syntax:  task_stack (INT task-id [, include-line-numbers])  =&gt; LIST", "", "Returns information like that returned by the `callers()' function, but for the suspended task with the given &lt;task-id&gt;; the &lt;include-line-numbers&gt; argument has the same meaning as in `callers()'. Raises E_INVARG if &lt;task-id&gt; does not specify an existing suspended task and E_PERM if the programmer is neither a wizard nor the owner of the specified task."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>tofloat()</NAME>
          <VALUE>{"Syntax:  tofloat (value)   =&gt; FLOAT", "", "Converts the given MOO value into a floating-point number and returns that number. Integers and objects numbers are converted into the corresponding integral floating-point numbers. Strings are parsed as the decimal encoding of a real number which is then represented as closely as possible as a floating-point number. Errors are first converted to integers as in `toint()' and then converted as integers are. `Tofloat()' raises E_TYPE if &lt;value&gt; is a LIST. If &lt;value&gt; is a string but the string does not contain a syntactically-correct number, then `tofloat()' raises E_INVARG.", "", "  tofloat(34)       =&gt;  34.0", "  tofloat(#34)      =&gt;  34.0", "  tofloat(\"34\")     =&gt;  34.0", "  tofloat(\"34.7\")   =&gt;  34.7", "  tofloat(E_TYPE)   =&gt;  1.0"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>toint()</NAME>
          <VALUE>{"*forward*", "tonum()"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>trunc()</NAME>
          <VALUE>{"Syntax:  trunc (FLOAT &lt;x&gt;)   =&gt; FLOAT", "", "Returns the integer obtained by truncating &lt;x&gt; at the decimal point, as a floating-point number. For negative &lt;x&gt;, this is equalavent to `ceil()'; otherwise, it is equivalent to `floor()'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>unlisten()</NAME>
          <VALUE>{"Syntax:  unlisten (&lt;canon&gt;)   =&gt; none", "", "Stop listening for connections on the point described by &lt;canon&gt;, which should be the second element of some element of the list returned by `listeners()'. Raises E_PERM if the programmer is not a wizard and E_INVARG if there does not exist a listener with that description."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>value_hash()</NAME>
          <VALUE>{"Syntax:  value_hash (&lt;value&gt;)   =&gt; STR", "", "Returns the same string as `string_hash(toliteral(&lt;value&gt;))'; see the description of `string_hash()' for details."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>index</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>index_cache</NAME>
          <VALUE>{"builtin-index"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"Builtin Function Help"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>{"A help database (in the sense of anything that is usable by $player:help()) is any object having the following two verbs:", "", "  :find_topics(string)", "     returns a list of strings or some boolean false value.", "", "  :get_topic(string)", "     given one of the strings returned by :find_topics this either", "     returns a list of strings (text to be spewed to the player) or", "     returns 1 to indicate that it has already taken care of printing", "     information to the player.", "", "$player:help() consults any .help properties that exist on the player, its ancestors, player.location and its ancestors (in that order).  These properties are assumed to have values that are objects or lists of objects, each object itself assumed to be a help database in the above sense.  The main help database ($help) is placed at the end of the list of databases to be consulted.", "", "The Generic Help Database (this object) is the standard model help database of which the actual help database itself ($help) is an instance.  On help databases of this type, every help topic has a corresponding property, interpreted as follows:", "", "this.(topic) = string           - one-line help text.", "this.(topic) = {\"*verb*\",@args} - call this:verb(@args) to get text", "this.(topic) = any other list   - multi-line help text", "", "For the {\"*verb*\",...} form, the current verbs available are", "", "  {\"*forward*\", topic2, @rest}   ", "     - get topic2 help text and then append rest.  ", "       rest may, in turn, begin with a \"*verb*\"...", "", "  {\"*subst*\", @lines} ", "     - all occurences of %[exp] in lines are replaced with value of exp.  ", "       exp is assumed to evaluate to a string.  Evaluation is done using ", "       $no_one's permissions so exp can only refer to public information.", "", "  {\"*index*\"}", "     - returns a list of all topics in this database, arranged in columns."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{91130, 919123675}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>init_for_core</NAME>
          <CODE>
            if (!caller_perms().wizard)
            raise(E_PERM);
            endif
            pass();
            $prog.help = this;
          </CODE>
        </VERB>
      </OBJECT>
      <OBJECT ID="obj44" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
        <NAME>Editor Help</NAME>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>summary</NAME>
          <VALUE>{"You are inside an editor.  Do", "", "look          -- for list of commands", "what          -- to find out what you're editing.", "list          -- to list out some portion of the text", "say / emote   -- to add new text to whatever you're editing", "", "help edit-index -- for a full list of editor help topics", "help editors    -- for a general discussion about editors", "help moo        -- for the general MOO help summary (i.e., what you get by ", "                   typing `help' with no arguments from outside the editor)."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>edit-index</NAME>
          <VALUE>{"*index*", "Editor Help Topics"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>emote</NAME>
          <VALUE>{"Syntax: emote &lt;text&gt;", "        :&lt;text&gt;", "", "(EDITOR)", "Appends &lt;text&gt; to the end of the line before the insertion point.", "The second form is equivalent to the first except that it doesn't strip leading blanks off of &lt;text&gt; (just as with the normal `emote' and `:' commands).", "The insertion point is left unmoved.", "", "    &gt;list .", "    _37_ Hello there", "    ^38^ Oh, I'm fine.", "    &gt;:, how are you", "    Appended to line 37.", "    &gt;:?", "    Appended to line 37.", "    &gt;list .", "    _37_ Hello there, how are you?", "    ^38^ Oh, I'm fine.", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>say</NAME>
          <VALUE>{"Syntax: say &lt;text&gt;", "        \"&lt;text&gt;", "", "(EDITOR)", "Adds &lt;text&gt; to whatever you are editing.", "The second form is equivalent to the first except in that it doesn't strip leading blanks off of &lt;text&gt; (just as with the normal `say' and `\"' commands).", "", "The added text appears as a new line at the insertion point.  The insertion point, in turn, gets moved so as to be after the added text.  For example:", "", "    &gt;\"first line", "    Line 1 added.", "    &gt;\"  second line\"", "    Line 2 added.", "    &gt;list", "      1: first line", "    __2_   second line\"", "    ^^^^"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>delete</NAME>
          <VALUE>{"Syntax:  del*ete [&lt;range&gt;] ", "", "(EDITOR)", "Deletes the specified range of lines", "&lt;range&gt; defaults to the line *before* the current insertion point."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>insert</NAME>
          <VALUE>{"Syntax:  ins*ert [&lt;ins&gt;] [\"&lt;text&gt;]", "         .                    (`.' == `insert' without arguments)", "", "(EDITOR)", "Many editor commands refer to an \"insertion point\" which is (usually) the place right below where the most recent line was inserted.  The insertion point should really be thought of as sitting *between* lines.  In listings, the line above the insertion point is marked with `_' while the one below is marked with `^'.", "", "The `insert' command, when given an argument, sets the insertion point.", "If &lt;text&gt; is provided, a new line will be created and inserted as with `say'.", "&lt;ins&gt;, both here and in other commands that require specifying an insertion point (e.g., copy/move), can be one of", "          ", "    ^n   above line n", "     n   above line n", "    _n   below line n", "     $   at the end", "    ^$   before the last line", "   n^$   n lines before the end", "     .   the current insertion point  (i.e., `insert .' is a no-op)", "    +n   n lines below the current insertion point.", "    -n   n lines above the current insertion point.", "", "For the truly perverse, there are other combinations that also work due to artifacts of the parsing process, but these might go away..."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>view</NAME>
          <VALUE>{"Syntax:  view &lt;player&gt; [&lt;range&gt;] [nonum]", "         view", "", "Prints some subset of the specified player's text.", "Said player must have previously made his text readable with `publish'.", "&lt;ranges&gt; are specified as in other commands (see `help ranges').", "References to the insertion point refer to wherever the other player has set his/her insertion point; you have no control over it.", "The default range is as in list.", "", "If no arguments are given, this lists all of the players that have published anything in this editor."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>depublish</NAME>
          <VALUE>{"*forward*", "unpublish"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>perish</NAME>
          <VALUE>{"*forward*", "unpublish"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>unpublish</NAME>
          <VALUE>{"Syntax:  unpub*lish", "         depub*lish", "         perish", "", "This command reverses the effects of `publish', making your text readable only by you."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>publish</NAME>
          <VALUE>{"Syntax:  pub*lish", "", "By default, only you (and wizards) can read the text you are editing.", "This command makes your text readable by the entire world (see `help view').", "This is useful if you need help from someone or if you just want to show off your programming acumen.", "Use `unpublish' to make your text private again."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>mode</NAME>
          <VALUE>{"(NOTE EDITOR)", "Syntax:  mode", "         mode string", "         mode list", "         ", "There are (currently) two modes the note editor can be in.", "One is string mode, in which if the text being edited is one line or less, ", "it will be saved as a single string (or an empty string) rather than as a list.", "The other is list mode, in which text is always saved as a list of strings.", "The mode is set when the text is first loaded (string mode if the text is a string, list mode otherwise), but can be changed using this command.", "", "The first form above (i.e., without any arguments) reports the current mode."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>enter</NAME>
          <VALUE>{"Syntax:  enter", "", "(EDITOR)", "Enters a sequence of lines at the insertion point (see `help insert').", "This is similar to .program in that every line you type after the `enter' command is inserted verbatim into the text until you type a line with a single period (`.') on it.  This command is essentially for if you don't like the idea of putting \" at the beginning of each line you type.  The only exceptions, i.e., lines that are not entered verbatim (aside from the `.' line), are", "", " - If you type a line whose sole text is `@abort', ", "   that aborts this command without making any changes to the text.  ", " - Any line whose first nonblank character is `.' and has additional text", "   is entered but with its first `.' stripped off.  ", "", "Thus, to enter a line whose text is `@abort', you could enter it as `.@abort'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>quit</NAME>
          <VALUE>{"Syntax:  q*uit", "         done", "         pause  ", "", "(EDITOR)", "Leaves the editor.  If you have unsaved text it will be there when you return (and in fact you will not be able to do anything else with this editor until you 'abort' or save the text).", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>unsubscribe</NAME>
          <VALUE>{"Syntax: unsubscribe from &lt;list-name&gt;", "        unsubscribe &lt;name&gt;... from &lt;list-name&gt;", "", "(MAILROOM)", "Remove yourself from the given mailing list.", "The second form removes arbitrary people from a mailing list.", "You can only do this if you own whatever is being removed or you own the list.", "", "Use the `who' command to determine if you are on a given mailing list."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>subscribe</NAME>
          <VALUE>{"Syntax: subscribe to &lt;list-name&gt;", "        subscribe [&lt;name&gt;...] to &lt;list-name&gt;", "", "(MAILROOM)", "Add yourself to the given mailing list.  ", "The second form adds arbitrary people to a mailing list.", "You can only do this if you own the list or if it is listed as [Public] and you own whatever is being added.", "", "The first form of this command is probably obsolete since if &lt;list-name&gt; is public, you can already read it via `@mail on *&lt;list-name&gt;' and it's much better for the MOO if you do so.  `@mail-option +sticky' makes this even easier.", "", "Use the `who' command to determine if you are on a given mailing list."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>reply-to</NAME>
          <VALUE>{"Syntax:  reply-to [&lt;recipients&gt;]", "", "(MAIL ROOM)", "Reports the current contents of the Reply-to: field of your message.", "With arguments, adds (or changes) the Reply-to: field.", "", "When someone @answers a message, the Reply-to: field is checked first when determining to whom the reply should be sent --- see `help @answer'.", "", "To clear the Reply-to: field, do", "", "         reply-to \"\""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>moo</NAME>
          <VALUE>{"*pass*", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>find</NAME>
          <VALUE>{"Syntax:  f*ind  /&lt;str&gt;[/[c][&lt;ins&gt;]]", "         /&lt;str&gt;[/[c][&lt;ins&gt;]]", "", "Searches for the first line after &lt;ins&gt; containing &lt;str&gt;.  &lt;ins&gt; defaults to  the current insertion point (see `help insert' for how to specify other places).  With the first form, any character (not just `/') may be used as a delimiter.", "For the second form, you must use '/'.", "", "The 'c' flag, if given, indicates that case is to be ignored while searching.", "", "[Bug: With the second form, there are problems if the search string contains quotes, backslashes or a run of spaces.  The first whitespace will always be treated as a single space.  Likewise, quotes and backslashes occuring in the first word of the command (i.e., the \"verb\") need to be escaped with `\\'.  Unfortunately it will not be possible to fix this until we get a new command parser.]"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>edit</NAME>
          <VALUE>{"(VERB EDITOR)", "Syntax:  edit &lt;object&gt;:&lt;verb&gt;", "", "Changes what verb you are editing and loads the code for that verb", "into the editor. ", "Equivalent to @edit &lt;object&gt;:&lt;verb&gt;.", "", "(NOTE EDITOR)", "Syntax:  edit &lt;note-object&gt;", "         edit &lt;object&gt;.&lt;property&gt;", "", "Changes to a different note or a different object text property and ", "loads its text into the editor.", "These are equivalent to @notedit &lt;note&gt; or @notedit &lt;object&gt;.&lt;property&gt;", "respectively.", "", "For both the verb-editor and note-editor commands, &lt;object&gt; will match on the room you came from, though if the room you came from was another editor, then all bets are off..."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>compile</NAME>
          <VALUE>{"Syntax:  compile [as &lt;object&gt;:&lt;verb&gt;]", "", "(VERB EDITOR)", "Installs the new program into the system if there are no syntax errors.", "If a new object:verb is specified and actually turns out to exist, that &lt;object&gt;:&lt;verb&gt; becomes the default for subsequent compilations."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>save</NAME>
          <VALUE>{"Syntax:  save [&lt;note-object&gt;]", "         save [&lt;object&gt;.&lt;property&gt;]", "", "(NOTE EDITOR)", "Installs the freshly edited text.  If &lt;note&gt; or &lt;object&gt;.&lt;property&gt; is specified, text is installed on that note or property instead of the original one.  In addition the new note or property becomes the default for future save commands."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>showlists</NAME>
          <VALUE>{"Syntax:  showlists", "", "(MAIL ROOM)", "Print a list of the publically available mailing lists/archives and other non-player entities that can receive mail."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>subject</NAME>
          <VALUE>{"Syntax:  subj*ect [&lt;text&gt;]", "", "(MAIL ROOM)", "Specifies a Subject: line for your message.  If &lt;text&gt; is \"\", the Subject: line is removed."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>to</NAME>
          <VALUE>{"Syntax:  to [&lt;recipients&gt;]", "", "(MAIL ROOM)", "Specifies a new set of recipients (the To: line) for your message.", "Recipient names not beginning with * are matched against the list of players.", "Recipient names beginning with * are interpreted as mailing-lists/archives/other types of non-person addresses and are matched against all such publically available objects (see `help showlists').  If the list you want to use isn't in the database (i.e., isn't located in the database ($mail_agent)) you need to refer to it by object id."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>also-to</NAME>
          <VALUE>{"Syntax:  also-to [&lt;recipients&gt;]", "", "Synonym: cc", "", "(MAIL ROOM)", "Adds additional recipients to the To: line of your message.", "Same rules apply as for the `to' command."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>who</NAME>
          <VALUE>{"Syntax:  who ", "         who &lt;rcpt&gt;...", "", "(MAIL ROOM)", "Invokes $mail_agent's mail-forwarding tracer and determines who (or what) is actually going to receive your message.  The resulting list will not include destinations that will simply forward the message without :receive_message()'ing a copy for themselves.", "", "The second form expands an arbitrary list of recipients, for if e.g., you're curious about the members of particular mailing list."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>print</NAME>
          <VALUE>{"Syntax:  pri*nt", "", "Display your text without line numbers.", "", "(MAIL ROOM)", "Display your message including headers."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>send</NAME>
          <VALUE>{"Syntax:  send", "", "(MAIL ROOM)", "Send the message, then exit the mail room if all of the addresses on the To: line turn out to be valid and usable (you can use the `who' command to check these in advance, though the status of recipients may change without warning).", "If the To: line turns out to contain invalid recipients or recipients that are not usable by you, the message will not be sent and you will remain in the mail room.", "It may be, however, that valid addresses on your To: line will forward to other addresses that are bogus; you'll receive warnings about these, but in this case your message will still be delivered to those addresses that are valid.", "", "Note that there may be particularly long delays when sending to recipients with large forwarding/notification lists or when sending on occasions when the MOO is heavily loaded in general.  In such a case, it is possible to continue editing the message while the send is in progress; any such edits affect only the text in the editor.  In particular, the text of the message currently being sent remains as it was when you first typed the send command.  However, any editing will mark the text as \"changed\" meaning that you will need to explicitly `abort' or `quit' in order to leave the mail room even if the send concludes successfully."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>list</NAME>
          <VALUE>{"Syntax:  lis*t [&lt;range&gt;] [nonum]", "", "Prints some subset of the current verb text.", "The default range is some reasonable collection of lines around the current insertion point:  currently this is 8_-8^, ie., 8 lines above the insertion point to 8 lines below it unless this runs up against the beginning or end of file, in which case we just take the first or last 16 lines, or just 1-$ if there aren't that many.  (See `help ranges' for how to specify line numbers and ranges.)", "", "`nonum' prints without line numbers.", "", "Yes, window heights will be customizable some day."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>next</NAME>
          <VALUE>{"Syntax:  n*ext [n] [\"&lt;text&gt;]", "", "Moves the insertion point down n lines.  If &lt;text&gt; is provided, inserts a new line there just like `say'.", "Equivalent to `insert +n'.  As one might expect, n defaults to 1."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>prev</NAME>
          <VALUE>{"Syntax:  p*rev [n] [\"&lt;text&gt;]", "", "Moves the insertion point up n lines.  If &lt;text&gt; is provided, a new line is inserted as with `say'.", "Equivalent to `insert -n'.  As one might expect, n defaults to 1."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>subst</NAME>
          <VALUE>{"Syntax:  s*ubst/&lt;str1&gt;/&lt;str2&gt;[/[g][c][r][&lt;range&gt;]]", "", "Substitutes &lt;str2&gt; for &lt;str1&gt;, in all of the lines of &lt;range&gt;.", "Any character (not just `/') may be used to delimit the strings. ", "If &lt;str1&gt; is blank, &lt;str2&gt; is inserted at the beginning of the line.  ", "(For inserting a string at the end of a line use emote/:).", "", "Normally, only one substitution is done per line in the specified range, but if the 'g' flag is given, *all* instances of &lt;str1&gt; are replaced.", "The 'c' flag indicates that case is not significant when searching for substitution instances.", "", "The `r' flag means that the command will be grepped and matched using regular expressions. This is how you perform a regexp subst:", "", "The &lt;str1&gt; field will be understood as a regular expression. If you are unfamiliar with regexp protocol, read `help regular-expressions'.", "In cases where successful matches are made, the &lt;str2&gt; string will be run through the substitute() builtin, with the match() info as an argument, before replacing the old string.", "So, in short. If `match(line, &lt;str1&gt;)' returns something, then `substitute(&lt;str2&gt;, match result)' is subbed in its place. The `g' and `c' arguments are still applicable.", "", "&lt;range&gt; defaults to the line *before* the insertion point.", "", "You do *not* need a space between the verb and the delimeter before &lt;str1&gt;.", "[Bug: If you omit the space and the first whitespace in &lt;str1&gt; is a run of more than one space, those spaces get treated as one.  Likewise, quotes and backslashes occuring in the first word of the command (i.e., the \"verb\") need to be escaped with `\\'.  The fix on this will have to wait for a new command parser.]"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>join</NAME>
          <VALUE>{"Syntax:  join        [&lt;range&gt;]", "         joinliteral [&lt;range&gt;]", "", "combines the lines in the specified range.  Normally, spaces are inserted and double space appears after periods and colons, but 'joinliteral' (abbreviates to 'joinl') supresses this and joins the lines as is.  &lt;range&gt; defaults to the two lines surrounding the insertion point."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>fill</NAME>
          <VALUE>{"Syntax:  fill [&lt;range&gt;] [@ c]", "", "combines the specified lines as in join and then splits them so that no line is more than c characters (except in cases of pathological lines with very long words).  c defaults to 70.  &lt;range&gt; defaults to the single line preceding the insertion point."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>move</NAME>
          <VALUE>{"Syntax:  m*ove [&lt;range&gt;] to &lt;ins&gt;", "", "Moves the range of lines to place specified by &lt;ins&gt;.", "If &lt;ins&gt; happens to be the current insertion point, the insertion point is moved to the end of the freshly moved lines.  If the range of lines contains the insertion point, the insertion point is carried over to the range's new location.", "", "See `help insert' for a list of possibilities for &lt;ins&gt;."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>copy</NAME>
          <VALUE>{"Syntax:  c*opy [&lt;range&gt;] to &lt;ins&gt;", "", "Copies the specified range of lines to place given by &lt;ins&gt;.", "If &lt;ins&gt; happens to be the current insertion point, the insertion ", "point moves to the end of the inserted lines.", "", "See `help insert' for a list of possibilities for &lt;ins&gt;."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>what</NAME>
          <VALUE>{"Syntax:  w*hat", "", "Prints information about the editing session."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>abort</NAME>
          <VALUE>{"Syntax:  abort", "", "Abandons this editing session and any changes."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>done</NAME>
          <VALUE>{"*forward*", "quit"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>pause</NAME>
          <VALUE>{"*forward*", "quit"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>ranges</NAME>
          <VALUE>{"Most editor commands act upon a particular range of lines.", "Essentially, one needs to specify a first line and a last line.", "Line numbers may be given in any of the following forms", "  ", "  n      (i.e., the nth line of text)", "  n^     n-th line after/below  the current insertion point", "  n_     n-th line before/above the current insertion point", "  n$     n-th line before the end.", "", "In the latter three, n defaults to 1, so that `^' by itself refers to the line below the current (i.e., the line that gets `^' printed before it), and likewise for `_' while `$' refers to the last line.  Note that the usage depends on whether you are specifying a line or an insertion point (space between lines). `^5' is the space above/before line 5, while `5^' is the fifth line after/below the current insertion point.", "", "Ranges of lines may be specified in any of the", "following ways:", "", "  &lt;line&gt;                  just that line", "  from &lt;line&gt; to &lt;line&gt;   what it says; the following two forms are equivalent:", "  &lt;line&gt;-&lt;line&gt;            ", "  &lt;line&gt; &lt;line&gt;", "", "With the `from l to l' form, either the from or the to can be left off and it will default to whatever is usual for that command (usually a line above or below the insertion point).  Actually I was thinking of punting the `from'/`to' specifications entirely because they're so verbose.  Opinions?"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>cc</NAME>
          <VALUE>{"*forward*", "also-to"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>uncc</NAME>
          <VALUE>{"*forward*", "not-to"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>not-to</NAME>
          <VALUE>{"Syntax:  not-to [&lt;recipients&gt;]", "", "Synonym: uncc", "", "(MAIL ROOM)", "Removes the specified recipients from the To: line of your message."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>index</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>index_cache</NAME>
          <VALUE>{"edit-index"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"Editor Help"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{21862, 919123693}</VALUE>
        </PROPERTY>
      </OBJECT>
      <OBJECT ID="obj60" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
        <NAME>Help Database</NAME>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@uptime</NAME>
          <VALUE>{"Syntax:  @uptime", "", "   The @uptime command displays the amount of time since the last restart of the server.", "   Note to programmers:  The last restart time of the server is stored in $last_restart_time."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>wizard-list</NAME>
          <VALUE>{"*subst*", "", "%;this:wizard_list()", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@wrap</NAME>
          <VALUE>{"*forward*", "@linelength"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>full-index</NAME>
          <VALUE>{"*full_index*"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME> index</NAME>
          <VALUE>{"*index_list*"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>gen-index</NAME>
          <VALUE>{"*index*", "General Help Topics"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>@pagelength</NAME>
          <VALUE>{"Syntax:  @pagelength &lt;number&gt;", "         @pagelength", "", "If the lines you see scroll off the top of your screen too quickly for you to", "read and your client program is such that any lines scrolling off the top are", "gone forever, you can use the @pagelength command to invoke page buffering to", "limit the number of lines sent at a time.  E.g., if your terminal has a 24 line", "screen, you can do @pagelength 24 and output will stop every 24 lines if you", "don't type any other commands.", "", "You will need to use the @more command to continue reading output once it ", "has been stopped.  Make sure you read `help @more' before setting @pagelength.", "", "@pagelength 0 means no page buffering will be done by the MOO.", "", "By default the MOO will assume you have an infinitely wide terminal screen, so", "you may wish to set @linelength as well, and ensure wrapping is on with @wrap", "on.  (See help @linelength and help @wrap.)  As with word wrapping, you are", "best off running a client that can do its own page buffering; the MOO server's", "page buffering is inherently slower and many MUD's do not have page buffering", "at all."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>@more</NAME>
          <VALUE>{"*subst*", "Syntax:  @more", "         @more rest", "         @more flush", "", "If you have @pagelength set (see `help @pagelength') and some combination of events or commands produces sufficiently many lines of output, you will see a message of the form", "", "%[strsub(player.more_msg,\"%%n\",\"37\")]", "", "indicating (in this case) 37 more lines of text waiting to be read.  ", "At this point, you should give one of the @more commands above.  ", "", "@more without arguments prints sufficiently many lines to fill your screen,", "assuming you've set @pagelength correctly, unless there are not that many", "lines left to print.", "", "@more rest will print all of the remaining lines, regardless of your @pagelength setting.  ", "", "@more flush discards all remaining lines"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>programming</NAME>
          <VALUE>{"MOO contains a rich programming language for the creation of interesting rooms, exits, and other objects.", "", "Not every player is allowed to program in MOO, including (at the moment, anyway) you.  If you would like to be, find a wizard and convince them that you've got good ideas that the MOO needs.  Good luck!"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@linelength</NAME>
          <VALUE>{"Syntax:  @wrap &lt;on|off&gt;", "         @wrap", "", "         @linelength &lt;number&gt;", "         @linelength", "", "If the lines you see get cut off at the edge of your screen (you don't have", "word-wrap), you can get the MOO to split lines for you.  The @linelength", "command tells the MOO how many columns you have on your screen--you probably", "want @linelength 79--and \"@wrap on\" tells the MOO you want it to do word-", "wrap.", "", "It's better if you can fix this problem without the MOO's help, though,", "because the MOO's solution will be slower than a local solution, and", "because not all MUDs are willing to do word-wrap.", "", "If you don't want the MOO to split lines for you, there might still be some", "use for the @linelength command.  Certain commands, like @who and @check,", "print truncated lines so they can print in neat columns.  The default for", "these is generally about 79 columns, which looks fine if you have an", "eighty-column screen.  If your screen is a different width, though, you", "can set @linelength and some of these commands will react accordingly."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@gaglist</NAME>
          <VALUE>{"*forward*", "@listgag"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>::</NAME>
          <VALUE>{"*forward*", "emote"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@comment</NAME>
          <VALUE>{"*forward*", "@typo"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME></NAME>
          <VALUE>{"*forward*", "summary", "", "Type 'help &lt;topic&gt;' for information on a particular topic.", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>spoofing</NAME>
          <VALUE>{"*forward*", "security"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>privacy</NAME>
          <VALUE>{"Some things you should be aware of:", "", " -*-*- OMNISCIENT WIZARDS AND SYSADMINS: -*-*-", "Wizards can look at absolutely *anything* in the MOO database.  ", "The arch-wizard and the sysadmin for the MOO-server host have complete access not only to the MOO database itself but to many other possibly-relevant things.", "The above mentioned parties (wizards et al), while they will endeavor to be discreet about anything incidental that turns up, nevertheless reserve the right to look at anything they want, if only for the sake of being able to resolve technical problems.", "", " -*-*- LOGGING: -*-*- ", "Some client programs (the \"client\" is the program you use to connect to the MOO, e.g., telnet, tinytalk, tinyfugue, emacs with mud.el...) are capable of logging everything that happens to the corresponding player.  In fact, with some clients this happens by default.  If a given player's client has logging enabled and said player is either in the room with you or is monitoring an object that is in the room with you, then *everything* you say and emote gets recorded.  Also, if you are in a room owned by someone else, all bets are off.  There is *no way* that the MOO server can know about what client a given player is using; thus, anyone who can hear you is a potential logger.", "", "In and of itself this would not be a problem --- indeed, logs are often useful for reference purposes.  However, there is no guarantee that the log will not end up someplace where you'd rather it didn't, e.g., posted on the rec.games.mud Usenet newsgroup.  While it is considered bad form (i.e., rude) to circulate or post a log without having the permission of at least the major participants in the activities logged, there is not a whole lot we can do on the technical side to prevent it from happening.", "", "Be aware of the problem.  The @sweep command (see `help @sweep') attempts to determine what players can be listening at any given moment.  If anything, it errs on the side of paranoia.  Even so, it doesn't cover *all* possible avenues of eavesdropping, and there's no hope for it covering the situations like the one where someone manages to convince one of the participants in your discussion who kept a log that it really doesn't need to be kept private after all.", "", "If you've got something really sensitive to discuss, you are best off doing it by encrypted email or in person."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@examine</NAME>
          <VALUE>{"Syntax:  @examine &lt;object&gt;", "         @exam &lt;object&gt;", "", "Prints several useful pieces of information about the named object, including the following:", "        + its full name, aliases, and object number", "        + its owner's name and object number", "        + its description", "        + its key expression (if it is locked and if you own it)", "        + its contents and their object numbers", "        + the 'obvious' verbs defined on it", "", "[Note to programmers: the 'obvious' verbs are those that are readable and that can be invoked as commands.  To keep a verb off this list, either make it unreadable (see 'help @chmod') or, if it shouldn't be used as a command, give it 'args' of 'this none this' (see 'help @args').]"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>security</NAME>
          <VALUE>{"There are several commands available to determine the origins of messages and to check that your communications with other players are secure. Help is available on the following topics:", "", "@paranoid -- keeping a record of messages your character hears.", "@check    -- looking at that record to determine responsibility for messages.", "@sweep    -- checking who is listening in on your conversation."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@sweep</NAME>
          <VALUE>{"Syntax: @sweep", "", "Used when you wish to have a private conversation, and are concerned someone may be listening in. @sweep tries to list the avenues by which information may be leaving the room. In a manner analogous to @check, it assumes that you don't want to hear about your own verbs, or those belonging to wizards, who presumably wouldn't stoop to bugging."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@paranoid</NAME>
          <VALUE>{"Syntax:  @paranoid", "         @paranoid off", "         @paranoid immediate", "         @paranoid &lt;number&gt;", "", "In immediate mode, the monitor prepends everything you hear with the name of the character it considers responsible for the message. Otherwise, it keeps records of the last &lt;number&gt; (defaults to 20) lines you have heard. These records can be accessed by the @check command."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@check</NAME>
          <VALUE>{"Syntax:   @check &lt;options&gt;", "", "where &lt;options&gt; is one or more of:", "-- the number of lines to be displayed", "-- a player's name, someone to be \"trusted\" during the assignment of responsibility for the message.", "-- a player's named prefixed by !, someone not to be \"trusted\".", "", "          @check-full &lt;options&gt;", "where &lt;options is either ", "-- the number of lines to be displayed", "-- a search string: only lines containing that string will be displayed.", "", "Used when you are suspicious about the origin of some of the messages your character has just heard.", "", "Output from @check is in columns that contain, in order, the monitor's best guess as to:", "    what object the message came from,", "    what verb on that object that was responsible,", "    whose permissions that verb was running with, and", "    the beginning of the actual message.", "", "Output from @check-full is in columns that contains a description of all the verbs that were responsible for the noise heard, not just the best guess as to who was responsible.", "", "@check operates by examining the list of verbs that were involved in delivering the message, and assigning responsibility to the first owner it sees who is not \"trusted\".  By default, it trusts you and all the wizards.  It uses the records maintained by @paranoid, so you must have used that command before you received the message."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@eject</NAME>
          <VALUE>{"Syntax: @eject[!] &lt;object&gt; [from &lt;place&gt;]", "", "This command is used to remove unwanted objects from places you own.  Players thus removed are unceremoniously dumped in their homes (unless that's this room, in which case they are dumped in the default player starting place).  Other kinds of objects are checked for a .home property and sent there if possible, otherwise they get thrown into #-1.  Unlike @move, @eject does *not* check to see if the object wants to be moved, and with the destination being what it is, there is no question of the destination refusing the move, either.  Generally, you should only resort to @eject if @move doesn't work.", "", "`@eject &lt;object&gt;' removes &lt;object&gt; from the current room, whereas `@eject &lt;object&gt; from &lt;place&gt;' removes the object from the specified location (in most cases, &lt;place&gt; will need to be specified as an object number).  In either case, this command only works if you own the room/entity from which the object is being ejected.", "", "`@eject ... from me' suffices to get rid of some unwanted object in your inventory.", "", "The verbs @eject! and @eject!! are provided for those rare situations in which @eject does not work.  @eject! does not check for .home properties, sending the offending object to #-1 immediately, but with a notification.  @eject!! is just like @eject! but provides no notification to the object.", "", "See 'help room-messages' for a list of messages one can set regarding the @eject command."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@quit</NAME>
          <VALUE>{"Syntax:  @quit", "", "Disconnect from the MOO.  This breaks your network connection and leaves your player sleeping.  Disconnecting in most parts of the MOO automatically returns your player to its designated home (see 'help home')."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>whereis</NAME>
          <VALUE>{"Syntax:  whereis [&lt;player&gt; [&lt;player&gt;...]]", "        @whereis [&lt;player&gt; [&lt;player&gt;...]]", "", "Returns the current location of each of the specified players, or of all players if not arguments given."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@suggest</NAME>
          <VALUE>{"*forward*", "@typo"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@idea</NAME>
          <VALUE>{"*forward*", "@typo"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@bug</NAME>
          <VALUE>{"*forward*", "@typo"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@typo</NAME>
          <VALUE>{"Syntax:  @typo    [&lt;text&gt;]", "         @bug     [&lt;text&gt;]", "         @suggest [&lt;text&gt;]", "         @idea    [&lt;text&gt;]", "         @comment [&lt;text&gt;]", "", "If &lt;text&gt; is given, a one-line message is sent to the owner of the room, presumably about something that you've noticed.  If &lt;text&gt; is not given, we assume you have more to say than can fit comfortably on a single line; the usual mail editor is invoked.  The convention is that @typo is for typographical errors on the room or objects found therein, @bug is for anomalous or nonintuitive behaviour of some sort, @idea/@suggest for any particular brainstorms or criticisms you might happen to have, and @comment for anything else.", "", "If you're sending a bug report to someone because you got an error traceback when you used some object of theirs, please give them enough information to work on the problem.  In particular, please tell them *exactly* what you typed and *all* of the error messages that were printed to you, including the entire traceback, up to the line `(End of traceback.)'.  Without this information, it is nearly impossible for the programmer to discover, let alone fix, the problem.", "", "The usual mail editor is only invoked for this command when in rooms that allow free entry, i.e., rooms that are likely to allow you back after you are done editing your message.  Otherwise these commands will require &lt;text&gt; and only let you do one-line messages.  ", "Most adventuring scenario rooms fall into this latter category."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@notedit</NAME>
          <VALUE>{"Syntax:  @notedit &lt;note-object&gt;", "         @notedit &lt;object&gt;.&lt;property&gt;", "", "Enters the MOO Note Editor to edit the text on the named object", "For the first form, &lt;note-object&gt; must be a descendant of $note.  ", "For the second form, &lt;object&gt;.&lt;property&gt; can be any string-valued or text-valued (i.e., list of strings) property on any object.", "", "See 'help editors' for more detail."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>editors</NAME>
          <VALUE>{"One can always enter an editor by teleporting to it, or you can use one of the commands provided", "", "    @edit     &lt;object&gt;:&lt;verb&gt;    invokes the Verb Editor (edits verb code)", "    @notedit  &lt;note_object&gt;      invokes the Note Editor (edits note text)", "    @notedit  &lt;object&gt;.&lt;prop&gt;    invokes the Note Editor (edits text property)", "    @send     &lt;list of recipients&gt;        invokes the Mailer (edits a mail msg)", "    @answer   [&lt;msg_number&gt;] [&lt;flags&gt;...] invokes the Mailer (edits a reply)", "", "This will transport you to one of several special rooms that have editing commands available.  These editors are admittedly not as good as EMACS, but for those with no other editing capability on their host systems, they are better than nothing.", "", "There is a generic editor that provides basic editing commands that are applicable to all editors.  Documentation for these commands can be obtained by typing `help &lt;topic&gt;' within the editor:", "", "    abort              emote/:            pause              send      (M) ", "    also-to (M)        fill               prev               showlists (M) ", "    compile (V)        insert             print     (M)      subject   (M) ", "    copy               join               quit               subst         ", "    delete             list               ranges             to    (M)     ", "    done               move               save      (N)      what          ", "    edit    (V,N)      next               say/\"              who   (M)     ", "", "In addition, individual editors provide their own additional commands for loading text from places, saving text to places, and various other specialized functions which are denoted in the above list with (M),(N),(V) according as they apply to the mail editor, the note editor, or the verb editor, respectively.", "", "Note that a given editor only allows you one session at a time (ie. one verb, one note, or one mail message).  If you leave an editor without either aborting or compiling/saving/sending the item you're working on, that editor remembers what you are doing next time you enter it, whether you enter it by teleporting or by using the appropriate command.  Note that editors are periodically flushed so anything left there for sufficiently long will eventually go away.", "", "A player may have his own .edit_options property which is a list containing one or more (string) flags from the following list", "", "  quiet_insert", "      suppresses those annoying \"Line n added.\" or \"Appended...\" messages", "      that one gets in response to 'say' or 'emote'.  This is useful if you're", "      entering a long list of lines, perhaps via some macro on your client,", "      and you don't want to see an equally long list of \"Line n added...\"", "      messages.  What you do want, however is some indication that this all", "      got through, which is why the \".\" command is an abbreviation for insert.", "", "  eval_subs", "      Enables the verb editor to process your eval_subs property when", "      compiling your verb.  See `help eval' for more information about", "      the eval_subs property.", "", "There will be more options, some day."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@memory</NAME>
          <VALUE>{"Syntax:  @memory", "", "Prints out all information available on the current memory-usage behavior of the MOO server.  Probably only a wizard, if anyone, cares about this."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>"</NAME>
          <VALUE>{"*forward*", "say"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>:</NAME>
          <VALUE>{"*forward*", "emote"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@lastlog</NAME>
          <VALUE>{"Syntax:  @lastlog", "         @lastlog &lt;player&gt;", "", "The first form prints out a list of all players, roughly sorted by how long it's been since that player last connected to the MOO.  For each player, the precise time of their last connection is printed.", "", "The second form only shows the last-connection time for the named player."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@version</NAME>
          <VALUE>{"Syntax:  @version", "", "Prints out the version number for the currently-executing MOO server."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>miscellaneous</NAME>
          <VALUE>{"Here are a few commands of occasional utility that didn't fit into any of the neat categories for the rest of the help system:", "", "@version -- printing the MOO server version number", "@lastlog -- finding out when some player last connected to the MOO"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>insert</NAME>
          <VALUE>{"*forward*", "put"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>information</NAME>
          <VALUE>{"*forward*", "help"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>?</NAME>
          <VALUE>{"*forward*", "help"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>put</NAME>
          <VALUE>{"Syntax:  put &lt;object&gt; into &lt;container&gt;", "         insert &lt;object&gt; in &lt;container&gt;", "", "Moves the named object into the named container.  Sometimes the owners of the object and/or the container will not allow you to do this."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>remove</NAME>
          <VALUE>{"*forward*", "take"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>burn</NAME>
          <VALUE>{"Syntax:  burn &lt;letter&gt;", "", "Destroy the named letter irretrievably.  Only players who can read the letter can do this."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>letters</NAME>
          <VALUE>{"A letter is a special kind of note (see 'help notes') with the added feature that it can be recycled by anyone who can read it.  This is often useful for notes from one player to another.  You create the letter as a child of the generic letter, $letter (see 'help @create' and 'help write'), encrypt it so that only you and the other player can read it (see 'help encrypt') and then either give it to the player in question or leave it where they will find it.  Once they've read it, they can use the 'burn' command to recycle the letter; see 'help burn' for details."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>decrypt</NAME>
          <VALUE>{"Syntax:  decrypt &lt;note&gt;", "", "Removes any restriction on who may read the named note or letter.  Only the owner of a note may do this."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>encrypt</NAME>
          <VALUE>{"Syntax:  encrypt &lt;note&gt; with &lt;key-expression&gt;", "", "Restricts the set of players who can read the named note or letter to those for whom the given key expression is true.  See 'help keys' for information on the syntax and semantics of key expressions.  Only the owner of a note may do this."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>delete</NAME>
          <VALUE>{"Syntax:  delete &lt;line-number&gt; from &lt;note&gt;", "", "Removes a single line of text from a note.  The first line of text is numbered 1, the second is 2, and so on.  Only the owner of a note may do this."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>erase</NAME>
          <VALUE>{"Syntax:  erase &lt;note&gt;", "", "Deletes all of the text written on a note or letter.  Only the owner of a note may do this."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>write</NAME>
          <VALUE>{"Syntax:  write \"&lt;any text&gt;\" on &lt;note&gt;", "", "Adds a line of text to the named note or letter.  Only the owner of a note may do this."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>read</NAME>
          <VALUE>{"Syntax:  read &lt;note&gt;", "", "Prints the text written on the named object, usually a note or letter.  Some notes are encrypted so that only certain players may read them."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>examine</NAME>
          <VALUE>{"Syntax:  examine &lt;object&gt;", "         exam &lt;object&gt;", "", "Prints several useful pieces of information about the named object, including the following:", "        + its full name, object number, and aliases", "        + its owner's name", "        + its description", "        + its key expression (if it is locked and if you own it)", "        + its contents", "        + the 'obvious' verbs defined on it"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>hand</NAME>
          <VALUE>{"*forward*", "give"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>throw</NAME>
          <VALUE>{"*forward*", "drop"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>take</NAME>
          <VALUE>{"Syntax:  take &lt;object&gt;", "         get &lt;object&gt;", "         take &lt;object&gt; from &lt;container&gt;", "         get &lt;object&gt; from &lt;container&gt;", "         remove &lt;object&gt; from &lt;container&gt;", "", "The first two forms pick up the named object and place it in your inventory.  Sometimes the owner of the object won't allow it to be picked up for some reason.", "", "The remaining forms move the named object from inside the named container (see 'help containers') into your inventory.  As before, sometimes the owner of an object will not allow you to do this."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@messages</NAME>
          <VALUE>{"Syntax:  @messages &lt;object&gt;", "", "List all of the messages that can be set on the named object and their current values.  See 'help messages' for more details."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>pronouns</NAME>
          <VALUE>{"Some kinds of messages are not printed directly to players; they are allowed to contain special characters marking places to include the appropriate pronoun for some player.  For example, a builder might have a doorway that's very short, so that people have to crawl to get through it.  When they do so, the builder wants a little message like this to be printed:", "", "        Balthazar crawls through the little doorway, bruising his knee.", "", "The problem is the use of 'his' in the message; what if the player in question is female?  The correct setting of the 'oleave' message on that doorway is as follows:", "", "        \"crawls through the little doorway, bruising %p knee.\"", "", "The '%p' in the message will be replaced by either 'his', 'her', or 'its', depending upon the gender of the player.  ", "", "As it happens, you can also refer to elements of the command line (e.g., direct and indirect objects) the object issuing the message, and the location where this is all happening.  In addition one can refer to arbitrary string properties on these objects, or get the object numbers themselves.", "", "The complete set of substitutions is as follows:", "", "        %% =&gt; `%'  (just in case you actually want to talk about percentages).", "    Names:", "        %n =&gt; the player", "        %t =&gt; this object (i.e., the object issuing the message,... usually)", "        %d =&gt; the direct object from the command line", "        %i =&gt; the indirect object from the command line", "        %l =&gt; the location of the player", "    Pronouns:", "        %s =&gt; subject pronoun:          either `he',  `she', or `it'", "        %o =&gt; object pronoun:           either `him', `her', or `it'", "        %p =&gt; posessive pronoun (adj):  either `his', `her', or `its'  ", "        %q =&gt; posessive pronoun (noun): either `his', `hers', or `its'", "        %r =&gt; reflexive pronoun:  either `himself', `herself', or `itself'", "    General properties:", "        %(foo) =&gt; player.foo ", "        %[tfoo], %[dfoo], %[ifoo], %[lfoo]", "               =&gt; this.foo, dobj.foo, iobj.foo, and player.location.foo", "    Object numbers:", "        %#  =&gt; player's object number", "        %[#t], %[#d], %[#i], %[#l]", "            =&gt; object numbers for this, direct obj, indirect obj, and location.", "", "In addition there is a set of capitalized substitutions for use at the ", "beginning of sentences.  These are, respectively, ", "", "   %N, %T, %D, %I, %L for object names, ", "   %S, %O, %P, %Q, %R for pronouns, and", "   %(Foo), %[dFoo] (== %[Dfoo] == %[DFoo]),... for general properties", "", "Note: there is a special exception for player .name's which are assumed to", "already be capitalized as desired.", "", "There may be situations where the standard algorithm, i.e., upcasing the first letter, yields something incorrect, in which case a \"capitalization\" for a particular string property can be specified explicitly.  If your object has a \".foo\" property that is like this, you need merely add a \".fooc\" (in general .(propertyname+\"c\")) specifying the correct capitalization.  This will also work for player .name's if you want to specify a capitalization that is different from your usual .name", "", "Example:  ", "Rog makes a hand-grenade with a customizable explode message.", "Suppose someone sets grenade.explode_msg to:", "", "  \"%N(%#) drops %t on %p foot.  %T explodes.  ", "   %L is engulfed in flames.\"", "", "If the current location happens to be #3443 (\"yduJ's Hairdressing Salon\"),", "the resulting substitution may produce, eg.,", "", "  \"Rog(#4292) drops grenade on his foot.  Grenade explodes.  ", "   YduJ's Hairdressing Salon is engulfed in flames.\"", "", "which contains an incorrect capitalization.  ", "yduJ may remedy this by setting #3443.namec=\"yduJ's Hairdressing Salon\".", "", "Note for programmers:  ", " In programs, use $string_utils:pronoun_sub().", " %n actually calls player:title() while %(name) refers to player.name directly."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>messages</NAME>
          <VALUE>{"Most objects have messages that are printed when a player succeeds or fails in manipulating the object in some way.  Of course, the kinds of messages printed are specific to the kinds of manipulations and those, in turn, are specific to the kind of object.  Regardless of the kind of object, though, there is a uniform means for listing the kinds of messages that can be set and then for setting them.", "", "The '@messages' command prints out all of the messages you can set on any object you own.  Type 'help @messages' for details.", "", "To set a particular message on one of your objects use a command with this form:", "        @&lt;message-name&gt; &lt;object&gt; is \"&lt;message&gt;\"", "where '&lt;message-name&gt;' is the name of the message being set, &lt;object&gt; is the name or number of the object on which you want to set that message, and &lt;message&gt; is the actual text.", "", "For example, consider the 'leave' message on an exit; it is printed to a player when they successfully use the exit to leave a room.  To set the 'leave' message on the exit 'north' from the current room, use the command", "        @leave north is \"You wander in a northerly way out of the room.\"", "", "[Note to programmers: This class of commands automatically applies to any property whose name ends in '_msg'.  Thus, in the example above, the command is setting the 'leave_msg' property of the named exit.  You can get such a command to work on new kinds of objects simply by giving the appropriate properties names that end in '_msg'.  Additionally, in many cases the _msg property is accompanied by a _msg verb, which defaultly returns the named property, but which is available to be customized in more complex ways than allowed by simple string substitution.  You should check for the particular property you're considering whether the verb form exists (typically with @list).]", "", "The following help topics describe the uses of the various messages available on standard kinds of objects:", "", "container-messages -- the messages on objects that can contain other objects", "exit-messages -- the messages on exit objects", "thing-messages -- the messages on objects that can be taken and dropped"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>descriptions</NAME>
          <VALUE>{"Most objects have one or more descriptive pieces of text associated with them; these texts are printed under various circumstances depending on the kind of text.  For example, every object has a 'description' text that is printed whenever a player looks at the object.  The following help topics discuss the commands for manipulating these descriptive texts on your objects:", "", "@rename -- setting the name and aliases of your objects", "@describe -- setting what others see when they look at your objects", "messages -- listing and setting the other descriptive texts on an object"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@describe</NAME>
          <VALUE>{"Syntax:  @describe &lt;object&gt; as &lt;description&gt;", "", "Sets the description string of &lt;object&gt; to &lt;description&gt;.  This is the string that is printed out whenever someone uses the 'look' command on &lt;object&gt;.  To describe yourself, use 'me' as the &lt;object&gt;.", "", "Example:", "Munchkin types this:", "  @describe me as \"A very fine fellow, if a bit on the short side.\"", "People who type 'look Munchkin' now see this:", "  A very fine fellow, if a bit on the short side.", "", "Note for programmers:", "The description of an object is kept in its .description property.  ", "For descriptions of more than one paragraph, .description can be a list of strings."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>tinymud</NAME>
          <VALUE>{"This is yduJ's table of tinymud commands and their equivalents in LambdaMOO.  A longer document, with discussions of the different verbs and how they have changed, is available via FTP from ftp.lambda.moo.mud.org as pub/MOO/contrib/docs/TinyMUD-LambdaMOO-equivs.  All the commands mentioned here have help nodes on LambdaMOO.", "", "The following commands are basically the same in MOO and MUD.", "", "    drop(throw), get(take), go, help, home, inventory, look, news, say (\",:)", "", "", "The following commands have no equivalent:", "", "    kill, rob, score, @force", "", "", "The following commands have the same names and do similar things, but are changed in some way (both syntactic and semantic differences, sometimes quite substantial differences):", "", "    @examine, give, page, read, whisper, @create, @dig,", "    @lock, @password, @unlock, @describe", "", "", "The following commands have rough equivalents in LambdaMOO but the name is different:", "", "    TinyMUD name            LambdaMOO name", "    ------------            --------------", "    QUIT                    @quit", "    gripe                   @gripe", "    goto/move               go", "    WHO                     @who", "    @fail                   @take_failed, @nogo, @drop_failed", "    @find                   @audit", "    @link                   @dig, @sethome, @add-exit, @add-entrance", "    @name                   @rename", "    @ofail                  @otake_failed, @onogo, @odrop_failed", "    @open                   @dig", "    @osuccess               @oleave, @oarrive, @otake_succeeded, ", "                            @odrop_succeeded", "    @success                @leave, @arrive, @take_succeeded", "                            @drop_succeeded", "    @teleport               @move", "", "", "Here are some commands for which no equivalent exists, or for which the equivalent is a complicated set of actions.", "", "    @set, @stats, @unlink", "", "", "Documentation on most of the LambdaMOO commands mentioned above can be acquired using 'help &lt;command-name&gt;'.  A notable exception is the commands like @oarrive and @take_failed that set textual messages on objects.  These are described under 'help messages'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@gripe</NAME>
          <VALUE>{"Syntax:  @gripe &lt;anything&gt; ...", "", "Puts you into the MOO mail system to register a complaint (or, conceivably, a compliment) with the wizards.  The rest of the command line (the &lt;anything&gt; ... part) is used as the subject line for the message.  More information on using the MOO mail system is given once you're in it.", "", "You may hear back from the wizards eventually; see 'help @mail' for how to read their reply.", "", "Example:", "Munchkin types:", "  @gripe The little bird", "  \"How come I can't ever see the little bird in the cuckoo clock?", "  \"        -- A frustrated player", "  send", "and, somewhat later, the wizards reply with a note about being sure to look while the clock is chiming."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@listgag</NAME>
          <VALUE>{"Syntax:  @listgag [all]", "         @gaglist [all]", "", "Shows you a list of the players and objects currently on your 'gag list'.  You don't see any messages that result from actions initiated by the players or objects on this list.  In particular, you will not hear them if they try to speak, emote, or whisper to you.  See 'help gagging' for an explanation of gagging in general.  With the optional \"all\" parameter it will also scan the database for players who are gagging you.  This may induce lag, so caution is advised with this option."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@ungag</NAME>
          <VALUE>{"Syntax:  @ungag &lt;player or object&gt;", "         @ungag everyone", "", "Remove the given player or object (or, in the second form, everyone) from your 'gag list'.  You will once again see any messages that result from actions initiated by the ungagged player(s) or objects.  In particular, you will once again be able to hear them if they speak, emote, or whisper to you.  See 'help gagging' for an explanation of gagging in general.", "", "Example:", "Munchkin types:", "  @ungag Grover", "and is once again able to hear Grover's witty remarks.  Sigh..."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@gag</NAME>
          <VALUE>{"Syntax:  @gag &lt;player or object&gt; [&lt;player or object&gt;...]", "", "Add the given players to your 'gag list'.  You will no longer see any messages that result from actions initiated by these players.  In particular, you will not hear them if they try to speak, emote, or whisper to you.  See 'help gagging' for an explanation of gagging in general.", "", "Example:", "Munchkin types:", "  @gag Grover", "and no longer hears anything that Grover says.  What a relief!", "", "If you specify an object, then any text originating from that object will not be printed.  Example:  Noisy Robot prints \"Hi there\" every 15 seconds.   In order to avoid seeing that, Munchkin types:", "  @gag Noisy", "and no longer hears that robot!  (Munchkin must be in the same room as Noisy Robot for this to work, or know its object number.)"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>go</NAME>
          <VALUE>{"Syntax: go &lt;direction&gt; ...", "", "Invokes the named exits in the named order, moving through many rooms in a single command.", "", "Example:", "Munchkin types:", "  go n e e u e e s e", "and moves quite rapidly from the Living Room all the way to the Bovine Illuminati Atrium, all in one command."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@password</NAME>
          <VALUE>{"Syntax: @password &lt;old-password&gt; &lt;new-password&gt;", "", "Changes your player's password (as typed in the 'connect' command when you log in to the MOO) to &lt;new-password&gt;.  For security reasons, you are required to type your current (soon to be old) password as the first argument.", "", "Your password is stored in an encrypted form in the MOO database; in principle, not even the wizards can tell what it is, though they can change it, of course.  It is recommended that your password not be your name or a common word; MOO passwords have been stolen or cracked in the past and characters have been made unhappy by such theft.  Your password is your security; choose a safe one.", "", "If your character does get stolen, a wizard can change it for you and tell you the new password in secret.  You may have to provide your email address for verification.", "", "Only the first 8 characters of a password are significant."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@sethome</NAME>
          <VALUE>{"Syntax: @sethome", "", "Sets your designated home (see `help home') to be the room you're in now.  If the current room wouldn't allow you to teleport in, then the `@sethome' command nicely refuses to set your home there.  This avoids later, perhaps unpleasant, surprises.  Additionally, your home must be a room that will allow you to stay there.  Rooms which you own will do this, as will rooms to which you have been added as a resident.  See the @resident command for help on adding someone as a resident to a room you own."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@who</NAME>
          <VALUE>{"*subst*", "Syntax: @who", "        @who &lt;player&gt; [&lt;player&gt; ... ]", "", "The first form lists all of the currently-connected players, along with the amount of time they've been connected, the amount of time they've been idle, and their present location in the MOO.", "", "The second form, in which a list of player names is given, shows information for just those players.  For any listed players that are not connected, we show the last login time instead of the connect/idle times.", "", "@who refers to the @who_location message (see 'help messages') on each player's location in order to determine what should be printed in the location column.  Pronoun substitutions are done on this string in the usual manner (see 'help pronouns').  The default value is \"%[$room.who_location_msg]\" (i.e., the room name).", "", "If the list of players to display is longer than 100, this command will not show its normal output, since it can be quite expensive to compute.  In such cases, you might want to use the @users command instead; see `help @users' for more information."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>introduction</NAME>
          <VALUE>{"LambdaMOO is a kind of virtual reality, in which players move about from place to place manipulating their environment in what we hope are amusing, entertaining, or enlightening ways.", "", "LambdaMOO is more of a pastime than a game in the usual sense; there is no `score' kept, there are no specific goals to attain in general, and there's no competition involved.  LambdaMOO participants explore the virtual world, talk to the other participants, try out the weird gadgets that others have built, and create new places and things for others to encounter and enjoy.", "", "Most commands have the form of simple English sentences:", "    &lt;verb&gt;", "    &lt;verb&gt;  &lt;direct object&gt;", "    &lt;verb&gt;  &lt;direct object&gt;  &lt;preposition&gt;  &lt;indirect object&gt;", "Don't use English articles (e.g. 'a', 'an', or 'the') in your commands; the MOO won't understand them.  You can refer to yourself as 'me' and the room you're in as 'here'.", "", "The first five kinds of commands you'll want to know are listed below.  Type 'help &lt;topic-name&gt;' for details on any of them:", "", "look -- getting a description of the current room or any other object", "say -- speaking to the other players in the same room as you", "@who -- showing which players are currently connected to the MOO", "movement -- how to move around in the MOO, from room to room", "@quit -- disconnecting from the MOO"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>give</NAME>
          <VALUE>{"Syntax:  give &lt;object&gt; to &lt;player&gt;", "         hand &lt;object&gt; to &lt;player&gt;", "", "Move an object from your contents to that of another player.  This doesn't change the ownership of the object.  Some players may refuse to accept gifts and some objects may refuse to be given."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>news</NAME>
          <VALUE>{"*subst*", "Syntax: news", "        news all", "        news new", "        news contents", "        news archive", "", "Read the latest edition of the %[$network.MOO_name] Newspaper, which carries articles concerning recent changes to the MOO server or to the main public classes, or other articles of interest to the MOO at large.", "", "The default behavior for the `news' command is to act like `news new' but this may be changed by setting the @mail-option news to one of `all' or `new' or `contents'.  `news all' displays all current news articles.  `news new' only displays articles you have not yet read.  `news contents' displays the authors and subjects of all current news.  `news archive' displays back issues of the newspaper which are deemed worth reading by every citizen at any time."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>gagging</NAME>
          <VALUE>{"Occasionally, you may run into a situation in which you'd rather not hear from certain other players.  It might be that they're being annoying, or just that whatever they're doing makes a lot of noise.  Gagging a player will stop you from hearing the results of any task initiated by that player.  You can also gag a specific object, if you want to hear what the owner of that object says, but not the output from their noisy robot.  The commands to use gagging are listed below; detailed help is available on each of them:", "", "@gag -- add one or more players to your gag list", "@ungag -- remove a player from your gag list", "@listgag -- list the players you currently have gagged"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@move</NAME>
          <VALUE>{"Syntax:  @move &lt;thing&gt; to &lt;place&gt;", "", "Move the specified object to the specified location.  This is not guaranteed to work; in particular, the object must agree to be moved and the destination must agree to allow the object in.  This is usually the case, however.  The special case where &lt;thing&gt; is 'me' is useful for teleporting yourself around.", "", "If @move doesn't work and you own the room where the object is located, try using @eject instead."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>inventory</NAME>
          <VALUE>{"Syntax:  inventory", "         i", "", "Prints a list showing every object you're carrying."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@gender</NAME>
          <VALUE>{"Syntax: @gender &lt;gender&gt;", "        @gender", "", "The first form, with an argument, defines your player to have the gender &lt;gender&gt;.  If &lt;gender&gt; is one of the standard genders (e.g., 'male', 'female', 'neuter',...), your various pronouns will also be set appropriately, making exits and certain other objects behave more pleasantly for you.", "", "The second form tells you the current definition of your player's gender, your current pronouns, and the complete list of standard genders.", "", "It should be noted that some of the \"genders\" on the standard gender list need verb conjugation in order to work properly and much of the MOO isn't set up for this (...yet).  For example, you should expect to see `they is' a fair amount if you @gender yourself `plural'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@rename</NAME>
          <VALUE>{"Syntax: @rename &lt;object&gt;        to [name-and-alias],&lt;alias&gt;,...,&lt;alias&gt;", "        @rename &lt;object&gt;        to [name]:&lt;alias&gt;,...,&lt;alias&gt;", "        @rename &lt;object&gt;.&lt;property&gt; to &lt;new-property-name&gt;", "        @rename &lt;object&gt;:&lt;verb-name&gt; to &lt;new-verb-name&gt;", "        @rename# &lt;object&gt;:&lt;verb-number&gt; to &lt;new-verb-name&gt;", "", "The first two forms are used to change the name and aliases of an object. The name is what will be used in most printed descriptions of the object. The aliases are the names by which players can refer to the object in commands. Typically you want to include the name in the aliases, as the MOO parser only checks .aliases when matching, so the first syntax is generally preferred.", "", "If you leave out the \"name\" part of the list, @rename will leave the object's name as it is, and only change the aliases.", "", "Note that for renaming players, more stringent rules apply.  See `help player-names'.  Certain other kinds of objects (e.g., mail recipients) also enforce their own rules w.r.t what they can be named.", "", "Examples:", "Munchkin names his dog:", "  @rename #4237 to \"Rover the Wonder Dog\":Rover,dog", "Now we'll see 'Rover the Wonder Dog' if we're in the same room as him and we can refer to him as either 'Rover' or just 'dog' in our commands, like 'pet dog'.  Note, however, that it will be impossible to use \"Rover the Wonder Dog\" to rever to the dog: if you don't include the name in the aliases, confusion can result.  It might have been better to start off with", "  @rename #4237 to \"Rover the Wonder Dog\",Rover,dog", "", "Since he didn't, Munchkin now changes his dog's aliases:", "  @rename #4237 to ,Rover,dog,Rover the Wonder Dog", "The name remains the same--we still see 'Rover the Wonder Dog'--but now any of 'Rover', 'dog', or 'Rover the Wonder Dog' can be used to refer to him.  This can help reduce confusion.", "", "The third form of the @rename command is also for use by programmers, to change the name of a property they own to &lt;new-property-name&gt;.", "", "The fourth form of the @rename command is for use by programmers, to change the name of a verb they own. If the &lt;new-verb-name&gt; contains spaces, the verb will have multiple names, one for each space-separated word.", "", "The fifth form, @rename#, is for unambiguously referring to a verb on an object in case there is more than one with the same name. The verb number is the 1-based index of the verb as it appears in the verbs() (or @verbs) output list."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>notes</NAME>
          <VALUE>{"Notes are objects that can have text written on them to be read later.  They are useful for leaving messages to people, or for documenting your creations.", "", "The following help topics cover verbs that can be used with notes:", "", "read -- reading the text on the note", "write -- adding text to a note", "erase -- removing all the text from a note", "delete -- deleting one line of text from a note", "", "@notedit -- general editing on the text of a note", "", "encrypt -- restricting who can read a note", "decrypt -- undoing a previous encryption", "", "You can make a note by creating a child of the standard note, $note (see 'help @create').  Note that, like most objects, only the owner of a note can recycle it.  If you'd like to make it possible for a reader of your note to destroy it (this is a common desire for notes to other individual players), then you might want to look at 'help letters'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>look</NAME>
          <VALUE>{"Syntax: look", "        look &lt;object&gt;", "        look &lt;object&gt; in &lt;container&gt;", "", "Show a description of something.", "", "The first form, with no arguments, shows you the name and description of the room you're in, along with a list of the other objects that are there.", "", "The second form lets you look at a specific object.  Most objects have descriptions that may be read this way.  You can look at your own description using 'look me'.  You can set the description for an object or room, including yourself, with the 'describe' command (see 'help describe').", "", "The third form shows you the description of an object that is inside some other object, including objects being carried by another player."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>drop</NAME>
          <VALUE>{"Syntax:  drop &lt;object&gt;", "         throw &lt;object&gt;", "", "Remove an object you are carrying from your inventory and put it in your current room.  Occasionally you may find that the owner of the room won't allow you to do this."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>get</NAME>
          <VALUE>{"*forward*", "take"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>manipulation</NAME>
          <VALUE>{"Objects usually have verbs defined on them that allow players to manipulate and use them in various ways. Standard ones are:", "", "get  -- pick an object up and place it in your inventory", "drop -- remove an object from your inventory and place it in the room", "put  -- take an object from your inventory and place it in a container", "give -- hand an object to some other player", "look -- see what an object looks like", "", "You can see what objects you're carrying with the 'inventory' command; see 'help inventory' for details.", "", "Some specialized objects will have other commands. The programmer of the object will usually provide some way for you to find out what the commands are.  One way that works for most objects is the 'examine' command; see 'help examine' for details.", "", "The following specialized objects have help entries you should consult:", "", "notes -- objects that allow text to be written on them and read later", "letters -- notes that a recipient can burn after reading", "containers -- objects that may contain other objects"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>help</NAME>
          <VALUE>{"Syntax:  help", "         help &lt;topic&gt;", "         help index", "", "Print out entries from the online documentation system.  The commands `?' and `information' (usually abbreviated `info') are synonyms for `help'.", "", "The first form prints out a summary table of contents for the entire help system.  ", "", "The second form prints out the documentation available on the given topic.  Many help system entries contain references to other entries accessible in this way.  The topic name may be abbreviated; if there is no topic exactly matching the name you give, the help system checks for topics for which the name is a prefix, perhaps with the addition or omission of an initial `@', or perhaps with some confusion beween dashes (-) and underscores (_), e.g., ", "      `bui' instead of `building', ", "      `who' instead of `@who', ", "     `@wri' instead of `write',", "  `add_ent' instead of `@add-entrance',", " `unlock-'  instead of `@unlock_for_open'", "", "If the abbreviation you give is ambiguous, you will be presented with a list of the matching complete topic names.", "", "The `help index' commands prints out a list of indices for the various help databases.  Each index gives a list of topics available on that database.  It is sometimes easier to find the topics you're interested in this way, rather than tracing through the chain of cross references."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>movement</NAME>
          <VALUE>{"The descriptions of most rooms outline the directions in which exits exist.  Typical directions include the eight compass points ('north', 'south', 'east', 'west', 'northeast', 'southeast', 'northwest', and 'southwest'), 'up', 'down', and 'out'.", "", "To go in a particular direction, simply type the name of that direction (e.g, 'north', 'up').  The name of the direction can usually be abbreviated to one or two characters (e.g., 'n', 'sw').  You can also type 'go &lt;direction&gt;' to move; this is particularly useful if you know you're going to type several movement commands in a row (see 'help go').", "", "In addition to such vanilla movement, some areas may contain objects allowing teleportation and almost all areas permit the use of the 'home' command to teleport you to your designated home (see 'help home' for more details)."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>home</NAME>
          <VALUE>{"*subst*", "Syntax: home", "", "Instantly teleports you to your designated home room.", "Initially, this room is %[tostr($player_start.name,\" (\",$player_start,\")\")].", "You can change your designated home; see 'help @sethome' for details."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>say</NAME>
          <VALUE>{"Syntax:  say &lt;anything&gt; ...", "         \"&lt;anything&gt; ...", "", "Says &lt;anything&gt; out loud, so that everyone in the same room hears it.  This is so commonly used that there's a special abbreviation for it: any command-line beginning with a double-quote ('\"') is treated as a 'say' command.", "", "Example:", "Munchkin types this:", "  \"This is a great MOO!", "Munchkin sees this:", "  You say, \"This is a great MOO!\"", "Others in the same room see this:", "  Munchkin says, \"This is a great MOO!\""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>whisper</NAME>
          <VALUE>{"whisper \"&lt;text&gt;\" to &lt;player&gt;", "sends the message \"&lt;yourname&gt; whispers, \"&lt;text&gt;\" to you \" to &lt;player&gt;, if they are in the room."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>page</NAME>
          <VALUE>{"*subst*", "Syntax:  page &lt;player&gt; [[with] &lt;text&gt;]", "", "Sends a message to a connected player, telling them your location and, optionally, &lt;text&gt;.", "", "Example:", "Munchkin types:", "        page Frebble with \"Where are you?\"", "Frebble sees:", "        You sense that Munchkin is looking for you in the Kitchen.", "        He pages, \"Where are you?\"", "Munchkin sees:", "        Your message has been received.", "", "Advanced Features:", "Page refers to the following messages on the players involved (see 'help messages'):", "", "@page_origin [%[$player.page_origin_msg]]", "  Determines how the recipient is told of your location.", "", "@page_echo   [%[$player.page_echo_msg]]", "  Determines the response received by anyone who pages you.", "", "@page_absent [%[$player.page_absent_msg]]", "  Determines the response received by anyone who tries to page you when you aren't connected.", "", "All of these undergo the usual pronoun substitutions (see 'help pronouns') except that in both cases the direct object (%d) refers to the recipent of the page and the indirect object (%i) refers to the sender.  You should only change these messages if you want to add to the Virtual Reality feel of the MOO for your character."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>emote</NAME>
          <VALUE>{"Syntax:  emote &lt;anything&gt; ...", "         :&lt;anything&gt; ...", "         ::&lt;anything&gt; ...", "", "Announces &lt;anything&gt; to everyone in the same room, prepending your name.  This is commonly used to express various non-verbal forms of communication.  In fact, it is so commonly used that there's a special abbreviation for it: any command-line beginning with ':' is treated as an 'emote' command.", "", "The alternate form, '::' (less commonly 'emote :'), does not insert the space between the player name and the text.", "", "Examples:", "Munchkin types this:", "  :wishes he were much taller...", "Everyone in the same room sees this:", "  Munchkin wishes he were much taller...", "", "Munchkin types this:", "  ::'s eyes are green.", "Everyone in the same room sees this:", "  Munchkin's eyes are green."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>players</NAME>
          <VALUE>{"There are a number of commands for modifying various characteristics of the object representing you in the MOO, your 'player'.  Help on them is available in the following topics:", "", "@describe -- setting what others see when they look at you", "@gender -- changing your player's gender", "@password -- changing your player's password", "@sethome -- changing your designated home room", "@rename -- changing your name and/or aliases", "@linelength -- adding word-wrap to the lines you see"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>summary</NAME>
          <VALUE>{"Help is available on the following general topics:", "", "introduction -- what's going on here and some basic commands", "index -- index into the help system", "", "players -- setting characteristics of yourself", "movement -- moving yourself between rooms", "communication -- communicating with other players", "manipulation -- moving or using other objects", "miscellaneous -- commands that don't fit anywhere else", "", "building -- extending the MOO", "programming -- writing code in the MOO programming language", "editors -- editing text and code in the MOO", "", "@pagelength -- what to do if lines scroll off your screen too fast", "@linelength -- what to do if lines are truncated", "tinymud -- a list of equivalences between MOO and TinyMUD concepts/commands"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@edit-options</NAME>
          <VALUE>{"Syntax:  @edit-option", "         @edit-option &lt;option&gt;", "", "Synonym:  @editoption", "", "The edit options customize the behavior of the various editors (mail editor, verb editor, etc...) to your particular taste.  The first form of this command displays all of your edit options.  The second form displays just that one option, one of the flags listed below.", "", "The remaining forms of this command are for setting your edit options:", "", "         @edit-option +&lt;flag&gt;", "         @edit-option -&lt;flag&gt;", "         @edit-option !&lt;flag&gt;           (equivalent to -&lt;flag&gt;)", "", "These respectively set and reset the specified flag", "", "-quiet_insert    insert (\") and append (:) echo back the line numbers", "+quiet_insert    insert (\") and append (:) produce no output", "-eval_subs       (VERB EDITOR) ignore .eval_subs when compiling verbs", "+eval_subs       (VERB EDITOR) apply .eval_subs to verbs being compiled", "-local           Use in-MOO text editors.", "+local           Ship text to client for local editing.", "-no_parens       include all parentheses in verb code.", "+no_parens       include only necessary parentheses in verb code.", "", "+parens        is a synonym for -no_parens", "+noisy_insert  is a synonym for -quiet_insert"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@editoptions</NAME>
          <VALUE>{"*forward*", "@edit-options"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@add-feature</NAME>
          <VALUE>{"Usage:  @add-feature  &lt;object&gt;", " @remove-feature &lt;object&gt;", "", "Add or remove a feature from your list.  A feature is an object which provides additional commands you can use.  For more information, see `help features'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@remove-feature</NAME>
          <VALUE>{"*forward*", "@add-feature"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@features</NAME>
          <VALUE>{"Usage:  @features [&lt;name&gt;] [for &lt;player&gt;]", "", "List all of &lt;player&gt;'s features matching &lt;name&gt;, or all of &lt;player&gt;'s features if &lt;name&gt; is not supplied.  &lt;player&gt; defaults to you.  See `help features' for more information."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>features</NAME>
          <VALUE>{"Features are objects that provide you with commands not covered by the ordinary player objects.  The advantage of using features is that you can mix and match the things you like; whereas if you like a command that's defined on a player class, you have to also get all the commands it defines, and all the commands its ancestors define.", "", "You can list your features with the @features command, and add or remove features from your list with the @add-feature and @remove-feature commands."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@rmalias</NAME>
          <VALUE>{"Syntax: @rmalias &lt;alias&gt;[,...,&lt;alias&gt;] from &lt;object&gt;", "        @rmalias &lt;alias&gt;[,...,&lt;alias&gt;] from &lt;object&gt;:&lt;verb-name&gt;", "        @rmalias# &lt;alias&gt;[,...,&lt;alias&gt;] from &lt;object&gt;:&lt;verb-number&gt;", "", "The first form is used to remove aliases from an object.  If the object is a valid player, space and commas will be assumed to be separations between unwanted aliases.  Otherwise, only commas will be assumed to be separations.", "Note that @rmalias will not affect the object's name, only its aliases.", "", "The second form is for use by programmers, to remove aliases from a verb they own.  All spaces and commas are assumed to be separations between unwanted aliases.", "", "The third form, @rmalias#, is for unambiguously referring to a verb on an object that might have more than one verb with the same name. The verb-number is the 1-based index of the verb as it appears in the verb() (or @verbs) output list."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@addalias</NAME>
          <VALUE>{"Syntax: @addalias &lt;alias&gt;[,...,&lt;alias&gt;] to &lt;object&gt;", "        @addalias &lt;alias&gt;[,...,&lt;alias&gt;] to &lt;object&gt;:&lt;verb-name&gt;", "        @addalias# &lt;alias&gt;[,...,&lt;alias&gt;] to &lt;object&gt;:&lt;verb-number&gt;", "", "The first form is used to add aliases to an object's list of aliases.  You can separate multiple aliases with commas.  The aliases will be checked against the object's current aliases and all aliases not already in the object's list of aliases will be added.", "", "Example:", "Muchkin wants to add new aliases to Rover the Wonder Dog:", "  @addalias Dog,Wonder Dog to Rover", "Since Rover the Wonder Dog already has the alias \"Dog\" but does not have the alias \"Wonder Dog\", Munchkin sees:", "  Rover the Wonder Dog(#4237) already has the alias Dog.", "  Alias Wonder Dog added to Rover the Wonder Dog(#4237).", "", "If the object is a player, spaces will also be assumed to be separations between aliases and each alias will be checked against the Player Name Database to make sure no one else is using it. Any already used aliases will be identified.  Certain other classes of objects (e.g., mail-recipients) also enforce rules about what aliases may be given them.", "", "Example:", "Munchkin wants to add his nicknames to his own list of aliases:", "  @addalias Foobar Davey to me", "@Addalias recognizes that Munchkin is trying to add an alias to a valid player and checks the aliases against the Player Name Database.  Unfortunately, DaveTheMan is already using the alias \"Davey\" so Munchkin sees:", "  DaveTheMan(#5432) is already using the alias Davey", "  Alias Foobar added to Munchkin(#1523).", "", "The second form of the @addalias command is for use by programmers, to add aliases to a verb they own.  All commas and spaces are assumed to be separations between aliases.", "", "The third form, @addalias#, is for unambiguously referring to a verb on an object in case there are more than one with the same name. The verb number is the 1-based index of the verb as it appears in the verbs() (or @verbs) output list."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>commands</NAME>
          <VALUE>{"*forward*", "summary", "", "Type 'help &lt;topic&gt;' for information on a particular topic.", ""}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME> name</NAME>
          <VALUE>{"Every object (including players, rooms, exits) has a name and a set of aliases. The object name is commonly used to display an object in various contexts. The object aliases are used to refer to an object when players type commands.", "Help is available on the following commands:", "@rename -- change the names or aliases of an object or yourself.", "@addalias, @rmalias -- add and remove aliases."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@request-character</NAME>
          <VALUE>{"Usage:    @request &lt;player-name&gt; for &lt;email-address&gt;", "", "Example:  @request Munchkin for msneed@baum.edu", "", "This command is available to Guest characters only.", "", "The @request command requests a new character, registered for your email address. Please use your primary address for this, as your password will be sent to the address provided."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>player-names</NAME>
          <VALUE>{"*subst*", "A player name must be a single word, must not contain any spaces, backslashes, or quotes, nor can it begin with the characters #, *, (, or ).  Finally it cannot be one that is in use by any other player nor any of the words on the following list:", "", "%;;lns={};for l in ($string_utils:columnize({@$player_db.stupid_names,@$player_db.reserved},6)) lns={@lns,\"  \"+l}; endfor return lns;", "", "Note that these rules apply as well to your single-word aliases, since those can equally well be used to refer to you in commands that match on player names (@who, whereis, ...).  There are no restrictions on your multi-word aliases, however the commands that expect player names will not recognize them."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@registerme</NAME>
          <VALUE>{"  @registerme as &lt;email-address&gt;", "This verb changes your registered email_address property. It will modify the registration, and then, to validate the email address, it will assign a new password and mail the password to the given email_address.", "If, for some reason, this is a problem for you, contact a wizard or registrar to get your email address changed.", "", "  @registerme", "Prints your registered email address."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@eject!</NAME>
          <VALUE>{"*forward*", "@eject"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>gopher</NAME>
          <VALUE>{"Gopher is an internet service for information retrieval. There are many gopher servers across the internet, providing a wide variety of information of all sorts: network news, weather, and White House press releases, campus class information, and scientific papers.", "", "The programmer interface to Gopher is contained in the object $gopher (`help $gopher')."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>options</NAME>
          <VALUE>{"Options allow you to customize the behavior of various commands.  Options are grouped into separate option packages that each affects a given class of related commands.  Each has its own help topic:", "", "  @mail-options    --- mail commands (@mail, @read, @next, @prev, @send...)", "  @edit-options    --- editing commands (@edit and commands within the editor)", "  @build-options   --- building commands (@create, @dig, @recycle)"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@age</NAME>
          <VALUE>{"Syntax:  @age [player]", "", "Displays the MOO age of the player if the player specified first connected after initial connections were recorded.", "MOO age is computed from the moment the player first connected until the current time."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@edit</NAME>
          <VALUE>{"Syntax:  @edit &lt;object&gt;.&lt;property&gt;", "         @edit &lt;object&gt;:&lt;verb-name&gt; [&lt;dobj&gt; [&lt;prep&gt; [&lt;iobj&gt;]]]", "         @edit &lt;object&gt;", "", "Enters a MOO editor, as appropriate.", "", "Chooses the MOO Note editor for the named property, or the MOO verb editor for the named verb.  If no property or verb name is given, assumes property .text for a note object, or .description for any other object.", "", "See 'help editors' for more detail."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@addfeature</NAME>
          <VALUE>{"*forward*", "@add-feature"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>communication</NAME>
          <VALUE>{"There are several commands available to allow you to communicate with your fellow MOOers.  Help is available on the following communication-related topics:", "", "say      -- talking to the other connected players in the room", "whisper  -- talking privately to someone in the same room", "page     -- yelling to someone anywhere in the MOO", "emote    -- non-verbal communication with others in the same room", "gagging  -- screening out noise generated by certain other players", "news     -- reading the wizards' most recent set of general announcements", "@gripe   -- sending complaints to the wizards", "@typo @bug @idea @suggest", "         -- sending complaints/ideas to the owner of the current room", "whereis  -- locating other players", "@who     -- finding out who is currently logged in", "mail     -- the MOO email system", "security -- the facilities for detecting forged messages and eavesdropping."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>objects</NAME>
          <VALUE>{"Objects are the fundamental building blocks of the MOO.  Every object has a unique number, a name, an owner, a location, and various other properties.  An object can always be referred to by its number, and sometimes by its name or one of its aliases -- if you are in the same location as the object, for example, and also in some other special cases.", "", "For help on creating an object, see 'help @create'.", "", "For help on recycling an object, see 'help @recycle'.", "", "For help on finding information about specific objects, see 'help @display', 'help @show', and 'help $object_utils'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> aliases</NAME>
          <VALUE>{"Every object on the MOO (players included) has a list of aliases, or names by which it can be referred.  This is useful when an object has a nice long descriptive name that you don't want to have to type every time you refer to it.", "", "Typing `exam object' will show you its aliases.  If you are a programmer, you can type `#&lt;object&gt;.aliases', using an object's number, or `#Munchkin.aliases p'.  (The `p' indicates that the prefix is a player's name.)", "", "See also `help #', `help @addalias', and `help @rmalias'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@check-full</NAME>
          <VALUE>{"*forward*", "@check"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@users</NAME>
          <VALUE>{"Syntax:  @users", "", "Prints out the number of users currently connected and a list of their names, in alphabetical order."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>alias</NAME>
          <VALUE>{"*forward*", " name"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@add-alias</NAME>
          <VALUE>{"*forward*", "@addalias"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@mode</NAME>
          <VALUE>{"Syntax:  @mode &lt;brief | verbose&gt;", "", "Sets your current mode to either brief or verbose.  In brief mode, when you enter into a room, you will not see the room's description unless you explicitly type `look'.  Verbose is the default mode."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>wizard-names</NAME>
          <VALUE>{"*forward*", "wizard-list"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>backspace</NAME>
          <VALUE>{"Players sometimes have difficulty getting their backspace key to work.  This is an outside-MOO problem:  Whatever access software you have determines how the line you type is edited before the MOO ever sees it.  If your backspace key won't work here, you will probably need to consult with some documentation or a guru at your end.", "", "The above notwithstanding, here are a few things to try instead of backspace:", "", "   ctrl-h            (another way of typing backspace)", "   del               (delete character)", "   ctrl-backspace    (another way of typing delete character)", "   ctrl-w            (delete word left)", "   ctrl-u            (delete entire line)", "   ctrl-r            (redraw line)"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>spivak</NAME>
          <VALUE>{"The spivak pronouns were developed by mathematician Michael Spivak for use in his books.  They are the most simplistic of the gender neutral pronouns (others being \"neuter\" and \"splat\") and can be easily integrated into writing.  They should be used in a generic setting where the gender of the person referred to is unknown, such as \"the reader.\"  They can also be used to describe a specific individual who has chosen not to identify emself with the traditional masculine (male) or feminine (female) gender.", "", "The spivak pronouns are", "E      - subjective", "Em     - objective", "Eir    - possessive (adjective)", "Eirs   - possessive (noun)", "Emself - reflexive"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>index</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>index_cache</NAME>
          <VALUE>{"gen-index"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>{"The object $help is the main help database.  For every help topic there is a corresponding property on $help, interpreted as follows:", "", "$help.(topic) = string           - one-line help text.", "$help.(topic) = {\"*verb*\",@args} - call this:verb(args,{}) to get text", "$help.(topic) = any other list   - multi-line help text", "", "There is also a \"\" property which applies in the case of `help' typed without any arguments.", "", "See the description of $generic_help for more detail."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{80677, 919123699}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>player_quota</NAME>
          <CODE>
            return $player.ownership_quota;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>prog_quota</NAME>
          <CODE>
            return $prog.ownership_quota;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>get_topic</NAME>
          <CODE>
            text = pass(@args);
            object = $string_utils:match_object(what = args[1], player.location);
            if ((text != E_PROPNF) || (!valid(object)))
            return text;
            elseif (ohelp = `object:help_msg() ! ANY' || `object.help_msg ! ANY')
            return {tostr(object.name, " (", object, "):"), "----", @(typeof(ohelp) == LIST) ? ohelp | {ohelp}};
            else
            about = $object_utils:has_verb(object, "about");
            return {tostr("Sorry, but no help is available on ", object.name, " (", object, ")."), tostr("Try `examine ", what, "'", @about ? {" or `about ", what, "'"} | {}, ".")};
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>find_topics</NAME>
          <CODE>
            topiclist = pass(@args);
            if (topiclist || (!args))
            return topiclist;
            elseif (valid(o = $string_utils:match_object(what = args[1], player.location)))
            return {what};
            else
            return {};
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>full_index</NAME>
          <CODE>
            text = {};
            for db in ($code_utils:help_db_list())
            if ($object_utils:has_callable_verb(db, "index"))
            text = {@text, @db:index({tostr(db.name, " (", db, ")")})};
            endif
            endfor
            return text;
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>index_list</NAME>
          <CODE>
            hdr = "Available Help Indices";
            text = {"", hdr, $string_utils:space(hdr, "-")};
            for db in ($code_utils:help_db_list())
            try
            for p in (db:find_index_topics())
            text = {@text, tostr($string_utils:left(p, 14), " -- ", `db.(p)[2] ! ANY' || db.name, " (", db, ")")};
            endfor
            except (ANY)
            "generally it will be E_TYPE when :find_index_topics returns an ERR. Just skip";
            continue db;
            endtry
            endfor
            if (full = this:find_full_index_topic())
            text = {@text, "", tostr($string_utils:left(full, 14), " -- ", "EVERYTHING")};
            endif
            return text;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>wizard_list</NAME>
          <CODE>
            wizzes = {};
            for w in ($object_utils:leaves($wiz))
            if (w.wizard &amp;&amp; (w.advertised &amp;&amp; is_player(w)))
            wizzes = {@wizzes, w};
            endif
            endfor
            wizzes = {#2, @$list_utils:randomly_permute(setremove(wizzes, #2))};
            numwiz = length(wizzes);
            hlist = {"ArchWizard:", "Wizard" + ((numwiz == 2) ? ":" | "s:"), @$list_utils:make(max(0, numwiz - 2), "")};
            slist = {};
            su = $string_utils;
            for i in [1..numwiz]
            wiz = wizzes[i];
            slist = {@slist, tostr(su:left(hlist[i], 13), su:left(wiz.name, 16), (wpi = `wiz.public_identity.name ! ANY') ? (" (a.k.a. " + wpi) + ")" | "")};
            endfor
            return slist;
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>dump_topic</NAME>
          <CODE>
            if (((text = pass(@args)) != E_PROPNF) || ((!valid(object = $string_utils:match_object(what = args[1], player.location))) || (!$object_utils:has_property(object, "help_msg"))))
            return text;
            else
            return {tostr(";;", $code_utils:corify_object(object), ".help_msg = $command_utils:read_lines()"), @$command_utils:dump_lines((typeof(text = object.help_msg) == LIST) ? text | {text})};
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>find_full_index_topic</NAME>
          <CODE>
            ":find_full_index_topic([search])";
            "Return the *full_index* topic or 0";
            "If search argument is given and true, we don't depend on cached info.";
            {?search = 0} = args;
            "... N.B.  There is no cached info; it turns out that";
            "... full-index is near enough to the beginning of $help's property list";
            "... that there's no point to doing this.  --Rog";
            for p in (`properties(this) ! E_PERM =&gt; {}')
            if (`this.(p)[1] ! ANY' == "*full_index*")
            return p;
            endif
            endfor
            return 0;
          </CODE>
        </VERB>
      </OBJECT>
      <OBJECT ID="obj84" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
        <NAME>Builder Help DB</NAME>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>builder-index</NAME>
          <VALUE>{"*index*", "Builder Help Topics"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@locations</NAME>
          <VALUE>{"Syntax:  @locations object", "", "Prints out the names and object numbers of all containing objects.", "", "Example:", "  @locations ur-Rog", "  ur-Rog(#6349)   ur-Rog's Display Case(#6355)   Editorial Boardroom(#5747)"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@sort-owned</NAME>
          <VALUE>{"Syntax:  @sort-owned  [ object | size ]", "", "Sorts your .owned_objects property so @audit shows up sorted.  See help @audit for more information.", "", "@sort-owned object will sort by object number (the default).  @sort-owned size will sort by size of object as periodically recorded."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@verify-owned</NAME>
          <VALUE>{"Syntax:  @verify-owned", "", "Checks that all the objects in your .owned_objects property are actually owned by you, and effects repairs if needed.  See help @audit for more information."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@add-owned</NAME>
          <VALUE>{"Syntax:  @add-owned &lt;object&gt;", "", "Adds an object to your .owned_objects property in case it managed not to get updated properly upon creation of that object.  Checks to ensure that the objects is really owned by you and otherwise belongs in your .owned_objects property.  See help @audit for more information."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@recreate</NAME>
          <VALUE>{"Usage: @recreate &lt;object&gt; as &lt;parent&gt; named &lt;name spec&gt;", "", "This is a combination of @create and @chparent.  It takes an existing object, completely strips it of any verbs, properties, and values for inherited properties.  This object is then reshaped into a child of the parent specified, as though @create had been called, but retaining the same object number as the original.", "", "You may use \"called\" instead of \"named\" in this command, if you wish.", "", "The &lt;parent&gt; and &lt;name spec&gt; arguments are as in @create."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@parents</NAME>
          <VALUE>{"Syntax:  @parents object", "", "A quick way to find out the ancestry of an object.  Prints out the names and object numbers of all ancestors.", "", "Example:", "  @parents Haakon", "  Haakon(#2)   generic wizard(#218)   generic programmer(#217)   generic ", "  player(#6)   Root Class(#1)"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@contents</NAME>
          <VALUE>{"Syntax:  @contents object", "", "A quick way to find out the contents of an object.  Prints out the names and object numbers of all direct contents.  This can be useful when you need to refer to something by object number because something is wrong with its aliases.", "", "Example:", "  @contents here", "  The Entrance Hall(#19) contains:", "  Strasbourg Clock(#71)   mirror at about head height(#7444)"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>key-representation</NAME>
          <VALUE>{"The representation of key expressions is very simple and makes it easy to construct new keys on the fly.", "", "Objects are represented by their object numbers and all other kinds of key expressions are represented by lists.  These lists have as their first element a string drawn from the following set:", "        \"&amp;&amp;\"     \"||\"     \"!\"     \"?\"", "For the first two of these, the list should be three elements long; the second and third elements are the representations of the key expressions on the left- and right-hand sides of the appropriate operator.  In the third case, \"!\", the list should be two elements long; the second element is again a representation of the operand.  Finally, in the \"?\" case, the list is also two elements long but the second element must be an object number.", "", "As an example, the key expression", "        #45  &amp;&amp;  ?#46  &amp;&amp;  (#47  ||  !#48)", "would be represented as follows:", "        {\"&amp;&amp;\", {\"&amp;&amp;\", #45, {\"?\", #46}}, {\"||\", #47, {\"!\", #48}}}"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>keys</NAME>
          <VALUE>{"LambdaMOO supports a simple but powerful notation for specifying locks on objects, encryption on notes, and other applications.  The idea is to describe a constraint that must be satisfied concerning what some object must be or contain in order to use some other object.", "", "The constraint is given in the form of a logical expression, made up of object numbers connected with the operators 'and', 'or', and 'not' (written '&amp;&amp;', '||', and '!', for compatibility with the MOO programming language).  When writing such expressions, though, one usually does not use object numbers directly, but rather gives their names, as with most MOO commands.", "", "These logical expressions (called 'key expressions') are always evaluated in the context of some particular 'candidate' object, to see if that object meets the constraint.  To do so, we consider the candidate object, along with every object it contains (and the ones those objects contain, and so on), to be 'true' and all other objects to be 'false'.", "", "As an example, suppose the player Munchkin wanted to lock the exit leading to his home so that only he and the holder of his magic wand could use it.  Further, suppose that Munchkin was object #999 and the wand was #1001.  Munchkin would use the '@lock' command to lock the exit with the following key expression:", "        me || magic wand", "and the system would understand this to mean", "        #999 || #1001", "That is, players could only use the exit if they were (or were carrying) either #999 or #1001.", "", "To encrypt a note so that it could only be read by Munchkin or someone carrying his book, his bell, and his candle, Munchkin would use the 'encrypt' command with the key expression", "        me || (bell &amp;&amp; book &amp;&amp; candle)", "", "Finally, to keep players from taking a large gold coffin through a particularly narrow exit, Munchkin would use this key expression:", "        ! coffin", "That is, the expression would be false for any object that was or was carrying the coffin.", "", "There is one other kind of clause that can appear in a key expression:", "        ? &lt;object&gt;", "This is evaluated by testing whether the given object is unlocked for the candidate object; if so, this clause is true, and otherwise, it is false.  This allows you to have several locks all sharing some single other one; when the other one is changed, all of the locks change their behavior simultaneously.", "", "[Note to programmers: The internal representation of key expressions, as stored in .key on every object, for example, is very simple and easy to construct on the fly.  For details, see 'help key-representation'.]"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@unlock</NAME>
          <VALUE>{"Syntax:  @unlock &lt;object&gt;", "", "Clear any lock that might exist on the given object.  See 'help locking' for general information about locking."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@lock</NAME>
          <VALUE>{"Syntax:  @lock &lt;object&gt; with &lt;key expression&gt;", "", "Set a lock on &lt;object&gt; to restrict its use.  See 'help locking' for general information about locking and 'help keys' for the syntax and semantics of key expressions.", "", "N.B.  In the case of rooms, you are actually better off setting room.free_entry to 0 thus preventing teleportation and then @locking the various entrances.  The problem with @locking the room itself is that this can make it impossible to drop objects in the room."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>locking</NAME>
          <VALUE>{"It is frequently useful to restrict the use of some object.  For example, one might want to keep people from using a particular exit unless they're carrying a bell, a book, and a candle.  Alternatively, one might allow anyone to use the exit unless they're carrying that huge golden coffin in the corner.  LambdaMOO supports a general locking mechanism designed to make such restrictions easy to implement, usually without any programming.", "", "Every object supports a notion of being 'locked' with respect to certain other objects.  For example, the exit above might be locked for any object that was carrying the coffin object but unlocked for all other objects.  In general, if some object 'A' is locked for another object, 'B', then 'B' is usually prevented from using 'A'.  Of course, the meaning of 'use' in this context depends upon the kind of object.", "", "The various standard classes of objects use locking as follows:", "  + Rooms and containers refuse to allow any object inside them if they're locked for it.", "  + Exits refuse to transport any object that they're locked for.", "  + Things (including notes and letters) cannot be moved to locations that they're locked for.", "", "There are two sides to locking:", "  + How is it specified whether one object is locked for another one?", "  + What is the effect of an object being locked?", "Note that these two questions are entirely independent: one could invent a brand-new way to specify locking, but the effect of an exit being locked would be unchanged.", "", "[Note to programmers: the interface between these two sides is the verb x:is_unlocked_for(y), which is called by x to determine if it is locked for the object y.  The way in which 'is_unlocked_for' is implemented is entirely independent of the ways in which x uses its results.  Note that you can play on either side of this interface with your own objects, either defining new implementations of 'is_unlocked_for' that match your particular circumstances or having your objects interpret their being locked in new ways.]", "", "There is a default way to specify locks on objects; the following help topics cover the relevant commands:", "", "@lock -- setting a lock on an object", "@unlock -- clearing the lock on an object", "keys -- describes the language used to describe lock keys"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@classes</NAME>
          <VALUE>{"Syntax:  @classes", "         @classes &lt;class-name&gt; ...", "", "The wizards have identified several useful classes of objects in the database.  The @classes command is used to see which classes exist and what their member objects are.", "", "The first form simply lists all of the defined classes along with short descriptions of the membership of each.", "", "The second form prints an indented listing of that subset of the object parent/child hierarchy containing the objects in the class(es) you specify."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@audit</NAME>
          <VALUE>{"Syntax:  @audit [&lt;player&gt;] [for &lt;string&gt;] [from &lt;number&gt;] [to &lt;number&gt;] ", "", "`@audit'        prints a report of all of the objects you own.", "`@audit player' prints the same report for another player.", "", "The `for' string restricts the search to objects whose names begin with that string.", "It is also possible to restrict the range of object numbers to include only those above a given number (`from') or below a given number (`to').", "", "All forms of @audit print a report:", "", "   #14 Gemba                          [The Pool]", "  #144 Popgun                         [Gemba]", " #1479 Cockatoo                      *[The Living Room]", " #1673 Bottom of Swimming Pool       ", " #2147 Cavern                        &lt;-*west", " #2148 tunnel                         Bottom of Swimming -&gt;Cavern", "", "The first column is the object's number, the second its name. The third column shows the object's location: Gemba is in The Pool, and is carrying the Popgun (#144).", "For exits, the third column shows source -&gt;dest.", "For rooms, the third column shows any entrances owned by someone else.", "Object location, exit sources and destinations owned by another player are preceded by a *.", "", "@audit uses a property .owned_objects on the player, for speed.  This property is updated at the time of each object creation and destruction and ownership change.  The verb @auditdb (same args as @audit) actually searches through the entire database for objects.", "", "See also @verify-owned, @sort-owned, and @add-owned.", "", "See also @prospectus, which gives some additional information."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@count</NAME>
          <VALUE>{"Syntax:  @count [player]", "", "Prints out the number of objects you or another person own.  Do not be surprised if this is one larger than you think it should be: remember that your player object is owned by you as well, even though you didn't create it in the usual way.", "", "If byte-based quota is enabled, also prints the total usage by all objects at last measurement."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@quota</NAME>
          <VALUE>{"*forward*", "object-quota"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@create</NAME>
          <VALUE>{"Syntax:  @create &lt;class-name&gt; named \"&lt;names&gt;\"", "         @create &lt;parent-object&gt; named \"&lt;names&gt;\"", "", "The main command for creating objects other than rooms and exits (for them, see 'help @dig'; it's much more convenient).", "", "The first argument specifies the 'parent' of the new object: loosely speaking, the 'kind' of object you're creating.  &lt;class-name&gt; is one of the four standard classes of objects: $note, $letter, $thing, or $container.  As time goes on, more 'standard classes' may be added.  If the parent you have in mind for your new object isn't one of these, you may use the parent's name (if it's in the same room as you) or else its object number (e.g., #4562).", "", "You may use \"called\" instead of \"named\" in this command, if you wish.", "", "An object must be fertile to be used as a parent-class.  See help @chmod for details.", "", "The &lt;names&gt; are given in the same format as in the @rename command:", "        &lt;name-and-alias&gt;,&lt;alias&gt;,...,&lt;alias&gt; [preferred]", "        &lt;name&gt;:&lt;alias&gt;,...,&lt;alias&gt; [not preferred]", "", "See 'help @rename' for a discussion of the difference between a name and an alias."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>creation</NAME>
          <VALUE>{"The primary means for players to extend the MOO is for them to create new objects with interesting behavior.  There are convenient commands for creating and recycling objects and for keeping track of the objects you've created.  Help is available on these commands in the following topics:", "", "@dig -- conveniently building new rooms and exits", "@create -- making other kinds of objects", "@recycle -- destroying objects you no longer want", "@quota -- determining how many more objects you can build", "@count -- determining how many objects you already own", "@audit -- listing all of your objects", "@classes -- listing all of the public classes available for your use", "@move -- moving your objects from place to place", "@parents, @kids -- examine the inheritance hierarchy."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@dig</NAME>
          <VALUE>{"Syntax:  @dig \"&lt;new-room-name&gt;\"", "         @dig &lt;exit-spec&gt; to \"&lt;new-room-name&gt;\"", "         @dig &lt;exit-spec&gt; to &lt;old-room-object-number&gt;", "", "This is the basic building tool.  The first form of the command creates a new room with the given name.  The new room is not connected to anywhere else; it is floating in limbo.  The @dig command tells you its object number, though, so you can use the @move command to get there easily.", "", "The second form of the command not only creates the room, but one or two exits linking your current location to (and possibly from) the new room.  An &lt;exit-spec&gt; has one of the following two forms:", "        &lt;names&gt;", "        &lt;names&gt;|&lt;names&gt;", "where the first form is used when you only want to create one exit, from your current room to the new room, and the second form when you also want an exit back, from the new room to your current room.  In any case, the &lt;names&gt; piece is just a list of names for the exit, separated by commas; these are the names of the commands players can type to use the exit.  It is usually a good idea to include explicitly the standard abbreviations for direction names (e.g., 'n' for 'north', 'se' for 'southeast', etc.).  DO NOT put spaces in the names of exits; they are useless in MOO.", "", "The third form of the command is just like the second form except that no new room is created; you instead specify by object number the other room to/from which the new exits will connect.", "", "NOTE: You must own the room at one end or the other of the exits you create.  If you own both, everything is hunky-dorey.  If you own only one end, then after creating the exits you should write down their object numbers.  You must then get the owner of the other room to use @add-exit and @add-entrance to link your new exits to their room.", "", "Examples:", "    @dig \"The Conservatory\"", "creates a new room named \"The Conservatory\" and prints out its object number.", "    @dig north,n to \"The North Pole\"", "creates a new room and also an exit linking the player's current location to the new room; players would say either 'north' or 'n' to get from here to the new room.  No way to get back from that room is created.", "    @dig west,w|east,e,out to \"The Department of Auto-Musicology\"", "creates a new room and two exits, one taking players from here to the new room (via the commands 'west' or 'w') and one taking them from the new room to here (via 'east', 'e', or 'out').", "    @dig up,u to #7164", "creates an exit leading from the player's current room to #7164, which must be an existing room."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@recycle</NAME>
          <VALUE>{"Syntax:  @recycle &lt;object-name-or-number&gt;", "", "Destroys the indicated object utterly and irretrievably.  Naturally, you may only do this to objects that you own."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>building</NAME>
          <VALUE>{"There are a number of commands available to players for building new parts of the MOO.  Help on them is available under the following topics:", "", "creation -- making, unmaking, and listing your rooms, exits, and other objects", "topology -- making and listing the connections between rooms and exits", "descriptions -- setting the names and descriptive texts for new objects", "locking -- controlling use of and access to your objects"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>@dump</NAME>
          <VALUE>{"Syntax:  @dump &lt;object&gt; [with [id=#&lt;id&gt;] [noprops] [noverbs] [create]]", "", "This spills out all the properties and verbs on an object, calling suspend at appropriate intervals.", "   id=#&lt;id&gt; -- specifies an idnumber to use in place of the object's actual id (for porting to another MOO)", "   noprops  -- don't show properties.", "   noverbs  -- don't show verbs.", "   create   -- indicates that a @create command should be generated and all of the verbs be introduced with @verb rather than @args; the default assumption is that the object already exists and you're just doing this to have a look at it."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@setprop</NAME>
          <VALUE>{"Syntax:  @set &lt;object&gt;.&lt;prop-name&gt; to &lt;value&gt;", "", "Changes the value of the specified object's property to the given value.", "You must have permission to modify the property, either because you own the property or if it is writable."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@set</NAME>
          <VALUE>{"*forward*", "@setprop", "@set is a valid abbreviation for @setprop."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@builder-options</NAME>
          <VALUE>{"*forward*", "@build-options"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@builderoptions</NAME>
          <VALUE>{"*forward*", "@build-options"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@buildoptions</NAME>
          <VALUE>{"*forward*", "@build-options"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@build-options</NAME>
          <VALUE>{"Syntax:  @build-option", "         @build-option &lt;option&gt;", "", "Synonyms:  @buildoption, @builder-option @builderoption", "", "The first form displays all of your builder options", "The second displays just that one option, which may be one of the flags listed below.  The builder options control various annoying details of your building commands (e.g., @create, ...)", "", "The remaining forms of this command are for setting your programmer options:", "", "         @build-option create_flags [is] &lt;flags&gt;", "         @build-option create_flags=&lt;flags&gt;", "         @build-option -create_flags", "                      (equivalent to create_flags=\"\")", "", "where flags is some substring of \"rwf\".  This option determines the read/write/fertility permissions of an object freshly created with @create or @recreate (see `help @create' and `help @recreate' and `help @chmod').  E.g., to make every object you create henceforth readable by default, do", "", "         @build-option create_flags=r", "", "For controlling the behavior of @dig, we have", "", "         @build-option  dig_room=&lt;room&gt;", "         @build-option  dig_room [is] &lt;room&gt;", "         @build-option -dig_room", "                      (equivalent to dig_room=$room)", "         @build-option  dig_exit=&lt;exit&gt;", "         @build-option  dig_exit [is] &lt;exit&gt;", "         @build-option -dig_exit", "                      (equivalent to dig_exit=$exit)", "", "The following respectively set and reset the specified flag option", "", "         @build-option +&lt;option&gt;", "         @build-option -&lt;option&gt;", "         @build-option !&lt;option&gt;           (equivalent to -&lt;option&gt;)", "", "Currently the only builder flag option available is", " -bi_create     @create/@recycle re-use object numbers.", " +bi_create     @create/@recycle call create()/recycle() directly ", "", "we prefer that you not use +bi_create, since this drives up the object numbers."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>room-messages</NAME>
          <VALUE>{"*subst*", "A few different messages can be set on a room object (see 'help messages' for instructions on doing so); they are printed to various audiences when a player or other object is ejected from the room.  (See 'help @eject'.)  The standard pronoun substitutions are made on each message before it is printed; see 'help pronouns' for details.", "", "The default message is given in brackets after each name below:", "", "@ejection  [%[$room.ejection_msg]]", "  Printed to the player doing the ejecting.", "", "@victim_ejection  [%[$room.victim_ejection_msg]]", "  Printed to the object being ejected.", "", "@oejection  [%[$room.oejection_msg]]", "  Printed to others in the room from which the object is being ejected."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@resident</NAME>
          <VALUE>{"Syntax: @resident player", "        @resident !player", "        @resident", "", "Adds or removes a player from the residents list of a room.  The residents list controls who is allowed to use @sethome in that room.  This defaults to just the owner of the room; by manipulating the residents list you may allow additional players to use that room as their home.", "", "@resident player adds that player to the list.  ", "@resident !player removes that player from the list.", "@resident with no arguments simply displays the current list (which may be \"none\", indicating no additional people besides the owner may use that room as their home).", "", "See also help @sethome.", "", "Hints for programmers: The verb $room:accept_for_abode is called by @sethome.  By overriding this verb you can give different criteria to @sethome.  It should return 1 for allowed and 0 for denied."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>exit-messages</NAME>
          <VALUE>{"*subst*", "Several kinds of messages can be set on an exit object (see 'help messages' for instructions on doing so); they are printed to various audiences at certain times whenever an attempt is made to go through the exit.  The ones whose names begin with 'o' are always shown prefixed with the name of the player making the attempt and a single space character.  The standard pronoun substitutions (with respect to the player) are made on each message before it is printed; see 'help pronouns' for details.", "", "The default message is given in brackets after each name below:", "", "@leave  [%[$exit.leave_msg]]", "  Printed to the player just before they successfully use the exit.", "", "@oleave  [%[$exit.oleave_msg||\"has left.\"]]", "  Printed to others in the source room when a player successfully uses the exit.", "", "@arrive  [%[$exit.arrive_msg]]", "  Printed to the player just after they successfully use the exit.", "", "@oarrive  [%[$exit.oarrive_msg||\"has arrived.\"]]", "  Printed to others in the destination room when a player successfully uses the exit.", "", "@nogo  [%[$exit.nogo_msg||\"You can't go that way.\"]]", "  Printed to the player when they fail in using the exit.", "", "@onogo  [%[$exit.onogo_msg]]", "  Printed to others when a player fails in using the exit."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@add-entrance</NAME>
          <VALUE>{"Syntax:  @add-entrance &lt;exit-object-number&gt;", "", "Add the exit with the given object number as a recognized entrance to the current room (that is, one whose use is not considered teleportation).  Usually, @dig does this for you, but it doesn't if you don't own the room in question.  Instead, it tells you the object number of the new exit and you have to find the owner of the room and get them to use the @add-entrance command to link it up."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@add-exit</NAME>
          <VALUE>{"Syntax:  @add-exit &lt;exit-object-number&gt;", "", "Add the exit with the given object number as a conventional exit from the current room (that is, an exit that can be invoked simply by typing its name, like 'east').  Usually, @dig does this for you, but it doesn't if you don't own the room in question.  Instead, it tells you the object number of the new exit and you have to find the owner of the room and get them to use the @add-exit command to link it up."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>topology</NAME>
          <VALUE>{"The topology of the MOO universe is determined by the rooms that exist and the exits that connect them.  Several commands are available for creating and discovering the topology of the MOO.  Help on them is available under the following topics:", "", "@dig -- creating new rooms and exits", "@add-exit -- adding other players' exits from your rooms", "@add-entrance -- adding other player's entrances to your rooms", "@remove-exit -- removing exits from your room", "@remove-entrance -- removing entrances from your room", "@exits -- listing all of the conventional exits from your rooms", "@entrances -- listing all of the conventional entrances to your rooms", "@resident -- listing or changing the residents of your rooms"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@entrances</NAME>
          <VALUE>{"Syntax:  @entrances", "", "Prints a list of all recognized entrances to the current room (but only if you own the room).  A recognized entrance is one whose use is not considered to be teleportation."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@exits</NAME>
          <VALUE>{"Syntax:  @exits", "", "Prints a list of all conventional exits from the current room (but only if you own the room).  A conventional exit is one that can be used simply by typing its name, like 'east'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>containers</NAME>
          <VALUE>{"Containers are objects that allow you to store other objects inside them.  The following help topics cover verbs that can be used with containers:", "", "put -- putting an object into a container", "remove -- taking an object out of a container", "", "Containers may be open or closed, using the verbs 'open container' and 'close container'.  Containers have a separate lock to determine if a player may open them.  See the following help topics:", "", "@lock_for_open -- setting the lock for opening a container", "@unlock_for_open -- clearing the lock", "", "You can make a container by creating a child of the standard container, $container (see 'help @create').", "", "Containers have a large number of messages which get printed when players act upon them.  See 'help container-messages' for more information.", "", "Containers have opacity.  See 'help @opacity' for more information."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>rooms</NAME>
          <VALUE>{"Rooms may be made by builders, using the DIG verb. By default, all rooms are instances of _the_ room, $room, or #3, which you can examine to see how it works. If you require a room to have a more specific behaviour, you can make a subclass of room."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@remove-entrance</NAME>
          <VALUE>{"Syntax:  @remove-entrance &lt;entrance&gt;", "", "Remove the specified entrance from the current entrances list of the room.  Entrance may be either the name or object number of an entrance to this room."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@remove-exit</NAME>
          <VALUE>{"Syntax:  @remove-exit &lt;exit&gt;", "", "Remove the specified exit from the current exits list of the room.  Exit may be either the name or object number of an exit from this room."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@unlock_for_open</NAME>
          <VALUE>{"Syntax:", "  @unlock_for_open &lt;container&gt;", "", "Clears the lock which restricts who may open &lt;container&gt;.  See 'help locking' for general information about locking. ", "", "See 'help containers' for information on containers."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@lock_for_open</NAME>
          <VALUE>{"Syntax:", "  @lock_for_open &lt;container&gt; with &lt;key expression&gt;", "", "Set the lock on &lt;container&gt; which restricts who can open it.  See 'help locking' for general information about locking and 'help keys' for the syntax and semantics of key expressions.", "", "See 'help containers' for information on containers."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@opacity</NAME>
          <VALUE>{"Syntax:", "  @opacity &lt;container&gt; is &lt;integer&gt;", "", "The opacity can take on one of three values:", "   0:  The container is transparent and you can always see into it.", "   1:  The container is opaque, and you cannot see into it when closed", "   2:  The container is a black hole, and you can never see into it whether closed or open.  ", "", "The default @opacity is 1."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>container-messages</NAME>
          <VALUE>{"*subst*", "Several kinds of messages can be set on a container object; they are printed to various audiences at certain times whenever an attempt is made to use the container.  The ones whose names begin with 'o' are always shown prefixed with the name of the player making the attempt and a single space character.  The standard pronoun substitutions (with respect to the player) are made on each message before it is printed; see 'help pronouns' for details.", "", "The default message is given in brackets after each name below:", "", "@empty[%[$container.empty_msg]]", "  Printed in place of the contents list when the container is empty.", "", "@open  [%[$container.open_msg]]", "  Printed to the player who successfully opens the container.", "", "@oopen  [%[$container.oopen_msg]]", "  Printed to others in the same room if the player successfully opens the container.", "", "@open_fail  [%[$container.open_fail_msg]]", "  Printed to the player who cannot open the container.", "", "@oopen_fail  [%[$container.oopen_fail_msg]]", "  Printed to others in the room when a player fails to open a container.", "", "@close  [%[$container.close_msg]]", "  Printed to the player who closes a container.", "", "@oclose  [%[$container.oclose_msg]]", "  Printed to others in the room when a player closes a container.", "", "@put  [%[$container.put_msg]]", "  Printed to a player when an object is successfully placed in a container.", "", "@oput  [%[$container.oput_msg]]", "  Printed to others in the room when a player successfully places an object in a container.", "", "@put_fail  [%[$container.put_fail_msg]]", "  Printed when a player fails to put an object in a container.", "", "@oput_fail  [%[$container.oput_fail_msg]]", "  Printed to others in the room when a player fails to place an object in a container.", "", "@remove  [%[$container.remove_msg]]", "  Printed when a player succeeds in removing an object from a container.", "", "@oremove  [%[$container.oremove_msg]]", "  Printed to others in the room when a player succeeds in removing an object from a container.", "", "@remove_fail  [%[$container.remove_fail_msg]]", "  Printed when a player fails to remove an object from a container.", "", "@oremove_fail  [%[$container.oremove_fail_msg]]", "  Printed to others in the room when a player fails to remove an object from a container."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>thing-messages</NAME>
          <VALUE>{"*subst*", "Several kinds of messages can be set on 'things', objects that have $thing as an ancestor (see 'help messages' for instructions on doing so).  They are printed to various audiences under various circumstances when an attempt is made to 'take' or 'drop' a thing.  The ones whose names begin with 'o' are always shown prefixed with the name of the player making the attempt and a single space character.  The standard pronoun substitutions (with respect to the player) are made on each message before it is printed; see 'help pronouns' for details.", "", "The default message is given in brackets after each name below:", "", "@take_failed  [%[$thing.take_failed_msg]]", "  Printed to a player who fails to take the object.", "", "@otake_failed [%[$thing.otake_failed_msg]]", "  Printed to others in the same room if a player fails to take the object.", "", "@take_succeeded  [%[$thing.take_succeeded_msg]]", "  Printed to a player who succeeds in taking the object.", "", "@otake_succeeded  [%[$thing.otake_succeeded_msg]]", "  Printed to others in the same room if a player succeeds in taking the object.", "", "@drop_failed  [%[$thing.drop_failed_msg]]", "  Printed to a player who fails to drop the object.", "", "@odrop_failed [%[$thing.odrop_failed_msg]]", "  Printed to others in the same room if a player fails to drop the object.", "", "@drop_succeeded  [%[$thing.drop_succeeded_msg]]", "  Printed to a player who succeeds in dropping the object.", "", "@odrop_succeeded  [%[$thing.odrop_succeeded_msg]]", "  Printed to others in the room if a player succeeds in dropping the object."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj2" PERMS="r">
          <NAME>common_quota</NAME>
          <VALUE>{"Syntax:  @quota", "", "Each player has a limit as to how many objects that player may create, called their 'quota'.  Every object they create lowers the quota by one and every object they recycle increases it by one.  If the quota goes to zero, then that player may not create any more objects (unless, of course, they recycle some first).", "", "The @quota command prints out your current quota.", "", "The quota mechanism is intended to solve a long-standing problem in many MUDs: database bloat.  The problem is that a large number of people build a large number of dull objects and areas that are subsequently never used or visited.  The database becomes quite large and difficult to manage without getting substantially more interesting.  With the quota system, we can make it possible for players to experiment and learn while simultaneously keeping random building to acceptable levels."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>object-quota</NAME>
          <VALUE>{"*forward*", "common_quota", "", "To get a larger quota, talk to a wizard.  They will take a look at what you've done with the objects you've built so far and make a determination about whether or not it would be a net gain for the MOO community if you were to build some more things.  If so, they will increase your quota; if not, they will try to explain some ways in which you could build things that were more useful, entertaining, or otherwise interesting to other players.  Wizards may be more impressed by objects which are interactive and employ a fair number of verbs."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@measure</NAME>
          <VALUE>{"Syntax:", "  @measure object &lt;object name&gt;", "  @measure summary [player]", "  @measure new [player]", "  @measure breakdown &lt;object name&gt;", "  @measure recent [number of days] [player]", "", "When the MOO is under byte-quota, objects in the MOO are measured approximately once a week, and the usage tally as reported by @quota is updated.  You may wish to measure an object specially, however, without waiting for the automatic measurement to take place, or if the MOO is under object-quota.  @measure has some subcommands to handle this.", "", "@measure object will measure an individual object right now, update the usage of that object in your usage as reported by @quota, and update the date of that object's measurement.", "", "@measure summary will go through your or another player's objects and produce the summary information that is printed by @quota.  Normally this will be just the same as @quota prints out, but occasionally the addition/subtraction done to keep @quota in sync will get out of date, and @measure summary will be needed.", "", "@measure new will go through all your or another player's objects, measuring exactly those which have never been measured before (that is, are too newly @created to have any measurement data).  This is necessary as any player is only permitted to own 10 unmeasured objects, or object creation will not be permitted.", "", "@measure breakdown will give you full information on where an object's size is coming from.  It will offer to moomail you the result.  Caution: don't forget to delete this message, as it is large and takes up a lot of space!", "", "@measure recent will let you re-measure objects of yours or another player's which have not been measured in the specified number of days (the default is the ordinary cycle of the measurement task)."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>index</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>index_cache</NAME>
          <VALUE>{"builder-index"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"Builder Help DB", "BHD"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>"This help database contains topics about the generic builder and building commands."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{39378, 919123704}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>init_for_core</NAME>
          <CODE>
            if (!caller_perms().wizard)
            return E_PERM;
            else
            this.("@quota") = {"*forward*", "object-quota"};
            endif
          </CODE>
        </VERB>
      </OBJECT>
      <OBJECT ID="obj85" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
        <NAME>Mail Commands Help Db</NAME>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>mail-index</NAME>
          <VALUE>{"*index*", "Mail System Help Topics"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@mailoptions</NAME>
          <VALUE>{"*forward*", "@mail-options"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@mail-options</NAME>
          <VALUE>{"Syntax:  @mail-option", "         @mail-option &lt;option&gt;", "", "Synonym:  @mailoption", "", "The first form displays all of your mail options", "The second displays just that one option, which may be either `@mail', `replyto', or one of the flags listed below.  The mail options control various annoying details of your mail reading and mail editing commands.", "", "The remaining forms of this command are for setting your mail options:", "", "         @mail-option +&lt;flag&gt;", "         @mail-option -&lt;flag&gt;", "         @mail-option !&lt;flag&gt;           (equivalent to -&lt;flag&gt;)", "", "These respectively set and reset the specified flag", "", " -include          @replys start out with a blank message body", " +include          @replys start with original message included", " -all              @replys go to sender only", " +all              @replys go to sender and all original recipients", " -followup         @replys go as directed by `all' flag", " +followup         @replys go to first nonplayer recipient if any", "                    (if there are no non-player recipients, use `all' flag).", " -nosubject        @send forces you to provide a Subject: line", " +nosubject        allow entering the mail editor without giving a subject line", " -expert           novice mail user (various annoying messages will be printed)", " +expert           expert mail user (suppress printing of annoying messages)", " -enter            start each mail editing session in the usual command mode.", " +enter            start each mail editing session with an implicit `enter'", "                    command", " -sticky           each mail command applies by default to one's own collection", " +sticky           each mail command applies by default to the same message ", "                    collection that the previous successful command did", " -netmail          mail to you accumulates in your MOO mailbox", " +netmail          mail to you is actually forwarded to your registered email", "                    address, if you have one.", " -resend_forw      @resend puts player in Resent-By: header", " +resend_forw      @resend puts player in From: header (like @forward)", " -no_auto_forward  @netforward when expiring messages", " +no_auto_forward  do not @netforward messages when expiring mail", " -expert_netfwd    @netforward confirms before emailing messages", " +expert_netfwd    @netforward doesn't confirm before emailing messages", "", "For \"sticky\", `mail command' is one of @mail, @read, @prev, @next, @answer.", "All flags default to the `-' settings.  ", "", "Next, we have", "", "         @mail-option  manymsgs [is] &lt;number&gt;", "         @mail-option  manymsgs=&lt;number&gt;", "         @mail-option -manymsgs", "", "The first two forms specify that if you give a @mail or @read command asking for &lt;number&gt; or more messages, you will first be given a yes-or-no prompt to continue, the idea being that you many not actually have wanted to see that many messages.  The third form turns off this behavior.", "", "         @mail-option  @mail [is] &lt;message-sequence&gt;", "", "The \"@mail\" option determines what message-sequence the @mail command uses by ", "default.  Initially, this is \"last:15\", but other reasonable choices include", "\"new\" and \"1-last\"", "", "         @mail-option  replyto [is] &lt;recipient&gt; [&lt;recipient&gt;...]", "         @mail-option -replyto", "", "The first form specifies that a Reply-To: field is to be placed in all messages constructed by @send or @answer.  Note this can still be changed before sending via the mail room's reply-to command.  ", "The second form resets this option so that no Reply-to: is initially inserted.", "", "        @mail-option rn_order=&lt;order&gt;", "", "controls the order in which folders listed by @rn and @subscribed will appear.  &lt;order&gt; can be one of", "", " read    folders are sorted by last read date. (default)", " send    folders are sorted by last send date.", " fixed   folders are not sorted", "", "To control expiration of messages (see `help @keep-mail') we have", "", "        @mail-option expire [is] &lt;time-interval&gt;", "        @mail-option expire=&lt;time-interval&gt;", "", "&lt;time-interval&gt; can either be a number of seconds or something with units in it, e.g.,", "", "        @mail-option expire 13 days", "        @mail-option expire 1 year 39 days", "", "A negative number or", "", "        @mail-option +expire", "", "disables message expiration entirely", "", "	@mail-option -expire", "", "sets your message expiration time to the current default."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>mail-forwarding</NAME>
          <VALUE>{"There are 3 personal properties that you can use to customize how your mail is composed and forwarded", "", ".mail_forward ", " -- list of objects that will receive any mail that gets sent to you.", "    Objects on this list should either be players or descendants of ", "    $mail_recipient.", "    If this list is nonempty, you will not receive any mail yourself unless", "    you are on it.  E.g., if Rog is #4292 and ur-Rog is #6349", "", "  #6349.mail_forward={}            -- usual case; ur-Rog gets his own mail.", "  #6349.mail_forward={#4292}       -- Rog gets ur-Rog's mail instead.", "  #6349.mail_forward={#6349,#4292} -- ur-Rog gets mail and Rog gets a copy.", "  #6349.mail_forward={#-1}         -- ur-Rog's mail disappears without a trace.", "", ".mail_notify", " -- list of objects to be notified whenever mail is sent to you.", "    This list may include anything that has a :notify_mail() verb.", "    Notification will take place regardless of whether or how your mail", "    is forwarded.  ", "", "Thus, in the previous example", "", "  #4292.mail_notify={#6349} --- means that ur-Rog will be told", "                                whenever Rog is sent new mail.", "", ".mail_options", " -- this controls lots of miscellaneous things.  Use the @mail-option command", "    to view and set these options (see `help @mail-option')", "", "See `help mail-resolve' for more detail on how mail forwarding and mail notification work.  See `help MR-subscribing' for information on how to change .mail_forward and .mail_notify on $mail_recipient children, where they are !c properties."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@forward</NAME>
          <VALUE>{"Syntax:  @forward &lt;msg&gt; [on *&lt;collection&gt;] to &lt;recipient&gt; [&lt;recipient&gt;...]", "Syntax:  @resend  &lt;msg&gt; [on *&lt;collection&gt;] to &lt;recipient&gt; [&lt;recipient&gt;...]", "", "Both of these commands take the indicated message in your (or some other) message collection, and sends it on to the indicated recipients in some form.", "", "@forward sends an entirely new message whose body is the original message (both headers and body).", "@resend sends the original message, but with a header containing the lines", "", "  From:  original-sender", "  To:    original-recipients...", "  Resent-By: you", "  Resent-To: new-recipients...", "", "If you prefer to have yourself in the From: line of messages you @resend, set the mail option `resend_forw (see `help @mail-options').  In this case, the message will instead have a header containing the lines", "", "  From:  you", "  To:    new-recipients...", "  Original-From:  original-sender"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@subscribe</NAME>
          <VALUE>{"Syntax:  @subscribe *&lt;collection&gt; [with|without notification] [before|after *&lt;collection&gt;]", "         @subscribe", "         @subscribe-quick", "", "The second and third form of the command gives a list of all mail collections that are readable by you. The third form omits the mail collection description.", "", "The first form of this command sets up a current message and a last-read-time for the given mail collection so that when you next log in or issue the @rn command, you will be informed about new mail that has appeared there.  Note that this happens automatically whenever you @read messages on a given collection, so if this much is all you care about, you don't need to use this command; just do, e.g.,", "         @read last on *&lt;collection&gt;", "", "Specifying \"with notification\" causes you to be added to the immediate-notification list (.mail_notify) for that collection, i.e., whenever new mail arrives there, you will be notified immediately.  Specifying \"without notification\" causes you to be removed from the collection's .mail_notify.", "", "Specifying \"before *&lt;other-collection&gt;\" causes &lt;collection&gt; to be placed immediately before *&lt;collection&gt; in your @rn listing (which see) and likewise for the \"after\" clause.  By default, new collections are placed at the end of your list.  The before/after specification is only useful if you have @mail-option rn_order=fixed set (see `help @mail-options').", "", "@subscribing to a collection for which you already have a current-message/last-read-time has no effect other from possibly changing that collection's .mail_notify and/or reordering your collections for @rn.", "", "You can only @subscribe to collections that are readable by you.", "", "Note that this is entirely different from the Mail Room `subscribe' command", "which actually adds you to the .mail_forward list for a given collection/", "mailing-list, so that mail sent to the list actually shows up in your own", "mail collection.", "We're probably going to phase out the Mail Room `subscribe' command..."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@rn</NAME>
          <VALUE>{"Syntax:  @rn", "", "For each collection of mail messages that you read other from your own, a last-read-time is kept.  This command tells you which collections (out of all those you have ever read) have recently had messages added to them, i.e., more recently than when you last did a @read, @prev, @next, or @skip on that collection.", "", "Etymologists' note:  If you thought @rn had anything to do with the popular UNIX newsreading program `rn', it's just your imagination."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@unsubscribe</NAME>
          <VALUE>{"*forward*", "@skip"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@skip</NAME>
          <VALUE>{"Syntax:  @skip [&lt;collection&gt;...]", "         @unsubscribe [&lt;collection&gt;...]", "", "For each collection of mail messages that you read other from your own, a current message and a last-read-time is kept.  Normally, if you neglect to actually @read any messages on a collection other from your own, @rn (or :check_mail_lists) will continue to remind you that they are there.", "", "The @skip command indicates that you're not interested in reading the rest of the messages that currently exist in that given collection.  ", "", "The @unsubscribe command flushes the current-message/last-read-time information completely, indicating that you are not only uninterested in the rest of the messages on that collection, but also likewise uninterested in anything else that may appear on that collection later on.  @unsubscribe also removes you from the collection's .mail_notify list."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>zombie-messages</NAME>
          <VALUE>{"*forward*", "@unrmmail"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>message-sequences</NAME>
          <VALUE>{"Certain mail commands, including @mail, @read, and @rmmail, allow a &lt;message-sequence&gt; argument that indicates to which messages in one's collection the command is to apply.  Any combination of the following may appear as a &lt;message-sequence&gt; argument to any of the various mail commands (@mail, @read, @answer, @rmm).", "", "  17        message number 17 if there is one (and likewise for other integers)", "  17..23    all messages numbered between 17 and 23 (inclusive), if any.", "  cur       the current message", "  prev      the message before", "  next      the message after", "  prev17    the 17 messages prior to the current message", "  next17    the 17 messages after the current message", "  first     the first message if any", "  last      the final message if any (`$' is a synonym for `last')", "  new       unread messages if any", "", "You may use as many of these at once as sanity permits, e.g.,", "", "  @mail cur 1..5 last", "", "which will display the header for your current message, your messages in the range 1..5, and your last message.  Though some of these ranges may overlap, the header for any given message is only shown once in any event.", "", "In addition, there are other message-sequence arguments that act as filters on whatever precedes them. ", "", " before:&lt;date&gt;               messages strictly before the given date", " after:&lt;date&gt;                messages strictly after the given date", " since:&lt;date&gt;                messages on or after the given date", " until:&lt;date&gt;                messages on or before the given date", " from:&lt;player&gt;[|&lt;player...]  messages from the given player(s)", " to:&lt;recip&gt;[|&lt;recip&gt;...]     messages to the given recipient(s)", " %from:&lt;string&gt;              messages with &lt;string&gt; in the From: line", " %to:&lt;string&gt;                messages with &lt;string&gt; in the To: line", " subject:&lt;string&gt;            messages with &lt;string&gt; in the subject", " body:&lt;string&gt;               messages with &lt;string&gt; in the body (SLOW!!!)", " first:&lt;number&gt;              the first &lt;number&gt; messages", " last:&lt;number&gt;               the last &lt;number&gt; messages", " kept:                       messages marked as kept (see `help @keep-mail')", " unkept:                     messages not marked as kept", "", "&lt;date&gt;  is either a weekday, \"today\", \"yesterday\", or", "        a dd-Month, dd-Month-yy or dd-Month-yyyy date", "&lt;recip&gt; is either &lt;player&gt; or *&lt;$mail_recipient kid&gt;", "", "Examples:", "", "  @read from:G7|Gemba              read all messages from G7 or Gemba", "  @rmm to:yduJ|*Core               remove messages that are to yduJ or to *Core", "  @mail since:1-Jan before:1-Feb   show messages dated in January", "  @mail since:Tues                 show messages dated on or after Tuesday", "  @rmm subject:manners             remove msgs with `manners' in the subject:", "  @mail subject:\"stupid idiots\"    (search string contains a space =&gt; need \"'s)", "  @rmm to:yduJ to:*Core            remove messages that are to yduJ and *Core", "  @mail from:Haakon last:5         show the last 5 messages from Haakon", "  @mail %from:guest                show mail from players with \"guest\" in", "                                   their names", "  @mail last:10 body:fribble       show those of the last 10 messages having", "                                   `fribble' in the body (one should always try", "                                   to narrow body searches in this way)."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@unrmmail</NAME>
          <VALUE>{"Syntax:  @unrmmail [list|expunge] [on *&lt;collection&gt;]", "", "When you do @rmmail on a particular message collection, the messages removed don't go away immediately, but are rather saved elsewhere.  These \"zombie\" messages can be brought back or examined using the @UNrmmail command.", "", "Without `list' or `expunge', @unrmm restores the zombie messages, thus undoing the effect of the most recent @rmmail command.  Only the most recent @rmmail can be undone in this way; messages deleted by any previous @rmmail commands on this same collection are lost and gone forever.", "", "The `list' option merely lists the headers of the zombie messages without actually restoring them.", "", "The `expunge' option banishes the zombie messages forever.", "", "Note that the message numbers used by zombie messages are held in reserve against the possibility that you might @unrmm them some day; with such messages around, new messages received will be given higher numbers than you might have expected.  @renumber does an implicit @unrmm expunge.", "", "`@unrmmail' and `@unrmmail expunge' on collections other than your own are only allowed when you have write access.  Likewise, `@unrmmail list' on other collections is only possible when they are readable by you."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@reply</NAME>
          <VALUE>{"*forward*", "@answer"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@renumber</NAME>
          <VALUE>{"Syntax:  @renumber [&lt;collection&gt;]", "", "Renumbers the messages in your collection to go from 1 to however many you have at the moment.  The optional argument allows you to renumber the messages stored in some other collection (@renumber, like @rmmail, requires write access).", "", "Note that if you have zombie messages from a previous @rmmail command (see `help zombie-messages'), these will be expunged."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@prev</NAME>
          <VALUE>{"Syntax:  @prev [&lt;number&gt;] [on &lt;collection&gt;]", "", "Print the 'previous' message in a given email collection (defaults to your own).  The mail system's notion of your 'current message' for that collection is decremented.  Thus, e.g., one can review all of one's previous messages one-by-one simply by typing '@prev' repeatedly.  If &lt;number&gt; is supplied, print (and decrement current message by) that many messages."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@next</NAME>
          <VALUE>{"Syntax:  @next [&lt;number&gt;] [on &lt;collection&gt;]", "", "Print the `next' message in a given email collection (defaults to your own).  The mail system's notion of your 'current message' for that collection is incremented.  Thus, e.g., one can read all of one's new messages one-by-one simply by typing '@next' repeatedly.  If &lt;number&gt; is supplied, prints and advances that many messages."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@answer</NAME>
          <VALUE>{"Syntax:  @answer [&lt;message-number&gt;] [sender] [all] [include] [noinclude]", "", "Synonym: @reply", "", "Prepares for you to compose a MOO email message to the players who either received or composed the indicated message from your collection.  The usual editor is invoked (see `help editors' for details).  The subject line for the new message will be initialized from that of the indicated message.  If you leave off the message number, the reply will be to your current message, if that exists.  In fact you may give a general message-sequence (see `help message-sequences') argument here, provided that it indicates only a single message (e.g., `@answer last:1')", "", "If there is a Reply-to: field in the message you are @answer'ing, its contents will be used to initialize the To: line of your reply.  Otherwise, a To: line is determined depending on whether you specified `sender', `all', or `followup' in the command line (or your .mail_options).", "  `sender'   replies to sender only", "  `all'      replies to sender and all original recipients", "  `followup' replies to first original recipient that is a non-player", "             (no effect if there are no non-player recipients).", "", "`include' includes the text of the original message in your reply, `noinclude' does not.  ", "", "`sender', `all', `followup', `include', and `noinclude' can all be abbreviated (e.g., `@answer i').", "", "Defaults are `sender' and `noinclude', but you can change this by setting your .mail-options (see `help mail-options').  "}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@rmmail</NAME>
          <VALUE>{"Syntax:  @rmmail [&lt;message-sequence&gt;] [from *&lt;recipient&gt;]", "", "Deletes the indicated messages from your MOO email collection.", "By default, your current message is deleted.", "See `help message-sequence' for the full list of possible arguments.", "You get the message numbers for use here by typing the '@mail' command.", "", "There is no confirmation for this action, so be careful.  While it is true that @unrmmail will be able to bring back the messages deleted by the last @rmm, any messages deleted before then are really gone, i.e., irrecoverable.  See `help @unrmmail' for more information.", "", "This command may be used on other mail recipients (children of $mail_recipient), but only ones to which you have write access (you either have to own it or be on good terms with whoever does...)."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@read</NAME>
          <VALUE>{"Syntax:  @read &lt;message-number&gt;", "         @read", "         @peek ...", "", "Prints the contents of the indiciated messages from your MOO email collection.  You get the message numbers for use here by typing the '@mail' command, which prints a table of contents for your entire MOO email collection.  If no arguments are given to @read, then the 'current message' in your collection is printed.  In any case, the 'current message' after @read finishes is the last one printed.", "", "The most general form of the @read command is", "", "         @read &lt;message-sequence&gt; [on *&lt;collection&gt;]  ", "", "where &lt;message-sequence&gt; is as described in `help message-sequences'.", "As with the @mail command you may @read messages on any publically readable collection (child of $mail_recipient).", "", "The @peek command is a variant of @read that works no differently except that it refrains from setting your `current message'.  This is useful, for example, if you want to see some particular message on a collection without losing track of where you are in it."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@send</NAME>
          <VALUE>{"Syntax:  @send &lt;recipient&gt; [&lt;recipient&gt; ...]  [subj[ect]=\"&lt;subject&gt;\"]", "", "Prepares for you to compose a MOO email message to the recipients named on the command line.  A recipient can be specified by giving a player name or object-id, or a '*' followed by the name or object-id of some non-player mail recipient (e.g., a mailing list or a mail folder) -- a list of such non-player recipients is available from within the mailroom with the 'showlists' command.", "", "The usual editor is invoked.   ", "You will be prompted for a subject line if you did not specify one in the @send command (see `help mail_options' for how to avoid this).", "Use `say' (\") to insert lines in the body of your message.  ", "See `help editors' for details.", "", "Giving this command without arguments resumes editing the previous unsent draft message if one exists."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>mail</NAME>
          <VALUE>{"The MOO email system allows you to send and receive messages to and from other players.  It provides commands to view and manage your own collection of saved messages and, in addition, to browse through other collections that may be available (e.g.,archives of public mailing lists).  Help is available on the following commands:", "", "@mail     -- seeing a table of contents for a collection of email messages", "@read     -- reading individual messages ", "@next     -- reading the 'next'     message", "@prev     -- reading the 'previous' message", "", "@send     -- composing and sending a message to other players", "@answer   -- replying to one of the messages in a collection", "@forward  -- resending one of the messages in a collection somewhere else", "", "@rmmail   -- discarding some subset of a collection", "@unrmmail -- undoing the most recent @rmm on a collection", "@renumber -- renumbering the messages in a collection", "@keep-mail - marking messages in a collection as exempt from expiration", "", "@mail-option -- describes and sets various customization flags", "", "help mail-forwarding", " -- describes mail forwarding", "help message-sequences", " -- describes message-sequences arguments to @mail, @read, @rmm, and @answer.", "", "For viewing collections other from your own, the following commands are useful:", "", "@rn          -- list those collections that have new messages on them", "@subscribe   -- indicate that you want @rn to report on a given collection", "                  and add yourself to its .mail_notify list", "@skip        -- ignore any remaining new messages in a given collection", "@unsubscribe -- ignore a given collection entirely from now on", "                  and remove yourself from its .mail_notify list", "@unsubscribed-- show the mailing lists that you aren't subscribed to.", "@subscribed  -- like @rn, but shows all lists that you are subscribed to", "                even if they have no new activity"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>@mail</NAME>
          <VALUE>{"Syntax:  @mail", "         @mail new            (to see recent messages)", "         @mail 1-$            (to see *all* messages)", "", "Shows a table of contents for your MOO email message collection.  You are notified when you connect to the MOO if there are any such messages.  A little arrow indicates the mail system's notion of your 'current message'.  ", "The first form lists all of your messages or the last 15 if you have more than that many; the second form lists only those messages after your `current message'.  The third form shows your entire collection.", "", "If you have a large number of mail messages, you can give arguments so that @mail only lists the messages you're interested in.  You can also list messages residing on mail recipients which are public or for which you have read access.", "The general format is", "", "         @mail &lt;message-sequence&gt; [on *&lt;recipient&gt;]", "", "&lt;recipient&gt; must name some child of $mail_recipient (e.g., a mailing list);", "&lt;message-sequence&gt; can be a sequence of message numbers; you can also scan the recipient for articles that fit a given description, as specified in `help message-sequences'.", "", "Note that if you view mail on some other recipient and have \"sticky\" in your .mail_options (see `help mail-options'), all further mail commands (e.g., @read, @next, @rmm,...) will apply to that recipient.  In this case use `@mail on me' to go back to looking at your own mail."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@peek</NAME>
          <VALUE>{"*forward*", "@read"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@subscribed</NAME>
          <VALUE>{"Syntax: @subscribed", "", "Like @rn, but shows you ALL mailing lists to which you are subscribed, even those which have no new messages."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@netforward</NAME>
          <VALUE>{"Syntax:  @netforward &lt;message-number&gt;", "         @netforward ", "         @netforward &lt;message-sequence&gt; on *collection", "", "Forwards the contents of the indiciated messages from your MOO email collection to your registered email address.  You get the message numbers for use here by typing the '@mail' command, which prints a table of contents for your entire MOO email collection.  If no arguments are given to @netforward, then the 'current message' in your collection is sent.  In any case, the 'current message' after @netforward finishes is not affected.", "", "The most general form of the @netforward command is", "", "         @netforward &lt;message-sequence&gt; [on *&lt;collection&gt;]", "", "where &lt;message-sequence&gt; is as described in `help message-sequences'.", "As with the @mail command you may @netforward messages on any publically readable collection (child of $mail_recipient).", "", "Before messages are sent, you are asked to confirm the email unless you have set your `expert_netfwd' mail option on.  See `help @mail-options' for details.", "", "If you do not have a valid registered email address, you will not be able to use this command and must first @registerme or get a wizard to register your address. `help @registerme' for details."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@keep-mail</NAME>
          <VALUE>{"Syntax:  @keep-mail [&lt;message-sequence&gt;]", "         @keep-mail none", "", "Synonym: @keepmail", "", "As a space-saving measure, there is a task that runs periodically and from all player collections removes those messages that are", "  (1) marked as read (i.e., dated before the last-read-date), ", "  (2) older than a certain expire time, and", "  (3) not specifically marked as \"kept\".", "", "\"kept\" messages will show up in your @mail listing with an `=' to the right of the message number.", "", "The first form of the @keep-mail command marks the indicated messages as kept.  The message-sequence argument is as with other mail commands (see `help message-sequences').  @keep-mail without any arguments marks your current message as kept.", "", "The second form of the command is used to remove all such marks from your mail collection.", "", "    @mail kept:", "", "will produce a list of all messages marked as kept (see `help message-sequences').", "", "You can use @mail-option expire (see `help @mail-option') to change your expire time.", "", "You can use the @netforward command (see `help @netforward') to send mail to your email address for local archival.", "", "[...At the time of this writing, player mail is taking up a large fraction of LambdaMOO's database.  It would be appreciated if you not @keep any more mail than you have to...]"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@keepmail</NAME>
          <VALUE>{"*forward*", "@keep-mail"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@resend</NAME>
          <VALUE>{"*forward*", "@forward"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@qsend</NAME>
          <VALUE>{"*forward*", "@quicksend"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@qreply</NAME>
          <VALUE>{"*forward*", "@quickreply"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@quickreply</NAME>
          <VALUE>{"Syntax:   @quickreply  &lt;msg&gt; [on *&lt;recipient&gt;] [&lt;flags&gt;...]", "          @quickreply  &lt;msg&gt; [&lt;flags&gt;...] [on *&lt;recipient&gt;] ", "", "Synonym:  @qreply", "", "The @quickreply command allows you to do a short reply to a mail message without heading for the mail room.  As with @reply, the subject line on the reply message is taken from the original.  &lt;flags&gt; are as with @reply, except that `include' is not recognized --- if you're going to include the original message, you *have* to trim it down, and that requires the editor."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@quicksend</NAME>
          <VALUE>{"Syntax:   @quicksend &lt;player&gt; [subj=\"&lt;text&gt;\"] &lt;one-line-message&gt;...", "          @quicksend &lt;player&gt; [subj=\"&lt;text&gt;\"]", "", "Synonym:  @qsend", "", "The @quicksend command allows you to send a short mail message without heading for the mail room.  With the second form of the command you will be prompted for the body of the message (and a subject line unless your `nosubject' mailoption is set (see `help @mail-option') or you already gave a subject line)."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@nn</NAME>
          <VALUE>{"Alternative mail reading commands.", "", "Syntax:  @nn", "", "This command finds a folder containing an unread message, displays the first such, and updates your last-read-time for that folder.  Your personal mail and all @subscribed folders are checked.", "", "Syntax:  @mail-all-new-mail", "", "Displays headers of all unread messages on all of your folders (i.e., your personal folder and all @subscribed folders).", "", "Syntax:  @read-all-new-mail", "", "Displays all unread messages on all of your folders (i.e., your personal folder and all @subscribed folders).  This command ends with a prompt, \"Did you get all of that? [Enter `yes' or `no'].\"  Answering \"yes\" causes all of your last-read times to be updated.  You will probably want to check for &lt;&lt;&lt;n lines flushed&gt;&gt;&gt; indications before you answer this question.", "", "@read-all-new-mail (with a \"yes\" answer at the end) is equivalent to doing a large number of @nn's."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@mail-all-new-mail</NAME>
          <VALUE>{"*forward*", "@nn"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@read-all-new-mail</NAME>
          <VALUE>{"*forward*", "@nn"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@refile</NAME>
          <VALUE>{"Syntax:  @refile &lt;message-seq&gt; [on mail-recipient] to mail-recipient", "         @copymail &lt;message-seq&gt; [on mail-recipient] to mail-recipient", "", "Moves a message sequence directly from one mail recipient (defaulting as per the sticky @mail-option) to another, without adding headers or reordering.", "", "NOTE:  The recipient of @refiled messages may well have its mail out of order.  This can confuse a variety of features of the mail system, which expects its messages to always be in chronological order.  Care should be exercised with @refile/@copymail."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@copymail</NAME>
          <VALUE>{"*forward*", "@refile"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@add-notify</NAME>
          <VALUE>{"Usage:  @add-notify me to player", "    Sends mail to player saying that I want to be added to their mail notification property.", "Usage:  @add-notify player to me", "    Makes sure that player wants to be notified, if so, adds them to my .mail_notify property.", "", "In order for one person to be notified that another person has new mail, both the mail recipient and the notification recipient should agree that this is an OK transfer of information.  This verb facilitates that transaction."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>index</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>index_cache</NAME>
          <VALUE>{"mail-index"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"Mail Commands Help Db"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>"This help database contains topics relating to the general use of the mail system."</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{34388, 919123704}</VALUE>
        </PROPERTY>
      </OBJECT>
      <OBJECT ID="obj93" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
        <NAME>Frand Help DB</NAME>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>frand-index</NAME>
          <VALUE>{"*index*", "Frand's Player Class Help Topics"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>spelling</NAME>
          <VALUE>{"The MOO has a built in spelling checker and dictionary.  There are several player commands which access the database, as well as some programming features available.  Additional documentation is available under individual commands.", "", "The current dictionary only contains about 20,000 words, and thus is somewhat incomplete.  Words may be added to a personal dictionary, as well as to the main dictionary (only a few people can add to the main dictionary).", "", "@spell a word or phrase - Spell check a word or phrase.", "@spell thing.prop - Spell check a property. The value must be a string or a list of strings.", "@spell thing:verb - Spell check a verb. Only the quoted strings in the verb are checked.", "@spellproperties object - Spell check all text properties of an object.", "@spellmessages object - Spell check only message properties of an object.", "@cspell word - Spell check a word, and if it is not in the dictionary, offers suggestions about what the right spelling might be. This actually works with thing.prop and thing:verb too, but it is too slow to be useful--it takes maybe 30 seconds per unknown word.", "@complete prefix - List all the word in the dictionary which begin with the given prefix. For example, '@complete zoo' lists zoo, zoologist, zoology, and zoom.", "@addword word - Add a word to your personal dictionary.", "@rmword word - Remove a word from your personal dictionary.", "@adddict word - Add a word to the global dictionary.", "@rmdict word - Remove a word from the global dictionary.", "", "For programmers, the verb $spell:random() is available -- returns a word, at random, from the dictionary.", "", "Questions and comments should be directed to waffle on LambdaMOO."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@spell</NAME>
          <VALUE>{"Syntax: @spell &lt;any number of words&gt;", "           - will check the words from the command line.", "        @spell object.property", "           - will spellcheck the contents of a prop. Must be a string or", "             list of strings.", "        @spell object:verb", "           - will check everything within quoted strings in a verb. E.g.,", "             only the quoted part of player:tell(\"Spellchecking is fun.\");", "             will be examined for errors.", "", "Refer to Help Spelling for general information about the spell checker."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@cspell</NAME>
          <VALUE>{"Syntax: @cspell &lt;any number of words&gt;", "        @cspell object.property", "        @cspell object:verb", "", "Like @spell, but attempts to guess at correct spellings for words it believes are spelled incorrectly.   This verb can be quite slow, so correcting large chunks of text may not be a good idea.", "", "Refer to help spelling and help @spell for more information."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@spellproperties</NAME>
          <VALUE>{"*forward*", "@spellmessages"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@spellmessages</NAME>
          <VALUE>{"Syntax: @spellproperties &lt;object&gt;", "        @spellmessages &lt;object&gt;", "These commands will spellcheck all properties or messages, respectively, on an object.  The object must be owned or readable by the user.  Messages and properties will be spellchecked if they contain a string or a list of strings; others will be ignored.", "", "Refer to help spelling for general information about the spellchecker."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@rmword</NAME>
          <VALUE>{"Usage: @rmword &lt;word or words&gt;", "", "Will remove all words found from your personal dictionary, stored in player property \".dict\"."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@addword</NAME>
          <VALUE>{"Syntax: @addword &lt;word or words&gt;", "        @addword object.property", "        @addword object:verb", "", "Will add all words found and unknown into your personal dictionary.", "Your dictionary is stored in a property named \".dict\"."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@complete</NAME>
          <VALUE>{"Syntax:  @complete prefix", "", "This verb is part of the MOO spelling checker.  It will show you all the words in the dictionary that start with the prefix letters you specify.  You should be specific as to what you're looking for (for example, you might use @complete comput, rather than @complete co) in order to avoid getting an excessive number of words output.", "", "Refer to help spelling for more information."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@find</NAME>
          <VALUE>{"  @find #&lt;object&gt;   - locate an object by number", "  @find &lt;player&gt;    - locate a player", "  @find :&lt;verb&gt;     - locate a verb on an object in your vicinity", "  @find .&lt;property&gt; - locate a property on objects in your vicinity.", "  @find ?&lt;topic&gt;    - locate a help topic on a help database.", "", "For example, '@find frand' shows Frand's number and location. '@find :jump' lists every object in the same room as you (including you and the room itself) which has a 'jump' verb.  For properties and verbs, output is a list of pairs of objects: each object on which the property or verb exists, and the ancestor that actually defines it."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@rooms</NAME>
          <VALUE>{"When you aren't in the same room with an object, you have to refer to it by number. When teleporting, that means you usually have to give your destination as a number. To avoid this, Frand's player class provides a way for you to store a database of rooms by name. If the library is in your list of rooms, you can just '@go library' to teleport there. Or '@move book to lib' to teleport an object there.", "", "  @rooms                     - see a list of the rooms you know by name", "  @addr*oom &lt;name&gt; &lt;number&gt;  - remember a room by name", "  @rmr*oom  &lt;name&gt;           - forget about a room's name", "", "For example, to add the kitchen to your database of rooms, type '@addr Kitchen #24'. To remove it, type '@rmr kitchen'."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@addroom</NAME>
          <VALUE>{"*forward*", "@rooms"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@rmroom</NAME>
          <VALUE>{"*forward*", "@rooms"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@join</NAME>
          <VALUE>{"*forward*", "@move"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@go</NAME>
          <VALUE>{"*forward*", "@move"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@move</NAME>
          <VALUE>{"  @move &lt;obj&gt; to &lt;location&gt;  - teleport an object to a given location", "  @go &lt;location&gt;             - teleport yourself to a given location", "  @join &lt;player&gt;             - teleport yourself to a player's location", "", "You can teleport an object (if it allows this) to any location that will accept it. For example, `@move rock to #11' will teleport the rock to the closet. `@move #123 to here' will move object #123 to your location. `@go home' will teleport you home. `@join yduj' will teleport you to yduJ's location. You can also teleport an object to #-1, which is nowhere.", "", "See help teleport-messages for information on customizing the text that appears", "(both to you and to others in the vicinity) when you teleport.", "See also help @rooms for information on naming rooms for convenient movement.", "If @move doesn't work and you own the place where the object is located, try using @eject instead."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>teleport-messages</NAME>
          <VALUE>{"Teleporting using @go, @move, or @join causes various messages to appear. The messages are defined on you as properties. Here are the messages, who sees them, and when.", "", " when you teleport -  yourself      a player        a thing", "", "           you see -  self_port     player_port     thing_port", "        others see -  oself_port    oplayer_port    othing_port", "  destination sees -  self_arrive   player_arrive   thing_arrive", "   teleportee sees -                victim_port     object_port", "", "When you @join a player, your join message is printed to you.", "", "You can set the messages with commands like '@oself_port me is \"vanishes in a shimmering haze.\"', '@join me is \"You visit %n.\"', and so on.", "", "The messages to you are printed as they stand. The messages to others are printed after your name. If you set a message to \"\", the null string, nothing will print for that message. But if you have a non-empty message which does not include your name, then your name will be added in front of the message. You can use the usual pronoun substitutions, like '%n' to refer to the object you are teleporting. You can also use the special substitutions %&lt;from room&gt; and %&lt;to room&gt; to refer to the original and destination rooms for the teleport.", "", "If you are leaving your name out of the messages, and relying on its being inserted automatically, you have to be careful about the substitutions you use. If Frand has an oself_port message \"jumps to %&lt;to room&gt;.\", for example, and Frand teleports to Frand's MOOhome, the message printed will be \"jumps to Frand's MOOhome.\" My name is there, so it isn't added in. If you want to include your name as a substitution, the one to use is %t, 'this'. \"%t jumps to %&lt;to room&gt;.\" will work."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@refuse</NAME>
          <VALUE>{"", "The refusal facility allows you to ignore specific actions by players. You can ignore all mail that Stupid_Jerk (#34567) sends you, for", "example, or you can ignore all whispers and pages, no matter who they are from.", "", "There are three basic refusal commands. They are explained below.", "", "    @refuse &lt;action&gt; from &lt;player&gt;", "    @unrefuse &lt;action&gt; from &lt;player&gt;", "    @refusals", "", "The actions you can refuse are page, whisper, mail, move, join, and accept. These are explained in a table farther down.", "", "For example, '@refuse mail from Stupid_Jerk'. Any future mail that Stupid_Jerk sends you will be dropped on the floor, and Stupid_Jerk will", "be told that you refused to receive it. The refusal stays active for a week; after the week is over, Stupid_Jerk's mail will again get", "through. (If you want the refusal to last a longer or shorter time, keep on reading.)", "", "You can refuse more than one action at a time. '@refuse page whisper from Stupid_Jerk' refuses both pages and whispers.", "", "You can also refuse actions from everybody.", "", "    @refuse &lt;actions&gt;", "", "For example, '@refuse page' refuses every page. These refusals are listed as refusals of 'everybody' when you use the @refusals command,", "below.", "", "See `help @unrefuse' and `help @refusal-reporting' for information on undoing refusals and finding out what you're refusing.", "", " - the actions", "", "The actions everybody can refuse are page, whisper, mail, move, and join.", "refuse other things as well, depending on your player class.", "", " refuse this      to prevent somebody from doing this", " -----------      -----------------------------------", "    page        - tell you a message with the 'page' command", "    whisper     - tell you a message with the 'whisper' or 'murmur' command", "    mail        - send you a MOOmail message via @send", "    move        - teleport you", "    join        - enter the same room as you (only works in a some rooms)", "    accept      - hand you an object (or teleport it to you)", "    flames      - posts are suppressed on mail lists", "    politics    - set yourself `apolitical' [see `help apolitical']", "    all         - all of the above", "", "Refusing move is a little tricky. The player will not be able to teleport you, but you will not be able to pass through any special exits", "that the player may have programmed either. Refusing move means refusing *all* movement, including movement through programmed exits.", "Fortunately most exits are plain exits, and you will always be able to pass through them. Only specially programmed exits by the player you", "are refusing move from are barred to you.", "", "Refusing join only works in special rooms that support it.", "", " - time limits", "", "Refusals expire after a certain amount of time has gone by. Unless you say otherwise, they expire after a week. You can add '... for", "&lt;time&gt;' to the end of a @refuse command:", "", "    @refuse &lt;action&gt; from &lt;player&gt; for &lt;time&gt;", "    @refuse &lt;action&gt; for &lt;time&gt;", "", "For example, '@refuse join from Stupid_Jerk for 3 days'.", "", "The &lt;time&gt; is always a number followed by a unit, like '10 weeks' or '45 seconds'. The possible units are second, minute, hour, day, week,", "and month."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@unrefuse</NAME>
          <VALUE>{"Syntax:", "    @unrefuse &lt;actions&gt; from &lt;player&gt;", "", "If Stupid_Jerk reforms, you can change your mind. '@unrefuse mail from Stupid_Jerk' will remove the refusal.", "", "'@unrefuse' can also be called '@allow', for those who prefer English over clarity.", "", "    @unrefuse &lt;actions&gt;", "", "If you don't mention a player, you remove only refusals that apply to everybody. '@unrefuse page' turns off any '@refuse page' command you", "gave before, but does not affect refusals of specific players. You will still be refusing pages from Stupid_Jerk, if you were before.", "", "    @unrefuse everything", "", " If you '@unrefuse everything', all your refusals are removed. This command asks if you are sure before erasing them all."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@refusal-reporting</NAME>
          <VALUE>{"[See help @refuse for a discussion of the refusal facility]", "", "    @refusals", "    @refusals for &lt;player&gt;", "", "List the players and actions you are refusing, or the players and actions that another player is refusing. For example, you can see if", "Stupid_Jerk is refusing your mail too: '@refusals for Stupid_Jerk'.", "", "Normally refusal works without your awareness. You don't even notice when Stupid_Jerk attempts to send you mail. If you would rather be", "notified when it happens (so you can thumb your nose), then do", "", "    @refusal-reporting on", "", "Actually, all you need to type is '@refusal-r on'. You will see a message like 'Mail from Stupid_Jerk (#34567) refused.' as soon as", "Stupid_Jerk types 'send' in the mail editor.", "", "Refusal reporting only works for some actions. It works for page, whisper, and mail, but not for move, join or accept. Sorry.", "", "You will only be notified if you are connected when the refusal happens. If you are not connected when Stupid_Jerk tries to send you mail,", "you won't know about it, no matter whether refusal reporting is on or off.", "", "You can turn off refusal reporting with '@refusal-r off'. You can check whether it is on or off with '@refusal-r'. Here's the list:", "", "    @refusal-reporting on     - turn on refusal reporting", "    @refusal-reporting off    - turn off refusal reporting", "    @refusal-reporting        - see whether it is on or off"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@refusals</NAME>
          <VALUE>{"*forward*", "@refusal-reporting"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>refusal-programming</NAME>
          <VALUE>{"", "  -- -- --  refusal programming", "", "This entry explains how to program new kinds of refusal for the refusal mechanism. This information is only useful for programmers. For basic information about the refusal mechanism, read the 'refusal' entry.", "", " - making a new refusable action", "", "Making a refusable action has several steps. You have to (1) override the verb that lists your refusable actions, (2) write a verb to handle any special cases in determining when an action should be refused, and (3) write the code that does the actual acceptance or refusal of the action.", "", "You can put new refusable actions on yourself, or on a player class. If you put them on yourself, then you are the only one who can use them. If you put them on a player class, then everyone who belongs to that class can use them.", "", "I'll walk you through the example of making a refusable action 'smirk'. If you '@refuse smirk from Munchkin' then anything Munchkin tells you with the word 'smirk' in it will be refused. Since this is useless, I'll assume that you're defining it on yourself, instead of on a player class.", "", "(1) You have to make 'smirk' a refusable action. You do that by overriding your :refusable_actions verb. :Refusable_actions is a verb which returns the actions that you know how to refuse. It is a verb instead of a property so that players can add refusable actions at all levels of the player class hierarchy without interfering with each other.", "", "    @verb me:refusable_actions this none this", "    @program me:refusable_actions", "      return {@pass(@args), \"smirk\"};", "    .", "", "'@pass (@args)' means 'include the actions that my parent knows how to refuse, because I know how to refuse them too.'", "", "(2) The refusal mechanism provides for special cases in deciding whether an action should be refused. None of the refusals defined on Frand's Player Class actually make use of this special case, and you probably won't have to use it either. But you still have to write a verb to deal with it.", "", "The verb should be named :refuses_action_&lt;action&gt;, where &lt;action&gt; is the action that the verb is for. In this case, it should be :refuses_action_smirk. The verb takes some arguments and returns whether the action should be refused. The details of this will someday be explained in the next section, 'fancy refusable actions', but in all simple cases the verb should simply return 1.", "", "    @verb me:refuses_action_smirk this none this", "    @program me:refuses_action_smirk", "      return 1;", "    .", "", "(3) Finally you must implement the refusal itself. The code that performs the action should call &lt;target&gt;:refuses_action (player, &lt;action&gt;). &lt;target&gt; is the target of the action; it is you, because others are smirking at you. 'Player' is the current player, the one who is attempting to perform the action. &lt;action&gt; is the action the player is attempting, 'smirk'.", "", "In this case, you want to change your :tell verb to check whether its message contains the word 'smirk', and whether you are refusing smirks from the player who's talking. It also has to do two other things: (1) inform the player whose smirk was refused, and (2) call this:report_refusal, which tests whether you have refusal reporting turned on, and if so, reports the refusal to you. The call is this:report_refusal (&lt;player&gt;, &lt;message&gt;).", "", "    @verb me:tell this none this", "    @program me:tell", "      line = tostr (@args);", "      if (index (line, \"smirk\") &amp;&amp;", "          this:refuses_action (player, \"smirk\"))", "        player:tell (this.name, \" refuses your s m i r k.\");", "        this:report_refusal (player, \"You refused a s m i r k.\");", "      else", "        pass (@args);", "      endif", "    .", "", "The messages say 's m i r k' instead of 'smirk' to prevent an infinite :tell loop.", "", "It may help to study some examples. To see how whisper refusal works, read #3133:whisper. For page refusal, see #3133:receive_page and #3133:page_echo_msg. For mail refusal, #3133:receive_message. For move and accept refusal, #3133:moveto or #3133:accept (they are the same verb).", "", " - refusal data structures", "", "Refusal information is stored in four main properties, all lists.", "", "    .refused_origins    - who you are refusing actions from", "    .refused_actions    - for each, what actions you're refusing", "    .refused_until      - when the refusals expire", "    .refused_extra      - any further information about each refused action", "", "These properties are all readable and owned by Frand. You (or anyone) can see their values, but you can only change them by calling verbs for the purpose. The verbs are explained later on.", "", "Your .refused_origins property remembers who you are refusing actions from. It might have the value {#47, #34567} if you are refusing actions from Frand (#47) and Stupid_Jerk (#34567). If you are refusing actions by guests, it will have entries like \"xxP1Xw.nkQzft\". This weird string is a code word that stands for the guest's connection site; you are refusing actions not by a certain guest character, but by any guest who may connect from that site. The verb :player_to_refusal_origin (&lt;player&gt;) converts a player object to a refusal origin (either the same player object or a guest's site code) suitable to be stored in .refused_origins.", "", "Your .refused_actions property stores, for each origin in .refused_origins, a list of the actions you are refusing for that origin. Continuing the example from the last paragraph, if you are refusing page from Frand and page, whisper, and mail from Stupid_Jerk, then your .refused_actions has the value {{\"page\"}, {\"page\", \"whisper\", \"mail\"}}.", "", "Your .refused_until stores an expiration time for each refusal origin, in the form used by time(), the number of seconds since midnight, 1 January 1970, GMT. All actions that you are refusing from a given player expire at the same time. If you are refusing Frand until 19 December 1992, and Stupid_Jerk for seven years, your .refused_until might have the value {724763397, 928384392}.", "", "Your .refused_extra property stores any additional information needed for fancy refusals. It stores one piece of information for every action you are refusing from every player. In other words, .refused_extra contains a list of lists which are parallel to the lists in .refused_actions. None of the built-in refusals on #3133 is fancy, so for them, the extra piece of information is always 0. In the example, your .refused_extra has the value {{0}, {0, 0, 0}}. The next section explains how to use .refused_extra in fancy refusals.", "", "Another property, .default_refusal_time, stores the duration in seconds that a refusal lasts by default. This property is readable and owned by Frand. Its value is usually 604800, seven days. You can set it via the verb :set_default_refusal_time.", "", " - fancy refusable actions", "", "THIS SECTION IS NOT YET WRITTEN", "", " - selective refusal reporting", "", "If you have done '@refusal-reporting on', then you see a message when you refuse somebody else's action (for some actions). This reporting is done by the verb :report_refusal.", "", "    :report_refusal (&lt;player&gt;, &lt;message&gt;, ...)", "", "The first argument is the player whose action is refused, and the rest are concatenated to form the message that you see.", "", "You can override this verb if you want more selective refusal reporting. If you're refusing pages, for example, you might find that the refusal report is just as annoying as the original page--but you still don't want to turn it off. In that case, you might decide to give no more than one refusal report per minute, using code like this:", "", "    @property me.refusal_time 0", "    @property me.refusal_count 0", "    @verb me:report_refusal this none this", "    @program me:report_refusal", "      if (time() - this.refusal_time &lt; 60)", "        this.refusal_count = this.refusal_count + 1;", "      else", "        if (this.refusal_count &gt; 0)", "           pass (args [1], \"You've refused \", this.refusal_count+1,", "                 \" actions recently.\");", "        else", "          pass (@args);", "        endif", "        this.refusal_time = time();", "        this.refusal_count = 0;", "      endif", "    .", "", "The property that remembers whether refusal reporting is turned on is .report_refusal, which may have the values 0 or 1. The property is owned by Frand, so you can't change it directly.", "", " - refusal synonyms", "", "You can give a refusal more than one name by overriding the verb :translate_refusal_synonym. The verb takes one argument, a word from the command line, and it returns a list of refusal names that the word stands for. If the word is not a synonym, :translate_refusal_synonym should return the empty list, {}.", "", "    :translate_refusal_synonym (&lt;word&gt;) -&gt; &lt;list&gt;", "", "If you want 'noise' to mean both page and whisper for you, then you'd write this. You need to pass(@args) to get the synonym 'all', which stands for all refusable actions. If you type '@refuse noises from Munchkin', the plural 's' is removed automatically, so you don't have to worry about that.", "", "    @verb me:translate_refusal_synonym this none this", "    @program me:translate_refusal_synonym", "      return pass(@args) ||", "             (args [1] == \"noise\") ? {\"page\", \"whisper\"} | {};", "    .", "", " - refusing actions by classes of players", "", "THIS SECTION IS NOT YET WRITTEN"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@ways</NAME>
          <VALUE>{"'@ways', '@ways &lt;room&gt;' - List any obvious exits from the given room (or this room, if none is given)."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>@at</NAME>
          <VALUE>{" '@at' - Find out where everyone is.", " '@at &lt;player&gt;' - Find out where &lt;player&gt; is, and who else is there.", " '@at &lt;obj&gt;' - Find out who else is at the same place as &lt;obj&gt;.", " '@at &lt;place&gt;' - Find out who is at the place.", " The place can be given by number, or it can be a name from your @rooms list.", " '@at #-1' - Find out who is at #-1.", " '@at me' - Find out who is in the room with you.", " '@at home' - Find out who is at your home."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>index</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>index_cache</NAME>
          <VALUE>{"frand-index"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"Frand Help DB"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{26603, 919123707}</VALUE>
        </PROPERTY>
      </OBJECT>
    </OBJECT>
    <OBJECT ID="obj37" FLAGS="f r" OWNER="obj36" LOCATION="obj-1">
      <NAME>Generic Database</NAME>
      <PROPERTY OWNER="obj36" PERMS="c r">
        <NAME>node_perms</NAME>
        <VALUE>"r"</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>data</NAME>
        <VALUE>4</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" >
        <NAME> </NAME>
        <VALUE>{"", "", {}, {}}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="c">
        <NAME>key</NAME>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="c r">
        <NAME>aliases</NAME>
        <VALUE>{"Generic Database"}</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="c r">
        <NAME>description</NAME>
        <VALUE>"A generic `database' (well, really more like a string-indexed array if you want the truth...). See `help $generic_db' for details."</VALUE>
      </PROPERTY>
      <PROPERTY OWNER="obj36" PERMS="r">
        <NAME>object_size</NAME>
        <VALUE>{15982, 919123677}</VALUE>
      </PROPERTY>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>find find_key</NAME>
        <CODE>
          "find(string[,n]) =&gt; datum corresponding to string with the search starting at node \" \"+string[1..n], n defaults to 0 (root node), $ambiguous_match or $failed_match";
          "find_key(string[,n]) is like :find but returns the full string key rather than the associated datum.  Note that if several string keys present in the db share a common prefix, :find_key(prefix) will return $ambiguous_match, but if there is a unique datum associated with all of these strings :find(prefix) will return it rather than $ambiguous_match.";
          "Assumes n&lt;=length(string)";
          {search, ?sofar = 0} = args;
          rest = search;
          prefix = search[1..sofar];
          rest[1..sofar] = "";
          info = this.(" " + prefix);
          data = (verb == "find") ? this.data | 3;
          if (i = search in info[3])
          "...exact match for one of the strings in this node...";
          return info[data][i];
          elseif (index(info[1], rest) == 1)
          "...ambiguous iff there's more than one object represented in this node..";
          return this:_only(prefix, data);
          elseif (index(rest, info[1]) != 1)
          "...search string doesn't agree with common portion...";
          return $failed_match;
          elseif (index(info[2], search[nsofar = (sofar + length(info[1])) + 1]))
          "...search string follows one of continuations leading to other nodes...";
          return this:(verb)(search, nsofar);
          else
          "...search string may partially match one of the strings in this node...";
          for i in [1..length(exacts = info[3])]
          if (index(exacts[i], search) == 1)
          return info[data][i];
          endif
          endfor
          return $failed_match;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>find_exact</NAME>
        <CODE>
          {search, ?sofar = 0} = args;
          rest = search;
          prefix = search[1..sofar];
          rest[1..sofar] = "";
          info = this.(" " + prefix);
          if (i = search in info[3])
          return info[this.data][i];
          elseif ((length(rest) &lt;= (common = length(info[1]))) || (rest[1..common] != info[1]))
          return $failed_match;
          elseif (index(info[2], search[(sofar + common) + 1]))
          return this:find_exact(search, (sofar + common) + 1);
          else
          return $failed_match;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>find_all find_all_keys</NAME>
        <CODE>
          ":find_all(string [,n=0])";
          "assumes n &lt;= length(string)";
          {search, ?sofar = 0} = args;
          rest = search;
          prefix = search[1..sofar];
          rest[1..sofar] = "";
          info = this.(" " + prefix);
          data = (verb == "find_all") ? this.data | 3;
          if (index(info[1], rest) == 1)
          "...return entire subtree.";
          return this:((data == 3) ? "_every_key" | "_every")(prefix);
          elseif (index(rest, info[1]) != 1)
          "...common portion doesn't agree.";
          return {};
          elseif (index(info[2], rest[1 + (common = length(info[1]))]))
          "...matching strings are in a subnode.";
          return this:(verb)(search, (sofar + common) + 1);
          else
          "...matching string is in info[3].  length(rest) &gt; common,";
          "...so there will be at most one matching string.";
          for i in [1..length(info[3])]
          if (index(info[3][i], search) == 1)
          return {info[data][i]};
          endif
          endfor
          return {};
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>_only</NAME>
        <CODE>
          ":_only(prefix,data) =&gt; if all strings in this node have the same datum, return it, otherwise, return $ambiguous_match.";
          if (caller != this)
          raise(E_PERM);
          endif
          {prefix, data} = args;
          info = this.(" " + prefix);
          if (data == 3)
          "... life is much simpler if there's no separate datum.";
          "... if there's more than one string here, we barf.";
          if (info[2] || (length(info[3]) &gt; 1))
          return $ambiguous_match;
          elseif (info[3])
          return info[3][1];
          else
          "..this can only happen with the root node of an empty db.";
          return $failed_match;
          endif
          elseif (info[2])
          what = this:_only(tostr(prefix, info[1], info[2][1]), data);
          if (what == $ambiguous_match)
          return what;
          endif
          elseif (info[data])
          what = info[data][1];
          info[data] = listdelete(info[data], 1);
          else
          "..this can only happen with the root node of an empty db.";
          return $failed_match;
          endif
          for x in (info[data])
          if (what != x)
          return $ambiguous_match;
          endif
          endfor
          for i in [2..length(info[2])]
          if (what != this:_only(tostr(prefix, info[1], info[2][i]), data))
          return $ambiguous_match;
          endif
          endfor
          return what;
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>_every</NAME>
        <CODE>
          if (caller != this)
          raise(E_PERM);
          endif
          info = this.(" " + args[1]);
          prefix = args[1] + info[1];
          r = $list_utils:remove_duplicates(info[4]);
          for i in [1..length(branches = info[2])]
          for new in (this:_every(prefix + branches[i]))
          r = setadd(r, new);
          endfor
          endfor
          return r;
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>_every_key</NAME>
        <CODE>
          if (caller != this)
          raise(E_PERM);
          endif
          info = this.(" " + args[1]);
          prefix = args[1] + info[1];
          r = info[3];
          for i in [1..length(branches = info[2])]
          for new in (this:_every_key(prefix + branches[i]))
          r = setadd(r, new);
          $command_utils:suspend_if_needed(0);
          endfor
          $command_utils:suspend_if_needed(0);
          endfor
          return r;
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>insert</NAME>
        <CODE>
          ":insert([n,]string,datum) -- inserts &lt;string,datum&gt; correspondence into tree starting at node \" \"+string[1..n], n defaulting to 0 (root node).";
          "Assumes length(string) &gt;= n";
          "Returns {old_datum} (or 1) if there was a &lt;string,old_datum&gt; correspondence there before, otherwise returns 0";
          if (!($perm_utils:controls(caller_perms(), this) || (caller == this)))
          return E_PERM;
          endif
          has_datum = this.data &gt; 3;
          if (typeof(sofar = args[1]) == INT)
          search = args[2];
          datum = has_datum ? args[3] | 0;
          else
          search = sofar;
          sofar = 0;
          datum = has_datum ? args[2] | 0;
          endif
          prefix = search[1..sofar];
          info = this.(" " + prefix);
          if (i = search in info[3])
          "... exact match ...";
          if (has_datum)
          previous = {info[this.data][i]};
          info[this.data][i] = datum;
          this:set_node(prefix, @info);
          return previous;
          else
          return 1;
          endif
          endif
          rest = search;
          rest[1..sofar] = "";
          if (index(rest, info[1]) != 1)
          "... find where new string disagrees with common portion...";
          c = $string_utils:common(rest, info[1]) + 1;
          "... make a new node with a shorter common portion....";
          this:make_node(prefix + info[1][1..c], @listset(info, info[1][c + 1..$], 1));
          this:set_node(prefix, info[1][1..c - 1], info[1][c], {search}, @has_datum ? {{datum}} | {});
          return 0;
          elseif (rest == info[1])
          ".. new string == common portion, insert...";
          info[3] = {@info[3], search};
          if (has_datum)
          info[this.data] = {@info[this.data], datum};
          endif
          this:set_node(prefix, @info);
          return 0;
          elseif (index(info[2], search[nsofar = (sofar + length(info[1])) + 1]))
          "... new string matches pre-existing continuation. insert in subnode....";
          return this:insert(nsofar, search, datum);
          else
          "... new string may blow away one of the exact matches (i.e., matches one of them up to the first character beyond the common portion) in which case we need to create a new subnode....";
          s = search[1..nsofar];
          for m in (info[3])
          if (index(m, s) == 1)
          i = m in info[3];
          "... we know m != search ...";
          "... string m has been blown away.  create new node ...";
          cbegin = cafter = length(s) + 1;
          cend = $string_utils:common(search, m);
          this:make_node(s, m[cbegin..cend], "", {search, m}, @has_datum ? {{datum, info[this.data][i]}} | {});
          this:set_node(prefix, info[1], info[2] + s[nsofar], listdelete(info[3], i), @has_datum ? {listdelete(info[this.data], i)} | {});
          return 0;
          endif
          endfor
          "... new string hasn't blown away any of the exact matches, insert it as a new exact match...";
          info[3] = {search, @info[3]};
          if (has_datum)
          info[this.data] = {datum, @info[this.data]};
          endif
          this:set_node(prefix, @info);
          return 0;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>delete</NAME>
        <CODE>
          ":delete(string[,n]) deletes any &lt;string,something&gt; pair from the tree starting at node \" \"+string[1..n], n defaulting to 0 (root node)";
          "Returns {something} if such a pair existed, otherwise returns 0";
          "If that node is not the root node and ends up containing only one string and no subnodes, we kill it and return {something,string2,something2} where &lt;string2,something2&gt; is the remaining pair.";
          if (!($perm_utils:controls(caller_perms(), this) || (caller == this)))
          return E_PERM;
          endif
          {search, ?sofar = 0} = args;
          rest = search;
          prefix = search[1..sofar];
          rest[1..sofar] = "";
          info = this.(" " + prefix);
          if (i = search in info[3])
          previous = {info[this.data][i]};
          info[3] = listdelete(info[3], i);
          if (this.data &gt; 3)
          info[this.data] = listdelete(info[this.data], i);
          endif
          elseif ((rest == info[1]) || ((index(rest, info[1]) != 1) || (!index(info[2], search[d = (sofar + length(info[1])) + 1]))))
          "... hmm string isn't in here...";
          return 0;
          elseif ((previous = this:delete(search, d)) &amp;&amp; (length(previous) &gt; 1))
          i = index(info[2], search[d]);
          info[2][i..i] = "";
          info[3] = {previous[2], @info[3]};
          if (this.data &gt; 3)
          info[this.data] = {previous[3], @info[this.data]};
          endif
          previous = previous[1..1];
          else
          return previous;
          endif
          if ((!prefix) || ((length(info[3]) + length(info[2])) != 1))
          this:set_node(prefix, @info);
          return previous;
          elseif (info[3])
          this:kill_node(prefix);
          return {@previous, info[3][1], info[this.data][1]};
          else
          sub = this.(" " + (p = tostr(prefix, info[1], info[2])));
          this:kill_node(p);
          this:set_node(prefix, @listset(sub, tostr(info[1], info[2], sub[1]), 1));
          return previous;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>delete2</NAME>
        <CODE>
          ":delete2(string,datum[,n]) deletes the pair &lt;string,datum&gt; from the tree starting at node \" \"+string[1..n], n defaulting to 0 (root node)";
          "Similar to :delete except that if the entry for that string has a different associated datum, it will not be removed.  ";
          ":delete2(string,datum) is equivalent to ";
          " ";
          "  if(this:find_exact(string)==datum) ";
          "    this:delete(string); ";
          "  endif";
          if (!($perm_utils:controls(caller_perms(), this) || (caller == this)))
          return E_PERM;
          endif
          {search, datum, ?sofar = 0} = args;
          rest = search;
          prefix = search[1..sofar];
          rest[1..sofar] = "";
          info = this.(" " + prefix);
          if (i = search in info[3])
          previous = {info[this.data][i]};
          if (previous[1] != datum)
          return previous;
          endif
          info[3] = listdelete(info[3], i);
          if (this.data &gt; 3)
          info[this.data] = listdelete(info[this.data], i);
          endif
          elseif ((rest == info[1]) || ((index(rest, info[1]) != 1) || (!index(info[2], search[d = (sofar + length(info[1])) + 1]))))
          "... hmm string isn't in here...";
          return 0;
          elseif ((previous = this:delete2(search, datum, d)) &amp;&amp; (length(previous) &gt; 1))
          i = index(info[2], search[d]);
          info[2][i..i] = "";
          info[3] = {previous[2], @info[3]};
          if (this.data &gt; 3)
          info[this.data] = {previous[3], @info[this.data]};
          endif
          previous = previous[1..1];
          else
          return previous;
          endif
          if ((!prefix) || ((length(info[3]) + length(info[2])) != 1))
          this:set_node(prefix, @info);
          return previous;
          elseif (info[3])
          this:kill_node(prefix);
          return {@previous, info[3][1], info[this.data][1]};
          else
          sub = this.(" " + (p = tostr(prefix, info[1], info[2])));
          this:kill_node(p);
          this:set_node(prefix, @listset(sub, tostr(info[1], info[2], sub[1]), 1));
          return previous;
          endif
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>set_node</NAME>
        <CODE>
          return (caller != this) ? E_PERM | (this.(" " + args[1]) = listdelete(args, 1));
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>make_node</NAME>
        <CODE>
          "WIZARDLY";
          return (caller != this) ? E_PERM | add_property(this, " " + args[1], listdelete(args, 1), {$generic_db.owner, this.node_perms});
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>kill_node</NAME>
        <CODE>
          "WIZARDLY";
          return (caller != this) ? E_PERM | delete_property(this, " " + args[1]);
        </CODE>
      </VERB>
      <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>clearall</NAME>
        <CODE>
          "WIZARDLY";
          if (!($perm_utils:controls(caller_perms(), this) || (caller == this)))
          return E_PERM;
          endif
          if (args &amp;&amp; ((d = args[1]) in {3, 4}))
          this.data = d;
          endif
          root = {"", "", {}, @(this.data &gt; 3) ? {{}} | {}};
          "...since the for loop contains a suspend, we want to keep people";
          "...from getting at properties which are now garbage but which we";
          "...haven't had a chance to wipe yet.  Somebody might yet succeed";
          "...in adding something; thus we have the outer while loop.";
          this:set_node("", 37);
          while (this.(" ") != root)
          this:set_node("", @root);
          for p in (properties(this))
          if ((p[1] == " ") &amp;&amp; (p != " "))
          delete_property(this, p);
          endif
          "...Bleah; db is inconsistent now....";
          "...At worst someone will add something that references an";
          "...existing property.  He will deserve to die...";
          $command_utils:suspend_if_needed(0);
          endfor
          endwhile
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>clearall_big</NAME>
        <CODE>
          if (!($perm_utils:controls(caller_perms(), this) || (caller == this)))
          return E_PERM;
          endif
          this:_kill_subtrees("", 0);
          this:clearall(@args);
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>_kill_subtrees</NAME>
        <CODE>
          ":_kill_subtree(node,count)...wipes out all subtrees";
          "...returns count + number of nodes removed...";
          if (!($perm_utils:controls(caller_perms(), this) || (caller == this)))
          return E_PERM;
          endif
          info = this.(" " + (prefix = args[1]));
          count = args[2];
          if ((ticks_left() &lt; 500) || (seconds_left() &lt; 2))
          player:tell("...", count);
          suspend(0);
          endif
          for i in [1..length(info[2])]
          count = this:_kill_subtrees(n = tostr(prefix, info[1], info[2][i]), count) + 1;
          this:kill_node(n);
          endfor
          return count;
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>depth</NAME>
        <CODE>
          info = this.(" " + (prefix = (args || {""})[1]));
          depth = 0;
          string = prefix;
          if ((ticks_left() &lt; 500) || (seconds_left() &lt; 2))
          player:tell("...", prefix);
          suspend(0);
          endif
          for i in [1..length(info[2])]
          if ((r = this:depth(tostr(prefix, info[1], info[2][i])))[1] &gt; depth)
          depth = r[1];
          string = r[2];
          endif
          endfor
          return {depth + 1, string};
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>count_entries</NAME>
        <CODE>
          info = this.(" " + (prefix = args[1]));
          count = length(info[3]) + args[2];
          if ((ticks_left() &lt; 500) || (seconds_left() &lt; 2))
          player:tell("...", count);
          suspend(0);
          endif
          for i in [1..length(info[2])]
          count = this:count_entries(tostr(prefix, info[1], info[2][i]), count);
          endfor
          return count;
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
        <NAME>count_chars</NAME>
        <CODE>
          info = this.(" " + (prefix = args[1]));
          count = args[2];
          for s in (info[3])
          count = count + length(s);
          endfor
          if ((ticks_left() &lt; 500) || (seconds_left() &lt; 2))
          player:tell("...", count);
          suspend(0);
          endif
          for i in [1..length(info[2])]
          count = this:count_chars(tostr(prefix, info[1], info[2][i]), count);
          endfor
          return count;
        </CODE>
      </VERB>
      <VERB OWNER="obj36" PERMS="d r" DOBJ="any" PREP="in/inside/into" IOBJ="this">
        <NAME>count</NAME>
        <CODE>
          "count [entries|chars] in &lt;db&gt;";
          "  reports on the number of distinct string keys or the number of characters";
          "  in all string keys in the db";
          if (index("entries", dobjstr) == 1)
          player:tell(this:count_entries("", 0), " strings in ", this.name, "(", this, ")");
          elseif (index("chars", dobjstr) == 1)
          player:tell(this:count_chars("", 0), " chars in ", this.name, "(", this, ")");
          else
          player:tell("Usage: ", verb, " entries|chars in &lt;db&gt;");
          endif
        </CODE>
      </VERB>
      <OBJECT ID="obj16"  OWNER="obj36" LOCATION="obj-1">
        <NAME>Registration Database</NAME>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>registrar</NAME>
          <VALUE>#2</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>prune_progress</NAME>
          <VALUE>"aaa"</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>prune_stop</NAME>
          <VALUE>"zzz"</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>total_pruned_people</NAME>
          <VALUE>796</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>total_pruned_characters</NAME>
          <VALUE>16</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>prune_task</NAME>
          <VALUE>1593923619</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>alphabet</NAME>
          <VALUE>"abcdefghijklmnopqrstuvwxy0123456789_.@+z"</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>node_perms</NAME>
          <VALUE>""</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>data</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" >
          <NAME> </NAME>
          <VALUE>{"", "", {}, {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"Registration Database"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{7961, 919123668}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>find* _only* _every*</NAME>
          <CODE>
            return ((caller == this) || caller_perms().wizard) ? pass(@args) | E_PERM;
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>add</NAME>
          <CODE>
            ":add(player,email[,comment])";
            if (!caller_perms().wizard)
            return E_PERM;
            endif
            {who, email, @comment} = args;
            l = this:find_exact(email);
            if (l == $failed_match)
            this:insert(email, {{who, @comment}});
            elseif (i = $list_utils:iassoc(who, l))
            this:insert(email, listset(l, {who, @comment}, i));
            else
            this:insert(email, {@l, {who, @comment}});
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>init_for_core</NAME>
          <CODE>
            if (caller_perms().wizard)
            pass();
            this:clearall();
            this.registrar = #2;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>suspicious_address</NAME>
          <CODE>
            "suspicious(address [,who])";
            "Determine whether an address appears to be another player in disguise.";
            "returns a list of similar addresses.";
            "If second argument given, then if all similar addresses are held by that";
            "person, let it pass---they're just switching departments at the same school";
            "or something.";
            "";
            "at the moment,";
            "  foo@bar.baz.bing.boo";
            "is considered 'similar' to anything matching";
            "  foo@*.bing.boo";
            if (!caller_perms().wizard)
            return E_PERM;
            endif
            {address, ?allowed = #-1} = args;
            {userid, site} = $network:parse_address(address);
            exact = (!site) &amp;&amp; this:find_exact(address);
            if (!site)
            site = $network.site;
            endif
            site = $network:local_domain(site);
            sitelen = length(site);
            others = this:find_all_keys(userid + "@");
            for other in (others)
            if (other[max(1, ($ - sitelen) + 1)..$] != site)
            others = setremove(others, other);
            endif
            endfor
            if (exact)
            others = listinsert(others, address);
            endif
            for x in (others)
            allzapped = 1;
            for y in (this:find_exact(x))
            if ((((length(y) == 2) &amp;&amp; ((y[2] == "zapped due to inactivity") || (y[2] == "toaded due to inactivity"))) || (y[1] == allowed)) || (($object_utils:has_property($local, "second_char_registry") &amp;&amp; (typeof(them = $local.second_char_registry:other_chars(y[1])) == LIST)) &amp;&amp; (allowed in them)))
            "let them change to the address if it is them, or if it is a registered char of theirs.";
            "Hrm. Need typeof==LIST check because returns E_INVARG for shared characters. bleah Ho_Yan 5/8/95";
            else
            allzapped = 0;
            endif
            endfor
            if (allzapped)
            others = setremove(others, x);
            endif
            endfor
            return others;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>suspicious_userid</NAME>
          <CODE>
            "suspicious_userid(userid)";
            "Return yes if userid is root or postmaster or something like that.";
            if ($object_utils:has_property(#0, "local") &amp;&amp; $object_utils:has_property($local, "suspicious_userids"))
            extra = $local.suspicious_userids;
            else
            extra = {};
            endif
            return ((((args[1] in {@$network.suspicious_userids, @extra}) || match(args[1], "^guest")) || match(args[1], "^help")) || index(args[1], "-owner")) || index(args[1], "owner-");
            "Thinking about ruling out hyphenated names, on the grounds that they're probably mailing lists.";
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>describe_registration</NAME>
          <CODE>
            "Returns a list of strings describing the registration data for an email address.  Args[1] should be the result of this:find.";
            set_task_perms(caller_perms());
            result = {};
            for x in (args[1])
            name = (valid(x[1]) &amp;&amp; is_player(x[1])) ? x[1].name | "&lt;recycled&gt;";
            email = (valid(x[1]) &amp;&amp; is_player(x[1])) ? $wiz_utils:get_email_address(x[1]) | "&lt;???&gt;";
            result = {@result, tostr("  ", name, " (", x[1], ") current email: ", email, (length(x) &gt; 1) ? (" [" + x[2]) + "]" | "")};
            endfor
            return result;
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>prune</NAME>
          <CODE>
            "Carefully loop through the db and delete items associated with reaped objects.  If that results in no objects remaining for a username, delete that username.";
            "Attempt to keep memory usage down by only asking for a small number of items at a time.  Should probably have some arguments to control this.";
            if (!caller_perms().wizard)
            raise(E_PERM);
            endif
            this.prune_task = task_id();
            probe = this.prune_progress;
            while (probe &lt; this.prune_stop)
            for username in (this:find_all_keys(probe))
            items = this:find_exact(username);
            orig = items;
            for y in (items)
            {who, @whys} = y;
            if ((!valid(who)) || (!is_player(who)))
            nuke = 1;
            for why in (whys)
            if (((why &amp;&amp; (why != "zapped due to inactivity")) &amp;&amp; (why != "toaded due to inactivity")) &amp;&amp; (why != "Additional email address"))
            nuke = 0;
            endif
            endfor
            if (nuke)
            items = setremove(items, y);
            endif
            endif
            $command_utils:suspend_if_needed(0);
            endfor
            if (!items)
            this:delete(username);
            this.total_pruned_people = this.total_pruned_people + 1;
            elseif (items != orig)
            this:insert(username, items);
            this.total_pruned_characters = (this.total_pruned_characters + length(orig)) - length(items);
            endif
            $command_utils:suspend_if_needed(0);
            endfor
            probe = $string_utils:incr_alpha(probe, this.alphabet);
            this.prune_progress = probe;
            if ($command_utils:running_out_of_time())
            set_task_perms($wiz_utils:random_wizard());
            suspend(0);
            endif
            endwhile
            player:tell("Prune stopped at ", toliteral(this.prune_progress));
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>report_prune_progress</NAME>
          <CODE>
            player:tell("Prune is up to ", toliteral(this.prune_progress), ".");
            mine = 0;
            alphalen = length(this.alphabet);
            if (typeof(this.prune_progress) == STR)
            total = (alphalen * alphalen) * alphalen;
            for x in [1..3]
            mine = ((mine * alphalen) + index(this.alphabet, this.prune_progress[x])) - 1;
            endfor
            else
            total = 256 * 256;
            mine = (this.prune_progress[1] * 256) + this.prune_progress[2];
            endif
            percent = (100.0 * tofloat(mine)) / tofloat(total);
            player:tell("We have processed ", mine, " entries out of ", total, ", or ", toint(percent), ".", toint(10.0 * percent) % 10, "%.");
            player:tell("There were ", this.total_pruned_characters, " individual list entries removed, and ", this.total_pruned_people, " whole email addresses removed.");
            if ($code_utils:task_valid(this.prune_task))
            player:tell("Prune task is ", this.prune_task, ".  Stacktrace:");
            for x in (task_stack(this.prune_task, 1))
            if (valid(x[4]))
            player:tell(x[4], ":", x[2], " [", x[1], "]  ", x[3].name, "  (", x[6], ")");
            endif
            endfor
            else
            player:tell("The recorded task_id is no longer valid.");
            endif
          </CODE>
        </VERB>
      </OBJECT>
      <OBJECT ID="obj25"  OWNER="obj36" LOCATION="obj-1">
        <NAME>Site DB</NAME>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>domain</NAME>
          <VALUE>"moo.mud.org"</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>prune_progress</NAME>
          <VALUE>"aaa"</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>prune_stop</NAME>
          <VALUE>"zzz"</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>total_pruned_people</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>total_pruned_sites</NAME>
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>prune_task</NAME>
          <VALUE>680623445</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>alphabet</NAME>
          <VALUE>"abcdefghijklmnopqrstuvwxy0123456789_z"</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>node_perms</NAME>
          <VALUE>""</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>data</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" >
          <NAME> </NAME>
          <VALUE>{"", "", {}, {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c">
          <NAME>key</NAME>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>aliases</NAME>
          <VALUE>{"sitedb", "site", "db"}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="c r">
          <NAME>description</NAME>
          <VALUE>{"This object holds a db of places from which players have connected (see `help $site_db').", "The site blacklist and the graylist live as well (see `help blacklist')."}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>object_size</NAME>
          <VALUE>{13114, 919123674}</VALUE>
        </PROPERTY>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>find* _only* _every*</NAME>
          <CODE>
            return ((caller == this) || caller_perms().wizard) ? pass(@args) | E_PERM;
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>add</NAME>
          <CODE>
            ":add(player,site)";
            if (!caller_perms().wizard)
            return E_PERM;
            endif
            {who, domain} = args;
            if (this:domain_literal(domain))
            "... just enter it...";
            l = this:find_exact(domain);
            if (l == $failed_match)
            this:insert(domain, {who});
            elseif (!(who in l))
            this:insert(domain, setadd(l, who));
            endif
            else
            "...an actual domain name; add player to list for that domain...";
            "...then add domain itself to list for the next larger domain; repeat...";
            "...  Example:  domain == foo.bar.edu:  ";
            "...            enter #who  on foo.bar.edu list";
            "...            enter `foo' on bar.edu list";
            "...            enter `bar' on edu list";
            if (!(dot = index(domain, ".")))
            dot = length(domain) + 1;
            domain = tostr(domain, ".", this.domain);
            endif
            prev = who;
            while ($failed_match == (l = this:find_exact(domain)))
            this:insert(domain, {prev});
            if (dot)
            prev = domain[1..dot - 1];
            domain = domain[dot + 1..$];
            else
            return;
            endif
            dot = index(domain, ".");
            endwhile
            if (!(prev in l))
            this:insert(domain, {@l, prev});
            endif
            return;
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>load</NAME>
          <CODE>
            ":load([start]) -- reloads site_db with the connection places of all players.";
            "This routine calls suspend() if it runs out of time.";
            "WIZARDLY";
            "...needs to be able to read .all_connect_places";
            if (!$perm_utils:controls(caller_perms(), this))
            return E_PERM;
            endif
            plist = players();
            if (!args)
            this:clearall();
            elseif (i = args[1] in plist)
            plist[1..i - 1] = {};
            else
            return E_INVARG;
            endif
            for p in (plist)
            if (valid(p) &amp;&amp; (is_player(p) &amp;&amp; (!$object_utils:isa(p, $guest))))
            "... player may be recycled or toaded during the suspend(),...";
            "... guests login from everywhere...";
            for c in (p.all_connect_places)
            this:add(p, c);
            if ($command_utils:running_out_of_time())
            player:tell("...", p);
            suspend(0);
            endif
            endfor
            endif
            endfor
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>domain_literal</NAME>
          <CODE>
            ":domain_literal(string)";
            " =&gt; true iff string is a domain literal (i.e., numeric IP address).";
            if (10 &lt;= (len = length(hnum = strsub(args[1], ".", ""))))
            return toint(hnum[1..9]) &amp;&amp; toint(hnum[6..len]);
            else
            return toint(hnum);
            endif
            "SLEAZY CODE ALERT";
            "... what I wanted to do was return toint(strsub(args[1],\".\",\"\"))";
            "... but on a 32-bit machine, this has a 1 in 4294967296 chance of failing";
            "... (e.g., on \"42.94.967.296\", though I'll grant this particular example";
            "...  entails some very strange subnetting on net 42, to say the least).";
            "... So we do something that is guaranteed to work so long as internet";
            "... addresses stay under 32 bits --- a while yet...";
            "";
            "... As soon as we're sure match() is working, this will become a one-liner:";
            return match(args[1], "[0-9]+%.[0-9]+%.[0-9]+%.[0-9]+");
          </CODE>
        </VERB>
        <VERB OWNER="obj36" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>init_for_core</NAME>
          <CODE>
            if (caller_perms().wizard)
            pass();
            this:clearall();
            this.domain = "localdomain";
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>prune_alpha</NAME>
          <CODE>
            "Carefully loop through the db and delete items associated with !valid and !is_player objects.  If that results in no objects remaining for a site, delete that site.";
            "Attempt to keep memory usage down by only asking for a small number of items at a time.  Should probably have some arguments to control this.";
            "Another thing it should do is be clever about string typed items.  (What did I mean by this?)";
            "New feature: If the site name contains `dialup', then, if none of the users who have connected from there still have it in their .all_connect_places, then consider it trashable.  Maybe this will get some space savings.";
            "To run: call $site_db:prune_reset() then $site_db:prune_alpha().";
            "or $site_db:prune_alpha(1) for verbose output";
            verbose = args &amp;&amp; args[1];
            if (!caller_perms().wizard)
            raise(E_PERM);
            endif
            this.prune_task = task_id();
            probe = this.prune_progress;
            while ((probe &lt;= this.prune_stop) &amp;&amp; (length(probe) == length(this.prune_stop)))
            for sitename in (z = this:find_all_keys(probe))
            items = this:find_exact(sitename);
            orig = items;
            dialup = index(sitename, "dialup");
            "Don't keep around dialups.";
            for y in (items)
            if ((typeof(y) == OBJ) &amp;&amp; (((!valid(y)) || (!is_player(y))) || (dialup &amp;&amp; (!(sitename in y.all_connect_places)))))
            verbose &amp;&amp; player:tell("removing ", $string_utils:nn(y), " from ", sitename);
            items = setremove(items, y);
            endif
            $command_utils:suspend_if_needed(0);
            endfor
            useless = 1;
            "If no player has this site in eir .all_connect_places, nuke it anyway.";
            for y in (items)
            if ((typeof(y) != OBJ) || (sitename in y.all_connect_places))
            useless = 0;
            break;
            "unfortunately this can get kinna O(n^2).";
            endif
            $command_utils:suspend_if_needed(0);
            endfor
            if (useless)
            verbose &amp;&amp; player:tell(sitename, " declared useless and nuked");
            items = {};
            endif
            if (!items)
            this:delete(sitename);
            this.total_pruned_sites = this.total_pruned_sites + 1;
            elseif (items == orig)
            else
            this:insert(sitename, items);
            this.total_pruned_people = (this.total_pruned_people + length(orig)) - length(items);
            endif
            $command_utils:suspend_if_needed(0);
            if (probe &gt;= this.prune_stop)
            return player:tell("Prune stopped at ", toliteral(this.prune_progress));
            endif
            endfor
            probe = $string_utils:incr_alpha(probe, this.alphabet);
            this.prune_progress = probe;
            if ($command_utils:running_out_of_time())
            set_task_perms($wiz_utils:random_wizard());
            suspend(0);
            endif
            endwhile
            player:tell("Prune stopped at ", toliteral(this.prune_progress));
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>report_prune_progress</NAME>
          <CODE>
            player:tell("Prune is up to ", toliteral(this.prune_progress), ".");
            mine = 0;
            if (typeof(this.prune_progress) == STR)
            alphalen = length(this.alphabet);
            total = (alphalen * alphalen) * alphalen;
            for x in [1..3]
            mine = ((mine * alphalen) + index(this.alphabet, this.prune_progress[x])) - 1;
            endfor
            else
            total = 256 * 256;
            mine = (this.prune_progress[1] * 256) + this.prune_progress[2];
            endif
            percent = (100.0 * tofloat(mine)) / tofloat(total);
            player:tell("We have processed ", mine, " entries out of ", total, ", or ", toint(percent), ".", toint(10.0 * percent) % 10, "%.");
            player:tell("There were ", this.total_pruned_people, " individual list entries removed, and ", this.total_pruned_sites, " whole sites removed.");
            if ($code_utils:task_valid(this.prune_task))
            player:tell("Prune task is ", this.prune_task, ".  Stacktrace:");
            for x in (task_stack(this.prune_task, 1))
            if (valid(x[4]))
            player:tell(x[4], ":", x[2], " [", x[1], "]  ", x[3].name, "  (", x[6], ")");
            endif
            endfor
            else
            player:tell("The recorded task_id is no longer valid.");
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>prune_fixup</NAME>
          <CODE>
            if (!caller_perms().wizard)
            raise(E_PERM);
            endif
            if (!args)
            for x in ({"com", "edu", "us", "au", "net", "za", "uk", "at", "ca", "org", "il", "mil", "no", "gov", "se", "fi", "it", "be", "jp", "de", "pt", "sg", "ie", "br", "nl", "gr", "ch", "pl", "nz", "&lt;none&gt;", "&lt;bad&gt;", "ee", "dk", "fr", "si", "cz", "th", "tw", "hk", "su", "es", "kr", "hr", "is", "mx", "my", "ro", "kw", "cl", "ph", "cr", "tr", "in", "eg", "ec", "lv", "ve", "sk", "ar", "co", "pe", "hu", "jm", "ni", "ru", "id", "bm", "mt", "cn", "bg", "pk", "uy", "yu", "ae", "zw", "gi", "sm", "nu"})
            this:prune_fixup(x);
            endfor
            return;
            endif
            root = args[1];
            items = this:find_exact(root);
            orig = items;
            if (items == #-3)
            return 1;
            endif
            $site_db.prune_progress = root;
            $site_db.prune_task = task_id();
            for item in (items)
            if (typeof(item) == STR)
            if (this:prune_fixup((item + ".") + root))
            items = setremove(items, item);
            endif
            endif
            if ($command_utils:running_out_of_time())
            set_task_perms($wiz_utils:random_wizard());
            suspend(0);
            endif
            endfor
            if (!items)
            this:delete(root);
            this.total_pruned_sites = this.total_pruned_sites + 1;
            return 1;
            elseif (orig == items)
            else
            this:insert(root, items);
            endif
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>prune_numeric</NAME>
          <CODE>
            "Carefully loop through the db and delete items associated with !valid and !is_player objects.  If that results in no objects remaining for a site, delete that site.";
            "Attempt to keep memory usage down by only asking for a small number of items at a time.  Should probably have some arguments to control this.";
            "Another thing it should do is be clever about string typed items.";
            "Rewriting this to do numerics now.";
            if (!caller_perms().wizard)
            raise(E_PERM);
            endif
            this.prune_task = task_id();
            probe = this.prune_progress;
            while (probe[1] &lt;= this.prune_stop)
            probestring = tostr(probe[1], ".", probe[2], ".");
            for sitename in (z = this:find_all_keys(probestring))
            items = this:find_exact(sitename);
            orig = items;
            for y in (items)
            if ((typeof(y) == OBJ) &amp;&amp; ((!valid(y)) || (!is_player(y))))
            items = setremove(items, y);
            endif
            $command_utils:suspend_if_needed(0);
            endfor
            if (!items)
            this:delete(sitename);
            this.total_pruned_sites = this.total_pruned_sites + 1;
            elseif (items == orig)
            else
            this:insert(sitename, items);
            this.total_pruned_people = (this.total_pruned_people + length(orig)) - length(items);
            endif
            $command_utils:suspend_if_needed(0);
            endfor
            if (probe[2] == 255)
            probe[1] = probe[1] + 1;
            probe[2] = 0;
            else
            probe[2] = probe[2] + 1;
            endif
            this.prune_progress = probe;
            if ($command_utils:running_out_of_time())
            set_task_perms($wiz_utils:random_wizard());
            suspend(0);
            endif
            endwhile
            player:tell("Prune stopped at ", toliteral(this.prune_progress));
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>schedule_prune</NAME>
          <CODE>
            if (!caller_perms().wizard)
            return E_PERM;
            endif
            day = 24 * 3600;
            hour_of_day_GMT = 10;
            target = (((hour_of_day_GMT * 60) * 60) + day) - (time() % day);
            if (target &gt; 86400)
            target = target - 86400;
            endif
            fork (target)
            "Stop at 2am before checkpoint.";
            if ($code_utils:task_valid(this.prune_task))
            $site_db.prune_stop = "aaa";
            "Restart after 3am.  Er, 4am.";
            suspend(7500);
            this:schedule_prune();
            $site_db.prune_stop = "zzz";
            "Just in case it didn't actually stop...";
            if (!$code_utils:task_valid(this.prune_task))
            $site_db:prune_alpha();
            endif
            endif
            endfork
          </CODE>
        </VERB>
        <VERB OWNER="obj2" PERMS="d x r" DOBJ="this" PREP="none" IOBJ="this">
          <NAME>prune_reset</NAME>
          <CODE>
            if (!caller_perms().wizard)
            raise(E_PERM);
            endif
            this:report_prune_progress();
            player:tell("Resetting...");
            this.total_pruned_sites = 0;
            this.total_pruned_people = 0;
            this.prune_progress = "aaa";
            this.prune_stop = "zzz";
            `kill_task(this.prune_task) ! ANY';
          </CODE>
        </VERB>
      </OBJECT>
      <OBJECT ID="obj32" FLAGS="r" OWNER="obj36" LOCATION="obj-1">
        <NAME>Mr. Spell</NAME>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> worthl</NAME>
          <VALUE>{"ess", "", {"worthlessness", "worthless"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> drive</NAME>
          <VALUE>{"", "r", {"driveway", "driven", "drive"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> driver</NAME>
          <VALUE>{"", "", {"drivers", "driver"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> uns</NAME>
          <VALUE>{"", "c", {"unsure"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> topi</NAME>
          <VALUE>{"c", "", {"topical", "topic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> frien</NAME>
          <VALUE>{"d", "", {"friendly", "friends", "friend"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> computa</NAME>
          <VALUE>{"tion", "", {"computations", "computation"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME>entries</NAME>
          <VALUE>25132</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> activa</NAME>
          <VALUE>{"t", "", {"activating", "activate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> messa</NAME>
          <VALUE>{"ge", "", {"messages", "message"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> locatio</NAME>
          <VALUE>{"n", "", {"locations", "location"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> setti</NAME>
          <VALUE>{"ng", "", {"settings", "setting"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sett</NAME>
          <VALUE>{"", "i", {"settle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> creati</NAME>
          <VALUE>{"", "", {"creation", "creating"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> lambd</NAME>
          <VALUE>{"a", "", {"lambdahouse", "lambda"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rigoro</NAME>
          <VALUE>{"us", "", {"rigorously", "rigorous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rigo</NAME>
          <VALUE>{"r", "o", {"rigor"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> programmer</NAME>
          <VALUE>{"", "", {"programmers", "programmer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> harde</NAME>
          <VALUE>{"", "", {"harder", "harden"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> redef</NAME>
          <VALUE>{"in", "", {"redefining", "redefine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> redem</NAME>
          <VALUE>{"pti", "", {"redemptive", "redemption"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> keybi</NAME>
          <VALUE>{"nding", "", {"keybindings", "keybinding"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> keyb</NAME>
          <VALUE>{"", "i", {"keyboard"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> buffe</NAME>
          <VALUE>{"", "", {"buffer", "buffet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> artifice</NAME>
          <VALUE>{"", "", {"artificer", "artifice"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> horizont</NAME>
          <VALUE>{"al", "", {"horizontally", "horizontal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vertica</NAME>
          <VALUE>{"l", "", {"vertically", "vertical"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> automati</NAME>
          <VALUE>{"c", "", {"automatically", "automatic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trunc</NAME>
          <VALUE>{"ate", "", {"truncated", "truncate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> redr</NAME>
          <VALUE>{"aw", "", {"redraw", "redraws"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scrol</NAME>
          <VALUE>{"l", "", {"scrolling", "scroll"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> connecti</NAME>
          <VALUE>{"", "", {"connection", "Connecticut"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> emac</NAME>
          <VALUE>{"", "", {"emacs", "emaciate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> fris</NAME>
          <VALUE>{"", "", {"frisbee", "frisky"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> cyni</NAME>
          <VALUE>{"c", "", {"cynical", "cynic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> interse</NAME>
          <VALUE>{"ct", "", {"intersection", "intersect"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> corner</NAME>
          <VALUE>{"", "", {"corner", "cornerstone"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> headlin</NAME>
          <VALUE>{"e", "", {"headlines", "headline"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> keyw</NAME>
          <VALUE>{"ord", "", {"keywords", "keyword"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tablesp</NAME>
          <VALUE>{"oon", "", {"tablespoonful", "tablespoon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> irritat</NAME>
          <VALUE>{"e", "", {"irritated", "irritate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> bonu</NAME>
          <VALUE>{"s", "", {"bonuses", "bonus"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> intere</NAME>
          <VALUE>{"st", "", {"interesting", "interest"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> graz</NAME>
          <VALUE>{"", "", {"grazing", "graze"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> dozen</NAME>
          <VALUE>{"", "", {"dozens", "dozen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> pastu</NAME>
          <VALUE>{"re", "", {"pastures", "pasture"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rollin</NAME>
          <VALUE>{"", "", {"rolling", "Rollins"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> fields</NAME>
          <VALUE>{"", "", {"fields", "fieldstone"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> proofr</NAME>
          <VALUE>{"ead", "", {"proofreading", "proofread"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> foote</NAME>
          <VALUE>{"", "", {"footer", "Foote"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> locati</NAME>
          <VALUE>{"", "o", {"locating"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> times</NAME>
          <VALUE>{"", "", {"times", "timeshare"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> inser</NAME>
          <VALUE>{"t", "", {"insertion", "insert"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> clipb</NAME>
          <VALUE>{"oard", "", {"clipboards", "clipboard"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> savi</NAME>
          <VALUE>{"", "", {"saving", "Saviour"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unk</NAME>
          <VALUE>{"", "", {"unknown", "unkempt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> faili</NAME>
          <VALUE>{"ng", "", {"failings", "failing"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> faile</NAME>
          <VALUE>{"", "", {"failer", "failed"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> missp</NAME>
          <VALUE>{"elling", "", {"misspellings", "misspelling"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> playe</NAME>
          <VALUE>{"r", "", {"players", "player"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zigz</NAME>
          <VALUE>{"ag", "", {"zigzag", "zigzagging"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zes</NAME>
          <VALUE>{"t", "", {"zesty", "zest"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zer</NAME>
          <VALUE>{"o", "", {"zeroth", "zeroes", "zero"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zen</NAME>
          <VALUE>{"", "", {"zenith", "Zen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zea</NAME>
          <VALUE>{"l", "o", {"Zealand", "zeal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zealo</NAME>
          <VALUE>{"", "", {"zealous", "zealot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Ze</NAME>
          <VALUE>{"", "anrs", {"Zeus", "zeta", "Zellerbach", "Zeiss", "zebra"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Zan</NAME>
          <VALUE>{"", "", {"Zanzibar", "Zan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zag</NAME>
          <VALUE>{"", "", {"Zagreb", "zagging", "zag"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> za</NAME>
          <VALUE>{"", "gn", {"zazen", "zap", "Zambia", "Zaire", "Zachary"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Yv</NAME>
          <VALUE>{"e", "", {"Yvette", "Yves"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Yuk</NAME>
          <VALUE>{"", "", {"Yukon", "Yuki"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Yug</NAME>
          <VALUE>{"oslav", "", {"Yugoslavia", "Yugoslav"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Yuc</NAME>
          <VALUE>{"", "", {"yuck", "yucca", "Yucatan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yu</NAME>
          <VALUE>{"", "cgk", {"yule", "yuh"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yt</NAME>
          <VALUE>{"t", "", {"yttrium", "ytterbium"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yout</NAME>
          <VALUE>{"h", "", {"youthful", "youth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yourse</NAME>
          <VALUE>{"l", "", {"yourselves", "yourself"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yours</NAME>
          <VALUE>{"", "e", {"yours"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Youngs</NAME>
          <VALUE>{"t", "", {"Youngstown", "youngster"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> youn</NAME>
          <VALUE>{"g", "s", {"youngish", "young"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Yos</NAME>
          <VALUE>{"", "", {"Yost", "Yosemite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> York</NAME>
          <VALUE>{"", "", {"Yorktown", "york"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yor</NAME>
          <VALUE>{"", "k", {"yore"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yon</NAME>
          <VALUE>{"", "", {"Yonkers", "yond", "yon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Yoke</NAME>
          <VALUE>{"", "", {"yokel", "yoke"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yok</NAME>
          <VALUE>{"", "e", {"Yokuts", "Yokohama"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yog</NAME>
          <VALUE>{"", "", {"yogurt", "yogi", "yoghurt", "yoga"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Yod</NAME>
          <VALUE>{"e", "", {"Yoder", "yodel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yip</NAME>
          <VALUE>{"", "", {"yipping", "yip"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yi</NAME>
          <VALUE>{"", "p", {"yin", "yield", "Yiddish"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yest</NAME>
          <VALUE>{"er", "", {"yesteryear", "yesterday"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yes</NAME>
          <VALUE>{"", "t", {"yeshiva", "yes"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yeo</NAME>
          <VALUE>{"man", "", {"yeomanry", "yeoman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yell</NAME>
          <VALUE>{"", "o", {"yell"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yello</NAME>
          <VALUE>{"w", "", {"Yellowstone", "Yellowknife", "yellowish", "yellow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yel</NAME>
          <VALUE>{"", "l", {"yelp"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yeas</NAME>
          <VALUE>{"t", "", {"yeasty", "yeast"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> year</NAME>
          <VALUE>{"", "", {"yearn", "yearbook", "years", "year"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yaw</NAME>
          <VALUE>{"", "", {"yawn", "yawl", "yaw"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yarm</NAME>
          <VALUE>{"", "", {"yarmulke", "Yarmouth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Yard</NAME>
          <VALUE>{"", "", {"yardstick", "yardage", "yard"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yar</NAME>
          <VALUE>{"", "dm", {"yarrow", "yarn"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yap</NAME>
          <VALUE>{"", "", {"yapping", "yap"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Yank</NAME>
          <VALUE>{"", "", {"Yankton", "Yankee", "yank"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yan</NAME>
          <VALUE>{"", "k", {"yang"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Yam</NAME>
          <VALUE>{"", "", {"Yamaha", "yam"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Yal</NAME>
          <VALUE>{"", "", {"Yalta", "Yale"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Yak</NAME>
          <VALUE>{"", "", {"Yakima", "yak"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yac</NAME>
          <VALUE>{"ht", "s", {"yacht"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yachts</NAME>
          <VALUE>{"m", "", {"yachtsmen", "yachtsman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ya</NAME>
          <VALUE>{"", "cklmnprw", {"Yates", "Yaqui", "Yaounde", "yah"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> xyle</NAME>
          <VALUE>{"", "", {"xylene", "xylem"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> xy</NAME>
          <VALUE>{"l", "e", {"xylophone"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Xero</NAME>
          <VALUE>{"", "", {"Xerox", "xerography"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Xer</NAME>
          <VALUE>{"", "o", {"Xerxes"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> xen</NAME>
          <VALUE>{"o", "", {"xenophobia", "xenon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> xe</NAME>
          <VALUE>{"", "nr", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> X</NAME>
          <VALUE>{"", "ey", {"x's", "xi", "Xavier", "x"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wyn</NAME>
          <VALUE>{"", "", {"wynn", "Wyner"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wya</NAME>
          <VALUE>{"", "", {"Wyatt", "Wyandotte"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wy</NAME>
          <VALUE>{"", "an", {"Wyoming", "Wyman", "Wylie", "Wyeth", "WY"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wu</NAME>
          <VALUE>{"", "", {"Wuhan", "Wu"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wron</NAME>
          <VALUE>{"", "g", {"Wronskian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wrong</NAME>
          <VALUE>{"", "d", {"wrongful", "wrong"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wrongd</NAME>
          <VALUE>{"o", "", {"wrongdoing", "wrongdoer", "wrongdo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wro</NAME>
          <VALUE>{"", "n", {"wrought", "wrote"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> write</NAME>
          <VALUE>{"", "", {"writeup", "write"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> writ</NAME>
          <VALUE>{"", "e", {"writhe", "writ", "written"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wris</NAME>
          <VALUE>{"t", "", {"wristwatch", "wristband", "wrist"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wrin</NAME>
          <VALUE>{"", "", {"wrinkle", "wring"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wrig</NAME>
          <VALUE>{"", "", {"Wrigley", "wright", "wriggle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wri</NAME>
          <VALUE>{"", "gnst", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wres</NAME>
          <VALUE>{"t", "", {"wrestle", "wrest"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wrec</NAME>
          <VALUE>{"k", "", {"wreckage", "wreck"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wrea</NAME>
          <VALUE>{"", "t", {"wreak"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wreat</NAME>
          <VALUE>{"h", "", {"wreathe", "wreath"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wre</NAME>
          <VALUE>{"", "acs", {"wretch", "wrench"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wrat</NAME>
          <VALUE>{"h", "", {"wrathful", "wrath"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wrap</NAME>
          <VALUE>{"", "", {"wrapup", "wrap"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wra</NAME>
          <VALUE>{"", "pt", {"wrangle", "wraith", "wrack"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wr</NAME>
          <VALUE>{"", "aeio", {"wry"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wov</NAME>
          <VALUE>{"e", "", {"woven", "wove"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> woul</NAME>
          <VALUE>{"d", "", {"wouldn't", "would"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wou</NAME>
          <VALUE>{"", "l", {"wound"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wort</NAME>
          <VALUE>{"h", "l", {"worthy", "worthwhile", "Worthington", "worth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> worsh</NAME>
          <VALUE>{"ip", "", {"worshipful", "worship"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> worse</NAME>
          <VALUE>{"", "", {"worsen", "worse"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wors</NAME>
          <VALUE>{"", "eh", {"worst"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> worr</NAME>
          <VALUE>{"", "", {"worry", "worrisome"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> worm</NAME>
          <VALUE>{"", "", {"wormy", "worm"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> worl</NAME>
          <VALUE>{"d", "", {"worldwide", "world"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> worksh</NAME>
          <VALUE>{"", "", {"workshop", "worksheet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> works</NAME>
          <VALUE>{"", "h", {"workstation", "workspace", "works"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> workp</NAME>
          <VALUE>{"", "", {"workplace", "workpiece"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> workma</NAME>
          <VALUE>{"n", "", {"workmanlike", "workman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> workm</NAME>
          <VALUE>{"", "a", {"workmen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> workb</NAME>
          <VALUE>{"", "", {"workbook", "workbench"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Words</NAME>
          <VALUE>{"", "", {"Wordsworth", "words"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wool</NAME>
          <VALUE>{"", "", {"Woolworth", "woolgather", "wool"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> woody</NAME>
          <VALUE>{"", "", {"woodyard", "woody"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> woodw</NAME>
          <VALUE>{"", "", {"woodwork", "woodwind", "Woodward"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> woods</NAME>
          <VALUE>{"", "", {"woodside", "woodshed", "Woods"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> woodr</NAME>
          <VALUE>{"", "", {"woodruff", "Woodrow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> woodla</NAME>
          <VALUE>{"", "", {"Woodlawn", "woodland"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Woodl</NAME>
          <VALUE>{"", "a", {"woodlot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> woodc</NAME>
          <VALUE>{"", "", {"woodcut", "woodcock", "woodcarver"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wood</NAME>
          <VALUE>{"", "clrswy", {"woodpeck", "woodhen", "woodgrain", "wooden", "Woodbury", "Woodard", "wood"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> woo</NAME>
          <VALUE>{"", "dl", {"Wooster", "woo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wonde</NAME>
          <VALUE>{"r", "", {"wonderland", "wonderful", "wonder"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wond</NAME>
          <VALUE>{"", "e", {"wondrous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> won</NAME>
          <VALUE>{"", "d", {"wont", "won't", "Wong", "won"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> womb</NAME>
          <VALUE>{"", "", {"wombat", "womb"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> woma</NAME>
          <VALUE>{"n", "", {"womanhood", "woman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wolv</NAME>
          <VALUE>{"e", "", {"wolves", "wolve"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wolf</NAME>
          <VALUE>{"", "", {"wolfish", "Wolfgang", "Wolff", "Wolfe", "wolf"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wol</NAME>
          <VALUE>{"", "fv", {"wold", "Wolcott"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wok</NAME>
          <VALUE>{"", "", {"woke", "wok"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> woe</NAME>
          <VALUE>{"", "", {"woeful", "woebegone", "woe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> witt</NAME>
          <VALUE>{"", "", {"witty", "Witt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> withs</NAME>
          <VALUE>{"t", "", {"withstood", "withstand"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> withh</NAME>
          <VALUE>{"", "", {"withhold", "withheld"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> withe</NAME>
          <VALUE>{"", "", {"wither", "withe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> withdra</NAME>
          <VALUE>{"w", "", {"withdrawn", "withdrawal", "withdraw"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> withd</NAME>
          <VALUE>{"r", "a", {"withdrew"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> witc</NAME>
          <VALUE>{"h", "", {"witchcraft", "witch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> with</NAME>
          <VALUE>{"", "dehs", {"withy", "withal", "without", "within", "with"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wisp</NAME>
          <VALUE>{"", "", {"wispy", "wisp"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wish</NAME>
          <VALUE>{"", "", {"wishy", "wishful", "wishbone", "wish"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wise</NAME>
          <VALUE>{"", "", {"wisenheimer", "wisecrack", "wiseacre", "wise"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wis</NAME>
          <VALUE>{"", "ehp", {"wistful", "wisdom", "Wisconsin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wire</NAME>
          <VALUE>{"", "mt", {"wire"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wiretapp</NAME>
          <VALUE>{"", "", {"wiretapping", "wiretapper"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wiret</NAME>
          <VALUE>{"ap", "p", {"wiretap"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wirem</NAME>
          <VALUE>{"", "", {"wiremen", "wireman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wir</NAME>
          <VALUE>{"", "e", {"wiry"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Winte</NAME>
          <VALUE>{"r", "", {"wintertime", "Winters", "winter"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wint</NAME>
          <VALUE>{"", "e", {"wintry", "Winthrop"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wins</NAME>
          <VALUE>{"", "", {"Winston", "winsome", "Winslow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Winnip</NAME>
          <VALUE>{"e", "", {"Winnipesaukee", "Winnipeg"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Winni</NAME>
          <VALUE>{"", "p", {"Winnie"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Winn</NAME>
          <VALUE>{"", "i", {"winnow", "Winnetka"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wink</NAME>
          <VALUE>{"", "", {"winkle", "wink"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wingm</NAME>
          <VALUE>{"", "", {"wingmen", "wingman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wing</NAME>
          <VALUE>{"", "m", {"wingtip", "wingspan", "wingback", "wing"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> winem</NAME>
          <VALUE>{"a", "", {"winemaster", "winemake"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wine</NAME>
          <VALUE>{"", "m", {"wineskin", "winery", "wine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Winds</NAME>
          <VALUE>{"", "", {"windsurf", "windstorm", "Windsor", "windshield"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> windo</NAME>
          <VALUE>{"w", "", {"windowsill", "windowpane", "window"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> windb</NAME>
          <VALUE>{"", "", {"windbreak", "windbag"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wind</NAME>
          <VALUE>{"", "bos", {"windy", "windward", "windup", "windmill", "windfall", "wind"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Winch</NAME>
          <VALUE>{"", "", {"Winchester", "winch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> winc</NAME>
          <VALUE>{"", "h", {"wince"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> win</NAME>
          <VALUE>{"", "cdegknst", {"winy", "wino", "Winifred", "Winfield", "win"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wilso</NAME>
          <VALUE>{"n", "", {"Wilsonian", "Wilson"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wils</NAME>
          <VALUE>{"", "o", {"Wilshire"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wilm</NAME>
          <VALUE>{"", "", {"Wilmington", "Wilma"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> willow</NAME>
          <VALUE>{"", "", {"willowy", "willow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> willo</NAME>
          <VALUE>{"", "w", {"Willoughby"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Willia</NAME>
          <VALUE>{"m", "s", {"William"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Williams</NAME>
          <VALUE>{"", "", {"Williamson", "Williamsburg", "Williams"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Willi</NAME>
          <VALUE>{"", "a", {"Willis", "Willie"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Willa</NAME>
          <VALUE>{"", "", {"Willard", "Willa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Will</NAME>
          <VALUE>{"", "aio", {"Wills", "willful", "will"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wilkin</NAME>
          <VALUE>{"s", "", {"Wilkinson", "Wilkins"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wilki</NAME>
          <VALUE>{"", "n", {"Wilkie"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wilk</NAME>
          <VALUE>{"", "i", {"Wilkes"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wilh</NAME>
          <VALUE>{"elm", "", {"Wilhelmina", "Wilhelm"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wilf</NAME>
          <VALUE>{"", "", {"wilful", "Wilfred"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wile</NAME>
          <VALUE>{"", "", {"Wiley", "wile"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wildc</NAME>
          <VALUE>{"at", "", {"wildcatter", "wildcat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wild</NAME>
          <VALUE>{"", "c", {"wildlife", "wildfire", "wilderness", "wild"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wil</NAME>
          <VALUE>{"", "defhklms", {"wily", "wilt", "Wilcox", "Wilbur"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wiggl</NAME>
          <VALUE>{"", "", {"wiggly", "wiggle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wiggi</NAME>
          <VALUE>{"n", "", {"Wiggins", "wigging"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wigg</NAME>
          <VALUE>{"", "il", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wig</NAME>
          <VALUE>{"", "g", {"wigwam", "wigmake", "Wightman", "wig"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wie</NAME>
          <VALUE>{"", "", {"Wier", "wiener", "wield"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> widt</NAME>
          <VALUE>{"h", "", {"widthwise", "width"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wido</NAME>
          <VALUE>{"w", "", {"widowhood", "widow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> widg</NAME>
          <VALUE>{"e", "", {"widget", "widgeon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wide</NAME>
          <VALUE>{"", "", {"widespread", "widen", "wide"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wid</NAME>
          <VALUE>{"", "egot", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wick</NAME>
          <VALUE>{"", "", {"wicket", "wick"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wic</NAME>
          <VALUE>{"", "k", {"Wichita"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whos</NAME>
          <VALUE>{"", "", {"whosoever", "whose"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whoo</NAME>
          <VALUE>{"", "", {"whoosh", "whoop"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whom</NAME>
          <VALUE>{"", "", {"whomsoever", "whomever", "whom"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whole</NAME>
          <VALUE>{"", "s", {"wholehearted", "whole"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wholes</NAME>
          <VALUE>{"", "", {"wholesome", "wholesale"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whol</NAME>
          <VALUE>{"", "e", {"wholly"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> who'</NAME>
          <VALUE>{"", "", {"who'll", "who'd", "who've"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whiz</NAME>
          <VALUE>{"", "", {"whizzing", "whiz"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Whitt</NAME>
          <VALUE>{"", "", {"whittle", "Whittier", "Whittaker"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whiteh</NAME>
          <VALUE>{"", "", {"Whitehorse", "whitehead", "Whitehall"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> white</NAME>
          <VALUE>{"", "h", {"whitewash", "whitetail", "whiten", "whiteface", "white"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whit</NAME>
          <VALUE>{"", "et", {"Whitney", "Whitman", "Whitlock", "whither", "Whitcomb", "Whitaker", "whit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whist</NAME>
          <VALUE>{"le", "", {"whistleable", "whistle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whis</NAME>
          <VALUE>{"", "t", {"whisper", "whisk", "whish"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whirl</NAME>
          <VALUE>{"", "", {"whirlwind", "whirlpool", "whirligig", "whirl"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whir</NAME>
          <VALUE>{"", "l", {"whir"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whipp</NAME>
          <VALUE>{"", "", {"Whipple", "whippet", "Whippany"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whip</NAME>
          <VALUE>{"", "p", {"whipsaw", "whiplash", "whip"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whin</NAME>
          <VALUE>{"", "", {"whinny", "whine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whims</NAME>
          <VALUE>{"", "", {"whimsic", "whimsey"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whim</NAME>
          <VALUE>{"", "s", {"whimper", "whim"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whic</NAME>
          <VALUE>{"h", "", {"whichever", "which"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whet</NAME>
          <VALUE>{"", "", {"whet", "whether"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wherew</NAME>
          <VALUE>{"ith", "", {"wherewithal", "wherewith"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> where'</NAME>
          <VALUE>{"", "", {"where're", "where'd"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whereo</NAME>
          <VALUE>{"", "", {"whereon", "whereof"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wherea</NAME>
          <VALUE>{"", "", {"whereas", "whereabout"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wher</NAME>
          <VALUE>{"e", "ao'w", {"wherever", "whereupon", "wheresoever", "wherein", "wherefore", "whereby", "where"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> when</NAME>
          <VALUE>{"", "", {"whenever", "whence", "when"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whel</NAME>
          <VALUE>{"", "", {"whelp", "whelm", "Wheller", "whelk", "Whelan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wheez</NAME>
          <VALUE>{"", "", {"wheezy", "wheeze"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wheel</NAME>
          <VALUE>{"", "", {"wheelhouse", "wheelchair", "wheelbase", "wheel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whee</NAME>
          <VALUE>{"", "lz", {"wheedle", "whee"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Whea</NAME>
          <VALUE>{"t", "", {"Wheatstone", "wheat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> what'</NAME>
          <VALUE>{"", "", {"what're", "what'd"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> what</NAME>
          <VALUE>{"", "'", {"whatsoever", "whatnot", "Whatley", "whatever", "what"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Whar</NAME>
          <VALUE>{"", "", {"wharves", "Wharton", "wharf"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Whal</NAME>
          <VALUE>{"e", "", {"Whalen", "whale"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wha</NAME>
          <VALUE>{"", "lrt", {"wham", "whack"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wet</NAME>
          <VALUE>{"", "", {"wetland", "wet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> western</NAME>
          <VALUE>{"", "", {"westernmost", "western"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> weste</NAME>
          <VALUE>{"r", "n", {"westerly"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wesl</NAME>
          <VALUE>{"ey", "", {"Wesleyan", "Wesley"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> West</NAME>
          <VALUE>{"", "e", {"westward", "Weston", "Westminster", "Westinghouse", "Westfield", "Westchester", "westbound", "west"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wert</NAME>
          <VALUE>{"", "", {"Werther", "wert"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Were</NAME>
          <VALUE>{"", "", {"weren't", "were"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wer</NAME>
          <VALUE>{"", "et", {"Werner"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wend</NAME>
          <VALUE>{"", "", {"Wendy", "Wendell"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wen</NAME>
          <VALUE>{"", "d", {"went"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Welles</NAME>
          <VALUE>{"", "", {"Wellesley", "Welles"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Welle</NAME>
          <VALUE>{"", "s", {"Weller"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> well</NAME>
          <VALUE>{"", "e", {"Wells", "wellington", "wellbeing", "well"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Weld</NAME>
          <VALUE>{"", "", {"Weldon", "weld"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> welc</NAME>
          <VALUE>{"", "", {"welcome", "Welch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wel</NAME>
          <VALUE>{"", "cdl", {"welt", "welsh", "welfare"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> weir</NAME>
          <VALUE>{"", "", {"weird", "weir"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wein</NAME>
          <VALUE>{"", "", {"Weinstein", "Weinberg"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> weight</NAME>
          <VALUE>{"", "", {"weighty", "weight"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> weig</NAME>
          <VALUE>{"h", "t", {"weigh"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wei</NAME>
          <VALUE>{"", "gnr", {"Weiss", "Weierstrass", "Wei"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> weed</NAME>
          <VALUE>{"", "", {"weedy", "weed"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> week</NAME>
          <VALUE>{"", "", {"weekend", "weekday", "weeks", "week"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wed</NAME>
          <VALUE>{"", "", {"wedlock", "wedge", "wed", "wednesday"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> we'</NAME>
          <VALUE>{"", "", {"we've", "we'll", "we'd", "we're"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Web</NAME>
          <VALUE>{"", "", {"Webster", "weber", "Webb", "web"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> weathers</NAME>
          <VALUE>{"trip", "", {"weatherstripping", "weatherstrip"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> weat</NAME>
          <VALUE>{"her", "s", {"weatherproof", "weatherbeaten", "weather"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> weari</NAME>
          <VALUE>{"", "", {"wearisome", "wearied"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wear</NAME>
          <VALUE>{"", "i", {"wearable", "weary", "wear"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> weap</NAME>
          <VALUE>{"on", "", {"weaponry", "weapon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wealt</NAME>
          <VALUE>{"h", "", {"wealthy", "wealth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> weal</NAME>
          <VALUE>{"", "t", {"weal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> weak</NAME>
          <VALUE>{"", "", {"weaken", "weak"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wea</NAME>
          <VALUE>{"", "klprt", {"weave", "weasel", "wean"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ways</NAME>
          <VALUE>{"", "", {"wayside", "ways"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wayl</NAME>
          <VALUE>{"a", "", {"waylay", "waylaid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wax</NAME>
          <VALUE>{"", "", {"waxy", "waxwork", "waxen", "wax"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wave</NAME>
          <VALUE>{"", "fl", {"wavenumber", "waveguide", "wave"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wavel</NAME>
          <VALUE>{"e", "", {"wavelet", "wavelength"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wavef</NAME>
          <VALUE>{"", "", {"wavefront", "waveform"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wav</NAME>
          <VALUE>{"", "e", {"wavy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> watt</NAME>
          <VALUE>{"", "", {"Watts", "wattle", "wattage", "watt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> waters</NAME>
          <VALUE>{"", "", {"waterside", "watershed", "Waters"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> waterm</NAME>
          <VALUE>{"", "", {"watermelon", "Waterman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Waterl</NAME>
          <VALUE>{"", "", {"Waterloo", "waterline"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> waterf</NAME>
          <VALUE>{"", "", {"waterfront", "waterfall"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wate</NAME>
          <VALUE>{"r", "flms", {"watery", "waterway", "Watertown", "waterproof", "Waterhouse", "Watergate", "watercourse", "Waterbury", "water"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> watchma</NAME>
          <VALUE>{"", "", {"watchman", "watchmake"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> watchm</NAME>
          <VALUE>{"", "a", {"watchmen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> watc</NAME>
          <VALUE>{"h", "m", {"watchword", "watchful", "watchdog", "watchband", "watch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wat</NAME>
          <VALUE>{"", "cet", {"Watson", "Watkins", "Watanabe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> waste</NAME>
          <VALUE>{"", "", {"wastewater", "wasteland", "wasteful", "wastebasket", "waste"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wast</NAME>
          <VALUE>{"", "e", {"wastrel", "wastage", "wast"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wasp</NAME>
          <VALUE>{"", "", {"waspish", "wasp"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> washbo</NAME>
          <VALUE>{"", "", {"washbowl", "washboard"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> washb</NAME>
          <VALUE>{"", "o", {"Washburn", "washbasin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wash</NAME>
          <VALUE>{"", "b", {"washy", "washout", "wash", "washington"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wart</NAME>
          <VALUE>{"", "", {"warty", "wartime", "wart"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> warra</NAME>
          <VALUE>{"nt", "", {"warranty", "warrant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> warr</NAME>
          <VALUE>{"", "a", {"warrior", "warren"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> warp</NAME>
          <VALUE>{"", "", {"warplane", "warp"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> warm</NAME>
          <VALUE>{"", "", {"warmup", "warmth", "warmonger", "warmish", "warmhearted", "warm"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wareh</NAME>
          <VALUE>{"ouse", "", {"warehouseman", "warehouse"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ware</NAME>
          <VALUE>{"", "h", {"ware"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wardr</NAME>
          <VALUE>{"o", "", {"wardroom", "wardrobe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ward</NAME>
          <VALUE>{"", "r", {"warden", "ward"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> war</NAME>
          <VALUE>{"", "demprt", {"wary", "Warwick", "Warsaw", "warn", "warlike", "Waring", "warhead", "warfare", "warble", "war"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wap</NAME>
          <VALUE>{"", "", {"Wappinger", "wapiti", "wapato"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wang</NAME>
          <VALUE>{"", "", {"wangle", "Wang"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wand</NAME>
          <VALUE>{"", "", {"wander", "wand"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> want</NAME>
          <VALUE>{"", "", {"wanton", "wants", "wanting", "wanted", "want"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> waltz</NAME>
          <VALUE>{"", "", {"waltzing", "waltz"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Walte</NAME>
          <VALUE>{"r", "", {"Walters", "Walter"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Walt</NAME>
          <VALUE>{"", "ez", {"Walton", "Waltham", "Walt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wallo</NAME>
          <VALUE>{"", "", {"wallow", "wallop"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> walle</NAME>
          <VALUE>{"", "", {"wallet", "Waller"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Walla</NAME>
          <VALUE>{"", "", {"Wallace", "wallaby"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wall</NAME>
          <VALUE>{"", "aeo", {"wally", "Walls", "wallpaper", "Wallis", "wallboard", "wall"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> walko</NAME>
          <VALUE>{"", "", {"walkover", "walkout"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> walk</NAME>
          <VALUE>{"", "o", {"walkway", "walkie", "walk"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Waldo</NAME>
          <VALUE>{"", "", {"Waldorf", "Waldo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wald</NAME>
          <VALUE>{"", "o", {"Waldron", "Walden"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wal</NAME>
          <VALUE>{"", "dklt", {"Walsh", "walrus", "Walpole", "walnut", "Walgreen", "wale", "Walcott"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wakef</NAME>
          <VALUE>{"", "", {"wakeful", "Wakefield"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wak</NAME>
          <VALUE>{"e", "f", {"wakeup", "wakerobin", "waken", "wake"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wait</NAME>
          <VALUE>{"", "", {"waitress", "Waite", "wait"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wais</NAME>
          <VALUE>{"t", "", {"waistline", "waistcoat", "waist"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wain</NAME>
          <VALUE>{"", "", {"Wainwright", "wainscot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wai</NAME>
          <VALUE>{"", "nst", {"waive", "wail"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Wah</NAME>
          <VALUE>{"", "", {"Wahl", "wah"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wagg</NAME>
          <VALUE>{"", "", {"waggle", "wagging"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wag</NAME>
          <VALUE>{"", "g", {"wagoneer", "Wagner", "wage", "wag"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> waf</NAME>
          <VALUE>{"", "", {"wafer", "waffle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wad</NAME>
          <VALUE>{"", "", {"Wadsworth", "wadi", "wade", "waddle", "wad"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wack</NAME>
          <VALUE>{"", "", {"wacky", "wacke", "wack"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wac</NAME>
          <VALUE>{"", "k", {"Waco", "WAC"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vu</NAME>
          <VALUE>{"l", "", {"vulture", "vulpine", "vulnerable", "vulgar", "Vulcan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vow</NAME>
          <VALUE>{"", "", {"vowel", "vow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vouc</NAME>
          <VALUE>{"h", "", {"vouchsafe", "vouch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vou</NAME>
          <VALUE>{"", "c", {"Vought"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vot</NAME>
          <VALUE>{"", "", {"votive", "vote", "votary"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vorti</NAME>
          <VALUE>{"c", "", {"vorticity", "vortices"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vort</NAME>
          <VALUE>{"", "i", {"vortex"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vora</NAME>
          <VALUE>{"ci", "", {"voracity", "voracious"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vor</NAME>
          <VALUE>{"", "at", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> volunta</NAME>
          <VALUE>{"r", "", {"voluntary", "voluntarism"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> volun</NAME>
          <VALUE>{"t", "a", {"volunteer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> volume</NAME>
          <VALUE>{"", "", {"volumetric", "volume"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> volum</NAME>
          <VALUE>{"", "e", {"voluminous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> volu</NAME>
          <VALUE>{"", "mn", {"voluptuous", "voluble"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Voltai</NAME>
          <VALUE>{"", "", {"Voltaire", "voltaic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> volta</NAME>
          <VALUE>{"", "i", {"voltage", "Volta"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Volt</NAME>
          <VALUE>{"", "a", {"voltmeter", "Volterra", "volt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> voll</NAME>
          <VALUE>{"ey", "", {"volleyball", "volley"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> volcani</NAME>
          <VALUE>{"", "", {"volcanism", "volcanic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> volc</NAME>
          <VALUE>{"an", "i", {"volcano"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vol</NAME>
          <VALUE>{"", "cltu", {"Volvo", "Volstead", "Volkswagen", "volition", "volatile"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> voic</NAME>
          <VALUE>{"e", "", {"voiceband", "voices", "voice"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vog</NAME>
          <VALUE>{"", "", {"vogue", "Vogel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> voca</NAME>
          <VALUE>{"", "bl", {"vocate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vocal</NAME>
          <VALUE>{"", "", {"vocalic", "vocal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vocab</NAME>
          <VALUE>{"", "u", {"vocable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vocabu</NAME>
          <VALUE>{"lar", "", {"vocabulary", "vocabularian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> voc</NAME>
          <VALUE>{"", "a", {"vociferous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> voi</NAME>
          <VALUE>{"", "c", {"void"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vl</NAME>
          <VALUE>{"adi", "", {"Vladivostok", "Vladimir"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vivi</NAME>
          <VALUE>{"", "", {"vivify", "vivid", "Vivian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Viva</NAME>
          <VALUE>{"", "c", {"Vivaldi", "viva"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vivaci</NAME>
          <VALUE>{"", "", {"vivacity", "vivacious"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vivac</NAME>
          <VALUE>{"", "i", {"vivace"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> viv</NAME>
          <VALUE>{"", "ai", {"vivo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vitrio</NAME>
          <VALUE>{"l", "", {"vitriolic", "vitriol"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vitri</NAME>
          <VALUE>{"", "o", {"vitrify"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vitr</NAME>
          <VALUE>{"", "i", {"vitro", "vitreous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vita</NAME>
          <VALUE>{"", "", {"vitamin", "vital", "vitae", "vita"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vit</NAME>
          <VALUE>{"", "ar", {"Vito", "vitiate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> visit</NAME>
          <VALUE>{"", "", {"visitor", "visitation", "visit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> visio</NAME>
          <VALUE>{"n", "", {"visionary", "vision"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Visi</NAME>
          <VALUE>{"", "ot", {"Visigoth", "visible"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> viscou</NAME>
          <VALUE>{"", "", {"viscous", "viscount"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> visco</NAME>
          <VALUE>{"", "u", {"viscosity", "viscometer", "viscoelastic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> visce</NAME>
          <VALUE>{"ra", "", {"visceral", "viscera"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> visc</NAME>
          <VALUE>{"", "eo", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> visa</NAME>
          <VALUE>{"", "", {"visage", "visa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vis</NAME>
          <VALUE>{"", "aci", {"visual", "vista", "visor", "Vishnu", "vise", "vis"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> viru</NAME>
          <VALUE>{"", "", {"virus", "virulent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> virtuos</NAME>
          <VALUE>{"", "i", {"virtuoso"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> virtuosi</NAME>
          <VALUE>{"", "", {"virtuosity", "virtuosi"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> virtuo</NAME>
          <VALUE>{"", "s", {"virtuous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> virt</NAME>
          <VALUE>{"u", "o", {"virtue", "virtual"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> virg</NAME>
          <VALUE>{"", "i", {"virgule", "Virgo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Virgi</NAME>
          <VALUE>{"", "n", {"Virgil"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Virgini</NAME>
          <VALUE>{"a", "", {"Virginian", "Virginia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> virgin</NAME>
          <VALUE>{"", "i", {"virginal", "virgin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vir</NAME>
          <VALUE>{"", "gtu", {"virile"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> viole</NAME>
          <VALUE>{"", "", {"violet", "violent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> viola</NAME>
          <VALUE>{"", "", {"violate", "viola"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vio</NAME>
          <VALUE>{"l", "ae", {"violin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vint</NAME>
          <VALUE>{"", "", {"vintner", "vintage"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vine</NAME>
          <VALUE>{"", "", {"vineyard", "vinegar", "vine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vind</NAME>
          <VALUE>{"ic", "", {"vindictive", "vindicate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vin</NAME>
          <VALUE>{"", "det", {"vinyl", "Vinson", "Vincent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> villa</NAME>
          <VALUE>{"", "i", {"village", "villa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> villai</NAME>
          <VALUE>{"n", "", {"villainous", "villain"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vill</NAME>
          <VALUE>{"", "a", {"villein"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vil</NAME>
          <VALUE>{"", "l", {"vilify", "vile"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vii</NAME>
          <VALUE>{"", "", {"viii", "vii"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vigi</NAME>
          <VALUE>{"l", "a", {"vigil"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vigila</NAME>
          <VALUE>{"nt", "", {"vigilantism", "vigilante", "vigilant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vig</NAME>
          <VALUE>{"", "i", {"vigorous", "vignette"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> viewp</NAME>
          <VALUE>{"o", "", {"viewport", "viewpoint"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vietn</NAME>
          <VALUE>{"am", "", {"Vietnamese", "Vietnam"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Viet</NAME>
          <VALUE>{"", "n", {"Viet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vienn</NAME>
          <VALUE>{"", "", {"Viennese", "Vienna"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vien</NAME>
          <VALUE>{"", "n", {"Vientiane"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> view</NAME>
          <VALUE>{"", "p", {"views", "view"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> video</NAME>
          <VALUE>{"", "", {"videotape", "video"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vide</NAME>
          <VALUE>{"", "o", {"vide"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vid</NAME>
          <VALUE>{"", "e", {"Vida"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> victoria</NAME>
          <VALUE>{"", "", {"Victorian", "Victoria"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Victori</NAME>
          <VALUE>{"", "a", {"victorious"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Victo</NAME>
          <VALUE>{"r", "i", {"victory", "victor"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vict</NAME>
          <VALUE>{"", "o", {"victual", "victrola", "victim"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vick</NAME>
          <VALUE>{"", "", {"Vicky", "Vicksburg"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vicin</NAME>
          <VALUE>{"", "", {"vicinity", "vicinal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vici</NAME>
          <VALUE>{"", "n", {"vicissitude", "vicious"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vice</NAME>
          <VALUE>{"", "", {"viceroy", "vice"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vica</NAME>
          <VALUE>{"r", "", {"vicarious", "vicar"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vic</NAME>
          <VALUE>{"", "aeikt", {"Vichy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vibr</NAME>
          <VALUE>{"a", "t", {"vibrant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vibrat</NAME>
          <VALUE>{"", "", {"vibrato", "vibrate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vib</NAME>
          <VALUE>{"", "r", {"viburnum"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> via</NAME>
          <VALUE>{"", "", {"vial", "viaduct", "via"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vie</NAME>
          <VALUE>{"", "wnt", {"vie"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vexa</NAME>
          <VALUE>{"tio", "", {"vexatious", "vexation"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vex</NAME>
          <VALUE>{"", "a", {"vex"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> veteri</NAME>
          <VALUE>{"nar", "", {"veterinary", "veterinarian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vete</NAME>
          <VALUE>{"r", "i", {"veteran"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vet</NAME>
          <VALUE>{"", "e", {"veto", "vetch", "vet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vestig</NAME>
          <VALUE>{"", "", {"vestigial", "vestige"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vesti</NAME>
          <VALUE>{"", "g", {"vestibule"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vest</NAME>
          <VALUE>{"", "i", {"vestry", "vestal", "vest"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ves</NAME>
          <VALUE>{"", "t", {"vessel", "vesper", "vesicular"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vertic</NAME>
          <VALUE>{"", "a", {"vertices"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> verti</NAME>
          <VALUE>{"", "c", {"vertigo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> verte</NAME>
          <VALUE>{"", "b", {"vertex"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> verteb</NAME>
          <VALUE>{"ra", "", {"vertebrate", "vertebral", "vertebrae", "vertebra"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vert</NAME>
          <VALUE>{"", "ei", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> versa</NAME>
          <VALUE>{"", "t", {"Versailles", "versa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> versat</NAME>
          <VALUE>{"", "", {"versatile", "versatec"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vers</NAME>
          <VALUE>{"", "a", {"versus", "version", "verse"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vero</NAME>
          <VALUE>{"n", "", {"Veronica", "Verona"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Verna</NAME>
          <VALUE>{"", "", {"vernal", "vernacular", "Verna"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vern</NAME>
          <VALUE>{"", "a", {"Vernon", "vernier", "Verne"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vermo</NAME>
          <VALUE>{"", "", {"vermouth", "Vermont"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vermi</NAME>
          <VALUE>{"", "", {"vermin", "vermilion", "vermiculite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> verm</NAME>
          <VALUE>{"", "io", {"vermeil"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> verit</NAME>
          <VALUE>{"", "", {"verity", "veritable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> veri</NAME>
          <VALUE>{"", "t", {"verisimilitude", "verify", "veridic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> verdi</NAME>
          <VALUE>{"", "", {"verdict", "Verdi"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Verd</NAME>
          <VALUE>{"", "i", {"Verde", "verdant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> verbo</NAME>
          <VALUE>{"s", "", {"verbosity", "verbose"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> verba</NAME>
          <VALUE>{"", "", {"verbatim", "verbal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> verb</NAME>
          <VALUE>{"", "ao", {"verbiage", "verbena", "verb"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> veran</NAME>
          <VALUE>{"da", "", {"verandah", "veranda"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> verac</NAME>
          <VALUE>{"i", "", {"veracity", "veracious"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vera</NAME>
          <VALUE>{"", "cn", {"Vera"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Ver</NAME>
          <VALUE>{"", "abdimnost", {"verve", "Verlag", "verge", "very"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Venu</NAME>
          <VALUE>{"s", "", {"Venusian", "Venus"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> venture</NAME>
          <VALUE>{"", "", {"venturesome", "venture"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ventu</NAME>
          <VALUE>{"r", "e", {"venturi"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vent</NAME>
          <VALUE>{"", "u", {"ventricle", "ventilate", "vent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> venom</NAME>
          <VALUE>{"", "", {"venomous", "venom"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> veno</NAME>
          <VALUE>{"", "m", {"venous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Veni</NAME>
          <VALUE>{"", "", {"venison", "Venice", "venial"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> veng</NAME>
          <VALUE>{"e", "", {"vengeful", "vengeance"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Venet</NAME>
          <VALUE>{"", "", {"Veneto", "Venetian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> venera</NAME>
          <VALUE>{"", "", {"venerate", "venerable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vener</NAME>
          <VALUE>{"", "a", {"venereal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vene</NAME>
          <VALUE>{"", "rt", {"Venezuela", "veneer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vend</NAME>
          <VALUE>{"", "", {"vendor", "vendible", "vendetta", "vend"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ven</NAME>
          <VALUE>{"", "degiotu", {"venal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> velv</NAME>
          <VALUE>{"et", "", {"velvety", "velvet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> velo</NAME>
          <VALUE>{"", "", {"velours", "velocity"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vell</NAME>
          <VALUE>{"", "", {"vellum", "Vella"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vela</NAME>
          <VALUE>{"", "", {"Velasquez", "velar"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vel</NAME>
          <VALUE>{"", "alov", {"veldt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vei</NAME>
          <VALUE>{"", "", {"vein", "veil"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vehi</NAME>
          <VALUE>{"c", "", {"vehicular", "vehicle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> veh</NAME>
          <VALUE>{"", "i", {"vehement"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vege</NAME>
          <VALUE>{"ta", "", {"vegetate", "vegetarian", "vegetable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> veg</NAME>
          <VALUE>{"", "e", {"Vega"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> veer</NAME>
          <VALUE>{"", "", {"veery", "veer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vee</NAME>
          <VALUE>{"", "r", {"vee"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vec</NAME>
          <VALUE>{"tor", "", {"vectorial", "vector"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ve</NAME>
          <VALUE>{"", "ceghilnrstx", {"Veda", "veal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vaug</NAME>
          <VALUE>{"h", "", {"Vaughn", "Vaughan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vaud</NAME>
          <VALUE>{"", "", {"Vaudois", "vaudeville"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vau</NAME>
          <VALUE>{"", "dg", {"vaunt", "vault"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vat</NAME>
          <VALUE>{"", "", {"Vatican", "vat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vass</NAME>
          <VALUE>{"a", "", {"Vassar", "vassal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vase</NAME>
          <VALUE>{"", "", {"vasectomy", "vase"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vas</NAME>
          <VALUE>{"", "es", {"vast", "Vasquez", "vascular"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vari</NAME>
          <VALUE>{"", "ae", {"Varitype", "varistor", "various"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> varie</NAME>
          <VALUE>{"", "", {"variety", "variegate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> varian</NAME>
          <VALUE>{"", "", {"variant", "Varian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> varia</NAME>
          <VALUE>{"", "n", {"variate", "variac", "variable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> var</NAME>
          <VALUE>{"", "i", {"vary", "varsity", "varnish"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vap</NAME>
          <VALUE>{"", "", {"vaporous", "vapid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vani</NAME>
          <VALUE>{"", "", {"vanity", "vanish", "vanilla"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vander</NAME>
          <VALUE>{"", "", {"Vanderpoel", "Vanderbilt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vande</NAME>
          <VALUE>{"", "r", {"Vandenberg"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vand</NAME>
          <VALUE>{"", "e", {"vandal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vanc</NAME>
          <VALUE>{"", "", {"Vancouver", "Vance"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> van</NAME>
          <VALUE>{"", "cdi", {"vantage", "vanquish", "vanguard", "vane", "vanadium", "van"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vam</NAME>
          <VALUE>{"p", "", {"vampire", "vamp"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> valu</NAME>
          <VALUE>{"", "", {"valuate", "value"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vall</NAME>
          <VALUE>{"e", "", {"valley", "Valletta"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> valid</NAME>
          <VALUE>{"", "", {"validate", "valid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vali</NAME>
          <VALUE>{"", "d", {"valine", "valiant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Valer</NAME>
          <VALUE>{"", "", {"Valery", "Valerie"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> valen</NAME>
          <VALUE>{"t", "", {"valentine", "valent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> valedicto</NAME>
          <VALUE>{"r", "", {"valedictory", "valedictorian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> valed</NAME>
          <VALUE>{"ict", "o", {"valediction"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vale</NAME>
          <VALUE>{"", "dnr", {"valeur", "valet", "vale"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> val</NAME>
          <VALUE>{"", "eilu", {"valve", "Valparaiso", "Valois", "Valkyrie", "Valhalla"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vain</NAME>
          <VALUE>{"", "", {"vainglorious", "vain"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vai</NAME>
          <VALUE>{"", "n", {"Vail"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vagi</NAME>
          <VALUE>{"na", "", {"vaginal", "vagina"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vaga</NAME>
          <VALUE>{"", "", {"vagary", "vagabond"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vag</NAME>
          <VALUE>{"", "ai", {"vague", "vagrant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Vad</NAME>
          <VALUE>{"", "", {"Vaduz", "vade"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vacuol</NAME>
          <VALUE>{"", "", {"vacuole", "vacuolate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vacuo</NAME>
          <VALUE>{"", "l", {"vacuous", "vacuo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vacu</NAME>
          <VALUE>{"", "o", {"vacuum", "vacua"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vacc</NAME>
          <VALUE>{"in", "", {"vaccine", "vaccinate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vaca</NAME>
          <VALUE>{"", "t", {"vacant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vacat</NAME>
          <VALUE>{"", "", {"vacationland", "vacate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vac</NAME>
          <VALUE>{"", "acu", {"vacillate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> utt</NAME>
          <VALUE>{"er", "", {"uttermost", "utterance", "utter"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> uto</NAME>
          <VALUE>{"pia", "", {"utopian", "utopia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> utili</NAME>
          <VALUE>{"t", "", {"utilities", "utility", "utilitarian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> util</NAME>
          <VALUE>{"", "i", {"utile"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> uti</NAME>
          <VALUE>{"", "l", {"Utica"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> uter</NAME>
          <VALUE>{"", "", {"uterus", "uterine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ute</NAME>
          <VALUE>{"", "r", {"utensil"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Ut</NAME>
          <VALUE>{"", "eiot", {"Utrecht", "utmost", "Utah", "UT"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> usurp</NAME>
          <VALUE>{"", "", {"usurpation", "usurp"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> usur</NAME>
          <VALUE>{"", "p", {"usury", "usurious", "usurer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> usua</NAME>
          <VALUE>{"l", "", {"usually", "usual"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> USI</NAME>
          <VALUE>{"", "", {"USIA", "using"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> USC</NAME>
          <VALUE>{"", "", {"USC&amp;GS", "USC"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> usa</NAME>
          <VALUE>{"", "", {"usage", "USAF", "usable", "USA"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> U.</NAME>
          <VALUE>{"S", "", {"U.S.A", "U.S"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Ursu</NAME>
          <VALUE>{"l", "", {"Ursuline", "Ursula"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Urs</NAME>
          <VALUE>{"", "u", {"Ursa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> urina</NAME>
          <VALUE>{"", "", {"urinary", "urinal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> urin</NAME>
          <VALUE>{"", "a", {"urine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> uri</NAME>
          <VALUE>{"", "n", {"Uris", "Uri"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> urge</NAME>
          <VALUE>{"", "n", {"urge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> urgen</NAME>
          <VALUE>{"", "", {"urgent", "urgency"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> urg</NAME>
          <VALUE>{"", "e", {"urging"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> uret</NAME>
          <VALUE>{"h", "", {"urethra", "urethane"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ure</NAME>
          <VALUE>{"", "t", {"uremia", "urea"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Urb</NAME>
          <VALUE>{"an", "", {"urbanite", "urbane", "Urbana", "urban"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ura</NAME>
          <VALUE>{"", "n", {"uracil"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Urani</NAME>
          <VALUE>{"", "", {"uranium", "urania"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> uran</NAME>
          <VALUE>{"", "i", {"uranyl", "Uranus"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ur</NAME>
          <VALUE>{"", "abegis", {"Uruguay", "urn", "urchin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upw</NAME>
          <VALUE>{"", "", {"upwind", "upward"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upto</NAME>
          <VALUE>{"", "", {"uptown", "Upton"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Upt</NAME>
          <VALUE>{"", "o", {"upturn", "uptrend", "uptake"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upsta</NAME>
          <VALUE>{"", "t", {"upstart", "upstand", "upstair"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upstat</NAME>
          <VALUE>{"e", "", {"upstater", "upstate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upst</NAME>
          <VALUE>{"", "a", {"upstream"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upsi</NAME>
          <VALUE>{"", "", {"upsilon", "upside"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upse</NAME>
          <VALUE>{"t", "", {"upsetting", "upset"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ups</NAME>
          <VALUE>{"", "eit", {"upswing", "upsurge", "upslope", "upshot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> uproa</NAME>
          <VALUE>{"r", "", {"uproarious", "uproar"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upro</NAME>
          <VALUE>{"", "a", {"uproot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upri</NAME>
          <VALUE>{"", "", {"upriver", "uprise", "upright"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upr</NAME>
          <VALUE>{"", "io", {"upraise"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> uppercl</NAME>
          <VALUE>{"assm", "", {"upperclassmen", "upperclassman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upperc</NAME>
          <VALUE>{"", "l", {"uppercut"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upp</NAME>
          <VALUE>{"er", "c", {"uppermost", "upper"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upl</NAME>
          <VALUE>{"", "", {"uplift", "upland"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> uphols</NAME>
          <VALUE>{"ter", "", {"upholstery", "upholster"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upho</NAME>
          <VALUE>{"l", "s", {"uphold"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> uphe</NAME>
          <VALUE>{"", "", {"upheld", "upheaval"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> uph</NAME>
          <VALUE>{"", "eo", {"uphill"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upd</NAME>
          <VALUE>{"", "", {"updraft", "update"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upbr</NAME>
          <VALUE>{"", "", {"upbring", "upbraid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> upb</NAME>
          <VALUE>{"", "r", {"upbeat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unive</NAME>
          <VALUE>{"rs", "", {"universe", "universal", "university"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> univa</NAME>
          <VALUE>{"", "", {"univariate", "univalent", "Univac"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Univ</NAME>
          <VALUE>{"", "ae", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unite</NAME>
          <VALUE>{"", "", {"unite", "united"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unitar</NAME>
          <VALUE>{"", "", {"unitary", "unitarian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unita</NAME>
          <VALUE>{"", "r", {"unital"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unit</NAME>
          <VALUE>{"", "ae", {"unity", "unit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unis</NAME>
          <VALUE>{"", "", {"unison", "unisex"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unip</NAME>
          <VALUE>{"", "", {"uniprocessor", "unipolar", "uniplex"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unim</NAME>
          <VALUE>{"od", "", {"unimodular", "unimodal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unif</NAME>
          <VALUE>{"", "", {"unify", "uniform"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unid</NAME>
          <VALUE>{"i", "", {"unidirectional", "unidimensional"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unde</NAME>
          <VALUE>{"r", "c", {"understand", "underling", "under"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> underc</NAME>
          <VALUE>{"lassm", "", {"underclassmen", "underclassman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> und</NAME>
          <VALUE>{"", "e", {"undulate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unc</NAME>
          <VALUE>{"", "l", {"unceremoniously", "unction", "uncouth", "unchristian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unb</NAME>
          <VALUE>{"", "", {"unbidden", "unbeknownst"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unan</NAME>
          <VALUE>{"im", "", {"unanimous", "unanimity"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> una</NAME>
          <VALUE>{"", "n", {"unary"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> umb</NAME>
          <VALUE>{"", "ir", {"umber"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> umbra</NAME>
          <VALUE>{"", "", {"umbrage", "umbra"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> umbr</NAME>
          <VALUE>{"", "a", {"umbrella"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> umbi</NAME>
          <VALUE>{"lic", "", {"umbilicus", "umbilici", "umbilical"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> um</NAME>
          <VALUE>{"", "b", {"umpire", "umlaut"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ulti</NAME>
          <VALUE>{"mat", "", {"ultimatum", "ultimate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ult</NAME>
          <VALUE>{"", "i", {"ultra", "ulterior"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ulc</NAME>
          <VALUE>{"er", "", {"ulcerate", "ulcer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ul</NAME>
          <VALUE>{"", "ct", {"Ulysses", "Ulster", "Ullman", "Ulan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Ukr</NAME>
          <VALUE>{"ain", "", {"Ukrainian", "Ukraine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Uk</NAME>
          <VALUE>{"", "r", {"UK"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ug</NAME>
          <VALUE>{"", "", {"ugly", "ugh", "Uganda"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ub</NAME>
          <VALUE>{"iquit", "", {"ubiquity", "ubiquitous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tyra</NAME>
          <VALUE>{"n", "n", {"tyrant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tyrann</NAME>
          <VALUE>{"", "i", {"tyranny", "Tyrannosaurus"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tyranni</NAME>
          <VALUE>{"c", "", {"tyrannicide", "tyrannic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tyr</NAME>
          <VALUE>{"", "a", {"tyrosine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> typog</NAME>
          <VALUE>{"raph", "", {"typography", "typographer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> typo</NAME>
          <VALUE>{"", "g", {"typology", "typo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> typi</NAME>
          <VALUE>{"", "", {"typing", "typify", "typic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> typho</NAME>
          <VALUE>{"", "", {"typhoon", "Typhon", "typhoid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Typh</NAME>
          <VALUE>{"", "o", {"typhus"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> type</NAME>
          <VALUE>{"", "sw", {"typed", "typeface", "type"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> typew</NAME>
          <VALUE>{"rit", "", {"typewritten", "typewrite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> typesett</NAME>
          <VALUE>{"", "", {"typesetting", "typesetter"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> typese</NAME>
          <VALUE>{"t", "t", {"typeset"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> types</NAME>
          <VALUE>{"", "e", {"typescript", "types"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Typ</NAME>
          <VALUE>{"", "ehio", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> two</NAME>
          <VALUE>{"", "", {"twosome", "Twombly", "twofold", "two"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> twitc</NAME>
          <VALUE>{"h", "", {"twitchy", "twitch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> twit</NAME>
          <VALUE>{"", "c", {"twit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> twis</NAME>
          <VALUE>{"t", "", {"twisty", "twist"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> twir</NAME>
          <VALUE>{"l", "", {"twirly", "twirl"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> twin</NAME>
          <VALUE>{"", "", {"twinkle", "twinge", "twine", "twin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> twil</NAME>
          <VALUE>{"", "", {"twill", "twilight"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> twig</NAME>
          <VALUE>{"", "", {"twigging", "twig"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> twi</NAME>
          <VALUE>{"", "glnrst", {"twiddle", "twice"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> twen</NAME>
          <VALUE>{"t", "", {"twenty", "twentieth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> twel</NAME>
          <VALUE>{"", "", {"twelve", "twelfth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tweed</NAME>
          <VALUE>{"", "", {"tweedy", "tweed"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> twee</NAME>
          <VALUE>{"", "d", {"tweeze"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> twe</NAME>
          <VALUE>{"", "eln", {"tweak"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> twa</NAME>
          <VALUE>{"", "", {"twain", "twaddle", "TWA"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> TW</NAME>
          <VALUE>{"", "aeio", {"TWX"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> TV</NAME>
          <VALUE>{"", "", {"TVA", "TV"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tuto</NAME>
          <VALUE>{"r", "", {"tutorial", "tutor"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tut</NAME>
          <VALUE>{"", "o", {"tutu", "Tuttle", "tutelage"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tusk</NAME>
          <VALUE>{"", "", {"Tuskegee", "tusk"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tusc</NAME>
          <VALUE>{"a", "n", {"Tuscarora", "Tuscaloosa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tuscan</NAME>
          <VALUE>{"", "", {"Tuscany", "Tuscan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tus</NAME>
          <VALUE>{"", "ck", {"tussle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> turt</NAME>
          <VALUE>{"le", "", {"turtleneck", "turtleback", "turtle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> turp</NAME>
          <VALUE>{"", "", {"turpitude", "turpentine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> turno</NAME>
          <VALUE>{"", "", {"turnover", "turnout", "turnoff"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> turne</NAME>
          <VALUE>{"", "", {"turnery", "turned"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> turna</NAME>
          <VALUE>{"", "", {"turnaround", "turnabout"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> turk</NAME>
          <VALUE>{"", "", {"Turkish", "turkey", "turk"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Turi</NAME>
          <VALUE>{"n", "", {"Turing", "Turin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> turbo</NAME>
          <VALUE>{"", "", {"turbojet", "turbofan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> turbin</NAME>
          <VALUE>{"", "", {"turbine", "turbinate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> turbid</NAME>
          <VALUE>{"", "", {"turbidity", "turbid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> turbi</NAME>
          <VALUE>{"", "dn", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> turb</NAME>
          <VALUE>{"", "io", {"turbulent", "turban"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> turn</NAME>
          <VALUE>{"", "aeo", {"turntable", "turnstone", "turnpike", "turnkey", "turnip", "turn"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tup</NAME>
          <VALUE>{"", "", {"tuple", "tupelo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tunis</NAME>
          <VALUE>{"", "", {"Tunisia", "Tunis"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tuni</NAME>
          <VALUE>{"", "s", {"tunic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tungs</NAME>
          <VALUE>{"t", "", {"tungsten", "tungstate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tung</NAME>
          <VALUE>{"", "s", {"tung"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tune</NAME>
          <VALUE>{"", "", {"tuned", "tuneful", "tune"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tun</NAME>
          <VALUE>{"", "egi", {"tunnel", "tundra", "tuna", "tun"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tumu</NAME>
          <VALUE>{"lt", "", {"tumultuous", "tumult"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tumb</NAME>
          <VALUE>{"", "", {"tumbrel", "tumble"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tum</NAME>
          <VALUE>{"", "bu", {"tum"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tula</NAME>
          <VALUE>{"", "", {"tularemia", "Tulane"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tul</NAME>
          <VALUE>{"", "a", {"Tulsa", "tulle", "tulip"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tug</NAME>
          <VALUE>{"", "", {"tugging", "tug"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tuf</NAME>
          <VALUE>{"", "", {"tuft", "tuff"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tuck</NAME>
          <VALUE>{"", "", {"Tucker", "tuck"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tuc</NAME>
          <VALUE>{"", "k", {"Tucson"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tubu</NAME>
          <VALUE>{"l", "", {"tubule", "tubular"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tuber</NAME>
          <VALUE>{"cul", "", {"tuberculosis", "tuberculin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tube</NAME>
          <VALUE>{"", "r", {"tube"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tub</NAME>
          <VALUE>{"", "eu", {"tuba", "tub"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> TT</NAME>
          <VALUE>{"", "", {"TTY", "TTL"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tsa</NAME>
          <VALUE>{"r", "", {"tsarina", "tsar"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ts</NAME>
          <VALUE>{"", "a", {"tsunami"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trut</NAME>
          <VALUE>{"h", "", {"truthful", "truth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trust</NAME>
          <VALUE>{"", "", {"trustworthy", "trustful", "trustee", "trust"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trus</NAME>
          <VALUE>{"", "t", {"truss"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trun</NAME>
          <VALUE>{"", "c", {"trunk", "trundle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trumpe</NAME>
          <VALUE>{"", "", {"trumpet", "trumpery"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trump</NAME>
          <VALUE>{"", "e", {"trump"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Trum</NAME>
          <VALUE>{"", "p", {"Trumbull", "Truman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Trud</NAME>
          <VALUE>{"", "", {"Trudy", "trudge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> truc</NAME>
          <VALUE>{"", "", {"truculent", "truck", "truce"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trua</NAME>
          <VALUE>{"n", "", {"truant", "truancy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Trout</NAME>
          <VALUE>{"", "", {"Troutman", "trout"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> troub</NAME>
          <VALUE>{"", "l", {"troubador"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> troubles</NAME>
          <VALUE>{"", "", {"troublesome", "troubleshoot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> troubl</NAME>
          <VALUE>{"e", "s", {"trouble"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trou</NAME>
          <VALUE>{"", "bt", {"trouser", "troupe", "trounce", "trough"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tropos</NAME>
          <VALUE>{"pher", "", {"tropospheric", "troposphere"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tropo</NAME>
          <VALUE>{"", "s", {"tropopause"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> troph</NAME>
          <VALUE>{"", "", {"trophy", "trophic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trop</NAME>
          <VALUE>{"", "ho", {"tropic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trom</NAME>
          <VALUE>{"", "", {"trompe", "trombone"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trol</NAME>
          <VALUE>{"l", "", {"trollop", "trolley", "troll"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trod</NAME>
          <VALUE>{"", "", {"trodden", "trod"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tro</NAME>
          <VALUE>{"", "dlmpu", {"troy", "trot", "troop", "Trojan", "troika", "troglodyte"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trivia</NAME>
          <VALUE>{"", "", {"trivial", "trivia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trivi</NAME>
          <VALUE>{"", "a", {"trivium"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> triv</NAME>
          <VALUE>{"", "i", {"trivalent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trium</NAME>
          <VALUE>{"ph", "a", {"triumph"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> triumpha</NAME>
          <VALUE>{"", "", {"triumphant", "triumphal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> triu</NAME>
          <VALUE>{"", "m", {"triune"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trit</NAME>
          <VALUE>{"", "", {"triton", "tritium", "trite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trist</NAME>
          <VALUE>{"a", "", {"tristate", "Tristan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tris</NAME>
          <VALUE>{"", "t", {"trisyllable", "trisodium"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tripo</NAME>
          <VALUE>{"", "", {"tripoli", "tripod"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> triple</NAME>
          <VALUE>{"", "t", {"triplex", "triple"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Triplet</NAME>
          <VALUE>{"", "", {"Triplett", "triplet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tripl</NAME>
          <VALUE>{"", "e", {"triplicate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trip</NAME>
          <VALUE>{"", "lo", {"triptych", "triphenylphosphine", "tripe", "tripartite", "trip"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trio</NAME>
          <VALUE>{"", "", {"trioxide", "triode", "trio"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trini</NAME>
          <VALUE>{"", "t", {"Trinidad"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trinit</NAME>
          <VALUE>{"", "", {"trinity", "trinitarian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trin</NAME>
          <VALUE>{"", "i", {"trinket"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trime</NAME>
          <VALUE>{"", "", {"trimester", "trimer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trim</NAME>
          <VALUE>{"", "e", {"trim"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trilo</NAME>
          <VALUE>{"", "", {"trilogy", "trilobite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trill</NAME>
          <VALUE>{"", "i", {"trill"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trilli</NAME>
          <VALUE>{"on", "", {"trillionth", "trillion"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tril</NAME>
          <VALUE>{"", "lo", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trigo</NAME>
          <VALUE>{"n", "", {"trigonometry", "trigonal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trig</NAME>
          <VALUE>{"", "o", {"trigram", "trig"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> triflu</NAME>
          <VALUE>{"o", "", {"trifluouride", "trifluoride"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trif</NAME>
          <VALUE>{"l", "u", {"trifle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trie</NAME>
          <VALUE>{"", "", {"tries", "triennial", "tried"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trid</NAME>
          <VALUE>{"", "", {"tridiagonal", "trident"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trick</NAME>
          <VALUE>{"", "", {"tricky", "trickster", "trickle", "trickery", "trick"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trichl</NAME>
          <VALUE>{"oro", "", {"trichloroethane", "trichloroacetic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trich</NAME>
          <VALUE>{"", "l", {"trichrome", "Trichinella"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tric</NAME>
          <VALUE>{"", "hk", {"Triceratops"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tribut</NAME>
          <VALUE>{"", "", {"tribute", "tributary"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tribun</NAME>
          <VALUE>{"", "", {"tribune", "tribunal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tribu</NAME>
          <VALUE>{"", "nt", {"tribulate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tribes</NAME>
          <VALUE>{"m", "", {"tribesmen", "tribesman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tribe</NAME>
          <VALUE>{"", "s", {"tribe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trib</NAME>
          <VALUE>{"", "eu", {"tribal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Triang</NAME>
          <VALUE>{"", "u", {"triangle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Triangula</NAME>
          <VALUE>{"", "", {"triangulate", "triangular"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> triangu</NAME>
          <VALUE>{"l", "a", {"Triangulum"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trian</NAME>
          <VALUE>{"", "g", {"Trianon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tria</NAME>
          <VALUE>{"", "n", {"triatomic", "Triassic", "trial", "triad", "triac", "triable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tri</NAME>
          <VALUE>{"", "abcdefglmnopstuv", {"trihedral"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tres</NAME>
          <VALUE>{"", "", {"trestle", "tress", "trespass"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trend</NAME>
          <VALUE>{"", "", {"trendy", "trend"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trenc</NAME>
          <VALUE>{"h", "e", {"trenchant", "trench"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trenche</NAME>
          <VALUE>{"rm", "", {"trenchermen", "trencherman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tren</NAME>
          <VALUE>{"", "cd", {"Trenton"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trem</NAME>
          <VALUE>{"", "", {"tremulous", "tremor", "tremendous", "tremble"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tree</NAME>
          <VALUE>{"", "", {"treetop", "tree"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trea</NAME>
          <VALUE>{"", "cdst", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> treat</NAME>
          <VALUE>{"", "", {"treaty", "treatise", "treat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> treasu</NAME>
          <VALUE>{"r", "", {"treasury", "treasure"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> treaso</NAME>
          <VALUE>{"n", "", {"treasonous", "treason"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> treas</NAME>
          <VALUE>{"", "ou", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tread</NAME>
          <VALUE>{"", "", {"treadmill", "treadle", "tread"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> treac</NAME>
          <VALUE>{"her", "", {"treachery", "treacherous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tre</NAME>
          <VALUE>{"", "aemns", {"Trevelyan", "trepidation", "trellis", "trek", "trefoil", "treble"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> travers</NAME>
          <VALUE>{"", "a", {"traverse"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> traversa</NAME>
          <VALUE>{"", "", {"traversal", "traversable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> traver</NAME>
          <VALUE>{"", "s", {"travertine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> travel</NAME>
          <VALUE>{"", "", {"travelogue", "travel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trave</NAME>
          <VALUE>{"", "lr", {"travesty"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trav</NAME>
          <VALUE>{"", "e", {"Travis", "travail"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trau</NAME>
          <VALUE>{"ma", "", {"traumatic", "trauma"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Trash</NAME>
          <VALUE>{"", "", {"trashy", "trash"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tras</NAME>
          <VALUE>{"", "h", {"Trastevere"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trapezo</NAME>
          <VALUE>{"id", "", {"trapezoidal", "trapezoid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trape</NAME>
          <VALUE>{"z", "o", {"trapezium"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trap</NAME>
          <VALUE>{"", "e", {"trap"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transver</NAME>
          <VALUE>{"s", "", {"transverse", "transversal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transv</NAME>
          <VALUE>{"e", "r", {"transvestite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transshipp</NAME>
          <VALUE>{"", "", {"transshipping", "transshipped"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transs</NAME>
          <VALUE>{"hip", "p", {"transship"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transpos</NAME>
          <VALUE>{"", "", {"transposition", "transpose", "transposable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transpor</NAME>
          <VALUE>{"t", "", {"transporter", "transportation", "transport"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transpo</NAME>
          <VALUE>{"", "rs", {"transpond"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transpl</NAME>
          <VALUE>{"ant", "", {"transplantation", "transplant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transpi</NAME>
          <VALUE>{"r", "", {"transpire", "transpiration"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transpa</NAME>
          <VALUE>{"", "", {"transparent", "transpacific"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transp</NAME>
          <VALUE>{"", "ailo", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transo</NAME>
          <VALUE>{"", "", {"transom", "transoceanic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transmu</NAME>
          <VALUE>{"t", "", {"transmute", "transmutation"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transmi</NAME>
          <VALUE>{"", "st", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transmitte</NAME>
          <VALUE>{"", "", {"transmitter", "transmitted"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transmitta</NAME>
          <VALUE>{"", "", {"transmittance", "transmittal", "transmittable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transmitt</NAME>
          <VALUE>{"", "ae", {"transmitting"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transmit</NAME>
          <VALUE>{"", "t", {"transmit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transmis</NAME>
          <VALUE>{"si", "", {"transmission", "transmissible"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transm</NAME>
          <VALUE>{"", "iu", {"transmogrify"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transl</NAME>
          <VALUE>{"", "", {"translucent", "transliterate", "translate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transiti</NAME>
          <VALUE>{"", "", {"transitive", "transition"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Transit</NAME>
          <VALUE>{"", "i", {"transitory", "Transite", "transit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transi</NAME>
          <VALUE>{"", "t", {"transistor", "transient"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transg</NAME>
          <VALUE>{"ress", "", {"transgressor", "transgression", "transgress"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transfu</NAME>
          <VALUE>{"s", "", {"transfusion", "transfuse", "transfusable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transfo</NAME>
          <VALUE>{"rm", "", {"transformation", "transform"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transfi</NAME>
          <VALUE>{"", "", {"transfix", "transfinite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transfe</NAME>
          <VALUE>{"r", "er", {"transferor", "transferable", "transfer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transferr</NAME>
          <VALUE>{"", "", {"transferring", "transferred", "transferral"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transfere</NAME>
          <VALUE>{"", "", {"transference", "transferee"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transf</NAME>
          <VALUE>{"", "eiou", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transe</NAME>
          <VALUE>{"", "", {"transept", "transect"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transd</NAME>
          <VALUE>{"uc", "", {"transduction", "transducer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transcrip</NAME>
          <VALUE>{"t", "", {"transcription", "transcript"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transcr</NAME>
          <VALUE>{"i", "p", {"transcribe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transco</NAME>
          <VALUE>{"n", "", {"transcontinental", "transconductance"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transce</NAME>
          <VALUE>{"", "n", {"transceiver"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transcende</NAME>
          <VALUE>{"nt", "", {"transcendental", "transcendent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transcen</NAME>
          <VALUE>{"d", "e", {"transcend"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transc</NAME>
          <VALUE>{"", "eor", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> transa</NAME>
          <VALUE>{"", "", {"transatlantic", "transalpine", "transact"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trans</NAME>
          <VALUE>{"", "acdefgilmopsv", {"Transylvania"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tranq</NAME>
          <VALUE>{"uil", "", {"tranquillity", "tranquil"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tran</NAME>
          <VALUE>{"", "qs", {"trance"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> your</NAME>
          <VALUE>{"", "s", {"your"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tramp</NAME>
          <VALUE>{"", "", {"trample", "tramp"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> you'</NAME>
          <VALUE>{"", "", {"you've", "you're", "you'll", "you'd"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> you</NAME>
          <VALUE>{"", "'rnt", {"you"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yo</NAME>
          <VALUE>{"", "udgknrs", {"yow", "yolk"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tram</NAME>
          <VALUE>{"", "p", {"tramway", "trammel", "tram"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ye</NAME>
          <VALUE>{"", "alos", {"Yerkes", "yen", "Yemen", "yet", "ye"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> yea</NAME>
          <VALUE>{"", "rs", {"Yeats", "yeah", "Yeager", "yea"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> y</NAME>
          <VALUE>{"", "eoaituv", {"YWCA", "y's", "Ypsilanti", "YMCA", "y"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> traito</NAME>
          <VALUE>{"r", "", {"traitorous", "traitor"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trait</NAME>
          <VALUE>{"", "o", {"trait"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trainm</NAME>
          <VALUE>{"", "", {"trainmen", "trainman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> work</NAME>
          <VALUE>{"", "bmps", {"worktable", "workout", "workload", "workhorse", "workforce", "workday", "workaday", "working", "worked", "work"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> word</NAME>
          <VALUE>{"", "s", {"wordy", "word"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> traine</NAME>
          <VALUE>{"", "", {"trainee", "trained"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wor</NAME>
          <VALUE>{"", "dklmrst", {"worn", "wore", "Worcester"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wom</NAME>
          <VALUE>{"", "ab", {"women"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wo</NAME>
          <VALUE>{"", "mreklnouv", {"wow", "Wotan", "wop", "wobble"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trail</NAME>
          <VALUE>{"", "", {"trailside", "trailhead", "trailblaze", "trail"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wit</NAME>
          <VALUE>{"", "hct", {"witness", "wit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> train</NAME>
          <VALUE>{"", "em", {"training", "train"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tragi</NAME>
          <VALUE>{"c", "", {"tragicomic", "tragic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wi</NAME>
          <VALUE>{"", "tcdeglnrs", {"wizard", "wive", "wipe", "wife", "WI"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trage</NAME>
          <VALUE>{"d", "", {"tragedy", "tragedian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trag</NAME>
          <VALUE>{"", "ei", {"trag"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> who</NAME>
          <VALUE>{"", "'lmos", {"whore", "whop", "whoever", "whoa", "who"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> traffick</NAME>
          <VALUE>{"", "", {"trafficking", "trafficked"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> traf</NAME>
          <VALUE>{"fic", "k", {"traffic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whi</NAME>
          <VALUE>{"", "cmnprstzl", {"whig", "whiff"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> whe</NAME>
          <VALUE>{"", "aelnrt", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tradi</NAME>
          <VALUE>{"tion", "", {"tradition", "traditional"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trades</NAME>
          <VALUE>{"m", "", {"tradesmen", "tradesman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wh</NAME>
          <VALUE>{"", "eioa", {"whup", "why"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wes</NAME>
          <VALUE>{"", "tl", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trade</NAME>
          <VALUE>{"", "s", {"tradeoff", "trademark", "trade"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wee</NAME>
          <VALUE>{"", "kd", {"weep", "wee"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tract</NAME>
          <VALUE>{"", "", {"tractor", "tract"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> we</NAME>
          <VALUE>{"", "esab'dilnrt", {"Weyerhauser", "wept", "Wehr", "WECo", "we"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wa</NAME>
          <VALUE>{"", "nsycdfghiklprtvx", {"Wabash", "Waals", "WA"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> track</NAME>
          <VALUE>{"", "", {"trackage", "track"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trace</NAME>
          <VALUE>{"", "", {"traceback", "tracery", "traceable", "trace"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> way</NAME>
          <VALUE>{"", "ls", {"wayward", "Wayne", "waybill", "way"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> was</NAME>
          <VALUE>{"", "hpt", {"Wasserman", "wasn't", "was"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trac</NAME>
          <VALUE>{"", "ekt", {"Tracy", "trachea"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Toy</NAME>
          <VALUE>{"", "", {"Toyota", "toy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> toxic</NAME>
          <VALUE>{"", "", {"toxicology", "toxic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> wan</NAME>
          <VALUE>{"", "tdg", {"wane", "wan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> w</NAME>
          <VALUE>{"", "aehioruy", {"WV", "w's", "w"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vo</NAME>
          <VALUE>{"", "icglrtuw", {"voyage", "Voss", "voodoo", "von", "vomit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tox</NAME>
          <VALUE>{"i", "c", {"toxin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> townsm</NAME>
          <VALUE>{"", "", {"townsmen", "townsman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> vi</NAME>
          <VALUE>{"", "eabcdgilnorstv", {"viz", "vixen", "Viking", "vi"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> va</NAME>
          <VALUE>{"", "cdgilmnprstu", {"VA"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> v</NAME>
          <VALUE>{"", "aioelu", {"vying", "VT", "v's", "Vreeland", "VHF", "v"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> towns</NAME>
          <VALUE>{"", "m", {"Townsend"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> town</NAME>
          <VALUE>{"", "s", {"townhouse", "town"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> usu</NAME>
          <VALUE>{"", "ar", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> towh</NAME>
          <VALUE>{"e", "", {"towhee", "towhead"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> use</NAME>
          <VALUE>{"", "", {"useless", "uses", "useful", "used", "use"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> us</NAME>
          <VALUE>{"", "euaCI", {"USSR", "USPS", "USN", "usher", "USGS", "USDA", "us"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> up</NAME>
          <VALUE>{"", "bdhlprstw", {"upkeep", "upgrade", "upend", "upcome", "upon", "up"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> towe</NAME>
          <VALUE>{"", "", {"tower", "towel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> un</NAME>
          <VALUE>{"", "iabcdksf", {"unless", "unwieldy", "unruly", "UNESCO", "until", "UN"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> unio</NAME>
          <VALUE>{"n", "", {"unions", "union"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> towa</NAME>
          <VALUE>{"rd", "", {"towards", "toward"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> uni</NAME>
          <VALUE>{"", "odfmpstv", {"Unix", "Uniroyal", "unique", "uninominal", "unilateral", "unicorn", "uniaxial"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> u</NAME>
          <VALUE>{"", "npsbgklmr.t", {"u's", "UHF", "UCLA", "u"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ty</NAME>
          <VALUE>{"", "pr", {"Tyson", "Tyndall", "Tyler", "tying", "tycoon", "Tyburn"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tour</NAME>
          <VALUE>{"", "", {"tournament", "tour"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> touc</NAME>
          <VALUE>{"h", "", {"touchy", "touchstone", "touchdown", "touch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tur</NAME>
          <VALUE>{"", "nbikpt", {"turvy", "turret", "turquoise", "turmoil", "turgid", "turf"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tu</NAME>
          <VALUE>{"", "rbcfglmnpst", {"tuxedo", "tuition", "Tudor", "tuesday"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tou</NAME>
          <VALUE>{"", "crg", {"tout", "tousle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> try</NAME>
          <VALUE>{"", "", {"trytophan", "trypsin", "trying", "try"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tru</NAME>
          <VALUE>{"", "acdmnst", {"truism", "truly", "true"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> totem</NAME>
          <VALUE>{"", "", {"totemic", "totem"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tote</NAME>
          <VALUE>{"", "m", {"tote"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tra</NAME>
          <VALUE>{"", "dicfgmnpsuv", {"tray", "trawl", "trajectory"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trai</NAME>
          <VALUE>{"", "nlt", {"traipse"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> trad</NAME>
          <VALUE>{"", "ei", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tota</NAME>
          <VALUE>{"l", "", {"totalitarian", "total"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tr</NAME>
          <VALUE>{"", "auyeio", {"TRW"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tow</NAME>
          <VALUE>{"", "aehn", {"towboat", "tow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tot</NAME>
          <VALUE>{"", "ae", {"tot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tos</NAME>
          <VALUE>{"", "", {"toss", "Toshiba"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tortu</NAME>
          <VALUE>{"", "", {"torture", "tortuous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> torto</NAME>
          <VALUE>{"ise", "", {"tortoiseshell", "tortoise"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tort</NAME>
          <VALUE>{"", "ou", {"tort"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tors</NAME>
          <VALUE>{"", "", {"torso", "torsion"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thing</NAME>
          <VALUE>{"", "", {"things", "thing"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Torr</NAME>
          <VALUE>{"", "", {"torrid", "torrent", "Torrance", "torr"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> torp</NAME>
          <VALUE>{"", "", {"torpor", "torpid", "torpedo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Toroi</NAME>
          <VALUE>{"d", "", {"toroidal", "toroid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> telephone</NAME>
          <VALUE>{"", "", {"telephones", "telephone"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> toro</NAME>
          <VALUE>{"", "i", {"Toronto"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> torn</NAME>
          <VALUE>{"", "", {"tornado", "torn"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> teams</NAME>
          <VALUE>{"", "", {"teams", "teamster"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> take</NAME>
          <VALUE>{"", "o", {"taker", "takes", "taketh", "taken", "take"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tor</NAME>
          <VALUE>{"", "noprst", {"tory", "torus", "torque", "tori", "tore", "torch", "Torah", "tor"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suppor</NAME>
          <VALUE>{"t", "", {"supports", "support"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tops</NAME>
          <VALUE>{"", "", {"Topsy", "topsoil"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> topol</NAME>
          <VALUE>{"og", "", {"topology", "topologize"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> style</NAME>
          <VALUE>{"", "", {"styles", "style"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> topo</NAME>
          <VALUE>{"", "l", {"topography", "topocentric"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> statesm</NAME>
          <VALUE>{"", "a", {"statesmen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> top</NAME>
          <VALUE>{"", "osi", {"topple", "topnotch", "topmost", "topgallant", "Topeka", "topcoat", "topaz", "top"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> toothp</NAME>
          <VALUE>{"", "", {"toothpick", "toothpaste"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> standa</NAME>
          <VALUE>{"rd", "", {"standards", "standard"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spend</NAME>
          <VALUE>{"", "", {"spending", "spend"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tooth</NAME>
          <VALUE>{"", "p", {"toothbrush", "tooth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> toot</NAME>
          <VALUE>{"", "h", {"tootle", "toot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> specifi</NAME>
          <VALUE>{"c", "a", {"specific"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spaces</NAME>
          <VALUE>{"", "", {"spaceship", "spaces", "spacesuit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sovi</NAME>
          <VALUE>{"et", "", {"soviets", "soviet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tool</NAME>
          <VALUE>{"", "", {"toolsmith", "toolmake", "toolkit", "tool"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sourc</NAME>
          <VALUE>{"e", "", {"sources", "source"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> too</NAME>
          <VALUE>{"", "lt", {"took", "toodle", "too"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tons</NAME>
          <VALUE>{"il", "", {"tonsillitis", "tonsil"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> someti</NAME>
          <VALUE>{"me", "", {"sometimes", "sometime"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smalle</NAME>
          <VALUE>{"", "", {"smaller", "Smalley"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> toni</NAME>
          <VALUE>{"", "", {"tonight", "tonic", "Toni"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> size</NAME>
          <VALUE>{"", "", {"sizes", "size"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> situa</NAME>
          <VALUE>{"t", "", {"situation", "situate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tong</NAME>
          <VALUE>{"", "", {"tongue", "tong"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sincer</NAME>
          <VALUE>{"e", "", {"sincerely", "sincere"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ton</NAME>
          <VALUE>{"", "gis", {"tony", "tonnage", "tonk", "tone", "tonal", "ton"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tomog</NAME>
          <VALUE>{"raph", "", {"tomography", "tomograph"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tomo</NAME>
          <VALUE>{"", "g", {"tomorrow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tomm</NAME>
          <VALUE>{"", "", {"tommy", "Tommie"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> serve</NAME>
          <VALUE>{"", "", {"server", "served", "serve"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tomb</NAME>
          <VALUE>{"", "", {"tombstone", "tomb"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> send</NAME>
          <VALUE>{"", "", {"sends", "sending", "send"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> toma</NAME>
          <VALUE>{"to", "", {"tomatoes", "tomato"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tom</NAME>
          <VALUE>{"", "abmo", {"Tompkins", "Tomlinson", "tome", "Tom"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seem</NAME>
          <VALUE>{"", "i", {"seems", "seemed", "seem"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> secur</NAME>
          <VALUE>{"", "i", {"secure"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> toll</NAME>
          <VALUE>{"", "", {"tollhouse", "tollgate", "toll"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> toler</NAME>
          <VALUE>{"a", "", {"tolerate", "tolerant", "tolerable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tole</NAME>
          <VALUE>{"", "r", {"Toledo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tol</NAME>
          <VALUE>{"", "el", {"toluene", "Tolstoy", "told"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> say</NAME>
          <VALUE>{"", "", {"says", "saying", "say"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tok</NAME>
          <VALUE>{"", "", {"Tokyo", "token", "tokamak"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> toile</NAME>
          <VALUE>{"t", "", {"toiletry", "toilet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rul</NAME>
          <VALUE>{"e", "", {"rules", "rule"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> toi</NAME>
          <VALUE>{"l", "e", {"toilsome", "toil"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> revie</NAME>
          <VALUE>{"w", "", {"reviews", "review"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> togg</NAME>
          <VALUE>{"", "", {"toggle", "togging"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tog</NAME>
          <VALUE>{"", "g", {"togs", "Togo", "together", "tog"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> retu</NAME>
          <VALUE>{"rn", "", {"returning", "returned", "return"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tof</NAME>
          <VALUE>{"", "", {"tofu", "toffee"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> TOE</NAME>
          <VALUE>{"", "", {"toenail", "TOEFL", "toe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> resou</NAME>
          <VALUE>{"rce", "", {"resources", "resource", "resourceful"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> require</NAME>
          <VALUE>{"", "", {"requirements", "requires", "required", "require"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> todd</NAME>
          <VALUE>{"", "", {"toddle", "Todd"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Toda</NAME>
          <VALUE>{"y", "", {"today'll", "today"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tod</NAME>
          <VALUE>{"", "ad", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> requir</NAME>
          <VALUE>{"", "e", {"requiring"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Toba</NAME>
          <VALUE>{"", "", {"Tobago", "tobacco"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> remai</NAME>
          <VALUE>{"n", "", {"remains", "remain", "remainder"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tob</NAME>
          <VALUE>{"", "a", {"Toby"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> toas</NAME>
          <VALUE>{"t", "", {"toastmaster", "toast"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> relatio</NAME>
          <VALUE>{"n", "", {"relations", "relation"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> relati</NAME>
          <VALUE>{"", "o", {"relating"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> relate</NAME>
          <VALUE>{"", "", {"related", "relate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> toad</NAME>
          <VALUE>{"", "", {"toady", "toad"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> toa</NAME>
          <VALUE>{"", "ds", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> to</NAME>
          <VALUE>{"", "abdEfgiklmnoprstwuxy", {"toccata", "to"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> relat</NAME>
          <VALUE>{"", "ei", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> regio</NAME>
          <VALUE>{"n", "", {"regions", "region"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> TN</NAME>
          <VALUE>{"", "", {"TNT", "TN"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> recor</NAME>
          <VALUE>{"d", "", {"records", "record"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> recen</NAME>
          <VALUE>{"t", "", {"recently", "recent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Titu</NAME>
          <VALUE>{"", "", {"Titus", "titular"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> receive</NAME>
          <VALUE>{"", "", {"received", "receive"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> receiv</NAME>
          <VALUE>{"", "e", {"receiving"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> reas</NAME>
          <VALUE>{"on", "a", {"reasons", "reason"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> titi</NAME>
          <VALUE>{"", "", {"titillate", "titian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> titani</NAME>
          <VALUE>{"", "", {"titanium", "titanic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> reache</NAME>
          <VALUE>{"", "", {"reaches", "reached"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> reach</NAME>
          <VALUE>{"", "e", {"reaching", "reach"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tita</NAME>
          <VALUE>{"n", "i", {"titanate", "Titan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tit</NAME>
          <VALUE>{"", "aiu", {"titrate", "titmouse", "title", "tithe", "tit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> raisi</NAME>
          <VALUE>{"n", "", {"raising", "raisin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tire</NAME>
          <VALUE>{"", "", {"tiresome", "tire"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tira</NAME>
          <VALUE>{"", "", {"Tirana", "tirade"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> raise</NAME>
          <VALUE>{"", "", {"raises", "raised", "raise"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tir</NAME>
          <VALUE>{"", "ae", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> quickl</NAME>
          <VALUE>{"", "", {"quickly", "quicklime"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tipp</NAME>
          <VALUE>{"", "", {"tippy", "tipple", "Tipperary"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> provide</NAME>
          <VALUE>{"", "n", {"provides", "provided", "provide"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tip</NAME>
          <VALUE>{"", "p", {"tiptoe", "tipsy", "tipoff", "tip"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tint</NAME>
          <VALUE>{"", "", {"tintype", "tint"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> proposi</NAME>
          <VALUE>{"", "", {"proposing", "proposition"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> propose</NAME>
          <VALUE>{"", "", {"proposes", "proposed", "propose"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tink</NAME>
          <VALUE>{"", "", {"tinkle", "tinker"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> programm</NAME>
          <VALUE>{"", "e", {"programming", "programmable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ting</NAME>
          <VALUE>{"", "", {"tingle", "tinge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> profit</NAME>
          <VALUE>{"", "", {"profits", "profit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> productiv</NAME>
          <VALUE>{"", "", {"productivity", "productive"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> producti</NAME>
          <VALUE>{"", "v", {"production"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> product</NAME>
          <VALUE>{"", "i", {"products", "product"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tin</NAME>
          <VALUE>{"", "gkt", {"tiny", "tinsel", "tinfoil", "tine", "tinder", "tincture", "Tina", "tin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> timo</NAME>
          <VALUE>{"", "", {"timothy", "Timon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> produci</NAME>
          <VALUE>{"", "", {"producing", "producible"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> produce</NAME>
          <VALUE>{"", "", {"produces", "produced", "produce"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> processi</NAME>
          <VALUE>{"", "", {"processing", "procession"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> probab</NAME>
          <VALUE>{"", "", {"probably", "probabilist"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> time</NAME>
          <VALUE>{"", "s", {"timeless", "Timex", "timeworn", "timetable", "timepiece", "timeout", "time"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> price</NAME>
          <VALUE>{"", "", {"prices", "price"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> timbe</NAME>
          <VALUE>{"r", "", {"timberland", "timber"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> timb</NAME>
          <VALUE>{"", "e", {"timbre"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tim</NAME>
          <VALUE>{"", "beo", {"timid", "Tim"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> presen</NAME>
          <VALUE>{"", "t", {"presence"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tilt</NAME>
          <VALUE>{"", "", {"tilth", "tilt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> possi</NAME>
          <VALUE>{"bl", "", {"possibly", "possible"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> populat</NAME>
          <VALUE>{"", "", {"population", "populate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> til</NAME>
          <VALUE>{"", "t", {"till", "tile", "tilde", "til"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tigr</NAME>
          <VALUE>{"", "", {"Tigris", "tigress"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tigh</NAME>
          <VALUE>{"t", "", {"tighten", "tight"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tig</NAME>
          <VALUE>{"", "hr", {"tiger"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tif</NAME>
          <VALUE>{"", "", {"tift", "Tiffany"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> plann</NAME>
          <VALUE>{"", "", {"planning", "planned"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tie</NAME>
          <VALUE>{"", "", {"tier", "Tientsin", "tied", "tie"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tide</NAME>
          <VALUE>{"", "", {"tidewater", "tideland", "tide"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> performa</NAME>
          <VALUE>{"nce", "", {"performances", "performance"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tid</NAME>
          <VALUE>{"", "e", {"tidy", "tidbit", "tidal", "tid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tickl</NAME>
          <VALUE>{"", "", {"ticklish", "tickle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tick</NAME>
          <VALUE>{"", "l", {"ticket", "tick"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tic</NAME>
          <VALUE>{"", "k", {"tic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> particular</NAME>
          <VALUE>{"", "", {"particularly", "particular"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tibe</NAME>
          <VALUE>{"", "t", {"Tiber"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tibet</NAME>
          <VALUE>{"", "", {"Tibetan", "Tibet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tib</NAME>
          <VALUE>{"", "e", {"tibia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Ti</NAME>
          <VALUE>{"", "bcdefglmnprt", {"tissue", "Tioga", "ti"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ours</NAME>
          <VALUE>{"", "", {"ours", "ourselves"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thyroi</NAME>
          <VALUE>{"d", "", {"thyroidal", "thyroid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> organiz</NAME>
          <VALUE>{"ation", "", {"organizations", "organization"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thyro</NAME>
          <VALUE>{"", "i", {"thyroxine", "thyrotoxic", "thyronine", "thyroglobulin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thyr</NAME>
          <VALUE>{"", "o", {"thyratron"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> order</NAME>
          <VALUE>{"", "", {"ordered", "orders", "order"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thym</NAME>
          <VALUE>{"", "", {"thymus", "thymine", "thyme"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thy</NAME>
          <VALUE>{"", "mr", {"thy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> operati</NAME>
          <VALUE>{"", "", {"operation", "operating", "operatic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> operate</NAME>
          <VALUE>{"", "", {"operated", "operate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thw</NAME>
          <VALUE>{"a", "", {"thwart", "thwack"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> open</NAME>
          <VALUE>{"", "", {"opens", "opening", "opened", "open"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Thur</NAME>
          <VALUE>{"", "", {"Thursday", "Thurman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thunders</NAME>
          <VALUE>{"", "", {"thunderstorm", "thundershower"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thunderb</NAME>
          <VALUE>{"", "", {"thunderbolt", "thunderbird"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thun</NAME>
          <VALUE>{"der", "bs", {"thunderous", "thunderflower", "thunderclap", "thunder"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thumb</NAME>
          <VALUE>{"", "", {"thumbnail", "thumb"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> number</NAME>
          <VALUE>{"", "", {"numbers", "number"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thum</NAME>
          <VALUE>{"", "b", {"thump"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thul</NAME>
          <VALUE>{"", "", {"thulium", "Thule"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> numbe</NAME>
          <VALUE>{"", "r", {"numbed"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> numb</NAME>
          <VALUE>{"", "e", {"numb"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thug</NAME>
          <VALUE>{"", "", {"thuggee", "thug"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thu</NAME>
          <VALUE>{"", "glmnr", {"thus", "thud", "Thuban"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thrus</NAME>
          <VALUE>{"", "", {"thrust", "thrush"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thru</NAME>
          <VALUE>{"", "s", {"Thruway", "thrum"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> never</NAME>
          <VALUE>{"", "", {"never", "nevertheless"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> throw</NAME>
          <VALUE>{"", "", {"thrown", "throwback", "throwaway", "throw"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> throu</NAME>
          <VALUE>{"gh", "", {"throughput", "throughout", "through"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> name</NAME>
          <VALUE>{"", "s", {"named", "nameplate", "nameable", "name"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thron</NAME>
          <VALUE>{"", "", {"throng", "throne"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> names</NAME>
          <VALUE>{"", "", {"names", "namesake"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ms</NAME>
          <VALUE>{"", "", {"ms.", "Ms"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> mrs</NAME>
          <VALUE>{"", "", {"mrs.", "Mrs"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> throa</NAME>
          <VALUE>{"t", "", {"throaty", "throat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thro</NAME>
          <VALUE>{"", "anuw", {"throttle", "thrombosis", "throes", "throb"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> movi</NAME>
          <VALUE>{"", "", {"moving", "movie"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> move</NAME>
          <VALUE>{"", "", {"moves", "movement", "moved", "move"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thrif</NAME>
          <VALUE>{"t", "", {"thrifty", "thrift"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thri</NAME>
          <VALUE>{"", "f", {"thrive", "thrips", "thrill", "thrice"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> month</NAME>
          <VALUE>{"", "", {"months", "month"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thres</NAME>
          <VALUE>{"h", "", {"threshold", "thresh"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> three</NAME>
          <VALUE>{"", "", {"threesome", "threefold", "three"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> threa</NAME>
          <VALUE>{"", "dt", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> threat</NAME>
          <VALUE>{"", "", {"threaten", "threat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thread</NAME>
          <VALUE>{"", "", {"threadbare", "thread"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thre</NAME>
          <VALUE>{"", "aes", {"threw", "threonine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thra</NAME>
          <VALUE>{"", "", {"thrash", "thrall"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thr</NAME>
          <VALUE>{"", "aeiou", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> membe</NAME>
          <VALUE>{"r", "", {"members", "member"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thous</NAME>
          <VALUE>{"and", "", {"thousandth", "thousandfold", "thousand"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> meeti</NAME>
          <VALUE>{"ng", "", {"meetings", "meeting", "meetinghouse"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thought</NAME>
          <VALUE>{"", "", {"thoughts", "thoughtful", "thought"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thoug</NAME>
          <VALUE>{"h", "t", {"though"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> medica</NAME>
          <VALUE>{"", "", {"medical", "medicate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thou</NAME>
          <VALUE>{"", "gs", {"thou"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> matter</NAME>
          <VALUE>{"", "", {"matters", "matter"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> matte</NAME>
          <VALUE>{"", "r", {"matte"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> markete</NAME>
          <VALUE>{"", "", {"marketed", "marketeer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thoro</NAME>
          <VALUE>{"ugh", "", {"thoroughgoing", "thoroughfare", "thoroughbred", "thorough"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> fucke</NAME>
          <VALUE>{"", "", {"fucker", "fucked"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> fuck</NAME>
          <VALUE>{"", "e", {"fucks", "fucking", "fuck"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> fuch</NAME>
          <VALUE>{"s", "", {"Fuchsia", "Fuchs"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Thorn</NAME>
          <VALUE>{"", "", {"thorny", "Thornton", "thorn"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> manager</NAME>
          <VALUE>{"", "", {"managers", "manager", "managerial"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thori</NAME>
          <VALUE>{"", "", {"thorium", "thoriate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Thor</NAME>
          <VALUE>{"", "ino", {"Thorstein", "Thorpe", "Thoreau", "Thor"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thom</NAME>
          <VALUE>{"", "", {"Thomson", "Thompson", "Thomistic", "Thomas"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> make</NAME>
          <VALUE>{"", "s", {"makeup", "make"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> makes</NAME>
          <VALUE>{"", "", {"makes", "makeshift"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tho</NAME>
          <VALUE>{"", "mru", {"those", "thong"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thist</NAME>
          <VALUE>{"le", "", {"thistledown", "thistle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> this</NAME>
          <VALUE>{"", "t", {"this'll", "this"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thirte</NAME>
          <VALUE>{"en", "", {"thirteenth", "thirteen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thirt</NAME>
          <VALUE>{"", "e", {"thirty", "thirtieth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> longe</NAME>
          <VALUE>{"", "", {"longer", "longevity"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> locate</NAME>
          <VALUE>{"", "", {"located", "locate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thirs</NAME>
          <VALUE>{"t", "", {"thirsty", "thirst"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thir</NAME>
          <VALUE>{"", "st", {"third"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> locat</NAME>
          <VALUE>{"", "ei", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> livin</NAME>
          <VALUE>{"g", "", {"living", "Livingston"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thio</NAME>
          <VALUE>{"", "", {"thiouracil", "thiocyanate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thin</NAME>
          <VALUE>{"", "g", {"thinnish", "think", "thine", "thin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Thim</NAME>
          <VALUE>{"b", "", {"Thimbu", "thimble"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thiev</NAME>
          <VALUE>{"", "", {"thieving", "thieves"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thie</NAME>
          <VALUE>{"", "v", {"thief"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thicke</NAME>
          <VALUE>{"", "", {"thicket", "thicken"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thic</NAME>
          <VALUE>{"k", "e", {"thickish", "thick"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thi</NAME>
          <VALUE>{"", "cemnors", {"thither", "thigh", "thiamin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> leadsm</NAME>
          <VALUE>{"", "", {"leadsmen", "leadsman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> leader</NAME>
          <VALUE>{"", "", {"leaders", "leader"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> they'</NAME>
          <VALUE>{"", "", {"they've", "they're", "they'll", "they'd"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> they</NAME>
          <VALUE>{"", "'", {"they"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Thet</NAME>
          <VALUE>{"", "", {"Thetis", "theta"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> larges</NAME>
          <VALUE>{"", "", {"largest", "largesse"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> these</NAME>
          <VALUE>{"", "", {"Theseus", "theses", "these"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thes</NAME>
          <VALUE>{"", "e", {"thespian", "thesis", "thesaurus"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> keys</NAME>
          <VALUE>{"", "", {"keys", "keystone"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Thermo</NAME>
          <VALUE>{"", "", {"thermostat", "Thermofax", "thermo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> keep</NAME>
          <VALUE>{"", "", {"keeps", "keep"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thermi</NAME>
          <VALUE>{"", "", {"thermistor", "thermionic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> therm</NAME>
          <VALUE>{"", "io", {"thermal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thereu</NAME>
          <VALUE>{"", "", {"thereupon", "thereunder"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> its</NAME>
          <VALUE>{"", "", {"its", "itself"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> issue</NAME>
          <VALUE>{"", "", {"issues", "issue"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> theret</NAME>
          <VALUE>{"o", "", {"theretofore", "thereto"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> involve</NAME>
          <VALUE>{"", "", {"involved", "involve"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> involv</NAME>
          <VALUE>{"", "e", {"involving"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thereo</NAME>
          <VALUE>{"", "", {"thereon", "thereof"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> investo</NAME>
          <VALUE>{"r", "", {"investors", "investor"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> there'</NAME>
          <VALUE>{"", "", {"there'll", "there'd"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> therefo</NAME>
          <VALUE>{"r", "", {"therefore", "therefor"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> interna</NAME>
          <VALUE>{"", "", {"international", "internal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> theref</NAME>
          <VALUE>{"", "o", {"therefrom"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> inflati</NAME>
          <VALUE>{"on", "", {"inflation", "inflationary"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> therea</NAME>
          <VALUE>{"", "", {"thereat", "thereafter", "thereabouts"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> individual</NAME>
          <VALUE>{"", "", {"individuals", "individual"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> there</NAME>
          <VALUE>{"", "af'otu", {"therewith", "Theresa", "therein", "thereby", "there"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thera</NAME>
          <VALUE>{"p", "", {"therapy", "therapist", "therapeutic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> increase</NAME>
          <VALUE>{"", "", {"increases", "increased", "increase"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ther</NAME>
          <VALUE>{"", "aem", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> include</NAME>
          <VALUE>{"", "", {"included", "include"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> includ</NAME>
          <VALUE>{"", "e", {"including"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> theore</NAME>
          <VALUE>{"", "t", {"theorem"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> theoret</NAME>
          <VALUE>{"ic", "", {"theoretician", "theoretic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> theor</NAME>
          <VALUE>{"", "e", {"theory", "theorist"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> theol</NAME>
          <VALUE>{"og", "", {"theology", "theologian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Theod</NAME>
          <VALUE>{"o", "", {"Theodosian", "Theodore"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Theo</NAME>
          <VALUE>{"", "dlr", {"theocracy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thenc</NAME>
          <VALUE>{"e", "", {"thenceforth", "thence"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> then</NAME>
          <VALUE>{"", "c", {"then"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> them</NAME>
          <VALUE>{"", "", {"themselves", "theme", "thematic", "them"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> theis</NAME>
          <VALUE>{"", "", {"theist", "theism"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thei</NAME>
          <VALUE>{"", "s", {"their"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thea</NAME>
          <VALUE>{"", "", {"theatric", "Thea"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> havi</NAME>
          <VALUE>{"", "", {"having", "Havilland"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> The</NAME>
          <VALUE>{"", "aimnorsty", {"Thelma", "theft", "thee", "Thebes", "the"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tha</NAME>
          <VALUE>{"", "ilnt", {"Thayer", "thaw"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> that'</NAME>
          <VALUE>{"", "", {"that'll", "that'd"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> that</NAME>
          <VALUE>{"", "'", {"thatch", "that"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thank</NAME>
          <VALUE>{"", "", {"thanksgiving", "thankful", "thank"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> than</NAME>
          <VALUE>{"", "k", {"than"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> give</NAME>
          <VALUE>{"", "", {"gives", "giveth", "given", "giveaway", "give"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thall</NAME>
          <VALUE>{"", "", {"thallophyte", "thallium"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> thal</NAME>
          <VALUE>{"", "l", {"Thalia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Thai</NAME>
          <VALUE>{"", "", {"Thailand", "Thai"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> getty</NAME>
          <VALUE>{"", "", {"Gettysburg", "Getty"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Th</NAME>
          <VALUE>{"", "aeioruwy", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> textur</NAME>
          <VALUE>{"", "", {"texture", "textural"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> general</NAME>
          <VALUE>{"", "", {"generally", "general"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> textu</NAME>
          <VALUE>{"", "r", {"textual"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> text</NAME>
          <VALUE>{"", "u", {"Textron", "textile", "textbook", "text"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> texa</NAME>
          <VALUE>{"", "", {"Texas", "Texan", "Texaco"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tex</NAME>
          <VALUE>{"", "at", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tetrahedra</NAME>
          <VALUE>{"", "", {"tetrahedral", "tetrahedra"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tetrah</NAME>
          <VALUE>{"edr", "a", {"tetrahedron"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> forme</NAME>
          <VALUE>{"", "", {"former", "formed"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tetraf</NAME>
          <VALUE>{"luo", "", {"tetrafluouride", "tetrafluoride"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tetr</NAME>
          <VALUE>{"a", "fh", {"tetravalent", "tetragonal", "tetrachloride"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tet</NAME>
          <VALUE>{"", "r", {"tether", "tete", "tetanus"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> followe</NAME>
          <VALUE>{"", "", {"followed", "followeth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> testim</NAME>
          <VALUE>{"on", "", {"testimony", "testimonial"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> testic</NAME>
          <VALUE>{"", "", {"testicular", "testicle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> testi</NAME>
          <VALUE>{"", "cm", {"testify"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> find</NAME>
          <VALUE>{"", "", {"finds", "find"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> testam</NAME>
          <VALUE>{"ent", "", {"testamentary", "testament"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> figure</NAME>
          <VALUE>{"", "", {"figures", "figure"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> testa</NAME>
          <VALUE>{"", "m", {"testate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> test</NAME>
          <VALUE>{"", "ai", {"tests", "testy", "testes", "testbed", "test"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tess</NAME>
          <VALUE>{"", "", {"tessellate", "Tess"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> feel</NAME>
          <VALUE>{"", "", {"feels", "feel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tes</NAME>
          <VALUE>{"", "st", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> territ</NAME>
          <VALUE>{"or", "", {"territory", "territorial"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> terrif</NAME>
          <VALUE>{"", "", {"terrify", "terrific"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> eyes</NAME>
          <VALUE>{"", "", {"eyes", "eyesight"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> experienc</NAME>
          <VALUE>{"e", "", {"experiences", "experience"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> terri</NAME>
          <VALUE>{"", "ft", {"terrier", "terrible"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> terre</NAME>
          <VALUE>{"", "", {"terrestrial", "Terre"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Terra</NAME>
          <VALUE>{"", "", {"terrapin", "terramycin", "terrain", "terrace", "Terra"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> executiv</NAME>
          <VALUE>{"e", "", {"executives", "executive"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> terr</NAME>
          <VALUE>{"", "aei", {"terry", "terror"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> examp</NAME>
          <VALUE>{"le", "", {"examples", "example"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> terp</NAME>
          <VALUE>{"sichore", "", {"terpsichorean", "Terpsichore"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> europea</NAME>
          <VALUE>{"n", "", {"europeans", "European"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tern</NAME>
          <VALUE>{"", "", {"ternary", "tern"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> termin</NAME>
          <VALUE>{"", "a", {"terminus", "terminology", "termini"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> estat</NAME>
          <VALUE>{"e", "", {"estates", "estate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> termina</NAME>
          <VALUE>{"", "", {"terminate", "terminal", "terminable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> estab</NAME>
          <VALUE>{"lish", "", {"establishing", "established", "establish"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> termi</NAME>
          <VALUE>{"", "n", {"termite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> term</NAME>
          <VALUE>{"", "i", {"terms", "term"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> espe</NAME>
          <VALUE>{"cial", "", {"especially", "especial"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> employe</NAME>
          <VALUE>{"e", "", {"employees", "employee"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tera</NAME>
          <VALUE>{"to", "", {"teratology", "teratogenic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ter</NAME>
          <VALUE>{"", "amnpr", {"tertiary", "terse", "Teresa", "tercel", "terbium"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> electroni</NAME>
          <VALUE>{"c", "", {"electronics", "electronic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tep</NAME>
          <VALUE>{"", "", {"tepid", "tepee"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tenu</NAME>
          <VALUE>{"", "", {"tenure", "tenuous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> effo</NAME>
          <VALUE>{"rt", "", {"efforts", "effort"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> educat</NAME>
          <VALUE>{"", "", {"education", "educate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tenta</NAME>
          <VALUE>{"", "", {"tentative", "tentacle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tent</NAME>
          <VALUE>{"", "a", {"tenth", "tenterhooks", "tent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> economic</NAME>
          <VALUE>{"", "", {"economics", "economic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tensio</NAME>
          <VALUE>{"n", "", {"tensional", "tension"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> earni</NAME>
          <VALUE>{"ng", "", {"earnings", "earning"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tensi</NAME>
          <VALUE>{"", "o", {"tensile"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tens</NAME>
          <VALUE>{"", "i", {"tenspot", "tensor", "tense"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> earl</NAME>
          <VALUE>{"", "", {"early", "earlier", "earl"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> teno</NAME>
          <VALUE>{"", "", {"tenor", "tenon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> doors</NAME>
          <VALUE>{"", "", {"doors", "doorstep"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tenne</NAME>
          <VALUE>{"", "", {"Tenney", "Tennessee", "Tenneco"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tenn</NAME>
          <VALUE>{"", "e", {"Tennyson", "tennis"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> dolla</NAME>
          <VALUE>{"r", "", {"dollars", "dollar"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> does</NAME>
          <VALUE>{"", "", {"does", "doesn't"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tene</NAME>
          <VALUE>{"", "", {"tenet", "tenement", "tenebrous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tender</NAME>
          <VALUE>{"", "", {"tenderloin", "tenderfoot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tende</NAME>
          <VALUE>{"", "r", {"tendency"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tend</NAME>
          <VALUE>{"", "e", {"tendon", "tend"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> deve</NAME>
          <VALUE>{"lop", "", {"develops", "development", "developed", "develop"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tenac</NAME>
          <VALUE>{"i", "", {"tenacity", "tenacious"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tena</NAME>
          <VALUE>{"", "c", {"tenant", "tenable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ten</NAME>
          <VALUE>{"", "adenostu", {"tenfold", "ten"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> describe</NAME>
          <VALUE>{"", "", {"described", "describe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> describ</NAME>
          <VALUE>{"", "e", {"describing"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tempt</NAME>
          <VALUE>{"", "", {"temptress", "temptation", "tempt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> departm</NAME>
          <VALUE>{"ent", "", {"departments", "department"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> deman</NAME>
          <VALUE>{"d", "", {"demands", "demand"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tempor</NAME>
          <VALUE>{"a", "r", {"temporal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tempo</NAME>
          <VALUE>{"", "r", {"tempo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> defensi</NAME>
          <VALUE>{"", "", {"defensive", "defensible"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Temple</NAME>
          <VALUE>{"", "", {"Templeton", "temple"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> templ</NAME>
          <VALUE>{"", "e", {"template"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tempe</NAME>
          <VALUE>{"", "rs", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> decisio</NAME>
          <VALUE>{"n", "", {"decisions", "decision"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tempes</NAME>
          <VALUE>{"t", "", {"tempestuous", "tempest"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> temper</NAME>
          <VALUE>{"", "a", {"temper"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> temperat</NAME>
          <VALUE>{"", "", {"temperature", "temperate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> decide</NAME>
          <VALUE>{"", "", {"decides", "decided", "decide"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tempera</NAME>
          <VALUE>{"", "t", {"temperance", "tempera"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> temp</NAME>
          <VALUE>{"", "elot", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tem</NAME>
          <VALUE>{"", "p", {"temerity"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tell</NAME>
          <VALUE>{"", "", {"telling", "tells", "tellurium", "telltale", "teller", "tell"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> custome</NAME>
          <VALUE>{"r", "", {"customers", "customer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> telev</NAME>
          <VALUE>{"is", "", {"television", "televise"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> telety</NAME>
          <VALUE>{"pe", "", {"teletypewrite", "teletypesetting", "teletype"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> telet</NAME>
          <VALUE>{"", "y", {"telethon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> create</NAME>
          <VALUE>{"", "", {"created", "create"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> teles</NAME>
          <VALUE>{"cop", "", {"telescopic", "telescope"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> telepro</NAME>
          <VALUE>{"", "", {"teleprompter", "teleprocessing"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> telepr</NAME>
          <VALUE>{"", "o", {"teleprinter"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> countri</NAME>
          <VALUE>{"", "", {"countries", "countrify"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> telephon</NAME>
          <VALUE>{"", "e", {"telephony", "telephonic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> teleph</NAME>
          <VALUE>{"o", "n", {"telephotography"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> corporati</NAME>
          <VALUE>{"on", "", {"corporations", "corporation"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> telepa</NAME>
          <VALUE>{"th", "", {"telepathy", "telepathic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> telep</NAME>
          <VALUE>{"", "ahr", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> corporat</NAME>
          <VALUE>{"", "i", {"corporate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> teleo</NAME>
          <VALUE>{"", "", {"teleost", "teleology"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> telegrap</NAME>
          <VALUE>{"h", "", {"telegraphy", "telegraph"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> teleg</NAME>
          <VALUE>{"ra", "p", {"telegram"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> continui</NAME>
          <VALUE>{"", "", {"continuing", "continuity"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Telec</NAME>
          <VALUE>{"o", "", {"teleconference", "telecommunicate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> continue</NAME>
          <VALUE>{"", "", {"continues", "continued", "continue"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tele</NAME>
          <VALUE>{"", "cgopstv", {"Telex", "telemeter", "telekinesis", "Telefunken", "Teledyne"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tel</NAME>
          <VALUE>{"", "el", {"Tel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> consumer</NAME>
          <VALUE>{"", "", {"consumers", "consumer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tek</NAME>
          <VALUE>{"t", "", {"Tektronix", "tektite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Teh</NAME>
          <VALUE>{"", "", {"Tehran", "Teheran"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> consume</NAME>
          <VALUE>{"", "r", {"consumed", "consume"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> constructi</NAME>
          <VALUE>{"", "", {"construction", "constructible"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> teethe</NAME>
          <VALUE>{"", "", {"teethed", "teethe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> teeth</NAME>
          <VALUE>{"", "e", {"teething", "teeth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> teet</NAME>
          <VALUE>{"", "h", {"teetotal", "teeter", "teet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> computer</NAME>
          <VALUE>{"", "", {"computers", "computer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> compute</NAME>
          <VALUE>{"", "r", {"compute"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> teen</NAME>
          <VALUE>{"", "", {"teensy", "teenage", "teen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> companio</NAME>
          <VALUE>{"n", "", {"companionship", "companionway", "companion"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tee</NAME>
          <VALUE>{"", "nt", {"teem", "teeing", "tee"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tedi</NAME>
          <VALUE>{"", "", {"tedium", "tedious"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> communicati</NAME>
          <VALUE>{"on", "", {"communications", "communication"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Ted</NAME>
          <VALUE>{"", "i", {"Teddy", "Ted"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> communicat</NAME>
          <VALUE>{"", "i", {"communicate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tech</NAME>
          <VALUE>{"", "n", {"tech"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> technoc</NAME>
          <VALUE>{"rat", "", {"technocratic", "technocrat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> techno</NAME>
          <VALUE>{"", "c", {"technology"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> comin</NAME>
          <VALUE>{"", "", {"coming", "Cominform"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Technic</NAME>
          <VALUE>{"", "", {"technician", "technic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> techni</NAME>
          <VALUE>{"", "c", {"technique", "Technion"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> techn</NAME>
          <VALUE>{"", "io", {"technetium"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tec</NAME>
          <VALUE>{"", "h", {"tecum", "tectonic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tea</NAME>
          <VALUE>{"", "ckmrs", {"teat", "teapot", "teal", "teahouse", "tea"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> citiz</NAME>
          <VALUE>{"en", "", {"citizenry", "citizen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> teasp</NAME>
          <VALUE>{"oon", "", {"teaspoonful", "teaspoon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tease</NAME>
          <VALUE>{"", "", {"teasel", "tease"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> teas</NAME>
          <VALUE>{"", "ep", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tear</NAME>
          <VALUE>{"", "", {"tearful", "teardrop", "tear"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> team</NAME>
          <VALUE>{"", "s", {"teamwork", "teammate", "team"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> teak</NAME>
          <VALUE>{"", "", {"teakwood", "teakettle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> teac</NAME>
          <VALUE>{"", "h", {"teacup", "teacart"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> te</NAME>
          <VALUE>{"", "acdehklmnprstx", {"Teutonic", "Tegucigalpa", "Teflon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> cause</NAME>
          <VALUE>{"", "", {"causes", "caused", "cause"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> taxp</NAME>
          <VALUE>{"ay", "", {"taxpaying", "taxpayer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> taxo</NAME>
          <VALUE>{"nom", "", {"taxonomy", "taxonomic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> taxi</NAME>
          <VALUE>{"", "", {"taxiway", "taxied", "taxicab", "taxi"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> buy</NAME>
          <VALUE>{"", "", {"buys", "buy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tax</NAME>
          <VALUE>{"", "iop", {"taxes", "taxation", "tax"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> taw</NAME>
          <VALUE>{"", "", {"tawny", "tawdry"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> buildi</NAME>
          <VALUE>{"ng", "", {"buildings", "building"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tav</NAME>
          <VALUE>{"ern", "", {"taverna", "tavern"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> taut</NAME>
          <VALUE>{"", "", {"tautology", "taut"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tau</NAME>
          <VALUE>{"", "t", {"Taurus", "taunt", "taught", "tau"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> bring</NAME>
          <VALUE>{"", "", {"brings", "bring"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tattl</NAME>
          <VALUE>{"e", "", {"tattletale", "tattler", "tattle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tatt</NAME>
          <VALUE>{"", "l", {"tatty", "tattoo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tate</NAME>
          <VALUE>{"", "", {"tater", "tate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tat</NAME>
          <VALUE>{"", "et", {"tat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> bette</NAME>
          <VALUE>{"", "", {"better", "Bette"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> taste</NAME>
          <VALUE>{"", "", {"tasteful", "taste"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tast</NAME>
          <VALUE>{"", "e", {"tasty", "tasting"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> benefit</NAME>
          <VALUE>{"", "", {"benefits", "benefit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tass</NAME>
          <VALUE>{"", "", {"tassel", "Tass"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> believ</NAME>
          <VALUE>{"e", "", {"believes", "believe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Task</NAME>
          <VALUE>{"", "", {"taskmaster", "task"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tas</NAME>
          <VALUE>{"", "kst", {"Tasmania"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tarta</NAME>
          <VALUE>{"r", "", {"Tartary", "tartar"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tart</NAME>
          <VALUE>{"", "a", {"tart"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tarr</NAME>
          <VALUE>{"y", "", {"Tarrytown", "tarry"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tarpa</NAME>
          <VALUE>{"", "", {"tarpaulin", "tarpaper"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tarp</NAME>
          <VALUE>{"", "a", {"tarpon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> avera</NAME>
          <VALUE>{"ge", "", {"averages", "average"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> avai</NAME>
          <VALUE>{"l", "", {"available", "avail"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> taran</NAME>
          <VALUE>{"t", "", {"tarantula", "tarantara"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tara</NAME>
          <VALUE>{"", "n", {"tara"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tar</NAME>
          <VALUE>{"", "aprt", {"Tarzan", "tarnish", "tariff", "target", "tardy", "Tarbell", "tar"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> associati</NAME>
          <VALUE>{"on", "", {"associations", "association"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tapp</NAME>
          <VALUE>{"", "", {"tappet", "tappa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> associat</NAME>
          <VALUE>{"", "i", {"associate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tapi</NAME>
          <VALUE>{"", "", {"tapis", "tapir"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> aske</NAME>
          <VALUE>{"", "", {"asked", "askew"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tape</NAME>
          <VALUE>{"", "", {"tapeworm", "tapestry", "taper", "tape"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tap</NAME>
          <VALUE>{"", "eip", {"tapa", "tap"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> arms</NAME>
          <VALUE>{"", "", {"arms", "Armstrong"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tao</NAME>
          <VALUE>{"", "", {"Taos", "Taoist", "tao"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> announce</NAME>
          <VALUE>{"", "", {"announced", "announce"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tanta</NAME>
          <VALUE>{"", "l", {"tantamount"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> annou</NAME>
          <VALUE>{"nc", "e", {"announcing"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tantal</NAME>
          <VALUE>{"u", "", {"Tantalus", "tantalum"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tant</NAME>
          <VALUE>{"", "a", {"tantrum"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> amou</NAME>
          <VALUE>{"nt", "", {"amounts", "amount"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> american</NAME>
          <VALUE>{"", "", {"american", "Americana"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> alw</NAME>
          <VALUE>{"ay", "", {"always", "alway"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tangen</NAME>
          <VALUE>{"t", "", {"tangential", "tangent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tange</NAME>
          <VALUE>{"", "n", {"tangerine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tang</NAME>
          <VALUE>{"", "e", {"tangy", "tango", "tangle", "tangible", "tang"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tana</NAME>
          <VALUE>{"", "", {"Tananarive", "Tanaka", "tanager"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tan</NAME>
          <VALUE>{"", "agt", {"Tanzania", "Tanya", "tansy", "tannin", "tank", "tanh", "tandem", "tan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tamp</NAME>
          <VALUE>{"", "", {"tampon", "Tampa", "tamp"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> additio</NAME>
          <VALUE>{"n", "", {"additions", "additional", "addition"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> adden</NAME>
          <VALUE>{"d", "", {"addendum", "addenda", "addend"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> activ</NAME>
          <VALUE>{"", "a", {"activities"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> actio</NAME>
          <VALUE>{"n", "", {"actions", "action"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> accordi</NAME>
          <VALUE>{"", "", {"according", "accordion"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tamar</NAME>
          <VALUE>{"", "", {"tamarind", "tamarack"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tama</NAME>
          <VALUE>{"", "r", {"tamale"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tam</NAME>
          <VALUE>{"", "ap", {"Tammany", "tame", "tambourine", "tam"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tally</NAME>
          <VALUE>{"", "", {"tallyho", "tally"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tall</NAME>
          <VALUE>{"", "y", {"tallow", "Tallahassee", "tall"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> talk</NAME>
          <VALUE>{"", "", {"talky", "talkie", "talkative", "talk"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tali</NAME>
          <VALUE>{"sman", "", {"talismanic", "talisman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tale</NAME>
          <VALUE>{"", "", {"talent", "tale"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> talc</NAME>
          <VALUE>{"", "", {"talcum", "talc"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tal</NAME>
          <VALUE>{"", "ceikl", {"talus", "talon", "Talmud"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> takeo</NAME>
          <VALUE>{"", "", {"takeover", "takeoff"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tak</NAME>
          <VALUE>{"", "e", {"taking"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tail</NAME>
          <VALUE>{"", "", {"tailwind", "tailspin", "tailor", "tailgate", "tail"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tai</NAME>
          <VALUE>{"", "l", {"Taiwan", "Taipei", "taint"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Tah</NAME>
          <VALUE>{"", "", {"Tahoe", "Tahiti"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tag</NAME>
          <VALUE>{"", "", {"tagging", "tag"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Taff</NAME>
          <VALUE>{"", "", {"taffy", "taffeta"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> taf</NAME>
          <VALUE>{"", "f", {"Taft"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tad</NAME>
          <VALUE>{"", "", {"tadpole", "tad"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tactic</NAME>
          <VALUE>{"", "", {"tactician", "tactic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tacti</NAME>
          <VALUE>{"", "c", {"tactile"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tact</NAME>
          <VALUE>{"", "i", {"tactual", "tactful", "tact"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tack</NAME>
          <VALUE>{"", "", {"tacky", "tackle", "tack"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Taci</NAME>
          <VALUE>{"t", "", {"Tacitus", "tacit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tach</NAME>
          <VALUE>{"", "i", {"tachometer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tachi</NAME>
          <VALUE>{"", "", {"tachistoscope", "tachinid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tac</NAME>
          <VALUE>{"", "hikt", {"Tacoma"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tabul</NAME>
          <VALUE>{"a", "", {"tabulate", "tabular", "tabula"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tabu</NAME>
          <VALUE>{"", "l", {"tabu"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> table</NAME>
          <VALUE>{"", "as", {"tablet", "tableland", "tablecloth", "table"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tables</NAME>
          <VALUE>{"", "p", {"tables"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tablea</NAME>
          <VALUE>{"u", "", {"tableaux", "tableau"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tabl</NAME>
          <VALUE>{"", "e", {"tabloid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> tab</NAME>
          <VALUE>{"", "lu", {"taboo", "tabernacle", "tab"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ta</NAME>
          <VALUE>{"", "bcdfghiklmnoprstuvwx", {"Taylor", "TA"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> T</NAME>
          <VALUE>{"", "aehiNoruysTVW", {"TX", "t's", "t"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> systemi</NAME>
          <VALUE>{"", "", {"systemization", "systemic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sys</NAME>
          <VALUE>{"tem", "i", {"systemwide", "systematic", "system"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syru</NAME>
          <VALUE>{"p", "", {"syrupy", "syrup"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syring</NAME>
          <VALUE>{"", "", {"syringe", "syringa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syrin</NAME>
          <VALUE>{"", "g", {"syrinx"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syri</NAME>
          <VALUE>{"", "n", {"Syria"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Syr</NAME>
          <VALUE>{"", "iu", {"Syracuse"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> synthes</NAME>
          <VALUE>{"", "", {"synthesis", "syntheses"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> synth</NAME>
          <VALUE>{"e", "s", {"synthetic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> synta</NAME>
          <VALUE>{"", "", {"syntax", "syntactic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> synt</NAME>
          <VALUE>{"", "ah", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> synops</NAME>
          <VALUE>{"", "", {"synopsis", "synopses"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> synop</NAME>
          <VALUE>{"", "s", {"synoptic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> synon</NAME>
          <VALUE>{"ym", "", {"synonymy", "synonymous", "synonym"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syno</NAME>
          <VALUE>{"", "np", {"synod"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> synergi</NAME>
          <VALUE>{"s", "", {"synergistic", "synergism"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syne</NAME>
          <VALUE>{"rg", "i", {"synergy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syndi</NAME>
          <VALUE>{"c", "", {"syndicate", "syndic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> synd</NAME>
          <VALUE>{"", "i", {"syndrome"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> synch</NAME>
          <VALUE>{"ro", "n", {"synchrotron"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> synchron</NAME>
          <VALUE>{"", "", {"synchrony", "synchronous", "synchronism"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sync</NAME>
          <VALUE>{"", "h", {"syncopate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syna</NAME>
          <VALUE>{"", "p", {"synagogue"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> synaps</NAME>
          <VALUE>{"e", "", {"synapses", "synapse"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> synap</NAME>
          <VALUE>{"", "s", {"synaptic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syn</NAME>
          <VALUE>{"", "acdeot", {"Synge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sympt</NAME>
          <VALUE>{"om", "", {"symptomatic", "symptom"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sympo</NAME>
          <VALUE>{"si", "", {"symposium", "symposia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> symph</NAME>
          <VALUE>{"on", "", {"symphony", "symphonic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sympa</NAME>
          <VALUE>{"th", "", {"sympathy", "sympathetic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> symp</NAME>
          <VALUE>{"", "ahot", {"symplectic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> symb</NAME>
          <VALUE>{"", "io", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> symbo</NAME>
          <VALUE>{"l", "", {"symbolic", "symbol"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> symbi</NAME>
          <VALUE>{"o", "", {"symbiotic", "symbiosis"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sym</NAME>
          <VALUE>{"", "bp", {"symmetry"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sylva</NAME>
          <VALUE>{"n", "", {"Sylvania", "sylvan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sylv</NAME>
          <VALUE>{"", "a", {"Sylvia", "Sylvester"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Syll</NAME>
          <VALUE>{"", "ao", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syllo</NAME>
          <VALUE>{"gis", "", {"syllogistic", "syllogism"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sylla</NAME>
          <VALUE>{"b", "i", {"syllabus", "syllable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syllabi</NAME>
          <VALUE>{"", "", {"syllabify", "syllabic", "syllabi"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syl</NAME>
          <VALUE>{"", "lv", {"Sylow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syco</NAME>
          <VALUE>{"phant", "", {"sycophantic", "sycophant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syc</NAME>
          <VALUE>{"", "o", {"sycamore"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> syb</NAME>
          <VALUE>{"", "", {"Sybil", "sybarite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sy</NAME>
          <VALUE>{"", "bclmnrs", {"syzygy", "Sykes", "syenite", "Sydney"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swu</NAME>
          <VALUE>{"", "", {"swung", "swum"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sword</NAME>
          <VALUE>{"", "", {"swordtail", "swordplay", "swordfish", "sword"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swor</NAME>
          <VALUE>{"", "d", {"sworn", "swore"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swo</NAME>
          <VALUE>{"", "r", {"swoop", "swollen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Switz</NAME>
          <VALUE>{"er", "", {"Switzerland", "Switzer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Switc</NAME>
          <VALUE>{"h", "b", {"switches", "switchman", "switchgear", "switch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> switchb</NAME>
          <VALUE>{"", "", {"switchboard", "switchblade"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swit</NAME>
          <VALUE>{"", "cz", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swish</NAME>
          <VALUE>{"", "", {"swishy", "swish"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swis</NAME>
          <VALUE>{"", "h", {"swiss"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swir</NAME>
          <VALUE>{"l", "", {"swirly", "swirl"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swing</NAME>
          <VALUE>{"", "", {"swingy", "swingable", "swing"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swin</NAME>
          <VALUE>{"", "g", {"swine", "swindle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swim</NAME>
          <VALUE>{"", "", {"swimsuit", "swim"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swig</NAME>
          <VALUE>{"", "", {"swigging", "swig"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swi</NAME>
          <VALUE>{"", "gmnrst", {"swizzle", "swivel", "swipe", "swift"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swelt</NAME>
          <VALUE>{"", "", {"swelter", "swelt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swel</NAME>
          <VALUE>{"", "t", {"swell"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sweet</NAME>
          <VALUE>{"", "", {"sweetish", "sweetheart", "sweeten", "sweet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sweep</NAME>
          <VALUE>{"", "", {"sweepstake", "sweep"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swee</NAME>
          <VALUE>{"", "pt", {"Sweeney"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Swede</NAME>
          <VALUE>{"", "", {"Sweden", "Swede"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Swed</NAME>
          <VALUE>{"", "e", {"Swedish"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Swea</NAME>
          <VALUE>{"", "t", {"swear"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sweat</NAME>
          <VALUE>{"", "", {"sweaty", "sweatshirt", "sweater", "sweatband", "sweat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swe</NAME>
          <VALUE>{"", "adel", {"swerve", "swept", "Swenson"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swath</NAME>
          <VALUE>{"", "", {"swathe", "swath"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swat</NAME>
          <VALUE>{"", "h", {"swatch", "swat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Swarth</NAME>
          <VALUE>{"", "", {"swarthy", "Swarthout", "Swarthmore"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Swart</NAME>
          <VALUE>{"", "h", {"swart"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swar</NAME>
          <VALUE>{"", "t", {"swarm"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swank</NAME>
          <VALUE>{"", "", {"swanky", "swank"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swan</NAME>
          <VALUE>{"", "k", {"Swanson", "swanlike", "swan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swamp</NAME>
          <VALUE>{"", "", {"swampy", "swamp"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swam</NAME>
          <VALUE>{"", "p", {"swami", "swam"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swal</NAME>
          <VALUE>{"low", "", {"swallowtail", "swallow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swag</NAME>
          <VALUE>{"", "", {"swage", "swag"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swab</NAME>
          <VALUE>{"", "", {"swabby", "swab"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> swa</NAME>
          <VALUE>{"", "bglmnrt", {"Swaziland", "sway", "swastika", "swap", "swain", "Swahili"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sw</NAME>
          <VALUE>{"", "aeiou", {"SW"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suze</NAME>
          <VALUE>{"rain", "", {"suzerainty", "suzerain"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suz</NAME>
          <VALUE>{"", "e", {"Suzuki", "Suzanne"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sut</NAME>
          <VALUE>{"", "", {"suture", "Sutton", "Sutherland"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sust</NAME>
          <VALUE>{"", "", {"sustenance", "sustain"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suspi</NAME>
          <VALUE>{"cio", "", {"suspicious", "suspicion"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suspe</NAME>
          <VALUE>{"", "n", {"suspect"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suspens</NAME>
          <VALUE>{"", "", {"suspensor", "suspension", "suspense"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suspen</NAME>
          <VALUE>{"", "s", {"suspend"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> susp</NAME>
          <VALUE>{"", "ei", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> susc</NAME>
          <VALUE>{"ept", "", {"susceptible", "susceptance"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Susa</NAME>
          <VALUE>{"n", "", {"Susanne", "Susan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sus</NAME>
          <VALUE>{"", "acpt", {"Sussex", "Susie", "sushi", "Sus"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> survi</NAME>
          <VALUE>{"v", "", {"survivor", "survive", "survival"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> surve</NAME>
          <VALUE>{"", "y", {"surveillant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> survey</NAME>
          <VALUE>{"", "", {"surveys", "surveyor", "survey"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> surv</NAME>
          <VALUE>{"", "ei", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> surt</NAME>
          <VALUE>{"", "", {"surtout", "surtax"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> surro</NAME>
          <VALUE>{"", "", {"surround", "surrogate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> surre</NAME>
          <VALUE>{"", "", {"surrey", "surreptitious", "surrender", "surreal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> surr</NAME>
          <VALUE>{"", "eo", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> surp</NAME>
          <VALUE>{"", "", {"surprise", "surplus", "surpass"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> surm</NAME>
          <VALUE>{"", "", {"surmount", "surmise"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> surj</NAME>
          <VALUE>{"ecti", "", {"surjective", "surjection"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> surge</NAME>
          <VALUE>{"", "", {"surgery", "surgeon", "surge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> surg</NAME>
          <VALUE>{"", "e", {"surgical"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> surfa</NAME>
          <VALUE>{"c", "", {"surfactant", "surface"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> surf</NAME>
          <VALUE>{"", "a", {"surfeit", "surf"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sure</NAME>
          <VALUE>{"", "", {"surety", "sure"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> surc</NAME>
          <VALUE>{"", "", {"surcharge", "surcease"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sur</NAME>
          <VALUE>{"", "cefgjmprtv", {"surname"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> supre</NAME>
          <VALUE>{"m", "", {"supremum", "supreme", "supremacy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> supra</NAME>
          <VALUE>{"", "", {"supranational", "supra"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> supr</NAME>
          <VALUE>{"", "ae", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suppressi</NAME>
          <VALUE>{"", "", {"suppression", "suppressible"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suppr</NAME>
          <VALUE>{"ess", "i", {"suppressor", "suppress"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suppos</NAME>
          <VALUE>{"", "", {"supposition", "suppose", "supposable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suppo</NAME>
          <VALUE>{"", "sr", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suppl</NAME>
          <VALUE>{"", "ei", {"supply", "supplant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> supple</NAME>
          <VALUE>{"", "", {"supplementary", "supple"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> supp</NAME>
          <VALUE>{"", "lor", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> superv</NAME>
          <VALUE>{"", "", {"supervisory", "supervene"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> superst</NAME>
          <VALUE>{"itio", "", {"superstitious", "superstition"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> supers</NAME>
          <VALUE>{"", "t", {"supersede"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> supern</NAME>
          <VALUE>{"", "", {"supernovae", "supernatant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> superl</NAME>
          <VALUE>{"", "", {"superlunary", "superlative"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> superi</NAME>
          <VALUE>{"", "", {"superior", "superintendent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> superfl</NAME>
          <VALUE>{"u", "", {"superfluous", "superfluity"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> superf</NAME>
          <VALUE>{"", "l", {"superficial"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> superb</NAME>
          <VALUE>{"", "", {"superbly", "superb"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> supe</NAME>
          <VALUE>{"r", "bfilnsv", {"superposable", "supercilious", "superannuate", "super"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sup</NAME>
          <VALUE>{"", "epr", {"supine", "sup"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suntann</NAME>
          <VALUE>{"", "", {"suntanning", "suntanned"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sunt</NAME>
          <VALUE>{"an", "n", {"suntan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sunshi</NAME>
          <VALUE>{"n", "", {"sunshiny", "sunshine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sunsh</NAME>
          <VALUE>{"", "i", {"sunshade"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suns</NAME>
          <VALUE>{"", "h", {"sunspot", "sunset", "sunscreen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sunn</NAME>
          <VALUE>{"y", "", {"Sunnyvale", "sunny"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sunl</NAME>
          <VALUE>{"i", "", {"sunlit", "sunlight"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sunk</NAME>
          <VALUE>{"", "", {"sunken", "sunk"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sung</NAME>
          <VALUE>{"", "", {"sunglasses", "sung"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sunf</NAME>
          <VALUE>{"", "", {"sunflower", "sunfish"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sunde</NAME>
          <VALUE>{"", "", {"sundew", "sunder"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sund</NAME>
          <VALUE>{"", "e", {"sundry", "sundown", "sundial", "Sunday"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sunbu</NAME>
          <VALUE>{"rn", "", {"sunburnt", "sunburn"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sunb</NAME>
          <VALUE>{"", "u", {"sunbonnet", "sunbeam"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sun</NAME>
          <VALUE>{"", "bdfgklnst", {"SUNY", "sunrise", "sun"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> summi</NAME>
          <VALUE>{"t", "", {"summitry", "summit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> summe</NAME>
          <VALUE>{"r", "", {"summertime", "Summers", "summer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Summa</NAME>
          <VALUE>{"", "rt", {"summand"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> summat</NAME>
          <VALUE>{"", "", {"summation", "summate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> summar</NAME>
          <VALUE>{"", "", {"summary", "summarily"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> summ</NAME>
          <VALUE>{"", "aei", {"summon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sume</NAME>
          <VALUE>{"ria", "", {"Sumerian", "Sumeria"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Suma</NAME>
          <VALUE>{"", "", {"Sumatra", "sumac"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sum</NAME>
          <VALUE>{"", "aem", {"Sumter", "sumptuous", "Sumner", "sum"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sulta</NAME>
          <VALUE>{"n", "", {"sultanate", "sultan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sult</NAME>
          <VALUE>{"", "a", {"sultry"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sull</NAME>
          <VALUE>{"", "", {"sully", "Sullivan", "sullen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sulk</NAME>
          <VALUE>{"", "", {"sulky", "sulk"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sulf</NAME>
          <VALUE>{"", "aiu", {"sulfonamide"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sulfu</NAME>
          <VALUE>{"r", "", {"sulfurous", "sulfuric", "sulfur"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sulfi</NAME>
          <VALUE>{"", "", {"sulfite", "sulfide"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sulfa</NAME>
          <VALUE>{"", "", {"sulfate", "sulfanilamide", "sulfa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sul</NAME>
          <VALUE>{"", "fklt", {"sulphur"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suit</NAME>
          <VALUE>{"", "", {"suitor", "suite", "suitcase", "suit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suic</NAME>
          <VALUE>{"id", "", {"suicide", "suicidal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sui</NAME>
          <VALUE>{"", "ct", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suggesti</NAME>
          <VALUE>{"", "", {"suggestive", "suggestion", "suggestible"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sugg</NAME>
          <VALUE>{"est", "i", {"suggest"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sug</NAME>
          <VALUE>{"", "g", {"sugar"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suffr</NAME>
          <VALUE>{"age", "", {"suffragette", "suffrage"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Suffo</NAME>
          <VALUE>{"", "", {"Suffolk", "suffocate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suffic</NAME>
          <VALUE>{"", "", {"sufficient", "suffice"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suffi</NAME>
          <VALUE>{"", "c", {"suffix"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suf</NAME>
          <VALUE>{"f", "ior", {"suffuse", "suffer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sue</NAME>
          <VALUE>{"", "", {"Suez", "suey", "sue"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Suda</NAME>
          <VALUE>{"n", "", {"Sudanese", "Sudan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sud</NAME>
          <VALUE>{"", "a", {"suds", "sudden", "sud"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suck</NAME>
          <VALUE>{"", "", {"suckling", "suck"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> succ</NAME>
          <VALUE>{"", "eu", {"succinct"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> succu</NAME>
          <VALUE>{"", "", {"succumb", "succubus"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> succe</NAME>
          <VALUE>{"", "s", {"succeed"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> successi</NAME>
          <VALUE>{"", "", {"successive", "succession"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> succes</NAME>
          <VALUE>{"s", "i", {"successor", "successful", "success"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> suc</NAME>
          <VALUE>{"", "ck", {"suction", "sucrose", "such"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subv</NAME>
          <VALUE>{"er", "", {"subvert", "subversive"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subu</NAME>
          <VALUE>{"rb", "", {"suburbia", "suburb"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subtr</NAME>
          <VALUE>{"a", "", {"subtrahend", "subtracter"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subtle</NAME>
          <VALUE>{"", "", {"subtlety", "subtle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subtl</NAME>
          <VALUE>{"", "e", {"subtly"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subte</NAME>
          <VALUE>{"r", "", {"subterranean", "subterfuge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subt</NAME>
          <VALUE>{"", "elr", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subsume</NAME>
          <VALUE>{"", "", {"subsumed", "subsume"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subsu</NAME>
          <VALUE>{"m", "e", {"subsuming"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> substituti</NAME>
          <VALUE>{"on", "", {"substitutionary", "substitution"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> substitut</NAME>
          <VALUE>{"", "i", {"substitute"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> substi</NAME>
          <VALUE>{"tu", "t", {"substituent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> substa</NAME>
          <VALUE>{"nti", "a", {"substantive"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> substantia</NAME>
          <VALUE>{"", "", {"substantiate", "substantial"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subst</NAME>
          <VALUE>{"", "ai", {"substrate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subsis</NAME>
          <VALUE>{"t", "", {"subsistent", "subsist"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subsid</NAME>
          <VALUE>{"", "", {"subsidy", "subsidiary"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subsi</NAME>
          <VALUE>{"", "ds", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subs</NAME>
          <VALUE>{"", "itu", {"subservient"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> submitt</NAME>
          <VALUE>{"", "", {"submitting", "submitted", "submittal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> submi</NAME>
          <VALUE>{"t", "t", {"submit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subm</NAME>
          <VALUE>{"", "i", {"submersible"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subl</NAME>
          <VALUE>{"im", "", {"subliminal", "sublimate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subje</NAME>
          <VALUE>{"ct", "i", {"subjects", "subject"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> subj</NAME>
          <VALUE>{"", "e", {"subjunctive"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sub</NAME>
          <VALUE>{"", "jlmstuv", {"subrogation", "subpoena", "sub"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> su</NAME>
          <VALUE>{"", "bcdefgilmnprstz", {"suave"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Styr</NAME>
          <VALUE>{"", "", {"Styrofoam", "styrene"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> styli</NAME>
          <VALUE>{"", "", {"stylites", "stylish", "styli"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> styl</NAME>
          <VALUE>{"", "ie", {"stylus"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sty</NAME>
          <VALUE>{"", "lr", {"Styx", "stymie", "Stygian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stut</NAME>
          <VALUE>{"t", "", {"Stuttgart", "stutter"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stur</NAME>
          <VALUE>{"", "", {"Sturm", "sturgeon", "sturdy", "Sturbridge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stupe</NAME>
          <VALUE>{"", "f", {"stupendous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stupef</NAME>
          <VALUE>{"", "", {"stupefy", "stupefaction"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stup</NAME>
          <VALUE>{"", "e", {"stupor", "stupid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stun</NAME>
          <VALUE>{"", "", {"stunt", "stunk", "stung", "stun"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stump</NAME>
          <VALUE>{"", "", {"stumpy", "stumpage", "stump"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stum</NAME>
          <VALUE>{"", "p", {"stumble"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stuf</NAME>
          <VALUE>{"f", "", {"stuffy", "stuff"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> studi</NAME>
          <VALUE>{"o", "", {"studious", "studio"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stude</NAME>
          <VALUE>{"", "", {"student", "Studebaker"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stud</NAME>
          <VALUE>{"", "ei", {"study", "stud"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stuc</NAME>
          <VALUE>{"", "", {"stuck", "stucco"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stubb</NAME>
          <VALUE>{"", "", {"stubby", "stubborn", "stubble"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stub</NAME>
          <VALUE>{"", "b", {"stub"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stu</NAME>
          <VALUE>{"", "bcdfmnprt", {"Stuyvesant", "stultify", "Stuart", "Stu"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> struc</NAME>
          <VALUE>{"", "t", {"struck"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> struct</NAME>
          <VALUE>{"ur", "", {"structure", "structural"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stru</NAME>
          <VALUE>{"", "c", {"strut", "strung", "strum", "struggle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strop</NAME>
          <VALUE>{"", "", {"strophe", "strop"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strong</NAME>
          <VALUE>{"", "", {"strongroom", "stronghold", "strong"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stron</NAME>
          <VALUE>{"", "g", {"strontium"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Strom</NAME>
          <VALUE>{"", "", {"Stromberg", "Strom"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strob</NAME>
          <VALUE>{"", "", {"stroboscopic", "strobe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stro</NAME>
          <VALUE>{"", "bmnp", {"strove", "stroll", "stroke", "strode"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> striv</NAME>
          <VALUE>{"e", "", {"striven", "strive"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strip</NAME>
          <VALUE>{"", "", {"stripy", "striptease", "stripe", "strip"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strin</NAME>
          <VALUE>{"g", "", {"strings", "stringy", "stringent", "string"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strik</NAME>
          <VALUE>{"e", "", {"strikebreak", "strike"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strid</NAME>
          <VALUE>{"e", "", {"strident", "stride"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strict</NAME>
          <VALUE>{"", "", {"stricture", "stricter", "strict"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strick</NAME>
          <VALUE>{"", "", {"Strickland", "stricken"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stric</NAME>
          <VALUE>{"", "kt", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stri</NAME>
          <VALUE>{"", "cdknpv", {"strife", "striate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stres</NAME>
          <VALUE>{"s", "", {"stressful", "stress"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strep</NAME>
          <VALUE>{"to", "", {"streptomycin", "streptococcus"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> streng</NAME>
          <VALUE>{"th", "", {"strengthen", "strength"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stren</NAME>
          <VALUE>{"", "g", {"strenuous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stree</NAME>
          <VALUE>{"t", "", {"streets", "streetcar", "street"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strea</NAME>
          <VALUE>{"", "m", {"streak"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stream</NAME>
          <VALUE>{"", "", {"streamside", "streamline", "stream"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stre</NAME>
          <VALUE>{"", "aenps", {"strewn", "stretch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stra</NAME>
          <VALUE>{"", "bintw", {"stray", "Strauss", "strap", "straggle", "strafe", "straddle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> straw</NAME>
          <VALUE>{"", "", {"strawflower", "strawberry", "straw"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strato</NAME>
          <VALUE>{"spher", "", {"stratospheric", "stratosphere"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strategi</NAME>
          <VALUE>{"", "", {"strategist", "strategic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strate</NAME>
          <VALUE>{"g", "i", {"strategy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strata</NAME>
          <VALUE>{"", "", {"stratagem", "strata"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strat</NAME>
          <VALUE>{"", "aeo", {"stratum", "Stratton", "stratify", "Stratford"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strang</NAME>
          <VALUE>{"", "", {"strangulate", "strangle", "strange"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stran</NAME>
          <VALUE>{"", "g", {"strand"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> straig</NAME>
          <VALUE>{"ht", "", {"straightway", "straightforward", "straighten", "straightaway", "straight"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strai</NAME>
          <VALUE>{"", "g", {"strait", "strain"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> strab</NAME>
          <VALUE>{"ism", "", {"strabismus", "strabismic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> str</NAME>
          <VALUE>{"", "aeiou", {"strychnine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stowa</NAME>
          <VALUE>{"", "", {"stowaway", "stowage"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stow</NAME>
          <VALUE>{"", "a", {"stow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> story</NAME>
          <VALUE>{"", "", {"storyteller", "storyboard", "story"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> storm</NAME>
          <VALUE>{"", "", {"stormy", "stormbound", "storm"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> store</NAME>
          <VALUE>{"", "", {"Storey", "storeroom", "storekeep", "storehouse", "store"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stor</NAME>
          <VALUE>{"", "emy", {"stork", "storage"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stop</NAME>
          <VALUE>{"", "", {"stopwatch", "stoppage", "stopover", "stopgap", "stopcock", "stopband", "stop"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stoo</NAME>
          <VALUE>{"", "", {"stoop", "stool", "stooge", "stood"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stone</NAME>
          <VALUE>{"", "w", {"Stonehenge", "stonecrop", "stone"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stonewa</NAME>
          <VALUE>{"", "", {"stoneware", "stonewall"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stonew</NAME>
          <VALUE>{"", "a", {"stonewort"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ston</NAME>
          <VALUE>{"", "e", {"stony"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stom</NAME>
          <VALUE>{"", "", {"stomp", "stomach"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stole</NAME>
          <VALUE>{"", "", {"stolen", "stole"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stol</NAME>
          <VALUE>{"", "e", {"stolid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stok</NAME>
          <VALUE>{"e", "", {"Stokes", "stoke"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stoi</NAME>
          <VALUE>{"c", "", {"stoichiometry", "stoic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stoc</NAME>
          <VALUE>{"", "k", {"stochastic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stockh</NAME>
          <VALUE>{"ol", "", {"Stockholm", "stockholder"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stock</NAME>
          <VALUE>{"", "h", {"stocky", "Stockton", "stockroom", "stockpile", "stockbroker", "stockade", "stock"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sto</NAME>
          <VALUE>{"", "ciklmnoprw", {"stove", "stout", "stodgy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stir</NAME>
          <VALUE>{"", "", {"stirrup", "Stirling", "stir"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stip</NAME>
          <VALUE>{"", "", {"stipulate", "stipple", "stipend"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stink</NAME>
          <VALUE>{"", "", {"stinky", "stinkpot", "stink"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sting</NAME>
          <VALUE>{"", "", {"stingy", "sting"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stin</NAME>
          <VALUE>{"", "gk", {"stint"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stimula</NAME>
          <VALUE>{"", "t", {"stimulant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stimulat</NAME>
          <VALUE>{"", "", {"stimulatory", "stimulate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stim</NAME>
          <VALUE>{"ul", "a", {"stimulus", "stimuli"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> still</NAME>
          <VALUE>{"", "", {"stillwater", "stillbirth", "still"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stile</NAME>
          <VALUE>{"", "", {"stiletto", "stile"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stil</NAME>
          <VALUE>{"", "el", {"stilt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stig</NAME>
          <VALUE>{"ma", "", {"stigmata", "stigma"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stiff</NAME>
          <VALUE>{"", "", {"stiffen", "stiff"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stif</NAME>
          <VALUE>{"", "f", {"stifle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stic</NAME>
          <VALUE>{"k", "l", {"sticky", "sticktight", "stickpin", "stick"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stickl</NAME>
          <VALUE>{"e", "", {"stickleback", "stickle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sti</NAME>
          <VALUE>{"", "cfglmnpr", {"stitch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Steward</NAME>
          <VALUE>{"", "", {"stewardess", "steward"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stewa</NAME>
          <VALUE>{"r", "d", {"Stewart"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stew</NAME>
          <VALUE>{"", "a", {"stew"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stevens</NAME>
          <VALUE>{"", "", {"Stevenson", "Stevens"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Steven</NAME>
          <VALUE>{"", "s", {"Steven"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stev</NAME>
          <VALUE>{"e", "n", {"stevedore", "Steve"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stet</NAME>
          <VALUE>{"", "", {"Stetson", "stethoscope"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stern</NAME>
          <VALUE>{"", "", {"sternum", "Sterno", "Sternberg", "sternal", "stern"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stere</NAME>
          <VALUE>{"o", "", {"stereoscopy", "stereography", "stereo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ster</NAME>
          <VALUE>{"", "en", {"steroid", "sterling", "sterile", "steradian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stephens</NAME>
          <VALUE>{"", "", {"Stephenson", "Stephens"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stephe</NAME>
          <VALUE>{"n", "s", {"Stephen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stepha</NAME>
          <VALUE>{"n", "", {"stephanotis", "Stephanie"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> steph</NAME>
          <VALUE>{"", "ae", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> step</NAME>
          <VALUE>{"", "h", {"stepwise", "stepson", "steprelation", "steppe", "stepmother", "stepchild", "step"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stenog</NAME>
          <VALUE>{"raph", "", {"stenography", "stenographer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> steno</NAME>
          <VALUE>{"", "g", {"stenotype"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stenc</NAME>
          <VALUE>{"", "", {"stencil", "stench"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sten</NAME>
          <VALUE>{"", "co", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stel</NAME>
          <VALUE>{"la", "", {"stellar", "Stella"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stei</NAME>
          <VALUE>{"n", "", {"Steiner", "Steinberg", "stein"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> steepl</NAME>
          <VALUE>{"e", "", {"steeplechase", "steeplebush", "steeple"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> steep</NAME>
          <VALUE>{"", "l", {"steepen", "steep"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Steel</NAME>
          <VALUE>{"", "", {"steely", "steelmake", "Steele", "steel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stee</NAME>
          <VALUE>{"", "lp", {"steeve", "steer", "Steen", "steed"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stea</NAME>
          <VALUE>{"", "dlmr", {"steak"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stear</NAME>
          <VALUE>{"", "", {"Stearns", "stearic", "stearate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> steam</NAME>
          <VALUE>{"", "", {"steaming", "steamy", "steamboat", "steam"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stealt</NAME>
          <VALUE>{"h", "", {"stealthy", "stealth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> steal</NAME>
          <VALUE>{"", "t", {"steal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stead</NAME>
          <VALUE>{"", "", {"steady", "steadfast", "stead"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ste</NAME>
          <VALUE>{"", "aeilnprtvw", {"Steuben", "stem", "Stegosaurus", "Stefan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stay</NAME>
          <VALUE>{"", "", {"stays", "stayed", "stay"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Staun</NAME>
          <VALUE>{"", "", {"Staunton", "staunch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stau</NAME>
          <VALUE>{"", "n", {"Stauffer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> statut</NAME>
          <VALUE>{"", "", {"statutory", "statute"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> statue</NAME>
          <VALUE>{"", "", {"statuette", "statue"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> statu</NAME>
          <VALUE>{"", "et", {"status", "stature", "statuary"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stationa</NAME>
          <VALUE>{"r", "", {"stationary", "stationarity"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> statio</NAME>
          <VALUE>{"n", "a", {"stationmaster", "stationery"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stati</NAME>
          <VALUE>{"", "o", {"statistician", "static"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> state</NAME>
          <VALUE>{"", "rs", {"stated", "statewide", "Staten", "state"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> statesma</NAME>
          <VALUE>{"n", "", {"statesmanlike", "statesman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> states</NAME>
          <VALUE>{"", "m", {"states"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stater</NAME>
          <VALUE>{"", "", {"stateroom", "stater"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stat</NAME>
          <VALUE>{"", "eiu", {"stator", "Statler"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stas</NAME>
          <VALUE>{"", "", {"stasis", "stash"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> starv</NAME>
          <VALUE>{"", "", {"starve", "starvation"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> start</NAME>
          <VALUE>{"", "", {"starts", "starting", "started", "startup", "startle", "start"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> starli</NAME>
          <VALUE>{"", "", {"starling", "starlight"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> starl</NAME>
          <VALUE>{"", "i", {"starlet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stark</NAME>
          <VALUE>{"", "", {"Starkey", "stark"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> starc</NAME>
          <VALUE>{"h", "", {"starchy", "starch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> star</NAME>
          <VALUE>{"", "ckltv", {"starship", "Starr", "stargaze", "starfish", "stare", "stardom", "starboard", "star"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stapl</NAME>
          <VALUE>{"e", "", {"Stapleton", "staple"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> staph</NAME>
          <VALUE>{"", "", {"staphylococcus", "staph"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stap</NAME>
          <VALUE>{"", "hl", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stann</NAME>
          <VALUE>{"", "", {"stannous", "stannic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stand</NAME>
          <VALUE>{"", "a", {"standstill", "standpoint", "standoff", "Standish", "standeth", "standby", "stand"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stanch</NAME>
          <VALUE>{"", "", {"stanchion", "stanch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stanc</NAME>
          <VALUE>{"", "h", {"stance"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stan</NAME>
          <VALUE>{"", "cdn", {"stanza", "Stanton", "Stanley", "stank", "Stanhope", "Stanford", "Stan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stamp</NAME>
          <VALUE>{"", "", {"stampede", "stamp"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stami</NAME>
          <VALUE>{"na", "", {"staminate", "stamina"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Stam</NAME>
          <VALUE>{"", "ip", {"stammer", "Stamford", "stamen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stall</NAME>
          <VALUE>{"", "", {"stallion", "stall"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stale</NAME>
          <VALUE>{"", "", {"Staley", "stalemate", "stale"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stal</NAME>
          <VALUE>{"", "el", {"stalwart", "stalk", "Stalin", "stalactite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stairw</NAME>
          <VALUE>{"", "", {"stairwell", "stairway"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stair</NAME>
          <VALUE>{"", "w", {"staircase", "stair"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stai</NAME>
          <VALUE>{"", "r", {"stain", "staid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stagn</NAME>
          <VALUE>{"a", "", {"stagnate", "stagnant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stage</NAME>
          <VALUE>{"", "", {"stagestruck", "stagecoach", "stage"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stag</NAME>
          <VALUE>{"", "en", {"stagy", "stag"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Staf</NAME>
          <VALUE>{"f", "", {"Stafford", "staff"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stad</NAME>
          <VALUE>{"i", "", {"stadium", "stadia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stac</NAME>
          <VALUE>{"", "", {"Stacy", "stack", "staccato"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stab</NAME>
          <VALUE>{"", "l", {"stabile", "stab"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stablem</NAME>
          <VALUE>{"", "", {"stablemen", "stableman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> stabl</NAME>
          <VALUE>{"e", "m", {"stable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sta</NAME>
          <VALUE>{"", "bcdfgilmnprstuy", {"stave", "stake", "Stahl"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> st</NAME>
          <VALUE>{"", "aeioruy", {"St"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> SS</NAME>
          <VALUE>{"", "", {"SSW", "SST", "SSE"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squirm</NAME>
          <VALUE>{"", "", {"squirmy", "squirm"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squire</NAME>
          <VALUE>{"", "", {"squirehood", "squire"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squir</NAME>
          <VALUE>{"", "em", {"squirt", "squirrel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squi</NAME>
          <VALUE>{"", "r", {"squishy", "squint", "squill", "squid", "Squibb"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squee</NAME>
          <VALUE>{"", "", {"squeeze", "squeegee"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squea</NAME>
          <VALUE>{"", "k", {"squeamish", "squeal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squeak</NAME>
          <VALUE>{"", "", {"squeaky", "squeak"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sque</NAME>
          <VALUE>{"", "ae", {"squelch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squa</NAME>
          <VALUE>{"", "dlstw", {"square", "squander", "squamous", "squabble"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squaw</NAME>
          <VALUE>{"", "", {"squawroot", "squawk", "squawbush", "squaw"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squatte</NAME>
          <VALUE>{"", "", {"squatter", "squatted"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squatt</NAME>
          <VALUE>{"", "e", {"squatting"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squat</NAME>
          <VALUE>{"", "t", {"squat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squas</NAME>
          <VALUE>{"h", "", {"squashy", "squashberry", "squash"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squal</NAME>
          <VALUE>{"", "", {"squall", "squalid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> squad</NAME>
          <VALUE>{"", "", {"squadron", "squad"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sq</NAME>
          <VALUE>{"u", "aei", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spy</NAME>
          <VALUE>{"", "", {"spyglass", "spy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zig</NAME>
          <VALUE>{"", "z", {"zigging", "zig"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sput</NAME>
          <VALUE>{"", "", {"sputter", "sputnik"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spur</NAME>
          <VALUE>{"", "", {"spurt", "spurn", "spurious", "spurge", "spur"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spun</NAME>
          <VALUE>{"", "", {"spunk", "spun"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spum</NAME>
          <VALUE>{"", "", {"spumoni", "spume"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spu</NAME>
          <VALUE>{"", "mnrt", {"spud"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spru</NAME>
          <VALUE>{"", "", {"sprung", "sprue", "spruce"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sprou</NAME>
          <VALUE>{"", "", {"sprout", "Sproul"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Spro</NAME>
          <VALUE>{"", "u", {"sprocket"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spring</NAME>
          <VALUE>{"", "t", {"springy", "Springfield", "springe", "springboard", "spring"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> springt</NAME>
          <VALUE>{"", "", {"springtime", "springtail"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sprin</NAME>
          <VALUE>{"", "g", {"sprint", "sprinkle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sprig</NAME>
          <VALUE>{"", "", {"sprightly", "sprig"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spri</NAME>
          <VALUE>{"", "gn", {"sprite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spre</NAME>
          <VALUE>{"", "", {"spree", "spread"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spra</NAME>
          <VALUE>{"", "", {"spray", "sprawl", "sprang", "sprain", "Sprague"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spr</NAME>
          <VALUE>{"", "aeiou", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spou</NAME>
          <VALUE>{"", "", {"spout", "spouse"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spot</NAME>
          <VALUE>{"", "", {"spotty", "spotlight", "spot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sportswrite</NAME>
          <VALUE>{"", "", {"sportswriter", "sportswrite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sportswr</NAME>
          <VALUE>{"it", "e", {"sportswriting"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sportsw</NAME>
          <VALUE>{"", "r", {"sportswear"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sportsm</NAME>
          <VALUE>{"", "", {"sportsmen", "sportsman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sports</NAME>
          <VALUE>{"", "mw", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sport</NAME>
          <VALUE>{"", "s", {"sporty", "sport"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spor</NAME>
          <VALUE>{"", "t", {"spore", "sporadic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spoon</NAME>
          <VALUE>{"", "", {"spoonful", "spoon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spook</NAME>
          <VALUE>{"", "", {"spooky", "spook"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spoo</NAME>
          <VALUE>{"", "kn", {"spool", "spoof"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spont</NAME>
          <VALUE>{"ane", "", {"spontaneous", "spontaneity"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spong</NAME>
          <VALUE>{"", "", {"spongy", "sponge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spon</NAME>
          <VALUE>{"", "gt", {"sponsor"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spokesm</NAME>
          <VALUE>{"", "", {"spokesmen", "spokesman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spokes</NAME>
          <VALUE>{"", "m", {"spokesperson"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spoke</NAME>
          <VALUE>{"", "s", {"spoken", "spoke"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spok</NAME>
          <VALUE>{"", "e", {"Spokane"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Spoi</NAME>
          <VALUE>{"l", "", {"spoilage", "spoil"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spo</NAME>
          <VALUE>{"", "iknortu", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> splu</NAME>
          <VALUE>{"", "", {"splutter", "splurge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> splo</NAME>
          <VALUE>{"tch", "", {"splotchy", "splotch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> splint</NAME>
          <VALUE>{"", "", {"splintery", "splint"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> splin</NAME>
          <VALUE>{"", "t", {"spline"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spli</NAME>
          <VALUE>{"", "n", {"split", "splice"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> splen</NAME>
          <VALUE>{"", "", {"splenetic", "splendid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> splee</NAME>
          <VALUE>{"n", "", {"spleenwort", "spleen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sple</NAME>
          <VALUE>{"", "en", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spla</NAME>
          <VALUE>{"", "sy", {"splat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> splay</NAME>
          <VALUE>{"", "", {"splayed", "splay"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> splas</NAME>
          <VALUE>{"h", "", {"splashy", "splash"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spl</NAME>
          <VALUE>{"", "aeiou", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spite</NAME>
          <VALUE>{"", "", {"spiteful", "spite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spit</NAME>
          <VALUE>{"", "e", {"spitz", "spittle", "spitfire", "spit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spiri</NAME>
          <VALUE>{"t", "", {"spiritual", "spirit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spir</NAME>
          <VALUE>{"", "i", {"Spiro", "spire", "spiral"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spino</NAME>
          <VALUE>{"", "", {"spinoff", "spinodal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spinn</NAME>
          <VALUE>{"", "", {"spinneret", "spinnaker"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spina</NAME>
          <VALUE>{"", "", {"spinal", "spinach"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spin</NAME>
          <VALUE>{"", "ano", {"spiny", "spinster", "spine", "spindle", "spin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spil</NAME>
          <VALUE>{"", "", {"spilt", "spill"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spike</NAME>
          <VALUE>{"", "", {"spikenard", "spike"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spik</NAME>
          <VALUE>{"", "e", {"spiky"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spid</NAME>
          <VALUE>{"er", "", {"spidery", "spiderwort", "spider"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spic</NAME>
          <VALUE>{"", "e", {"spicy", "Spica"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spice</NAME>
          <VALUE>{"", "", {"spicebush", "spice"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spi</NAME>
          <VALUE>{"", "cdklnrt", {"spigot", "Spiegel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sphero</NAME>
          <VALUE>{"id", "", {"spheroidal", "spheroid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sphe</NAME>
          <VALUE>{"r", "o", {"spherule", "spheric", "sphere"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spha</NAME>
          <VALUE>{"", "", {"sphalerite", "sphagnum"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sph</NAME>
          <VALUE>{"", "ae", {"sphinx"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sperm</NAME>
          <VALUE>{"", "", {"spermatophyte", "sperm"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Zu</NAME>
          <VALUE>{"", "", {"Zurich", "zucchini"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Zoro</NAME>
          <VALUE>{"ast", "", {"Zoroastrian", "Zoroaster"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Zor</NAME>
          <VALUE>{"", "o", {"Zorn"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zoo</NAME>
          <VALUE>{"", "l", {"zoom", "zoo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zom</NAME>
          <VALUE>{"b", "", {"zombie", "Zomba"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Zod</NAME>
          <VALUE>{"iac", "", {"zodiacal", "zodiac"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zo</NAME>
          <VALUE>{"", "dmor", {"zounds", "zone", "Zoe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zi</NAME>
          <VALUE>{"", "noprg", {"Ziegler", "Zimmerman", "zilch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zir</NAME>
          <VALUE>{"con", "", {"zirconium", "zircon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zip</NAME>
          <VALUE>{"", "", {"zippy", "zip"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Zio</NAME>
          <VALUE>{"n", "", {"Zionism", "Zion"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> zin</NAME>
          <VALUE>{"", "", {"zing", "zinc"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> z</NAME>
          <VALUE>{"", "iouae", {"zygote", "z's", "zloty", "z"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sper</NAME>
          <VALUE>{"", "m", {"Sperry"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spenc</NAME>
          <VALUE>{"er", "", {"Spencerian", "Spencer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Spen</NAME>
          <VALUE>{"", "cd", {"spent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spel</NAME>
          <VALUE>{"l", "", {"spellcheck", "spellbound", "spell"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> speed</NAME>
          <VALUE>{"", "", {"speedy", "speedwell", "speedup", "speedometer", "speedboat", "speed"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spee</NAME>
          <VALUE>{"", "d", {"speech"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> specu</NAME>
          <VALUE>{"la", "", {"speculate", "specular"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spectros</NAME>
          <VALUE>{"cop", "", {"spectroscopy", "spectroscopic", "spectroscope"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spectrog</NAME>
          <VALUE>{"ra", "p", {"spectrogram"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spectrograp</NAME>
          <VALUE>{"h", "", {"spectrography", "spectrograph"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spectro</NAME>
          <VALUE>{"", "gs", {"spectrophotometer", "spectrometer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spectra</NAME>
          <VALUE>{"", "", {"spectral", "spectra"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spectr</NAME>
          <VALUE>{"", "ao", {"spectrum"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Specta</NAME>
          <VALUE>{"", "c", {"spectator"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spectac</NAME>
          <VALUE>{"", "", {"spectacular", "spectacle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spect</NAME>
          <VALUE>{"", "ar", {"Spector"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> speck</NAME>
          <VALUE>{"", "", {"speckle", "speck"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> specif</NAME>
          <VALUE>{"", "i", {"specify"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> specie</NAME>
          <VALUE>{"", "", {"species", "specie"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> speci</NAME>
          <VALUE>{"", "ef", {"specious", "specimen", "special"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spec</NAME>
          <VALUE>{"", "iktu", {"spec"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spea</NAME>
          <VALUE>{"", "kr", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spear</NAME>
          <VALUE>{"", "", {"spearmint", "spearhead", "spear"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> speak</NAME>
          <VALUE>{"", "", {"speakeasy", "speak"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spe</NAME>
          <VALUE>{"", "acelnr", {"spew", "sped"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spa</NAME>
          <VALUE>{"", "cnrsty", {"spawn", "spavin", "Spaulding", "spalding", "Spain", "spaghetti", "spade", "spa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spay</NAME>
          <VALUE>{"", "", {"spayed", "spay"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spat</NAME>
          <VALUE>{"", "", {"spatula", "spatterdock", "spatlum", "spatial", "spate", "spat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spas</NAME>
          <VALUE>{"", "", {"spastic", "spasm"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Spart</NAME>
          <VALUE>{"a", "", {"Spartan", "Sparta"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spark</NAME>
          <VALUE>{"", "", {"sparky", "Sparkman", "sparkle", "spark"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spar</NAME>
          <VALUE>{"", "kt", {"sparse", "sparrow", "sparling", "sparge", "spare", "spar"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spani</NAME>
          <VALUE>{"", "", {"Spanish", "spaniel", "Spaniard"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> span</NAME>
          <VALUE>{"", "i", {"spangle", "spandrel", "span"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> space</NAME>
          <VALUE>{"", "s", {"spacetime", "spacecraft", "space"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> spac</NAME>
          <VALUE>{"", "e", {"spacious"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sp</NAME>
          <VALUE>{"", "aehiloruy", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soy</NAME>
          <VALUE>{"", "", {"soybean", "soya", "soy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sow</NAME>
          <VALUE>{"", "", {"sown", "sowbelly", "sow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sove</NAME>
          <VALUE>{"reign", "", {"sovereignty", "sovereign"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sov</NAME>
          <VALUE>{"", "ei", {"sovkhoz"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> southwe</NAME>
          <VALUE>{"st", "", {"southwestern", "southwest"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> southw</NAME>
          <VALUE>{"", "e", {"southward"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> souther</NAME>
          <VALUE>{"n", "", {"southernmost", "southern"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> southea</NAME>
          <VALUE>{"st", "", {"southeastern", "southeast"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> southe</NAME>
          <VALUE>{"", "ar", {"Southey"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> South</NAME>
          <VALUE>{"", "ew", {"southpaw", "southland", "southbound", "Southampton", "south"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sout</NAME>
          <VALUE>{"", "h", {"soutane"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sour</NAME>
          <VALUE>{"", "c", {"sourwood", "sourdough", "sourberry", "sour"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soun</NAME>
          <VALUE>{"d", "", {"sounds", "soundproof", "sound"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soul</NAME>
          <VALUE>{"", "", {"soulful", "soul"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soug</NAME>
          <VALUE>{"h", "", {"sought", "sough"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sou</NAME>
          <VALUE>{"", "glnrt", {"souvenir", "Sousa", "soup", "souffle", "sou"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sort</NAME>
          <VALUE>{"", "", {"sorted", "sortie", "sort"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sorro</NAME>
          <VALUE>{"w", "", {"sorrowful", "sorrow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sorr</NAME>
          <VALUE>{"", "o", {"sorry", "sorrel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Soren</NAME>
          <VALUE>{"s", "", {"Sorenson", "Sorensen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sore</NAME>
          <VALUE>{"", "n", {"sore"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sor</NAME>
          <VALUE>{"", "ert", {"sorption", "sorority", "sorghum", "sordid", "sorcery", "sorb", "sora"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sophom</NAME>
          <VALUE>{"or", "", {"sophomoric", "sophomore"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sophoc</NAME>
          <VALUE>{"le", "", {"Sophocles", "Sophoclean"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sopho</NAME>
          <VALUE>{"", "cm", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sophi</NAME>
          <VALUE>{"", "s", {"Sophie", "Sophia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sophist</NAME>
          <VALUE>{"", "", {"sophistry", "sophisticate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sophis</NAME>
          <VALUE>{"", "t", {"sophism"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Soph</NAME>
          <VALUE>{"", "io", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sop</NAME>
          <VALUE>{"", "h", {"soprano", "sop"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sooths</NAME>
          <VALUE>{"ay", "", {"soothsayer", "soothsay"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sooth</NAME>
          <VALUE>{"", "s", {"soothe", "sooth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soot</NAME>
          <VALUE>{"", "h", {"soot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soo</NAME>
          <VALUE>{"", "t", {"soon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sonor</NAME>
          <VALUE>{"", "", {"sonorous", "sonority", "Sonora"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sono</NAME>
          <VALUE>{"", "r", {"Sonoma", "sonogram"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sonn</NAME>
          <VALUE>{"", "", {"sonny", "sonnet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> songb</NAME>
          <VALUE>{"", "", {"songbook", "songbag"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> song</NAME>
          <VALUE>{"", "b", {"songful", "song"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sona</NAME>
          <VALUE>{"", "", {"sonata", "sonar", "sonant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> son</NAME>
          <VALUE>{"", "agno", {"Sony", "sonic", "son"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Somm</NAME>
          <VALUE>{"e", "", {"Sommerfeld", "sommelier"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> somew</NAME>
          <VALUE>{"h", "", {"somewhere", "somewhat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> somet</NAME>
          <VALUE>{"", "i", {"something"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Somers</NAME>
          <VALUE>{"", "", {"Somerset", "somersault", "Somers"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> somer</NAME>
          <VALUE>{"", "s", {"Somerville"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> someo</NAME>
          <VALUE>{"ne", "", {"someone'll", "someone"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> someb</NAME>
          <VALUE>{"ody", "", {"somebody'll", "somebody"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> some</NAME>
          <VALUE>{"", "bortw", {"someplace", "somehow", "someday", "some"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> somb</NAME>
          <VALUE>{"", "", {"sombre", "somber"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soma</NAME>
          <VALUE>{"", "l", {"somatic", "soma"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Somal</NAME>
          <VALUE>{"", "", {"Somali", "somal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> som</NAME>
          <VALUE>{"", "abem", {"somnolent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> solve</NAME>
          <VALUE>{"", "", {"solvent", "solve"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> solv</NAME>
          <VALUE>{"", "e", {"solvate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> solut</NAME>
          <VALUE>{"", "", {"solution", "solute"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> solu</NAME>
          <VALUE>{"", "t", {"soluble"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Solo</NAME>
          <VALUE>{"", "", {"Solon", "Solomon", "solo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> solita</NAME>
          <VALUE>{"", "", {"solitary", "solitaire"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> solit</NAME>
          <VALUE>{"", "a", {"solitude", "soliton"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> solid</NAME>
          <VALUE>{"", "i", {"solidus", "solidarity", "solid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> solic</NAME>
          <VALUE>{"it", "o", {"solicitude", "solicitation", "solicit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> solicito</NAME>
          <VALUE>{"", "", {"solicitous", "solicitor"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soli</NAME>
          <VALUE>{"", "cdt", {"solipsism", "soliloquy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sole</NAME>
          <VALUE>{"", "", {"solenoid", "solemn", "solecism", "sole"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soldi</NAME>
          <VALUE>{"er", "", {"soldiery", "soldier"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sold</NAME>
          <VALUE>{"", "i", {"solder", "sold"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sola</NAME>
          <VALUE>{"", "", {"solar", "solace"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sol</NAME>
          <VALUE>{"", "adeiouv", {"solstice", "Sol"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soi</NAME>
          <VALUE>{"", "", {"soiree", "soil", "soignee"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> softw</NAME>
          <VALUE>{"", "", {"softwood", "software"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soft</NAME>
          <VALUE>{"", "w", {"soften", "softball", "soft"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sof</NAME>
          <VALUE>{"", "t", {"Sofia", "soffit", "sofa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sod</NAME>
          <VALUE>{"", "", {"sodium", "sodden", "soda", "sod"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Socr</NAME>
          <VALUE>{"at", "", {"Socratic", "Socrates"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> socke</NAME>
          <VALUE>{"", "", {"sockeye", "socket"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sock</NAME>
          <VALUE>{"", "e", {"sock"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> socio</NAME>
          <VALUE>{"", "", {"sociometry", "sociology", "socioeconomic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Socie</NAME>
          <VALUE>{"t", "", {"society", "Societe", "societal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> socia</NAME>
          <VALUE>{"", "", {"social", "sociable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soci</NAME>
          <VALUE>{"", "aeo", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soc</NAME>
          <VALUE>{"", "ikr", {"soccer", "Soc"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sobr</NAME>
          <VALUE>{"i", "", {"sobriquet", "sobriety"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sob</NAME>
          <VALUE>{"", "r", {"sober", "sob"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soaps</NAME>
          <VALUE>{"", "", {"soapsud", "soapstone"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soap</NAME>
          <VALUE>{"", "s", {"soapy", "soap"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> soa</NAME>
          <VALUE>{"", "p", {"soar", "soak"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> so</NAME>
          <VALUE>{"", "abcdfilmnopruvwy", {"sojourn", "soggy", "so"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sny</NAME>
          <VALUE>{"", "", {"Snyder", "snyaptic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snugg</NAME>
          <VALUE>{"l", "", {"snuggly", "snuggle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snug</NAME>
          <VALUE>{"", "g", {"snug"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snuf</NAME>
          <VALUE>{"f", "", {"snuffle", "snuff"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snu</NAME>
          <VALUE>{"", "fg", {"snub"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snowf</NAME>
          <VALUE>{"", "", {"snowflake", "snowfall"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snow</NAME>
          <VALUE>{"", "f", {"snowy", "snowstorm", "snowball", "snow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snor</NAME>
          <VALUE>{"", "", {"snort", "snorkel", "snore"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snoop</NAME>
          <VALUE>{"", "", {"snoopy", "snoop"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snoo</NAME>
          <VALUE>{"", "p", {"snook"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snob</NAME>
          <VALUE>{"", "b", {"snob"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snobb</NAME>
          <VALUE>{"", "", {"snobbish", "snobbery"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sno</NAME>
          <VALUE>{"", "borw", {"snout", "snotty"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snipp</NAME>
          <VALUE>{"", "", {"snippy", "snippet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snip</NAME>
          <VALUE>{"", "p", {"snipe", "snip"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sniff</NAME>
          <VALUE>{"", "", {"sniffle", "sniff"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snif</NAME>
          <VALUE>{"", "f", {"snifter"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sni</NAME>
          <VALUE>{"", "fp", {"snivel", "snigger", "Snider", "snick"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snee</NAME>
          <VALUE>{"", "", {"sneeze", "sneer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snea</NAME>
          <VALUE>{"k", "", {"sneaky", "sneak"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sne</NAME>
          <VALUE>{"", "ae", {"snell"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sna</NAME>
          <VALUE>{"", "gkpr", {"snazzy", "snatch", "snail", "snafu", "snack"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snar</NAME>
          <VALUE>{"", "", {"snarl", "snark", "snare"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snapp</NAME>
          <VALUE>{"", "", {"snappy", "snappish"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snap</NAME>
          <VALUE>{"", "p", {"snapshot", "snapdragon", "snapback", "snap"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snak</NAME>
          <VALUE>{"e", "", {"snakeroot", "snakebird", "snake"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> snag</NAME>
          <VALUE>{"", "", {"snagging", "snag"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sn</NAME>
          <VALUE>{"", "aeiouy", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Smy</NAME>
          <VALUE>{"", "", {"Smythe", "Smyrna"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smut</NAME>
          <VALUE>{"", "", {"smutty", "smut"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smug</NAME>
          <VALUE>{"", "", {"smuggle", "smug"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smud</NAME>
          <VALUE>{"g", "", {"smudgy", "smudge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smu</NAME>
          <VALUE>{"", "dgt", {"Smucker"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smoot</NAME>
          <VALUE>{"h", "", {"smoothbore", "smooth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smoo</NAME>
          <VALUE>{"", "t", {"smooch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smoke</NAME>
          <VALUE>{"", "s", {"smokehouse", "smoke"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smokes</NAME>
          <VALUE>{"", "", {"smokestack", "smokescreen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smok</NAME>
          <VALUE>{"", "e", {"smoky"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smo</NAME>
          <VALUE>{"", "ko", {"smother", "smolder", "smog"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smith</NAME>
          <VALUE>{"", "", {"smithy", "Smithson", "Smithfield", "smithereens", "smith"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smit</NAME>
          <VALUE>{"", "h", {"smitten"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smi</NAME>
          <VALUE>{"", "t", {"smirk", "smile"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> smel</NAME>
          <VALUE>{"", "l", {"smelt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sme</NAME>
          <VALUE>{"", "l", {"smear"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sma</NAME>
          <VALUE>{"", "l", {"smattering", "smash", "smart", "smack"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Smal</NAME>
          <VALUE>{"l", "e", {"smalltime", "smallpox", "smallish", "small"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sm</NAME>
          <VALUE>{"", "aeiouy", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slur</NAME>
          <VALUE>{"", "", {"slurry", "slurp", "slur"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slum</NAME>
          <VALUE>{"", "", {"slump", "slumber", "slum"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slugg</NAME>
          <VALUE>{"i", "", {"sluggish", "slugging"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slug</NAME>
          <VALUE>{"", "g", {"slug"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slu</NAME>
          <VALUE>{"", "gmr", {"slung", "sluice", "sludge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slow</NAME>
          <VALUE>{"", "", {"slowdown", "slow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Slove</NAME>
          <VALUE>{"n", "", {"Slovenia", "sloven"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slov</NAME>
          <VALUE>{"", "e", {"Slovakia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slou</NAME>
          <VALUE>{"", "", {"slough", "slouch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sloth</NAME>
          <VALUE>{"", "", {"slothful", "sloth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slot</NAME>
          <VALUE>{"", "h", {"slot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slop</NAME>
          <VALUE>{"", "", {"sloppy", "slope", "slop"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sloga</NAME>
          <VALUE>{"n", "", {"sloganeer", "slogan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slog</NAME>
          <VALUE>{"", "a", {"slogging", "slog"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sloa</NAME>
          <VALUE>{"n", "", {"Sloane", "Sloan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Slo</NAME>
          <VALUE>{"", "agptuvw", {"slosh", "sloop", "sloe", "Slocum", "slob"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sliv</NAME>
          <VALUE>{"er", "", {"slivery", "sliver"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slit</NAME>
          <VALUE>{"", "", {"slither", "slit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slipp</NAME>
          <VALUE>{"", "", {"slippery", "slippage"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slip</NAME>
          <VALUE>{"", "p", {"slip"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slin</NAME>
          <VALUE>{"g", "", {"slingshot", "sling"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slim</NAME>
          <VALUE>{"", "", {"slimy", "slime", "slim"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slid</NAME>
          <VALUE>{"", "", {"slide", "slid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slic</NAME>
          <VALUE>{"", "", {"slick", "slice"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sli</NAME>
          <VALUE>{"", "cdmnptvg", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slei</NAME>
          <VALUE>{"gh", "", {"sleight", "sleigh"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sleet</NAME>
          <VALUE>{"", "", {"sleety", "sleet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sleep</NAME>
          <VALUE>{"", "", {"sleepy", "sleepwalk", "sleep"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slee</NAME>
          <VALUE>{"", "pt", {"sleeve", "sleek"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sled</NAME>
          <VALUE>{"", "g", {"sled"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sledg</NAME>
          <VALUE>{"e", "", {"sledgehammer", "sledge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sle</NAME>
          <VALUE>{"", "dei", {"slew", "sleuth", "slept", "slender"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sla</NAME>
          <VALUE>{"", "cnptuv", {"slay", "slash", "slam", "slake", "slain", "slag", "sladang", "slab"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slavi</NAME>
          <VALUE>{"", "", {"slavish", "Slavic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slave</NAME>
          <VALUE>{"", "", {"slavery", "slave"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slav</NAME>
          <VALUE>{"", "ei", {"Slavonic", "Slav"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slau</NAME>
          <VALUE>{"ghter", "", {"slaughterhouse", "slaughter"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slate</NAME>
          <VALUE>{"", "", {"slater", "slate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slat</NAME>
          <VALUE>{"", "e", {"slat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slap</NAME>
          <VALUE>{"", "", {"slapstick", "slap"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sland</NAME>
          <VALUE>{"er", "", {"slanderous", "slander"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slan</NAME>
          <VALUE>{"", "d", {"slant", "slang"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> slac</NAME>
          <VALUE>{"k", "", {"slacken", "slack"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sl</NAME>
          <VALUE>{"", "aeiou", {"sly"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skyw</NAME>
          <VALUE>{"a", "", {"skyway", "skywave", "skyward"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skyli</NAME>
          <VALUE>{"", "", {"skyline", "skylight"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skyl</NAME>
          <VALUE>{"", "i", {"skylark"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sky</NAME>
          <VALUE>{"", "lw", {"skyscrape", "skyrocket", "skyjack", "skyhook", "Skye", "sky"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skul</NAME>
          <VALUE>{"", "l", {"skulk"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skull</NAME>
          <VALUE>{"", "", {"skullduggery", "skullcap", "skull"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sku</NAME>
          <VALUE>{"", "l", {"skunk"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skit</NAME>
          <VALUE>{"", "", {"skittle", "skit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skir</NAME>
          <VALUE>{"", "", {"skirt", "skirmish"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skip</NAME>
          <VALUE>{"", "", {"Skippy", "skipjack", "skip"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skin</NAME>
          <VALUE>{"", "", {"skinny", "skindive", "skin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skimp</NAME>
          <VALUE>{"", "", {"skimpy", "skimp"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skim</NAME>
          <VALUE>{"", "p", {"skimmer", "skim"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skil</NAME>
          <VALUE>{"l", "", {"skillful", "skillet", "skill"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skid</NAME>
          <VALUE>{"", "", {"skiddy", "skid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ski</NAME>
          <VALUE>{"", "dlmnprt", {"skiff", "ski"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sket</NAME>
          <VALUE>{"ch", "", {"sketchy", "sketchpad", "sketchbook", "sketch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skel</NAME>
          <VALUE>{"et", "", {"skeleton", "skeletal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ske</NAME>
          <VALUE>{"", "lt", {"skew", "skeptic", "skeet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ska</NAME>
          <VALUE>{"t", "e", {"skat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> skate</NAME>
          <VALUE>{"", "", {"skater", "skate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sk</NAME>
          <VALUE>{"", "aeiuy", {"Skopje"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> siz</NAME>
          <VALUE>{"", "e", {"sizzle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sixte</NAME>
          <VALUE>{"en", "", {"sixteenth", "sixteen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sixt</NAME>
          <VALUE>{"", "e", {"sixty", "sixtieth", "sixth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> six</NAME>
          <VALUE>{"", "t", {"sixgun", "sixfold", "six"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> situ</NAME>
          <VALUE>{"", "a", {"situs", "situ"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sit</NAME>
          <VALUE>{"", "u", {"site", "sit"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sisy</NAME>
          <VALUE>{"ph", "", {"Sisyphus", "Sisyphean"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sist</NAME>
          <VALUE>{"", "", {"Sistine", "sister"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sis</NAME>
          <VALUE>{"", "ty", {"siskin", "sisal", "sis"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sire</NAME>
          <VALUE>{"", "", {"siren", "sire"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sir</NAME>
          <VALUE>{"", "e", {"sirs", "Sirius", "sir"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sinuso</NAME>
          <VALUE>{"id", "", {"sinusoidal", "sinusoid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sinus</NAME>
          <VALUE>{"", "o", {"sinus"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sinu</NAME>
          <VALUE>{"", "s", {"sinuous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sink</NAME>
          <VALUE>{"", "", {"sinkhole", "sink"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sini</NAME>
          <VALUE>{"st", "", {"sinistral", "sinister"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> singlet</NAME>
          <VALUE>{"", "", {"singleton", "singlet"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> singl</NAME>
          <VALUE>{"e", "t", {"singlehanded", "single"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Singa</NAME>
          <VALUE>{"", "", {"Singapore", "singable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sing</NAME>
          <VALUE>{"", "al", {"singular", "singsong", "singe", "sing"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sinew</NAME>
          <VALUE>{"", "", {"sinewy", "sinew"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sine</NAME>
          <VALUE>{"", "w", {"sine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Since</NAME>
          <VALUE>{"", "r", {"since"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sinc</NAME>
          <VALUE>{"", "e", {"Sinclair"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sin</NAME>
          <VALUE>{"", "cegiku", {"sinter", "sinh", "sinful", "Sinai", "sin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> simult</NAME>
          <VALUE>{"ane", "", {"simultaneous", "simultaneity"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> simu</NAME>
          <VALUE>{"l", "t", {"simulcast", "simulate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> simplic</NAME>
          <VALUE>{"i", "", {"simplicity", "simplicial"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> simpli</NAME>
          <VALUE>{"", "cf", {"simplistic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> simple</NAME>
          <VALUE>{"", "", {"simplex", "simpleton", "simpleminded", "simplectic", "simple"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> simpl</NAME>
          <VALUE>{"", "ei", {"simply"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> simp</NAME>
          <VALUE>{"", "l", {"Simpson", "simper"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Simo</NAME>
          <VALUE>{"n", "", {"Simonson", "Simon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Simm</NAME>
          <VALUE>{"", "", {"Simmons", "simmer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> simi</NAME>
          <VALUE>{"l", "", {"similitude", "simile", "similar"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sim</NAME>
          <VALUE>{"", "imopu", {"Sims", "sima"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Silv</NAME>
          <VALUE>{"er", "", {"silvery", "silverware", "silversmith", "Silverman", "silver"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> silt</NAME>
          <VALUE>{"", "", {"silty", "siltstone", "siltation", "silt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sill</NAME>
          <VALUE>{"", "", {"silly", "sill"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> silk</NAME>
          <VALUE>{"", "", {"silky", "silkworm", "silken", "silk"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> silico</NAME>
          <VALUE>{"n", "", {"silicone", "silicon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> silici</NAME>
          <VALUE>{"", "", {"silicide", "silicic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> silica</NAME>
          <VALUE>{"", "", {"silicate", "silica"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sili</NAME>
          <VALUE>{"c", "aio", {"siliceous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sila</NAME>
          <VALUE>{"", "", {"Silas", "silane", "silage"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sil</NAME>
          <VALUE>{"", "aikltv", {"silo", "silhouette", "silent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Signo</NAME>
          <VALUE>{"r", "", {"Signora", "Signor"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> signi</NAME>
          <VALUE>{"f", "", {"signify", "significant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> signa</NAME>
          <VALUE>{"", "", {"signature", "signal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sign</NAME>
          <VALUE>{"", "aio", {"signpost", "signet", "signboard", "sign"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sigm</NAME>
          <VALUE>{"", "", {"Sigmund", "sigma"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sigh</NAME>
          <VALUE>{"", "t", {"sigh"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sights</NAME>
          <VALUE>{"ee", "", {"sightseer", "sightseeing", "sightsee"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sight</NAME>
          <VALUE>{"", "s", {"sight"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sig</NAME>
          <VALUE>{"", "hmn", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sien</NAME>
          <VALUE>{"", "", {"sienna", "Siena"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sieg</NAME>
          <VALUE>{"", "e", {"Siegmund", "Sieglinda", "Siegfried"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Siege</NAME>
          <VALUE>{"", "", {"Siegel", "siege"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sie</NAME>
          <VALUE>{"", "gn", {"sieve", "siesta", "sierra", "Siemens"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> side</NAME>
          <VALUE>{"", "blmrsw", {"sidetrack", "sidecar", "sidearm", "side"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sidewi</NAME>
          <VALUE>{"", "", {"sidewise", "sidewinder"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sidewa</NAME>
          <VALUE>{"", "l", {"sideway"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sidewal</NAME>
          <VALUE>{"", "", {"sidewall", "sidewalk"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sidew</NAME>
          <VALUE>{"", "ai", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sidest</NAME>
          <VALUE>{"ep", "", {"sidestepping", "sidestep"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sides</NAME>
          <VALUE>{"", "t", {"sideshow", "sidesaddle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sider</NAME>
          <VALUE>{"", "", {"siderite", "sidereal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sidem</NAME>
          <VALUE>{"", "", {"sidemen", "sideman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sideli</NAME>
          <VALUE>{"", "", {"sideline", "sidelight"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sidel</NAME>
          <VALUE>{"", "i", {"sidelong"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sideb</NAME>
          <VALUE>{"", "", {"sideboard", "sideband"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sid</NAME>
          <VALUE>{"", "e", {"Sidney", "sidle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sickl</NAME>
          <VALUE>{"e", "", {"sicklewort", "sickle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sick</NAME>
          <VALUE>{"", "l", {"sickroom", "sickish", "sicken", "sick"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sici</NAME>
          <VALUE>{"l", "", {"Sicily", "Sicilian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sic</NAME>
          <VALUE>{"", "ik", {"sic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sibl</NAME>
          <VALUE>{"", "", {"sibling", "Sibley"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sib</NAME>
          <VALUE>{"", "l", {"sibyl", "sibilant", "Siberia", "sib"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sia</NAME>
          <VALUE>{"", "m", {"Sian", "sial"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Siam</NAME>
          <VALUE>{"", "", {"Siamese", "SIAM"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> SI</NAME>
          <VALUE>{"", "abcdeglmnrstxz", {"siva", "sip", "Sioux", "Sikorsky", "sift"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shy</NAME>
          <VALUE>{"", "", {"Shylock", "shy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shutt</NAME>
          <VALUE>{"le", "", {"shuttlecock", "shuttle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shuto</NAME>
          <VALUE>{"", "", {"shutout", "shutoff"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shut</NAME>
          <VALUE>{"", "ot", {"shutdown", "shut"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shun</NAME>
          <VALUE>{"", "", {"shunt", "shun"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shuf</NAME>
          <VALUE>{"fle", "", {"shuffleboard", "shuffle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shud</NAME>
          <VALUE>{"der", "", {"shuddery", "shudder"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shu</NAME>
          <VALUE>{"", "dfnt", {"Shulman", "shuck", "Shu"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shrun</NAME>
          <VALUE>{"k", "", {"shrunken", "shrunk"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shrug</NAME>
          <VALUE>{"", "", {"shrugging", "shrug"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shrub</NAME>
          <VALUE>{"", "", {"shrubbery", "shrub"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shru</NAME>
          <VALUE>{"", "bgn", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shro</NAME>
          <VALUE>{"", "", {"shrove", "shroud"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shriv</NAME>
          <VALUE>{"e", "", {"shrivel", "shrive"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shrink</NAME>
          <VALUE>{"", "", {"shrinkage", "shrink"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shrin</NAME>
          <VALUE>{"", "k", {"shrine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shril</NAME>
          <VALUE>{"l", "", {"shrilly", "shrill"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shri</NAME>
          <VALUE>{"", "lnv", {"shrimp", "shrike", "shrift", "shriek"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shrew</NAME>
          <VALUE>{"", "", {"shrewish", "shrewd", "shrew"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shre</NAME>
          <VALUE>{"", "w", {"Shreveport", "shred"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shra</NAME>
          <VALUE>{"", "", {"shrapnel", "shrank"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shr</NAME>
          <VALUE>{"", "aeiou", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> showp</NAME>
          <VALUE>{"", "", {"showplace", "showpiece"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> showm</NAME>
          <VALUE>{"", "", {"showmen", "showman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> show</NAME>
          <VALUE>{"", "mp", {"showy", "showroom", "shown", "showdown", "showcase", "showboat", "show"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shov</NAME>
          <VALUE>{"e", "", {"shovel", "shove"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shoul</NAME>
          <VALUE>{"d", "", {"shouldn't", "shoulder", "should"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shou</NAME>
          <VALUE>{"", "l", {"shout"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shot</NAME>
          <VALUE>{"", "", {"shotgun", "shotbush", "shot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shorts</NAME>
          <VALUE>{"", "", {"shortstop", "shortsighted"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shortc</NAME>
          <VALUE>{"", "", {"shortcut", "shortcoming"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> short</NAME>
          <VALUE>{"", "cse", {"shortish", "shorthand", "shortfall", "shortage", "short"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shore</NAME>
          <VALUE>{"", "", {"shoreline", "shore"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shor</NAME>
          <VALUE>{"", "et", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shop</NAME>
          <VALUE>{"", "", {"shopworn", "shopkeep", "shop"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shoo</NAME>
          <VALUE>{"", "", {"shoot", "shook", "shoofly", "shoo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shoe</NAME>
          <VALUE>{"", "", {"shoestring", "shoemake", "shoelace", "shoehorn", "shoe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shod</NAME>
          <VALUE>{"", "", {"shoddy", "shod"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shoc</NAME>
          <VALUE>{"k", "", {"Shockley", "shock"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sho</NAME>
          <VALUE>{"", "cdeoprtuvw", {"shone", "shoji", "shoal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shive</NAME>
          <VALUE>{"r", "", {"shivery", "shiver"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shiv</NAME>
          <VALUE>{"", "e", {"shiv"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shirt</NAME>
          <VALUE>{"", "", {"shirtmake", "shirt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shir</NAME>
          <VALUE>{"", "t", {"Shirley", "shirk", "shire"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shipma</NAME>
          <VALUE>{"", "", {"shipmate", "shipman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shipm</NAME>
          <VALUE>{"", "a", {"shipmen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shipl</NAME>
          <VALUE>{"", "", {"Shipley", "shiplap"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shipbu</NAME>
          <VALUE>{"ild", "", {"shipbuilding", "shipbuild"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shipb</NAME>
          <VALUE>{"", "u", {"shipboard"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ship</NAME>
          <VALUE>{"", "blm", {"shipyard", "shipwreck", "shipshape", "ship"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shin</NAME>
          <VALUE>{"", "", {"shiny", "Shinto", "shingle", "shine", "shinbone", "shin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shim</NAME>
          <VALUE>{"", "", {"shimmy", "shim"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shil</NAME>
          <VALUE>{"", "", {"Shiloh", "shill"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shif</NAME>
          <VALUE>{"t", "", {"shifty", "shift"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shi</NAME>
          <VALUE>{"", "flmnprv", {"shitepoke", "shish", "shield", "shibboleth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sherw</NAME>
          <VALUE>{"", "", {"Sherwood", "Sherwin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sherr</NAME>
          <VALUE>{"", "", {"sherry", "Sherrill"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sheri</NAME>
          <VALUE>{"", "", {"sheriff", "Sheridan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sher</NAME>
          <VALUE>{"", "irw", {"Sherman", "Sherlock", "sherbet", "Sheraton"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shep</NAME>
          <VALUE>{"", "", {"Sheppard", "shepherd", "Shepard"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shen</NAME>
          <VALUE>{"an", "", {"shenanigan", "Shenandoah"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shelt</NAME>
          <VALUE>{"", "", {"Shelton", "shelter"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shell</NAME>
          <VALUE>{"", "", {"Shelley", "shell"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> she'</NAME>
          <VALUE>{"", "", {"she'll", "she'd"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shel</NAME>
          <VALUE>{"", "lt", {"shelve", "shelf", "Sheldon", "Shelby"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shei</NAME>
          <VALUE>{"", "", {"Sheila", "sheik"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sheep</NAME>
          <VALUE>{"", "", {"sheepskin", "sheep"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shee</NAME>
          <VALUE>{"", "p", {"sheet", "sheer", "sheen", "Sheehan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shed</NAME>
          <VALUE>{"", "", {"Shedir", "shed"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sheat</NAME>
          <VALUE>{"h", "", {"sheathe", "sheath"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shear</NAME>
          <VALUE>{"", "", {"Shearer", "shear"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shea</NAME>
          <VALUE>{"", "rt", {"sheave", "sheaf", "Shea"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> She</NAME>
          <VALUE>{"", "adeil'npr", {"Sheffield", "she"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sha</NAME>
          <VALUE>{"", "cdfgklmnprtvw", {"shay", "Shasta", "shah", "shabby"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shaw</NAME>
          <VALUE>{"", "", {"Shawnee", "shawl", "shaw"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shav</NAME>
          <VALUE>{"e", "", {"shaven", "shave"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shatte</NAME>
          <VALUE>{"r", "", {"shatterproof", "shatter"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shat</NAME>
          <VALUE>{"t", "e", {"Shattuck"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sharpe</NAME>
          <VALUE>{"", "", {"sharpen", "Sharpe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sharp</NAME>
          <VALUE>{"", "e", {"sharpshoot", "sharp"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> share</NAME>
          <VALUE>{"", "", {"shares", "shareholder", "sharecrop", "share"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shar</NAME>
          <VALUE>{"", "ep", {"Sharon", "shark", "Shari", "shard"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shap</NAME>
          <VALUE>{"", "", {"Shapiro", "shape"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shant</NAME>
          <VALUE>{"", "", {"shanty", "Shantung"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shan</NAME>
          <VALUE>{"", "t", {"shan't", "Shannon", "shank", "Shanghai"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shamef</NAME>
          <VALUE>{"", "", {"shameful", "shameface"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shame</NAME>
          <VALUE>{"", "f", {"shame"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sham</NAME>
          <VALUE>{"", "e", {"shamrock", "shampoo", "shamble", "sham"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shallo</NAME>
          <VALUE>{"", "", {"shallow", "shallot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shall</NAME>
          <VALUE>{"", "o", {"shall"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shal</NAME>
          <VALUE>{"", "l", {"shalom", "shale"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shake</NAME>
          <VALUE>{"", "s", {"shaken", "shakedown", "shakeable", "shake"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shakespeare</NAME>
          <VALUE>{"", "", {"Shakespearean", "Shakespeare"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shakes</NAME>
          <VALUE>{"pear", "e", {"Shakespearian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shak</NAME>
          <VALUE>{"", "e", {"shaky", "shako"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shagg</NAME>
          <VALUE>{"", "", {"shaggy", "shagging"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shag</NAME>
          <VALUE>{"", "g", {"shagbark", "shag"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Shaf</NAME>
          <VALUE>{"", "", {"shaft", "Shaffer", "Shafer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shado</NAME>
          <VALUE>{"w", "", {"shadowy", "shadow"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shad</NAME>
          <VALUE>{"", "o", {"shady", "shadflower", "shade", "shadbush", "shad"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> shac</NAME>
          <VALUE>{"k", "", {"shackle", "shack"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sh</NAME>
          <VALUE>{"", "aeioruy", {"Shmuel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sextu</NAME>
          <VALUE>{"ple", "", {"sextuplet", "sextuple"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sext</NAME>
          <VALUE>{"", "u", {"sexton", "sextillion", "sextet", "Sextans"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sex</NAME>
          <VALUE>{"", "t", {"sexy", "sexual", "sex"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sewa</NAME>
          <VALUE>{"", "", {"Seward", "sewage"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sew</NAME>
          <VALUE>{"", "a", {"sewn", "sewerage", "sew"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Seve</NAME>
          <VALUE>{"", "nr", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> severa</NAME>
          <VALUE>{"l", "", {"severalty", "severalfold", "several"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sever</NAME>
          <VALUE>{"", "ae", {"Severn", "sever"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seven</NAME>
          <VALUE>{"", "t", {"sevenfold", "seven"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sevente</NAME>
          <VALUE>{"en", "", {"seventeenth", "seventeen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sevent</NAME>
          <VALUE>{"", "e", {"seventy", "seventieth", "seventh"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sev</NAME>
          <VALUE>{"", "e", {"Seville"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> set</NAME>
          <VALUE>{"", "t", {"setup", "setscrew", "Seton", "Seth", "setback", "set"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ses</NAME>
          <VALUE>{"", "", {"session", "sesame"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> servo</NAME>
          <VALUE>{"", "", {"servomechanism", "servo"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> servic</NAME>
          <VALUE>{"e", "m", {"serviceberry", "serviceable", "service"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> servicem</NAME>
          <VALUE>{"", "", {"servicemen", "serviceman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> servi</NAME>
          <VALUE>{"", "c", {"servitor", "servile", "serviette"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> serv</NAME>
          <VALUE>{"", "ioe", {"servant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> serpent</NAME>
          <VALUE>{"", "", {"serpentine", "serpent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> serp</NAME>
          <VALUE>{"en", "t", {"Serpens"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seria</NAME>
          <VALUE>{"", "", {"seriatim", "serial"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seri</NAME>
          <VALUE>{"", "a", {"serious", "serine", "serif", "series"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> serg</NAME>
          <VALUE>{"e", "", {"Sergei", "sergeant", "serge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> serend</NAME>
          <VALUE>{"ipit", "", {"serendipity", "serendipitous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sere</NAME>
          <VALUE>{"n", "d", {"serene", "serenade"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sera</NAME>
          <VALUE>{"", "p", {"seraglio", "sera"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> serap</NAME>
          <VALUE>{"", "", {"seraphim", "serape"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ser</NAME>
          <VALUE>{"", "aegipv", {"serum", "serology", "sermon", "serf", "Serbia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sequi</NAME>
          <VALUE>{"", "", {"sequitur", "sequin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seque</NAME>
          <VALUE>{"", "ns", {"sequel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seques</NAME>
          <VALUE>{"t", "", {"sequestration", "sequester"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sequen</NAME>
          <VALUE>{"t", "", {"sequential", "sequent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sequ</NAME>
          <VALUE>{"", "ei", {"Sequoia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seq</NAME>
          <VALUE>{"", "u", {"seq"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sepu</NAME>
          <VALUE>{"", "", {"sepulchral", "sepuchral"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> septu</NAME>
          <VALUE>{"", "", {"septum", "septuagenarian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> septi</NAME>
          <VALUE>{"", "", {"septillion", "septic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> septe</NAME>
          <VALUE>{"", "", {"septennial", "September"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> septa</NAME>
          <VALUE>{"", "", {"septate", "septa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sept</NAME>
          <VALUE>{"", "aeiu", {"sept"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sepa</NAME>
          <VALUE>{"", "r", {"sepal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> separ</NAME>
          <VALUE>{"a", "", {"separate", "separable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sep</NAME>
          <VALUE>{"", "atu", {"Sepoy", "sepia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> senti</NAME>
          <VALUE>{"", "", {"sentinel", "sentiment", "sentient"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sente</NAME>
          <VALUE>{"n", "", {"sentential", "sentence"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sent</NAME>
          <VALUE>{"", "ei", {"sentry", "sent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sensu</NAME>
          <VALUE>{"", "", {"sensuous", "sensual"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> senso</NAME>
          <VALUE>{"r", "", {"sensory", "sensor"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sensi</NAME>
          <VALUE>{"", "", {"sensitive", "sensible"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sens</NAME>
          <VALUE>{"", "iou", {"sense", "sensate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Seno</NAME>
          <VALUE>{"r", "", {"senorita", "Senora", "senor"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seni</NAME>
          <VALUE>{"", "", {"senior", "senile"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sene</NAME>
          <VALUE>{"", "", {"Senegal", "Seneca"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sena</NAME>
          <VALUE>{"t", "", {"senatorial", "senate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sen</NAME>
          <VALUE>{"", "aeiostd", {"sen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Semit</NAME>
          <VALUE>{"", "", {"Semitic", "Semite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Semina</NAME>
          <VALUE>{"", "r", {"seminal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seminar</NAME>
          <VALUE>{"", "", {"seminary", "seminarian", "seminar"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> semin</NAME>
          <VALUE>{"", "a", {"Seminole"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> semi</NAME>
          <VALUE>{"", "nt", {"Semiramis", "semi"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sema</NAME>
          <VALUE>{"", "", {"semaphore", "semantic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sem</NAME>
          <VALUE>{"", "ai", {"semper", "semester", "semblance"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sell</NAME>
          <VALUE>{"", "", {"sells", "selling", "sellout", "sell"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> self</NAME>
          <VALUE>{"", "", {"Selfridge", "selfish", "selfadjoint", "self"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seleni</NAME>
          <VALUE>{"", "", {"selenium", "selenite"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> selena</NAME>
          <VALUE>{"", "", {"selenate", "Selena"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> selen</NAME>
          <VALUE>{"", "ai", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Selec</NAME>
          <VALUE>{"t", "m", {"Selectric", "selector", "select"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> selectm</NAME>
          <VALUE>{"", "", {"selectmen", "selectman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sele</NAME>
          <VALUE>{"", "cn", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sel</NAME>
          <VALUE>{"", "efl", {"Selwyn", "selves", "seltzer", "Selma", "Selkirk", "seldom"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seiz</NAME>
          <VALUE>{"", "", {"seizure", "seize"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seismog</NAME>
          <VALUE>{"raph", "", {"seismography", "seismograph"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seismo</NAME>
          <VALUE>{"", "g", {"seismology"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seis</NAME>
          <VALUE>{"m", "o", {"seismic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sei</NAME>
          <VALUE>{"", "sz", {"Seidel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> segr</NAME>
          <VALUE>{"ega", "", {"segregate", "segregant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Segm</NAME>
          <VALUE>{"ent", "", {"segmentation", "segment"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seg</NAME>
          <VALUE>{"", "mr", {"Segundo", "Segovia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seep</NAME>
          <VALUE>{"", "", {"seepage", "seep"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seed</NAME>
          <VALUE>{"", "", {"seedy", "seedling", "seedbed", "seed"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> see</NAME>
          <VALUE>{"", "dpm", {"seethe", "seersucker", "seen", "seek", "seeing", "seeable", "see"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seduc</NAME>
          <VALUE>{"", "t", {"seduce"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seduct</NAME>
          <VALUE>{"i", "", {"seductive", "seduction"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sedu</NAME>
          <VALUE>{"", "c", {"sedulous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sedit</NAME>
          <VALUE>{"io", "", {"seditious", "sedition"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sedim</NAME>
          <VALUE>{"ent", "a", {"sediment"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sedimenta</NAME>
          <VALUE>{"", "", {"sedimentation", "sedimentary"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sedi</NAME>
          <VALUE>{"", "mt", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sede</NAME>
          <VALUE>{"", "", {"seder", "sedentary"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seda</NAME>
          <VALUE>{"", "", {"sedate", "sedan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sed</NAME>
          <VALUE>{"", "aeiu", {"sedge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> secu</NAME>
          <VALUE>{"", "r", {"secular"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sect</NAME>
          <VALUE>{"", "", {"sector", "section", "sectarian", "sect"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> secreti</NAME>
          <VALUE>{"", "", {"secretive", "secretion"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> secretari</NAME>
          <VALUE>{"a", "", {"secretariat", "secretarial"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> secreta</NAME>
          <VALUE>{"r", "i", {"secretary"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> secret</NAME>
          <VALUE>{"", "ai", {"secrete", "secret"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> secr</NAME>
          <VALUE>{"e", "t", {"secrecy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seco</NAME>
          <VALUE>{"nd", "", {"seconds", "secondhand", "secondary", "second"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> secl</NAME>
          <VALUE>{"u", "", {"seclusion", "seclude"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sece</NAME>
          <VALUE>{"", "", {"secession", "secede"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sec</NAME>
          <VALUE>{"", "elortu", {"secant", "sec"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seaw</NAME>
          <VALUE>{"", "", {"seaweed", "seaward"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seat</NAME>
          <VALUE>{"", "", {"Seattle", "seater", "seat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seaso</NAME>
          <VALUE>{"n", "", {"seasonal", "season"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seas</NAME>
          <VALUE>{"", "o", {"seaside", "seashore"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> searc</NAME>
          <VALUE>{"h", "", {"searching", "searchlight", "search"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sear</NAME>
          <VALUE>{"", "c", {"sear"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sean</NAME>
          <VALUE>{"", "", {"seance", "Sean"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seam</NAME>
          <VALUE>{"", "", {"seamy", "seamstress", "seamen", "seaman", "seam"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seal</NAME>
          <VALUE>{"", "", {"sealant", "seal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seag</NAME>
          <VALUE>{"", "", {"seagull", "Seagram"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> seaf</NAME>
          <VALUE>{"", "", {"seafood", "seafare"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sea</NAME>
          <VALUE>{"", "fglmnrstw", {"seaquake", "seaport", "seahorse", "seacoast", "seaboard", "sea"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> se</NAME>
          <VALUE>{"", "acdegilmnpqrstvwx", {"Seymour", "Seoul", "Sebastian", "SE"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Scyt</NAME>
          <VALUE>{"h", "", {"Scythia", "scythe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scy</NAME>
          <VALUE>{"", "t", {"Scylla"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scut</NAME>
          <VALUE>{"", "", {"scutum", "scuttle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scurr</NAME>
          <VALUE>{"", "", {"scurry", "scurrilous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scur</NAME>
          <VALUE>{"", "r", {"scurvy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sculptu</NAME>
          <VALUE>{"r", "", {"sculpture", "sculptural"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sculpt</NAME>
          <VALUE>{"", "u", {"sculptor", "sculpt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sculp</NAME>
          <VALUE>{"", "t", {"sculpin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scul</NAME>
          <VALUE>{"", "p", {"scull"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scuf</NAME>
          <VALUE>{"f", "", {"scuffle", "scuff"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scu</NAME>
          <VALUE>{"", "flrt", {"scum", "scud", "scuba"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scrut</NAME>
          <VALUE>{"", "", {"scrutiny", "scrutable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scrupu</NAME>
          <VALUE>{"lo", "", {"scrupulous", "scrupulosity"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scrup</NAME>
          <VALUE>{"", "u", {"scruple"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scru</NAME>
          <VALUE>{"", "pt", {"scruffy", "scrumptious", "scrub"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scro</NAME>
          <VALUE>{"", "l", {"scrounge", "scrotum", "scrooge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scriptu</NAME>
          <VALUE>{"r", "", {"scripture", "scriptural"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> script</NAME>
          <VALUE>{"", "u", {"scription", "script"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scrip</NAME>
          <VALUE>{"", "t", {"Scripps"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scrim</NAME>
          <VALUE>{"", "", {"scrimmage", "scrim"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scrib</NAME>
          <VALUE>{"", "", {"Scribners", "scribe", "scribble"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scri</NAME>
          <VALUE>{"", "bmp", {"scriven"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> screwb</NAME>
          <VALUE>{"", "", {"screwbean", "screwball"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> screw</NAME>
          <VALUE>{"", "b", {"screwworm", "screwdriver", "screw"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> screen</NAME>
          <VALUE>{"", "", {"screenplay", "screen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> screec</NAME>
          <VALUE>{"h", "", {"screechy", "screech"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scree</NAME>
          <VALUE>{"", "cn", {"screed"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scre</NAME>
          <VALUE>{"", "ew", {"scream"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scra</NAME>
          <VALUE>{"", "mptw", {"Scranton", "scraggly", "scrabble"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scraw</NAME>
          <VALUE>{"", "", {"scrawny", "scrawl"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scrat</NAME>
          <VALUE>{"ch", "", {"scratchy", "scratch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scrap</NAME>
          <VALUE>{"", "", {"scrape", "scrapbook", "scrap"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scram</NAME>
          <VALUE>{"", "", {"scramble", "scram"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scr</NAME>
          <VALUE>{"", "aeiou", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scour</NAME>
          <VALUE>{"", "", {"scourge", "scour"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scou</NAME>
          <VALUE>{"", "r", {"scout", "scoundrel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Scott</NAME>
          <VALUE>{"", "", {"Scotty", "Scottsdale", "Scottish", "Scott"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Scots</NAME>
          <VALUE>{"m", "", {"Scotsmen", "Scotsman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scot</NAME>
          <VALUE>{"", "st", {"Scotland", "Scotia", "scotch", "Scot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scorp</NAME>
          <VALUE>{"io", "", {"scorpion", "Scorpio"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scorn</NAME>
          <VALUE>{"", "", {"scornful", "scorn"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> score</NAME>
          <VALUE>{"", "", {"scorecard", "scoreboard", "score"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scor</NAME>
          <VALUE>{"", "enp", {"scoria", "scorch"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scop</NAME>
          <VALUE>{"", "", {"scops", "scopic", "scope"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scoo</NAME>
          <VALUE>{"", "", {"scoot", "scoop"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sco</NAME>
          <VALUE>{"", "oprtu", {"scowl", "scold", "scoff"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scl</NAME>
          <VALUE>{"ero", "", {"sclerotic", "sclerosis"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scient</NAME>
          <VALUE>{"i", "", {"scientist", "scientific"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scie</NAME>
          <VALUE>{"n", "t", {"science"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sci</NAME>
          <VALUE>{"", "e", {"scissor", "scion", "scintillate", "scimitar", "sciatica", "Sci"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Schwa</NAME>
          <VALUE>{"", "", {"Schwartz", "Schwab"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Schw</NAME>
          <VALUE>{"", "a", {"Schweitzer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Schuy</NAME>
          <VALUE>{"l", "", {"Schuylkill", "Schuyler"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Schum</NAME>
          <VALUE>{"a", "", {"Schumann", "Schumacher"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Schul</NAME>
          <VALUE>{"", "", {"Schulz", "Schultz"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Schu</NAME>
          <VALUE>{"", "lmy", {"Schuster", "Schubert"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Schr</NAME>
          <VALUE>{"oed", "", {"Schroedinger", "Schroeder"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> school</NAME>
          <VALUE>{"", "bgm", {"schoolwork", "schoolteacher", "schoolroom", "schoolhouse", "school"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> schoolm</NAME>
          <VALUE>{"a", "", {"schoolmate", "schoolmaster", "schoolmarm"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> schoolg</NAME>
          <VALUE>{"irl", "", {"schoolgirlish", "schoolgirl"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> schoolb</NAME>
          <VALUE>{"o", "", {"schoolboy", "schoolbook"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> schoo</NAME>
          <VALUE>{"", "l", {"schooner"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> schol</NAME>
          <VALUE>{"a", "", {"scholastic", "scholar"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Scho</NAME>
          <VALUE>{"", "lo", {"Schottky", "Schofield", "Schoenberg"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Schna</NAME>
          <VALUE>{"", "", {"schnapps", "Schnabel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> schn</NAME>
          <VALUE>{"", "a", {"Schneider"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Schm</NAME>
          <VALUE>{"i", "", {"Schmitt", "Schmidt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Schli</NAME>
          <VALUE>{"", "", {"Schlitz", "schlieren"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> schl</NAME>
          <VALUE>{"", "i", {"Schloss", "Schlesinger"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> schizop</NAME>
          <VALUE>{"hreni", "", {"schizophrenic", "schizophrenia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> schiz</NAME>
          <VALUE>{"o", "p", {"schizomycetes", "schizoid"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> schis</NAME>
          <VALUE>{"", "", {"schist", "schism"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> schi</NAME>
          <VALUE>{"", "sz", {"Schiller"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> schema</NAME>
          <VALUE>{"", "t", {"schema"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> schemat</NAME>
          <VALUE>{"", "", {"schematic", "schemata"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> schem</NAME>
          <VALUE>{"", "a", {"scheme"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sche</NAME>
          <VALUE>{"", "m", {"scherzo", "Schenectady", "schelling", "schedule"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scha</NAME>
          <VALUE>{"", "", {"Schantz", "Schafer", "Schaefer"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sch</NAME>
          <VALUE>{"", "aeilmnoruw", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scen</NAME>
          <VALUE>{"", "e", {"scent", "scenic", "scenario"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scene</NAME>
          <VALUE>{"", "", {"scenery", "scene"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sce</NAME>
          <VALUE>{"", "n", {"sceptic"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scatt</NAME>
          <VALUE>{"er", "", {"scattergun", "scatterbrain"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scat</NAME>
          <VALUE>{"", "t", {"scathe", "scat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scarl</NAME>
          <VALUE>{"", "", {"scarlet", "Scarlatti"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scarf</NAME>
          <VALUE>{"", "", {"scarface", "scarf"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scare</NAME>
          <VALUE>{"", "", {"scarecrow", "scare"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Scar</NAME>
          <VALUE>{"", "efl", {"scary", "scarves", "Scarsdale", "scarify", "scarce", "Scarborough", "scar"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scapu</NAME>
          <VALUE>{"la", "", {"scapular", "scapula"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scap</NAME>
          <VALUE>{"", "u", {"scapegoat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scant</NAME>
          <VALUE>{"", "", {"scanty", "scant"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scandi</NAME>
          <VALUE>{"", "", {"scandium", "Scandinavia"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Scanda</NAME>
          <VALUE>{"l", "", {"scandalous", "scandal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scand</NAME>
          <VALUE>{"", "ai", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scan</NAME>
          <VALUE>{"", "dt", {"scan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scam</NAME>
          <VALUE>{"", "", {"scamp", "scam"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scala</NAME>
          <VALUE>{"", "", {"scalar", "Scala"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scal</NAME>
          <VALUE>{"", "a", {"scalp", "scallop", "scale", "scald"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> scab</NAME>
          <VALUE>{"", "", {"scabrous", "scabious", "scabbard", "scab"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sca</NAME>
          <VALUE>{"", "blmnprt", {"scavenge", "scaup", "scaffold"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sc</NAME>
          <VALUE>{"", "aehiloruy", {"SCM", "SC"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> saxon</NAME>
          <VALUE>{"", "", {"Saxony", "Saxon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Saxo</NAME>
          <VALUE>{"", "n", {"saxophone"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sax</NAME>
          <VALUE>{"", "o", {"saxifrage", "sax"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sawt</NAME>
          <VALUE>{"", "", {"sawtooth", "sawtimber"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sawf</NAME>
          <VALUE>{"", "", {"sawfly", "sawfish"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> saw</NAME>
          <VALUE>{"", "ft", {"sawyer", "sawmill", "sawdust", "sawbelly", "saw"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Savoy</NAME>
          <VALUE>{"", "", {"Savoyard", "savoy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> savo</NAME>
          <VALUE>{"", "y", {"Savonarola"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sava</NAME>
          <VALUE>{"", "gn", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> savan</NAME>
          <VALUE>{"", "", {"savant", "Savannah"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Savag</NAME>
          <VALUE>{"e", "", {"savagery", "savage"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sav</NAME>
          <VALUE>{"", "aoi", {"savvy", "save"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> saut</NAME>
          <VALUE>{"e", "", {"sauterne", "saute"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Saul</NAME>
          <VALUE>{"", "", {"Sault", "Saul"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Saud</NAME>
          <VALUE>{"", "", {"Saudi", "Saud"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sauc</NAME>
          <VALUE>{"", "e", {"saucy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sauce</NAME>
          <VALUE>{"", "", {"saucepan", "sauce"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sau</NAME>
          <VALUE>{"", "cdlt", {"sausage", "Saunders", "sauerkraut"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Saturn</NAME>
          <VALUE>{"", "", {"saturnine", "Saturnalia", "Saturn"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Satura</NAME>
          <VALUE>{"", "t", {"saturable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> saturat</NAME>
          <VALUE>{"e", "", {"saturater", "saturate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> satu</NAME>
          <VALUE>{"r", "an", {"Saturday"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> satisfa</NAME>
          <VALUE>{"ct", "", {"satisfactory", "satisfaction"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> satis</NAME>
          <VALUE>{"f", "ay", {"satisfied"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> satir</NAME>
          <VALUE>{"", "", {"satiric", "satire"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> satia</NAME>
          <VALUE>{"", "", {"satiate", "satiable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sati</NAME>
          <VALUE>{"", "ars", {"satin", "satiety"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sata</NAME>
          <VALUE>{"n", "", {"satanic", "satan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sat</NAME>
          <VALUE>{"", "aiu", {"satyr", "satellite", "sat"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sask</NAME>
          <VALUE>{"at", "", {"Saskatoon", "Saskatchewan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sash</NAME>
          <VALUE>{"", "", {"sashay", "sash"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sas</NAME>
          <VALUE>{"", "hk", {"sassafras"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sars</NAME>
          <VALUE>{"", "", {"sarsparilla", "sarsaparilla"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sard</NAME>
          <VALUE>{"", "", {"sardonic", "sardine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sarco</NAME>
          <VALUE>{"", "", {"sarcoma", "sarcophagus"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sarca</NAME>
          <VALUE>{"s", "", {"sarcastic", "sarcasm"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sarc</NAME>
          <VALUE>{"", "ao", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sara</NAME>
          <VALUE>{"", "", {"Saratoga", "Sarasota", "Saran", "Sarah", "Saracen", "Sara"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sar</NAME>
          <VALUE>{"", "acds", {"sari", "Sargent"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sapp</NAME>
          <VALUE>{"", "", {"sappy", "sapphire"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sapi</NAME>
          <VALUE>{"en", "", {"sapient", "sapiens"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sap</NAME>
          <VALUE>{"", "ip", {"sapsucker", "saponify", "sapling", "sap"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Santa</NAME>
          <VALUE>{"", "", {"Santayana", "Santa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sant</NAME>
          <VALUE>{"", "a", {"Santo", "Santiago"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sanitar</NAME>
          <VALUE>{"", "", {"sanitary", "sanitarium"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sanit</NAME>
          <VALUE>{"a", "r", {"sanitate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sani</NAME>
          <VALUE>{"", "t", {"sanicle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sanguine</NAME>
          <VALUE>{"", "", {"sanguineous", "sanguine"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sangu</NAME>
          <VALUE>{"in", "e", {"sanguinary"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sang</NAME>
          <VALUE>{"", "u", {"sangaree", "sang"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sandpi</NAME>
          <VALUE>{"", "", {"sandpiper", "sandpile"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sandp</NAME>
          <VALUE>{"", "i", {"sandpaper"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sande</NAME>
          <VALUE>{"r", "", {"Sanderson", "sanderling"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sandb</NAME>
          <VALUE>{"", "", {"Sandburg", "sandblast", "sandbag"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sanda</NAME>
          <VALUE>{"l", "", {"sandalwood", "sandal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sand</NAME>
          <VALUE>{"", "abepw", {"sandy", "Sandusky", "sandstone", "Sandra", "sandman", "Sandia", "sandhill", "sand"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sancti</NAME>
          <VALUE>{"", "", {"sanctity", "sanction", "sanctimonious", "sanctify"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sanct</NAME>
          <VALUE>{"", "i", {"sanctuary"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sanch</NAME>
          <VALUE>{"", "", {"Sancho", "Sanchez"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sanc</NAME>
          <VALUE>{"", "ht", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sanat</NAME>
          <VALUE>{"ori", "", {"sanatorium", "sanatoria"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sana</NAME>
          <VALUE>{"", "t", {"Sana"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> San</NAME>
          <VALUE>{"", "acdgit", {"sans", "sank", "Sanhedrin", "Sanford", "sane", "Sanborn", "San"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Samu</NAME>
          <VALUE>{"el", "", {"Samuelson", "Samuel"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Samp</NAME>
          <VALUE>{"", "", {"Sampson", "sample"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> samo</NAME>
          <VALUE>{"", "", {"samovar", "Samoa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sam</NAME>
          <VALUE>{"", "opu", {"Samson", "Sammy", "same", "samba", "samarium", "Sam"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> salva</NAME>
          <VALUE>{"", "gt", {"Salvador"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Salvat</NAME>
          <VALUE>{"", "", {"Salvatore", "salvation"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> salvag</NAME>
          <VALUE>{"e", "", {"salvageable", "salvage"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> salv</NAME>
          <VALUE>{"", "a", {"salvo", "salve"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> saluta</NAME>
          <VALUE>{"", "", {"salutation", "salutary"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> salut</NAME>
          <VALUE>{"", "a", {"salute"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> salu</NAME>
          <VALUE>{"", "t", {"salubrious"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> salt</NAME>
          <VALUE>{"", "", {"salty", "saltwater", "saltbush", "salt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> saloo</NAME>
          <VALUE>{"n", "", {"saloonkeep", "saloon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> salo</NAME>
          <VALUE>{"", "o", {"salon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> salm</NAME>
          <VALUE>{"on", "", {"salmonella", "salmonberry", "salmon"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sall</NAME>
          <VALUE>{"", "", {"sally", "sallow", "Salle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> saliv</NAME>
          <VALUE>{"a", "", {"salivate", "salivary", "saliva"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Salis</NAME>
          <VALUE>{"", "", {"Salish", "Salisbury"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> salin</NAME>
          <VALUE>{"", "", {"saline", "Salina"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sali</NAME>
          <VALUE>{"", "nsv", {"salient"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> salesm</NAME>
          <VALUE>{"", "", {"salesmen", "salesman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sales</NAME>
          <VALUE>{"", "m", {"salesperson", "saleslady", "Salesian", "salesgirl", "sales"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sale</NAME>
          <VALUE>{"", "s", {"Salerno", "Salem", "sale"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> salam</NAME>
          <VALUE>{"", "", {"salami", "salamander"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sala</NAME>
          <VALUE>{"", "m", {"salary", "salad", "salacious", "Salaam"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sal</NAME>
          <VALUE>{"", "aeilmotuv", {"salsify", "Salk", "Sal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sail</NAME>
          <VALUE>{"", "", {"sailor", "sailfish", "sailboat", "sail"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sai</NAME>
          <VALUE>{"", "l", {"saint", "Saigon", "said"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sagit</NAME>
          <VALUE>{"ta", "", {"Sagittarius", "sagittal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sagi</NAME>
          <VALUE>{"", "t", {"Saginaw"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sage</NAME>
          <VALUE>{"", "", {"sagebrush", "sage"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sagac</NAME>
          <VALUE>{"i", "", {"sagacity", "sagacious"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> saga</NAME>
          <VALUE>{"", "c", {"saga"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sag</NAME>
          <VALUE>{"", "aei", {"saguaro", "sago", "sagging", "sag"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> safe</NAME>
          <VALUE>{"", "", {"safely", "safety", "safekeeping", "safeguard", "safe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> saf</NAME>
          <VALUE>{"", "e", {"saffron", "safari"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sadis</NAME>
          <VALUE>{"", "", {"sadist", "sadism"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sadi</NAME>
          <VALUE>{"", "s", {"Sadie"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> saddl</NAME>
          <VALUE>{"e", "", {"saddlebag", "saddle"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sadd</NAME>
          <VALUE>{"", "l", {"sadden"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sad</NAME>
          <VALUE>{"", "di", {"Sadler", "sad"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sacril</NAME>
          <VALUE>{"eg", "", {"sacrilegious", "sacrilege"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sacrif</NAME>
          <VALUE>{"ic", "", {"sacrificial", "sacrifice"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sacri</NAME>
          <VALUE>{"", "fl", {}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sacra</NAME>
          <VALUE>{"", "m", {"sacral"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sacram</NAME>
          <VALUE>{"ent", "", {"Sacramento", "sacrament"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sacr</NAME>
          <VALUE>{"", "ai", {"sacrosanct", "sacred"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sach</NAME>
          <VALUE>{"", "", {"Sachs", "sachem"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sac</NAME>
          <VALUE>{"", "hr", {"sack", "saccharine", "sac"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sabi</NAME>
          <VALUE>{"n", "", {"Sabine", "Sabina"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Sabb</NAME>
          <VALUE>{"at", "", {"sabbatical", "sabbath"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sab</NAME>
          <VALUE>{"", "bi", {"sabra", "sabotage", "sable"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> sa</NAME>
          <VALUE>{"", "bcdfgilmnprstuvwxy", {"Sao", "sake", "Sahara", "sa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> s</NAME>
          <VALUE>{"", "acehIklmnopqStuwy", {"Szilard", "svelte", "s's", "Sri", "sforzando", "SD", "s"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Ryd</NAME>
          <VALUE>{"", "", {"Ryder", "Rydberg"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Ry</NAME>
          <VALUE>{"", "d", {"rye", "Ryan"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rutl</NAME>
          <VALUE>{"", "", {"Rutledge", "Rutland"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Ruthe</NAME>
          <VALUE>{"", "", {"Rutherford", "ruthenium"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ruth</NAME>
          <VALUE>{"", "e", {"ruthless", "Ruth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rut</NAME>
          <VALUE>{"", "hl", {"rutty", "rutile", "Rutgers", "rutabaga", "rut"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rust</NAME>
          <VALUE>{"", "", {"rusty", "rustproof", "rustle", "rustic", "rust"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> russe</NAME>
          <VALUE>{"", "", {"russet", "Russell"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Russ</NAME>
          <VALUE>{"", "e", {"russula", "Russo", "Russia", "Russ"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rush</NAME>
          <VALUE>{"", "", {"Rushmore", "rush"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rus</NAME>
          <VALUE>{"", "hst", {"rusk", "ruse"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rup</NAME>
          <VALUE>{"", "", {"rupture", "rupee"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> runt</NAME>
          <VALUE>{"", "", {"runty", "runt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Runn</NAME>
          <VALUE>{"", "", {"running", "Runnymede", "runneth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rung</NAME>
          <VALUE>{"", "", {"Runge", "rung"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> runa</NAME>
          <VALUE>{"", "", {"runaway", "runabout"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> run</NAME>
          <VALUE>{"", "agnt", {"Runyon", "runway", "runoff", "runic", "rune", "rundown", "run"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rump</NAME>
          <VALUE>{"", "", {"rumpus", "rumple", "rump"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rumm</NAME>
          <VALUE>{"", "", {"rummy", "rummage"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rum</NAME>
          <VALUE>{"", "mp", {"ruminant", "Rumford", "rumen", "rumble", "Rumania", "rum"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rui</NAME>
          <VALUE>{"n", "", {"ruinous", "ruination", "ruin"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ruff</NAME>
          <VALUE>{"", "", {"ruffle", "ruffian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ruf</NAME>
          <VALUE>{"", "f", {"Rufus", "rufous"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rue</NAME>
          <VALUE>{"", "", {"rueful", "rue"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rudy</NAME>
          <VALUE>{"", "", {"Rudyard", "Rudy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rudo</NAME>
          <VALUE>{"l", "", {"Rudolph", "Rudolf"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rudi</NAME>
          <VALUE>{"ment", "", {"rudimentary", "rudiment"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rudd</NAME>
          <VALUE>{"", "", {"ruddy", "rudder"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rud</NAME>
          <VALUE>{"", "dioy", {"rude"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rubi</NAME>
          <VALUE>{"", "", {"Rubin", "rubidium", "rubicund"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rube</NAME>
          <VALUE>{"", "", {"Ruben", "Rube"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rubb</NAME>
          <VALUE>{"", "", {"rubble", "rubbish", "rubbery"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rub</NAME>
          <VALUE>{"", "bei", {"ruby", "rubric", "rubdown", "rub"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> ru</NAME>
          <VALUE>{"", "bdefimnpstl", {"rural", "rug", "ruckus", "Ruanda"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roya</NAME>
          <VALUE>{"l", "", {"royalty", "royal"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roy</NAME>
          <VALUE>{"", "a", {"Royce", "Roy"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rowl</NAME>
          <VALUE>{"", "", {"Rowley", "Rowland"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rowe</NAME>
          <VALUE>{"", "", {"Rowena", "Rowe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> row</NAME>
          <VALUE>{"", "el", {"rowdy", "rowboat", "row"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rout</NAME>
          <VALUE>{"", "", {"routine", "route", "rout"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rous</NAME>
          <VALUE>{"", "", {"roustabout", "Rousseau", "rouse"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roundh</NAME>
          <VALUE>{"", "", {"roundhouse", "roundhead"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roun</NAME>
          <VALUE>{"d", "h", {"roundworm", "roundup", "roundtable", "roundoff", "roundabout", "round"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roug</NAME>
          <VALUE>{"", "h", {"rouge"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rough</NAME>
          <VALUE>{"", "", {"roughly", "roughshod", "roughneck", "roughish", "roughen", "roughcast", "rough"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rou</NAME>
          <VALUE>{"", "gnst", {"roulette"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rotu</NAME>
          <VALUE>{"nd", "", {"rotunda", "rotund"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roto</NAME>
          <VALUE>{"", "", {"rototill", "rotor", "rotogravure"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Roth</NAME>
          <VALUE>{"", "", {"Rothschild", "Roth"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rotar</NAME>
          <VALUE>{"", "", {"rotary", "Rotarian"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rota</NAME>
          <VALUE>{"", "r", {"rotate"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rot</NAME>
          <VALUE>{"", "ahou", {"rotten", "rotenone", "ROTC", "rot"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rost</NAME>
          <VALUE>{"", "", {"rostrum", "roster"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roset</NAME>
          <VALUE>{"t", "", {"rosette", "Rosetta"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rosenb</NAME>
          <VALUE>{"", "", {"Rosenblum", "Rosenberg"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rosen</NAME>
          <VALUE>{"", "b", {"Rosenzweig", "Rosenthal", "Rosen"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roseb</NAME>
          <VALUE>{"u", "", {"rosebush", "rosebud"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rose</NAME>
          <VALUE>{"", "bnt", {"rosemary", "Roseland", "rose"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rosa</NAME>
          <VALUE>{"", "", {"rosary", "Rosalie", "Rosa"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Ros</NAME>
          <VALUE>{"", "aet", {"rosy", "Ross"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roose</NAME>
          <VALUE>{"velt", "", {"Rooseveltian", "Roosevelt"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Roos</NAME>
          <VALUE>{"", "e", {"roost"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> room</NAME>
          <VALUE>{"", "", {"rooms", "roomy", "roommate", "roomful", "room"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rook</NAME>
          <VALUE>{"", "", {"rooky", "rookie", "rook"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rooft</NAME>
          <VALUE>{"", "", {"rooftree", "rooftop"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roof</NAME>
          <VALUE>{"", "t", {"roof"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roo</NAME>
          <VALUE>{"", "fkms", {"root", "rood"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Ron</NAME>
          <VALUE>{"", "", {"Ronnie", "rondo", "Ronald", "Ron"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rome</NAME>
          <VALUE>{"", "", {"Romeo", "Rome"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Roma</NAME>
          <VALUE>{"n", "", {"romantic", "Romano", "Romania", "romance", "Roman"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rom</NAME>
          <VALUE>{"", "ae", {"Romulus", "romp"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> Rolli</NAME>
          <VALUE>{"", "n", {"rollick"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roll</NAME>
          <VALUE>{"", "i", {"rollback", "roll"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rol</NAME>
          <VALUE>{"", "l", {"role", "Roland"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roi</NAME>
          <VALUE>{"", "", {"roister", "roil"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rog</NAME>
          <VALUE>{"", "", {"rogue", "Roger"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roe</NAME>
          <VALUE>{"", "", {"Roentgen", "roebuck", "roe"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rode</NAME>
          <VALUE>{"", "", {"rodeo", "rodent", "rode"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rod</NAME>
          <VALUE>{"", "e", {"Rodriguez", "Rodney", "Rodgers", "rod"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rocke</NAME>
          <VALUE>{"", "", {"rocket", "Rockefeller"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rocka</NAME>
          <VALUE>{"", "", {"rockaway", "rockabye"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> rock</NAME>
          <VALUE>{"", "ae", {"rocky", "Rockwell", "Rockland", "Rockies", "Rockford", "rockbound", "rock"}}</VALUE>
        </PROPERTY>
        <PROPERTY OWNER="obj36" PERMS="r">
          <NAME> roc</NAME>
          <VALUE>{"", "k", {"rococo", "Rochester"}}</VALUE>
        </PROPERTY>
   
