diff options
author | chai <chaifix@163.com> | 2018-12-22 13:45:32 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-12-22 13:45:32 +0800 |
commit | df70a616f58aa51ff6375a824fc18cbbc369e43b (patch) | |
tree | b519fdfb2ae07de3d8dd2d08afdb7efe65457d7b /src | |
parent | 8422546ca0524e9d1f96b858d0f914fe9e6e9bff (diff) |
+statemachine
Diffstat (limited to 'src')
-rw-r--r-- | src/libjin-lua/je_lua_embed.h | 14 | ||||
-rw-r--r-- | src/libjin-lua/scripts/ai/state_machine.lua | 182 | ||||
-rw-r--r-- | src/libjin-lua/scripts/ai/state_machine.lua.h | 260 |
3 files changed, 445 insertions, 11 deletions
diff --git a/src/libjin-lua/je_lua_embed.h b/src/libjin-lua/je_lua_embed.h index a14af5e..ba3945f 100644 --- a/src/libjin-lua/je_lua_embed.h +++ b/src/libjin-lua/je_lua_embed.h @@ -16,6 +16,7 @@ namespace JinEngine }; // Embed scripts. + #include "scripts/ai/state_machine.lua.h" #include "scripts/graphics/graphics.lua.h" #include "scripts/keyboard/keyboard.lua.h" #include "scripts/mouse/mouse.lua.h" @@ -24,11 +25,14 @@ namespace JinEngine // In order. static const jin_Embed modules[] = { - { "keyboard.lua", keyboard_lua }, - { "mouse.lua", mouse_lua }, - { "graphics.lua", graphics_lua }, - { "path.lua", path_lua }, - { 0, 0 } + // ai + { "state_machine.lua", state_machine_lua }, + // keyboard + { "keyboard.lua", keyboard_lua }, + { "mouse.lua", mouse_lua }, + { "graphics.lua", graphics_lua }, + { "path.lua", path_lua }, + { 0, 0 } }; static const jin_Embed bootscript = { "app.lua", app_lua }; diff --git a/src/libjin-lua/scripts/ai/state_machine.lua b/src/libjin-lua/scripts/ai/state_machine.lua index b4ec768..296296f 100644 --- a/src/libjin-lua/scripts/ai/state_machine.lua +++ b/src/libjin-lua/scripts/ai/state_machine.lua @@ -1,7 +1,185 @@ jin.ai = jin.ai or {} -local statemachine = {} +--[[ -jin.ai.newStateMachine = function() +https://github.com/kyleconroy/lua-state-machine +Copyright (c) 2012 Kyle Conroy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +]] +local machine = {} +machine.__index = machine + +local NONE = "none" +local ASYNC = "async" + +local function call_handler(handler, params) + if handler then + return handler(unpack(params)) + end +end + +local function create_transition(name) + local can, to, from, params + + local function transition(self, ...) + if self.asyncState == NONE then + can, to = self:can(name) + from = self.current + params = { self, name, from, to, ...} + + if not can then return false end + self.currentTransitioningEvent = name + + local beforeReturn = call_handler(self["onbefore" .. name], params) + local leaveReturn = call_handler(self["onleave" .. from], params) + + if beforeReturn == false or leaveReturn == false then + return false + end + + self.asyncState = name .. "WaitingOnLeave" + + if leaveReturn ~= ASYNC then + transition(self, ...) + end + + return true + elseif self.asyncState == name .. "WaitingOnLeave" then + self.current = to + + local enterReturn = call_handler(self["onenter" .. to] or self["on" .. to], params) + + self.asyncState = name .. "WaitingOnEnter" + + if enterReturn ~= ASYNC then + transition(self, ...) + end + + return true + elseif self.asyncState == name .. "WaitingOnEnter" then + call_handler(self["onafter" .. name] or self["on" .. name], params) + call_handler(self["onstatechange"], params) + self.asyncState = NONE + self.currentTransitioningEvent = nil + return true + else + if string.find(self.asyncState, "WaitingOnLeave") or string.find(self.asyncState, "WaitingOnEnter") then + self.asyncState = NONE + transition(self, ...) + return true + end + end + + self.currentTransitioningEvent = nil + return false + end + + return transition +end + +local function add_to_map(map, event) + if type(event.from) == 'string' then + map[event.from] = event.to + else + for _, from in ipairs(event.from) do + map[from] = event.to + end + end end + +function machine.create(options) + assert(options.events) + + local fsm = {} + setmetatable(fsm, machine) + + fsm.options = options + fsm.current = options.initial or 'none' + fsm.asyncState = NONE + fsm.events = {} + + for _, event in ipairs(options.events or {}) do + local name = event.name + fsm[name] = fsm[name] or create_transition(name) + fsm.events[name] = fsm.events[name] or { map = {} } + add_to_map(fsm.events[name].map, event) + end + + for name, callback in pairs(options.callbacks or {}) do + fsm[name] = callback + end + + return fsm +end + +function machine:is(state) + return self.current == state +end + +function machine:can(e) + local event = self.events[e] + local to = event and event.map[self.current] or event.map['*'] + return to ~= nil, to +end + +function machine:cannot(e) + return not self:can(e) +end + +function machine:todot(filename) + local dotfile = io.open(filename,'w') + dotfile:write('digraph {\n') + local transition = function(event,from,to) + dotfile:write(string.format('%s -> %s [label=%s];\n',from,to,event)) + end + for _, event in pairs(self.options.events) do + if type(event.from) == 'table' then + for _, from in ipairs(event.from) do + transition(event.name,from,event.to) + end + else + transition(event.name,event.from,event.to) + end + end + dotfile:write('}\n') + dotfile:close() +end + +function machine:transition(event) + if self.currentTransitioningEvent == event then + return self[self.currentTransitioningEvent](self) + end +end + +function machine:cancelTransition(event) + if self.currentTransitioningEvent == event then + self.asyncState = NONE + self.currentTransitioningEvent = nil + end +end + +machine.NONE = NONE +machine.ASYNC = ASYNC + +-- Import to Jin. + +jin.ai.newStateMachine = machine.create diff --git a/src/libjin-lua/scripts/ai/state_machine.lua.h b/src/libjin-lua/scripts/ai/state_machine.lua.h index 5c78cd6..99eb6a6 100644 --- a/src/libjin-lua/scripts/ai/state_machine.lua.h +++ b/src/libjin-lua/scripts/ai/state_machine.lua.h @@ -1,9 +1,261 @@ /*Auto generated, don't modify by hand.*/ static char state_machine_lua[] = { 106,105,110,46,97,105,32,61,32,106,105,110,46,97,105,32,111,114,32,123, -125,32,13,10,13,10,108,111,99,97,108,32,115,116,97,116,101,109,97,99, -104,105,110,101,32,61,32,123,125,13,10,13,10,106,105,110,46,97,105,46, -110,101,119,83,116,97,116,101,77,97,99,104,105,110,101,32,61,32,102,117, -110,99,116,105,111,110,40,41,32,13,10,13,10,101,110,100,13,10 +125,32,13,10,13,10,45,45,91,91,13,10,13,10,104,116,116,112,115,58, +47,47,103,105,116,104,117,98,46,99,111,109,47,107,121,108,101,99,111,110, +114,111,121,47,108,117,97,45,115,116,97,116,101,45,109,97,99,104,105,110, +101,13,10,13,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50, +48,49,50,32,75,121,108,101,32,67,111,110,114,111,121,13,10,13,10,80, +101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32, +103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97, +114,103,101,44,32,116,111,32,97,110,121,32,112,101,114,115,111,110,32,111, +98,116,97,105,110,105,110,103,32,97,32,99,111,112,121,13,10,111,102,32, +116,104,105,115,32,115,111,102,116,119,97,114,101,32,97,110,100,32,97,115, +115,111,99,105,97,116,101,100,32,100,111,99,117,109,101,110,116,97,116,105, +111,110,32,102,105,108,101,115,32,40,116,104,101,32,34,83,111,102,116,119, +97,114,101,34,41,44,32,116,111,32,100,101,97,108,13,10,105,110,32,116, +104,101,32,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32, +114,101,115,116,114,105,99,116,105,111,110,44,32,105,110,99,108,117,100,105, +110,103,32,119,105,116,104,111,117,116,32,108,105,109,105,116,97,116,105,111, +110,32,116,104,101,32,114,105,103,104,116,115,13,10,116,111,32,117,115,101, +44,32,99,111,112,121,44,32,109,111,100,105,102,121,44,32,109,101,114,103, +101,44,32,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117, +116,101,44,32,115,117,98,108,105,99,101,110,115,101,44,32,97,110,100,47, +111,114,32,115,101,108,108,13,10,99,111,112,105,101,115,32,111,102,32,116, +104,101,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32, +112,101,114,109,105,116,32,112,101,114,115,111,110,115,32,116,111,32,119,104, +111,109,32,116,104,101,32,83,111,102,116,119,97,114,101,32,105,115,13,10, +102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32, +115,117,98,106,101,99,116,32,116,111,32,116,104,101,32,102,111,108,108,111, +119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,58,13,10,13,10, +84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32, +110,111,116,105,99,101,32,97,110,100,32,116,104,105,115,32,112,101,114,109, +105,115,115,105,111,110,32,110,111,116,105,99,101,32,115,104,97,108,108,32, +98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,13,10, +99,111,112,105,101,115,32,111,114,32,115,117,98,115,116,97,110,116,105,97, +108,32,112,111,114,116,105,111,110,115,32,111,102,32,116,104,101,32,83,111, +102,116,119,97,114,101,46,13,10,13,10,84,72,69,32,83,79,70,84,87, +65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32, +73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82,82,65,78,84, +89,32,79,70,32,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69, +83,83,32,79,82,13,10,73,77,80,76,73,69,68,44,32,73,78,67,76, +85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69, +68,32,84,79,32,84,72,69,32,87,65,82,82,65,78,84,73,69,83,32, +79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,13, +10,70,73,84,78,69,83,83,32,70,79,82,32,65,32,80,65,82,84,73, +67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79, +78,73,78,70,82,73,78,71,69,77,69,78,84,46,32,73,78,32,78,79, +32,69,86,69,78,84,32,83,72,65,76,76,32,84,72,69,13,10,65,85, +84,72,79,82,83,32,79,82,32,67,79,80,89,82,73,71,72,84,32,72, +79,76,68,69,82,83,32,66,69,32,76,73,65,66,76,69,32,70,79,82, +32,65,78,89,32,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32, +79,82,32,79,84,72,69,82,13,10,76,73,65,66,73,76,73,84,89,44, +32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79, +78,32,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32, +79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78, +71,32,70,82,79,77,44,13,10,79,85,84,32,79,70,32,79,82,32,73, +78,32,67,79,78,78,69,67,84,73,79,78,32,87,73,84,72,32,84,72, +69,32,83,79,70,84,87,65,82,69,32,79,82,32,84,72,69,32,85,83, +69,32,79,82,32,79,84,72,69,82,32,68,69,65,76,73,78,71,83,32, +73,78,32,84,72,69,13,10,83,79,70,84,87,65,82,69,46,13,10,13, +10,93,93,13,10,108,111,99,97,108,32,109,97,99,104,105,110,101,32,61, +32,123,125,13,10,109,97,99,104,105,110,101,46,95,95,105,110,100,101,120, +32,61,32,109,97,99,104,105,110,101,13,10,13,10,108,111,99,97,108,32, +78,79,78,69,32,61,32,34,110,111,110,101,34,13,10,108,111,99,97,108, +32,65,83,89,78,67,32,61,32,34,97,115,121,110,99,34,13,10,13,10, +108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,99,97,108,108,95, +104,97,110,100,108,101,114,40,104,97,110,100,108,101,114,44,32,112,97,114, +97,109,115,41,13,10,32,32,105,102,32,104,97,110,100,108,101,114,32,116, +104,101,110,13,10,32,32,32,32,114,101,116,117,114,110,32,104,97,110,100, +108,101,114,40,117,110,112,97,99,107,40,112,97,114,97,109,115,41,41,13, +10,32,32,101,110,100,13,10,101,110,100,13,10,13,10,108,111,99,97,108, +32,102,117,110,99,116,105,111,110,32,99,114,101,97,116,101,95,116,114,97, +110,115,105,116,105,111,110,40,110,97,109,101,41,13,10,32,32,108,111,99, +97,108,32,99,97,110,44,32,116,111,44,32,102,114,111,109,44,32,112,97, +114,97,109,115,13,10,13,10,32,32,108,111,99,97,108,32,102,117,110,99, +116,105,111,110,32,116,114,97,110,115,105,116,105,111,110,40,115,101,108,102, +44,32,46,46,46,41,13,10,32,32,32,32,105,102,32,115,101,108,102,46, +97,115,121,110,99,83,116,97,116,101,32,61,61,32,78,79,78,69,32,116, +104,101,110,13,10,32,32,32,32,32,32,99,97,110,44,32,116,111,32,61, +32,115,101,108,102,58,99,97,110,40,110,97,109,101,41,13,10,32,32,32, +32,32,32,102,114,111,109,32,61,32,115,101,108,102,46,99,117,114,114,101, +110,116,13,10,32,32,32,32,32,32,112,97,114,97,109,115,32,61,32,123, +32,115,101,108,102,44,32,110,97,109,101,44,32,102,114,111,109,44,32,116, +111,44,32,46,46,46,125,13,10,13,10,32,32,32,32,32,32,105,102,32, +110,111,116,32,99,97,110,32,116,104,101,110,32,114,101,116,117,114,110,32, +102,97,108,115,101,32,101,110,100,13,10,32,32,32,32,32,32,115,101,108, +102,46,99,117,114,114,101,110,116,84,114,97,110,115,105,116,105,111,110,105, +110,103,69,118,101,110,116,32,61,32,110,97,109,101,13,10,13,10,32,32, +32,32,32,32,108,111,99,97,108,32,98,101,102,111,114,101,82,101,116,117, +114,110,32,61,32,99,97,108,108,95,104,97,110,100,108,101,114,40,115,101, +108,102,91,34,111,110,98,101,102,111,114,101,34,32,46,46,32,110,97,109, +101,93,44,32,112,97,114,97,109,115,41,13,10,32,32,32,32,32,32,108, +111,99,97,108,32,108,101,97,118,101,82,101,116,117,114,110,32,61,32,99, +97,108,108,95,104,97,110,100,108,101,114,40,115,101,108,102,91,34,111,110, +108,101,97,118,101,34,32,46,46,32,102,114,111,109,93,44,32,112,97,114, +97,109,115,41,13,10,13,10,32,32,32,32,32,32,105,102,32,98,101,102, +111,114,101,82,101,116,117,114,110,32,61,61,32,102,97,108,115,101,32,111, +114,32,108,101,97,118,101,82,101,116,117,114,110,32,61,61,32,102,97,108, +115,101,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,114,101,116, +117,114,110,32,102,97,108,115,101,13,10,32,32,32,32,32,32,101,110,100, +13,10,13,10,32,32,32,32,32,32,115,101,108,102,46,97,115,121,110,99, +83,116,97,116,101,32,61,32,110,97,109,101,32,46,46,32,34,87,97,105, +116,105,110,103,79,110,76,101,97,118,101,34,13,10,13,10,32,32,32,32, +32,32,105,102,32,108,101,97,118,101,82,101,116,117,114,110,32,126,61,32, +65,83,89,78,67,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32, +116,114,97,110,115,105,116,105,111,110,40,115,101,108,102,44,32,46,46,46, +41,13,10,32,32,32,32,32,32,101,110,100,13,10,32,32,32,32,32,32, +13,10,32,32,32,32,32,32,114,101,116,117,114,110,32,116,114,117,101,13, +10,32,32,32,32,101,108,115,101,105,102,32,115,101,108,102,46,97,115,121, +110,99,83,116,97,116,101,32,61,61,32,110,97,109,101,32,46,46,32,34, +87,97,105,116,105,110,103,79,110,76,101,97,118,101,34,32,116,104,101,110, +13,10,32,32,32,32,32,32,115,101,108,102,46,99,117,114,114,101,110,116, +32,61,32,116,111,13,10,13,10,32,32,32,32,32,32,108,111,99,97,108, +32,101,110,116,101,114,82,101,116,117,114,110,32,61,32,99,97,108,108,95, +104,97,110,100,108,101,114,40,115,101,108,102,91,34,111,110,101,110,116,101, +114,34,32,46,46,32,116,111,93,32,111,114,32,115,101,108,102,91,34,111, +110,34,32,46,46,32,116,111,93,44,32,112,97,114,97,109,115,41,13,10, +13,10,32,32,32,32,32,32,115,101,108,102,46,97,115,121,110,99,83,116, +97,116,101,32,61,32,110,97,109,101,32,46,46,32,34,87,97,105,116,105, +110,103,79,110,69,110,116,101,114,34,13,10,13,10,32,32,32,32,32,32, +105,102,32,101,110,116,101,114,82,101,116,117,114,110,32,126,61,32,65,83, +89,78,67,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,116,114, +97,110,115,105,116,105,111,110,40,115,101,108,102,44,32,46,46,46,41,13, +10,32,32,32,32,32,32,101,110,100,13,10,32,32,32,32,32,32,13,10, +32,32,32,32,32,32,114,101,116,117,114,110,32,116,114,117,101,13,10,32, +32,32,32,101,108,115,101,105,102,32,115,101,108,102,46,97,115,121,110,99, +83,116,97,116,101,32,61,61,32,110,97,109,101,32,46,46,32,34,87,97, +105,116,105,110,103,79,110,69,110,116,101,114,34,32,116,104,101,110,13,10, +32,32,32,32,32,32,99,97,108,108,95,104,97,110,100,108,101,114,40,115, +101,108,102,91,34,111,110,97,102,116,101,114,34,32,46,46,32,110,97,109, +101,93,32,111,114,32,115,101,108,102,91,34,111,110,34,32,46,46,32,110, +97,109,101,93,44,32,112,97,114,97,109,115,41,13,10,32,32,32,32,32, +32,99,97,108,108,95,104,97,110,100,108,101,114,40,115,101,108,102,91,34, +111,110,115,116,97,116,101,99,104,97,110,103,101,34,93,44,32,112,97,114, +97,109,115,41,13,10,32,32,32,32,32,32,115,101,108,102,46,97,115,121, +110,99,83,116,97,116,101,32,61,32,78,79,78,69,13,10,32,32,32,32, +32,32,115,101,108,102,46,99,117,114,114,101,110,116,84,114,97,110,115,105, +116,105,111,110,105,110,103,69,118,101,110,116,32,61,32,110,105,108,13,10, +32,32,32,32,32,32,114,101,116,117,114,110,32,116,114,117,101,13,10,32, +32,32,32,101,108,115,101,13,10,32,32,32,32,9,105,102,32,115,116,114, +105,110,103,46,102,105,110,100,40,115,101,108,102,46,97,115,121,110,99,83, +116,97,116,101,44,32,34,87,97,105,116,105,110,103,79,110,76,101,97,118, +101,34,41,32,111,114,32,115,116,114,105,110,103,46,102,105,110,100,40,115, +101,108,102,46,97,115,121,110,99,83,116,97,116,101,44,32,34,87,97,105, +116,105,110,103,79,110,69,110,116,101,114,34,41,32,116,104,101,110,13,10, +32,32,32,32,9,9,115,101,108,102,46,97,115,121,110,99,83,116,97,116, +101,32,61,32,78,79,78,69,13,10,32,32,32,32,9,9,116,114,97,110, +115,105,116,105,111,110,40,115,101,108,102,44,32,46,46,46,41,13,10,32, +32,32,32,9,9,114,101,116,117,114,110,32,116,114,117,101,13,10,32,32, +32,32,9,101,110,100,13,10,32,32,32,32,101,110,100,13,10,13,10,32, +32,32,32,115,101,108,102,46,99,117,114,114,101,110,116,84,114,97,110,115, +105,116,105,111,110,105,110,103,69,118,101,110,116,32,61,32,110,105,108,13, +10,32,32,32,32,114,101,116,117,114,110,32,102,97,108,115,101,13,10,32, +32,101,110,100,13,10,13,10,32,32,114,101,116,117,114,110,32,116,114,97, +110,115,105,116,105,111,110,13,10,101,110,100,13,10,13,10,108,111,99,97, +108,32,102,117,110,99,116,105,111,110,32,97,100,100,95,116,111,95,109,97, +112,40,109,97,112,44,32,101,118,101,110,116,41,13,10,32,32,105,102,32, +116,121,112,101,40,101,118,101,110,116,46,102,114,111,109,41,32,61,61,32, +39,115,116,114,105,110,103,39,32,116,104,101,110,13,10,32,32,32,32,109, +97,112,91,101,118,101,110,116,46,102,114,111,109,93,32,61,32,101,118,101, +110,116,46,116,111,13,10,32,32,101,108,115,101,13,10,32,32,32,32,102, +111,114,32,95,44,32,102,114,111,109,32,105,110,32,105,112,97,105,114,115, +40,101,118,101,110,116,46,102,114,111,109,41,32,100,111,13,10,32,32,32, +32,32,32,109,97,112,91,102,114,111,109,93,32,61,32,101,118,101,110,116, +46,116,111,13,10,32,32,32,32,101,110,100,13,10,32,32,101,110,100,13, +10,101,110,100,13,10,13,10,102,117,110,99,116,105,111,110,32,109,97,99, +104,105,110,101,46,99,114,101,97,116,101,40,111,112,116,105,111,110,115,41, +13,10,32,32,97,115,115,101,114,116,40,111,112,116,105,111,110,115,46,101, +118,101,110,116,115,41,13,10,13,10,32,32,108,111,99,97,108,32,102,115, +109,32,61,32,123,125,13,10,32,32,115,101,116,109,101,116,97,116,97,98, +108,101,40,102,115,109,44,32,109,97,99,104,105,110,101,41,13,10,13,10, +32,32,102,115,109,46,111,112,116,105,111,110,115,32,61,32,111,112,116,105, +111,110,115,13,10,32,32,102,115,109,46,99,117,114,114,101,110,116,32,61, +32,111,112,116,105,111,110,115,46,105,110,105,116,105,97,108,32,111,114,32, +39,110,111,110,101,39,13,10,32,32,102,115,109,46,97,115,121,110,99,83, +116,97,116,101,32,61,32,78,79,78,69,13,10,32,32,102,115,109,46,101, +118,101,110,116,115,32,61,32,123,125,13,10,13,10,32,32,102,111,114,32, +95,44,32,101,118,101,110,116,32,105,110,32,105,112,97,105,114,115,40,111, +112,116,105,111,110,115,46,101,118,101,110,116,115,32,111,114,32,123,125,41, +32,100,111,13,10,32,32,32,32,108,111,99,97,108,32,110,97,109,101,32, +61,32,101,118,101,110,116,46,110,97,109,101,13,10,32,32,32,32,102,115, +109,91,110,97,109,101,93,32,61,32,102,115,109,91,110,97,109,101,93,32, +111,114,32,99,114,101,97,116,101,95,116,114,97,110,115,105,116,105,111,110, +40,110,97,109,101,41,13,10,32,32,32,32,102,115,109,46,101,118,101,110, +116,115,91,110,97,109,101,93,32,61,32,102,115,109,46,101,118,101,110,116, +115,91,110,97,109,101,93,32,111,114,32,123,32,109,97,112,32,61,32,123, +125,32,125,13,10,32,32,32,32,97,100,100,95,116,111,95,109,97,112,40, +102,115,109,46,101,118,101,110,116,115,91,110,97,109,101,93,46,109,97,112, +44,32,101,118,101,110,116,41,13,10,32,32,101,110,100,13,10,32,32,13, +10,32,32,102,111,114,32,110,97,109,101,44,32,99,97,108,108,98,97,99, +107,32,105,110,32,112,97,105,114,115,40,111,112,116,105,111,110,115,46,99, +97,108,108,98,97,99,107,115,32,111,114,32,123,125,41,32,100,111,13,10, +32,32,32,32,102,115,109,91,110,97,109,101,93,32,61,32,99,97,108,108, +98,97,99,107,13,10,32,32,101,110,100,13,10,13,10,32,32,114,101,116, +117,114,110,32,102,115,109,13,10,101,110,100,13,10,13,10,102,117,110,99, +116,105,111,110,32,109,97,99,104,105,110,101,58,105,115,40,115,116,97,116, +101,41,13,10,32,32,114,101,116,117,114,110,32,115,101,108,102,46,99,117, +114,114,101,110,116,32,61,61,32,115,116,97,116,101,13,10,101,110,100,13, +10,13,10,102,117,110,99,116,105,111,110,32,109,97,99,104,105,110,101,58, +99,97,110,40,101,41,13,10,32,32,108,111,99,97,108,32,101,118,101,110, +116,32,61,32,115,101,108,102,46,101,118,101,110,116,115,91,101,93,13,10, +32,32,108,111,99,97,108,32,116,111,32,61,32,101,118,101,110,116,32,97, +110,100,32,101,118,101,110,116,46,109,97,112,91,115,101,108,102,46,99,117, +114,114,101,110,116,93,32,111,114,32,101,118,101,110,116,46,109,97,112,91, +39,42,39,93,13,10,32,32,114,101,116,117,114,110,32,116,111,32,126,61, +32,110,105,108,44,32,116,111,13,10,101,110,100,13,10,13,10,102,117,110, +99,116,105,111,110,32,109,97,99,104,105,110,101,58,99,97,110,110,111,116, +40,101,41,13,10,32,32,114,101,116,117,114,110,32,110,111,116,32,115,101, +108,102,58,99,97,110,40,101,41,13,10,101,110,100,13,10,13,10,102,117, +110,99,116,105,111,110,32,109,97,99,104,105,110,101,58,116,111,100,111,116, +40,102,105,108,101,110,97,109,101,41,13,10,32,32,108,111,99,97,108,32, +100,111,116,102,105,108,101,32,61,32,105,111,46,111,112,101,110,40,102,105, +108,101,110,97,109,101,44,39,119,39,41,13,10,32,32,100,111,116,102,105, +108,101,58,119,114,105,116,101,40,39,100,105,103,114,97,112,104,32,123,92, +110,39,41,13,10,32,32,108,111,99,97,108,32,116,114,97,110,115,105,116, +105,111,110,32,61,32,102,117,110,99,116,105,111,110,40,101,118,101,110,116, +44,102,114,111,109,44,116,111,41,13,10,32,32,32,32,100,111,116,102,105, +108,101,58,119,114,105,116,101,40,115,116,114,105,110,103,46,102,111,114,109, +97,116,40,39,37,115,32,45,62,32,37,115,32,91,108,97,98,101,108,61, +37,115,93,59,92,110,39,44,102,114,111,109,44,116,111,44,101,118,101,110, +116,41,41,13,10,32,32,101,110,100,13,10,32,32,102,111,114,32,95,44, +32,101,118,101,110,116,32,105,110,32,112,97,105,114,115,40,115,101,108,102, +46,111,112,116,105,111,110,115,46,101,118,101,110,116,115,41,32,100,111,13, +10,32,32,32,32,105,102,32,116,121,112,101,40,101,118,101,110,116,46,102, +114,111,109,41,32,61,61,32,39,116,97,98,108,101,39,32,116,104,101,110, +13,10,32,32,32,32,32,32,102,111,114,32,95,44,32,102,114,111,109,32, +105,110,32,105,112,97,105,114,115,40,101,118,101,110,116,46,102,114,111,109, +41,32,100,111,13,10,32,32,32,32,32,32,32,32,116,114,97,110,115,105, +116,105,111,110,40,101,118,101,110,116,46,110,97,109,101,44,102,114,111,109, +44,101,118,101,110,116,46,116,111,41,13,10,32,32,32,32,32,32,101,110, +100,13,10,32,32,32,32,101,108,115,101,13,10,32,32,32,32,32,32,116, +114,97,110,115,105,116,105,111,110,40,101,118,101,110,116,46,110,97,109,101, +44,101,118,101,110,116,46,102,114,111,109,44,101,118,101,110,116,46,116,111, +41,13,10,32,32,32,32,101,110,100,13,10,32,32,101,110,100,13,10,32, +32,100,111,116,102,105,108,101,58,119,114,105,116,101,40,39,125,92,110,39, +41,13,10,32,32,100,111,116,102,105,108,101,58,99,108,111,115,101,40,41, +13,10,101,110,100,13,10,13,10,102,117,110,99,116,105,111,110,32,109,97, +99,104,105,110,101,58,116,114,97,110,115,105,116,105,111,110,40,101,118,101, +110,116,41,13,10,32,32,105,102,32,115,101,108,102,46,99,117,114,114,101, +110,116,84,114,97,110,115,105,116,105,111,110,105,110,103,69,118,101,110,116, +32,61,61,32,101,118,101,110,116,32,116,104,101,110,13,10,32,32,32,32, +114,101,116,117,114,110,32,115,101,108,102,91,115,101,108,102,46,99,117,114, +114,101,110,116,84,114,97,110,115,105,116,105,111,110,105,110,103,69,118,101, +110,116,93,40,115,101,108,102,41,13,10,32,32,101,110,100,13,10,101,110, +100,13,10,13,10,102,117,110,99,116,105,111,110,32,109,97,99,104,105,110, +101,58,99,97,110,99,101,108,84,114,97,110,115,105,116,105,111,110,40,101, +118,101,110,116,41,13,10,32,32,105,102,32,115,101,108,102,46,99,117,114, +114,101,110,116,84,114,97,110,115,105,116,105,111,110,105,110,103,69,118,101, +110,116,32,61,61,32,101,118,101,110,116,32,116,104,101,110,13,10,32,32, +32,32,115,101,108,102,46,97,115,121,110,99,83,116,97,116,101,32,61,32, +78,79,78,69,13,10,32,32,32,32,115,101,108,102,46,99,117,114,114,101, +110,116,84,114,97,110,115,105,116,105,111,110,105,110,103,69,118,101,110,116, +32,61,32,110,105,108,13,10,32,32,101,110,100,13,10,101,110,100,13,10, +13,10,109,97,99,104,105,110,101,46,78,79,78,69,32,61,32,78,79,78, +69,13,10,109,97,99,104,105,110,101,46,65,83,89,78,67,32,61,32,65, +83,89,78,67,13,10,13,10,45,45,32,73,109,112,111,114,116,32,116,111, +32,74,105,110,46,32,13,10,13,10,106,105,110,46,97,105,46,110,101,119, +83,116,97,116,101,77,97,99,104,105,110,101,32,61,32,109,97,99,104,105, +110,101,46,99,114,101,97,116,101,13,10 }; |