Files
killsay/killsay.lua

713 lines
54 KiB
Lua

--[[
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <https://unlicense.org>
]]
script_name("killsay")
script_author("treywisp")
script_description("Sends a message when an opponent is killed and places a mark on his corpse")
local inicfg = require("inicfg")
local imgui = require("mimgui")
local encoding = require("encoding")
local sampev = require("samp.events")
local ffi = require("ffi")
local addons = require("ADDONS")
-- encoding
encoding.default = 'CP1251'
local u8 = encoding.UTF8
-- Ïåðåìåííûå äëÿ ôóíêöèé òàáëèöû
local data_file_path = getWorkingDirectory() .. "\\killsay_table.json"
local player_data = {}
local mark_data = {}
local script_image
local script_states = {
antiflood = false
}
local imgui_states = {
window_state = imgui.new.bool(),
menu_state = imgui.new.int(1),
}
-- Êîíôèã
local settings_source = "killsay.ini"
local settings = inicfg.load({
variables = {
-- Ãëàâíîå ìåíþ
script_state = false,
startup_notif = true,
-- Íàñòðîéêà îòûãðîâîê
killsay_variation = 0,
killsay_variation_custom = u8[[Ýòî îêíî ñîçäàíî äëÿ ñîáñòâåííîé îòûãðîâêè]],
killsay_distance = false,
-- Íàñòðîéêà ìåòîê
send_mark = false,
use_mark = false,
ignore_text_mark = false,
ignore_self_mark = false,
sound_mark = false,
variation_sound_mark = 21001,
sound_mark_alt = false,
time_mark = false,
variation_time_mark = 1500,
custom_icon_mark = false,
variation_icon_mark = 6,
-- Ïðî÷èå íàñòðîéêè
radio_report = false,
squad_report = false,
table_insert = true;
}
}, settings_source)
local imgui_buffers = {
-- Ãëàâíîå ìåíþ
script_image = nil,
script_state = imgui.new.bool(settings.variables.script_state),
startup_notif = imgui.new.bool(settings.variables.startup_notif),
-- Íàñòîéêà îòûãðîâîê
killsay_variation = imgui.new.int(settings.variables.killsay_variation),
killsay_variation_custom = imgui.new.char[256](u8(tostring(settings.variables.killsay_variation_custom):gsub("&nl", "\n"):sub(1, 255))),
killsay_distance = imgui.new.bool(settings.variables.killsay_distance),
-- Íàñòðîéêà ìåòîê
send_mark = imgui.new.bool(settings.variables.send_mark),
use_mark = imgui.new.bool(settings.variables.use_mark),
ignore_text_mark = imgui.new.bool(settings.variables.ignore_text_mark),
ignore_self_mark = imgui.new.bool(settings.variables.ignore_self_mark),
sound_mark = imgui.new.bool(settings.variables.sound_mark),
variation_sound_mark = imgui.new.int(settings.variables.variation_sound_mark),
sound_mark_alt = imgui.new.bool(settings.variables.sound_mark_alt),
time_mark = imgui.new.bool(settings.variables.time_mark),
variation_time_mark = imgui.new.int(settings.variables.variation_time_mark),
custom_icon_mark = imgui.new.bool(settings.variables.custom_icon_mark),
variation_icon_mark = imgui.new.int(settings.variables.variation_icon_mark),
-- Ïðî÷èå íàñòðîéêè
radio_report = imgui.new.bool(settings.variables.radio_report),
squad_report = imgui.new.bool(settings.variables.squad_report),
table_search = imgui.new.char[256](),
table_insert = imgui.new.bool(settings.variables.table_insert);
}
-- Ñòàíäàðòíûå âàðèàöèè îòûãðîâîê, $nickname == nickname, $id == id
local killsay_text = {
[1] = { -- Êëàññè÷åñêàÿ
"/me ðàññòåãíóë øèðèíêó, ïðèñïóñòèë äæèíñû, ñäåëàë òÿæåëûé âäîõ, äîñòàë èíñòðóìåíò",
"/do Àðîìàòíàÿ çîëîòàÿ æèäêîñòü ñòðóéêîé ñòåêàåò ïî òðóïó $nickname",
"/me ïîäòÿíóë äæèíñû, âçäîõíóë c îáëåã÷åíèåì, çàñòåãíóë øèðèíêó";
},
[2] = { -- Çà ìàò èçâåíè
"Ñëûøü $nickname õóëå òû ìíå ñäåëàåøü??",
"âîâòîðûõ ïîøåë íàõóé",
"âòåòüèõ ÷òî òû ìíå ñäåëàåøü, ÿ â äðóãîì ãîðîäå, çà ìàò èçâåíè";
},
[3] = { -- Hasta la vista
"Hasta la vista, $nickname";
},
[4] = { -- Íîâîãîäíÿÿ
"/me êèíóë îòêðûòêó îò Äåäà Ìîðîçà íà òðóï $nickname",
"/do  îòêðûòêå íàïèñàíî: Ñ íîâûì ãîäîì, $nickname";
}
}
local function userNotification(text)
sampAddChatMessage("[killsay] {FFFFFF}"..text, 0xDC143C)
end
-- Îïòèìèçèðîâàííàÿ ñîðòèðîâêà äëÿ òàáëèöû
local function tableOptimizedSort()
table.sort(player_data, function(a, b)
return (tonumber(a.killed) or 0) > (tonumber(b.killed) or 0)
end)
end
-- Ñîõðàíåíèå íàñòðîåê òàáëèöû
local function tableSaveData()
local file = io.open(data_file_path, 'w')
if not file then return false end
local content = encodeJson(player_data)
file:write(content)
file:close()
return true
end
-- Âíåñåíèå â òàáëèöó íèêà ïðè óáèéñòâå ïðîòèâíèêà
local function tableUpdateKillCount(nickname)
if not nickname or nickname == "" then return false end
nickname = nickname:match("^%s*(.-)%s*$"):sub(1, 30)
for i = 1, #player_data do
if player_data[i].nickname == nickname then
player_data[i].killed = (player_data[i].killed or 0) + 1
tableOptimizedSort()
return true
end
end
player_data[#player_data+1] = {nickname = nickname, killed = 1}
tableOptimizedSort()
tableSaveData()
return true
end
local function tableLoadData()
local file = io.open(data_file_path, 'r')
if not file then
file = io.open(data_file_path, 'w')
if not file then return false end
file:write('[]')
file:close()
userNotification("Ôàéë äàííûõ íå áûë îáíàðóæåí, ñîçäàí íîâûé ïîä íàçâàíèåì \"killsay_table.json\"")
return true
end
local content = file:read('*a')
file:close()
local ok, data = pcall(decodeJson, content)
if not ok then return false end
player_data = data or {}
tableOptimizedSort()
return true
end
local function saveSettings()
userNotification("Ïîïûòêà ñîõðàíåíèÿ íàñòðîåê...")
local text_fields = {
killsay_variation_custom = true,
}
-- Àâòîìàòèçèðîâàííàÿ ïðîâåðêà íà íàõîæäåíèå â òàáëèöå
for key, _ in pairs(settings.variables) do
if imgui_buffers[key] then
if text_fields[key] then
settings.variables[key] = (u8:decode(ffi.string(imgui_buffers[key]))):gsub("\n", "&nl")
else
settings.variables[key] = imgui_buffers[key][0]
end
end
end
if inicfg.save(settings, settings_source) then userNotification("Íàñòðîéêè áûëè óñïåøíî ñîõðàíåíû") end
end
-- Äîáàâëÿåò çâóêîâîå óâåäîìëåíèå ïðè óñòàíîâêå ìåòêè
local function setSoundBlip()
if imgui_buffers.sound_mark_alt[0] then
-- Àëüòåðíàòèâíàÿ âàðèàöèÿ
addOneOffSound(0.0, 0.0, 0.0, imgui_buffers.variation_sound_mark[0])
else
-- Ñòàíäàðòíàÿ âàðèàöèÿ (raknet)
local bs = raknetNewBitStream()
raknetBitStreamWriteInt32(bs, imgui_buffers.variation_sound_mark[0])
raknetBitStreamWriteFloat(bs, 0)
raknetBitStreamWriteFloat(bs, 0)
raknetBitStreamWriteFloat(bs, 0)
raknetEmulRpcReceiveBitStream(16, bs)
raknetDeleteBitStream(bs)
end
end
local function setDeathBlip(x, y, z)
lua_thread.create(function()
setSoundBlip()
local mark = {
checkpoint = createCheckpoint(2, x, y, z, 0, 0, 0, 1),
blip = addSpriteBlipForContactPoint(x, y, z, imgui_buffers.custom_icon_mark[0] and imgui_buffers.variation_icon_mark[0] or 19)
}
mark_data[#mark_data + 1] = mark
wait(imgui_buffers.time_mark[0] and imgui_buffers.variation_time_mark[0] or 1000)
if mark.checkpoint then deleteCheckpoint(mark.checkpoint) end
if mark.blip then removeBlip(mark.blip) end
for i = #mark_data, 1, -1 do
if mark_data[i] == mark then
table.remove(mark_data, i)
break
end
end
end)
end
local function sendMark(x, y, z)
sampSendChat("/u DCHECKSEALKPOSX".. math.floor(x) .."Y".. math.floor(y) .."Z".. math.floor(z))
end
local function sendRolePlay(nickname, id)
-- Îòïðàâêà ñîáñòâåííîé îòûãðîâêè
if imgui_buffers.killsay_variation[0] == 5 then
for text in u8:decode(ffi.string(imgui_buffers.killsay_variation_custom)):gmatch("[^\r\n]+") do
sampSendChat(text:gsub("$nickname", nickname):gsub("$id", id))
wait(1400)
end
return true
end
-- Îòïðàâêà ñòàíäàðòíîé îòûãðîâêè
for _, text in ipairs(killsay_text[imgui_buffers.killsay_variation[0]]) do
text = (text:gsub("$nickname", ''.. nickname)):gsub("$id", ''.. id)
sampSendChat(text)
wait(1400)
end
end
-- Ãëàâíàÿ ôóíêöèÿ ñêðèïòà
local function killsay(id)
local x, y, z, nickname
local _, handle = sampGetCharHandleBySampPlayerId(id)
if _ then x, y, z = getCharCoordinates(handle) end
if sampIsPlayerConnected(id) then nickname = (sampGetPlayerNickname(id)):gsub("^%b[]", "") end
local px, py, pz = getCharCoordinates(PLAYER_PED)
if not (x and y and z and nickname) or x == "" or y == "" or z == "" or nickname == "" then
print("[" .. os.date("%H:%M:%S") .. "]: Ïðîèçîøëà îøèáêà èíèöèàëèçàöèè ïåðåìåííûõ")
print("[" .. os.date("%H:%M:%S") .. "]: Âîçìîæíàÿ ïðîáëåìà: âûõîä ïðîòèâíèêà / áûñòðûé ðåñïàâí")
return false
else
tableUpdateKillCount(nickname)
if imgui_buffers.send_mark[0] then
sendMark(x, y, z)
wait((imgui_buffers.killsay_variation[0] or imgui_buffers.radio_report[0] or imgui_buffers.squad_report[0]) and 1400 or 0)
end
if imgui_buffers.killsay_variation[0] ~= 0 and (imgui_buffers.killsay_distance[0] or (not imgui_buffers.killsay_distance[0] and getDistanceBetweenCoords3d(x, y, z, px, py, pz) < 15)) then
sendRolePlay(nickname, id)
end
if imgui_buffers.radio_report[0] then
sampSendChat("/rb " .. nickname .. "[" .. id .. "] íåéòðàëèçîâàí")
wait(imgui_buffers.squad_report[0] and 1400 or 0)
end
if imgui_buffers.squad_report[0] then
sampSendChat("/fs ".. nickname .. "[" .. id .. "] íåéòðàëèçîâàí")
end
end
end
local function centerColumnText(text)
imgui.SetCursorPosX((imgui.GetColumnOffset() + (imgui.GetColumnWidth() / 2)) - imgui.CalcTextSize(text).x / 2)
imgui.Text(text)
end
local function customizedHint(text, variation)
imgui.SameLine()
if variation then
local pos = imgui.GetCursorPosY()
imgui.SetCursorPosY(pos + 3)
end
imgui.TextDisabled(u8"(?)")
if imgui.IsItemHovered() then
imgui.BeginTooltip()
imgui.PushTextWrapPos(450)
imgui.TextUnformatted(u8(text))
imgui.PopTextWrapPos()
imgui.EndTooltip()
end
end
imgui.OnInitialize(function()
imgui.DarkTheme()
imgui_buffers.script_image = imgui.CreateTextureFromFileInMemory(imgui.new("const char*", script_image), #script_image)
end)
imgui.OnFrame(function() return imgui_states.window_state[0] end, function(player)
imgui.SetNextWindowPos(imgui.ImVec2(500, 500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
imgui.SetNextWindowSize(imgui.ImVec2(523, 550), imgui.Cond.Always)
imgui.Begin(u8"killsay", imgui_states.window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoScrollbar + imgui.WindowFlags.NoScrollWithMouse)
-- Ñåëåêòîð ìåíþ
if addons.HeaderButton(imgui_states.menu_state[0] == 1, u8"Ãëàâíîå ìåíþ") then
imgui_states.menu_state[0] = 1
end
imgui.SameLine(nil, 30)
if addons.HeaderButton(imgui_states.menu_state[0] == 2, u8"Íàñòðîéêà îòûãðîâîê") then
imgui_states.menu_state[0] = 2
end
imgui.SameLine(nil, 30)
if addons.HeaderButton(imgui_states.menu_state[0] == 3, u8"Íàñòðîéêà ìåòîê") then
imgui_states.menu_state[0] = 3
end
imgui.SameLine(nil, 30)
if addons.HeaderButton(imgui_states.menu_state[0] == 4, u8"Ïðî÷èå íàñòðîéêè") then
imgui_states.menu_state[0] = 4
end
-- Ãëàâíîå ìåíþ
if imgui_states.menu_state[0] == 1 then
imgui.SetCursorPos(imgui.ImVec2(188, 170))
imgui.Image(imgui_buffers.script_image, imgui.ImVec2(150, 150))
imgui.SetCursorPosX(183)
addons.ToggleButton(u8"Àêòèâàöèÿ ñêðèïòà", imgui_buffers.script_state)
imgui.SetCursorPos(imgui.ImVec2(165, 482))
addons.ToggleButton(u8"Óâåäîìëåíèå ïðè çàïóñêå", imgui_buffers.startup_notif)
imgui.SetCursorPosY(450)
addons.AlignedText(u8"This software is unlicensed. You can do whatever you want with it", 2)
if imgui.IsItemClicked(0) then os.execute(("start %s"):format("https://unlicense.org")) end
end
-- Íàñòðîéêà îòûãðîâîê
if imgui_states.menu_state[0] == 2 then
-- Âûáîð âàðèàöèè îòûãðîâêè
imgui.SetCursorPos(imgui.ImVec2(50, 95))
imgui.RadioButtonIntPtr(u8"Áåç îòûãðîâîê", imgui_buffers.killsay_variation, 0)
customizedHint("Ñêðèïò áóäåò ïðîïóñêàòü îòûãðîâêè, ïåðåõîäÿ ê äðóãèì ôóíêöèÿì")
imgui.SameLine(200)
imgui.RadioButtonIntPtr(u8"Êëàññè÷åñêàÿ", imgui_buffers.killsay_variation, 1)
customizedHint("[1]: /me ðàññòåãíóë øèðèíêó, ïðèñïóñòèë äæèíñû, ñäåëàë òÿæåëûé âäîõ, äîñòàë èíñòðóìåíò\n[2]: /do Àðîìàòíàÿ çîëîòàÿ æèäêîñòü ñòðóéêîé ñòåêàåò ïî òðóïó $nickname\n[3]: /me ïîäòÿíóë äæèíñû, âçäîõíóë c îáëåã÷åíèåì, çàñòåãíóë øèðèíêó")
imgui.SameLine(348)
imgui.RadioButtonIntPtr(u8"Çà ìàò èçâåíè", imgui_buffers.killsay_variation, 2)
customizedHint("[1]: Ñëûøü $nickname õóëå òû ìíå ñäåëàåøü??\n[2]: âîâòîðûõ ïîøåë íàõóé\n[3]: âòåòüèõ ÷òî òû ìíå ñäåëàåøü, ÿ â äðóãîì ãîðîäå, çà ìàò èçâåíè")
imgui.SetCursorPos(imgui.ImVec2(50, 130))
imgui.RadioButtonIntPtr(u8"Hasta la vista", imgui_buffers.killsay_variation, 3)
customizedHint("[1]: Hasta la vista, $nickname")
imgui.SameLine(200)
imgui.RadioButtonIntPtr(u8"Happy new year", imgui_buffers.killsay_variation, 4)
customizedHint("[1]: /me êèíóë îòêðûòêó îò Äåäà Ìîðîçà íà òðóï $nickname\n[2]: /do  îòêðûòêå íàïèñàíî: Ñ íîâûì ãîäîì, $nickname")
imgui.SameLine(348)
imgui.RadioButtonIntPtr(u8"Êàñòîìèçàöèÿ", imgui_buffers.killsay_variation, 5)
customizedHint("Íå ðåêîìåíäóåòñÿ èñïîëüçîâàòü ñî÷åòàíèå \"&nl\", ïîñêîëüêó îíî\nêîñòûëüíî îòâå÷àåò çà ïåðåíîñ íà íîâóþ ñòðîêó. Åñëè íå âûáðàíà\nýòà ôóêíöèÿ - îòûãðîâêè, ââåäåííûå íèæå, íå ñðàáàòûâàþò")
-- Ñîáñòâåííàÿ âàðèàöèÿ îòûãðîâêè
imgui.SetCursorPos(imgui.ImVec2(60, 185))
imgui.InputTextMultiline("##killsay_variation_custom", imgui_buffers.killsay_variation_custom, 256, imgui.ImVec2(400, 150))
imgui.SetCursorPosY(360)
addons.AlignedText(u8"Ìàêñèìàëüíî âîçìîæíàÿ äëèíà òâîèõ îòûãðîâîê - 256 ñèìâîëîâ.\nÒàêæå òû ìîæåøü èñïîëüçîâàòü ïåðåìåííûå ïðÿìî â îòûãðîâêàõ:\nÂïèñûâàé $nickname äëÿ âñòàâêè â îòûãðîâêè íèêà ïðîòèâíèêà,\n$id ñëåäóåò èñïîëüçîâàòü, åñëè õî÷åøü ïîäñòàâèòü ID ïðîòèâíèêà", 2)
imgui.SetCursorPos(imgui.ImVec2(85, 460))
addons.ToggleButton(u8"Èãíîðèðîâàòü ìàêñèìàëüíóþ äèñòàíöèþ îòûãðîâîê", imgui_buffers.killsay_distance)
end
-- Íàñòðîéêà ìåòêè
if imgui_states.menu_state[0] == 3 then
imgui.SetCursorPos(imgui.ImVec2(75, 95))
addons.ToggleButton(u8"Îòïðàâëÿòü ìåòêè", imgui_buffers.send_mark)
customizedHint("Ïðè ëèêâèäàöèè áóäåò îòïðàâëÿòü ñîîáùåíèå â ÷àò ñêâàäà â ôîðìàòå DCHECKSEALKPOSX$Y$Z$, ãäå $ - ñîîòâåòñòâóþùàÿ êîîðäèíàòà", true)
imgui.SameLine(275)
addons.ToggleButton(u8"Óñòàíàâëèâàòü ìåòêè", imgui_buffers.use_mark)
imgui.SetCursorPos(imgui.ImVec2(75, 130))
addons.ToggleButton(u8"Èãíîðèðîâàòü òåêñò", imgui_buffers.ignore_text_mark)
customizedHint("Òåêñò ìåòîê íå áóäåò îòîáðàæàòüñÿ â ÷àòå, îäíàêî ñàìè ìåòêè áóäóò óñòàíàâëèâàòüñÿ", true)
imgui.SameLine(275)
addons.ToggleButton(u8"Èãíîðèðîâàòü ñâîè", imgui_buffers.ignore_self_mark)
customizedHint("Ñâîè îòïðàâëåííûå ìåòêè óñòàíàâëèâàòüñÿ íå áóäóò", true)
-- Íàñòðîéêà çâóêîâûõ óâåäîìëåíèé
imgui.SetCursorPos(imgui.ImVec2(75, 185))
addons.ToggleButton(u8"Ïðîèãðûâàòü çâóêîâ. îïîâåùåíèå ïðè óñòàíîâêå ìåòêè", imgui_buffers.sound_mark)
imgui.SetCursorPos(imgui.ImVec2(75, 220))
imgui.RadioButtonIntPtr(u8"Ïåéäæåð", imgui_buffers.variation_sound_mark, 21001)
imgui.SameLine(220)
imgui.RadioButtonIntPtr(u8"Ñèíòåçàòîð", imgui_buffers.variation_sound_mark, 5205)
imgui.SameLine(382)
imgui.RadioButtonIntPtr(u8"Ïèíîê", imgui_buffers.variation_sound_mark, 1136)
imgui.SetCursorPos(imgui.ImVec2(75, 260))
addons.ToggleButton(u8"Èñïîëüçîâàòü àëüò. ïðèìåíåí.", imgui_buffers.sound_mark_alt)
customizedHint(" áîëüøèíñòâå ñëó÷àåâ íå áóäåò ðàáîòàòü, îäíàêî äëÿ êîãî-òî ýòî ìîæåò ñòàòü ðåøåíèåì ïðîáëåìû", true)
imgui.SetCursorPos(imgui.ImVec2(327, 258))
if imgui.Button(u8"Ïðîâåðèòü çâóê", imgui.ImVec2(120, 0)) then setSoundBlip() end
-- Íàñòðîéêà âðåìåíè ìåòêè
imgui.SetCursorPos(imgui.ImVec2(75, 315))
addons.ToggleButton(u8"Èñïîëüçîâàòü ñîáñòâåííîå âðåìÿ îòîáðàæåíèÿ ìåòêè", imgui_buffers.time_mark)
imgui.SetCursorPos(imgui.ImVec2(75, 350))
imgui.PushItemWidth(372)
imgui.SliderInt(u8"", imgui_buffers.variation_time_mark, 100, 3500)
-- Íàñòðîéêà êàñòîìèçèðîâàííîé èêîíêè ìåòêè
imgui.SetCursorPos(imgui.ImVec2(75, 405))
addons.ToggleButton(u8"Çàìåíèòü ñòàíäàðòíóþ èêîíêó íà êàñòîìèçèðîâàííóþ", imgui_buffers.custom_icon_mark)
customizedHint("Ïî óìîë÷àíèþ èêîíêîé ÿâëÿåòñÿ êðàñíûé ôëàæîê", true)
imgui.SetCursorPos(imgui.ImVec2(75, 435))
imgui.RadioButtonIntPtr(u8"Ïèñòîëåò", imgui_buffers.variation_icon_mark, 6)
imgui.SameLine(200)
imgui.RadioButtonIntPtr(u8"Ñåðäå÷êî", imgui_buffers.variation_icon_mark, 21)
imgui.SameLine(323)
imgui.RadioButtonIntPtr(u8"Æåëòûé êðóæîê", imgui_buffers.variation_icon_mark, 56)
end
-- Ïðî÷èå íàñòðîéêè
if imgui_states.menu_state[0] == 4 then
-- Íàñòðîéêà îò÷åòîâ
imgui.SetCursorPos(imgui.ImVec2(85, 95))
addons.ToggleButton(u8"Îòïðàâëÿòü ñîîáùåíèå î ëèêâèäàöèè â ðàöèþ (/rb)", imgui_buffers.radio_report)
customizedHint("/rb $nickname[$id] íåéòðàëèçîâàí", true)
imgui.SetCursorPos(imgui.ImVec2(85, 125))
addons.ToggleButton(u8"Îòïðàâëÿòü ñîîáùåíèå î ëèêâèäàöèè â ñêâàä (/fs)", imgui_buffers.squad_report)
customizedHint("/fs $nickname[$id] íåéòðàëèçîâàí", true)
imgui.SetCursorPosY(165)
addons.AlignedText(u8"Ëè÷íàÿ ñòàòèñòèêà ëèêâèäàöèè ïðîòèâíèêîâ", 2)
-- Àâòîìàòèçèðîâàííàÿ òàáëèöà
imgui.SetCursorPos(imgui.ImVec2(85, 190))
imgui.BeginChild(u8"##Òàáëèöà", imgui.ImVec2(355, 200), true)
imgui.Columns(3)
imgui.SetColumnWidth(-1, 140)
centerColumnText(u8"Nickname")
imgui.NextColumn()
imgui.SetColumnWidth(-1, 90)
centerColumnText(u8"Óáèéñòâ")
imgui.NextColumn()
imgui.SetColumnWidth(-1, 135)
centerColumnText(u8"Äåéñòâèÿ")
imgui.NextColumn()
imgui.Columns(1)
imgui.Separator()
for i, player in ipairs(player_data) do
if (u8:decode(ffi.string(imgui_buffers.table_search))):gsub("%s+", "") == "" or player.nickname:find("^" .. (u8:decode(ffi.string(imgui_buffers.table_search))):gsub("%s+", ""):gsub("[%%%.%[%]%(%)%+%-%?%^%$]", "%%%0")) then
imgui.Columns(3)
imgui.SetColumnWidth(-1, 140)
centerColumnText(u8(player.nickname))
imgui.NextColumn()
imgui.SetColumnWidth(-1, 90)
centerColumnText(u8(player.killed))
imgui.NextColumn()
imgui.SetColumnWidth(-1, 135)
centerColumnText(u8"Óäàëèòü çàïèñü")
if imgui.IsItemClicked() then
table.remove(player_data, i)
tableSaveData()
end
imgui.Columns(1)
imgui.Separator()
end
end
imgui.EndChild()
-- Ïîèñê ïî òàáëèöå
imgui.SetCursorPos(imgui.ImVec2(85, 395))
imgui.PushItemWidth(285)
imgui.InputTextWithHint(u8"##Ïîèñê", u8"Ðåãèñòðîçàâèñèìûé ïîèñê", imgui_buffers.table_search, 256)
-- Î÷èñòêà ñòðîêè ïîèñêà
imgui.SetCursorPos(imgui.ImVec2(375, 395))
if imgui.Button(u8"Î÷èñòèòü") then
imgui.StrCopy(imgui_buffers.table_search, '')
end
imgui.SetCursorPos(imgui.ImVec2(85, 435))
addons.ToggleButton(u8"Çàíîñèòü ëèêâèäèðîâàííûõ ïðîòèâíèêîâ â òàáëèöó", imgui_buffers.table_insert)
end
-- Êíîïêà ñîõðàíåíèÿ íàñòðîåê
imgui.SetCursorPos(imgui.ImVec2(-5, 520))
if imgui.Button(u8"Ñîõðàíåíèå íàñòðîåê", imgui.ImVec2(535, 30)) then
saveSettings()
end
imgui.End()
end)
function main()
if not isSampfuncsLoaded() or not isSampLoaded() then return end
while not isSampAvailable() do wait(100) end
if not tableLoadData() then
userNotification("{FF0000}Ôàéë äàííûõ íå áûë óñïåøíî çàãðóæåí, ñêðèïò ìîæåò ðàáîòàòü íåñòàáèëüíî!")
print("Ôàéë äàííûõ íå áûë óñïåøíî çàãðóæåí, ñêðèïò ìîæåò ðàáîòàòü íåñòàáèëüíî!")
end
if imgui_buffers.startup_notif[0] then
userNotification("Ñêðèïò çàãðóæåí. Îòêðûòü ìåíþ: /killsay")
end
sampRegisterChatCommand("killsay", function() imgui_states.window_state[0] = not imgui_states.window_state[0] end)
end
-- Ïðîâåðêà íà óáèéñòâî ïðîòèâíèêà
function sampev.onSendGiveDamage(id, damage, weaponid, bodypart)
if id ~= 65535 and sampGetPlayerHealth(id) - damage <= 0 and imgui_buffers.script_state[0] then
lua_thread.create(function()
wait(350)
if sampGetPlayerHealth(id) <= 0 and isCharDead(select(2, sampGetCharHandleBySampPlayerId(id))) and not script_states.antiflood then
script_states.antiflood = true
killsay(id)
script_states.antiflood = false
end
end)
end
end
-- Ïîèñê òåêñòà ìåòêè
function sampev.onServerMessage(color, text)
if imgui_buffers.script_state[0] and imgui_buffers.use_mark[0] and text:find("^.+%[.*%]% {FFFFFF%}(.*)%[(.*)%]: DCHECKSEALKPOSX.+Y.+Z.+") then
local nickname, id, x, y, z = text:match("^.+%[.*%]% {FFFFFF%}(.*)%[(.*)%]: DCHECKSEALKPOSX(.+)Y(.+)Z(.+)")
local self_nickname = sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)))
if not imgui_buffers.ignore_self_mark[0] or (imgui_buffers.ignore_self_mark[0] and self_nickname ~= nickname) then setDeathBlip(x, y, z) end
if imgui_buffers.ignore_text_mark[0] then return false end
end
end
-- ìîäèôèöèðîâàííàÿ òåìà Chapo è ôóíêöèÿ êíîïêè Cosmo
function imgui.DarkTheme()
imgui.SwitchContext()
imgui.GetStyle().WindowPadding = imgui.ImVec2(5, 5)
imgui.GetStyle().FramePadding = imgui.ImVec2(5, 5)
imgui.GetStyle().ItemSpacing = imgui.ImVec2(5, 5)
imgui.GetStyle().ItemInnerSpacing = imgui.ImVec2(2, 2)
imgui.GetStyle().TouchExtraPadding = imgui.ImVec2(0, 0)
imgui.GetStyle().IndentSpacing = 0
imgui.GetStyle().ScrollbarSize = 10
imgui.GetStyle().GrabMinSize = 10
imgui.GetStyle().WindowBorderSize = 1
imgui.GetStyle().ChildBorderSize = 1
imgui.GetStyle().PopupBorderSize = 1
imgui.GetStyle().FrameBorderSize = 1
imgui.GetStyle().TabBorderSize = 1
imgui.GetStyle().WindowRounding = 0
imgui.GetStyle().ChildRounding = 5
imgui.GetStyle().FrameRounding = 5
imgui.GetStyle().PopupRounding = 5
imgui.GetStyle().ScrollbarRounding = 5
imgui.GetStyle().GrabRounding = 5
imgui.GetStyle().TabRounding = 5
imgui.GetStyle().WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
imgui.GetStyle().ButtonTextAlign = imgui.ImVec2(0.5, 0.5)
imgui.GetStyle().SelectableTextAlign = imgui.ImVec2(0.5, 0.5)
imgui.GetStyle().Colors[imgui.Col.Text] = imgui.ImVec4(1.00, 1.00, 1.00, 1.00)
imgui.GetStyle().Colors[imgui.Col.TextDisabled] = imgui.ImVec4(0.50, 0.50, 0.50, 1.00)
imgui.GetStyle().Colors[imgui.Col.WindowBg] = imgui.ImVec4(0.07, 0.07, 0.07, 1.00)
imgui.GetStyle().Colors[imgui.Col.ChildBg] = imgui.ImVec4(0.07, 0.07, 0.07, 1.00)
imgui.GetStyle().Colors[imgui.Col.PopupBg] = imgui.ImVec4(0.07, 0.07, 0.07, 1.00)
imgui.GetStyle().Colors[imgui.Col.Border] = imgui.ImVec4(0.25, 0.25, 0.26, 0.54)
imgui.GetStyle().Colors[imgui.Col.BorderShadow] = imgui.ImVec4(0.00, 0.00, 0.00, 0.00)
imgui.GetStyle().Colors[imgui.Col.FrameBg] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
imgui.GetStyle().Colors[imgui.Col.FrameBgHovered] = imgui.ImVec4(0.25, 0.25, 0.26, 1.00)
imgui.GetStyle().Colors[imgui.Col.FrameBgActive] = imgui.ImVec4(0.25, 0.25, 0.26, 1.00)
imgui.GetStyle().Colors[imgui.Col.TitleBg] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
imgui.GetStyle().Colors[imgui.Col.TitleBgActive] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
imgui.GetStyle().Colors[imgui.Col.TitleBgCollapsed] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
imgui.GetStyle().Colors[imgui.Col.MenuBarBg] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
imgui.GetStyle().Colors[imgui.Col.ScrollbarBg] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
imgui.GetStyle().Colors[imgui.Col.ScrollbarGrab] = imgui.ImVec4(0.00, 0.00, 0.00, 1.00)
imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabHovered] = imgui.ImVec4(0.41, 0.41, 0.41, 1.00)
imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabActive] = imgui.ImVec4(0.51, 0.51, 0.51, 1.00)
imgui.GetStyle().Colors[imgui.Col.CheckMark] = imgui.ImVec4(1.00, 1.00, 1.00, 1.00)
imgui.GetStyle().Colors[imgui.Col.SliderGrab] = imgui.ImVec4(0.21, 0.20, 0.20, 1.00)
imgui.GetStyle().Colors[imgui.Col.SliderGrabActive] = imgui.ImVec4(0.21, 0.20, 0.20, 1.00)
imgui.GetStyle().Colors[imgui.Col.Button] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
imgui.GetStyle().Colors[imgui.Col.ButtonHovered] = imgui.ImVec4(0.21, 0.20, 0.20, 1.00)
imgui.GetStyle().Colors[imgui.Col.ButtonActive] = imgui.ImVec4(1.00, 1.00, 1.00, 1.00)
imgui.GetStyle().Colors[imgui.Col.Header] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
imgui.GetStyle().Colors[imgui.Col.HeaderHovered] = imgui.ImVec4(0.20, 0.20, 0.20, 1.00)
imgui.GetStyle().Colors[imgui.Col.HeaderActive] = imgui.ImVec4(0.47, 0.47, 0.47, 1.00)
imgui.GetStyle().Colors[imgui.Col.Separator] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
imgui.GetStyle().Colors[imgui.Col.SeparatorHovered] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
imgui.GetStyle().Colors[imgui.Col.SeparatorActive] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
imgui.GetStyle().Colors[imgui.Col.ResizeGrip] = imgui.ImVec4(1.00, 1.00, 1.00, 0.25)
imgui.GetStyle().Colors[imgui.Col.ResizeGripHovered] = imgui.ImVec4(1.00, 1.00, 1.00, 0.67)
imgui.GetStyle().Colors[imgui.Col.ResizeGripActive] = imgui.ImVec4(1.00, 1.00, 1.00, 0.95)
imgui.GetStyle().Colors[imgui.Col.Tab] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
imgui.GetStyle().Colors[imgui.Col.TabHovered] = imgui.ImVec4(0.28, 0.28, 0.28, 1.00)
imgui.GetStyle().Colors[imgui.Col.TabActive] = imgui.ImVec4(0.30, 0.30, 0.30, 1.00)
imgui.GetStyle().Colors[imgui.Col.TabUnfocused] = imgui.ImVec4(0.07, 0.10, 0.15, 0.97)
imgui.GetStyle().Colors[imgui.Col.TabUnfocusedActive] = imgui.ImVec4(0.14, 0.26, 0.42, 1.00)
imgui.GetStyle().Colors[imgui.Col.PlotLines] = imgui.ImVec4(0.61, 0.61, 0.61, 1.00)
imgui.GetStyle().Colors[imgui.Col.PlotLinesHovered] = imgui.ImVec4(1.00, 0.43, 0.35, 1.00)
imgui.GetStyle().Colors[imgui.Col.PlotHistogram] = imgui.ImVec4(0.90, 0.70, 0.00, 1.00)
imgui.GetStyle().Colors[imgui.Col.PlotHistogramHovered] = imgui.ImVec4(1.00, 0.60, 0.00, 1.00)
imgui.GetStyle().Colors[imgui.Col.TextSelectedBg] = imgui.ImVec4(1.00, 0.00, 0.00, 0.35)
imgui.GetStyle().Colors[imgui.Col.DragDropTarget] = imgui.ImVec4(1.00, 1.00, 0.00, 0.90)
imgui.GetStyle().Colors[imgui.Col.NavHighlight] = imgui.ImVec4(0.26, 0.59, 0.98, 1.00)
imgui.GetStyle().Colors[imgui.Col.NavWindowingHighlight] = imgui.ImVec4(1.00, 1.00, 1.00, 0.70)
imgui.GetStyle().Colors[imgui.Col.NavWindowingDimBg] = imgui.ImVec4(0.80, 0.80, 0.80, 0.20)
imgui.GetStyle().Colors[imgui.Col.ModalWindowDimBg] = imgui.ImVec4(0.00, 0.00, 0.00, 0.70)
local but_orig = imgui.Button
imgui.Button = function(...)
imgui.PushStyleColor(imgui.Col.Text, imgui.ImVec4(1.00, 1.00, 1.00, 1.00))
imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(0.12, 0.12, 0.12, 1.00))
imgui.PushStyleColor(imgui.Col.ButtonHovered, imgui.ImVec4(0.21, 0.20, 0.20, 1.00))
imgui.PushStyleColor(imgui.Col.ButtonActive, imgui.ImVec4(0.41, 0.41, 0.41, 1.00))
local result = but_orig(...)
imgui.PopStyleColor(4)
return result
end
end
script_image = "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\xC8\x00\x00\x00\xC8\x08\x06\x00\x00\x00\xAD\x58\xAE\x9E\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0B\x13\x00\x00\x0B\x13\x01\x00\x9A\x9C\x18\x00\x00\x17\x28\x49\x44\x41\x54\x78\x9C\xED\x9D\x79\x9C\x15\xD5\x95\xC7\xBF\xA0\x82\xEC\x36\x28\x88\x5B\x10\x44\x8D\x2B\xDA\x44\x31\x71\x34\x2A\xA8\x71\x37\x4A\x66\xC6\x8C\x19\x83\xB1\xC9\x18\x63\xCC\xC4\x04\x9C\x89\xD9\xC6\x89\x10\x93\x31\xF1\x93\x31\xD2\x6A\xD4\xA0\xC9\x47\x50\x27\xD1\xC4\x95\x89\x1B\x2E\x41\x08\xE2\x12\xB7\x11\x23\xE0\x12\x44\x9A\x28\x02\x8A\xF1\xCD\x1F\xE7\x95\xFD\xE8\xEE\x57\x75\x6F\x55\xDD\xBA\xB7\xDE\x3B\xDF\xCF\xA7\x3E\xBD\xD5\x72\xBA\x5E\xFD\xEA\xDE\x7B\xEE\xB9\xE7\xF4\xAA\x54\x2A\x28\x8A\xD2\x33\xBD\x7D\x1B\xA0\x28\x21\xA3\x02\x51\x94\x18\x54\x20\x8A\x12\x83\x0A\x44\x51\x62\x50\x81\x28\x4A\x0C\x2A\x10\x45\x89\x41\x05\xA2\x28\x31\xA8\x40\x14\x25\x06\x15\x88\xA2\xC4\xA0\x02\x51\x94\x18\x54\x20\x8A\x12\x83\x0A\x44\x51\x62\x50\x81\x28\x4A\x0C\x2A\x10\x45\x89\x41\x05\xA2\x28\x31\xA8\x40\x14\x25\x06\x15\x88\xA2\xC4\xB0\xB9\x6F\x03\x9A\x98\x2D\x81\xE1\xC0\xD6\xC0\xB0\xEA\x36\x1C\x18\x02\xF4\x01\xFA\x22\x2F\xB0\xBE\xC0\x66\x40\xB4\xF4\xB3\x57\xF5\xEB\x7A\xE0\x1D\x60\x6D\xF5\xEB\x6A\xA0\xA3\xBA\xBD\x09\xBC\x5E\xFD\x9B\x92\x01\x15\x88\x7B\xFA\x02\xDB\x01\xBB\x00\xFB\x00\x7B\x56\xBF\xDF\x1E\x11\xC5\x10\x07\xD7\x5C\x0F\xAC\x04\xFE\x52\xDD\x9E\x07\x9E\x06\x9E\x04\x5E\xAD\x6E\x8A\x01\xBD\x74\x4D\x7A\xEE\xF4\x03\x5A\xAB\xDB\x47\x81\x03\x81\xBD\x08\xE7\x65\xB4\x06\x58\x0C\x2C\x01\x9E\x03\x1E\x44\xC4\xA3\xF4\x80\x0A\x24\x1F\xF6\x00\xC6\x03\xC7\x01\x13\x80\x1D\xFD\x9A\x63\xC5\x3A\x60\x29\x30\x1F\xB8\x1B\x58\x00\xBC\xE2\xD5\xA2\x80\x50\x81\xA4\x63\x0B\xE0\x00\xE0\x54\x44\x10\x13\xFC\x9A\x93\x2B\x6B\x80\x47\x80\x3B\x80\xDF\x21\xE2\x69\x5A\x54\x20\x76\xB4\x02\x47\x01\x27\x23\x2D\x46\xA3\xB3\x0E\xB8\xBD\xBA\xDD\x8A\x0C\xFE\x9B\x0A\x15\x48\x32\x5B\x01\x27\x00\x53\x80\x83\x11\x8F\x52\x33\xF2\x1A\x70\x0B\x30\x1B\xF8\x83\x67\x5B\x0A\x43\x05\x52\x9F\x7D\x80\xD3\x80\x7F\x00\x3E\xE2\xD9\x96\xD0\xB8\x03\xB8\x1C\xF8\xAD\x6F\x43\x5C\xA3\x02\xE9\xCE\x78\xE0\x3C\x64\x7C\xD1\xB7\x80\xEB\xBD\x03\xBC\x84\xB8\x63\x57\x02\xAB\x10\x37\xEC\x06\x60\x63\xF5\xEB\x7B\xC8\xFC\xC7\x20\x60\x20\xD0\x1F\x18\x0C\x0C\x05\x46\x02\x23\x6A\xB6\x22\xF9\x5F\xE0\xA7\xC0\xAF\x0B\xBE\x6E\x61\xA8\x40\x3A\x39\x04\xF8\x0A\xF0\x69\x87\xD7\x58\x07\xBC\x00\x3C\x06\xFC\x11\x78\x16\x11\xC7\x0A\xE0\xFD\x0C\xE7\xDD\x8C\xCE\x89\xC6\x91\xC0\xDE\xC0\x38\x60\x77\x60\x27\xDC\x0B\xE7\x09\xE0\x32\xE0\x6A\xC7\xD7\x29\x1C\x15\x08\x7C\x0C\xB8\x00\x19\x78\xBB\xE0\x59\xE0\x5E\x60\x21\xF0\x28\xF0\x27\x47\xD7\xA9\xC7\x08\x64\x1E\x66\x1C\xE2\x79\x3B\x00\x18\xE5\xE8\x5A\xF7\x03\xDF\x47\xDC\xC5\x0D\x41\x33\x0B\xA4\x05\x98\x06\x7C\x8D\xFC\x27\xF1\x96\x20\xA2\xB8\x15\x69\x2D\x42\x0A\xF9\xD8\x0A\xD8\x15\x38\x1C\xF8\x24\xE2\x78\x18\x90\xF3\x35\xAE\x05\xBE\x03\xBC\x9C\xF3\x79\x0B\xA7\x59\x05\xF2\x2F\xC0\xBF\x23\xE1\x1E\x79\xF1\x0A\x70\x73\x75\x7B\x20\xC7\xF3\xBA\x66\x67\x64\xB6\xFF\x53\xC0\x11\xE4\x77\x4F\xD6\x02\xFF\x05\xFC\x27\x32\x86\x2A\x25\xCD\x26\x90\xDD\x81\x8B\x81\x93\x72\x3C\xE7\xBD\xC0\x0D\xC0\xFF\x20\x01\x83\x65\x66\x18\x12\x0D\x70\x32\x22\x98\x3E\x39\x9C\xF3\x31\xA4\x95\x7E\x30\x87\x73\x15\x4E\x33\x09\x64\x2A\xF0\x23\xF2\xEB\x4E\xDC\x0C\x5C\x09\xDC\x95\xD3\xF9\x42\x63\x57\xE0\x14\xC4\xD5\xBD\x57\x0E\xE7\xBB\x04\xF8\x46\x0E\xE7\x29\x94\x66\x10\xC8\x08\xE4\xC3\x39\x3D\x87\x73\x55\x80\xEB\x81\x1F\x23\x5E\xA8\x66\xE1\x64\xE0\x0B\xC0\x31\x19\xCF\xF3\x08\x70\x36\xF0\x78\x56\x83\x8A\xA2\xD1\x05\xD2\x8A\x0C\x18\xF3\x78\x03\xDE\x0C\x5C\x0A\x3C\x94\xC3\xB9\xCA\xCA\x91\x48\x44\xC1\xDF\x67\x38\xC7\x2A\x64\x0C\x78\x53\x2E\x16\x39\xA6\x91\x05\xD2\x86\xCC\xF6\x66\x0D\x0D\xF9\x3D\x70\x11\x32\xD6\x50\x84\x7D\x91\xEE\xD2\x69\x19\xCE\x71\x21\x72\x5F\x83\xA6\x51\x05\xF2\x63\x64\xD2\x2F\x0B\x4B\x91\x01\xFD\x55\x99\xAD\x69\x5C\x0E\x46\xBC\x81\x47\xA7\x3C\xFE\x46\xE0\x9F\x81\x77\x73\xB3\x28\x67\x1A\x4D\x20\x5B\x02\xD7\x20\xF1\x53\x59\xF8\x19\xF0\x5D\x24\xFC\x43\x49\xE6\x73\xC0\xF7\x48\x17\xB3\x76\x27\x30\x99\xB0\xE6\x8A\x3E\xA4\x91\x04\x32\x1C\x99\x98\x3B\x30\xC3\x39\x9E\x46\x66\xD5\x6F\xCB\xC5\xA2\xE6\x62\x10\xF2\x52\xF9\x6A\x8A\x63\x97\x00\x27\x12\xE0\xC4\x62\xA3\x08\x64\x7B\xE4\xA1\xDE\x2F\xC3\x39\xAE\x42\xC4\xB1\x2A\x17\x8B\x9A\x97\x23\x80\x1F\x22\xA1\x2D\x36\xFC\x09\x59\x6B\xB3\x22\x6F\x83\xB2\xD0\x08\x02\xD9\x0E\x69\xA6\xF7\x4E\x79\xFC\x06\x64\xBC\xD2\x9E\x9B\x45\x4A\x1F\x24\x78\x71\xAA\xE5\x71\x4F\x21\x21\x30\x6F\xE4\x6E\x51\x4A\xCA\x2E\x90\x11\x88\x97\x69\x8F\x94\xC7\x3F\x86\x0C\x12\x9F\xC9\xCD\x22\xA5\x96\x29\xC0\x15\xC8\x12\x65\x53\x16\x02\x93\x90\xA5\xBF\xDE\x29\xB3\x40\x06\x00\xF3\x48\xBF\x1E\xFC\x16\xE0\x4C\x02\xF9\x20\x1A\x98\x89\xC8\xE4\xAA\x4D\xC8\xFD\xBD\x48\x57\xCD\xFB\xC3\x59\xE6\xCC\x8A\x73\x48\x2F\x8E\x4B\x90\x30\x8A\x35\xB9\x59\xA3\xD4\x63\x1E\xB2\xD6\xC6\xA6\x95\x3E\x8C\x40\xDC\xEB\x65\x15\xC8\x2C\xD2\x87\x3D\x7C\x95\x12\xC6\x04\x95\x9C\xE7\x91\x6E\x93\x4D\x78\xCE\x14\xE0\x9B\x6E\xCC\x31\xA7\x8C\x5D\xAC\xCF\x03\x3F\x4F\x79\xEC\x14\x64\x9E\x44\xF1\xC3\x08\x24\x43\xCA\xFE\x16\xC7\x4C\x44\x96\xF6\x7A\xA1\x6C\x02\x39\x80\xF4\x19\x35\x3E\x03\xCC\xCD\xD1\x16\x25\x1D\x43\x80\xFB\x30\x77\x03\xAF\x42\x62\xE9\xBC\x4C\xDA\x96\xA9\x8B\x35\x10\x19\xEC\xA5\xE1\xB3\xA8\x38\x42\xE1\xAF\xC8\xA4\xE0\x72\xC3\xFD\xB7\x46\x22\x1B\xBC\x50\x26\x81\x5C\x0A\x8C\x4D\x71\xDC\x54\xE0\x97\x39\xDB\xA2\x64\x63\x19\x22\x92\xB7\x0D\xF7\x3F\x19\xE9\x1E\x17\x4E\x59\xBA\x58\x47\x23\xB9\x98\x6C\xF9\x26\xB2\xE4\x53\x09\x93\x63\x90\xF4\xA6\x26\xAC\x43\x5E\x90\x85\x66\xA6\x2F\x43\x0B\xD2\x0F\x99\x95\xB5\xE5\x7A\x54\x1C\xA1\x73\x3B\xF0\x2D\xC3\x7D\xFB\x23\x19\x53\x0A\xA5\x0C\x2D\xC8\x0F\x80\xAF\x5B\x1E\xF3\x04\x12\xB4\xB8\x21\x7F\x73\x14\x07\xCC\x43\x26\x06\x4D\x38\x84\x02\xD7\xB7\x87\x2E\x90\xD1\x48\x5E\x29\x9B\x50\x85\xB7\x10\x6F\xD7\x73\x4E\x2C\x52\x5C\xB0\x23\x32\x47\xB2\xB5\xC1\xBE\x8F\x00\x1F\x77\x6B\x4E\x27\xA1\x77\xB1\xBE\x8D\x9D\x38\x40\x22\x72\x55\x1C\xE5\x62\x39\xB2\xF0\xCA\x84\x83\xC8\xBE\x36\xDE\x98\x90\x5B\x90\x7D\xB1\x5F\xDC\x7F\x27\x92\xAE\x46\x29\x27\x0B\x90\x4C\x97\x49\x2C\xC6\x6E\xB2\x31\x35\x21\xB7\x20\xB6\x0B\x6F\xDE\x06\xCE\x75\x61\x88\x52\x18\xA6\x21\x40\xFB\x21\x63\x11\xE7\x84\x2A\x90\xB1\xC0\x3F\x5A\x1E\x73\x29\x92\x18\x5A\x29\x2F\xF7\x21\x9E\x2D\x13\x0A\x79\x19\x86\x2A\x90\x2F\x62\x97\xD5\x6F\x25\xB2\x8A\x4D\x29\x3F\x17\x1B\xEE\x77\x0A\x52\x31\xD8\x29\x21\x0A\x64\x4B\xEC\x93\x2E\x5C\x86\xF9\xAC\xAC\x12\x36\xF3\x81\x87\x0D\xF7\x9D\xEC\xD2\x10\x08\x53\x20\xC7\x22\xCB\x68\x4D\x79\x03\x8F\xB1\x3A\x8A\x13\xAE\x30\xDC\xEF\x54\xA4\xB0\x90\x33\x42\x14\xC8\xA9\x96\xFB\xDF\x40\xF9\x93\x46\x2B\x9B\x72\x3B\x12\xD4\x98\xC4\x9E\x38\x2E\xA6\x1A\x9A\x40\x86\x21\x0B\x6B\x6C\xD0\x40\xC4\xC6\xE3\x4D\xCC\x33\x59\x1E\xE5\xD2\x90\xD0\x04\x72\x18\x22\x12\x53\x1E\x47\x12\x2F\x28\x8D\x87\x69\xD6\x7C\xA7\x93\x86\xA1\x09\xE4\x60\xCB\xFD\x1B\xBE\xCA\x6A\x13\x73\x1F\x66\x85\x77\xF6\x02\xB6\x75\x65\x44\x48\x02\xE9\x85\x7D\x12\x86\x86\xA9\x85\xA7\x74\xE3\x39\x24\xD3\x65\x12\x83\xB0\x4F\x52\x67\x4C\x48\x02\xD9\x09\xBB\x32\x05\xAF\x21\x51\xBB\x4A\x63\x52\x41\x02\x13\x4D\x18\xE7\xCA\x88\x90\x04\xB2\x3B\x76\xD5\x9F\x9E\xC6\xCC\xD3\xA1\x94\x17\xD3\x8A\xC0\xBB\xB9\x32\x20\x24\x81\xD8\xE6\xD5\x35\x5D\xD3\xAC\x94\x97\x97\x0C\xF7\xDB\x0D\xD8\xC6\x85\x01\x79\x97\x3F\xCE\xC2\x2E\x96\xFB\xE7\x35\x73\xBE\x19\xB2\x6A\xB1\x3F\x32\x8B\xDF\x07\x69\xDE\x7B\x55\xBF\xAE\x47\xD6\x98\x6C\x00\xDE\xCF\xE9\x9A\x8A\x19\x2B\xE9\xFC\x2C\xE2\x18\x83\x0C\xD4\x73\xCF\xE9\x1B\x92\x40\x76\xB4\xDC\xDF\xF6\x66\xEC\x80\x88\xF0\x23\xC8\x0D\xDD\x11\xC9\xD3\x34\x02\xA9\x1D\xDE\x07\x59\x7B\xB2\x39\x9B\x0A\xE4\x3D\x44\x1C\x6B\x11\xFF\xFC\xAB\x48\x06\xF2\x15\xC0\x8B\xC8\x5B\xEE\xCF\xE8\xEA\x45\x17\xAC\x47\xEE\x7F\xDF\x84\xFD\x86\x60\xB6\xD8\xCA\x9A\x90\x04\x62\x9B\xBB\x35\x2E\x01\x5C\x6F\x44\x04\x07\x21\xD9\xC2\xF7\x41\xEA\x81\x6F\x95\xD6\xB8\x18\xDE\x43\xBA\x7B\xCF\x20\x89\x97\x17\x00\x8B\x90\xB7\x9F\x92\x8D\xF7\x80\x8D\x24\x0B\xA4\x2F\xF9\xD6\xBC\xFF\x90\x50\x04\xD2\x0F\x79\x0B\x24\xB1\x0A\x09\x6B\x9F\x09\xFC\xAD\xCB\xDF\xB6\x40\x8A\x4C\x1E\x0E\x7C\x02\xF1\x6C\x24\xDD\xD8\x3C\xE8\x83\x88\x71\x0C\x52\x63\x1C\xE0\x75\x64\xDD\xF4\x83\xC8\x84\xD7\xF3\x05\xD8\xD1\xEC\x0C\x75\x71\xD2\x50\x04\xD2\x02\x0C\x4E\xD8\xA7\x1D\x49\xE0\xF0\x62\x97\xDF\x1F\x08\x9C\x80\xE4\x4E\xFA\x68\xFE\xA6\xA5\x62\x5B\x24\xD2\x34\x2A\x2D\xF6\x30\x52\x25\xF7\x36\xC4\x3D\xAD\xE4\x4F\x3F\x17\x27\x0D\x45\x20\x83\x90\xCC\x89\x3D\xF1\x2B\x24\x1B\xFB\xE2\x9A\xDF\x0D\x40\xEA\x9E\x4F\xC1\x6C\x89\xA6\x4F\x06\x22\x2D\xDB\x91\x48\x1A\xA2\xDB\x80\xEB\x80\xFB\x7D\x1A\x55\x12\x2A\x98\x97\x40\xD8\xD2\x85\x01\xA1\xB8\x79\x07\xD2\x7D\x81\xD4\x03\x48\x20\xDA\x69\x74\x8A\x63\x24\x70\x3E\xD2\xC7\xFF\x19\xE1\x8B\xA3\x2B\x5B\x23\xC9\xB7\xEF\x43\xEA\x29\x1E\xEB\xD5\x9A\xF0\xD9\x0C\xF3\x32\xDE\x4E\xC2\xDE\x43\x11\x48\xFF\x9A\xEF\x5F\x42\xAA\xA6\x1E\x4A\x67\x28\x49\x3F\x24\xC3\xC9\x13\x48\x6B\xE2\x6C\x62\xA8\x40\x8E\x47\x62\xC9\xEE\xC2\x3E\x82\xB9\x59\xE8\x8B\xF9\xCA\xD2\xF5\x2E\x0C\x08\x45\x20\x83\x11\x37\xE9\x45\x88\xC7\x69\x76\xCD\xDF\x4E\x47\x72\x26\x7D\x07\x47\xAE\x3C\xCF\x1C\x89\xBC\x08\x7E\x83\x64\x72\x51\x3A\xE9\x87\xF9\x30\x60\x9D\x0B\x03\x42\x11\xC8\x13\x48\xB2\xB7\x0B\xE9\xAC\x97\xBD\x17\xD2\x5F\xFF\x05\x12\x86\xD2\xE8\x9C\x80\x2C\x37\xBD\x90\x70\x3E\x17\xDF\xD8\xBC\x10\x1B\x5A\x20\xCB\x81\x27\x6B\x7E\x3E\x1F\x19\x77\x1C\xD7\xF3\xEE\x0D\xCB\x40\xE0\x7B\x48\x0D\x94\x56\xCF\xB6\x84\xC0\x68\xC3\xFD\x36\x02\xAF\xB8\x30\x20\x14\x81\x44\xEC\x8C\x74\x35\x2E\x21\x1C\x0F\x9B\x0F\xC6\x23\x03\xF9\xF3\xFC\x9A\xE1\x1D\xD3\xAC\x25\xAB\x71\x54\x5F\x3D\x24\x81\x4C\x42\x3C\x57\x27\xF8\x36\x24\x10\x06\x22\x93\xA2\xED\xD8\xA5\x40\x6A\x14\x7A\x63\x9E\x83\xF7\x15\x1C\xE5\x25\x08\x45\x20\x6D\xC8\x40\x75\x07\xDF\x86\x04\xC8\x59\xC8\x44\xE3\x28\xCF\x76\x14\x4D\x2B\xB0\xB7\xE1\xBE\xCF\xE0\xA8\x44\x5B\x08\x02\xB9\x00\xA9\x5A\xAB\xD4\xA7\x15\x79\x81\xEC\xEA\xDB\x90\x02\xB1\x49\xC6\xB0\x84\xEE\xA1\x47\xB9\xE0\x5B\x20\x17\xE0\xA1\x28\x4A\x49\x19\x8B\x8C\x4B\x6C\x56\x5D\x96\x19\x9B\x49\x54\x93\xA5\xB9\xA9\xF0\x99\xDD\xFD\x5C\xE0\x27\xBE\x2E\x5E\x62\x56\x02\x7F\x47\x63\x07\x40\xEE\x09\x3C\x65\xB8\xEF\x5A\xA4\x65\x75\x12\xE3\xE6\xAB\x05\x39\x09\x15\x47\x5A\x86\x23\x9E\xBE\xE1\xBE\x0D\x71\xC8\x67\x2C\xF6\x5D\x88\xC3\x00\x50\x1F\x02\x19\x0B\xDC\xE4\xE1\xBA\x8D\xC4\xEE\x48\xF6\x41\xDB\xE2\x42\x65\xA0\x1F\x70\xA6\xC5\xFE\x4E\x53\x3F\x15\x2D\x90\xCD\x91\xE2\x9A\xA6\x01\x68\x4A\x7D\x5A\x81\xAB\x7D\x1B\xE1\x80\x53\xB0\x5B\xFC\x94\xA6\xFA\xB1\x31\x45\x0B\xE4\xBB\x48\x48\x89\x92\x0F\xA7\x23\x75\xE0\x1B\x89\x73\x2C\xF6\x5D\x80\x79\xE6\x93\x54\x14\x29\x90\x83\x81\x7F\x2B\xF0\x7A\xCD\xC2\x15\x34\x8E\x67\xEB\x44\x64\x01\x9C\x29\xB3\x93\x77\xC9\x46\x51\x5E\xAC\xCD\x91\xD8\xAA\x46\xF9\x20\x43\xE3\x01\x64\x79\x40\xD9\x79\x0C\xF3\x6C\xED\x6B\x91\xF1\xEC\xEB\xEE\xCC\x29\xAE\x05\x99\x8A\x8A\xC3\x25\x87\x20\x55\xB9\xCA\xCC\xC9\xD8\x95\x32\xF8\x15\x8E\xC5\x01\xC5\xB4\x20\xC3\x90\x5A\xE7\x8D\xB8\x96\x23\x24\xDE\x44\xA2\x5F\xDF\xF2\x6D\x48\x0A\x06\x20\x3D\x8C\xB1\x86\xFB\x57\x80\x3D\x90\xE7\xCA\x29\x45\xB4\x20\x67\xA3\xE2\x28\x82\x61\x48\xDC\x56\x19\xF9\x0A\xE6\xE2\x00\x29\xF7\xED\x5C\x1C\xE0\xBE\x05\xE9\x87\x64\x21\x19\xE9\xF2\x22\xCA\x87\xFC\x05\x79\xB3\x96\xA9\xE2\xD6\x28\x24\xD8\xD0\x26\xE9\xC2\x04\x64\xCD\x8C\x73\x5C\xB7\x20\x93\x51\x71\x14\xC9\x08\xEC\x66\xA1\x43\xE0\x0A\xEC\xC4\x71\x23\x05\x89\x03\xDC\x0B\xE4\x74\xC7\xE7\x57\xBA\x63\x5B\x21\xD8\x27\xA7\x61\x5F\x42\xED\x5B\x2E\x0C\xA9\x87\x4B\x81\x8C\x44\x32\x1C\x2A\xC5\x72\x28\xE6\xEB\x28\x7C\x32\x1A\xFB\xEA\xC4\x3F\xA4\xE0\x20\x4D\x97\x02\x39\x1C\x47\xD9\xEE\x94\x44\x8E\xF4\x6D\x80\x01\x57\x91\x9C\x4D\xB3\x96\x95\xC0\x7F\x38\xB2\xA5\x2E\x2E\x05\x32\xCE\xE1\xB9\x95\x78\x0E\xF3\x6D\x40\x02\xE7\x62\x6F\xE3\x97\xF1\xE0\xC2\x76\x25\x90\xC1\x68\x56\x0E\x9F\xB4\xE2\x26\x93\x7D\x1E\xEC\x8D\xAC\xB5\xB7\x61\x4E\x75\x2B\x1C\x57\x02\xD9\x0E\x3B\xBF\xB6\x92\x2F\xC3\xB1\x2F\x48\x54\x14\x97\x62\xF7\xDC\xBD\x03\x7C\xCD\x91\x2D\x89\xB8\x12\xC8\x70\x74\x72\xD0\x27\xBD\x09\x33\xC9\xC3\x29\xC0\x11\x96\xC7\x9C\x83\xA3\x94\x3E\x26\xB8\x12\xC8\x8E\x38\xCA\xB6\xAD\x18\xB3\xB3\x6F\x03\x7A\xE0\x5F\x2D\xF7\xBF\x0B\xB8\xD6\x81\x1D\xC6\xB8\x12\xC8\x20\x47\xE7\x55\xCC\x71\x52\x50\x26\x03\xBB\x62\x17\xCA\xFE\x01\x1E\xBB\x56\x11\xAE\x04\x62\x53\xCE\x59\x71\x43\xBD\x7A\x2B\xBE\x38\x1A\xBB\x95\xA4\x97\xE0\x30\x5B\x89\x29\xAE\x04\xD2\xCC\x69\x43\x43\x21\xB4\x56\x7C\x7F\x8B\x7D\xDF\x42\xCA\xEC\x79\xC7\x95\x40\xB4\x5C\xB2\x7F\x9C\x14\x94\xC9\x80\x8D\x57\xB3\x1D\xE8\x70\x65\x88\x0D\xAE\x04\xE2\xA4\x98\x89\x62\x45\x48\x65\xA9\x07\x61\x9E\xA6\x68\x03\x70\xB9\x43\x5B\xAC\x70\x25\x90\x0E\xCC\x6B\xCB\x29\x6E\x08\xE9\x25\x35\x08\xF3\xB0\xA3\xDF\x23\x55\xC6\x82\xC0\x95\x40\x5E\x47\x6A\x36\x28\xFE\x08\xA9\x4E\xFB\x16\x98\x8F\x4B\xE7\xB9\x34\xC4\x16\x57\x02\x79\x95\x02\xD6\x0B\x2B\xB1\x38\x29\x28\x93\x12\xD3\x6A\xB5\x15\xA4\x40\x6B\x30\xB8\x12\xC8\x32\x02\x70\xD1\x35\x39\x21\x09\xE4\x3D\xCC\x1C\x37\x6B\x80\x17\xDC\x9A\x62\x87\xCB\x41\xFA\x1F\x1D\x9D\x5B\x49\x66\x35\x9B\x96\xB4\xF3\xCD\x5F\x91\x98\xAA\x24\x96\x13\x58\xCF\xC3\x65\xB8\xFB\x23\x0E\xCF\xAD\xC4\xF3\x3C\x8E\x0A\xCA\xA4\x64\x3D\x66\x6E\xDB\x37\x09\xCC\xB9\xE3\x5A\x20\x65\x4C\x41\xD3\x08\x3C\xE8\xDB\x80\x1E\x58\x6E\xB0\x4F\x70\xCF\x8B\x4B\x81\xAC\x06\x7E\xE7\xF0\xFC\x4A\x7D\x6E\xF6\x6D\x40\x0F\x98\x8C\x2D\x42\x72\x4D\x03\xEE\x93\x36\x5C\xE7\xF8\xFC\x4A\x77\x9E\x21\x9B\x27\x68\x18\x52\xA0\xE7\x3C\xA4\x0E\xC9\x7D\xE4\x93\x08\xC2\xA4\x05\x71\x52\x46\x2D\x0B\xAE\x63\xA6\xEE\x42\xB2\x6F\xEF\xE1\xF8\x3A\x4A\x27\xB3\x31\xF3\x18\xF5\x47\x16\xB6\xED\x8C\x2C\xAE\xDA\x13\x59\xED\x37\x86\xEE\xE5\x07\x0E\x45\xD2\xC7\xCE\x40\x3E\xD3\x34\xBC\x6C\xB0\xCF\xBB\x29\xCF\xED\x8C\x22\x82\x0A\x2F\x01\xAE\x29\xE0\x3A\x8A\xF4\xE1\x7B\x6A\xB5\x77\xA9\x6E\xBB\x23\x82\x18\x53\xFD\x79\x27\xCC\x67\xB8\x3F\x59\xDD\x6E\x47\xB2\x8B\xDC\x6B\x69\xDB\xB3\x88\x00\xFA\x5A\x1E\xE7\x95\x22\x72\xF3\x6E\x09\x3C\x0E\xEC\xE6\xFA\x42\x0A\x3F\x02\xCE\xEF\xF2\xBB\x99\xC0\x97\xC8\x7F\x09\xC2\x2F\xAA\xD7\x7B\xC2\x70\xFF\x5E\x48\x35\xDA\xB8\x94\x44\xD7\x01\x67\x64\x33\x2B\x5F\x8A\xC8\xCD\xBB\x01\xF8\x7A\x01\xD7\x69\x76\xD6\x22\x5D\xA0\x5A\x8E\x00\xBE\x81\x9B\xF5\x39\x9F\x43\x12\x4E\xFF\x37\xD2\x22\x25\x51\x21\x59\x4C\xFD\xB3\x1A\x95\x37\x45\x95\x3F\xB8\x0D\x98\x5F\xD0\xB5\x9A\x95\x1F\x00\xAB\x6A\x7E\xEE\x0D\x5C\xE4\xF8\x9A\xBD\x91\xE4\xE4\x0B\xAA\xD7\x4F\x2A\x9D\xF6\x58\xC2\xDF\x83\x5B\x68\x57\x64\x85\xA9\xB3\x09\x6C\x12\xA8\x81\x78\x9A\xEE\x0B\x8C\xCE\x42\x92\x3C\x17\xC1\x50\xA4\x97\xB0\x00\xB8\x80\xFA\xAB\x19\x17\x26\x9C\x67\x48\x9E\x46\xE5\x41\x91\x02\x79\x12\xA9\x51\xA8\xE4\xCF\x17\x91\x78\xA7\x88\xED\x11\xE7\x48\xD1\x6C\x07\x7C\x1F\xF9\xAC\xBF\x44\xF7\x01\xF9\x12\xE2\xBD\x59\x23\x81\x3E\x6E\x4C\x4B\x47\xD1\x45\x3C\x67\xE2\xB8\xE8\x62\x13\x72\x31\xDD\xBB\xAF\x3F\xC5\xEF\x92\xDB\x51\x55\x1B\x1E\x46\x12\x54\x47\xCF\xD9\x5A\xE2\xE7\x68\xB6\x06\xB6\x75\x6A\x99\x25\x45\x0B\x64\x03\xE5\x2F\x15\x16\x12\x8F\xD0\xBD\x30\xEA\x59\xC0\x49\x29\xCE\xF5\x3E\xF0\x28\x70\x25\xC9\x5D\x21\x53\xF6\x07\x6E\x00\x1E\xA2\x73\xB2\xF1\x96\x98\xFD\x07\x13\x98\xB7\xD3\x47\x72\x85\x07\x91\x41\xFB\xF1\x1E\xAE\xDD\x48\x2C\xA3\x7B\x2D\x90\x03\x90\x37\xB7\x29\x2F\x23\x05\x40\xE7\x23\xE2\x88\xBC\x4C\xBD\x81\x4F\x03\xFF\x04\x9C\x40\xF6\xF5\xED\x13\xAA\xDB\x29\x48\x12\xB8\x8D\xC8\x22\xAA\x9E\xD8\x07\xB8\x27\xE3\xF5\x72\xA3\xA8\x2A\xB7\x5D\x99\x80\x46\xFB\x66\x61\x1D\x32\xBB\x5D\xFB\xA6\xDF\x01\xE9\xE3\xD7\xCB\x87\xB5\x11\xF8\x3F\x24\x14\x65\x21\x22\x88\x25\x24\x57\xA3\xFA\x38\x52\xE7\xE5\x54\xF2\xCB\x96\xF9\x01\xF5\x7B\x2F\xD7\x13\x50\x5D\x19\x5F\x02\x01\xB8\x1B\x98\xE4\xEB\xE2\x25\xE7\x28\xE4\xFE\x45\x0C\x45\xDE\xBA\xFB\x03\xAF\x21\xA1\xEE\xCB\xAB\xDB\x73\xC0\x52\xA4\x14\xDE\x4B\xA4\x4F\xE6\x30\x12\x79\x70\x4F\xC7\x6D\xC5\xE2\xE7\x90\xCA\x00\x41\x24\x9D\xF0\x29\x90\x33\xD0\x10\x14\x5B\xD6\x20\x83\xDE\x3B\xBA\xFC\x7E\x04\x12\x60\xF8\x02\xD2\x85\xE9\x40\xDE\xD2\x2E\xE8\x83\x74\x8F\xCF\x00\x8E\x73\x70\xFE\x0F\x80\xFD\x30\x9F\xA1\x77\x8A\x4F\x81\xEC\x84\xC4\xE7\x68\x91\x1D\x33\x3A\x80\x13\x09\x6B\xAD\xC7\x04\xE0\xF3\x48\xF7\x2B\xCF\x54\xA7\xE7\x20\x33\xF4\xDE\x29\xDA\x8B\x55\xCB\x32\xA4\x0F\xAC\x24\x33\x1F\xD8\x97\xB0\xC4\x01\x32\x8E\x99\x8A\xC4\x57\x9D\x0F\x3C\x95\xD3\x79\x3F\x95\xD3\x79\x32\xE3\x53\x20\x20\xFD\x4D\x25\x9E\x6B\x80\x63\x30\x5B\x4F\xE1\x8B\x57\x91\xC0\xC5\x8F\x21\xEE\xDC\xDF\x66\x3C\xDF\x01\x04\x92\x5B\xD8\xB7\x40\x96\x79\xBE\x7E\xC8\xBC\x8D\xCC\x19\x4D\xA9\x7E\x5F\x06\x36\x20\x65\x9A\x8F\x07\x0E\x42\x8A\x74\xA6\xA9\xD9\xBE\x0D\x81\x14\x80\xF5\x2D\x90\x35\x9E\xAF\x1F\x2A\xBF\x41\x3C\x39\xB3\x3C\xDB\x91\x85\x47\x91\xF8\xBB\x7D\x91\x88\xE2\xC5\x96\xC7\x9F\x98\xBB\x45\x29\xF0\x2D\x10\xCD\xBE\xB8\x29\x2F\x21\x2D\xC6\x49\x88\x6B\xB6\x11\x58\x81\xC4\x85\x1D\x88\x4C\x3C\xDE\x1D\xBF\xFB\x87\x1C\x4B\x00\xE1\xEF\xBE\x05\x62\x53\x06\xB8\x91\x79\x1B\x09\x17\x1F\x47\xE3\xBA\xBE\x37\x22\x61\x27\x47\x21\xF3\x35\x97\x03\x6F\xC4\xEC\xBF\x13\x52\x53\xC4\x2B\xBE\x05\xD2\xEC\x75\x0C\xD7\x02\x3F\x41\xAA\xD2\x4E\x23\xC0\xB4\x37\x8E\x58\x8C\x44\xFB\x8E\x43\xCA\xB2\xD5\x0B\x60\x3C\xAD\x28\x83\xEA\xE1\x73\x1E\x04\x60\x2E\xE2\x43\x6F\x36\x5E\x46\xDE\xA6\xD7\x21\x49\xDE\x9A\x9D\x3E\x48\x97\xEA\x2C\x36\x75\xF1\xBE\x8B\xAC\x9D\xF7\x56\xC4\xD3\xB7\x40\x16\xD2\x3C\xF5\xD4\xD7\x21\xF3\x19\x73\x11\x4F\x4F\x59\x3C\x53\x45\xB3\x07\xF0\x59\xE0\x4C\x24\x42\x60\x36\xB2\xBC\xD7\x0B\x3E\x05\x32\x04\x79\x7B\x9A\x16\x56\x31\xA1\x03\x19\xDC\xEE\x45\x18\xD9\x33\xD6\x03\xF7\x23\xC2\xF8\x35\x9A\xD0\xDB\x86\xE1\xC0\x17\x90\x6E\xD8\x59\x48\x7E\xDF\xC2\xF1\x29\x90\x4F\x90\xDF\x3A\xF5\x65\x48\x97\xA5\x1D\x69\x8E\x77\x06\xC6\x03\x87\x54\xBF\x8E\xA2\x98\xF1\xCE\x3A\x24\x62\x76\x31\x12\x2F\xF5\x07\xE0\xCF\x05\x5C\xB7\xD1\xE9\x8F\xDC\xDB\xC2\xF1\x29\x90\x2F\x03\x97\x65\x3C\xC7\x43\xC0\xD5\x48\xAA\xCD\xB8\x01\xEE\x76\x48\xD3\xBD\x27\xD2\xBA\x8C\x45\xC2\xC3\xB7\x21\x9D\x27\x6D\x03\xD2\x5A\x2D\x47\x04\xF0\x14\x12\x5C\xF7\x34\x22\x10\xA5\x41\xF0\x59\x8D\xF6\xA0\x94\xC7\xFD\x0D\xB8\x09\xC9\xCB\x74\xBB\xE1\x31\xAF\x56\xB7\xDA\xEA\x45\x03\x90\x34\x9B\xA3\x90\xD6\x65\xAB\x9A\x6D\x33\x3A\x13\x4C\xF4\x42\xBA\x4A\x6F\x22\x13\x9B\x1D\x48\x2B\xF5\x0A\x22\xCA\xE0\xD2\x65\x2A\xF9\xE1\xAB\x05\x19\x80\xC4\x61\x25\xA5\x89\xA9\x65\x05\xB2\x98\xE6\x5A\x34\x86\x4B\x29\x08\x5F\x2D\xC8\x81\x98\x8B\xE3\x21\xC4\x93\x71\x23\x1A\x9A\xA2\x14\x8C\x2F\x81\x1C\x95\xF0\xF7\xF7\x81\x5B\x91\xF1\xC5\x9D\xB8\x5B\xFC\xA3\x28\xB1\xF8\x12\xC8\xB1\x75\x7E\xBF\x02\xE9\x42\xCD\x46\x27\xD0\x94\x00\xF0\x21\x90\x7D\x11\x6F\x52\x2D\xF3\x11\x51\xCC\x41\xBB\x51\x4A\x40\xF8\x10\xC8\x79\xD5\xAF\xEB\x91\xB0\xEE\x2B\x91\xE2\xF1\x8A\x12\x1C\x45\x7B\xB1\x06\x23\x63\x8B\xFB\x91\x16\x43\xE7\x0C\x94\xA0\xF1\x1D\x8B\xA5\x28\x41\xE3\x3B\xDC\x5D\x51\x82\x46\x05\xA2\x28\x31\xA8\x40\x14\x25\x06\x15\x88\xA2\xC4\xE0\x33\x58\x51\xC9\xCE\x68\x60\x22\xD0\x82\x2C\x3C\x6B\xA9\xF9\xDB\x22\x24\xB0\x72\x51\xCD\xF7\x8A\x2D\x95\x4A\x25\xCD\x36\xB1\x92\x4C\xD2\x39\x5A\x0D\xCE\x51\xA9\x54\x2A\x6D\x19\xAF\x99\x87\xAD\x45\xDC\x0F\xD3\xAD\xA5\x52\xA9\x4C\xAB\x54\x2A\x2F\x1A\x5C\xB3\x96\x85\x15\xB9\x97\x2D\x39\x5C\x7F\x75\xC2\xB5\xEE\xA9\x73\xEC\x8C\x84\xE3\x56\xA7\xB4\x6F\x9A\xC1\x79\x47\xA7\xF9\x7F\x7D\x75\xB1\x46\x63\x56\x03\x62\x26\xB2\x08\x4A\x11\x26\x23\x59\xDA\x67\x20\xF7\xD0\x86\x56\x24\xCF\xD6\x8B\x48\x82\x88\x2C\x36\xB4\x24\xEC\x33\x91\x9E\xED\x9B\x49\x7C\x3A\xA3\x16\xBA\x57\xEA\x4D\x62\x34\xC9\xFF\x4F\xD2\x75\xEB\xE2\x43\x20\x2D\x48\x48\x49\xD2\x4D\x9E\x0B\x4C\x77\x6F\x4E\x69\x98\x81\xD9\x7D\x4B\x22\x7A\x08\xD3\xE6\x03\x98\x9C\x61\xBF\x0E\x92\x3F\xD3\x36\x44\x60\xA6\xCC\x22\xFE\x9E\x2C\xA2\x7B\x81\x53\x63\x7C\x08\x64\x16\xC9\x1F\xCC\x22\x24\x29\xB2\x22\x4C\x23\xDB\x5B\xBF\x27\x5A\x91\x56\xDC\x46\x24\xD1\x98\xC7\x84\xB6\x3A\xBF\x9F\x5B\xDD\xE2\x30\xCD\x28\x69\x22\xA6\x4C\xCF\x51\xD1\x02\x99\x45\xF2\x1B\xA8\x03\x29\x2D\xA6\x83\x4A\xA1\x15\xFB\x6E\x87\x29\x2D\xD8\x89\xA4\xDE\x43\xDF\x13\x71\x62\x9A\x4A\xFC\xE7\x6B\xD2\x6D\x32\xE9\x8E\xCD\x24\xBE\x68\x68\x22\x45\x0A\xA4\x0D\xB3\x1B\x3C\x89\xC6\x49\xBB\x99\x07\x36\x0F\x65\x1A\x22\x0F\x98\x09\xA6\xDD\xAB\xA4\xFD\x3B\x48\xEE\xF6\xCC\x20\xDE\xAE\x19\xC4\x77\xAD\x96\x1A\x5C\x23\x91\xA2\x04\x32\x11\xB3\x66\x73\x2A\x19\x15\xDF\x80\x98\x08\xA4\x03\x59\x6F\x3F\xBD\xBA\xB5\xB3\xE9\xFA\xFB\xB8\xE3\x26\x61\xE6\x08\x99\x8C\xBD\x63\x20\x6E\x40\x3F\x93\x64\x1B\xEB\xB5\x10\x13\x49\xBE\x2F\x49\xAD\x94\x19\x69\x5C\x5F\x15\x3B\xB7\x66\x6B\x25\xD9\x2D\x58\xA9\x88\x0B\xD0\x85\x2B\xB5\xCC\x6E\x5E\x13\x57\xF8\xAC\x4A\xBC\x6B\xB4\xAD\x22\x6E\xD7\xAE\x2C\xAC\x9E\xDF\xD4\x96\x59\x06\xB6\xF4\x44\xE4\xA6\x4F\xFB\xFF\x4D\xEB\x72\x4C\x4B\x25\xD9\xC5\x3D\x27\xE6\x9A\x41\xB9\x79\x5B\x48\xF6\x32\x80\x7A\xAC\xEA\x61\xE2\xB1\x4A\x7A\x53\xB6\x23\xAD\xC4\x24\x3A\x5B\xE7\x79\x5D\x7E\x36\xB1\x23\x6D\x57\x2F\xAE\x5B\xB6\x88\xE4\xCF\x7D\x1A\x9B\xDE\x87\x36\xE2\x5B\xB2\x0E\x72\x74\xF0\xB8\x16\xC8\x1C\xD4\x63\x95\x05\x93\xB1\x98\xE9\x83\x1B\x89\x62\x7A\xF5\xAB\x4D\xF7\xC3\x76\xEC\x51\x4B\xBD\x39\x91\x88\x76\x92\xE7\x46\xA2\xEE\xB9\x89\xC3\x62\x26\x39\x3A\x78\x5C\x0A\x64\x16\xC9\x2E\x38\xF5\x58\xC5\xB3\x94\xE4\x7B\x33\x0B\xF1\x44\x4D\xA3\x33\xEC\xA4\x1E\x26\x83\xE3\x9E\xC8\xEA\x28\x88\x3B\xDE\xE4\x8D\x3F\xB9\xBA\x25\x89\x63\x1E\x39\x0C\xCC\x6B\x71\x29\x10\xF5\x58\xE5\x83\xC9\x60\x7B\x22\xF2\xF0\xDC\x83\x94\x3C\xAB\x20\x33\xE6\xB5\xC2\x49\xCB\x68\xCC\x7A\x01\x71\x24\xB5\x40\xF3\x48\x76\x14\xCC\x21\xF9\xFF\xC8\xBD\x9B\xEE\x33\x9A\x57\x3D\x56\x66\xA4\x0D\xB5\x89\xE6\x21\x22\xE1\x54\x30\x7B\xC8\xBA\x92\xF4\xA2\x8B\x7A\x01\x49\xB6\x24\x89\x64\x3A\xD9\x7A\x12\xD3\x71\xF0\x3C\xF9\x12\x88\xC6\x58\x99\x63\xF2\x76\x35\x65\x32\x22\x96\x17\xC9\x3E\x23\x1E\x11\x8D\x21\x92\x1E\x4E\x93\xEE\x76\xDA\x16\x20\x97\x39\x8F\x9E\xF0\x21\x90\xA5\xA8\xC7\xCA\x96\xA9\xE4\xFB\x42\x89\x82\x45\x93\xFA\xF4\x26\x81\x89\x51\xD8\x48\x92\x7D\x6D\x06\xE7\x32\x9D\xBF\xE9\x8A\x33\x27\x8F\x0F\x81\x98\x84\x11\x28\xDD\x99\x8A\x74\x65\xF2\x1C\xB3\x4D\x23\x5E\x24\x49\xDD\xA2\x68\xAD\x09\x24\xC7\x57\x99\x9C\x0F\xEC\x1F\xF6\xB4\xA2\x32\xC2\x57\x17\x6B\x06\xD9\x5C\x87\xCD\xCA\x5C\x60\x0C\xF9\x8E\xDF\xEA\x0D\xE2\x5B\x48\xFE\x8C\x6A\x5B\x8D\x0E\x92\x45\x62\xE2\xB8\xB1\xE9\x61\x64\xE9\x96\x19\xE1\x73\x90\x6E\x12\xD5\xAB\xF4\x4C\x3B\x52\x18\x28\x12\x4B\x3B\xD9\x04\xD3\xD3\x83\x6B\xF2\x30\x77\x15\x44\x92\x40\x5A\x31\x0B\x57\x31\x0D\x32\xCC\x3A\xB0\x4F\xC4\xE5\x92\xDB\x76\xE2\x6F\x72\xB4\x2E\x64\x3C\x3A\x0F\x92\x96\xA5\x74\xEF\xFB\x8F\xEE\xB2\x4D\x24\xF9\x45\xD4\x53\x4B\x91\xD4\x7A\x2C\x25\xDD\xFC\x48\x1B\x66\x6F\xFD\x99\xC8\xF3\x11\x87\x73\x47\x8F\x4B\x81\x4C\x47\x3E\x98\xB8\x0F\x27\x1A\x2C\x8E\x77\x68\x47\x23\x32\x91\xFA\xFD\xEE\xA5\x74\x1F\xA7\xB4\x91\x1C\x2C\xDA\x4A\xE7\x5B\x3B\xE9\x73\x03\xF9\xEC\xD2\x84\xE1\x9B\x0A\x24\x88\x97\xA6\xCB\x2E\x56\x14\x29\x9A\xF4\x8F\x46\x4B\x41\x15\x33\xA2\x99\xF3\x85\x98\x47\xD7\x9A\xBC\x69\x6B\x3D\x4C\x2E\xC7\x87\x26\x63\x9B\x60\x70\x9D\xD5\x24\x12\xC9\x3D\xC4\xBB\xF8\xDA\x70\xE8\xCB\x36\x20\x8D\x57\x6D\x2E\x76\x1E\xA5\xAC\xD7\x88\xBA\xA4\xD1\x80\xBA\x15\x99\xCF\x68\x27\x79\x0C\x62\x7B\x6D\xD7\x6B\x50\x26\x63\xE6\xF5\xF2\x4E\x11\x69\x7F\xA2\x88\xCD\xA4\x56\x62\x06\xF2\x30\xF8\xB8\x71\x69\xBA\x0A\x8B\xB0\x13\x48\x96\x6B\x44\xAD\x6C\x4F\xDD\x9E\x68\x21\x5A\x34\x59\x57\x2B\x94\xE8\x6D\x6D\xD2\xD2\x44\xC7\x99\xCC\x57\x64\x25\x9A\x5F\x09\xA2\x1B\x15\x47\x51\x79\xB1\xDA\x31\x5B\x22\x39\x0B\xB3\x59\xD9\x66\x62\x22\x66\xC9\x1A\xA2\x41\x79\x9A\xEE\xCB\x3C\x3A\x1F\xD6\x2C\x71\x5B\x36\xB4\xE1\xAF\xC7\x60\x4C\x91\x6E\x5E\x93\xF0\x12\xD3\x8C\x27\xCD\x86\xEB\xFB\x11\x7D\x2E\x69\x05\x96\x86\x52\x8C\x43\x8A\x9E\x07\x31\x09\x28\x33\xCD\x99\xD5\x2C\xCC\xC3\xED\x7A\x99\x76\x3A\xBB\xB5\x26\x09\x35\x86\x22\xA5\xB1\x93\xB6\x49\x09\xE7\x32\xF1\x94\x79\xA7\x68\x81\xA8\x67\x2B\x1D\xD1\xC4\x60\xDE\x4B\x03\xDA\xD9\x54\x7C\x49\x83\xF3\xB9\x98\x8F\x1B\xE6\x91\x6C\x6F\xF0\xAD\x88\x8F\x99\x74\x53\x91\xB4\xA1\x31\x5B\xB5\x2C\x42\x44\x92\x57\x68\xC5\x74\x36\x15\x87\xC9\x2C\xB7\xED\xC4\x9C\x49\x00\x63\xD0\xF8\x0A\x35\x31\x59\x8B\x0C\x1A\xB3\xD5\x95\x68\x45\xE0\x50\xE4\xFE\xD9\xB6\x28\x1D\xC8\x43\x3B\x86\xEE\x03\xE4\xA4\x87\x35\x8D\xF3\x24\xC9\x23\x99\x65\xAD\x7B\x21\x68\x09\xB6\xF2\x13\x85\x93\xD4\x5B\xF9\x17\x65\x78\xF7\xE5\x42\x2F\x35\x2A\x10\x45\x89\x41\x0B\xE8\x28\x4A\x0C\x2A\x10\x45\x89\x41\x05\xA2\x28\x31\xA8\x40\x14\x25\x06\x15\x88\xA2\xC4\xA0\x02\x51\x94\x18\x54\x20\x8A\x12\x83\x0A\x44\x51\x62\x50\x81\x28\x4A\x0C\x2A\x10\x45\x89\x41\x05\xA2\x28\x31\xFC\x3F\x0A\x00\xEF\x12\x6A\x59\xC5\x19\x00\x00\x00\x00\x49\x45\x4E\x44\xAE\x42\x60\x82"