fog_seen.clock()#fog_seen
Where each enemy hero is while nobody sees him: the tick he left vision, his last cast in the fog, a teleport's landing, a position another script worked out, plus the enemy smokes.
"requires": { "fog_seen": "^1.0" }local fog_seen = require("lib/fog_seen")玩家无需安装:脚本会自动带上库,取范围内的任一版本。发布前可在开发会话中修改 scripts/lib/fog_seen/ 来试验。
fog_seen.on_teleport(key, fn)#fog_seen.on_smoke(key, fn)#fog_seen.sweep(now)#fog_seen.settle(now)#fog_seen.tick(now)#fog_seen.casts()#fog_seen.estimate(who, now)#fog_seen.smokes()#fog_seen.note(unit, pos, t)#fog_seen.estimates(now)#fog_seen.reset()#fog_seen.on_create(p)#fog_seen.on_update_entity(p)#fog_seen.on_update(p)#fog_seen.on_destroy(p)#lib/fog_seen
Where each enemy hero is while nobody sees him: the tick he left vision, his last cast in the fog,
a teleport's landing, a position another script worked out, plus the enemy smokes. Runs from the
first require, whether any pack draws it or not. Moved from utea/core/fog_seen.lua (#132 step 4);
that path is a redirect until the autopilot on arc requires this one.
local FS = require("lib/fog_seen")
local e = FS.estimate(hero) -- or "npc_dota_hero_lina"
-- { pos, age, source = "visible"|"tp"|"particle"|"noted"|"last_seen"|"respawn", speed, unit, land,
-- walk, held = { kind = "tp"|"stun"|"root"|"sleep"|"taunt"|"gone", left, from } }
for _, e in ipairs(FS.estimates()) do ... end -- every live enemy hero with one
FS.on_teleport("my_pack", function(tp) end) -- { hero, unit, pos (to), from, t, land }
FS.on_smoke("my_pack", function(sm) end) -- { pos, t, index }, no allied hero smoked there
FS.note("npc_dota_hero_lina", pos) -- a position you worked out; ranks like a cast
| call | what |
|---|---|
estimate(who, now) |
best known place: in vision his own position, else the newest stamp. age from when it was true; a teleport has age 0 until land. walk: the part of the age he could spend walking; held while a teleport channel or a disable carried on his last visible tick keeps him in place (from: a teleport's start, where he stands). respawn: his fountain (or the death spot after a reincarnation) from when he came back to life out of vision. speed: the larger of the base stat and the post-modifier speed on his last visible tick (#179) |
estimates(now) |
estimate of every enemy hero alive and not an illusion |
on_teleport(key, fn), on_smoke(key, fn) |
one slot per key, so a reloaded caller replaces its own |
smokes() |
enemy smokes of the last CFG.smoke_keep seconds, oldest first |
casts() |
[unit] = { pos, t }, the fog casts as utea/alerts/cast_track.lua draws them |
note(unit, pos, t) |
ignored for a hero in vision |
clock() |
the clock every t here is on: globals.realtime() |
CFG, S, reset, tick, on_create ... |
tuning, state and the handlers, for tests and the alerts |
data
| file | what |
|---|---|
data/cast_particles.lua |
particle hash -> { hero index, "keys" }: the hero whose cast makes it and the control points measured to sit on him ("N" world, "eN" entity-bound fallback), plus rejected (shared, made without him, or no point on the caster), over demos (docs/FOG_PARTICLES.md), by tools/fog_casts/gen_casts.py. a cast places him only from a point bound to him, or a listed one while the client cannot resolve what it is bound to; a create bound to another hero (rubick) is dropped (#154, #202). a hash with no listed point ("") places him only by a point bound to him, and one marked x only by its listed points (#242) |
data/tp_hashes.lua |
hash -> teleport_start/teleport_end/smoke_of_deceit for every cosmetic variant, by tools/particle_names/gen_utea.py (the subset of utea/core/particle_hashes_generated.lua) |
Depends on the native api (events, entities, globals); a disable's remaining time comes from
NPC.GetControlState (compat, utea/core/target_checks) when that is loaded, and without it no
disable is credited. Keeps one instance in
__EVOLVE_LIB_REG.fog_seen (see lib/README.md); to reload it in a running client clear that and
package.loaded["lib/fog_seen"].
Readers: utea/alerts/fog.lua, utea/alerts/cast_track.lua, utea/minimap/fog_particle_logic.lua
(feeds note), the autopilot on arc.
Tests: tools\lua\lua.exe scripts\lib\fog_seen\selftest.lua (the library), python tools/skills.py check map (tests/fog_seen.lua, tests/fog_holds.lua, tests/fog_alerts.lua on skills/map/fog_harness.lua),
tools\lua\lua.exe scripts\utea\alerts\fog_selftest.lua (a real teleport from a demo).
1.2.0 版本的代码,即客户端拿到的内容。包内字节码由这些文件编译而来。
init.lua565 行
---@diagnostic disable: undefined-global
-- lib/fog_seen (#132, was utea/core/fog_seen.lua): WHERE THE ENEMY HEROES ARE WHEN NOBODY SEES
-- THEM. the data under the fog alerts, loaded by whoever requires it, so it runs whether the
-- Alerts pack is on or not (the autopilot reads it). api and deps in README.md.
-- the sources, each stamped with when it was true:
-- last_seen where a hero stood on the tick he went from visible to the fog
-- particle a cast in the fog: almost every spell makes a particle the server sends to
-- everyone (docs/FOG_PARTICLES.md); the hero comes from the particle itself
-- (data/cast_particles.lua), since the stream often leaves the owner out.
-- items are skipped: whose they are is not on the wire
-- tp a teleport's landing: teleport_end's control point 0 is where he lands, its
-- control point 3 is bound to the hero, fog or not; the start in the same tick
-- is where he leaves from (moved here from alerts/fog.lua)
-- smoke smoke_of_deceit where no allied hero is smoked: no hero on it, so not in
-- estimate; M.smokes() and M.on_smoke() for whoever draws or reasons about it
-- noted M.note(): a position another reader worked out (a script with its own particle
-- catalog, a projectile's origin); ranks like a cast, not drawn by the alerts
-- respawn his fountain, from the moment he came back to life out of our vision
-- M.estimate(hero) gives the best of them: in vision his own position, else the newest stamp,
-- and how much of its age he could have spent walking (#179): a teleport's channel, or a stun,
-- root, sleep or taunt he carried on his last visible tick, keeps him in place.
-- sounds are not read yet.
--
-- Owns: __EVOLVE_LIB_REG.fog_seen, the live copy and its particle/on_update handlers
-- Must not: issue orders or require uTEA/*.
do
local g = rawget(_G, "__EVOLVE_LIB_REG")
if g and g.fog_seen then return g.fog_seen end
end
local reg = rawget(_G, "__EVOLVE_LIB_REG") or {}
rawset(_G, "__EVOLVE_LIB_REG", reg)
local M = {}
M.CFG = {
cast_wait = 0.1, -- a cast's control points arrive after its create
tp_wait = 0.3, -- the end's control points can land before the start's
tp_channel = 3.0, -- teleport scroll channel: he stands at the landing this much after the start
tp_min_channel = 2.0, -- the shortest teleport (travel boots 2): an end gone sooner was cancelled
tp_keep = 10, -- a teleport's or smoke's particles are dropped after this (outposts 4 s, queues longer)
smoke_keep = 40, -- M.smokes() lists a smoke this long
period = 0.1, -- the vision sweep
speed = 300, -- a hero whose move speed reads 0 (schema not ready)
-- where a hero comes back to life, by team
fountain = { [2] = { x = -6733, y = -6163, z = 384 }, [3] = { x = 6733, y = 6163, z = 384 } },
}
local okg, GEN = pcall(require, "lib/fog_seen/data/cast_particles")
local HEROES = okg and GEN.heroes or {}
local BY_HASH = okg and GEN.by_hash or {}
-- hash -> short name; every cosmetic teleport (seasonal, boots of travel) is "teleport_start" /
-- "teleport_end" there, matched by pattern in tools/particle_names/gen_utea.py
local okph, SHORT = pcall(require, "lib/fog_seen/data/tp_hashes")
if not okph or type(SHORT) ~= "table" then SHORT = {} end
local TP = { teleport_start = "tp_start", teleport_end = "tp_end", smoke_of_deceit = "smoke" }
local SMOKE = "particles/items2_fx/smoke_of_deceit.vpcf"
-- [hero unit name] = ...
local S = {
seen = {}, -- { pos, t, speed } updated every sweep while in vision; t freezes on the fog tick
vis = {}, -- true while in vision
cast = {}, -- { pos, t } the last cast in the fog, cleared when he is seen or dies
tp = {}, -- { pos, from, t, land } the last teleport, cleared when he is seen or dies
noted = {}, -- { pos, t } the last M.note(), cleared like a cast
hold = {}, -- { kind, untl } a disable on his last visible tick and when it ends
dead = {}, -- { speed, pos } while dead; pos when he revives where he fell
pending = {}, -- [particle index] = cast being resolved
live = {}, -- [particle index] = teleport or smoke particle being read
smokes = {}, -- { pos, t } enemy smokes, oldest first
swept = -1,
}
M.S = S
local subs = {} -- [key] = fn(tp) for every enemy teleport, called the moment it pairs
local smoke_subs = {}
function M.clock()
local ok, t = pcall(function() return globals.realtime() end)
return (ok and type(t) == "number") and t or os.clock()
end
-- control points carry radii, colours and counts as vectors too
local function world(p)
if type(p) ~= "table" and type(p) ~= "userdata" then return nil end
local ok, x, y, z = pcall(function() return p.x, p.y, p.z end)
if not ok or type(x) ~= "number" then return nil end
if math.abs(x) + math.abs(y) < 200 or math.abs(x) > 9000 or math.abs(y) > 9000 then return nil end
if (y == 0 and z == 0) or (x == y and y == z) then return nil end
return p
end
local function unit_of(e)
if not e then return nil end
local ok, n = pcall(e.unit_name, e)
return ok and n or nil
end
local function hero_on(unit, side)
local ok, list = pcall(entities.heroes, side)
if not ok or type(list) ~= "table" then return nil end
for i = 1, #list do
if unit_of(list[i]) == unit then return list[i] end
end
return nil
end
local function in_vision(h)
local ok, v = pcall(function() return h:is_alive() and not h:is_dormant() end)
return ok and v == true
end
-- ------------------------------------------------------------------ casts in the fog ---
-- the enemy picks (#154): a hero never seen yet has no entity on the client, his pick is in the
-- player resource from the draft on. [unit name] = true, refreshed every few seconds
local roster, roster_t = {}, -math.huge
local function team_of(pid)
local ok, pr = pcall(players.profile, pid)
local t = ok and type(pr) == "table" and tonumber(pr.team)
return t or (pid < 5 and 2 or 3)
end
local function enemy_picked(unit)
local now = M.clock()
if type(players) ~= "table" then return false end
if now - roster_t > 5 or now < roster_t then
roster_t, roster = now, {}
local okd, D = pcall(require, "draft/data")
local okl, me = pcall(players.local_id)
if okd and okl and type(me) == "number" and me >= 0 then
local mine = team_of(me)
for pid = 0, 9 do
local ok, st = pcall(players.stats, pid)
local id = ok and type(st) == "table" and st.selected_hero_id
local okn, n = pcall(D.name_of_id, id)
if id and okn and n and team_of(pid) ~= mine then roster[n] = true end
end
end
end
return roster[unit] == true
end
local function resolve(r)
local pos = r.self_pos or (not r.far and r.pos) or nil
if not pos then return end
if r.owner then
local ok, enemy = pcall(r.owner.is_enemy, r.owner)
if ok and not enemy then return end
elseif hero_on(r.unit, "ally") then
return
end
local h = r.owner or hero_on(r.unit, "enemy")
-- not among the enemies (seen, or picked): the hash came from someone else (#154)
if not h and not enemy_picked(r.unit) then return end
if h and in_vision(h) then return end -- in vision: the hero is on the map already
S.cast[r.unit] = { pos = pos, t = M.clock() }
end
-- ------------------------------------------------------------------ teleports ---
local function hero_of(handle)
if not handle or handle == 0 or handle >= 0xFFFFFF then return nil end
local ok, e = pcall(entities.get, handle & 0x3fff)
if ok and e and e:valid() then
local okh, is = pcall(e.is_hero, e)
if okh and is then return e end
end
return nil
end
-- the start whose index sits right before this end, created in the same moment; with several
-- teleports in one tick, the one carrying the same hero
local function start_for(end_index, t, hero)
local s = S.live[end_index - 1]
if s and s.kind == "tp_start" and math.abs(s.t - t) < 0.2 then return s end
local any
for _, v in pairs(S.live) do
if v.kind == "tp_start" and math.abs(v.t - t) < 0.2 and v.pos then
if hero and v.hero == hero then return v end
any = any or v
end
end
return any
end
local function try_teleport(idx, force)
local e = S.live[idx]
if not e or e.kind ~= "tp_end" or e.done or not e.pos then return end
local s0 = S.live[idx - 1]
if s0 and s0.kind ~= "tp_start" then s0 = nil end
-- the end names its hero on control point 3; the start, created with it, names him too
e.hero = e.hero or (s0 and s0.hero)
if not e.hero then return end
if not force and s0 and not s0.pos and M.clock() - e.t < M.CFG.tp_wait then return end
e.done = true
local okt, enemy = pcall(e.hero.is_enemy, e.hero)
if not okt or not enemy then return end
local s = start_for(idx, e.t, e.hero)
local unit = unit_of(e.hero)
local tp = { hero = e.hero, unit = unit, pos = e.pos, from = s and s.pos or nil, t = e.t,
land = e.t + M.CFG.tp_channel }
e.rec = tp
if unit then S.tp[unit] = tp end
for _, fn in pairs(subs) do pcall(fn, tp) end
end
-- fn(tp) on every enemy teleport: { hero, unit, pos (to), from, t, land }. one slot per key, so a
-- reloaded caller replaces its own
function M.on_teleport(key, fn) subs[key] = fn end
-- an allied smoke is one of ours: a smoked ally stands there
local function try_smoke(idx)
local e = S.live[idx]
if not e or e.kind ~= "smoke" or e.done or not e.pos then return end
e.done = true
local ok, allies = pcall(entities.heroes, "ally")
if ok and type(allies) == "table" then
for i = 1, #allies do
local a = allies[i]
local oka, near = pcall(function() return a:distance(e.pos) < 1200 and a:has_modifier("modifier_smoke_of_deceit") end)
if oka and near then return end
end
end
local sm = { pos = e.pos, t = e.t, index = idx }
S.smokes[#S.smokes + 1] = sm
for _, fn in pairs(smoke_subs) do pcall(fn, sm) end
end
-- fn(smoke) on every enemy smoke: { pos, t, index }
function M.on_smoke(key, fn) smoke_subs[key] = fn end
-- ------------------------------------------------------------------ the vision sweep ---
local function call(h, f, ...)
local fn = h[f]
if type(fn) ~= "function" then return nil end
local ok, v = pcall(fn, h, ...)
if ok then return v end
return nil
end
-- the speed he keeps up: a slow on the last tick wears off, boots and hastes stay
local function speed_of(h)
local v = math.max(tonumber(call(h, "move_speed")) or 0, tonumber(call(h, "ideal_speed")) or 0)
return v > 0 and v or nil
end
-- seconds left on a visible hero's modifier, or nil. creation_time is on curtime
local function mod_left(h, name)
local mod = call(h, "get_modifier", name)
if type(mod) ~= "table" then return nil end
local d, c = tonumber(mod.duration), tonumber(mod.creation_time)
local okt, ct = pcall(function() return globals.curtime() end)
if not (d and d > 0 and c and okt and type(ct) == "number") then return nil end
local left = d - (ct - c)
return (left > 0 and left <= d) and left or nil
end
-- the states that keep a hero where he stands; hex and fear walk, so they are not here
local HOLD_BITS = { { "is_stunned", "stun" }, { "is_nightmared", "sleep" }, { "is_frozen", "stun" },
{ "is_rooted", "root" }, { "is_taunted", "taunt" }, { "is_out_of_game", "gone" } }
-- kind, seconds left; nil when he can walk or the length is unknown. the clock comes from
-- NPC.GetControlState (compat, backed by the generated ability facts) when it is loaded; a
-- state with no known length is not credited. the bits go first: they cost nothing
local function hold_of(h)
local kind
for i = 1, #HOLD_BITS do
if call(h, HOLD_BITS[i][1]) == true then kind = HOLD_BITS[i][2] break end
end
if not kind then return nil end
local npc = rawget(_G, "NPC")
local gcs = type(npc) == "table" and npc.GetControlState or nil
if type(gcs) ~= "function" then return nil end
local ok, c = pcall(gcs, h)
if not ok or type(c) ~= "table" or c.no_move ~= true then return nil end
local left = tonumber(c.no_move_for)
if not left or left <= 0 then return nil end
return kind, left
end
local function fountain_of(h)
local f = M.CFG.fountain[tonumber(call(h, "team")) or 0]
return f and { x = f.x, y = f.y, z = f.z } or nil
end
-- the visible -> fog transition is read here, on the tick: the stamp stops moving then
function M.sweep(now)
now = now or M.clock()
if now - S.swept < M.CFG.period and now >= S.swept then return end
S.swept = now
local ok, list = pcall(entities.heroes, "enemy")
for _, h in ipairs(ok and type(list) == "table" and list or {}) do
local oki, ill = pcall(h.is_illusion, h)
local unit = not (oki and ill) and unit_of(h) or nil
if unit then
local oka, alive = pcall(h.is_alive, h)
if oka and alive == false then
-- dead: every stamp is stale. he comes back at his fountain, or where he fell
-- when he reincarnates
if not S.dead[unit] then
local seen = S.seen[unit]
S.dead[unit] = { speed = seen and seen.speed,
pos = call(h, "is_reincarnating") == true and seen and seen.pos or nil }
end
S.seen[unit], S.cast[unit], S.tp[unit], S.noted[unit], S.vis[unit], S.hold[unit] =
nil, nil, nil, nil, nil, nil
elseif in_vision(h) then
local okp, p = pcall(h.position, h)
if okp and p then
S.seen[unit] = { pos = p, t = now, speed = speed_of(h) }
end
S.vis[unit], S.dead[unit] = true, nil
S.cast[unit], S.noted[unit] = nil, nil
local kind, left = hold_of(h)
S.hold[unit] = kind and { kind = kind, untl = now + left } or nil
-- a teleport channelled in plain sight stays: when it ends he is at its landing,
-- maybe in the fog. its modifier has the real channel. without the modifier it
-- was cancelled, unless it is just ending: the start can stay networked a tick
-- after he has left it
local tp = S.tp[unit]
if tp then
if call(h, "has_modifier", "modifier_teleporting") == true then
local left_tp = mod_left(h, "modifier_teleporting")
if left_tp then tp.land = now + left_tp end
elseif now < tp.land - 0.5 or now > tp.land + 1 then
S.tp[unit] = nil
end
end
else
S.vis[unit] = false
local d = S.dead[unit]
if d then
-- back to life where we cannot see him
S.dead[unit] = nil
local p = d.pos or fountain_of(h)
if p then S.seen[unit] = { pos = p, t = now, speed = d.speed or speed_of(h), respawn = true } end
end
end
end
end
end
-- pending casts and teleports that waited long enough
function M.settle(now)
now = now or M.clock()
while S.smokes[1] and now - S.smokes[1].t > M.CFG.smoke_keep do table.remove(S.smokes, 1) end
for k, r in pairs(S.pending) do
if now - r.t >= M.CFG.cast_wait then
S.pending[k] = nil
pcall(resolve, r)
end
end
for k, v in pairs(S.live) do
if now - v.t > M.CFG.tp_keep then S.live[k] = nil
elseif v.kind == "tp_end" and not v.done and now - v.t >= M.CFG.tp_wait then pcall(try_teleport, k, true) end
end
end
function M.tick(now)
now = now or M.clock()
M.sweep(now)
M.settle(now)
end
-- ------------------------------------------------------------------ the reads ---
-- the fog casts as cast_track draws them: [unit] = { pos, t }. checked on the read too: the
-- sweep runs every `period`, a mark is gone the frame he shows up
function M.casts()
for unit in pairs(S.cast) do
local h = hero_on(unit, "enemy")
if h then
local ok, alive = pcall(h.is_alive, h)
if in_vision(h) or (ok and alive == false) then S.cast[unit] = nil end
end
end
return S.cast
end
-- who: an enemy hero entity or its unit name. -> { pos, age, source, speed, unit, land, walk,
-- held } or nil when nothing is known (never seen since his last death). source: "visible",
-- "particle", "tp", "noted", "last_seen", "respawn". a teleport not landed yet has age 0 at the
-- landing; land (tp only) is when he stands there, on M.clock(). walk: the seconds of the age he
-- could have been walking. held = { kind = "tp"|"stun"|"root"|"sleep"|"taunt"|"gone", left, from }
-- while something we know of keeps him in place (from: a teleport's start, where he stands).
function M.estimate(who, now)
now = now or M.clock()
local unit = type(who) == "string" and who or unit_of(who)
if not unit then return nil end
local seen = S.seen[unit]
local speed = seen and seen.speed or M.CFG.speed
if type(who) ~= "string" and in_vision(who) then
local okp, p = pcall(who.position, who)
if okp and p then return { pos = p, age = 0, source = "visible", speed = speed, unit = unit } end
end
if S.vis[unit] and seen then
return { pos = seen.pos, age = 0, source = "visible", speed = speed, unit = unit }
end
local best, bt, src
if seen then best, bt, src = seen.pos, seen.t, "last_seen" end
local c = S.cast[unit]
if c and (not bt or c.t >= bt) then best, bt, src = c.pos, c.t, "particle" end
local n = S.noted[unit]
if n and (not bt or n.t > bt) then best, bt, src = n.pos, n.t, "noted" end
local tp = S.tp[unit]
-- the half second: a teleport seen in vision can show him at the start a tick past the end
if tp and (not bt or tp.land + 0.5 >= bt) then best, bt, src = tp.pos, tp.land, "tp" end
if not best then return nil end
if src == "last_seen" and seen.respawn then src = "respawn" end
local free, held = bt, nil
if src == "tp" then
if now < tp.land then held = { kind = "tp", left = tp.land - now, from = tp.from } end
elseif src == "last_seen" then
local hd = S.hold[unit]
if hd and hd.untl > bt then
free = hd.untl
if now < free then held = { kind = hd.kind, left = free - now } end
end
end
return { pos = best, age = math.max(0, now - bt), source = src, speed = speed, unit = unit,
land = src == "tp" and bt or nil, walk = math.max(0, now - free), held = held }
end
-- enemy smokes of the last smoke_keep seconds: { { pos, t }, ... }, oldest first
function M.smokes() return S.smokes end
-- a position worked out elsewhere for an enemy hero not in vision: unit name, world pos, and
-- when (now by default, on M.clock()). it ranks with the casts; a hero in vision ignores it
function M.note(unit, pos, t)
if type(unit) ~= "string" or not world(pos) then return end
local h = hero_on(unit, "enemy")
if not h or in_vision(h) then return end
t = t or M.clock()
local c = S.noted[unit]
if c and c.t > t then return end
S.noted[unit] = { pos = { x = pos.x, y = pos.y, z = pos.z or 0 }, t = t }
end
-- every enemy hero with an estimate
function M.estimates(now)
now = now or M.clock()
local out = {}
local ok, list = pcall(entities.heroes, "enemy")
for _, h in ipairs(ok and type(list) == "table" and list or {}) do
local oki, ill = pcall(h.is_illusion, h)
if not (oki and ill) then
local oka, alive = pcall(h.is_alive, h)
if not (oka and alive == false) then
local e = M.estimate(h, now)
if e then out[#out + 1] = e end
end
end
end
return out
end
function M.reset()
S.seen, S.vis, S.cast, S.tp, S.noted, S.pending, S.live, S.smokes, S.swept = {}, {}, {}, {}, {}, {}, {}, {}, -1
S.hold, S.dead = {}, {}
end
-- ------------------------------------------------------------------ listeners ---
-- one set of handlers across reloads: a copy loaded after the registry was cleared by hand
-- bumps the version, and the older handlers step aside
local VER = (reg.fog_seen_ver or 0) + 1
reg.fog_seen_ver = VER
local function mine() return reg.fog_seen_ver == VER end
function M.on_create(p)
if type(p) ~= "table" then return end
local short = (p.hash and SHORT[p.hash]) or (type(p.name) == "string" and p.name:match("([^/]+)%.vpcf$"))
local kind = TP[short] or (p.name == SMOKE and "smoke") or nil
if kind then
local hero
if kind == "tp_start" then
local okh, is = pcall(function() return p.entity and p.entity:is_hero() end)
hero = (okh and is) and p.entity or hero_of(p.entityHandle)
end
S.live[p.index] = { kind = kind, t = M.clock(), hero = hero }
return
end
if not p.hash then return end
local hit = BY_HASH[p.hash]
if not hit then return end
local unit = HEROES[hit < 0 and -hit or hit]
if not unit then return end
local owner = p.entity
if owner and unit_of(owner) ~= unit then owner = nil end
S.pending[p.index] = { t = M.clock(), unit = unit, far = hit < 0, owner = owner }
end
function M.on_update_entity(p)
if type(p) ~= "table" then return end
local e = S.live[p.index]
if e then
-- a live client binds the start's control point 0 to the hero with a fallback position
-- (the demo moved it by transform instead)
if e.kind == "tp_start" and p.controlPoint == 0 then
local pos = p.position
if pos and pos.x == 0 and pos.y == 0 then pos = nil end
e.pos = e.pos or pos
e.hero = e.hero or p.entity or hero_of(p.entityHandle)
pcall(try_teleport, p.index + 1)
return
end
if e.kind ~= "tp_end" or p.controlPoint ~= 3 then return end
e.hero = p.entity or hero_of(p.entityHandle)
pcall(try_teleport, p.index)
return
end
local r = S.pending[p.index]
if not r or r.self_pos then return end
-- a point bound to the caster: its fallback is where he stands
if p.entity and unit_of(p.entity) == r.unit then
r.owner = r.owner or p.entity
r.self_pos = world(p.position)
end
end
function M.on_update(p)
if type(p) ~= "table" then return end
local e = S.live[p.index]
if e then
if p.controlPoint ~= 0 or not p.position then return end
e.pos = p.position
if e.kind == "tp_end" then pcall(try_teleport, p.index)
elseif e.kind == "tp_start" then pcall(try_teleport, p.index + 1)
elseif e.kind == "smoke" then pcall(try_smoke, p.index) end
return
end
local r = S.pending[p.index]
if not r or r.far then return end
local pos = world(p.position)
if pos and (not r.pos or p.controlPoint == 0) then r.pos = pos end
end
-- a teleport's end goes away when he lands or when the channel breaks; sooner than any
-- teleport can finish means he stays at the start
function M.on_destroy(p)
if type(p) ~= "table" then return end
local e = S.live[p.index]
S.live[p.index] = nil
local tp = e and e.kind == "tp_end" and e.rec
if not tp or not tp.unit or S.tp[tp.unit] ~= tp then return end
local now = M.clock()
if now - tp.t < M.CFG.tp_min_channel - 0.3 then
S.tp[tp.unit] = nil
if tp.from then S.noted[tp.unit] = { pos = { x = tp.from.x, y = tp.from.y, z = tp.from.z or 0 }, t = now } end
elseif now < tp.land then
tp.land = now
end
end
if type(events) == "table" and type(events.register) == "function" then
events.register("on_particle_create", function(p) if mine() then M.on_create(p) end end)
events.register("on_particle_update_entity", function(p) if mine() then M.on_update_entity(p) end end)
events.register("on_particle_update", function(p) if mine() then M.on_update(p) end end)
events.register("on_particle_destroy", function(p) if mine() then M.on_destroy(p) end end)
events.register("on_update", function() if mine() then pcall(M.tick) end end)
end
reg.fog_seen = M
return M
pack.json2 行
{ "kind": "lib", "version": "1.0.1" }
data/tp_hashes.lua1134 行
-- generated by tools/particle_names/gen_utea.py, do not edit.
-- server particle name hash -> short name, the teleport and smoke subset lib/fog_seen reads.
-- 1128 paths.
return {
[0x00023c5049fb0e71]="teleport_start",
[0x00c052067777e7dd]="teleport_start",
[0x010ca3ce30efaa24]="teleport_end",
[0x016278ccf8bdd1cb]="teleport_end",
[0x0169714c56aed0f5]="teleport_start",
[0x01b24e5bdbaa41cb]="teleport_end",
[0x01b349b2441a223d]="teleport_start",
[0x01d648d4092a198e]="teleport_end",
[0x020a170b84426469]="teleport_end",
[0x0211a82bbbfa3d1e]="teleport_start",
[0x0236baa197f2026c]="teleport_start",
[0x02412562c068c93e]="teleport_end",
[0x02b5e7bf003edb9b]="teleport_start",
[0x02de5e41a144772d]="teleport_end",
[0x0314fafefb4004e7]="teleport_end",
[0x03e55289a443a8b3]="teleport_start",
[0x03f1f91658a993d0]="teleport_end",
[0x03f597e76f9405bc]="teleport_end",
[0x0412aeaba40876a3]="teleport_start",
[0x0426aedb4d55a699]="teleport_start",
[0x042b69e89849dead]="teleport_start",
[0x0440dfe6e09e23b5]="teleport_end",
[0x0481681a4f20c239]="teleport_start",
[0x048a4ec6622c8d26]="teleport_end",
[0x04b4536ab88d174b]="teleport_end",
[0x04d213d49f30b49d]="teleport_end",
[0x04f8ba7fe80c6a6e]="teleport_end",
[0x052230cc52180f2b]="teleport_end",
[0x053df974b6e6b7ee]="teleport_end",
[0x05596ea0508c5ae4]="teleport_end",
[0x05a207322168e5c5]="teleport_start",
[0x05eb0f124d6fac45]="teleport_start",
[0x05fb08ec9d06eb69]="teleport_start",
[0x061c1ff7234657d1]="teleport_start",
[0x062e77a64919a4c1]="teleport_start",
[0x06336059cd39ac14]="teleport_start",
[0x065cebf7b7fe7106]="teleport_end",
[0x06b8e1e95a6d6cc4]="teleport_start",
[0x070ca713f2852f00]="teleport_start",
[0x0732f5bfe7fd2527]="teleport_end",
[0x07b2c37d3fc8b516]="teleport_end",
[0x07d03eb1f889e71c]="teleport_end",
[0x08af3fee71836640]="teleport_end",
[0x08ef0221a9a2e045]="teleport_end",
[0x091114ecad9c234c]="teleport_end",
[0x09187916ce3bf27d]="teleport_start",
[0x097c6a50c5dfd2b2]="teleport_end",
[0x09c9083874153651]="teleport_end",
[0x09f511ef19d757b4]="teleport_end",
[0x09fe3f644d275a65]="teleport_end",
[0x0a5f82a6c09ee135]="teleport_end",
[0x0a71c5aa8925f575]="teleport_start",
[0x0ab1645f4a2243f3]="teleport_start",
[0x0aff9fd75eccc6c7]="teleport_start",
[0x0b4818a6d773e7e5]="teleport_end",
[0x0b6039b94a7d4916]="teleport_start",
[0x0b863ae74705bda2]="teleport_start",
[0x0baac16a13570de2]="teleport_end",
[0x0bc0d798594dad85]="teleport_start",
[0x0c19bd2c1db5e1b4]="teleport_end",
[0x0c2296db91f82f2b]="teleport_end",
[0x0c8e7c1dbcb05ed7]="teleport_start",
[0x0c9ecf2947c3de96]="teleport_end",
[0x0cae5651e0344a4e]="teleport_start",
[0x0d3a2dceffbb32f5]="teleport_end",
[0x0d450c642f367048]="teleport_start",
[0x0d45170c30e28a34]="teleport_start",
[0x0dbffac87cd0068f]="teleport_end",
[0x0dc6d7b57450542c]="teleport_end",
[0x0e718837b064f744]="teleport_start",
[0x0e7cea555d095ca5]="teleport_end",
[0x0e80e0f16c93d1f4]="teleport_end",
[0x0ed81a9106d3dc90]="teleport_start",
[0x0f2812b060e5b852]="teleport_end",
[0x0f35b9693b4c47d7]="teleport_end",
[0x0f8d42c882cd40c6]="teleport_start",
[0x0f9e5c7530c6a8ca]="teleport_start",
[0x0fd26f2ab98d5e67]="teleport_end",
[0x0fe39b76d3b330c8]="teleport_end",
[0x101529e62552e627]="teleport_start",
[0x1020c7085cc77385]="teleport_end",
[0x106f393fab0a75b3]="teleport_end",
[0x107a526bdd8190f2]="teleport_end",
[0x1099e22298ff2209]="teleport_end",
[0x10c17353f6236581]="teleport_start",
[0x11004d1c7a8c787d]="teleport_end",
[0x1120fbeeb4adc684]="teleport_start",
[0x1124fcca4a678e32]="teleport_end",
[0x1131d79cf2498906]="teleport_start",
[0x118396fa7efc243f]="teleport_end",
[0x11b94c19609b03d5]="teleport_start",
[0x11d22da1f23e87b9]="teleport_start",
[0x127704f92bc8e72f]="teleport_end",
[0x129360320bf4db3e]="teleport_end",
[0x12a797231916913e]="teleport_end",
[0x12a94280aee0e59c]="teleport_start",
[0x12e21e8128241662]="teleport_end",
[0x13058827f60ed8b3]="teleport_start",
[0x135382f3ed3bb48b]="teleport_end",
[0x1378924429bbd295]="teleport_end",
[0x144bae78e84d50c8]="teleport_end",
[0x1464d1407ee9a393]="teleport_start",
[0x14666ef8d28010fc]="teleport_start",
[0x14796f46ca8ccf6c]="teleport_end",
[0x149b45fe72fbccb0]="teleport_end",
[0x15419a42d9463d19]="teleport_end",
[0x15544b1ed6b1dd2c]="teleport_end",
[0x163e2fe73493f333]="teleport_start",
[0x164fc67402e786ab]="teleport_start",
[0x1693ea918af8279a]="teleport_end",
[0x16a9cc2b775066e7]="teleport_end",
[0x16cb67cb77af2799]="teleport_start",
[0x16cf92c0ed5c7c35]="teleport_start",
[0x16e0eb00cb84d624]="teleport_start",
[0x173913b29b620cf0]="teleport_end",
[0x174aea5517ecd7d7]="teleport_end",
[0x18112b4c2c565ab1]="teleport_start",
[0x1845c99f71bdcb3c]="teleport_end",
[0x18af9365c729b148]="teleport_start",
[0x1908d09ef7f6955c]="teleport_end",
[0x191d09deb7282a71]="teleport_end",
[0x1a1d3dcf1f29d611]="teleport_start",
[0x1a2bd770f35f9e22]="teleport_start",
[0x1ab88a647e50c65f]="teleport_end",
[0x1ac6cb1b6cccf26e]="teleport_start",
[0x1ac78002edcf66b0]="teleport_end",
[0x1ac9c02094fc179e]="teleport_start",
[0x1acc48c1d8875440]="teleport_start",
[0x1b281c4d7d7d731d]="teleport_end",
[0x1b323fae044616a0]="teleport_end",
[0x1ba9a0974f5d4aff]="teleport_start",
[0x1be48d2ceb3433f4]="teleport_start",
[0x1c641064a823404e]="teleport_end",
[0x1c8fc9e03dece3b7]="teleport_end",
[0x1df736bf902efcfe]="teleport_start",
[0x1dfdae523ecafb86]="teleport_start",
[0x1e087517db062cb4]="teleport_end",
[0x1e47cf6f57896995]="teleport_start",
[0x1e7265f9b94d01da]="teleport_start",
[0x1e72f12461db05eb]="teleport_end",
[0x1e750f64bd9f4320]="teleport_start",
[0x1e7edd4c001ec52e]="teleport_start",
[0x1ed11ff48966ebff]="teleport_end",
[0x1f01f9e7b56fdac9]="teleport_start",
[0x1f41db1820c4e7e2]="teleport_end",
[0x1f9ebcdff2f94b5f]="teleport_end",
[0x1ff2c195cf86b2ec]="teleport_start",
[0x205c0bd16b1e84b0]="teleport_end",
[0x20a5d9d090642be8]="teleport_end",
[0x213e48544879a456]="teleport_end",
[0x218cfed0982d5105]="teleport_start",
[0x21a43395fbe8ebd1]="teleport_end",
[0x21bc2f0939bc6b5e]="teleport_start",
[0x21ef7adc1dae44f2]="teleport_start",
[0x223fbe3444489020]="teleport_start",
[0x226161d2d448e904]="teleport_end",
[0x228567b18f85a9a5]="teleport_start",
[0x22ac2d130c1294f3]="teleport_end",
[0x22ca40243c6613a3]="teleport_end",
[0x22d3681d1ede991e]="teleport_start",
[0x22e8d1ea34f21462]="teleport_end",
[0x234f618c9a1bf5e3]="teleport_start",
[0x238fd1a741fa49c8]="teleport_end",
[0x23ae1ef5792112f9]="teleport_start",
[0x23d300eab05a1a6b]="teleport_end",
[0x23f3580c80ae941a]="teleport_end",
[0x240fda61f6c62d15]="teleport_start",
[0x24104dcfe23a9a06]="teleport_start",
[0x2449529f98078124]="teleport_end",
[0x24810e131f6a8231]="teleport_end",
[0x248df2148fdfc3ae]="teleport_start",
[0x24d0b5c1ec474b36]="teleport_start",
[0x25a4816e2b70e3ac]="teleport_start",
[0x25d94c5c0cd0d4df]="teleport_end",
[0x25e22e838d54d4f9]="teleport_end",
[0x25f0b646c2bccb32]="teleport_end",
[0x2652a731eb76c1d0]="teleport_end",
[0x269514e522c25cd0]="teleport_start",
[0x26a1223ad27b7654]="teleport_start",
[0x26b77e9ed4913dbd]="teleport_end",
[0x273efbdc85b1d33f]="teleport_start",
[0x27737a748e18d876]="teleport_end",
[0x2774479a2a2051c2]="teleport_end",
[0x28a6151bd91487d0]="teleport_end",
[0x28ce5302d1942bf1]="teleport_start",
[0x290bd7751eba117b]="teleport_start",
[0x2944c001ee70e9de]="teleport_start",
[0x299cc8544424d4e7]="teleport_start",
[0x29fa15e025ef1f92]="teleport_end",
[0x2a619aa54b5cc9ac]="teleport_end",
[0x2af044c68d2d8b40]="teleport_end",
[0x2b62075c36dc3f07]="teleport_end",
[0x2b93f2a69e6b5e7c]="teleport_start",
[0x2bbbb2eedfbb1866]="teleport_start",
[0x2c61089afbf61ef8]="teleport_start",
[0x2c76f17a67c2cab1]="teleport_end",
[0x2cb2870edf67d20f]="teleport_end",
[0x2cfb2cc0d4826940]="teleport_start",
[0x2cfd8aaebf3e041b]="teleport_end",
[0x2d3f42a33f60a0b4]="teleport_end",
[0x2d8107664aee19be]="teleport_end",
[0x2d88002f44c6006c]="teleport_start",
[0x2d92320f9956933e]="teleport_start",
[0x2d9e60be371988e8]="teleport_end",
[0x2de349e43bf47ec7]="teleport_end",
[0x2e4ddf656aacacb9]="teleport_start",
[0x2e77d92f1a37cc59]="teleport_start",
[0x2ec3c37fbe596649]="teleport_start",
[0x2ed3783e412736eb]="teleport_start",
[0x2f012cf77ba71ebf]="teleport_end",
[0x308b847bd15c11f7]="teleport_end",
[0x30c1476f953cfba9]="teleport_start",
[0x30cd743ea2c0ea4b]="teleport_start",
[0x310b1e5b0c8f692a]="teleport_end",
[0x312cc7a71fd7b4c9]="teleport_end",
[0x3141a26ef0b809ea]="teleport_end",
[0x315dc439e0bcb720]="teleport_start",
[0x3186e06cc5f76e8d]="teleport_start",
[0x31bfb148bc6760fc]="teleport_start",
[0x32146be1c870b39b]="teleport_start",
[0x32253e16b85cd22b]="teleport_end",
[0x322f0e1cef3dcf4b]="teleport_start",
[0x3237f3ce597cb2ff]="teleport_end",
[0x326b9f03ee14cecb]="teleport_start",
[0x32d1b8b44f64b201]="teleport_start",
[0x3323123033084f3f]="teleport_end",
[0x33e13e8835068922]="teleport_end",
[0x34241da5d3e55add]="teleport_start",
[0x3430502a457a9e45]="teleport_start",
[0x34609002ce47b693]="teleport_end",
[0x34c186dff6c2cbfb]="teleport_end",
[0x35389aba7a7a9d7e]="teleport_end",
[0x3594c771b627738b]="teleport_end",
[0x36295c4da683c186]="teleport_start",
[0x370ae247ad11be3e]="teleport_end",
[0x37853b2ee084c408]="teleport_start",
[0x378defe29574b1b1]="teleport_end",
[0x3797acb337ffee32]="teleport_end",
[0x37c9d8b155d211db]="teleport_end",
[0x37d26255f13bdb11]="teleport_end",
[0x37fa0ea3462a1c83]="teleport_start",
[0x3808ae9e475e8807]="teleport_start",
[0x3819fb85562faaab]="teleport_end",
[0x382a0b8c78bb854d]="teleport_end",
[0x386af96cc2f384dd]="teleport_start",
[0x38a2a899f25dbab3]="teleport_end",
[0x38ae97516f3a0519]="teleport_start",
[0x3929414f831671b4]="teleport_start",
[0x392f4ff4be8167d4]="teleport_start",
[0x39753b5e9b9c271d]="teleport_start",
[0x3a0080ba12982931]="teleport_start",
[0x3a27013d650c3f95]="teleport_end",
[0x3a4556c1007be8ca]="teleport_end",
[0x3ad736f0c3d24f0a]="teleport_end",
[0x3b21b0540a6a70be]="teleport_end",
[0x3b4930b0ad641b74]="teleport_end",
[0x3b711d10017c1b60]="teleport_end",
[0x3b79009af6b919ab]="teleport_start",
[0x3bcf4f8fd376b1cd]="teleport_end",
[0x3bef6bdd48f2ebd0]="teleport_start",
[0x3c34b4050d927c6f]="teleport_end",
[0x3c664de214d5372d]="teleport_end",
[0x3c9670c78a1f69ef]="teleport_end",
[0x3ccb4534597090a8]="teleport_end",
[0x3cd396cf10b21859]="teleport_start",
[0x3ceb2393256f0810]="teleport_end",
[0x3d2df9bad8f12929]="teleport_start",
[0x3d505111d35f9096]="teleport_start",
[0x3d73bcd44b3641aa]="teleport_start",
[0x3d75c331a6e437e3]="teleport_end",
[0x3d8f14f1b06d2a7a]="teleport_end",
[0x3df0f8f334abc1bd]="teleport_start",
[0x3df4540bcfa2553a]="teleport_start",
[0x3e1499d2ff206aef]="teleport_start",
[0x3e41acf636494f01]="teleport_start",
[0x3e86ae357a925596]="teleport_start",
[0x3e88110274071d7f]="teleport_start",
[0x3e9d65cfab1b8306]="teleport_start",
[0x3eb4f93be13b7837]="teleport_end",
[0x3ed02e7621a9c33a]="teleport_end",
[0x3ee94ba6a9ff9c7f]="teleport_end",
[0x3f43cb0fd220e95b]="teleport_start",
[0x3f4e81031557a14f]="teleport_end",
[0x3f686139678c0f01]="teleport_end",
[0x3f9d8a3248a1730e]="teleport_end",
[0x3fe7964d049dd715]="teleport_end",
[0x3fea295f506adb21]="teleport_end",
[0x400a439a7c05379a]="teleport_start",
[0x400b9f5d3590917f]="teleport_end",
[0x407b5c292beef5c8]="teleport_end",
[0x40ba0fb5e356f2f0]="teleport_end",
[0x40c888916546d227]="teleport_start",
[0x40d46fe3168e5f1f]="teleport_end",
[0x42170e3593aafe20]="teleport_start",
[0x421ea0cbff720bff]="teleport_start",
[0x42582bfe5ddb21d5]="teleport_end",
[0x42652fb2f873d01e]="teleport_end",
[0x426eda7d9880e879]="teleport_end",
[0x429b67a4de806ca0]="teleport_end",
[0x43261f30c3022680]="teleport_end",
[0x4434f5a193d365e4]="teleport_end",
[0x44519e5d6399bd7c]="teleport_end",
[0x4484523af799fb7c]="teleport_end",
[0x44ef7b976b32b721]="teleport_end",
[0x4503c80d6e6bb0a8]="teleport_end",
[0x456f5b434c2f2044]="teleport_end",
[0x45f19356ecfdf70b]="teleport_start",
[0x46dc032a4c2da01d]="teleport_start",
[0x4724125d4fe9ca16]="teleport_end",
[0x477ea8f33285bb8d]="teleport_end",
[0x47b3284640564345]="teleport_start",
[0x48473e1a7bb7960c]="teleport_end",
[0x4848804984acc7c2]="teleport_start",
[0x486cffe0b86e9363]="teleport_end",
[0x489dfeebd4623aaf]="teleport_end",
[0x48c0aa16b2a5fc36]="teleport_start",
[0x495ad49724b4b2c9]="teleport_end",
[0x49c19ad28f35aa67]="teleport_start",
[0x49dc937d008c4091]="teleport_start",
[0x4a43edd979667627]="teleport_end",
[0x4a665ddd270f45c8]="teleport_start",
[0x4b69b862e5a77724]="teleport_start",
[0x4bb8d6c0dc73abb4]="teleport_end",
[0x4c069b90c09c853c]="teleport_end",
[0x4c43b1d29dac681b]="teleport_start",
[0x4cab7e4244895c7c]="teleport_end",
[0x4cd007ae03b28707]="teleport_end",
[0x4debdbbf832d6bce]="teleport_end",
[0x4dfb1f00cec9b03c]="teleport_end",
[0x4e1464e521578214]="teleport_start",
[0x4e692ea44cc947b1]="teleport_end",
[0x4e6aa094edf38239]="teleport_end",
[0x4e81980e1d700be7]="teleport_end",
[0x4ee996840dece831]="teleport_end",
[0x4eed00fd66e9a6e9]="teleport_start",
[0x4ef9dd408071ce30]="teleport_end",
[0x4f35bc517f979b09]="teleport_end",
[0x4f6f76e325fdb34f]="teleport_end",
[0x4fbb5b9873143a1e]="teleport_end",
[0x4fe9807969bfaaed]="teleport_end",
[0x4ff04ddd6f9d31fa]="teleport_start",
[0x5036f8dbeaf07131]="teleport_end",
[0x503aec3fa44de1c5]="teleport_end",
[0x5070cbbb4a0b5eb3]="teleport_end",
[0x50b31851bcb7b752]="teleport_start",
[0x50b892e5a6c51207]="teleport_end",
[0x50d08c0f0637dac5]="teleport_start",
[0x50d0a2ec94ed7f82]="teleport_start",
[0x50e0d5348392ad1e]="teleport_end",
[0x51a0b1ba9be46a39]="teleport_start",
[0x51a99c53c6aaf514]="teleport_end",
[0x51b9248fe9f176ad]="teleport_end",
[0x51d9c795ccb2214f]="teleport_start",
[0x51e0e16ebb0caf7d]="teleport_start",
[0x522cf4583a6df381]="teleport_end",
[0x52531066eb14a71d]="teleport_start",
[0x52797be735e50ae3]="teleport_end",
[0x52c259248fd011a2]="teleport_end",
[0x52d5276f99eaf508]="teleport_start",
[0x530f22703590d543]="teleport_end",
[0x531a8e624060f139]="teleport_end",
[0x53a27d5dcb2eaf34]="teleport_end",
[0x53e33df4b9668dc0]="teleport_end",
[0x53edb49cdef73062]="teleport_start",
[0x53f7261f92a30529]="teleport_start",
[0x545c12a1a40c1368]="teleport_end",
[0x54a62b44c6766645]="teleport_end",
[0x54c1ecf1ed407f07]="teleport_end",
[0x54cd403404fe8a83]="teleport_start",
[0x54ec40ae6af090b2]="teleport_start",
[0x5508f8c82af61bb9]="teleport_end",
[0x55615d0e6ed7a3ec]="teleport_end",
[0x55a8678866f299e4]="teleport_end",
[0x563db63b4ead54cd]="teleport_end",
[0x566db178e53ab123]="teleport_end",
[0x56b38da68083f8bb]="teleport_start",
[0x571084c58f4b93db]="teleport_end",
[0x571fe20f9aed65c0]="teleport_start",
[0x5750d5e953265801]="teleport_end",
[0x5782aa9d1fa8b818]="teleport_start",
[0x57c8251afc940dc3]="teleport_end",
[0x57e341ff2d2731ff]="teleport_start",
[0x57ed886c54f52ceb]="teleport_end",
[0x57fe85f4179b031a]="teleport_end",
[0x585db2e36b1425d6]="teleport_start",
[0x588dc67e6d19058e]="teleport_end",
[0x590307342fe44d29]="teleport_end",
[0x5990cf208d6e7e32]="teleport_end",
[0x599fae116d6b2cd6]="teleport_end",
[0x5aa3855d8a5ac134]="teleport_start",
[0x5ac6881bababd500]="teleport_start",
[0x5b941a8042fec178]="teleport_start",
[0x5c1b9054173abf39]="teleport_start",
[0x5c35801a7aec29da]="teleport_start",
[0x5c731d2a7b2b433d]="teleport_start",
[0x5c89441d7e69556b]="teleport_end",
[0x5cb38b489cc84e0b]="teleport_start",
[0x5cdb73dc31b3ecc9]="teleport_start",
[0x5cdc81f799bc643a]="teleport_end",
[0x5cf956e788ca281e]="teleport_end",
[0x5d376f2b63552d60]="teleport_end",
[0x5d49e22f36e79874]="teleport_end",
[0x5d7ede53058142ff]="teleport_start",
[0x5da9aafbc2186bf3]="teleport_end",
[0x5ddccc87756403a3]="teleport_end",
[0x5e6158bc7d49614a]="teleport_end",
[0x5e886ed87e33f909]="teleport_end",
[0x5f312d3d0f0c6eae]="teleport_end",
[0x5f85059a607a8baf]="teleport_end",
[0x5f8a29b9c0a353c9]="teleport_end",
[0x601d35485fead528]="teleport_start",
[0x60502581ebe9dc66]="teleport_start",
[0x60999f5a316aa7d5]="teleport_start",
[0x60e55530124449ce]="teleport_start",
[0x60eb1ffd44b8b1cc]="teleport_end",
[0x6147b687d3112d78]="teleport_end",
[0x61f1a3cb9f6e0244]="teleport_start",
[0x61f37a9c9bc0fcae]="teleport_start",
[0x61f450a48d27f6c0]="teleport_start",
[0x621268170bce16cb]="teleport_end",
[0x621b786a5cd2a11b]="teleport_start",
[0x624277599f76db22]="teleport_start",
[0x624b55beea98ac8f]="teleport_end",
[0x62c389b4ec64246d]="teleport_start",
[0x631f38bc41d7eb86]="teleport_end",
[0x632ecb12aa6a517d]="teleport_start",
[0x633593497fd3a133]="teleport_end",
[0x6341ed2eb661f1c1]="teleport_end",
[0x6370cee641d9d4b0]="teleport_end",
[0x637585e303b51e16]="teleport_end",
[0x6384bd856f612324]="teleport_end",
[0x6470f630b3fc2549]="teleport_end",
[0x64b29a596305ba6b]="teleport_start",
[0x64b6486da77c4d38]="teleport_end",
[0x65039c04188c98a9]="teleport_end",
[0x65a72051b7d89157]="teleport_end",
[0x661696ab2ce8ddc5]="teleport_start",
[0x6617870f31d974e1]="teleport_end",
[0x66247b0e094bf684]="teleport_start",
[0x6637f9c40bc2d3f6]="teleport_end",
[0x664fb19d4a4203b9]="teleport_end",
[0x6667533a91763fe8]="teleport_start",
[0x6702ecaaa705e1fb]="teleport_start",
[0x6707afce322559a3]="teleport_end",
[0x676e1cea9f879db9]="teleport_start",
[0x67d90676c48268d5]="teleport_end",
[0x67fc78172e1cb520]="teleport_start",
[0x68113740266a3415]="teleport_end",
[0x681bbf4d6e26bf1c]="teleport_start",
[0x6826ce83af031305]="teleport_end",
[0x68593ee9fdcd5b4f]="teleport_end",
[0x688de86a5261045c]="teleport_end",
[0x68ab6a964c66411a]="teleport_start",
[0x68c6f2ab9a78e36c]="teleport_start",
[0x69444a23702224d0]="teleport_end",
[0x6954570f54c00f56]="teleport_end",
[0x695eabc9d1193bbb]="teleport_end",
[0x6977676d24632384]="teleport_end",
[0x69a3fc3edbf63622]="teleport_end",
[0x69c12055dbfa4059]="teleport_start",
[0x69c6df2b04478b4b]="teleport_start",
[0x69cca1d01f930173]="teleport_end",
[0x69e2e1fadf30de65]="teleport_end",
[0x6a16d3a44a855d58]="teleport_end",
[0x6a261cb96ac18ca7]="teleport_start",
[0x6a2b560e8d8ba589]="teleport_start",
[0x6a90588f78fab6e0]="teleport_end",
[0x6ae38fb0c302215e]="teleport_start",
[0x6b2060333415fb69]="teleport_start",
[0x6b27a9d5c130ca1f]="teleport_start",
[0x6b3ff067759f9f30]="teleport_end",
[0x6b4cadf996597b18]="teleport_end",
[0x6b59f61274990b4a]="teleport_end",
[0x6b62587f5220367a]="teleport_start",
[0x6b699ad4775a1c9b]="teleport_end",
[0x6b6f72229b37c784]="teleport_end",
[0x6b8cafe21b6d622a]="teleport_start",
[0x6bb4358ed6013e70]="teleport_end",
[0x6bc38ec861d89641]="teleport_end",
[0x6bde89fd3522eca0]="teleport_end",
[0x6bf4731bb7973468]="teleport_end",
[0x6c11ee9b28d9e467]="teleport_end",
[0x6c3bf279bebc84b6]="teleport_end",
[0x6c452e78378cf095]="teleport_start",
[0x6c82b87c5d09bd1b]="teleport_start",
[0x6cbce1a73907d597]="teleport_start",
[0x6d4e11c007662432]="teleport_start",
[0x6d5f1b29e1d1b9ca]="teleport_end",
[0x6e10aa5aea756922]="teleport_end",
[0x6e26aa97cd038349]="teleport_start",
[0x6e562c2cdb7cc211]="teleport_end",
[0x6e7aae7cd9d14d24]="teleport_start",
[0x6f212615360d421c]="teleport_start",
[0x6f6276b09f7dfd98]="teleport_end",
[0x6fd908b798d5a2f8]="teleport_end",
[0x7002e1c524f0e1a8]="teleport_end",
[0x70605dbddfd46285]="teleport_end",
[0x70826a672ed6995e]="teleport_end",
[0x70a8c54932abcf2d]="teleport_start",
[0x70da9e5ca6750f30]="teleport_end",
[0x7116b8c48b3d328f]="teleport_end",
[0x718877ea85443b17]="teleport_end",
[0x71abc8b39ca9a696]="teleport_start",
[0x71c11d5e3c05b82f]="teleport_start",
[0x71d99fe8fc2cb46a]="teleport_start",
[0x723980b2f4b912c0]="teleport_start",
[0x723ea38e8f0704e2]="teleport_end",
[0x72552ff2068ce9ee]="teleport_start",
[0x729e72d1ce357cf4]="teleport_end",
[0x72d63818ca8f2f02]="teleport_start",
[0x72df16f050990670]="teleport_start",
[0x72e90f7b636feb91]="teleport_end",
[0x73150e1be5c1f965]="teleport_end",
[0x733ebbf135950a07]="teleport_start",
[0x7354185c762f0137]="teleport_start",
[0x73ea70af0552bb51]="teleport_end",
[0x73fa1f77d4e1891c]="teleport_start",
[0x740f438e5e724584]="teleport_end",
[0x7435beb28c7e6b41]="teleport_end",
[0x74b14590cd274651]="teleport_end",
[0x74df9fea1400dd99]="teleport_end",
[0x74e21fc7d61e0c1e]="teleport_end",
[0x74ea419702c2e94b]="teleport_end",
[0x751aa50d594757ce]="teleport_end",
[0x752e3eb9089b26e2]="teleport_start",
[0x7548774409f6ecf6]="teleport_start",
[0x759d5bb0dac8814c]="teleport_end",
[0x75c3a746295178df]="teleport_start",
[0x75e42468a8c84a9d]="teleport_start",
[0x75fdf799c322812d]="teleport_end",
[0x7663ed765208e12f]="teleport_end",
[0x768629ee89946014]="teleport_end",
[0x769dec075050d97e]="teleport_end",
[0x76c38c6edb77b5c6]="teleport_end",
[0x76f1f75c71bf284c]="teleport_end",
[0x76fbeeb869619cf7]="teleport_end",
[0x770e830b9f5cefe6]="teleport_end",
[0x770f0de924ba7d7f]="teleport_end",
[0x773f2a6bd89314a1]="teleport_start",
[0x77c8160fd85b8422]="teleport_end",
[0x77dfd98558a3b929]="teleport_end",
[0x77edb8e359d7c1b3]="teleport_end",
[0x7820386a24ba689a]="teleport_end",
[0x782b9581b814b636]="teleport_start",
[0x78c3d313381968ad]="teleport_start",
[0x78f5595ef7850e38]="teleport_end",
[0x7900b4d6546eefd7]="teleport_start",
[0x79ca980fc0a04e23]="teleport_end",
[0x79ed8d9feec42a33]="teleport_end",
[0x7a39ff9acd691db8]="teleport_start",
[0x7a52f0e632babfb6]="teleport_start",
[0x7a57c31a77a4287e]="teleport_start",
[0x7ad5d155ab88292d]="teleport_end",
[0x7b5e84595d16073b]="teleport_end",
[0x7b6434178789b806]="teleport_end",
[0x7ba704b9f978bbe6]="teleport_start",
[0x7baffbce8a31c6c1]="teleport_end",
[0x7bb5dec071dded37]="teleport_start",
[0x7bc5b2c413f47772]="teleport_end",
[0x7cb862a01472eeda]="teleport_end",
[0x7cbaa1d466a7dab5]="teleport_start",
[0x7ccb72f32947cb3e]="teleport_end",
[0x7cee5b151a012464]="teleport_start",
[0x7d46b8c4048dcfb0]="teleport_end",
[0x7d667258c2febbcb]="teleport_end",
[0x7d74b5c0197e4dfe]="teleport_start",
[0x7da4cdc15ee50c8e]="teleport_end",
[0x7e36f505e294373e]="teleport_start",
[0x7e53c11e68dadeec]="teleport_end",
[0x7e54bbf51354c537]="teleport_start",
[0x7e7780b66f83ea75]="teleport_start",
[0x7e8dceaf149b2396]="teleport_start",
[0x7e9aeb0d1f1ea9a6]="teleport_end",
[0x7f1e53b5d3e45901]="teleport_start",
[0x7f2a5a124563e1d2]="teleport_end",
[0x7f81e695ff5507cd]="teleport_start",
[0x7fa41c46797707c6]="teleport_end",
[0x7fb1e87c293cbc10]="teleport_end",
[0x7fd7675f5c67dd5c]="teleport_start",
[0x800368f623ce64f6]="teleport_end",
[0x806dca3efd9818b7]="teleport_end",
[0x809c8c14fcf47014]="teleport_start",
[0x80b571d3014c347a]="teleport_end",
[0x80dbe4cee2d1a547]="teleport_start",
[0x80ea52bf17653fd2]="teleport_end",
[0x80f6fd388fa14293]="teleport_end",
[0x80fa1f82dfed631d]="teleport_end",
[0x8107d9c8fdfd195d]="teleport_end",
[0x81189319bee693c7]="teleport_end",
[0x8144b785c748aff5]="teleport_end",
[0x815faccfcd33b9d3]="teleport_end",
[0x816085faa9c49f86]="teleport_start",
[0x81eaba361faed6cc]="teleport_end",
[0x822b5ba6201829a2]="teleport_end",
[0x823bf7fb2b4384b1]="teleport_end",
[0x823c50e6c421c8e3]="teleport_end",
[0x8268c10e7e370d9a]="teleport_end",
[0x82c5f5cf4240c0fb]="teleport_start",
[0x8302940b265f54c9]="teleport_start",
[0x836fac610806335d]="teleport_end",
[0x838c4d4d5e92afc6]="teleport_start",
[0x838fc38ef79c6e13]="teleport_end",
[0x83b5cde8ea75d8de]="teleport_start",
[0x83b893553ef94538]="teleport_start",
[0x845ab4e5c68cc108]="teleport_end",
[0x85637b9b95c87bcf]="teleport_start",
[0x859f786f4e0943bb]="teleport_start",
[0x85fb132d50327a49]="teleport_end",
[0x8603ac5683492dad]="teleport_start",
[0x8670c20d6d7f2588]="teleport_end",
[0x86a57291224a7a36]="teleport_start",
[0x86a5c4288f64e817]="teleport_start",
[0x86e0384eebe0ad2f]="teleport_start",
[0x8733915db3a7647c]="teleport_start",
[0x875738bfb66ddb02]="teleport_start",
[0x8769e7bf62352620]="teleport_start",
[0x878b0b5fedc35d9f]="teleport_end",
[0x878fa17e763158a7]="teleport_end",
[0x87a56f4ebc6b2f4f]="teleport_start",
[0x87aac198d1bb2f40]="teleport_end",
[0x87bba1752609f313]="teleport_start",
[0x87fb58323d508073]="teleport_end",
[0x880e1890463ed845]="teleport_end",
[0x881e3ca53153424a]="teleport_end",
[0x8829858b4c7b35ee]="teleport_start",
[0x883da002bae641f2]="teleport_end",
[0x889252ee61fdbb45]="teleport_end",
[0x88abde0d12f11f40]="teleport_start",
[0x88ba52c69e93a7ea]="teleport_end",
[0x8912118f90155349]="teleport_start",
[0x891c22aa3655a286]="teleport_end",
[0x8937330d3fc427f0]="teleport_end",
[0x8937f6156f9b7eb7]="teleport_end",
[0x895af695f8412607]="teleport_start",
[0x89838180f9141c07]="teleport_end",
[0x8a06abbf30be0790]="teleport_end",
[0x8a0ca50a34d5e7a3]="teleport_start",
[0x8a5c464f5cb0296d]="teleport_start",
[0x8ab3a25a870743b6]="teleport_end",
[0x8aba42f2a1e1ef0d]="teleport_end",
[0x8ad6e01e928e13fb]="teleport_end",
[0x8b12085a99ad3c12]="teleport_end",
[0x8b354156456fe5ca]="teleport_end",
[0x8c0081de550a18a7]="teleport_end",
[0x8c0259c5d558240b]="teleport_start",
[0x8c45b58cb4e50338]="teleport_end",
[0x8c6d0663ad925946]="teleport_end",
[0x8c86bb7b82f2bb52]="teleport_start",
[0x8cf8060999b56f63]="teleport_end",
[0x8d58310b1b153a50]="teleport_end",
[0x8d5ef38c35ddf588]="teleport_start",
[0x8ddfdae4d0d7aae0]="teleport_start",
[0x8e78ee9cbdb03603]="teleport_end",
[0x8ec5258227199e90]="teleport_start",
[0x8ee485dc2ed28014]="teleport_end",
[0x8f432e0be6614329]="teleport_start",
[0x8f7c91d9b7c05b1d]="teleport_start",
[0x8f7f59ba411d1db6]="teleport_start",
[0x8fe64ac172ec970c]="teleport_start",
[0x9048b21cd5abac91]="teleport_start",
[0x9091c01a63d2b6ea]="teleport_end",
[0x909520bf7bf15726]="teleport_end",
[0x91306870d587b04c]="teleport_start",
[0x913d69a44065d5df]="teleport_start",
[0x915eb4bf169a89ea]="teleport_end",
[0x916aa22de3535a76]="teleport_start",
[0x9174b1b117fc200f]="teleport_end",
[0x917a1298362142b3]="teleport_end",
[0x91c94a689a79c754]="teleport_end",
[0x91cd3434438de1ae]="teleport_start",
[0x926f290d274319df]="teleport_start",
[0x929a5405ed93647f]="teleport_start",
[0x92c43e6a1e536bf4]="teleport_start",
[0x93f0d756c9d468bc]="teleport_start",
[0x94004b233e234d9e]="teleport_start",
[0x94878c06fcf23e43]="teleport_start",
[0x94d68dcedc0aa83c]="teleport_start",
[0x94d740ffcd8fee7b]="teleport_end",
[0x954a7aa836305724]="teleport_end",
[0x954cf9c471d43f2e]="teleport_end",
[0x955c6da43163dc88]="teleport_start",
[0x958beb48759d3a8f]="teleport_end",
[0x9595e0401e531984]="teleport_start",
[0x95b3670216bb20b2]="teleport_end",
[0x963a9052be2b5dde]="teleport_start",
[0x966f7e8f915c8975]="teleport_start",
[0x96a5c9879361cc78]="teleport_start",
[0x96c0330f22737e83]="teleport_end",
[0x976567b6f44d443c]="teleport_end",
[0x97a3b5546ce6f293]="teleport_start",
[0x97dd22b3e942c0cc]="teleport_start",
[0x97df49ecfdddd540]="teleport_start",
[0x983554d0e34942a6]="teleport_start",
[0x985363c876e8e222]="teleport_end",
[0x987d2c6233f694c4]="teleport_start",
[0x98915b853b3d1dfe]="teleport_end",
[0x98bab8cbb545113e]="teleport_start",
[0x998468d4e3d30b69]="teleport_start",
[0x999f96466aaf73ef]="teleport_end",
[0x99d1a08050c3fc9e]="teleport_end",
[0x99e18178050cdb5d]="teleport_start",
[0x9a0bb6c82953971d]="teleport_start",
[0x9a67f54e5851a757]="teleport_end",
[0x9adec4673b9f415d]="teleport_start",
[0x9b750e51fae5ae78]="teleport_end",
[0x9bc52a593e2b89ca]="teleport_end",
[0x9bd0099aae73eaba]="teleport_end",
[0x9cbf10bfd384a9cd]="teleport_end",
[0x9ccf609492679a38]="teleport_start",
[0x9cdd0cee9952ff34]="teleport_end",
[0x9cde952d67d8777b]="teleport_start",
[0x9d4e1d03f9cd227f]="teleport_start",
[0x9dc96cf2af7a1a51]="teleport_start",
[0x9e0ec7589f1231b8]="teleport_end",
[0x9e27c29e7383670e]="teleport_end",
[0x9e3c277751a4dde7]="teleport_start",
[0x9e8835ffb828db4f]="teleport_start",
[0x9ea5c6a8c661abaa]="teleport_start",
[0x9ede4d471c5a4982]="teleport_end",
[0x9f3793e20dfda36a]="teleport_end",
[0xa01171fb2bdb99a9]="teleport_start",
[0xa012fae8c3c04da2]="teleport_start",
[0xa028cca0b7650335]="teleport_end",
[0xa02fe570fe986f3d]="teleport_end",
[0xa04067b274573f4c]="teleport_end",
[0xa07121483f6f1c7c]="teleport_end",
[0xa07be16fa718d76e]="teleport_end",
[0xa0a37a384eb2f2ca]="teleport_start",
[0xa13ca9b3a525b637]="teleport_end",
[0xa1984f1717304def]="teleport_start",
[0xa199a7905f34357f]="teleport_end",
[0xa19d108aa85bdd1a]="teleport_end",
[0xa1dd36b4ac87f27d]="teleport_end",
[0xa1ef365454bbd82d]="teleport_end",
[0xa21c41cdcdc9c64b]="teleport_start",
[0xa26e63eaecc0f08e]="teleport_start",
[0xa2efee4c8cc13f44]="teleport_start",
[0xa2f5cff64a242a86]="teleport_start",
[0xa3ba20bf75ea8d67]="teleport_end",
[0xa41c47509843dc07]="teleport_start",
[0xa41f1f822edd5e35]="teleport_end",
[0xa433add5bd2bd014]="teleport_start",
[0xa45bc890c67db1ec]="teleport_end",
[0xa47088417f923e32]="teleport_end",
[0xa4736263e753c543]="teleport_end",
[0xa4af4f4b24e2fbf9]="teleport_start",
[0xa4b35d59b6aea4b9]="teleport_end",
[0xa4e4637505b2d540]="teleport_end",
[0xa522086eaa4eb283]="teleport_start",
[0xa556a257b446f563]="teleport_end",
[0xa5bc5df10eb8224b]="teleport_start",
[0xa5cca4ec8dd0f99d]="teleport_start",
[0xa5cec2602e6d3dd4]="teleport_start",
[0xa66cfe16b4587634]="teleport_end",
[0xa6b6b6a420e3ebfa]="teleport_end",
[0xa6bbcebefa940282]="teleport_start",
[0xa6db19f3e1d84ebb]="teleport_end",
[0xa7422c1b3b75df28]="teleport_end",
[0xa814df40487f4b4b]="teleport_end",
[0xa82518f0592b3147]="teleport_end",
[0xa8bd1c51aee23ee0]="teleport_start",
[0xa93cb6e9614131d9]="teleport_end",
[0xa9b571f618c086f5]="teleport_end",
[0xa9cff646a7b15b04]="teleport_end",
[0xa9ed7c29334dc39d]="teleport_end",
[0xaa0f6814a55be458]="teleport_end",
[0xaa30046bae87e545]="teleport_end",
[0xaa53d4bbcd70e5ed]="teleport_start",
[0xaa658d933b0597bc]="teleport_end",
[0xac05407da372da4f]="teleport_end",
[0xac08aa3d19d05ab5]="teleport_start",
[0xac2835aa9f65415c]="teleport_end",
[0xac5a504d5868adb3]="teleport_start",
[0xad0d866b3b8b86c4]="teleport_start",
[0xad475e02a2e0effd]="teleport_end",
[0xad9187a4a4176447]="teleport_end",
[0xadaf22c4345950be]="teleport_end",
[0xae10e933b5a5596f]="teleport_start",
[0xae19df0f84730bcc]="teleport_end",
[0xaecc8af68324c61c]="teleport_end",
[0xaf02d1226c78bc1b]="teleport_end",
[0xaf0fd501a840716c]="teleport_end",
[0xaf3c016875aa43e6]="teleport_end",
[0xaf61fbba46fe4d6c]="teleport_start",
[0xaf81c2cef15f8493]="teleport_start",
[0xb05a09bbf109350a]="teleport_end",
[0xb09a123525c13887]="teleport_start",
[0xb0ab386fc5f33f06]="teleport_start",
[0xb1233283d55a6397]="teleport_start",
[0xb18d03a345541c24]="teleport_end",
[0xb19d9cf110270483]="teleport_end",
[0xb2309b37a60875d7]="teleport_start",
[0xb2a37280dd899193]="teleport_start",
[0xb2e52ba49c396d56]="teleport_start",
[0xb33a5d723b924f61]="teleport_end",
[0xb34d591368d1d11b]="teleport_end",
[0xb3e0822df633fad1]="teleport_start",
[0xb41c04245e3fdc4a]="teleport_start",
[0xb4498cfbcc82b0f6]="teleport_end",
[0xb466737f169017bf]="teleport_end",
[0xb4bc9c9f8b948963]="teleport_end",
[0xb4d0ffa9f723cd3d]="teleport_end",
[0xb575231db433f849]="teleport_start",
[0xb5ab25f129032513]="teleport_end",
[0xb64c3dcc94019026]="teleport_end",
[0xb675b4ce1610a776]="teleport_start",
[0xb69af63ed90fa658]="teleport_start",
[0xb7ce89a5be059cb3]="teleport_end",
[0xb7e480c031a38461]="teleport_end",
[0xb82df39e1824eae5]="teleport_start",
[0xb8523a77b68d8d11]="teleport_start",
[0xb8c875387751ac4e]="teleport_start",
[0xb90cde79833ce484]="teleport_end",
[0xb96a28045a8534bb]="teleport_start",
[0xb971e288c5d09978]="teleport_end",
[0xb98018efaabd6824]="teleport_start",
[0xb99ca4edcc56cdac]="teleport_start",
[0xb9a208f86d4582ec]="teleport_start",
[0xb9affe284507751c]="teleport_start",
[0xb9cd034f87f33759]="teleport_end",
[0xbb94bbaa3ca4d365]="teleport_end",
[0xbbd06b7cab03dfa0]="teleport_start",
[0xbbd17794295ba41d]="teleport_end",
[0xbbf5f52c843055c0]="teleport_start",
[0xbc37eba80b631f11]="teleport_start",
[0xbce4f413d30929be]="teleport_end",
[0xbd3f89a209041491]="teleport_start",
[0xbd455f79023db531]="teleport_end",
[0xbdc915b5c870f141]="teleport_start",
[0xbe51c44879a38a1d]="teleport_end",
[0xbea4c75c43d2abfa]="teleport_start",
[0xbf185108b989f1da]="teleport_end",
[0xbf95b6369e25b1e1]="teleport_end",
[0xbff40d53259b2fdc]="teleport_start",
[0xc0351bf4dd09e8cc]="teleport_start",
[0xc0c79d17c2f0f606]="teleport_end",
[0xc0d8a6524abe89bd]="teleport_end",
[0xc1ce187ee86ede4c]="teleport_start",
[0xc1d009c21add8316]="teleport_start",
[0xc20f62bb735abd26]="teleport_start",
[0xc2977779d71f3132]="teleport_start",
[0xc298d96e2e2b3ed9]="teleport_end",
[0xc2d420f28a307c21]="teleport_end",
[0xc30c095a6e662969]="teleport_end",
[0xc313b1ccf6ee3213]="teleport_end",
[0xc378cf0e29e668cc]="teleport_end",
[0xc4129e029edbb3fa]="teleport_end",
[0xc428a5801540b9c0]="teleport_end",
[0xc43f59fc684e405e]="teleport_start",
[0xc4ca622d8eeaef7c]="teleport_start",
[0xc55c16d69fc7b6d3]="smoke_of_deceit",
[0xc5a67bc9ff2e8128]="teleport_start",
[0xc644dae69bc986c3]="teleport_end",
[0xc6c7ffece80b785a]="teleport_start",
[0xc6fa533613044d9f]="teleport_end",
[0xc82a7f1e2b669088]="teleport_end",
[0xc847db3f0f565765]="teleport_start",
[0xc86446e50a99b8eb]="teleport_end",
[0xc881d58024830d68]="teleport_start",
[0xc8ac9cdff4a88291]="teleport_start",
[0xc8d546bdb4b84916]="teleport_end",
[0xc92d5e1dda6741c4]="teleport_start",
[0xc950ddcbe4dc531f]="teleport_start",
[0xc997138fda82e630]="teleport_end",
[0xc9f777ade469c11e]="teleport_start",
[0xca0199e5ea448460]="teleport_end",
[0xca376c8ec583b86c]="teleport_end",
[0xca847821c5cbc6a6]="teleport_end",
[0xca8bb42ee4ea2b98]="teleport_end",
[0xca8e975dea6618c5]="teleport_start",
[0xcab192c7319695bc]="teleport_end",
[0xcb01c7da312f78dc]="teleport_end",
[0xcb0e89743455a611]="teleport_end",
[0xcb28a26d2a8a15d2]="teleport_end",
[0xcb5107be6e8aaf44]="teleport_start",
[0xcb723a61a1722fb1]="teleport_end",
[0xcba83533f44c064d]="teleport_start",
[0xcbc6c90b3b45c16d]="teleport_end",
[0xcbca78e1418b97b1]="teleport_end",
[0xcbe09258d797ed23]="teleport_end",
[0xcbf437f97fddbaac]="teleport_start",
[0xcc14aa7e4ef8a446]="teleport_start",
[0xcc77c7d3c7593157]="teleport_end",
[0xcc7e0f6343e70dc8]="teleport_end",
[0xcc9b04816b2389fa]="teleport_end",
[0xccdd02e4d9792171]="teleport_end",
[0xcd1340bdae305ba9]="teleport_end",
[0xcd32e0134fa04735]="teleport_end",
[0xcd47122d5c461728]="teleport_end",
[0xcd82d66df021ea95]="teleport_end",
[0xcde0393acc932408]="teleport_start",
[0xcdf5c3c4aeee261b]="teleport_end",
[0xce28bb88365056ec]="teleport_end",
[0xce291d518b393d7a]="teleport_end",
[0xce4e1bc731539cac]="teleport_start",
[0xce540bd47b797594]="teleport_start",
[0xce57382a3d6c2da9]="teleport_start",
[0xce6cab779b42ed66]="teleport_start",
[0xce97abe378b89b38]="teleport_start",
[0xcf1bcb87bb981bcb]="teleport_start",
[0xcf69f2d3dc94c571]="teleport_end",
[0xcf9b640607356e8b]="teleport_start",
[0xd00cb841c6994a66]="teleport_start",
[0xd01e126c93fa526a]="teleport_start",
[0xd09533fc18027899]="teleport_end",
[0xd0a2e48da1696063]="teleport_start",
[0xd1886469611b7661]="teleport_end",
[0xd18c81bb1f863e64]="teleport_end",
[0xd19bad8f9eca5c99]="teleport_end",
[0xd1b6b5064cb11eeb]="teleport_end",
[0xd1e0849fe588b25e]="teleport_end",
[0xd1ed2eb1f40b1f5e]="teleport_end",
[0xd208c8da99f4d4b0]="teleport_start",
[0xd2a0a31e5f493390]="teleport_start",
[0xd2e706f45873a7dc]="teleport_start",
[0xd2fa3637b5cdb9c4]="teleport_start",
[0xd32c6c232e32794a]="teleport_start",
[0xd335bf5c62564326]="teleport_end",
[0xd3857afd6ce7b0cd]="teleport_end",
[0xd3e804bc9435087e]="teleport_end",
[0xd40fabb82a0ac8ce]="teleport_end",
[0xd41f1244a51ddf4f]="teleport_end",
[0xd4be2b452d20d133]="teleport_start",
[0xd4c317455090d5db]="teleport_end",
[0xd4ccc1f004f33570]="teleport_end",
[0xd4f55d5568228a60]="teleport_end",
[0xd52f9f0131865d58]="teleport_end",
[0xd559fd9f84de58e2]="teleport_end",
[0xd57add07d44527ae]="teleport_start",
[0xd5d4438182bcb4ad]="teleport_end",
[0xd6283c9c86a490a1]="teleport_end",
[0xd643ae382adb732a]="teleport_end",
[0xd64406070da9d6bf]="teleport_end",
[0xd6667cc197c6c481]="teleport_start",
[0xd69aa4f5e36a43ee]="teleport_end",
[0xd6bd973c60a3e5a2]="teleport_end",
[0xd729660c77a76476]="teleport_end",
[0xd7466ea1e1e47faa]="teleport_start",
[0xd7ba260b6be2d58e]="teleport_end",
[0xd7c5a0dd1e4d0293]="teleport_start",
[0xd802b0b712796afa]="teleport_start",
[0xd81c7412c3a8f9f0]="teleport_end",
[0xd86f722bbb57b0d3]="teleport_end",
[0xd87b022622a58541]="teleport_end",
[0xd8a10f5d8c6c89a1]="teleport_start",
[0xd8fb59dfbbe2aead]="teleport_end",
[0xd98f08a712eeaf91]="teleport_start",
[0xd9c62278b9ab528a]="teleport_start",
[0xd9ed174ada366596]="teleport_start",
[0xd9f2795751540803]="teleport_end",
[0xdae9293ca7e28edc]="teleport_end",
[0xdb0f8049e92f01fd]="teleport_end",
[0xdc07364572f2cb0f]="teleport_start",
[0xdc2f101fb6d56528]="teleport_end",
[0xdc65a54362231146]="teleport_end",
[0xdc702a6b907eb9d2]="teleport_end",
[0xdcbdbc93bc68a6d9]="teleport_start",
[0xdcde7af13f55d81c]="teleport_start",
[0xddbdcb59d39b07fa]="teleport_end",
[0xddf4b52fa706a763]="teleport_start",
[0xde0a61bafb72828e]="teleport_end",
[0xde3d7b1bb75d59a7]="teleport_end",
[0xdeb051265583b201]="teleport_start",
[0xdef6c4ffc5981fa4]="teleport_end",
[0xdf274cfeb5b3549e]="teleport_end",
[0xdf468e791418c88c]="teleport_start",
[0xdf6123690083cf48]="teleport_end",
[0xdf6bc48fdb09a25e]="teleport_start",
[0xdf6c00923f81dd44]="teleport_start",
[0xdf852fd56bf2a1c6]="teleport_start",
[0xdfc3403a5fd7a056]="teleport_start",
[0xe00a5e387b5d4db0]="teleport_start",
[0xe013f4335cc5d44a]="teleport_start",
[0xe0141b71f5db1817]="teleport_end",
[0xe050ab1b21077c74]="teleport_start",
[0xe066d34fc7406819]="teleport_start",
[0xe07048b27c636d6e]="teleport_end",
[0xe083fc396839d938]="teleport_start",
[0xe0a113ac86d1c82f]="teleport_end",
[0xe0ecfcf17f89d26c]="teleport_end",
[0xe0f70e1b18fa38fa]="teleport_start",
[0xe0f809acfdfbd742]="teleport_end",
[0xe10064245fa449ec]="teleport_start",
[0xe106a57330874e84]="teleport_start",
[0xe1146f15100859e8]="teleport_start",
[0xe126ade19c1b81a8]="teleport_end",
[0xe1957a00b8253fa5]="teleport_end",
[0xe1ce7cf965f146a2]="teleport_end",
[0xe20be3b9ef799e85]="teleport_end",
[0xe28b5662ab7eb7c9]="teleport_end",
[0xe3062a88973f4f01]="teleport_start",
[0xe30c1194448573ba]="teleport_start",
[0xe3478d7f937c0d21]="teleport_end",
[0xe39fb452efba14b1]="teleport_end",
[0xe3e1d6dea8d659d6]="teleport_start",
[0xe498706a7107b850]="teleport_start",
[0xe4c02714b00ec11b]="teleport_end",
[0xe4fe87dd3994c64c]="teleport_start",
[0xe520e95cfffd3c25]="teleport_end",
[0xe58b8ca9690700d8]="teleport_end",
[0xe5d3b3144ad5fc05]="teleport_start",
[0xe5eaf98990b79fe8]="teleport_end",
[0xe60c6b544708240d]="teleport_start",
[0xe614f0ab897b558c]="teleport_start",
[0xe62fad6cc233b9e6]="teleport_end",
[0xe63c0d90e5dafb79]="teleport_start",
[0xe670235d9744bc79]="teleport_end",
[0xe691cacfbb544d1b]="teleport_start",
[0xe6961793fc449db9]="teleport_end",
[0xe6be21b36ebf5504]="teleport_end",
[0xe6deee0a0a003d1a]="teleport_start",
[0xe6e48c872f6a1c8f]="teleport_end",
[0xe6e7a74bded998bf]="teleport_end",
[0xe722dce6996d4ef9]="teleport_end",
[0xe7bfcabd4d86933d]="teleport_end",
[0xe7fb44fd2b9e2481]="teleport_end",
[0xe80c88068fad2449]="teleport_start",
[0xe853e2dcf81f25b5]="teleport_end",
[0xe8b12ad98f85c9bc]="teleport_start",
[0xe8b99b485c9b0d53]="teleport_end",
[0xe96c390ce0061d68]="teleport_start",
[0xe972e5ad7befdf0e]="teleport_end",
[0xe9855ee6c3b6bd18]="teleport_start",
[0xe9b42b4a933d2ea1]="teleport_end",
[0xe9be6c95024eb23b]="teleport_end",
[0xe9d11a05db308cb4]="teleport_start",
[0xea129e6632118eac]="teleport_end",
[0xea2ebe5a4fad8f64]="teleport_start",
[0xea4e5747f29ece10]="teleport_start",
[0xea561b66f497b386]="teleport_start",
[0xea5dbe7d6ac64bbb]="teleport_end",
[0xea78a8b2256869ce]="teleport_end",
[0xea9dba17e5621658]="teleport_end",
[0xeab2951306dff1fa]="teleport_end",
[0xeab7f4df8a974a78]="teleport_end",
[0xeadb6545010463a2]="teleport_start",
[0xeb0331e4c60031af]="teleport_end",
[0xeb6e332c157a6ea4]="teleport_end",
[0xeb90d820e9c81998]="teleport_end",
[0xebc6ada1570a2e7a]="teleport_end",
[0xec13588d67b764e9]="teleport_end",
[0xec49819720427af0]="teleport_end",
[0xeca4e08308601f2d]="teleport_start",
[0xed0feb3f0544de62]="teleport_start",
[0xed282e2f05bbaac3]="teleport_end",
[0xed4fd8a16dcec0e2]="teleport_end",
[0xede12056573f41b7]="teleport_end",
[0xede58344e38b5386]="teleport_end",
[0xee2ee266dd78a311]="teleport_end",
[0xee57932056b4553d]="teleport_start",
[0xee5b953a871c06c8]="teleport_end",
[0xee6244d82fd3bcdb]="teleport_end",
[0xeea8e8db4624b478]="teleport_start",
[0xeeaf576bf1186f80]="teleport_end",
[0xeec0b91ddbf5d76b]="teleport_end",
[0xeeea0f5162e2c608]="teleport_start",
[0xeef19703434d466f]="teleport_start",
[0xef1c440cf4dee2e9]="teleport_end",
[0xef35070221df1729]="teleport_end",
[0xef4136d2430e9707]="teleport_end",
[0xf025a64283a8ceca]="teleport_end",
[0xf090cecdf27557e1]="teleport_end",
[0xf0dc618988dbeb6d]="teleport_end",
[0xf153928fb25ef375]="teleport_end",
[0xf15e4d309ea9faa8]="teleport_end",
[0xf1a44c36149eaed2]="teleport_end",
[0xf1fde6c2c9404386]="teleport_start",
[0xf20a6b6d1384b656]="teleport_end",
[0xf212614b9b635924]="teleport_end",
[0xf22d5302a8b7987b]="teleport_end",
[0xf27be89c0cba765e]="teleport_start",
[0xf2d84861980916d9]="teleport_end",
[0xf2da55d8c25e95d1]="teleport_start",
[0xf37db035698ff869]="teleport_start",
[0xf3c18964c1fc0b20]="teleport_start",
[0xf3f2d85b5e0f1ddf]="teleport_start",
[0xf4ca2ed7e14a5603]="teleport_end",
[0xf4e51fb2982e463c]="teleport_start",
[0xf5a640dc8ef557f8]="teleport_end",
[0xf5f70ff2b699be49]="teleport_end",
[0xf65145b80a7e837f]="teleport_end",
[0xf68466b4a2fecd7b]="teleport_start",
[0xf690357b1aac3f5e]="teleport_start",
[0xf7817122f4f90180]="teleport_start",
[0xf7b72976ac831f40]="teleport_start",
[0xf7e0fa31ca60ef9d]="teleport_end",
[0xf8202e3689bbc6e3]="teleport_end",
[0xf828eb627e6166d6]="teleport_end",
[0xf840bed4256d2d16]="teleport_start",
[0xf85e99cbf854a6e0]="teleport_end",
[0xf864d02e9bc2f978]="teleport_start",
[0xf8a1c181f111ba56]="teleport_end",
[0xf8cb40d67703521b]="teleport_start",
[0xf910eda2a340ba24]="teleport_start",
[0xf91410934c240553]="teleport_end",
[0xf91f404d190dfb2b]="teleport_end",
[0xf9264ef3ae478154]="teleport_end",
[0xf9362955ed7c048b]="teleport_start",
[0xfa09b07493de5437]="teleport_end",
[0xfa39dfa7e3849bcd]="teleport_end",
[0xfa6bcdeb397ed1c5]="teleport_start",
[0xfb2197526294fe79]="teleport_end",
[0xfb2cd77a2cc4a00b]="teleport_start",
[0xfb406a3f1c972f4d]="teleport_start",
[0xfb849d06ad1ab2eb]="teleport_start",
[0xfbb3886afc764595]="teleport_end",
[0xfc10bc9d58f23c19]="teleport_start",
[0xfc78c5fcd601c26d]="teleport_end",
[0xfcc29faa86a3389d]="teleport_start",
[0xfd0d14bfe0405607]="teleport_start",
[0xfd19781432004668]="teleport_start",
[0xfd21e53bb6f2aa4e]="teleport_start",
[0xfd4cbea1e4e80310]="teleport_end",
[0xfd53d05a09228521]="teleport_end",
[0xfd5c5bb6edd8b6b8]="teleport_end",
[0xfd633011015393eb]="teleport_start",
[0xfd6547c9425f6220]="teleport_start",
[0xfe0f93d0b51804fa]="teleport_end",
[0xfe3e916b440abe11]="teleport_end",
[0xfe42d9da877bc924]="teleport_start",
[0xfe7b899777a379d5]="teleport_end",
[0xfeacec2febc56d34]="teleport_start",
[0xff53225195bc5f63]="teleport_start",
[0xffa8144e3a22f89b]="teleport_start",
[0xffd2c76b4d0d7757]="teleport_start",
[0xffe607b4b7c78f54]="teleport_end",
[0xffefd7ac7b1c7e58]="teleport_start",
[0xfff5a134b62e7bd0]="teleport_start",
}
data/cast_particles.lua920 行
-- generated by tools/fog_casts/gen_casts.py from fog_particles.json, do not edit.
-- particle hash -> hero index (negative: the spell can land away from him, so only a
-- control point bound to the hero himself places him). 788 particles, 123 heroes.
local H = {
"npc_dota_hero_abaddon",
"npc_dota_hero_abyssal_underlord",
"npc_dota_hero_alchemist",
"npc_dota_hero_ancient_apparition",
"npc_dota_hero_antimage",
"npc_dota_hero_arc_warden",
"npc_dota_hero_axe",
"npc_dota_hero_bane",
"npc_dota_hero_batrider",
"npc_dota_hero_beastmaster",
"npc_dota_hero_bloodseeker",
"npc_dota_hero_bounty_hunter",
"npc_dota_hero_brewmaster",
"npc_dota_hero_bristleback",
"npc_dota_hero_broodmother",
"npc_dota_hero_centaur",
"npc_dota_hero_chaos_knight",
"npc_dota_hero_chen",
"npc_dota_hero_clinkz",
"npc_dota_hero_crystal_maiden",
"npc_dota_hero_dark_seer",
"npc_dota_hero_dark_willow",
"npc_dota_hero_dawnbreaker",
"npc_dota_hero_dazzle",
"npc_dota_hero_death_prophet",
"npc_dota_hero_disruptor",
"npc_dota_hero_doom_bringer",
"npc_dota_hero_dragon_knight",
"npc_dota_hero_drow_ranger",
"npc_dota_hero_earth_spirit",
"npc_dota_hero_earthshaker",
"npc_dota_hero_elder_titan",
"npc_dota_hero_ember_spirit",
"npc_dota_hero_enchantress",
"npc_dota_hero_enigma",
"npc_dota_hero_faceless_void",
"npc_dota_hero_furion",
"npc_dota_hero_grimstroke",
"npc_dota_hero_gyrocopter",
"npc_dota_hero_hoodwink",
"npc_dota_hero_huskar",
"npc_dota_hero_invoker",
"npc_dota_hero_jakiro",
"npc_dota_hero_juggernaut",
"npc_dota_hero_keeper_of_the_light",
"npc_dota_hero_kez",
"npc_dota_hero_kunkka",
"npc_dota_hero_largo",
"npc_dota_hero_legion_commander",
"npc_dota_hero_leshrac",
"npc_dota_hero_lich",
"npc_dota_hero_life_stealer",
"npc_dota_hero_lina",
"npc_dota_hero_lion",
"npc_dota_hero_lone_druid",
"npc_dota_hero_luna",
"npc_dota_hero_lycan",
"npc_dota_hero_magnataur",
"npc_dota_hero_marci",
"npc_dota_hero_mars",
"npc_dota_hero_medusa",
"npc_dota_hero_meepo",
"npc_dota_hero_mirana",
"npc_dota_hero_monkey_king",
"npc_dota_hero_morphling",
"npc_dota_hero_muerta",
"npc_dota_hero_naga_siren",
"npc_dota_hero_necrolyte",
"npc_dota_hero_nevermore",
"npc_dota_hero_night_stalker",
"npc_dota_hero_nyx_assassin",
"npc_dota_hero_obsidian_destroyer",
"npc_dota_hero_ogre_magi",
"npc_dota_hero_omniknight",
"npc_dota_hero_oracle",
"npc_dota_hero_pangolier",
"npc_dota_hero_phantom_assassin",
"npc_dota_hero_phantom_lancer",
"npc_dota_hero_phoenix",
"npc_dota_hero_primal_beast",
"npc_dota_hero_puck",
"npc_dota_hero_pudge",
"npc_dota_hero_queenofpain",
"npc_dota_hero_rattletrap",
"npc_dota_hero_razor",
"npc_dota_hero_riki",
"npc_dota_hero_ringmaster",
"npc_dota_hero_rubick",
"npc_dota_hero_sand_king",
"npc_dota_hero_shadow_demon",
"npc_dota_hero_shadow_shaman",
"npc_dota_hero_shredder",
"npc_dota_hero_silencer",
"npc_dota_hero_skywrath_mage",
"npc_dota_hero_slardar",
"npc_dota_hero_slark",
"npc_dota_hero_snapfire",
"npc_dota_hero_sniper",
"npc_dota_hero_spectre",
"npc_dota_hero_spirit_breaker",
"npc_dota_hero_storm_spirit",
"npc_dota_hero_sven",
"npc_dota_hero_techies",
"npc_dota_hero_templar_assassin",
"npc_dota_hero_terrorblade",
"npc_dota_hero_tidehunter",
"npc_dota_hero_tinker",
"npc_dota_hero_treant",
"npc_dota_hero_tusk",
"npc_dota_hero_undying",
"npc_dota_hero_ursa",
"npc_dota_hero_vengefulspirit",
"npc_dota_hero_venomancer",
"npc_dota_hero_viper",
"npc_dota_hero_visage",
"npc_dota_hero_void_spirit",
"npc_dota_hero_warlock",
"npc_dota_hero_weaver",
"npc_dota_hero_windrunner",
"npc_dota_hero_winter_wyvern",
"npc_dota_hero_wisp",
"npc_dota_hero_witch_doctor",
"npc_dota_hero_zuus",
}
local P = {
[0x00551789ba47390c]=57,
[0x00a30144d4802358]=-57,
[0x00c30c138d95fbdc]=89,
[0x0107f39531941a16]=115,
[0x011af119e025f71e]=-94,
[0x01269a941da1c96d]=66,
[0x01419df1d12ba296]=-47,
[0x0150ff285902691a]=-92,
[0x0234dfc218ee714b]=59,
[0x0262802bddc1c7b5]=46,
[0x02758451eaeb9774]=102,
[0x0305d260f7b3a9e2]=48,
[0x033e624905bdf233]=116,
[0x03486f4f12bf0978]=116,
[0x03ecd971cba950c7]=13,
[0x04a547d7004000e2]=86,
[0x04d4caa121721095]=-23,
[0x05904bee34a2cbe5]=-98,
[0x063ad98fc99c49ab]=22,
[0x0660423d9c00ea00]=46,
[0x06fe829cd2a06b23]=116,
[0x080dfd050a34221b]=107,
[0x082f43a1cf8e963f]=7,
[0x0889a6a1706ea28b]=-4,
[0x08ae6af4a2777927]=21,
[0x0a21464a780b3679]=-15,
[0x0b002158c8e0d32e]=120,
[0x0bcae9e6025eef08]=47,
[0x0c6f620cf2c74f65]=97,
[0x0d17e3e8bb46426e]=44,
[0x0d4c55fc6d0550c6]=-18,
[0x0d99c1147bf936ce]=-30,
[0x0dc0fd07904bae6c]=90,
[0x0e28fc16abfe6c42]=110,
[0x0eab15ccb51ef5f7]=82,
[0x0f6410b915beb409]=75,
[0x10c82c9580f2ab6c]=73,
[0x10cc52201dadda0a]=55,
[0x114f7beedfd7974b]=72,
[0x116763a96dba716e]=13,
[0x11d6e8c884e2c022]=25,
[0x11e4c3af02bb9fdc]=45,
[0x11e62de58adc75f6]=26,
[0x124809b2df71c3f5]=59,
[0x126374d7409bc447]=106,
[0x135f44c36634d185]=84,
[0x14245074acc57679]=92,
[0x1433ae5a95014144]=119,
[0x144fe848d9d5623c]=10,
[0x14f86f609165f4a3]=109,
[0x15b14e81e5d4bce9]=36,
[0x15ba5bd9ababccbb]=87,
[0x162afaf3f6df3251]=92,
[0x163f89649667b70e]=-74,
[0x16ad5d969c00782e]=40,
[0x16e30a1f4b6c475c]=-99,
[0x1724ff5297e4e906]=70,
[0x17afb9d7307c4d03]=44,
[0x17ca95163c7cbc87]=52,
[0x17f4a3d73b9d8c1f]=-38,
[0x18293876c89f6fc5]=120,
[0x1830f3e7b2e3818b]=97,
[0x1831050b8c944a7f]=46,
[0x18b772d992621b46]=55,
[0x190a733b098c390e]=-79,
[0x190ae22d5e7a4f77]=12,
[0x192a39726c9e651f]=5,
[0x19528b7f1c63409c]=115,
[0x195e1632a19b2ec0]=115,
[0x199854b2a974b389]=-37,
[0x1bb3e7ef8ca9ff22]=6,
[0x1bba2277207d5580]=71,
[0x1bd5a429c6e14417]=59,
[0x1c0392d1823cc854]=49,
[0x1c32d0dccac0a784]=49,
[0x1c47e58c071fdbc0]=15,
[0x1ccb2de95c6162e9]=48,
[0x1d9e5f1bcd83a5e7]=98,
[0x1e497d1a65322629]=60,
[0x1e75d35e97b55979]=18,
[0x1e76188d9c1360a0]=31,
[0x1e9f544575622429]=117,
[0x1f15799175e6891e]=30,
[0x1fee10e0b3391563]=87,
[0x2068d063f9c78589]=22,
[0x20783289d1c3202a]=47,
[0x20e5a01b638ef65f]=-109,
[0x20f4216b30a06bd2]=-40,
[0x216a3434431073bb]=56,
[0x219a319803f8135a]=105,
[0x21a20e62732defc9]=30,
[0x21a837c3f061b6e9]=58,
[0x22ab5199c44ab35d]=45,
[0x22c0a1f6741b88ff]=104,
[0x22d18e013c48da2d]=29,
[0x22dece9b9dfb4c2b]=49,
[0x22f49dd693edd24b]=88,
[0x22f4c08a02b455f1]=113,
[0x23434ab402b1d1e3]=44,
[0x239c06d094369294]=-79,
[0x23ecb63867c80a2f]=97,
[0x24a7a4f29c522ddc]=106,
[0x25a12813fe9af6eb]=109,
[0x25b90ed1f23315ec]=23,
[0x26108c0da9f3e74d]=86,
[0x26996fa0122b118f]=24,
[0x26a8951fec284421]=79,
[0x26e011b896a67f40]=108,
[0x26ebb8069ae2697d]=-22,
[0x26f04589a586b222]=34,
[0x274bb97c52424dfc]=38,
[0x2755502f852b88ee]=54,
[0x27f11b6f09e7211b]=-81,
[0x2812e98c551833ba]=65,
[0x28b9823c3c77a4e8]=71,
[0x28d0bf4869a4e803]=45,
[0x28f73e6a32226ca4]=104,
[0x29808a191e2073fc]=86,
[0x29927e1ed2f80d41]=117,
[0x29c426cfd469cda4]=28,
[0x29ec90d8fc969827]=25,
[0x2a42374bee457f24]=13,
[0x2a4c726d9afca1a1]=13,
[0x2a678680a97c69f0]=81,
[0x2a7120004027afa6]=86,
[0x2b0364c0a458bc4c]=90,
[0x2b3d0d6b159f117f]=88,
[0x2b64e7385f3326ca]=75,
[0x2ba0d5830bc61c4f]=52,
[0x2c9a3b328aef275d]=93,
[0x2cfed8c51a0cbc55]=109,
[0x2d73ec717a67bb9d]=19,
[0x2d8f4c960f6a4585]=-16,
[0x2db6e075b5df1081]=110,
[0x2ddec55fb1467d33]=64,
[0x2e10f5d0f18a932e]=49,
[0x2e122d10f38cf791]=3,
[0x2e172bfd96d5d75f]=-23,
[0x2e7986554973a46b]=22,
[0x2e7abbce72edecba]=100,
[0x2ebac1ba67bad40d]=77,
[0x302878ec8a119aae]=-94,
[0x30e05de92b702bab]=23,
[0x30f108aa77650329]=87,
[0x3135f349b81079ed]=116,
[0x316321ce7a64bcb2]=116,
[0x31f4a1d8b8cb3346]=-23,
[0x32378c2734f32997]=95,
[0x324cab76faaae2d3]=90,
[0x3256c2fb01cbebfa]=77,
[0x32db9fc41a907b7d]=121,
[0x32e49f9d6a035c9a]=75,
[0x33965c53d64772d7]=-123,
[0x339de061e8a8e638]=102,
[0x33dfb31630ca83dc]=58,
[0x34139f81524ef7e2]=13,
[0x3456b18d5d8055f9]=90,
[0x34d6bac44ef8e16d]=50,
[0x3508882d36d0a77e]=4,
[0x35564de96c57848d]=-32,
[0x35895b0e3f7adc70]=-64,
[0x35f2ff59ca6c1f85]=76,
[0x3664188723e304d0]=88,
[0x369d525fc64c3ec2]=68,
[0x36ae1c7655ff7ea7]=78,
[0x36e9086ed56c8547]=108,
[0x3708667ee7e08d9c]=104,
[0x37131415e842a886]=72,
[0x3713851813916bca]=49,
[0x377f39cba719e9a0]=-123,
[0x37862840497b2374]=117,
[0x37b795a5b222a1ef]=-119,
[0x385683410fb95e3b]=87,
[0x387df41719dde718]=79,
[0x38f092d9c2d87c4a]=2,
[0x391968ab727125a0]=64,
[0x394af7018a226ea6]=109,
[0x3a1644bdaee01a38]=95,
[0x3a72fd089a868fc6]=88,
[0x3ab55259b8f20ed1]=120,
[0x3b0d1a90756b285f]=-26,
[0x3b4511a0eed8abdc]=75,
[0x3bf73419c9e71092]=-16,
[0x3c016b014ee9704c]=30,
[0x3c2eabb9d821e829]=-6,
[0x3c5c07f6d57b516d]=2,
[0x3ce0083615b3ad12]=117,
[0x3ceb8a07e0964229]=81,
[0x3cfe8594b7ea5ef0]=114,
[0x3d1f063277cd8311]=-22,
[0x3dc98ce971394c4a]=41,
[0x3e1dc2b392aa8785]=22,
[0x3e2843dddaebec66]=3,
[0x3e9e78e41a0d2b78]=9,
[0x3ecc4a248df44d42]=-61,
[0x3f2274946729c35e]=46,
[0x3f4aecf8d86a8786]=-43,
[0x3fe9efe9e5cda581]=2,
[0x3ffc03752a025ae3]=63,
[0x40cb8e96383e5e7d]=42,
[0x415bf7dfd72ce1c9]=76,
[0x418feaf406fb47ac]=33,
[0x423261825b7af801]=2,
[0x42bc810120766a09]=28,
[0x42e28d05af11cb18]=-40,
[0x43d755fcc3ae5199]=106,
[0x448b8c3912792090]=-88,
[0x44f245cf870a5126]=101,
[0x456c328ef5247ac7]=31,
[0x459cd231c305fdac]=-123,
[0x45f0a433c7b0693c]=23,
[0x4676f1a889d77960]=42,
[0x46ace9d59ed644cb]=27,
[0x46c3e67716679ead]=88,
[0x46c91e4fa3314e37]=20,
[0x470987ef52fa6968]=120,
[0x471a3ebb751e367c]=-105,
[0x47a5a428989089f2]=34,
[0x47c0f981bbd8f79c]=58,
[0x47ea63e2430c83b9]=108,
[0x4805509c7f948746]=93,
[0x4903db31cd458719]=-84,
[0x491a058fb56d1ccd]=87,
[0x494fb63f5794cbfb]=14,
[0x49ecd9cd19238ab6]=53,
[0x4a335c7913232aa4]=38,
[0x4aaf1f2007e1eff6]=16,
[0x4ac4b2e6bf8de7d9]=121,
[0x4aefb14750d9b2a2]=6,
[0x4b734dbb91c5106b]=20,
[0x4bc16edae886ac16]=62,
[0x4bfd7c31ac343c81]=86,
[0x4c88c43735974cc1]=120,
[0x4ce22b09205ed229]=-80,
[0x4ceb114d5915b986]=118,
[0x4cf2d5ff9f6e75f0]=-45,
[0x4dd5558f0dfa65a7]=81,
[0x4dd9740148c046ab]=-45,
[0x4dfb1f00cec9b03c]=107,
[0x4ea8b3e7dcbc24e7]=32,
[0x4eec25f29d54e964]=33,
[0x4ef9141ae9c5a903]=13,
[0x4f78250bf1b64a7e]=25,
[0x4fac737fa8e2ba31]=44,
[0x4ff1326b04ae683a]=73,
[0x5161c2f4be8d88bb]=61,
[0x516fd7c1c3117c41]=54,
[0x521628909beb329c]=95,
[0x52bfb0d03d815c4b]=47,
[0x530b32ce7f476121]=123,
[0x531b51edd06103c7]=19,
[0x53addb51f19adde5]=109,
[0x53d092fcfbc82dba]=21,
[0x5413354dcd75dd90]=-123,
[0x54c23afe2b946374]=-83,
[0x54f2e52b36053866]=84,
[0x55960694be6507e8]=41,
[0x55ed44cc40fec515]=49,
[0x5632fd023ace1826]=34,
[0x56621ab8598d321c]=17,
[0x56ad220c56de9bf9]=116,
[0x579760a876aab4c3]=99,
[0x57af09d100cdbf9d]=19,
[0x582dfab0e3f946ad]=90,
[0x583d9a181403c583]=21,
[0x59d88d8cc8a17922]=-30,
[0x59fd4add064ce505]=6,
[0x5a6bbd4ac2ed2347]=108,
[0x5ab4311709774e90]=86,
[0x5ac95b3427f241f5]=70,
[0x5accc910319c70f1]=-11,
[0x5ad1e4641ccb705b]=42,
[0x5b61377607f10147]=7,
[0x5bd2f4fc4ec6dab7]=12,
[0x5c1820ea62895dcd]=48,
[0x5c2d42e0ec8b03a9]=6,
[0x5c67fef551924cab]=4,
[0x5c7555b6fa962285]=-5,
[0x5d09fb8b4e11ee8e]=56,
[0x5dbf5b74cf3cd81a]=68,
[0x5e392e44e505f02a]=97,
[0x5ede6e9b0de88d6f]=48,
[0x5fde17d3db70fd87]=28,
[0x5ff005146e30b21f]=33,
[0x603df270b157ea0a]=93,
[0x604f6bf7eae46ec4]=48,
[0x610065d322918abf]=12,
[0x6155efffbf111e8a]=100,
[0x61c19bf69d2be96a]=117,
[0x61e0bd9202475323]=73,
[0x628b11e2011e2f92]=-67,
[0x62f59a63e58543ad]=55,
[0x63bf594b4e6fe7ab]=63,
[0x64296d52dd618bfd]=38,
[0x6460abe586e58085]=121,
[0x64853e0fb48dec66]=115,
[0x64e1886f63c71d68]=73,
[0x653cc0092edfec12]=87,
[0x65a354eeaeb3417c]=96,
[0x6674fae2959f46fa]=-92,
[0x66b2db43fda0a7da]=30,
[0x66d34e6889dd9d80]=51,
[0x670d005ae2bc7fa2]=76,
[0x677849fe5846c2c0]=-23,
[0x678f0c3bc3bd5a4a]=78,
[0x67ea9b83ef908521]=62,
[0x6823db44ec801f10]=2,
[0x68734fb76c5351bb]=-119,
[0x68830fcefd2a3002]=64,
[0x68c623acedef7a46]=79,
[0x68d3923ce04f77c0]=30,
[0x6921786d5c1b6379]=44,
[0x697e0fdc60fd64ae]=7,
[0x699ab36074872426]=57,
[0x69ff20222619e43a]=29,
[0x6b9137b6cfa2efcd]=56,
[0x6b94078738e31cd6]=3,
[0x6b94a5c5746d69f3]=91,
[0x6bc601383c7a6b83]=5,
[0x6be01575598ae58a]=123,
[0x6c19b6986508c09c]=50,
[0x6c6245580b603296]=95,
[0x6c98579abfd78f44]=9,
[0x6cabc8d1f3ffbe2f]=114,
[0x6d112905753f602e]=39,
[0x6d446079a789d344]=30,
[0x6d8311572ae2048d]=32,
[0x6db332c316bf3c37]=96,
[0x6db4e55532669cc4]=38,
[0x6dc6932c2d3f8544]=59,
[0x6de662f133d213a2]=1,
[0x6dec5694a7116920]=115,
[0x6df36e8ae607447e]=74,
[0x6df4470ca9a715a6]=85,
[0x6e05513a8009f380]=60,
[0x6e6c69c25e4fdcc1]=56,
[0x6e8d432791a8ae60]=37,
[0x6f16fb45a601a455]=10,
[0x6f1fbcbabadb0f63]=-88,
[0x6f59a13d958c5c8f]=-32,
[0x6fc092f8ee6a8ce0]=55,
[0x6ffb6e8e099ffbfa]=10,
[0x702ddb4387de5d79]=49,
[0x70758da0f449f0d9]=73,
[0x70e5e9d8a5aa28a0]=-33,
[0x712792e65030cf68]=123,
[0x712e3cf9b04805ec]=46,
[0x7153d0d489c4eba7]=71,
[0x724b58f690fcc5f2]=-61,
[0x7277bc9ca2bbc801]=-93,
[0x7290dbc2731c11d3]=71,
[0x734165bfe20dd732]=85,
[0x73534e0981d4570f]=-61,
[0x744537042f840e1d]=115,
[0x7449cca095d5a8ff]=44,
[0x7581b1e3a8b43cad]=101,
[0x75a0952673031fa0]=18,
[0x75b47cefad95d020]=83,
[0x75d53071519e3db8]=103,
[0x76de0996515c87c5]=111,
[0x770474116f2f33d5]=39,
[0x776e2075923f0ce4]=69,
[0x779f94b573d94144]=26,
[0x7819bfd3f97becdd]=1,
[0x78483cb238ab8acc]=31,
[0x791c3d3964d4782b]=-26,
[0x794cd3fc906f8a0f]=116,
[0x79a2051cce5dc2fd]=46,
[0x79b198c57a65be06]=115,
[0x7a7d393003d4a75c]=-92,
[0x7a7db85519c7609b]=-9,
[0x7aac08f510b50258]=-26,
[0x7b035b1ada56d721]=81,
[0x7b4742d0e7a9433d]=51,
[0x7c1bdd3a6d84c6a4]=3,
[0x7c70dc6b90bd6711]=42,
[0x7c72386d1168cfac]=44,
[0x7c82c27462e6264b]=73,
[0x7c8dc51d4d823d9e]=78,
[0x7d2e8263f059ce93]=74,
[0x7e3a94be5f816837]=9,
[0x7e73da4c4dfabe83]=44,
[0x7ee2a39bd687b07b]=-62,
[0x7f88c11a8abeccd5]=61,
[0x7faaede156456acd]=44,
[0x81c848b235aec71e]=56,
[0x821925fa52ae2cca]=-37,
[0x825dd6e54b9905dd]=-121,
[0x829caf26111aafa3]=-31,
[0x82e22aaceac3c0c4]=64,
[0x82f76e250f9ad0b3]=64,
[0x8327d5a3b137eaeb]=-6,
[0x834bb6f39fa51b24]=45,
[0x83550fa4f403e48d]=33,
[0x83a1afb85e1938ce]=81,
[0x83d04830433d9e18]=92,
[0x841d58c26e7c43a0]=71,
[0x84436e5c0ddda530]=2,
[0x845ebf761c07f20e]=75,
[0x84989ebe09c3f6e3]=64,
[0x849f492027eb73ec]=30,
[0x852e5048c4f17686]=2,
[0x8540e3a61e5fafec]=55,
[0x8585825b2cb992c9]=106,
[0x85a89613a7d16d9a]=101,
[0x85aff9f0f51d1870]=49,
[0x85e4196c8c253f18]=43,
[0x85efe0b08a451892]=109,
[0x863754b0dc74fce8]=77,
[0x869e1d8aa13bd133]=103,
[0x86c504eb0c6b3313]=96,
[0x86e0219b35250319]=-58,
[0x87b1966dda1ec4b6]=93,
[0x880dbe0ba2acc14e]=83,
[0x8873a035e53fb31b]=13,
[0x88e685d5e4cd188a]=32,
[0x891f7edc572261ab]=-63,
[0x8939cb55741d4b97]=57,
[0x8a0f4891c3226616]=25,
[0x8a343b8a66e09ac6]=31,
[0x8a728da18445b428]=110,
[0x8ae8d27c5bb024b3]=35,
[0x8c12585659169377]=96,
[0x8cd4b0167110b575]=87,
[0x8d014e4fccd30d23]=80,
[0x8d68b86daae9b578]=70,
[0x8d6fa238c5e3cb0e]=117,
[0x8d75e53bd43d8697]=18,
[0x8db04021f4d021d8]=-81,
[0x8e206816374158a7]=108,
[0x8e564ffbf3045be0]=18,
[0x8f56a733a7d9abda]=75,
[0x8fbe58fe2dd6dcfe]=-40,
[0x90139760e06ec93e]=-22,
[0x9042f1859348efb9]=-79,
[0x906a7e9012aa6f82]=90,
[0x9241b0783b2b9eaa]=73,
[0x92506aad78252ed9]=14,
[0x92c3f1c759f9c58f]=70,
[0x92e3e8d7e1b36c20]=-119,
[0x932a3e32492a7911]=-97,
[0x933aaa23a938e3d5]=89,
[0x9358097cf24700d3]=120,
[0x93d07fb9ff793729]=12,
[0x93e4ca109ce9aac9]=23,
[0x93f51656c1079b1d]=103,
[0x947b2f00ada14d35]=-88,
[0x9483c56016c59a48]=38,
[0x948e7c47ffd93df1]=-79,
[0x94a060be883b5853]=92,
[0x9536a1b85456d446]=60,
[0x959d1ef52bba1687]=31,
[0x95f8716b2d29866e]=69,
[0x9607f736ca005488]=87,
[0x9688b240f8201544]=9,
[0x969a360ecca62ae5]=46,
[0x97309e6290eccd89]=61,
[0x97c9774208541dca]=80,
[0x9857e8ba77377879]=50,
[0x98def428910a4d17]=102,
[0x9952e611e8955c4f]=117,
[0x99f522c2f687fa07]=103,
[0x9a072e710e816871]=64,
[0x9a0aa4784e668d74]=120,
[0x9a0b8be8d818f863]=-40,
[0x9a8048c1c28b728c]=46,
[0x9a89e71b716696e1]=92,
[0x9b1b126b6f4b6cdc]=111,
[0x9b98896f874df11d]=55,
[0x9ba4aee346442cf4]=12,
[0x9bae7061aa3d962e]=-84,
[0x9bc77409e45658ea]=117,
[0x9bf2b3d74bffb32e]=28,
[0x9bff7b7493609886]=45,
[0x9c13c5c01ccab392]=44,
[0x9c2bdabd1ecd95dc]=35,
[0x9c7e52bd8f86a0f4]=42,
[0x9c8f6f74bbc5e8db]=108,
[0x9c9105bcf3878dc7]=78,
[0x9cad32ed098f43a1]=71,
[0x9d2470456e7d0b76]=65,
[0x9d4a663022c4e32b]=88,
[0x9d8700c18999a795]=32,
[0x9d9eae01fa75ab02]=115,
[0x9dffa04d7573f5b7]=44,
[0x9e9a0c1e311bfcf4]=71,
[0x9f38e567bca4480f]=39,
[0x9f4028d950287a0f]=65,
[0x9f84158c684fb9b0]=-109,
[0x9ffb30b040038005]=48,
[0xa03f87203b22cc32]=-80,
[0xa0768b597f32885f]=72,
[0xa0a84110032bae3a]=105,
[0xa1226ff27a6f4190]=72,
[0xa1705ea0c40e1c18]=-61,
[0xa1e0ad5244f36b14]=75,
[0xa1ea1579476db85c]=26,
[0xa20ea180a3f9bd24]=103,
[0xa2821b76190762c4]=34,
[0xa31e00a9de7f283b]=-57,
[0xa3acdbeec5e1ca7c]=103,
[0xa41e4d206a9e6f92]=96,
[0xa4986ca90cbaa8be]=110,
[0xa4bcb4c1d21055bb]=52,
[0xa5000b8c0d7946b2]=56,
[0xa54fae9fda8821fd]=-30,
[0xa5903326f73466ec]=90,
[0xa5a73ba71e25add6]=106,
[0xa5a877e082b28ede]=34,
[0xa624a40f2fa5c2a0]=101,
[0xa6f1702718dc79d4]=42,
[0xa73e9e858d5978f2]=44,
[0xa78877eff43eb463]=117,
[0xa7a2a8acd16e903a]=-42,
[0xa7af32944fb6e9be]=48,
[0xa820417bb0c3adfa]=33,
[0xa860ea30beee8592]=-109,
[0xa885bb563906dbbb]=85,
[0xa920b14b6bfce0b6]=89,
[0xa9220c85d6bb5f6b]=108,
[0xa92c6a1b5b3558db]=51,
[0xa950a1670b254157]=88,
[0xa973d4cfcd1862d5]=23,
[0xa990b576c9618842]=-97,
[0xa9f43b3faeca1609]=83,
[0xaa6b0b88b09f095e]=73,
[0xaad42050d20ed703]=16,
[0xab20419d626f8024]=122,
[0xab4a05968854b554]=66,
[0xac0585a3843e2f17]=36,
[0xac1cf4e1613da1ae]=48,
[0xaca26623dd74cfe7]=72,
[0xacb0e102cf21f337]=49,
[0xad414ed358f17907]=117,
[0xadb6ffb0f74a94a9]=80,
[0xadc5f4320606c15a]=116,
[0xade9d31ebac361b4]=2,
[0xae03a2ae9e154f11]=46,
[0xae2da8cd016fee0b]=77,
[0xaf024a645ce404da]=38,
[0xaf090bb2771610d1]=104,
[0xaf8e56bc5e039a26]=64,
[0xafa32c88366c1de6]=30,
[0xafacd710423ae04d]=100,
[0xafb7bacb62947c21]=74,
[0xb0329ed0d86b804a]=113,
[0xb05b753745974e8d]=89,
[0xb079c80ccf984d40]=-30,
[0xb079cbecbcfcb761]=33,
[0xb0bb2e2ccb5650ed]=3,
[0xb143b35a26234839]=69,
[0xb1749ff7d203b055]=75,
[0xb182baccc86aecda]=-84,
[0xb21add2127d14194]=39,
[0xb21ee1cc7ee5a089]=-119,
[0xb23912418e76e68a]=-43,
[0xb240c184452d18b6]=87,
[0xb26008f9fb904a1f]=76,
[0xb2eb8fbebd9c6f14]=25,
[0xb3218dfac3530c58]=75,
[0xb342b1308ada1b03]=79,
[0xb3d440f1c0033694]=-18,
[0xb455201e1c4dd9d9]=122,
[0xb455caf6a4de08d1]=-39,
[0xb45916f4588fa1f4]=-63,
[0xb47556c47b857141]=89,
[0xb54614052fab6c1f]=-123,
[0xb5ed8a4608241002]=92,
[0xb5f57588e9244771]=23,
[0xb6264317a663d67d]=91,
[0xb637be5d2e7a49c2]=42,
[0xb66b59dc00aa05f8]=26,
[0xb6e309e64a1f354c]=8,
[0xb6efd1803e5079b5]=87,
[0xb709987f4a820e35]=74,
[0xb76eff4a5c48b31a]=66,
[0xb8188b9f1947ca91]=115,
[0xb82449108107a318]=-38,
[0xb85bb41d49ce1541]=70,
[0xb8e8b78ea0b6a12d]=-32,
[0xb9541a25f05df113]=119,
[0xb9c22712bc5c119c]=51,
[0xba541cbe093fae6e]=60,
[0xba62057bf4a6d26f]=45,
[0xba7394f168e8d243]=-22,
[0xbaf109462be15440]=-123,
[0xbb3da990f080d5bb]=64,
[0xbb89f1277045dc21]=33,
[0xbc92290bbe754974]=27,
[0xbcf430f90ac6d2cb]=23,
[0xbd36fbbad0a95036]=36,
[0xbd771e04352f6165]=74,
[0xbdcc2323c5c9ef2a]=71,
[0xbdf80e442bc22d0c]=117,
[0xbe0a24eafcf058db]=46,
[0xbe10822eb02b4e0d]=109,
[0xbe1ce6c778f77535]=88,
[0xbe1e55432f3c0ac1]=44,
[0xbe6346589e5b2ea1]=70,
[0xbe761bb566344b76]=114,
[0xbe8cf4830357e5fb]=14,
[0xbea511592b989930]=84,
[0xbed585255094490f]=87,
[0xbf55c7143ff28da7]=-97,
[0xbf7477a393136f9c]=6,
[0xc05eefcff425e9fc]=26,
[0xc06f3c8dd7e0fdb5]=89,
[0xc0b83ec4c14be350]=7,
[0xc1217a93104c423d]=34,
[0xc2077e0018076798]=88,
[0xc2a19e5c8d5ee466]=-30,
[0xc2bf3e2826e6d42a]=98,
[0xc2c6233969664ce1]=6,
[0xc2cfc9ab8b6d97f3]=102,
[0xc4265a90e7b4f89d]=109,
[0xc42d6464e6ab4928]=53,
[0xc434564b50b2a59f]=-37,
[0xc45231bf868595f6]=-30,
[0xc465c67b94e29803]=7,
[0xc48ef7a59730efac]=24,
[0xc492dd56c5e84f13]=58,
[0xc49e1970a754303e]=72,
[0xc59fd892d8b301b9]=24,
[0xc5f25cdf770a5d00]=-112,
[0xc64d1575f48018a9]=110,
[0xc678129beed40c70]=116,
[0xc6eed3b3e35248ec]=89,
[0xc701878cdcb46c3c]=71,
[0xc72cd042e6ffb639]=76,
[0xc85108b8b138a67c]=54,
[0xc8514afe10d8446c]=13,
[0xc863334301dc9077]=96,
[0xc8f5813bd3e6ba10]=109,
[0xc8ff05f587aaf926]=2,
[0xc92b5bfb966501eb]=92,
[0xc92eeb8430b58df2]=53,
[0xca100c3e595b7bcb]=120,
[0xca1164b1c5029571]=-67,
[0xca2f05e0a68d22ff]=-58,
[0xca31a4ed617b821f]=115,
[0xca530ad8e75405b3]=45,
[0xca570f488f1d4c12]=87,
[0xca9ff1e702e1f71f]=16,
[0xcaddd2abb40851b9]=114,
[0xcae3cd33076ef283]=107,
[0xcb1c8228d4e25dea]=107,
[0xcb291cbf1649b13c]=87,
[0xcc8cd616533d12a4]=64,
[0xccf301860ad3b5a5]=107,
[0xce7b80f12371b395]=-22,
[0xced2adab06f7f2ba]=76,
[0xcf7155542f44b639]=22,
[0xcf851b38814b041f]=66,
[0xcfda385137407a81]=76,
[0xd05d13cbc4f5d4fd]=87,
[0xd16f3d8706dfaf63]=38,
[0xd191f8dfddf916cf]=46,
[0xd1953f674166fce4]=49,
[0xd1c589c55c3759d9]=63,
[0xd232609f8d8760ae]=89,
[0xd293d9ec14f9f62f]=37,
[0xd3ef8c76a06ce40d]=35,
[0xd43ebd6701db51b2]=91,
[0xd6a9368d3a692471]=-98,
[0xd700cbf947225000]=46,
[0xd737c2b7ac8fad8d]=51,
[0xd7c78562f68c3994]=120,
[0xd861db69c772ea87]=25,
[0xd8ab584570ab9454]=84,
[0xd8bd4654bac450f4]=7,
[0xd8fe91d9eee7fb59]=40,
[0xd91bfd22c832c50f]=75,
[0xd995643ff644e8d2]=84,
[0xda059fc29fe9560b]=59,
[0xda5c36a28986eb50]=75,
[0xdaef4e45206381f1]=88,
[0xdb806362ba18557b]=54,
[0xdbb061fe61e6aa28]=54,
[0xdbb745f6ec51a0c0]=103,
[0xdc084086a286e6bf]=75,
[0xdc19f66705f19f68]=-57,
[0xdc2339d92883874c]=36,
[0xdc4ed9998eefbb0f]=63,
[0xdc643de098a6575c]=-23,
[0xdd0ea39eb20b8bd7]=28,
[0xdd1227b9871cb830]=55,
[0xdd24ac63980c1703]=79,
[0xdd9af2a3e55409cf]=24,
[0xddfbecb3bbf09b68]=-83,
[0xde1e971deccd98ea]=42,
[0xde390c9d32205a22]=46,
[0xdeff2a789a3a37d4]=42,
[0xdfc3403a5fd7a056]=107,
[0xdff45b107157d4f7]=-80,
[0xe022769a333f47b6]=96,
[0xe04d1df761e1f114]=36,
[0xe0ae51a3f89a4906]=72,
[0xe0b09127129efded]=80,
[0xe0c29667314244ca]=100,
[0xe0f1615d83c61967]=-63,
[0xe16d6373fc2c7f02]=64,
[0xe1ef3fc2f945a5d5]=-40,
[0xe28edb9510f7ce39]=58,
[0xe29580fec595d492]=20,
[0xe2b85cded7b04716]=-119,
[0xe312ed9a58f9b711]=118,
[0xe342c67ec4ae176c]=37,
[0xe388b27f45c71182]=111,
[0xe3a457bf417fbebb]=109,
[0xe3f5a92476e19da6]=-26,
[0xe4d6f65c56d9b47c]=-92,
[0xe5016c6a8a1ad82a]=16,
[0xe5084fe4b2ca2899]=-109,
[0xe52f1daeb172eb2f]=60,
[0xe539a4489067c800]=-82,
[0xe57c8b992eafe755]=87,
[0xe58d3e4e207c1df0]=43,
[0xe5979869158fd252]=33,
[0xe6473d6668eca2ff]=46,
[0xe6818bcbc8ac04cb]=4,
[0xe73d0f1b32af695d]=68,
[0xe73f6e43b34bdea3]=113,
[0xe79dce2c26dff6db]=59,
[0xe8e74f6b91b01700]=11,
[0xe916566c4488b540]=78,
[0xe94db6faaa581ff3]=56,
[0xe9bf212fd91cad9d]=72,
[0xe9c1b1a8053c706a]=23,
[0xea1303380ab2d154]=32,
[0xea24379a59b0d2f7]=38,
[0xea45a71fb36f59a8]=94,
[0xeb2eede7e4209e54]=20,
[0xeb42c3e49363795d]=103,
[0xeb9a30bac5fd8dc9]=-45,
[0xecffce18c9bc078e]=42,
[0xed1ee166263f6484]=6,
[0xed4849d9a92a22f8]=26,
[0xed8daf4bbfa5d5fe]=118,
[0xee5194a8f5a254b6]=85,
[0xee78c029bd8b5bfc]=65,
[0xeeca4184fb8622e2]=-38,
[0xf0f104d97ae82184]=59,
[0xf21098ab582ef4a5]=121,
[0xf3389b337a25705a]=48,
[0xf3f940f07a2ed641]=49,
[0xf4228bc40e9b8f08]=-108,
[0xf48fe4b416795ac7]=46,
[0xf49b7d76c7d6846e]=102,
[0xf4ad2778e2d509a5]=-16,
[0xf4d03d694a028114]=51,
[0xf4ff31932747f0d4]=122,
[0xf5277da781cbb8d9]=-105,
[0xf5438240f4f1a175]=109,
[0xf553d275b8b71ce7]=-64,
[0xf64a5cd65deed62d]=-5,
[0xf654ad01b55675b7]=23,
[0xf6cd13dae6504635]=123,
[0xf6ef62f8f1a6016e]=54,
[0xf70768098370c523]=54,
[0xf72ca20c5a95a2f2]=-32,
[0xf7446228e042e019]=8,
[0xf7abc0526aca08dd]=24,
[0xf7e14d49f095a70a]=-31,
[0xf8cc796167eda76c]=-63,
[0xf8da611c917786b2]=51,
[0xf99bb5ca104d80be]=85,
[0xf9fce8267e27ae9f]=-112,
[0xfa0c3234dcd89a91]=49,
[0xfa5133d6f087ce10]=-93,
[0xfa72e90bbb4933bd]=20,
[0xfb2c90e85e9b8d7d]=100,
[0xfb44ab678ac3f0d4]=55,
[0xfbe5b60c75613281]=28,
[0xfc2d98ddced275f7]=-64,
[0xfcb342770acf9247]=96,
[0xfd183f186ae1f318]=22,
[0xfdca14bc0106af3a]=32,
[0xfe41bf21d68be336]=76,
[0xfe4424d2961eb989]=121,
[0xfe5b31da168b4b48]=100,
[0xfea243edfd46fc6a]=15,
[0xff20ae60ac090d38]=106,
[0xff2153e985d557b1]=120,
[0xff571d884fc9acbb]=4,
[0xff8cdd6b881fe28b]=2,
[0xff8e20d51ee09a4a]=-61,
[0xffab87bdda589f2d]=9,
[0xffd2f813d91186b9]=13,
}
return { heroes = H, by_hash = P }
这个作品没有版本说明。
还没有已发布的脚本需要它。
该作者的其他作品
ground
作者 hunnycGround height and high-ground level at any point of the dota map.
"requires": { "ground": "^1.0" }local ground = require("lib/ground")Beta Tester Config
作者 hunnycBeta 0.10.54 preset: combo on F, last hit on B, every other bind moved off dota's own keys, hp cards and minimap marks on.
lane_geom
作者 hunnycA lane as a polyline: the point on it nearest to a creep, the heading there, and a walk of N units along it.
"requires": { "lane_geom": "^1.0" }local lane_geom = require("lib/lane_geom")