/* Generated by Cython 0.15.1 on Mon Dec 19 01:21:32 2011 */

#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.
#else

#include <stddef.h> /* For offsetof */
#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

#ifndef PY_LONG_LONG
  #define PY_LONG_LONG LONG_LONG
#endif

#if PY_VERSION_HEX < 0x02040000
  #define METH_COEXIST 0
  #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type)
  #define PyDict_Contains(d,o)   PySequence_Contains(d,o)
#endif

#if PY_VERSION_HEX < 0x02050000
  typedef int Py_ssize_t;
  #define PY_SSIZE_T_MAX INT_MAX
  #define PY_SSIZE_T_MIN INT_MIN
  #define PY_FORMAT_SIZE_T ""
  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
  #define PyInt_AsSsize_t(o)   __Pyx_PyInt_AsInt(o)
  #define PyNumber_Index(o)    PyNumber_Int(o)
  #define PyIndex_Check(o)     PyNumber_Check(o)
  #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
#endif

#if PY_VERSION_HEX < 0x02060000
  #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
  #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
  #define PyVarObject_HEAD_INIT(type, size) \
          PyObject_HEAD_INIT(type) size,
  #define PyType_Modified(t)

  typedef struct {
     void *buf;
     PyObject *obj;
     Py_ssize_t len;
     Py_ssize_t itemsize;
     int readonly;
     int ndim;
     char *format;
     Py_ssize_t *shape;
     Py_ssize_t *strides;
     Py_ssize_t *suboffsets;
     void *internal;
  } Py_buffer;

  #define PyBUF_SIMPLE 0
  #define PyBUF_WRITABLE 0x0001
  #define PyBUF_FORMAT 0x0004
  #define PyBUF_ND 0x0008
  #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
  #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
  #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
  #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)

#endif

#if PY_MAJOR_VERSION < 3
  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
#else
  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
#endif

#if PY_MAJOR_VERSION >= 3
  #define Py_TPFLAGS_CHECKTYPES 0
  #define Py_TPFLAGS_HAVE_INDEX 0
#endif

#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
#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_VERSION_HEX < 0x02060000
  #define PyBytesObject                PyStringObject
  #define PyBytes_Type                 PyString_Type
  #define PyBytes_Check                PyString_Check
  #define PyBytes_CheckExact           PyString_CheckExact
  #define PyBytes_FromString           PyString_FromString
  #define PyBytes_FromStringAndSize    PyString_FromStringAndSize
  #define PyBytes_FromFormat           PyString_FromFormat
  #define PyBytes_DecodeEscape         PyString_DecodeEscape
  #define PyBytes_AsString             PyString_AsString
  #define PyBytes_AsStringAndSize      PyString_AsStringAndSize
  #define PyBytes_Size                 PyString_Size
  #define PyBytes_AS_STRING            PyString_AS_STRING
  #define PyBytes_GET_SIZE             PyString_GET_SIZE
  #define PyBytes_Repr                 PyString_Repr
  #define PyBytes_Concat               PyString_Concat
  #define PyBytes_ConcatAndDel         PyString_ConcatAndDel
#endif

#if PY_VERSION_HEX < 0x02060000
  #define PySet_Check(obj)             PyObject_TypeCheck(obj, &PySet_Type)
  #define PyFrozenSet_Check(obj)       PyObject_TypeCheck(obj, &PyFrozenSet_Type)
#endif
#ifndef PySet_CheckExact
  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
#endif

#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)

#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
#endif

#if PY_MAJOR_VERSION >= 3
  #define PyBoolObject                 PyLongObject
#endif

#if PY_VERSION_HEX < 0x03020000
  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_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

#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300)
  #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b)
  #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value)
  #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b)
#else
  #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \
        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \
        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \
            (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0)))
  #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \
        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \
            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1)))
  #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \
        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \
            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1)))
#endif

#if PY_MAJOR_VERSION >= 3
  #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
#endif

#if PY_VERSION_HEX < 0x02050000
  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),((char *)(n)))
#else
  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),(n))
  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
#endif

#if PY_VERSION_HEX < 0x02050000
  #define __Pyx_NAMESTR(n) ((char *)(n))
  #define __Pyx_DOCSTR(n)  ((char *)(n))
#else
  #define __Pyx_NAMESTR(n) (n)
  #define __Pyx_DOCSTR(n)  (n)
#endif

#ifndef __PYX_EXTERN_C
  #ifdef __cplusplus
    #define __PYX_EXTERN_C extern "C"
  #else
    #define __PYX_EXTERN_C extern
  #endif
#endif

#if defined(WIN32) || defined(MS_WINDOWS)
#define _USE_MATH_DEFINES
#endif
#include <math.h>
#define __PYX_HAVE__zmq__core__message
#define __PYX_HAVE_API__zmq__core__message
#include "allocate.h"
#include "errno.h"
#include "string.h"
#include "zmq_compat.h"
#include "zmq.h"
#include "zmq_utils.h"
#include "pyversion_compat.h"
#include "stdio.h"
#include "pythread.h"
#ifdef _OPENMP
#include <omp.h>
#endif /* _OPENMP */

#ifdef PYREX_WITHOUT_ASSERTIONS
#define CYTHON_WITHOUT_ASSERTIONS
#endif


/* inline attribute */
#ifndef CYTHON_INLINE
  #if 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

/* unused attribute */
#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)
#   define CYTHON_UNUSED __attribute__ ((__unused__))
# else
#   define CYTHON_UNUSED
# endif
#endif

typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/


/* Type Conversion Predeclarations */

#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s)
#define __Pyx_PyBytes_AsUString(s)   ((unsigned char*) PyBytes_AsString(s))

#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);

static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);

#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))


#ifdef __GNUC__
  /* Test for GCC > 2.95 */
  #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))
    #define likely(x)   __builtin_expect(!!(x), 1)
    #define unlikely(x) __builtin_expect(!!(x), 0)
  #else /* __GNUC__ > 2 ... */
    #define likely(x)   (x)
    #define unlikely(x) (x)
  #endif /* __GNUC__ > 2 ... */
#else /* __GNUC__ */
  #define likely(x)   (x)
  #define unlikely(x) (x)
#endif /* __GNUC__ */
    
static PyObject *__pyx_m;
static PyObject *__pyx_b;
static PyObject *__pyx_empty_tuple;
static PyObject *__pyx_empty_bytes;
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[] = {
  "message.pyx",
  "buffers.pxd",
  "bool.pxd",
  "complex.pxd",
};

/*--- Type declarations ---*/
struct __pyx_obj_3zmq_4core_7message_MessageTracker;
struct __pyx_obj_3zmq_4core_7message_Message;

/* "zmq/core/message.pxd":32
 * #-----------------------------------------------------------------------------
 * 
 * cdef class MessageTracker(object):             # <<<<<<<<<<<<<<
 *     """A class for tracking if 0MQ is done using one or more messages."""
 * 
 */
struct __pyx_obj_3zmq_4core_7message_MessageTracker {
  PyObject_HEAD
  PyObject *events;
  PyObject *peers;
};


/* "zmq/core/message.pxd":39
 * 
 * 
 * cdef class Message:             # <<<<<<<<<<<<<<
 *     """A Message class for non-copy send/recvs."""
 * 
 */
struct __pyx_obj_3zmq_4core_7message_Message {
  PyObject_HEAD
  struct __pyx_vtabstruct_3zmq_4core_7message_Message *__pyx_vtab;
  zmq_msg_t zmq_msg;
  PyObject *_data;
  PyObject *_buffer;
  PyObject *_bytes;
  int _failed_init;
  PyObject *tracker_event;
  PyObject *tracker;
};



/* "zmq/core/message.pyx":184
 * 
 * 
 * cdef class Message:             # <<<<<<<<<<<<<<
 *     """Message(data=None, track=False)
 * 
 */

struct __pyx_vtabstruct_3zmq_4core_7message_Message {
  struct __pyx_obj_3zmq_4core_7message_Message *(*fast_copy)(struct __pyx_obj_3zmq_4core_7message_Message *);
  PyObject *(*_getbuffer)(struct __pyx_obj_3zmq_4core_7message_Message *);
};
static struct __pyx_vtabstruct_3zmq_4core_7message_Message *__pyx_vtabptr_3zmq_4core_7message_Message;

#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); /*proto*/
  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
  #define __Pyx_RefNannySetupContext(name)           __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
  #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)
  #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 /* CYTHON_REFNANNY */

static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/

#ifndef __PYX_FORCE_INIT_THREADS
  #if PY_VERSION_HEX < 0x02040200
    #define __PYX_FORCE_INIT_THREADS 1
  #else
    #define __PYX_FORCE_INIT_THREADS 0
  #endif
#endif


static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
    PyObject *r;
    if (!j) return NULL;
    r = PyObject_GetItem(o, j);
    Py_DECREF(j);
    return r;
}


#define __Pyx_GetItemInt_List(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
                                                    __Pyx_GetItemInt_List_Fast(o, i) : \
                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))

static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i) {
    if (likely(o != Py_None)) {
        if (likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
            PyObject *r = PyList_GET_ITEM(o, i);
            Py_INCREF(r);
            return r;
        }
        else if ((-PyList_GET_SIZE(o) <= i) & (i < 0)) {
            PyObject *r = PyList_GET_ITEM(o, PyList_GET_SIZE(o) + i);
            Py_INCREF(r);
            return r;
        }
    }
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
}

#define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
                                                    __Pyx_GetItemInt_Tuple_Fast(o, i) : \
                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))

static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i) {
    if (likely(o != Py_None)) {
        if (likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
            PyObject *r = PyTuple_GET_ITEM(o, i);
            Py_INCREF(r);
            return r;
        }
        else if ((-PyTuple_GET_SIZE(o) <= i) & (i < 0)) {
            PyObject *r = PyTuple_GET_ITEM(o, PyTuple_GET_SIZE(o) + i);
            Py_INCREF(r);
            return r;
        }
    }
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
}


#define __Pyx_GetItemInt(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
                                                    __Pyx_GetItemInt_Fast(o, i) : \
                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))

static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i) {
    PyObject *r;
    if (PyList_CheckExact(o) && ((0 <= i) & (i < PyList_GET_SIZE(o)))) {
        r = PyList_GET_ITEM(o, i);
        Py_INCREF(r);
    }
    else if (PyTuple_CheckExact(o) && ((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
        r = PyTuple_GET_ITEM(o, i);
        Py_INCREF(r);
    }
    else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_item && (likely(i >= 0))) {
        r = PySequence_GetItem(o, i);
    }
    else {
        r = __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
    }
    return r;
}

static CYTHON_INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict,
    const char* function_name, int kw_allowed); /*proto*/

#if PY_VERSION_HEX < 0x02050000
#ifndef PyAnySet_CheckExact

#define PyAnySet_CheckExact(ob) \
    ((ob)->ob_type == &PySet_Type || \
     (ob)->ob_type == &PyFrozenSet_Type)

#define PySet_New(iterable) \
    PyObject_CallFunctionObjArgs((PyObject *)&PySet_Type, (iterable), NULL)

#define Pyx_PyFrozenSet_New(iterable) \
    PyObject_CallFunctionObjArgs((PyObject *)&PyFrozenSet_Type, (iterable), NULL)

#define PySet_Size(anyset) \
    PyObject_Size((anyset))

#define PySet_Contains(anyset, key) \
    PySequence_Contains((anyset), (key))

#define PySet_Pop(set) \
    PyObject_CallMethod(set, (char *)"pop", NULL)

static CYTHON_INLINE int PySet_Clear(PyObject *set) {
    PyObject *ret = PyObject_CallMethod(set, (char *)"clear", NULL);
    if (!ret) return -1;
    Py_DECREF(ret); return 0;
}

static CYTHON_INLINE int PySet_Discard(PyObject *set, PyObject *key) {
    PyObject *ret = PyObject_CallMethod(set, (char *)"discard", (char *)"O", key);
    if (!ret) return -1;
    Py_DECREF(ret); return 0;
}

static CYTHON_INLINE int PySet_Add(PyObject *set, PyObject *key) {
    PyObject *ret = PyObject_CallMethod(set, (char *)"add", (char *)"O", key);
    if (!ret) return -1;
    Py_DECREF(ret); return 0;
}

#endif /* PyAnySet_CheckExact (<= Py2.4) */

#if PY_VERSION_HEX < 0x02040000
#ifndef Py_SETOBJECT_H
#define Py_SETOBJECT_H

static PyTypeObject *__Pyx_PySet_Type = NULL;
static PyTypeObject *__Pyx_PyFrozenSet_Type = NULL;

#define PySet_Type (*__Pyx_PySet_Type)
#define PyFrozenSet_Type (*__Pyx_PyFrozenSet_Type)

#define PyAnySet_Check(ob) \
    (PyAnySet_CheckExact(ob) || \
     PyType_IsSubtype((ob)->ob_type, &PySet_Type) || \
     PyType_IsSubtype((ob)->ob_type, &PyFrozenSet_Type))

#define PyFrozenSet_CheckExact(ob) ((ob)->ob_type == &PyFrozenSet_Type)

static int __Pyx_Py23SetsImport(void) {
    PyObject *sets=0, *Set=0, *ImmutableSet=0;

    sets = PyImport_ImportModule((char *)"sets");
    if (!sets) goto bad;
    Set = PyObject_GetAttrString(sets, (char *)"Set");
    if (!Set) goto bad;
    ImmutableSet = PyObject_GetAttrString(sets, (char *)"ImmutableSet");
    if (!ImmutableSet) goto bad;
    Py_DECREF(sets);

    __Pyx_PySet_Type       = (PyTypeObject*) Set;
    __Pyx_PyFrozenSet_Type = (PyTypeObject*) ImmutableSet;

    return 0;

 bad:
    Py_XDECREF(sets);
    Py_XDECREF(Set);
    Py_XDECREF(ImmutableSet);
    return -1;
}

#else
static int __Pyx_Py23SetsImport(void) { return 0; }
#endif /* !Py_SETOBJECT_H */
#endif /* < Py2.4  */
#endif /* < Py2.5  */

static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/

static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/

static void __Pyx_RaiseDoubleKeywordsError(
    const char* func_name, PyObject* kw_name); /*proto*/

static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,     const char* function_name); /*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); /*proto*/

static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/

static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/

static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level); /*proto*/

static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);

static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);

static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);

static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);

static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);

static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);

static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);

static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);

static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);

static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *);

static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);

static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);

static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);

static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);

static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);

static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);

static void __Pyx_WriteUnraisable(const char *name, int clineno,
                                  int lineno, const char *filename); /*proto*/

static int __Pyx_check_binary_version(void);

static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig); /*proto*/

static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/

static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);  /*proto*/

static PyObject *__Pyx_ImportModule(const char *name); /*proto*/

static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno,
                               int __pyx_lineno, const char *__pyx_filename); /*proto*/

static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/

/* Module declarations from 'zmq.core.libzmq' */

/* Module declarations from 'cpython.version' */

/* Module declarations from 'cpython.ref' */

/* Module declarations from 'cpython.exc' */

/* Module declarations from 'cpython.module' */

/* Module declarations from 'cpython.mem' */

/* Module declarations from 'cpython.tuple' */

/* Module declarations from 'cpython.list' */

/* Module declarations from 'libc.stdio' */

/* Module declarations from 'cpython.object' */

/* Module declarations from 'cpython.sequence' */

/* Module declarations from 'cpython.mapping' */

/* Module declarations from 'cpython.iterator' */

/* Module declarations from 'cpython.type' */

/* Module declarations from 'cpython.number' */

/* Module declarations from 'cpython.int' */

/* Module declarations from '__builtin__' */

/* Module declarations from 'cpython.bool' */
static PyTypeObject *__pyx_ptype_7cpython_4bool_bool = 0;

/* Module declarations from 'cpython.long' */

/* Module declarations from 'cpython.float' */

/* Module declarations from '__builtin__' */

/* Module declarations from 'cpython.complex' */
static PyTypeObject *__pyx_ptype_7cpython_7complex_complex = 0;

/* Module declarations from 'cpython.string' */

/* Module declarations from 'cpython.unicode' */

/* Module declarations from 'cpython.dict' */

/* Module declarations from 'cpython.instance' */

/* Module declarations from 'cpython.function' */

/* Module declarations from 'cpython.method' */

/* Module declarations from 'cpython.weakref' */

/* Module declarations from 'cpython.getargs' */

/* Module declarations from 'cpython.pythread' */

/* Module declarations from 'cpython.pystate' */

/* Module declarations from 'cpython.cobject' */

/* Module declarations from 'cpython.oldbuffer' */

/* Module declarations from 'cpython.set' */

/* Module declarations from 'cpython.buffer' */

/* Module declarations from 'cpython.bytes' */

/* Module declarations from 'cpython.pycapsule' */

/* Module declarations from 'cpython' */

/* Module declarations from 'buffers' */
static CYTHON_INLINE int __pyx_f_7buffers_newstyle_available(void); /*proto*/
static CYTHON_INLINE int __pyx_f_7buffers_memoryview_available(void); /*proto*/
static CYTHON_INLINE int __pyx_f_7buffers_oldstyle_available(void); /*proto*/
static CYTHON_INLINE int __pyx_f_7buffers_check_buffer(PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_asbuffer(PyObject *, int, int, void **, Py_ssize_t *, Py_ssize_t *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_asbuffer_r(PyObject *, void **, Py_ssize_t *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_asbuffer_w(PyObject *, void **, Py_ssize_t *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_3(void *, Py_ssize_t, int); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_2(void *, Py_ssize_t, int); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer(void *, Py_ssize_t, int); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_r(void *, Py_ssize_t); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_w(void *, Py_ssize_t); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_viewfromobject(PyObject *, int); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_viewfromobject_r(PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_viewfromobject_w(PyObject *); /*proto*/

/* Module declarations from 'zmq.core.message' */
static PyTypeObject *__pyx_ptype_3zmq_4core_7message_MessageTracker = 0;
static PyTypeObject *__pyx_ptype_3zmq_4core_7message_Message = 0;
static CYTHON_INLINE PyObject *__pyx_f_3zmq_4core_7message_copy_zmq_msg_bytes(zmq_msg_t *); /*proto*/
static void __pyx_f_3zmq_4core_7message_free_python_msg(void *, void *); /*proto*/
#define __Pyx_MODULE_NAME "zmq.core.message"
int __pyx_module_is_main_zmq__core__message = 0;

/* Implementation of 'zmq.core.message' */
static PyObject *__pyx_builtin_ImportError;
static PyObject *__pyx_builtin_AttributeError;
static PyObject *__pyx_builtin_property;
static PyObject *__pyx_builtin_ValueError;
static PyObject *__pyx_builtin_TypeError;
static PyObject *__pyx_builtin_SystemError;
static PyObject *__pyx_builtin_NotImplementedError;
static char __pyx_k_1[] = "Not a tracked message";
static char __pyx_k_3[] = "Require Events or Messages, not %s";
static char __pyx_k_5[] = "Unicode objects not allowed. Only: str/bytes, buffer interfaces.";
static char __pyx_k_8[] = "accessing non-existent buffer segment";
static char __pyx_k_10[] = "%r does not provide a buffer interface.";
static char __pyx_k_11[] = "";
static char __pyx_k_12[] = "New style buffers not available.";
static char __pyx_k_14[] = "Old style buffers not available.";
static char __pyx_k_16[] = "0MQ Message related classes.";
static char __pyx_k_17[] = "zmq.core.error";
static char __pyx_k_18[] = "zmq.utils.strtypes";
static char __pyx_k__B[] = "B";
static char __pyx_k__set[] = "set";
static char __pyx_k__char[] = "char";
static char __pyx_k__data[] = "data";
static char __pyx_k__done[] = "done";
static char __pyx_k__time[] = "time";
static char __pyx_k__wait[] = "wait";
static char __pyx_k__Event[] = "Event";
static char __pyx_k__bytes[] = "bytes";
static char __pyx_k__dtype[] = "dtype";
static char __pyx_k__isSet[] = "isSet";
static char __pyx_k__sleep[] = "sleep";
static char __pyx_k__track[] = "track";
static char __pyx_k___Event[] = "_Event";
static char __pyx_k__buffer[] = "buffer";
static char __pyx_k__decode[] = "decode";
static char __pyx_k__is_set[] = "is_set";
static char __pyx_k__Message[] = "Message";
static char __pyx_k__NotDone[] = "NotDone";
static char __pyx_k____all__[] = "__all__";
static char __pyx_k__timeout[] = "timeout";
static char __pyx_k__tracker[] = "tracker";
static char __pyx_k__unicode[] = "unicode";
static char __pyx_k__ZMQError[] = "ZMQError";
static char __pyx_k____main__[] = "__main__";
static char __pyx_k____test__[] = "__test__";
static char __pyx_k__itemsize[] = "itemsize";
static char __pyx_k__property[] = "property";
static char __pyx_k__typecode[] = "typecode";
static char __pyx_k__TypeError[] = "TypeError";
static char __pyx_k__threading[] = "threading";
static char __pyx_k__ValueError[] = "ValueError";
static char __pyx_k__basestring[] = "basestring";
static char __pyx_k__ImportError[] = "ImportError";
static char __pyx_k__SystemError[] = "SystemError";
static char __pyx_k__AttributeError[] = "AttributeError";
static char __pyx_k__MessageTracker[] = "MessageTracker";
static char __pyx_k__NotImplementedError[] = "NotImplementedError";
static PyObject *__pyx_kp_s_1;
static PyObject *__pyx_kp_s_10;
static PyObject *__pyx_kp_s_11;
static PyObject *__pyx_kp_s_12;
static PyObject *__pyx_kp_s_14;
static PyObject *__pyx_n_s_17;
static PyObject *__pyx_n_s_18;
static PyObject *__pyx_kp_s_3;
static PyObject *__pyx_kp_s_5;
static PyObject *__pyx_kp_s_8;
static PyObject *__pyx_n_s__AttributeError;
static PyObject *__pyx_n_s__B;
static PyObject *__pyx_n_s__Event;
static PyObject *__pyx_n_s__ImportError;
static PyObject *__pyx_n_s__Message;
static PyObject *__pyx_n_s__MessageTracker;
static PyObject *__pyx_n_s__NotDone;
static PyObject *__pyx_n_s__NotImplementedError;
static PyObject *__pyx_n_s__SystemError;
static PyObject *__pyx_n_s__TypeError;
static PyObject *__pyx_n_s__ValueError;
static PyObject *__pyx_n_s__ZMQError;
static PyObject *__pyx_n_s___Event;
static PyObject *__pyx_n_s____all__;
static PyObject *__pyx_n_s____main__;
static PyObject *__pyx_n_s____test__;
static PyObject *__pyx_n_s__basestring;
static PyObject *__pyx_n_s__buffer;
static PyObject *__pyx_n_s__bytes;
static PyObject *__pyx_n_s__char;
static PyObject *__pyx_n_s__data;
static PyObject *__pyx_n_s__decode;
static PyObject *__pyx_n_s__done;
static PyObject *__pyx_n_s__dtype;
static PyObject *__pyx_n_s__isSet;
static PyObject *__pyx_n_s__is_set;
static PyObject *__pyx_n_s__itemsize;
static PyObject *__pyx_n_s__property;
static PyObject *__pyx_n_s__set;
static PyObject *__pyx_n_s__sleep;
static PyObject *__pyx_n_s__threading;
static PyObject *__pyx_n_s__time;
static PyObject *__pyx_n_s__timeout;
static PyObject *__pyx_n_s__track;
static PyObject *__pyx_n_s__tracker;
static PyObject *__pyx_n_s__typecode;
static PyObject *__pyx_n_s__unicode;
static PyObject *__pyx_n_s__wait;
static PyObject *__pyx_int_0;
static PyObject *__pyx_int_neg_1;
static PyObject *__pyx_int_604800;
static PyObject *__pyx_k_4;
static PyObject *__pyx_k_7;
static PyObject *__pyx_k_tuple_2;
static PyObject *__pyx_k_tuple_6;
static PyObject *__pyx_k_tuple_9;
static PyObject *__pyx_k_tuple_13;
static PyObject *__pyx_k_tuple_15;

/* "zmq/core/message.pyx":57
 * 
 * 
 * cdef void free_python_msg(void *data, void *hint) with gil:             # <<<<<<<<<<<<<<
 *     """A function for DECREF'ing Python based messages."""
 *     if hint != NULL:
 */

static void __pyx_f_3zmq_4core_7message_free_python_msg(void *__pyx_v_data, void *__pyx_v_hint) {
  PyObject *__pyx_v_tracker_event = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("free_python_msg");

  /* "zmq/core/message.pyx":59
 * cdef void free_python_msg(void *data, void *hint) with gil:
 *     """A function for DECREF'ing Python based messages."""
 *     if hint != NULL:             # <<<<<<<<<<<<<<
 *         tracker_event = (<tuple>hint)[1]
 *         Py_DECREF(<object>hint)
 */
  __pyx_t_1 = (__pyx_v_hint != NULL);
  if (__pyx_t_1) {

    /* "zmq/core/message.pyx":60
 *     """A function for DECREF'ing Python based messages."""
 *     if hint != NULL:
 *         tracker_event = (<tuple>hint)[1]             # <<<<<<<<<<<<<<
 *         Py_DECREF(<object>hint)
 *         if isinstance(tracker_event, Event):
 */
    __pyx_t_2 = __Pyx_GetItemInt_Tuple(((PyObject *)__pyx_v_hint), 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_tracker_event = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "zmq/core/message.pyx":61
 *     if hint != NULL:
 *         tracker_event = (<tuple>hint)[1]
 *         Py_DECREF(<object>hint)             # <<<<<<<<<<<<<<
 *         if isinstance(tracker_event, Event):
 *             # don't assert before DECREF:
 */
    Py_DECREF(((PyObject *)__pyx_v_hint));

    /* "zmq/core/message.pyx":62
 *         tracker_event = (<tuple>hint)[1]
 *         Py_DECREF(<object>hint)
 *         if isinstance(tracker_event, Event):             # <<<<<<<<<<<<<<
 *             # don't assert before DECREF:
 *             # assert tracker_queue.empty(), "somebody else wrote to my Queue!"
 */
    __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__Event); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PyObject_IsInstance(__pyx_v_tracker_event, __pyx_t_2); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_1) {

      /* "zmq/core/message.pyx":65
 *             # don't assert before DECREF:
 *             # assert tracker_queue.empty(), "somebody else wrote to my Queue!"
 *             tracker_event.set()             # <<<<<<<<<<<<<<
 *         tracker_event = None
 * 
 */
      __pyx_t_2 = PyObject_GetAttr(__pyx_v_tracker_event, __pyx_n_s__set); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L4;
    }
    __pyx_L4:;

    /* "zmq/core/message.pyx":66
 *             # assert tracker_queue.empty(), "somebody else wrote to my Queue!"
 *             tracker_event.set()
 *         tracker_event = None             # <<<<<<<<<<<<<<
 * 
 * cdef inline object copy_zmq_msg_bytes(zmq_msg_t *zmq_msg):
 */
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF(__pyx_v_tracker_event);
    __pyx_v_tracker_event = Py_None;
    goto __pyx_L3;
  }
  __pyx_L3:;

  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_WriteUnraisable("zmq.core.message.free_python_msg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tracker_event);
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  PyGILState_Release(__pyx_gilstate_save);
  #endif
}

/* "zmq/core/message.pyx":68
 *         tracker_event = None
 * 
 * cdef inline object copy_zmq_msg_bytes(zmq_msg_t *zmq_msg):             # <<<<<<<<<<<<<<
 *     """ Copy the data from a zmq_msg_t """
 *     cdef char *data_c = NULL
 */

static CYTHON_INLINE PyObject *__pyx_f_3zmq_4core_7message_copy_zmq_msg_bytes(zmq_msg_t *__pyx_v_zmq_msg) {
  char *__pyx_v_data_c;
  Py_ssize_t __pyx_v_data_len_c;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("copy_zmq_msg_bytes");

  /* "zmq/core/message.pyx":70
 * cdef inline object copy_zmq_msg_bytes(zmq_msg_t *zmq_msg):
 *     """ Copy the data from a zmq_msg_t """
 *     cdef char *data_c = NULL             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t data_len_c
 *     with nogil:
 */
  __pyx_v_data_c = NULL;

  /* "zmq/core/message.pyx":72
 *     cdef char *data_c = NULL
 *     cdef Py_ssize_t data_len_c
 *     with nogil:             # <<<<<<<<<<<<<<
 *         data_c = <char *>zmq_msg_data(zmq_msg)
 *         data_len_c = zmq_msg_size(zmq_msg)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save = NULL;
      #endif
      Py_UNBLOCK_THREADS
      /*try:*/ {

        /* "zmq/core/message.pyx":73
 *     cdef Py_ssize_t data_len_c
 *     with nogil:
 *         data_c = <char *>zmq_msg_data(zmq_msg)             # <<<<<<<<<<<<<<
 *         data_len_c = zmq_msg_size(zmq_msg)
 *     return PyBytes_FromStringAndSize(data_c, data_len_c)
 */
        __pyx_v_data_c = ((char *)zmq_msg_data(__pyx_v_zmq_msg));

        /* "zmq/core/message.pyx":74
 *     with nogil:
 *         data_c = <char *>zmq_msg_data(zmq_msg)
 *         data_len_c = zmq_msg_size(zmq_msg)             # <<<<<<<<<<<<<<
 *     return PyBytes_FromStringAndSize(data_c, data_len_c)
 * 
 */
        __pyx_v_data_len_c = zmq_msg_size(__pyx_v_zmq_msg);
      }

      /* "zmq/core/message.pyx":72
 *     cdef char *data_c = NULL
 *     cdef Py_ssize_t data_len_c
 *     with nogil:             # <<<<<<<<<<<<<<
 *         data_c = <char *>zmq_msg_data(zmq_msg)
 *         data_len_c = zmq_msg_size(zmq_msg)
 */
      /*finally:*/ {
        Py_BLOCK_THREADS
      }
  }

  /* "zmq/core/message.pyx":75
 *         data_c = <char *>zmq_msg_data(zmq_msg)
 *         data_len_c = zmq_msg_size(zmq_msg)
 *     return PyBytes_FromStringAndSize(data_c, data_len_c)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)PyBytes_FromStringAndSize(__pyx_v_data_c, __pyx_v_data_len_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("zmq.core.message.copy_zmq_msg_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pyx":97
 *     """
 * 
 *     def __init__(self, *towatch):             # <<<<<<<<<<<<<<
 *         """MessageTracker(*towatch)
 * 
 */

static int __pyx_pf_3zmq_4core_7message_14MessageTracker___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_3zmq_4core_7message_14MessageTracker___init__[] = "MessageTracker(*towatch)\n\n        Create a message tracker to track a set of mesages.\n\n        Parameters\n        ----------\n        *towatch : tuple of Event, MessageTracker, Message instances.\n            This list of objects to track. This class can track the low-level\n            Events used by the Message class, other MessageTrackers or \n            actual Messages.\n        ";
struct wrapperbase __pyx_wrapperbase_3zmq_4core_7message_14MessageTracker___init__;
static int __pyx_pf_3zmq_4core_7message_14MessageTracker___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_towatch = 0;
  PyObject *__pyx_v_obj = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__");
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1;
  __Pyx_INCREF(__pyx_args);
  __pyx_v_towatch = __pyx_args;

  /* "zmq/core/message.pyx":109
 *             actual Messages.
 *         """
 *         self.events = set()             # <<<<<<<<<<<<<<
 *         self.peers = set()
 *         for obj in towatch:
 */
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->events);
  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->events));
  ((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->events = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "zmq/core/message.pyx":110
 *         """
 *         self.events = set()
 *         self.peers = set()             # <<<<<<<<<<<<<<
 *         for obj in towatch:
 *             if isinstance(obj, Event):
 */
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers);
  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers));
  ((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "zmq/core/message.pyx":111
 *         self.events = set()
 *         self.peers = set()
 *         for obj in towatch:             # <<<<<<<<<<<<<<
 *             if isinstance(obj, Event):
 *                 self.events.add(obj)
 */
  if (unlikely(((PyObject *)__pyx_v_towatch) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
  }
  __pyx_t_1 = ((PyObject *)__pyx_v_towatch); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++;
    __Pyx_XDECREF(__pyx_v_obj);
    __pyx_v_obj = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "zmq/core/message.pyx":112
 *         self.peers = set()
 *         for obj in towatch:
 *             if isinstance(obj, Event):             # <<<<<<<<<<<<<<
 *                 self.events.add(obj)
 *             elif isinstance(obj, MessageTracker):
 */
    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__Event); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_3); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {

      /* "zmq/core/message.pyx":113
 *         for obj in towatch:
 *             if isinstance(obj, Event):
 *                 self.events.add(obj)             # <<<<<<<<<<<<<<
 *             elif isinstance(obj, MessageTracker):
 *                 self.peers.add(obj)
 */
      if (unlikely(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->events) == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "add"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
      }
      __pyx_t_5 = PySet_Add(((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->events, __pyx_v_obj); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L7;
    }

    /* "zmq/core/message.pyx":114
 *             if isinstance(obj, Event):
 *                 self.events.add(obj)
 *             elif isinstance(obj, MessageTracker):             # <<<<<<<<<<<<<<
 *                 self.peers.add(obj)
 *             elif isinstance(obj, Message):
 */
    __pyx_t_3 = ((PyObject *)((PyObject*)__pyx_ptype_3zmq_4core_7message_MessageTracker));
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_t_3); 
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {

      /* "zmq/core/message.pyx":115
 *                 self.events.add(obj)
 *             elif isinstance(obj, MessageTracker):
 *                 self.peers.add(obj)             # <<<<<<<<<<<<<<
 *             elif isinstance(obj, Message):
 *                 if not obj.tracker:
 */
      if (unlikely(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers) == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "add"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
      }
      __pyx_t_5 = PySet_Add(((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers, __pyx_v_obj); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L7;
    }

    /* "zmq/core/message.pyx":116
 *             elif isinstance(obj, MessageTracker):
 *                 self.peers.add(obj)
 *             elif isinstance(obj, Message):             # <<<<<<<<<<<<<<
 *                 if not obj.tracker:
 *                     raise ValueError("Not a tracked message")
 */
    __pyx_t_3 = ((PyObject *)((PyObject*)__pyx_ptype_3zmq_4core_7message_Message));
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_t_3); 
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {

      /* "zmq/core/message.pyx":117
 *                 self.peers.add(obj)
 *             elif isinstance(obj, Message):
 *                 if not obj.tracker:             # <<<<<<<<<<<<<<
 *                     raise ValueError("Not a tracked message")
 *                 self.peers.add(obj.tracker)
 */
      __pyx_t_3 = PyObject_GetAttr(__pyx_v_obj, __pyx_n_s__tracker); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_6 = (!__pyx_t_4);
      if (__pyx_t_6) {

        /* "zmq/core/message.pyx":118
 *             elif isinstance(obj, Message):
 *                 if not obj.tracker:
 *                     raise ValueError("Not a tracked message")             # <<<<<<<<<<<<<<
 *                 self.peers.add(obj.tracker)
 *             else:
 */
        __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_Raise(__pyx_t_3, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        goto __pyx_L8;
      }
      __pyx_L8:;

      /* "zmq/core/message.pyx":119
 *                 if not obj.tracker:
 *                     raise ValueError("Not a tracked message")
 *                 self.peers.add(obj.tracker)             # <<<<<<<<<<<<<<
 *             else:
 *                 raise TypeError("Require Events or Messages, not %s"%type(obj))
 */
      if (unlikely(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers) == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "add"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 
      }
      __pyx_t_3 = PyObject_GetAttr(__pyx_v_obj, __pyx_n_s__tracker); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = PySet_Add(((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers, __pyx_t_3); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L7;
    }
    /*else*/ {

      /* "zmq/core/message.pyx":121
 *                 self.peers.add(obj.tracker)
 *             else:
 *                 raise TypeError("Require Events or Messages, not %s"%type(obj))             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
      __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_3), ((PyObject *)Py_TYPE(__pyx_v_obj))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_3));
      __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_7));
      PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_t_3));
      __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
      __pyx_t_3 = 0;
      __pyx_t_3 = PyObject_Call(__pyx_builtin_TypeError, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_L7:;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("zmq.core.message.MessageTracker.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_towatch);
  __Pyx_XDECREF(__pyx_v_obj);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pyx":124
 * 
 *     @property
 *     def done(self):             # <<<<<<<<<<<<<<
 *         """Is 0MQ completely done with the message(s) being tracked?"""
 *         for evt in self.events:
 */

static PyObject *__pyx_pf_3zmq_4core_7message_14MessageTracker_1done(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_3zmq_4core_7message_14MessageTracker_1done[] = "Is 0MQ completely done with the message(s) being tracked?";
static PyObject *__pyx_pf_3zmq_4core_7message_14MessageTracker_1done(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_v_evt = NULL;
  PyObject *__pyx_v_pm = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *(*__pyx_t_2)(PyObject *);
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("done");

  /* "zmq/core/message.pyx":126
 *     def done(self):
 *         """Is 0MQ completely done with the message(s) being tracked?"""
 *         for evt in self.events:             # <<<<<<<<<<<<<<
 *             if not evt.is_set():
 *                 return False
 */
  __pyx_t_1 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->events)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = Py_TYPE(__pyx_t_1)->tp_iternext;
  for (;;) {
    {
      __pyx_t_3 = __pyx_t_2(__pyx_t_1);
      if (unlikely(!__pyx_t_3)) {
        if (PyErr_Occurred()) {
          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF(__pyx_v_evt);
    __pyx_v_evt = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "zmq/core/message.pyx":127
 *         """Is 0MQ completely done with the message(s) being tracked?"""
 *         for evt in self.events:
 *             if not evt.is_set():             # <<<<<<<<<<<<<<
 *                 return False
 *         for pm in self.peers:
 */
    __pyx_t_3 = PyObject_GetAttr(__pyx_v_evt, __pyx_n_s__is_set); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = (!__pyx_t_5);
    if (__pyx_t_6) {

      /* "zmq/core/message.pyx":128
 *         for evt in self.events:
 *             if not evt.is_set():
 *                 return False             # <<<<<<<<<<<<<<
 *         for pm in self.peers:
 *             if not pm.done:
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
      goto __pyx_L7;
    }
    __pyx_L7:;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "zmq/core/message.pyx":129
 *             if not evt.is_set():
 *                 return False
 *         for pm in self.peers:             # <<<<<<<<<<<<<<
 *             if not pm.done:
 *                 return False
 */
  __pyx_t_1 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = Py_TYPE(__pyx_t_1)->tp_iternext;
  for (;;) {
    {
      __pyx_t_4 = __pyx_t_2(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        if (PyErr_Occurred()) {
          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XDECREF(__pyx_v_pm);
    __pyx_v_pm = __pyx_t_4;
    __pyx_t_4 = 0;

    /* "zmq/core/message.pyx":130
 *                 return False
 *         for pm in self.peers:
 *             if not pm.done:             # <<<<<<<<<<<<<<
 *                 return False
 *         return True
 */
    __pyx_t_4 = PyObject_GetAttr(__pyx_v_pm, __pyx_n_s__done); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = (!__pyx_t_6);
    if (__pyx_t_5) {

      /* "zmq/core/message.pyx":131
 *         for pm in self.peers:
 *             if not pm.done:
 *                 return False             # <<<<<<<<<<<<<<
 *         return True
 * 
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
      goto __pyx_L10;
    }
    __pyx_L10:;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "zmq/core/message.pyx":132
 *             if not pm.done:
 *                 return False
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     def wait(self, timeout=-1):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("zmq.core.message.MessageTracker.done", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_evt);
  __Pyx_XDECREF(__pyx_v_pm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pyx":134
 *         return True
 * 
 *     def wait(self, timeout=-1):             # <<<<<<<<<<<<<<
 *         """mt.wait(timeout=-1)
 * 
 */

static PyObject *__pyx_pf_3zmq_4core_7message_14MessageTracker_2wait(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_3zmq_4core_7message_14MessageTracker_2wait[] = "mt.wait(timeout=-1)\n\n        Wait for 0MQ to be done with the message, or until `timeout`.\n\n        Parameters\n        ----------\n        timeout : float [default: -1, wait forever]\n            Maximum time in (s) to wait before raising NotDone.\n\n        Returns\n        -------\n        None\n            if done before `timeout`\n        \n        Raises\n        ------\n        NotDone\n            if `timeout` reached before I am done.\n        ";
static PyObject *__pyx_pf_3zmq_4core_7message_14MessageTracker_2wait(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_timeout = 0;
  PyObject *__pyx_v_tic = NULL;
  PyObject *__pyx_v_remaining = NULL;
  int __pyx_v_done;
  PyObject *__pyx_v_evt = NULL;
  PyObject *__pyx_v_toc = NULL;
  PyObject *__pyx_v_peer = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__timeout,0};
  __Pyx_RefNannySetupContext("wait");
  {
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)__pyx_int_neg_1);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__timeout);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "wait") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_timeout = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wait", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("zmq.core.message.MessageTracker.wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;

  /* "zmq/core/message.pyx":154
 *             if `timeout` reached before I am done.
 *         """
 *         tic = time.time()             # <<<<<<<<<<<<<<
 *         if timeout is False or timeout < 0:
 *             remaining = 3600*24*7 # a week
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__time); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_tic = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "zmq/core/message.pyx":155
 *         """
 *         tic = time.time()
 *         if timeout is False or timeout < 0:             # <<<<<<<<<<<<<<
 *             remaining = 3600*24*7 # a week
 *         else:
 */
  __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = (__pyx_v_timeout == __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_3) {
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_timeout, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = __pyx_t_4;
  } else {
    __pyx_t_5 = __pyx_t_3;
  }
  if (__pyx_t_5) {

    /* "zmq/core/message.pyx":156
 *         tic = time.time()
 *         if timeout is False or timeout < 0:
 *             remaining = 3600*24*7 # a week             # <<<<<<<<<<<<<<
 *         else:
 *             remaining = timeout
 */
    __Pyx_INCREF(__pyx_int_604800);
    __pyx_v_remaining = __pyx_int_604800;
    goto __pyx_L6;
  }
  /*else*/ {

    /* "zmq/core/message.pyx":158
 *             remaining = 3600*24*7 # a week
 *         else:
 *             remaining = timeout             # <<<<<<<<<<<<<<
 *         done = False
 *         for evt in self.events:
 */
    __Pyx_INCREF(__pyx_v_timeout);
    __pyx_v_remaining = __pyx_v_timeout;
  }
  __pyx_L6:;

  /* "zmq/core/message.pyx":159
 *         else:
 *             remaining = timeout
 *         done = False             # <<<<<<<<<<<<<<
 *         for evt in self.events:
 *             if remaining < 0:
 */
  __pyx_v_done = 0;

  /* "zmq/core/message.pyx":160
 *             remaining = timeout
 *         done = False
 *         for evt in self.events:             # <<<<<<<<<<<<<<
 *             if remaining < 0:
 *                 raise NotDone
 */
  __pyx_t_1 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->events)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext;
  for (;;) {
    {
      __pyx_t_2 = __pyx_t_6(__pyx_t_1);
      if (unlikely(!__pyx_t_2)) {
        if (PyErr_Occurred()) {
          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_XDECREF(__pyx_v_evt);
    __pyx_v_evt = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "zmq/core/message.pyx":161
 *         done = False
 *         for evt in self.events:
 *             if remaining < 0:             # <<<<<<<<<<<<<<
 *                 raise NotDone
 *             evt.wait(timeout=remaining)
 */
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_remaining, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_5) {

      /* "zmq/core/message.pyx":162
 *         for evt in self.events:
 *             if remaining < 0:
 *                 raise NotDone             # <<<<<<<<<<<<<<
 *             evt.wait(timeout=remaining)
 *             if not evt.is_set():
 */
      __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__NotDone); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L9;
    }
    __pyx_L9:;

    /* "zmq/core/message.pyx":163
 *             if remaining < 0:
 *                 raise NotDone
 *             evt.wait(timeout=remaining)             # <<<<<<<<<<<<<<
 *             if not evt.is_set():
 *                 raise NotDone
 */
    __pyx_t_2 = PyObject_GetAttr(__pyx_v_evt, __pyx_n_s__wait); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_7));
    if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__timeout), __pyx_v_remaining) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_8 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    /* "zmq/core/message.pyx":164
 *                 raise NotDone
 *             evt.wait(timeout=remaining)
 *             if not evt.is_set():             # <<<<<<<<<<<<<<
 *                 raise NotDone
 *             toc = time.time()
 */
    __pyx_t_8 = PyObject_GetAttr(__pyx_v_evt, __pyx_n_s__is_set); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_3 = (!__pyx_t_5);
    if (__pyx_t_3) {

      /* "zmq/core/message.pyx":165
 *             evt.wait(timeout=remaining)
 *             if not evt.is_set():
 *                 raise NotDone             # <<<<<<<<<<<<<<
 *             toc = time.time()
 *             remaining -= (toc-tic)
 */
      __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__NotDone); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_Raise(__pyx_t_7, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L10;
    }
    __pyx_L10:;

    /* "zmq/core/message.pyx":166
 *             if not evt.is_set():
 *                 raise NotDone
 *             toc = time.time()             # <<<<<<<<<<<<<<
 *             remaining -= (toc-tic)
 *             tic = toc
 */
    __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__time); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__time); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_v_toc);
    __pyx_v_toc = __pyx_t_7;
    __pyx_t_7 = 0;

    /* "zmq/core/message.pyx":167
 *                 raise NotDone
 *             toc = time.time()
 *             remaining -= (toc-tic)             # <<<<<<<<<<<<<<
 *             tic = toc
 * 
 */
    __pyx_t_7 = PyNumber_Subtract(__pyx_v_toc, __pyx_v_tic); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = PyNumber_InPlaceSubtract(__pyx_v_remaining, __pyx_t_7); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_v_remaining);
    __pyx_v_remaining = __pyx_t_8;
    __pyx_t_8 = 0;

    /* "zmq/core/message.pyx":168
 *             toc = time.time()
 *             remaining -= (toc-tic)
 *             tic = toc             # <<<<<<<<<<<<<<
 * 
 *         for peer in self.peers:
 */
    __Pyx_INCREF(__pyx_v_toc);
    __Pyx_DECREF(__pyx_v_tic);
    __pyx_v_tic = __pyx_v_toc;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "zmq/core/message.pyx":170
 *             tic = toc
 * 
 *         for peer in self.peers:             # <<<<<<<<<<<<<<
 *             if remaining < 0:
 *                 raise NotDone
 */
  __pyx_t_1 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext;
  for (;;) {
    {
      __pyx_t_8 = __pyx_t_6(__pyx_t_1);
      if (unlikely(!__pyx_t_8)) {
        if (PyErr_Occurred()) {
          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_8);
    }
    __Pyx_XDECREF(__pyx_v_peer);
    __pyx_v_peer = __pyx_t_8;
    __pyx_t_8 = 0;

    /* "zmq/core/message.pyx":171
 * 
 *         for peer in self.peers:
 *             if remaining < 0:             # <<<<<<<<<<<<<<
 *                 raise NotDone
 *             peer.wait(timeout=remaining)
 */
    __pyx_t_8 = PyObject_RichCompare(__pyx_v_remaining, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (__pyx_t_3) {

      /* "zmq/core/message.pyx":172
 *         for peer in self.peers:
 *             if remaining < 0:
 *                 raise NotDone             # <<<<<<<<<<<<<<
 *             peer.wait(timeout=remaining)
 *             toc = time.time()
 */
      __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__NotDone); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L13;
    }
    __pyx_L13:;

    /* "zmq/core/message.pyx":173
 *             if remaining < 0:
 *                 raise NotDone
 *             peer.wait(timeout=remaining)             # <<<<<<<<<<<<<<
 *             toc = time.time()
 *             remaining -= (toc-tic)
 */
    __pyx_t_8 = PyObject_GetAttr(__pyx_v_peer, __pyx_n_s__wait); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_7));
    if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__timeout), __pyx_v_remaining) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_2 = PyEval_CallObjectWithKeywords(__pyx_t_8, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "zmq/core/message.pyx":174
 *                 raise NotDone
 *             peer.wait(timeout=remaining)
 *             toc = time.time()             # <<<<<<<<<<<<<<
 *             remaining -= (toc-tic)
 *             tic = toc
 */
    __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__time); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_v_toc);
    __pyx_v_toc = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "zmq/core/message.pyx":175
 *             peer.wait(timeout=remaining)
 *             toc = time.time()
 *             remaining -= (toc-tic)             # <<<<<<<<<<<<<<
 *             tic = toc
 * 
 */
    __pyx_t_2 = PyNumber_Subtract(__pyx_v_toc, __pyx_v_tic); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = PyNumber_InPlaceSubtract(__pyx_v_remaining, __pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_v_remaining);
    __pyx_v_remaining = __pyx_t_7;
    __pyx_t_7 = 0;

    /* "zmq/core/message.pyx":176
 *             toc = time.time()
 *             remaining -= (toc-tic)
 *             tic = toc             # <<<<<<<<<<<<<<
 * 
 *     def old_wait(self):
 */
    __Pyx_INCREF(__pyx_v_toc);
    __Pyx_DECREF(__pyx_v_tic);
    __pyx_v_tic = __pyx_v_toc;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("zmq.core.message.MessageTracker.wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tic);
  __Pyx_XDECREF(__pyx_v_remaining);
  __Pyx_XDECREF(__pyx_v_evt);
  __Pyx_XDECREF(__pyx_v_toc);
  __Pyx_XDECREF(__pyx_v_peer);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pyx":178
 *             tic = toc
 * 
 *     def old_wait(self):             # <<<<<<<<<<<<<<
 *         """If the new wait works, remove this method."""
 *         while not self.done:
 */

static PyObject *__pyx_pf_3zmq_4core_7message_14MessageTracker_3old_wait(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_3zmq_4core_7message_14MessageTracker_3old_wait[] = "If the new wait works, remove this method.";
static PyObject *__pyx_pf_3zmq_4core_7message_14MessageTracker_3old_wait(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("old_wait");

  /* "zmq/core/message.pyx":180
 *     def old_wait(self):
 *         """If the new wait works, remove this method."""
 *         while not self.done:             # <<<<<<<<<<<<<<
 *             time.sleep(.001)
 * 
 */
  while (1) {
    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__done); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = (!__pyx_t_2);
    if (!__pyx_t_3) break;

    /* "zmq/core/message.pyx":181
 *         """If the new wait works, remove this method."""
 *         while not self.done:
 *             time.sleep(.001)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__time); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__sleep); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyFloat_FromDouble(.001); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("zmq.core.message.MessageTracker.old_wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pyx":211
 *     """
 * 
 *     def __cinit__(self, object data=None, track=False, **kwargs):             # <<<<<<<<<<<<<<
 *         cdef int rc
 *         cdef char *data_c = NULL
 */

static int __pyx_pf_3zmq_4core_7message_7Message___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pf_3zmq_4core_7message_7Message___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_data = 0;
  PyObject *__pyx_v_track = 0;
  PyObject *__pyx_v_kwargs = 0;
  int __pyx_v_rc;
  char *__pyx_v_data_c;
  Py_ssize_t __pyx_v_data_len_c;
  PyObject *__pyx_v_hint = 0;
  PyObject *__pyx_v_evt = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__data,&__pyx_n_s__track,0};
  __Pyx_RefNannySetupContext("__cinit__");
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return -1;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)Py_None);
    values[1] = __pyx_k_4;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data);
          if (value) { values[0] = value; kw_args--; }
        }
        case  1:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__track);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_data = values[0];
    __pyx_v_track = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("zmq.core.message.Message.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;

  /* "zmq/core/message.pyx":213
 *     def __cinit__(self, object data=None, track=False, **kwargs):
 *         cdef int rc
 *         cdef char *data_c = NULL             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t data_len_c=0
 *         cdef object hint
 */
  __pyx_v_data_c = NULL;

  /* "zmq/core/message.pyx":214
 *         cdef int rc
 *         cdef char *data_c = NULL
 *         cdef Py_ssize_t data_len_c=0             # <<<<<<<<<<<<<<
 *         cdef object hint
 * 
 */
  __pyx_v_data_len_c = 0;

  /* "zmq/core/message.pyx":218
 * 
 *         # Save the data object in case the user wants the the data as a str.
 *         self._data = data             # <<<<<<<<<<<<<<
 *         self._failed_init = True  # bool switch for dealloc
 *         self._buffer = None       # buffer view of data
 */
  __Pyx_INCREF(__pyx_v_data);
  __Pyx_GIVEREF(__pyx_v_data);
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_data);
  __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_data);
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_data = __pyx_v_data;

  /* "zmq/core/message.pyx":219
 *         # Save the data object in case the user wants the the data as a str.
 *         self._data = data
 *         self._failed_init = True  # bool switch for dealloc             # <<<<<<<<<<<<<<
 *         self._buffer = None       # buffer view of data
 *         self._bytes = None        # bytes copy of data
 */
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_failed_init = 1;

  /* "zmq/core/message.pyx":220
 *         self._data = data
 *         self._failed_init = True  # bool switch for dealloc
 *         self._buffer = None       # buffer view of data             # <<<<<<<<<<<<<<
 *         self._bytes = None        # bytes copy of data
 * 
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer);
  __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer);
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer = Py_None;

  /* "zmq/core/message.pyx":221
 *         self._failed_init = True  # bool switch for dealloc
 *         self._buffer = None       # buffer view of data
 *         self._bytes = None        # bytes copy of data             # <<<<<<<<<<<<<<
 * 
 *         # Event and MessageTracker for monitoring when zmq is done with data:
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes);
  __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes);
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes = Py_None;

  /* "zmq/core/message.pyx":224
 * 
 *         # Event and MessageTracker for monitoring when zmq is done with data:
 *         if track:             # <<<<<<<<<<<<<<
 *             evt = Event()
 *             # python 2.5 compat:
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_track); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_t_1) {

    /* "zmq/core/message.pyx":225
 *         # Event and MessageTracker for monitoring when zmq is done with data:
 *         if track:
 *             evt = Event()             # <<<<<<<<<<<<<<
 *             # python 2.5 compat:
 *             if not hasattr(evt, 'is_set'):
 */
    __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__Event); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_evt = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "zmq/core/message.pyx":227
 *             evt = Event()
 *             # python 2.5 compat:
 *             if not hasattr(evt, 'is_set'):             # <<<<<<<<<<<<<<
 *                 evt.is_set = evt.isSet
 *             self.tracker_event = evt
 */
    __pyx_t_3 = ((PyObject *)__pyx_n_s__is_set);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = PyObject_HasAttr(__pyx_v_evt, __pyx_t_3); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = (!__pyx_t_1);
    if (__pyx_t_4) {

      /* "zmq/core/message.pyx":228
 *             # python 2.5 compat:
 *             if not hasattr(evt, 'is_set'):
 *                 evt.is_set = evt.isSet             # <<<<<<<<<<<<<<
 *             self.tracker_event = evt
 *             self.tracker = MessageTracker(evt)
 */
      __pyx_t_3 = PyObject_GetAttr(__pyx_v_evt, __pyx_n_s__isSet); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      if (PyObject_SetAttr(__pyx_v_evt, __pyx_n_s__is_set, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L7;
    }
    __pyx_L7:;

    /* "zmq/core/message.pyx":229
 *             if not hasattr(evt, 'is_set'):
 *                 evt.is_set = evt.isSet
 *             self.tracker_event = evt             # <<<<<<<<<<<<<<
 *             self.tracker = MessageTracker(evt)
 *         else:
 */
    __Pyx_INCREF(__pyx_v_evt);
    __Pyx_GIVEREF(__pyx_v_evt);
    __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event);
    __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event);
    ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event = __pyx_v_evt;

    /* "zmq/core/message.pyx":230
 *                 evt.is_set = evt.isSet
 *             self.tracker_event = evt
 *             self.tracker = MessageTracker(evt)             # <<<<<<<<<<<<<<
 *         else:
 *             self.tracker_event = None
 */
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    __Pyx_INCREF(__pyx_v_evt);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_evt);
    __Pyx_GIVEREF(__pyx_v_evt);
    __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3zmq_4core_7message_MessageTracker)), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
    __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
    ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L6;
  }
  /*else*/ {

    /* "zmq/core/message.pyx":232
 *             self.tracker = MessageTracker(evt)
 *         else:
 *             self.tracker_event = None             # <<<<<<<<<<<<<<
 *             self.tracker = None
 * 
 */
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event);
    __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event);
    ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event = Py_None;

    /* "zmq/core/message.pyx":233
 *         else:
 *             self.tracker_event = None
 *             self.tracker = None             # <<<<<<<<<<<<<<
 * 
 *         if isinstance(data, unicode):
 */
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
    __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
    ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker = Py_None;
  }
  __pyx_L6:;

  /* "zmq/core/message.pyx":235
 *             self.tracker = None
 * 
 *         if isinstance(data, unicode):             # <<<<<<<<<<<<<<
 *             raise TypeError("Unicode objects not allowed. Only: str/bytes, buffer interfaces.")
 * 
 */
  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__unicode); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyObject_IsInstance(__pyx_v_data, __pyx_t_2); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_4) {

    /* "zmq/core/message.pyx":236
 * 
 *         if isinstance(data, unicode):
 *             raise TypeError("Unicode objects not allowed. Only: str/bytes, buffer interfaces.")             # <<<<<<<<<<<<<<
 * 
 *         if data is None:
 */
    __pyx_t_2 = PyObject_Call(__pyx_builtin_TypeError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L8;
  }
  __pyx_L8:;

  /* "zmq/core/message.pyx":238
 *             raise TypeError("Unicode objects not allowed. Only: str/bytes, buffer interfaces.")
 * 
 *         if data is None:             # <<<<<<<<<<<<<<
 *             with nogil:
 *                 rc = zmq_msg_init(&self.zmq_msg)
 */
  __pyx_t_4 = (__pyx_v_data == Py_None);
  if (__pyx_t_4) {

    /* "zmq/core/message.pyx":239
 * 
 *         if data is None:
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 rc = zmq_msg_init(&self.zmq_msg)
 *             if rc != 0:
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save = NULL;
        #endif
        Py_UNBLOCK_THREADS
        /*try:*/ {

          /* "zmq/core/message.pyx":240
 *         if data is None:
 *             with nogil:
 *                 rc = zmq_msg_init(&self.zmq_msg)             # <<<<<<<<<<<<<<
 *             if rc != 0:
 *                 raise ZMQError()
 */
          __pyx_v_rc = zmq_msg_init((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg));
        }

        /* "zmq/core/message.pyx":239
 * 
 *         if data is None:
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 rc = zmq_msg_init(&self.zmq_msg)
 *             if rc != 0:
 */
        /*finally:*/ {
          Py_BLOCK_THREADS
        }
    }

    /* "zmq/core/message.pyx":241
 *             with nogil:
 *                 rc = zmq_msg_init(&self.zmq_msg)
 *             if rc != 0:             # <<<<<<<<<<<<<<
 *                 raise ZMQError()
 *             self._failed_init = False
 */
    __pyx_t_4 = (__pyx_v_rc != 0);
    if (__pyx_t_4) {

      /* "zmq/core/message.pyx":242
 *                 rc = zmq_msg_init(&self.zmq_msg)
 *             if rc != 0:
 *                 raise ZMQError()             # <<<<<<<<<<<<<<
 *             self._failed_init = False
 *             return
 */
      __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__ZMQError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L13;
    }
    __pyx_L13:;

    /* "zmq/core/message.pyx":243
 *             if rc != 0:
 *                 raise ZMQError()
 *             self._failed_init = False             # <<<<<<<<<<<<<<
 *             return
 *         else:
 */
    ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_failed_init = 0;

    /* "zmq/core/message.pyx":244
 *                 raise ZMQError()
 *             self._failed_init = False
 *             return             # <<<<<<<<<<<<<<
 *         else:
 *             asbuffer_r(data, <void **>&data_c, &data_len_c)
 */
    __pyx_r = 0;
    goto __pyx_L0;
    goto __pyx_L9;
  }
  /*else*/ {

    /* "zmq/core/message.pyx":246
 *             return
 *         else:
 *             asbuffer_r(data, <void **>&data_c, &data_len_c)             # <<<<<<<<<<<<<<
 *         # We INCREF the *original* Python object (not self) and pass it
 *         # as the hint below. This allows other copies of this Message
 */
    __pyx_t_3 = __pyx_f_7buffers_asbuffer_r(__pyx_v_data, ((void **)(&__pyx_v_data_c)), (&__pyx_v_data_len_c)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_L9:;

  /* "zmq/core/message.pyx":250
 *         # as the hint below. This allows other copies of this Message
 *         # object to take over the ref counting of data properly.
 *         hint = (data, self.tracker_event)             # <<<<<<<<<<<<<<
 *         Py_INCREF(hint)
 *         with nogil:
 */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __Pyx_INCREF(__pyx_v_data);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_data);
  __Pyx_GIVEREF(__pyx_v_data);
  __Pyx_INCREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event);
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event);
  __Pyx_GIVEREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event);
  __pyx_v_hint = ((PyObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "zmq/core/message.pyx":251
 *         # object to take over the ref counting of data properly.
 *         hint = (data, self.tracker_event)
 *         Py_INCREF(hint)             # <<<<<<<<<<<<<<
 *         with nogil:
 *             rc = zmq_msg_init_data(
 */
  Py_INCREF(__pyx_v_hint);

  /* "zmq/core/message.pyx":252
 *         hint = (data, self.tracker_event)
 *         Py_INCREF(hint)
 *         with nogil:             # <<<<<<<<<<<<<<
 *             rc = zmq_msg_init_data(
 *                 &self.zmq_msg, <void *>data_c, data_len_c,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save = NULL;
      #endif
      Py_UNBLOCK_THREADS
      /*try:*/ {

        /* "zmq/core/message.pyx":256
 *                 &self.zmq_msg, <void *>data_c, data_len_c,
 *                 <zmq_free_fn *>free_python_msg, <void *>hint
 *             )             # <<<<<<<<<<<<<<
 *         if rc != 0:
 *             Py_DECREF(hint)
 */
        __pyx_v_rc = zmq_msg_init_data((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg), ((void *)__pyx_v_data_c), __pyx_v_data_len_c, ((zmq_free_fn *)__pyx_f_3zmq_4core_7message_free_python_msg), ((void *)__pyx_v_hint));
      }

      /* "zmq/core/message.pyx":252
 *         hint = (data, self.tracker_event)
 *         Py_INCREF(hint)
 *         with nogil:             # <<<<<<<<<<<<<<
 *             rc = zmq_msg_init_data(
 *                 &self.zmq_msg, <void *>data_c, data_len_c,
 */
      /*finally:*/ {
        Py_BLOCK_THREADS
      }
  }

  /* "zmq/core/message.pyx":257
 *                 <zmq_free_fn *>free_python_msg, <void *>hint
 *             )
 *         if rc != 0:             # <<<<<<<<<<<<<<
 *             Py_DECREF(hint)
 *             raise ZMQError()
 */
  __pyx_t_4 = (__pyx_v_rc != 0);
  if (__pyx_t_4) {

    /* "zmq/core/message.pyx":258
 *             )
 *         if rc != 0:
 *             Py_DECREF(hint)             # <<<<<<<<<<<<<<
 *             raise ZMQError()
 *         self._failed_init = False
 */
    Py_DECREF(__pyx_v_hint);

    /* "zmq/core/message.pyx":259
 *         if rc != 0:
 *             Py_DECREF(hint)
 *             raise ZMQError()             # <<<<<<<<<<<<<<
 *         self._failed_init = False
 * 
 */
    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__ZMQError); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L17;
  }
  __pyx_L17:;

  /* "zmq/core/message.pyx":260
 *             Py_DECREF(hint)
 *             raise ZMQError()
 *         self._failed_init = False             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, object data=None, track=False):
 */
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_failed_init = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("zmq.core.message.Message.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XDECREF(__pyx_v_hint);
  __Pyx_XDECREF(__pyx_v_evt);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pyx":262
 *         self._failed_init = False
 * 
 *     def __init__(self, object data=None, track=False):             # <<<<<<<<<<<<<<
 *         """Enforce signature"""
 *         pass
 */

static int __pyx_pf_3zmq_4core_7message_7Message_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_3zmq_4core_7message_7Message_1__init__[] = "Enforce signature";
struct wrapperbase __pyx_wrapperbase_3zmq_4core_7message_7Message_1__init__;
static int __pyx_pf_3zmq_4core_7message_7Message_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_data = 0;
  PyObject *__pyx_v_track = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__data,&__pyx_n_s__track,0};
  __Pyx_RefNannySetupContext("__init__");
  {
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)Py_None);
    values[1] = __pyx_k_7;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data);
          if (value) { values[0] = value; kw_args--; }
        }
        case  1:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__track);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_data = values[0];
    __pyx_v_track = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("zmq.core.message.Message.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pyx":266
 *         pass
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         cdef int rc
 *         if self._failed_init:
 */

static void __pyx_pf_3zmq_4core_7message_7Message_2__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pf_3zmq_4core_7message_7Message_2__dealloc__(PyObject *__pyx_v_self) {
  int __pyx_v_rc;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__dealloc__");

  /* "zmq/core/message.pyx":268
 *     def __dealloc__(self):
 *         cdef int rc
 *         if self._failed_init:             # <<<<<<<<<<<<<<
 *             return
 *         # This simply decreases the 0MQ ref-count of zmq_msg.
 */
  if (((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_failed_init) {

    /* "zmq/core/message.pyx":269
 *         cdef int rc
 *         if self._failed_init:
 *             return             # <<<<<<<<<<<<<<
 *         # This simply decreases the 0MQ ref-count of zmq_msg.
 *         with nogil:
 */
    goto __pyx_L0;
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "zmq/core/message.pyx":271
 *             return
 *         # This simply decreases the 0MQ ref-count of zmq_msg.
 *         with nogil:             # <<<<<<<<<<<<<<
 *             rc = zmq_msg_close(&self.zmq_msg)
 *         if rc != 0:
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save = NULL;
      #endif
      Py_UNBLOCK_THREADS
      /*try:*/ {

        /* "zmq/core/message.pyx":272
 *         # This simply decreases the 0MQ ref-count of zmq_msg.
 *         with nogil:
 *             rc = zmq_msg_close(&self.zmq_msg)             # <<<<<<<<<<<<<<
 *         if rc != 0:
 *             raise ZMQError()
 */
        __pyx_v_rc = zmq_msg_close((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg));
      }

      /* "zmq/core/message.pyx":271
 *             return
 *         # This simply decreases the 0MQ ref-count of zmq_msg.
 *         with nogil:             # <<<<<<<<<<<<<<
 *             rc = zmq_msg_close(&self.zmq_msg)
 *         if rc != 0:
 */
      /*finally:*/ {
        Py_BLOCK_THREADS
      }
  }

  /* "zmq/core/message.pyx":273
 *         with nogil:
 *             rc = zmq_msg_close(&self.zmq_msg)
 *         if rc != 0:             # <<<<<<<<<<<<<<
 *             raise ZMQError()
 * 
 */
  __pyx_t_1 = (__pyx_v_rc != 0);
  if (__pyx_t_1) {

    /* "zmq/core/message.pyx":274
 *             rc = zmq_msg_close(&self.zmq_msg)
 *         if rc != 0:
 *             raise ZMQError()             # <<<<<<<<<<<<<<
 * 
 *     # buffer interface code adapted from petsc4py by Lisandro Dalcin, a BSD project
 */
    __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__ZMQError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L9;
  }
  __pyx_L9:;

  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("zmq.core.message.Message.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "zmq/core/message.pyx":278
 *     # buffer interface code adapted from petsc4py by Lisandro Dalcin, a BSD project
 * 
 *     def __getbuffer__(self, Py_buffer* buffer, int flags):             # <<<<<<<<<<<<<<
 *         # new-style (memoryview) buffer interface
 *         with nogil:
 */

static CYTHON_UNUSED int __pyx_pf_3zmq_4core_7message_7Message_3__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_buffer, int __pyx_v_flags); /*proto*/
static CYTHON_UNUSED int __pyx_pf_3zmq_4core_7message_7Message_3__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_buffer, int __pyx_v_flags) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getbuffer__");
  if (__pyx_v_buffer != NULL) {
    __pyx_v_buffer->obj = Py_None; __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(__pyx_v_buffer->obj);
  }

  /* "zmq/core/message.pyx":280
 *     def __getbuffer__(self, Py_buffer* buffer, int flags):
 *         # new-style (memoryview) buffer interface
 *         with nogil:             # <<<<<<<<<<<<<<
 *             buffer.buf = zmq_msg_data(&self.zmq_msg)
 *             buffer.len = zmq_msg_size(&self.zmq_msg)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save = NULL;
      #endif
      Py_UNBLOCK_THREADS
      /*try:*/ {

        /* "zmq/core/message.pyx":281
 *         # new-style (memoryview) buffer interface
 *         with nogil:
 *             buffer.buf = zmq_msg_data(&self.zmq_msg)             # <<<<<<<<<<<<<<
 *             buffer.len = zmq_msg_size(&self.zmq_msg)
 * 
 */
        __pyx_v_buffer->buf = zmq_msg_data((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg));

        /* "zmq/core/message.pyx":282
 *         with nogil:
 *             buffer.buf = zmq_msg_data(&self.zmq_msg)
 *             buffer.len = zmq_msg_size(&self.zmq_msg)             # <<<<<<<<<<<<<<
 * 
 *         buffer.obj = self
 */
        __pyx_v_buffer->len = zmq_msg_size((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg));
      }

      /* "zmq/core/message.pyx":280
 *     def __getbuffer__(self, Py_buffer* buffer, int flags):
 *         # new-style (memoryview) buffer interface
 *         with nogil:             # <<<<<<<<<<<<<<
 *             buffer.buf = zmq_msg_data(&self.zmq_msg)
 *             buffer.len = zmq_msg_size(&self.zmq_msg)
 */
      /*finally:*/ {
        Py_BLOCK_THREADS
      }
  }

  /* "zmq/core/message.pyx":284
 *             buffer.len = zmq_msg_size(&self.zmq_msg)
 * 
 *         buffer.obj = self             # <<<<<<<<<<<<<<
 *         buffer.readonly = 1
 *         buffer.format = "B"
 */
  __Pyx_INCREF(__pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  __Pyx_GOTREF(__pyx_v_buffer->obj);
  __Pyx_DECREF(__pyx_v_buffer->obj);
  __pyx_v_buffer->obj = __pyx_v_self;

  /* "zmq/core/message.pyx":285
 * 
 *         buffer.obj = self
 *         buffer.readonly = 1             # <<<<<<<<<<<<<<
 *         buffer.format = "B"
 *         buffer.ndim = 0
 */
  __pyx_v_buffer->readonly = 1;

  /* "zmq/core/message.pyx":286
 *         buffer.obj = self
 *         buffer.readonly = 1
 *         buffer.format = "B"             # <<<<<<<<<<<<<<
 *         buffer.ndim = 0
 *         buffer.shape = NULL
 */
  __pyx_v_buffer->format = __pyx_k__B;

  /* "zmq/core/message.pyx":287
 *         buffer.readonly = 1
 *         buffer.format = "B"
 *         buffer.ndim = 0             # <<<<<<<<<<<<<<
 *         buffer.shape = NULL
 *         buffer.strides = NULL
 */
  __pyx_v_buffer->ndim = 0;

  /* "zmq/core/message.pyx":288
 *         buffer.format = "B"
 *         buffer.ndim = 0
 *         buffer.shape = NULL             # <<<<<<<<<<<<<<
 *         buffer.strides = NULL
 *         buffer.suboffsets = NULL
 */
  __pyx_v_buffer->shape = NULL;

  /* "zmq/core/message.pyx":289
 *         buffer.ndim = 0
 *         buffer.shape = NULL
 *         buffer.strides = NULL             # <<<<<<<<<<<<<<
 *         buffer.suboffsets = NULL
 *         buffer.itemsize = 1
 */
  __pyx_v_buffer->strides = NULL;

  /* "zmq/core/message.pyx":290
 *         buffer.shape = NULL
 *         buffer.strides = NULL
 *         buffer.suboffsets = NULL             # <<<<<<<<<<<<<<
 *         buffer.itemsize = 1
 *         buffer.internal = NULL
 */
  __pyx_v_buffer->suboffsets = NULL;

  /* "zmq/core/message.pyx":291
 *         buffer.strides = NULL
 *         buffer.suboffsets = NULL
 *         buffer.itemsize = 1             # <<<<<<<<<<<<<<
 *         buffer.internal = NULL
 * 
 */
  __pyx_v_buffer->itemsize = 1;

  /* "zmq/core/message.pyx":292
 *         buffer.suboffsets = NULL
 *         buffer.itemsize = 1
 *         buffer.internal = NULL             # <<<<<<<<<<<<<<
 * 
 *     def __getsegcount__(self, Py_ssize_t *lenp):
 */
  __pyx_v_buffer->internal = NULL;

  __pyx_r = 0;
  if (__pyx_v_buffer != NULL && __pyx_v_buffer->obj == Py_None) {
    __Pyx_GOTREF(Py_None);
    __Pyx_DECREF(Py_None); __pyx_v_buffer->obj = NULL;
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pyx":294
 *         buffer.internal = NULL
 * 
 *     def __getsegcount__(self, Py_ssize_t *lenp):             # <<<<<<<<<<<<<<
 *         # required for getreadbuffer
 *         if lenp != NULL:
 */

#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pf_3zmq_4core_7message_7Message_4__getsegcount__(PyObject *__pyx_v_self, Py_ssize_t *__pyx_v_lenp); /*proto*/
static Py_ssize_t __pyx_pf_3zmq_4core_7message_7Message_4__getsegcount__(PyObject *__pyx_v_self, Py_ssize_t *__pyx_v_lenp) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("__getsegcount__");

  /* "zmq/core/message.pyx":296
 *     def __getsegcount__(self, Py_ssize_t *lenp):
 *         # required for getreadbuffer
 *         if lenp != NULL:             # <<<<<<<<<<<<<<
 *             with nogil:
 *                 lenp[0] = zmq_msg_size(&self.zmq_msg)
 */
  __pyx_t_1 = (__pyx_v_lenp != NULL);
  if (__pyx_t_1) {

    /* "zmq/core/message.pyx":297
 *         # required for getreadbuffer
 *         if lenp != NULL:
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 lenp[0] = zmq_msg_size(&self.zmq_msg)
 *         return 1
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save = NULL;
        #endif
        Py_UNBLOCK_THREADS
        /*try:*/ {

          /* "zmq/core/message.pyx":298
 *         if lenp != NULL:
 *             with nogil:
 *                 lenp[0] = zmq_msg_size(&self.zmq_msg)             # <<<<<<<<<<<<<<
 *         return 1
 * 
 */
          (__pyx_v_lenp[0]) = zmq_msg_size((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg));
        }

        /* "zmq/core/message.pyx":297
 *         # required for getreadbuffer
 *         if lenp != NULL:
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 lenp[0] = zmq_msg_size(&self.zmq_msg)
 *         return 1
 */
        /*finally:*/ {
          Py_BLOCK_THREADS
        }
    }
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "zmq/core/message.pyx":299
 *             with nogil:
 *                 lenp[0] = zmq_msg_size(&self.zmq_msg)
 *         return 1             # <<<<<<<<<<<<<<
 * 
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):
 */
  __pyx_r = 1;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if PY_MAJOR_VERSION < 3)*/

/* "zmq/core/message.pyx":301
 *         return 1
 * 
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
 *         # old-style (buffer) interface
 *         cdef char *data_c = NULL
 */

#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pf_3zmq_4core_7message_7Message_5__getreadbuffer__(PyObject *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p); /*proto*/
static Py_ssize_t __pyx_pf_3zmq_4core_7message_7Message_5__getreadbuffer__(PyObject *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p) {
  char *__pyx_v_data_c;
  Py_ssize_t __pyx_v_data_len_c;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getreadbuffer__");

  /* "zmq/core/message.pyx":303
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):
 *         # old-style (buffer) interface
 *         cdef char *data_c = NULL             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t data_len_c
 *         if idx != 0:
 */
  __pyx_v_data_c = NULL;

  /* "zmq/core/message.pyx":305
 *         cdef char *data_c = NULL
 *         cdef Py_ssize_t data_len_c
 *         if idx != 0:             # <<<<<<<<<<<<<<
 *             raise SystemError("accessing non-existent buffer segment")
 *         # read-only, because we don't want to allow
 */
  __pyx_t_1 = (__pyx_v_idx != 0);
  if (__pyx_t_1) {

    /* "zmq/core/message.pyx":306
 *         cdef Py_ssize_t data_len_c
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")             # <<<<<<<<<<<<<<
 *         # read-only, because we don't want to allow
 *         # editing of the message in-place
 */
    __pyx_t_2 = PyObject_Call(__pyx_builtin_SystemError, ((PyObject *)__pyx_k_tuple_9), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "zmq/core/message.pyx":309
 *         # read-only, because we don't want to allow
 *         # editing of the message in-place
 *         with nogil:             # <<<<<<<<<<<<<<
 *             data_c = <char *>zmq_msg_data(&self.zmq_msg)
 *             data_len_c = zmq_msg_size(&self.zmq_msg)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save = NULL;
      #endif
      Py_UNBLOCK_THREADS
      /*try:*/ {

        /* "zmq/core/message.pyx":310
 *         # editing of the message in-place
 *         with nogil:
 *             data_c = <char *>zmq_msg_data(&self.zmq_msg)             # <<<<<<<<<<<<<<
 *             data_len_c = zmq_msg_size(&self.zmq_msg)
 *         if p != NULL:
 */
        __pyx_v_data_c = ((char *)zmq_msg_data((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg)));

        /* "zmq/core/message.pyx":311
 *         with nogil:
 *             data_c = <char *>zmq_msg_data(&self.zmq_msg)
 *             data_len_c = zmq_msg_size(&self.zmq_msg)             # <<<<<<<<<<<<<<
 *         if p != NULL:
 *             p[0] = <void*>data_c
 */
        __pyx_v_data_len_c = zmq_msg_size((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg));
      }

      /* "zmq/core/message.pyx":309
 *         # read-only, because we don't want to allow
 *         # editing of the message in-place
 *         with nogil:             # <<<<<<<<<<<<<<
 *             data_c = <char *>zmq_msg_data(&self.zmq_msg)
 *             data_len_c = zmq_msg_size(&self.zmq_msg)
 */
      /*finally:*/ {
        Py_BLOCK_THREADS
      }
  }

  /* "zmq/core/message.pyx":312
 *             data_c = <char *>zmq_msg_data(&self.zmq_msg)
 *             data_len_c = zmq_msg_size(&self.zmq_msg)
 *         if p != NULL:             # <<<<<<<<<<<<<<
 *             p[0] = <void*>data_c
 *         return data_len_c
 */
  __pyx_t_1 = (__pyx_v_p != NULL);
  if (__pyx_t_1) {

    /* "zmq/core/message.pyx":313
 *             data_len_c = zmq_msg_size(&self.zmq_msg)
 *         if p != NULL:
 *             p[0] = <void*>data_c             # <<<<<<<<<<<<<<
 *         return data_len_c
 * 
 */
    (__pyx_v_p[0]) = ((void *)__pyx_v_data_c);
    goto __pyx_L9;
  }
  __pyx_L9:;

  /* "zmq/core/message.pyx":314
 *         if p != NULL:
 *             p[0] = <void*>data_c
 *         return data_len_c             # <<<<<<<<<<<<<<
 * 
 *     # end buffer interface
 */
  __pyx_r = __pyx_v_data_len_c;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("zmq.core.message.Message.__getreadbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if PY_MAJOR_VERSION < 3)*/

/* "zmq/core/message.pyx":318
 *     # end buffer interface
 * 
 *     def __copy__(self):             # <<<<<<<<<<<<<<
 *         """Create a shallow copy of the message.
 * 
 */

static PyObject *__pyx_pf_3zmq_4core_7message_7Message_6__copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_3zmq_4core_7message_7Message_6__copy__[] = "Create a shallow copy of the message.\n\n        This does not copy the contents of the Message, just the pointer.\n        This will increment the 0MQ ref count of the message, but not\n        the ref count of the Python object. That is only done once when\n        the Python is first turned into a 0MQ message.\n        ";
static PyObject *__pyx_pf_3zmq_4core_7message_7Message_6__copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__copy__");

  /* "zmq/core/message.pyx":326
 *         the Python is first turned into a 0MQ message.
 *         """
 *         return self.fast_copy()             # <<<<<<<<<<<<<<
 * 
 *     cdef Message fast_copy(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_3zmq_4core_7message_Message *)((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->__pyx_vtab)->fast_copy(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("zmq.core.message.Message.__copy__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pyx":328
 *         return self.fast_copy()
 * 
 *     cdef Message fast_copy(self):             # <<<<<<<<<<<<<<
 *         """Fast, cdef'd version of shallow copy of the message."""
 *         cdef Message new_msg
 */

static struct __pyx_obj_3zmq_4core_7message_Message *__pyx_f_3zmq_4core_7message_7Message_fast_copy(struct __pyx_obj_3zmq_4core_7message_Message *__pyx_v_self) {
  struct __pyx_obj_3zmq_4core_7message_Message *__pyx_v_new_msg = 0;
  struct __pyx_obj_3zmq_4core_7message_Message *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("fast_copy");

  /* "zmq/core/message.pyx":331
 *         """Fast, cdef'd version of shallow copy of the message."""
 *         cdef Message new_msg
 *         new_msg = Message()             # <<<<<<<<<<<<<<
 *         # This does not copy the contents, but just increases the ref-count
 *         # of the zmq_msg by one.
 */
  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3zmq_4core_7message_Message)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_new_msg = ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "zmq/core/message.pyx":334
 *         # This does not copy the contents, but just increases the ref-count
 *         # of the zmq_msg by one.
 *         with nogil:             # <<<<<<<<<<<<<<
 *             zmq_msg_copy(&new_msg.zmq_msg, &self.zmq_msg)
 *         # Copy the ref to data so the copy won't create a copy when str is
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save = NULL;
      #endif
      Py_UNBLOCK_THREADS
      /*try:*/ {

        /* "zmq/core/message.pyx":335
 *         # of the zmq_msg by one.
 *         with nogil:
 *             zmq_msg_copy(&new_msg.zmq_msg, &self.zmq_msg)             # <<<<<<<<<<<<<<
 *         # Copy the ref to data so the copy won't create a copy when str is
 *         # called.
 */
        zmq_msg_copy((&__pyx_v_new_msg->zmq_msg), (&__pyx_v_self->zmq_msg));
      }

      /* "zmq/core/message.pyx":334
 *         # This does not copy the contents, but just increases the ref-count
 *         # of the zmq_msg by one.
 *         with nogil:             # <<<<<<<<<<<<<<
 *             zmq_msg_copy(&new_msg.zmq_msg, &self.zmq_msg)
 *         # Copy the ref to data so the copy won't create a copy when str is
 */
      /*finally:*/ {
        Py_BLOCK_THREADS
      }
  }

  /* "zmq/core/message.pyx":338
 *         # Copy the ref to data so the copy won't create a copy when str is
 *         # called.
 *         if self._data is not None:             # <<<<<<<<<<<<<<
 *             new_msg._data = self._data
 *         if self._buffer is not None:
 */
  __pyx_t_2 = (__pyx_v_self->_data != Py_None);
  if (__pyx_t_2) {

    /* "zmq/core/message.pyx":339
 *         # called.
 *         if self._data is not None:
 *             new_msg._data = self._data             # <<<<<<<<<<<<<<
 *         if self._buffer is not None:
 *             new_msg._buffer = self._buffer
 */
    __Pyx_INCREF(__pyx_v_self->_data);
    __Pyx_GIVEREF(__pyx_v_self->_data);
    __Pyx_GOTREF(__pyx_v_new_msg->_data);
    __Pyx_DECREF(__pyx_v_new_msg->_data);
    __pyx_v_new_msg->_data = __pyx_v_self->_data;
    goto __pyx_L6;
  }
  __pyx_L6:;

  /* "zmq/core/message.pyx":340
 *         if self._data is not None:
 *             new_msg._data = self._data
 *         if self._buffer is not None:             # <<<<<<<<<<<<<<
 *             new_msg._buffer = self._buffer
 *         if self._bytes is not None:
 */
  __pyx_t_2 = (__pyx_v_self->_buffer != Py_None);
  if (__pyx_t_2) {

    /* "zmq/core/message.pyx":341
 *             new_msg._data = self._data
 *         if self._buffer is not None:
 *             new_msg._buffer = self._buffer             # <<<<<<<<<<<<<<
 *         if self._bytes is not None:
 *             new_msg._bytes = self._bytes
 */
    __Pyx_INCREF(__pyx_v_self->_buffer);
    __Pyx_GIVEREF(__pyx_v_self->_buffer);
    __Pyx_GOTREF(__pyx_v_new_msg->_buffer);
    __Pyx_DECREF(__pyx_v_new_msg->_buffer);
    __pyx_v_new_msg->_buffer = __pyx_v_self->_buffer;
    goto __pyx_L7;
  }
  __pyx_L7:;

  /* "zmq/core/message.pyx":342
 *         if self._buffer is not None:
 *             new_msg._buffer = self._buffer
 *         if self._bytes is not None:             # <<<<<<<<<<<<<<
 *             new_msg._bytes = self._bytes
 * 
 */
  __pyx_t_2 = (__pyx_v_self->_bytes != Py_None);
  if (__pyx_t_2) {

    /* "zmq/core/message.pyx":343
 *             new_msg._buffer = self._buffer
 *         if self._bytes is not None:
 *             new_msg._bytes = self._bytes             # <<<<<<<<<<<<<<
 * 
 *         # Message copies share the tracker and tracker_event
 */
    __Pyx_INCREF(__pyx_v_self->_bytes);
    __Pyx_GIVEREF(__pyx_v_self->_bytes);
    __Pyx_GOTREF(__pyx_v_new_msg->_bytes);
    __Pyx_DECREF(__pyx_v_new_msg->_bytes);
    __pyx_v_new_msg->_bytes = __pyx_v_self->_bytes;
    goto __pyx_L8;
  }
  __pyx_L8:;

  /* "zmq/core/message.pyx":346
 * 
 *         # Message copies share the tracker and tracker_event
 *         new_msg.tracker_event = self.tracker_event             # <<<<<<<<<<<<<<
 *         new_msg.tracker = self.tracker
 * 
 */
  __Pyx_INCREF(__pyx_v_self->tracker_event);
  __Pyx_GIVEREF(__pyx_v_self->tracker_event);
  __Pyx_GOTREF(__pyx_v_new_msg->tracker_event);
  __Pyx_DECREF(__pyx_v_new_msg->tracker_event);
  __pyx_v_new_msg->tracker_event = __pyx_v_self->tracker_event;

  /* "zmq/core/message.pyx":347
 *         # Message copies share the tracker and tracker_event
 *         new_msg.tracker_event = self.tracker_event
 *         new_msg.tracker = self.tracker             # <<<<<<<<<<<<<<
 * 
 *         return new_msg
 */
  __Pyx_INCREF(__pyx_v_self->tracker);
  __Pyx_GIVEREF(__pyx_v_self->tracker);
  __Pyx_GOTREF(__pyx_v_new_msg->tracker);
  __Pyx_DECREF(__pyx_v_new_msg->tracker);
  __pyx_v_new_msg->tracker = __pyx_v_self->tracker;

  /* "zmq/core/message.pyx":349
 *         new_msg.tracker = self.tracker
 * 
 *         return new_msg             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_new_msg));
  __pyx_r = __pyx_v_new_msg;
  goto __pyx_L0;

  __pyx_r = ((struct __pyx_obj_3zmq_4core_7message_Message *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("zmq.core.message.Message.fast_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_new_msg);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pyx":351
 *         return new_msg
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         """Return the length of the message in bytes."""
 *         cdef int sz
 */

static Py_ssize_t __pyx_pf_3zmq_4core_7message_7Message_7__len__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_3zmq_4core_7message_7Message_7__len__[] = "Return the length of the message in bytes.";
struct wrapperbase __pyx_wrapperbase_3zmq_4core_7message_7Message_7__len__;
static Py_ssize_t __pyx_pf_3zmq_4core_7message_7Message_7__len__(PyObject *__pyx_v_self) {
  int __pyx_v_sz;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__");

  /* "zmq/core/message.pyx":354
 *         """Return the length of the message in bytes."""
 *         cdef int sz
 *         with nogil:             # <<<<<<<<<<<<<<
 *             sz = zmq_msg_size(&self.zmq_msg)
 *         return sz
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save = NULL;
      #endif
      Py_UNBLOCK_THREADS
      /*try:*/ {

        /* "zmq/core/message.pyx":355
 *         cdef int sz
 *         with nogil:
 *             sz = zmq_msg_size(&self.zmq_msg)             # <<<<<<<<<<<<<<
 *         return sz
 *         # return <int>zmq_msg_size(&self.zmq_msg)
 */
        __pyx_v_sz = zmq_msg_size((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg));
      }

      /* "zmq/core/message.pyx":354
 *         """Return the length of the message in bytes."""
 *         cdef int sz
 *         with nogil:             # <<<<<<<<<<<<<<
 *             sz = zmq_msg_size(&self.zmq_msg)
 *         return sz
 */
      /*finally:*/ {
        Py_BLOCK_THREADS
      }
  }

  /* "zmq/core/message.pyx":356
 *         with nogil:
 *             sz = zmq_msg_size(&self.zmq_msg)
 *         return sz             # <<<<<<<<<<<<<<
 *         # return <int>zmq_msg_size(&self.zmq_msg)
 * 
 */
  __pyx_r = __pyx_v_sz;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pyx":359
 *         # return <int>zmq_msg_size(&self.zmq_msg)
 * 
 *     def __str__(self):             # <<<<<<<<<<<<<<
 *         """Return the str form of the message."""
 *         if isinstance(self._data, bytes):
 */

static PyObject *__pyx_pf_3zmq_4core_7message_7Message_8__str__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_3zmq_4core_7message_7Message_8__str__[] = "Return the str form of the message.";
struct wrapperbase __pyx_wrapperbase_3zmq_4core_7message_7Message_8__str__;
static PyObject *__pyx_pf_3zmq_4core_7message_7Message_8__str__(PyObject *__pyx_v_self) {
  PyObject *__pyx_v_b = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__str__");

  /* "zmq/core/message.pyx":361
 *     def __str__(self):
 *         """Return the str form of the message."""
 *         if isinstance(self._data, bytes):             # <<<<<<<<<<<<<<
 *             b = self._data
 *         else:
 */
  __pyx_t_1 = ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_data;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__bytes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyObject_IsInstance(__pyx_t_1, __pyx_t_2); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {

    /* "zmq/core/message.pyx":362
 *         """Return the str form of the message."""
 *         if isinstance(self._data, bytes):
 *             b = self._data             # <<<<<<<<<<<<<<
 *         else:
 *             b = self.bytes
 */
    __Pyx_INCREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_data);
    __pyx_v_b = ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_data;
    goto __pyx_L5;
  }
  /*else*/ {

    /* "zmq/core/message.pyx":364
 *             b = self._data
 *         else:
 *             b = self.bytes             # <<<<<<<<<<<<<<
 *         if str is unicode:
 *             return b.decode()
 */
    __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__bytes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_b = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L5:;

  /* "zmq/core/message.pyx":365
 *         else:
 *             b = self.bytes
 *         if str is unicode:             # <<<<<<<<<<<<<<
 *             return b.decode()
 *         else:
 */
  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__unicode); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = (((PyObject*)(&PyString_Type)) == ((PyObject*)__pyx_t_2));
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {

    /* "zmq/core/message.pyx":366
 *             b = self.bytes
 *         if str is unicode:
 *             return b.decode()             # <<<<<<<<<<<<<<
 *         else:
 *             return b
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyObject_GetAttr(__pyx_v_b, __pyx_n_s__decode); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
    goto __pyx_L6;
  }
  /*else*/ {

    /* "zmq/core/message.pyx":368
 *             return b.decode()
 *         else:
 *             return b             # <<<<<<<<<<<<<<
 * 
 *     cdef inline object _getbuffer(self):
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_b);
    __pyx_r = __pyx_v_b;
    goto __pyx_L0;
  }
  __pyx_L6:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("zmq.core.message.Message.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_b);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pyx":370
 *             return b
 * 
 *     cdef inline object _getbuffer(self):             # <<<<<<<<<<<<<<
 *         """Create a Python buffer/view of the message data.
 * 
 */

static CYTHON_INLINE PyObject *__pyx_f_3zmq_4core_7message_7Message__getbuffer(struct __pyx_obj_3zmq_4core_7message_Message *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_getbuffer");

  /* "zmq/core/message.pyx":376
 *         is accessed. Subsequent calls use a cached copy.
 *         """
 *         if self._data is None:             # <<<<<<<<<<<<<<
 *             return viewfromobject_r(self)
 *         else:
 */
  __pyx_t_1 = (__pyx_v_self->_data == Py_None);
  if (__pyx_t_1) {

    /* "zmq/core/message.pyx":377
 *         """
 *         if self._data is None:
 *             return viewfromobject_r(self)             # <<<<<<<<<<<<<<
 *         else:
 *             return viewfromobject_r(self._data)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7buffers_viewfromobject_r(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "zmq/core/message.pyx":379
 *             return viewfromobject_r(self)
 *         else:
 *             return viewfromobject_r(self._data)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_v_self->_data;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_3 = __pyx_f_7buffers_viewfromobject_r(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("zmq.core.message.Message._getbuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pyx":382
 * 
 *     @property
 *     def buffer(self):             # <<<<<<<<<<<<<<
 *         """Get a read-only buffer view of the message contents."""
 *         if self._buffer is None:
 */

static PyObject *__pyx_pf_3zmq_4core_7message_7Message_9buffer(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_3zmq_4core_7message_7Message_9buffer[] = "Get a read-only buffer view of the message contents.";
static PyObject *__pyx_pf_3zmq_4core_7message_7Message_9buffer(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("buffer");

  /* "zmq/core/message.pyx":384
 *     def buffer(self):
 *         """Get a read-only buffer view of the message contents."""
 *         if self._buffer is None:             # <<<<<<<<<<<<<<
 *             self._buffer = self._getbuffer()
 *         return self._buffer
 */
  __pyx_t_1 = (((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer == Py_None);
  if (__pyx_t_1) {

    /* "zmq/core/message.pyx":385
 *         """Get a read-only buffer view of the message contents."""
 *         if self._buffer is None:
 *             self._buffer = self._getbuffer()             # <<<<<<<<<<<<<<
 *         return self._buffer
 * 
 */
    __pyx_t_2 = ((struct __pyx_vtabstruct_3zmq_4core_7message_Message *)((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->__pyx_vtab)->_getbuffer(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer);
    __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer);
    ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "zmq/core/message.pyx":386
 *         if self._buffer is None:
 *             self._buffer = self._getbuffer()
 *         return self._buffer             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer);
  __pyx_r = ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("zmq.core.message.Message.buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pyx":389
 * 
 *     @property
 *     def bytes(self):             # <<<<<<<<<<<<<<
 *         """Get the message content as a Python str/bytes object.
 * 
 */

static PyObject *__pyx_pf_3zmq_4core_7message_7Message_10bytes(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_3zmq_4core_7message_7Message_10bytes[] = "Get the message content as a Python str/bytes object.\n\n        The first time this property is accessed, a copy of the message \n        contents is made. From then on that same copy of the message is\n        returned.\n        ";
static PyObject *__pyx_pf_3zmq_4core_7message_7Message_10bytes(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("bytes");

  /* "zmq/core/message.pyx":396
 *         returned.
 *         """
 *         if self._bytes is None:             # <<<<<<<<<<<<<<
 *             self._bytes = copy_zmq_msg_bytes(&self.zmq_msg)
 *         return self._bytes
 */
  __pyx_t_1 = (((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes == Py_None);
  if (__pyx_t_1) {

    /* "zmq/core/message.pyx":397
 *         """
 *         if self._bytes is None:
 *             self._bytes = copy_zmq_msg_bytes(&self.zmq_msg)             # <<<<<<<<<<<<<<
 *         return self._bytes
 * 
 */
    __pyx_t_2 = __pyx_f_3zmq_4core_7message_copy_zmq_msg_bytes((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes);
    __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes);
    ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "zmq/core/message.pyx":398
 *         if self._bytes is None:
 *             self._bytes = copy_zmq_msg_bytes(&self.zmq_msg)
 *         return self._bytes             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes);
  __pyx_r = ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("zmq.core.message.Message.bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pxd":47
 *     cdef object _bytes     # A bytes/str copy of the message.
 *     cdef bint _failed_init # Flag to handle failed zmq_msg_init
 *     cdef public object tracker_event  # Event for use with zmq_free_fn.             # <<<<<<<<<<<<<<
 *     cdef public object tracker        # MessageTracker object.
 * 
 */

static PyObject *__pyx_pf_3zmq_4core_7message_7Message_13tracker_event___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pf_3zmq_4core_7message_7Message_13tracker_event___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__");
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event);
  __pyx_r = ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_3zmq_4core_7message_7Message_13tracker_event_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pf_3zmq_4core_7message_7Message_13tracker_event_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__");
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event);
  __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event);
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event = __pyx_v_value;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_3zmq_4core_7message_7Message_13tracker_event_2__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pf_3zmq_4core_7message_7Message_13tracker_event_2__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__");
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event);
  __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event);
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_event = Py_None;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/core/message.pxd":48
 *     cdef bint _failed_init # Flag to handle failed zmq_msg_init
 *     cdef public object tracker_event  # Event for use with zmq_free_fn.
 *     cdef public object tracker        # MessageTracker object.             # <<<<<<<<<<<<<<
 * 
 *     cdef Message fast_copy(self) # Create shallow copy of Message object.
 */

static PyObject *__pyx_pf_3zmq_4core_7message_7Message_7tracker___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pf_3zmq_4core_7message_7Message_7tracker___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__");
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
  __pyx_r = ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_3zmq_4core_7message_7Message_7tracker_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pf_3zmq_4core_7message_7Message_7tracker_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__");
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
  __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker = __pyx_v_value;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_3zmq_4core_7message_7Message_7tracker_2__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pf_3zmq_4core_7message_7Message_7tracker_2__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__");
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
  __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker = Py_None;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":79
 * 
 * 
 * cdef inline int newstyle_available():             # <<<<<<<<<<<<<<
 *     return PY_MAJOR_VERSION >= 3 or (PY_MAJOR_VERSION >=2 and PY_MINOR_VERSION >= 6)
 * 
 */

static CYTHON_INLINE int __pyx_f_7buffers_newstyle_available(void) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("newstyle_available");

  /* "buffers.pxd":80
 * 
 * cdef inline int newstyle_available():
 *     return PY_MAJOR_VERSION >= 3 or (PY_MAJOR_VERSION >=2 and PY_MINOR_VERSION >= 6)             # <<<<<<<<<<<<<<
 * 
 * cdef inline int memoryview_available():
 */
  __pyx_t_1 = (PY_MAJOR_VERSION >= 3);
  if (!__pyx_t_1) {
    __pyx_t_2 = (PY_MAJOR_VERSION >= 2);
    if (__pyx_t_2) {
      __pyx_t_3 = (PY_MINOR_VERSION >= 6);
      __pyx_t_4 = __pyx_t_3;
    } else {
      __pyx_t_4 = __pyx_t_2;
    }
    __pyx_t_2 = __pyx_t_4;
  } else {
    __pyx_t_2 = __pyx_t_1;
  }
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":82
 *     return PY_MAJOR_VERSION >= 3 or (PY_MAJOR_VERSION >=2 and PY_MINOR_VERSION >= 6)
 * 
 * cdef inline int memoryview_available():             # <<<<<<<<<<<<<<
 *     return PY_MAJOR_VERSION >= 3 or (PY_MAJOR_VERSION >=2 and PY_MINOR_VERSION >= 7)
 * 
 */

static CYTHON_INLINE int __pyx_f_7buffers_memoryview_available(void) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("memoryview_available");

  /* "buffers.pxd":83
 * 
 * cdef inline int memoryview_available():
 *     return PY_MAJOR_VERSION >= 3 or (PY_MAJOR_VERSION >=2 and PY_MINOR_VERSION >= 7)             # <<<<<<<<<<<<<<
 * 
 * cdef inline int oldstyle_available():
 */
  __pyx_t_1 = (PY_MAJOR_VERSION >= 3);
  if (!__pyx_t_1) {
    __pyx_t_2 = (PY_MAJOR_VERSION >= 2);
    if (__pyx_t_2) {
      __pyx_t_3 = (PY_MINOR_VERSION >= 7);
      __pyx_t_4 = __pyx_t_3;
    } else {
      __pyx_t_4 = __pyx_t_2;
    }
    __pyx_t_2 = __pyx_t_4;
  } else {
    __pyx_t_2 = __pyx_t_1;
  }
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":85
 *     return PY_MAJOR_VERSION >= 3 or (PY_MAJOR_VERSION >=2 and PY_MINOR_VERSION >= 7)
 * 
 * cdef inline int oldstyle_available():             # <<<<<<<<<<<<<<
 *     return PY_MAJOR_VERSION < 3
 * 
 */

static CYTHON_INLINE int __pyx_f_7buffers_oldstyle_available(void) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("oldstyle_available");

  /* "buffers.pxd":86
 * 
 * cdef inline int oldstyle_available():
 *     return PY_MAJOR_VERSION < 3             # <<<<<<<<<<<<<<
 * 
 * cdef inline int check_buffer(object ob):
 */
  __pyx_r = (PY_MAJOR_VERSION < 3);
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":88
 *     return PY_MAJOR_VERSION < 3
 * 
 * cdef inline int check_buffer(object ob):             # <<<<<<<<<<<<<<
 *     """Version independent check for whether an object is a buffer.
 * 
 */

static CYTHON_INLINE int __pyx_f_7buffers_check_buffer(PyObject *__pyx_v_ob) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  long __pyx_t_2;
  __Pyx_RefNannySetupContext("check_buffer");

  /* "buffers.pxd":100
 *     int : 0 if no buffer interface, 3 if newstyle buffer interface, 2 if oldstyle.
 *     """
 *     if newstyle_available():             # <<<<<<<<<<<<<<
 *         if PyObject_CheckBuffer(ob):
 *             return 3
 */
  __pyx_t_1 = __pyx_f_7buffers_newstyle_available();
  if (__pyx_t_1) {

    /* "buffers.pxd":101
 *     """
 *     if newstyle_available():
 *         if PyObject_CheckBuffer(ob):             # <<<<<<<<<<<<<<
 *             return 3
 *     if oldstyle_available():
 */
    __pyx_t_1 = PyObject_CheckBuffer(__pyx_v_ob);
    if (__pyx_t_1) {

      /* "buffers.pxd":102
 *     if newstyle_available():
 *         if PyObject_CheckBuffer(ob):
 *             return 3             # <<<<<<<<<<<<<<
 *     if oldstyle_available():
 *         return PyObject_CheckReadBuffer(ob) and 2
 */
      __pyx_r = 3;
      goto __pyx_L0;
      goto __pyx_L4;
    }
    __pyx_L4:;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "buffers.pxd":103
 *         if PyObject_CheckBuffer(ob):
 *             return 3
 *     if oldstyle_available():             # <<<<<<<<<<<<<<
 *         return PyObject_CheckReadBuffer(ob) and 2
 *     return 0
 */
  __pyx_t_1 = __pyx_f_7buffers_oldstyle_available();
  if (__pyx_t_1) {

    /* "buffers.pxd":104
 *             return 3
 *     if oldstyle_available():
 *         return PyObject_CheckReadBuffer(ob) and 2             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
    __pyx_t_1 = PyObject_CheckReadBuffer(__pyx_v_ob);
    if (__pyx_t_1) {
      __pyx_t_2 = 2;
    } else {
      __pyx_t_2 = __pyx_t_1;
    }
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "buffers.pxd":105
 *     if oldstyle_available():
 *         return PyObject_CheckReadBuffer(ob) and 2
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_r = 0;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":108
 * 
 * 
 * cdef inline object asbuffer(object ob, int writable, int format,             # <<<<<<<<<<<<<<
 *                             void **base, Py_ssize_t *size,
 *                             Py_ssize_t *itemsize):
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_asbuffer(PyObject *__pyx_v_ob, int __pyx_v_writable, int __pyx_v_format, void **__pyx_v_base, Py_ssize_t *__pyx_v_size, Py_ssize_t *__pyx_v_itemsize) {
  void *__pyx_v_bptr;
  Py_ssize_t __pyx_v_blen;
  Py_ssize_t __pyx_v_bitemlen;
  PyObject *__pyx_v_bfmt = 0;
  Py_buffer __pyx_v_view;
  int __pyx_v_flags;
  int __pyx_v_mode;
  PyObject *__pyx_v_dtype = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  Py_ssize_t __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("asbuffer");

  /* "buffers.pxd":135
 *     """
 * 
 *     cdef void *bptr = NULL             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t blen = 0, bitemlen = 0
 *     cdef str bfmt = None
 */
  __pyx_v_bptr = NULL;

  /* "buffers.pxd":136
 * 
 *     cdef void *bptr = NULL
 *     cdef Py_ssize_t blen = 0, bitemlen = 0             # <<<<<<<<<<<<<<
 *     cdef str bfmt = None
 *     cdef Py_buffer view
 */
  __pyx_v_blen = 0;
  __pyx_v_bitemlen = 0;

  /* "buffers.pxd":137
 *     cdef void *bptr = NULL
 *     cdef Py_ssize_t blen = 0, bitemlen = 0
 *     cdef str bfmt = None             # <<<<<<<<<<<<<<
 *     cdef Py_buffer view
 *     cdef int flags = PyBUF_SIMPLE
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_bfmt = ((PyObject*)Py_None);

  /* "buffers.pxd":139
 *     cdef str bfmt = None
 *     cdef Py_buffer view
 *     cdef int flags = PyBUF_SIMPLE             # <<<<<<<<<<<<<<
 *     cdef int mode = 0
 * 
 */
  __pyx_v_flags = PyBUF_SIMPLE;

  /* "buffers.pxd":140
 *     cdef Py_buffer view
 *     cdef int flags = PyBUF_SIMPLE
 *     cdef int mode = 0             # <<<<<<<<<<<<<<
 * 
 *     mode = check_buffer(ob)
 */
  __pyx_v_mode = 0;

  /* "buffers.pxd":142
 *     cdef int mode = 0
 * 
 *     mode = check_buffer(ob)             # <<<<<<<<<<<<<<
 *     if mode == 0:
 *         raise TypeError("%r does not provide a buffer interface."%ob)
 */
  __pyx_v_mode = __pyx_f_7buffers_check_buffer(__pyx_v_ob);

  /* "buffers.pxd":143
 * 
 *     mode = check_buffer(ob)
 *     if mode == 0:             # <<<<<<<<<<<<<<
 *         raise TypeError("%r does not provide a buffer interface."%ob)
 * 
 */
  __pyx_t_1 = (__pyx_v_mode == 0);
  if (__pyx_t_1) {

    /* "buffers.pxd":144
 *     mode = check_buffer(ob)
 *     if mode == 0:
 *         raise TypeError("%r does not provide a buffer interface."%ob)             # <<<<<<<<<<<<<<
 * 
 *     if mode == 3:
 */
    __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_10), __pyx_v_ob); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_2));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
    __pyx_t_2 = 0;
    __pyx_t_2 = PyObject_Call(__pyx_builtin_TypeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "buffers.pxd":146
 *         raise TypeError("%r does not provide a buffer interface."%ob)
 * 
 *     if mode == 3:             # <<<<<<<<<<<<<<
 *         flags = PyBUF_ANY_CONTIGUOUS
 *         if writable:
 */
  __pyx_t_1 = (__pyx_v_mode == 3);
  if (__pyx_t_1) {

    /* "buffers.pxd":147
 * 
 *     if mode == 3:
 *         flags = PyBUF_ANY_CONTIGUOUS             # <<<<<<<<<<<<<<
 *         if writable:
 *             flags |= PyBUF_WRITABLE
 */
    __pyx_v_flags = PyBUF_ANY_CONTIGUOUS;

    /* "buffers.pxd":148
 *     if mode == 3:
 *         flags = PyBUF_ANY_CONTIGUOUS
 *         if writable:             # <<<<<<<<<<<<<<
 *             flags |= PyBUF_WRITABLE
 *         if format:
 */
    if (__pyx_v_writable) {

      /* "buffers.pxd":149
 *         flags = PyBUF_ANY_CONTIGUOUS
 *         if writable:
 *             flags |= PyBUF_WRITABLE             # <<<<<<<<<<<<<<
 *         if format:
 *             flags |= PyBUF_FORMAT
 */
      __pyx_v_flags = (__pyx_v_flags | PyBUF_WRITABLE);
      goto __pyx_L5;
    }
    __pyx_L5:;

    /* "buffers.pxd":150
 *         if writable:
 *             flags |= PyBUF_WRITABLE
 *         if format:             # <<<<<<<<<<<<<<
 *             flags |= PyBUF_FORMAT
 *         PyObject_GetBuffer(ob, &view, flags)
 */
    if (__pyx_v_format) {

      /* "buffers.pxd":151
 *             flags |= PyBUF_WRITABLE
 *         if format:
 *             flags |= PyBUF_FORMAT             # <<<<<<<<<<<<<<
 *         PyObject_GetBuffer(ob, &view, flags)
 *         bptr = view.buf
 */
      __pyx_v_flags = (__pyx_v_flags | PyBUF_FORMAT);
      goto __pyx_L6;
    }
    __pyx_L6:;

    /* "buffers.pxd":152
 *         if format:
 *             flags |= PyBUF_FORMAT
 *         PyObject_GetBuffer(ob, &view, flags)             # <<<<<<<<<<<<<<
 *         bptr = view.buf
 *         blen = view.len
 */
    __pyx_t_4 = PyObject_GetBuffer(__pyx_v_ob, (&__pyx_v_view), __pyx_v_flags); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

    /* "buffers.pxd":153
 *             flags |= PyBUF_FORMAT
 *         PyObject_GetBuffer(ob, &view, flags)
 *         bptr = view.buf             # <<<<<<<<<<<<<<
 *         blen = view.len
 *         if format:
 */
    __pyx_v_bptr = __pyx_v_view.buf;

    /* "buffers.pxd":154
 *         PyObject_GetBuffer(ob, &view, flags)
 *         bptr = view.buf
 *         blen = view.len             # <<<<<<<<<<<<<<
 *         if format:
 *             if view.format != NULL:
 */
    __pyx_v_blen = __pyx_v_view.len;

    /* "buffers.pxd":155
 *         bptr = view.buf
 *         blen = view.len
 *         if format:             # <<<<<<<<<<<<<<
 *             if view.format != NULL:
 *                 bfmt = view.format
 */
    if (__pyx_v_format) {

      /* "buffers.pxd":156
 *         blen = view.len
 *         if format:
 *             if view.format != NULL:             # <<<<<<<<<<<<<<
 *                 bfmt = view.format
 *                 bitemlen = view.itemsize
 */
      __pyx_t_1 = (__pyx_v_view.format != NULL);
      if (__pyx_t_1) {

        /* "buffers.pxd":157
 *         if format:
 *             if view.format != NULL:
 *                 bfmt = view.format             # <<<<<<<<<<<<<<
 *                 bitemlen = view.itemsize
 *         PyBuffer_Release(&view)
 */
        __pyx_t_2 = PyBytes_FromString(__pyx_v_view.format); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(((PyObject *)__pyx_t_2));
        if (!(likely(PyString_CheckExact(((PyObject *)__pyx_t_2)))||(PyErr_Format(PyExc_TypeError, "Expected str, got %.200s", Py_TYPE(((PyObject *)__pyx_t_2))->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_DECREF(((PyObject *)__pyx_v_bfmt));
        __pyx_v_bfmt = ((PyObject*)__pyx_t_2);
        __pyx_t_2 = 0;

        /* "buffers.pxd":158
 *             if view.format != NULL:
 *                 bfmt = view.format
 *                 bitemlen = view.itemsize             # <<<<<<<<<<<<<<
 *         PyBuffer_Release(&view)
 *     else: # oldstyle
 */
        __pyx_v_bitemlen = __pyx_v_view.itemsize;
        goto __pyx_L8;
      }
      __pyx_L8:;
      goto __pyx_L7;
    }
    __pyx_L7:;

    /* "buffers.pxd":159
 *                 bfmt = view.format
 *                 bitemlen = view.itemsize
 *         PyBuffer_Release(&view)             # <<<<<<<<<<<<<<
 *     else: # oldstyle
 *         if writable:
 */
    PyBuffer_Release((&__pyx_v_view));
    goto __pyx_L4;
  }
  /*else*/ {

    /* "buffers.pxd":161
 *         PyBuffer_Release(&view)
 *     else: # oldstyle
 *         if writable:             # <<<<<<<<<<<<<<
 *             PyObject_AsWriteBuffer(ob, &bptr, &blen)
 *         else:
 */
    if (__pyx_v_writable) {

      /* "buffers.pxd":162
 *     else: # oldstyle
 *         if writable:
 *             PyObject_AsWriteBuffer(ob, &bptr, &blen)             # <<<<<<<<<<<<<<
 *         else:
 *             PyObject_AsReadBuffer(ob, <const_void **>&bptr, &blen)
 */
      __pyx_t_4 = PyObject_AsWriteBuffer(__pyx_v_ob, (&__pyx_v_bptr), (&__pyx_v_blen)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L9;
    }
    /*else*/ {

      /* "buffers.pxd":164
 *             PyObject_AsWriteBuffer(ob, &bptr, &blen)
 *         else:
 *             PyObject_AsReadBuffer(ob, <const_void **>&bptr, &blen)             # <<<<<<<<<<<<<<
 *         if format:
 *             try: # numpy.ndarray
 */
      __pyx_t_4 = PyObject_AsReadBuffer(__pyx_v_ob, ((const void **)(&__pyx_v_bptr)), (&__pyx_v_blen)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_L9:;

    /* "buffers.pxd":165
 *         else:
 *             PyObject_AsReadBuffer(ob, <const_void **>&bptr, &blen)
 *         if format:             # <<<<<<<<<<<<<<
 *             try: # numpy.ndarray
 *                 dtype = ob.dtype
 */
    if (__pyx_v_format) {

      /* "buffers.pxd":166
 *             PyObject_AsReadBuffer(ob, <const_void **>&bptr, &blen)
 *         if format:
 *             try: # numpy.ndarray             # <<<<<<<<<<<<<<
 *                 dtype = ob.dtype
 *                 bfmt = dtype.char
 */
      {
        __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        /*try:*/ {

          /* "buffers.pxd":167
 *         if format:
 *             try: # numpy.ndarray
 *                 dtype = ob.dtype             # <<<<<<<<<<<<<<
 *                 bfmt = dtype.char
 *                 bitemlen = dtype.itemsize
 */
          __pyx_t_2 = PyObject_GetAttr(__pyx_v_ob, __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_v_dtype = __pyx_t_2;
          __pyx_t_2 = 0;

          /* "buffers.pxd":168
 *             try: # numpy.ndarray
 *                 dtype = ob.dtype
 *                 bfmt = dtype.char             # <<<<<<<<<<<<<<
 *                 bitemlen = dtype.itemsize
 *             except AttributeError:
 */
          __pyx_t_2 = PyObject_GetAttr(__pyx_v_dtype, __pyx_n_s__char); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
          __Pyx_GOTREF(__pyx_t_2);
          if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected str, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
          __Pyx_DECREF(((PyObject *)__pyx_v_bfmt));
          __pyx_v_bfmt = ((PyObject*)__pyx_t_2);
          __pyx_t_2 = 0;

          /* "buffers.pxd":169
 *                 dtype = ob.dtype
 *                 bfmt = dtype.char
 *                 bitemlen = dtype.itemsize             # <<<<<<<<<<<<<<
 *             except AttributeError:
 *                 try: # array.array
 */
          __pyx_t_2 = PyObject_GetAttr(__pyx_v_dtype, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_v_bitemlen = __pyx_t_8;
        }
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        goto __pyx_L18_try_end;
        __pyx_L11_error:;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;

        /* "buffers.pxd":170
 *                 bfmt = dtype.char
 *                 bitemlen = dtype.itemsize
 *             except AttributeError:             # <<<<<<<<<<<<<<
 *                 try: # array.array
 *                     bfmt = ob.typecode
 */
        __pyx_t_4 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
        if (__pyx_t_4) {
          __Pyx_AddTraceback("buffers.asbuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_9);

          /* "buffers.pxd":171
 *                 bitemlen = dtype.itemsize
 *             except AttributeError:
 *                 try: # array.array             # <<<<<<<<<<<<<<
 *                     bfmt = ob.typecode
 *                     bitemlen = ob.itemsize
 */
          {
            __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
            __Pyx_XGOTREF(__pyx_t_10);
            __Pyx_XGOTREF(__pyx_t_11);
            __Pyx_XGOTREF(__pyx_t_12);
            /*try:*/ {

              /* "buffers.pxd":172
 *             except AttributeError:
 *                 try: # array.array
 *                     bfmt = ob.typecode             # <<<<<<<<<<<<<<
 *                     bitemlen = ob.itemsize
 *                 except AttributeError:
 */
              __pyx_t_13 = PyObject_GetAttr(__pyx_v_ob, __pyx_n_s__typecode); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L21_error;}
              __Pyx_GOTREF(__pyx_t_13);
              if (!(likely(PyString_CheckExact(__pyx_t_13))||((__pyx_t_13) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected str, got %.200s", Py_TYPE(__pyx_t_13)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L21_error;}
              __Pyx_DECREF(((PyObject *)__pyx_v_bfmt));
              __pyx_v_bfmt = ((PyObject*)__pyx_t_13);
              __pyx_t_13 = 0;

              /* "buffers.pxd":173
 *                 try: # array.array
 *                     bfmt = ob.typecode
 *                     bitemlen = ob.itemsize             # <<<<<<<<<<<<<<
 *                 except AttributeError:
 *                     if isinstance(ob, bytes):
 */
              __pyx_t_13 = PyObject_GetAttr(__pyx_v_ob, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L21_error;}
              __Pyx_GOTREF(__pyx_t_13);
              __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_13); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L21_error;}
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              __pyx_v_bitemlen = __pyx_t_8;
            }
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            goto __pyx_L28_try_end;
            __pyx_L21_error:;
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;

            /* "buffers.pxd":174
 *                     bfmt = ob.typecode
 *                     bitemlen = ob.itemsize
 *                 except AttributeError:             # <<<<<<<<<<<<<<
 *                     if isinstance(ob, bytes):
 *                         bfmt = "B"
 */
            __pyx_t_4 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
            if (__pyx_t_4) {
              __Pyx_AddTraceback("buffers.asbuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
              if (__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L23_except_error;}
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_GOTREF(__pyx_t_14);
              __Pyx_GOTREF(__pyx_t_15);

              /* "buffers.pxd":175
 *                     bitemlen = ob.itemsize
 *                 except AttributeError:
 *                     if isinstance(ob, bytes):             # <<<<<<<<<<<<<<
 *                         bfmt = "B"
 *                         bitemlen = 1
 */
              __pyx_t_16 = ((PyObject *)((PyObject*)(&PyBytes_Type)));
              __Pyx_INCREF(__pyx_t_16);
              __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_ob, __pyx_t_16); 
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              if (__pyx_t_1) {

                /* "buffers.pxd":176
 *                 except AttributeError:
 *                     if isinstance(ob, bytes):
 *                         bfmt = "B"             # <<<<<<<<<<<<<<
 *                         bitemlen = 1
 *                     else:
 */
                __Pyx_INCREF(((PyObject *)__pyx_n_s__B));
                __Pyx_DECREF(((PyObject *)__pyx_v_bfmt));
                __pyx_v_bfmt = __pyx_n_s__B;

                /* "buffers.pxd":177
 *                     if isinstance(ob, bytes):
 *                         bfmt = "B"
 *                         bitemlen = 1             # <<<<<<<<<<<<<<
 *                     else:
 *                         # nothing found
 */
                __pyx_v_bitemlen = 1;
                goto __pyx_L31;
              }
              /*else*/ {

                /* "buffers.pxd":180
 *                     else:
 *                         # nothing found
 *                         bfmt = None             # <<<<<<<<<<<<<<
 *                         bitemlen = 0
 *     if base: base[0] = <void *>bptr
 */
                __Pyx_INCREF(Py_None);
                __Pyx_DECREF(((PyObject *)__pyx_v_bfmt));
                __pyx_v_bfmt = ((PyObject*)Py_None);

                /* "buffers.pxd":181
 *                         # nothing found
 *                         bfmt = None
 *                         bitemlen = 0             # <<<<<<<<<<<<<<
 *     if base: base[0] = <void *>bptr
 *     if size: size[0] = <Py_ssize_t>blen
 */
                __pyx_v_bitemlen = 0;
              }
              __pyx_L31:;
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
              goto __pyx_L22_exception_handled;
            }
            __pyx_L23_except_error:;
            __Pyx_XGIVEREF(__pyx_t_10);
            __Pyx_XGIVEREF(__pyx_t_11);
            __Pyx_XGIVEREF(__pyx_t_12);
            __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
            goto __pyx_L13_except_error;
            __pyx_L22_exception_handled:;
            __Pyx_XGIVEREF(__pyx_t_10);
            __Pyx_XGIVEREF(__pyx_t_11);
            __Pyx_XGIVEREF(__pyx_t_12);
            __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
            __pyx_L28_try_end:;
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          goto __pyx_L12_exception_handled;
        }
        __pyx_L13_except_error:;
        __Pyx_XGIVEREF(__pyx_t_5);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
        goto __pyx_L1_error;
        __pyx_L12_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_5);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
        __pyx_L18_try_end:;
      }
      goto __pyx_L10;
    }
    __pyx_L10:;
  }
  __pyx_L4:;

  /* "buffers.pxd":182
 *                         bfmt = None
 *                         bitemlen = 0
 *     if base: base[0] = <void *>bptr             # <<<<<<<<<<<<<<
 *     if size: size[0] = <Py_ssize_t>blen
 *     if itemsize: itemsize[0] = <Py_ssize_t>bitemlen
 */
  __pyx_t_1 = (__pyx_v_base != 0);
  if (__pyx_t_1) {
    (__pyx_v_base[0]) = ((void *)__pyx_v_bptr);
    goto __pyx_L32;
  }
  __pyx_L32:;

  /* "buffers.pxd":183
 *                         bitemlen = 0
 *     if base: base[0] = <void *>bptr
 *     if size: size[0] = <Py_ssize_t>blen             # <<<<<<<<<<<<<<
 *     if itemsize: itemsize[0] = <Py_ssize_t>bitemlen
 *     return bfmt
 */
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
    (__pyx_v_size[0]) = ((Py_ssize_t)__pyx_v_blen);
    goto __pyx_L33;
  }
  __pyx_L33:;

  /* "buffers.pxd":184
 *     if base: base[0] = <void *>bptr
 *     if size: size[0] = <Py_ssize_t>blen
 *     if itemsize: itemsize[0] = <Py_ssize_t>bitemlen             # <<<<<<<<<<<<<<
 *     return bfmt
 * 
 */
  __pyx_t_1 = (__pyx_v_itemsize != 0);
  if (__pyx_t_1) {
    (__pyx_v_itemsize[0]) = ((Py_ssize_t)__pyx_v_bitemlen);
    goto __pyx_L34;
  }
  __pyx_L34:;

  /* "buffers.pxd":185
 *     if size: size[0] = <Py_ssize_t>blen
 *     if itemsize: itemsize[0] = <Py_ssize_t>bitemlen
 *     return bfmt             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_bfmt));
  __pyx_r = ((PyObject *)__pyx_v_bfmt);
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("buffers.asbuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_bfmt);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":188
 * 
 * 
 * cdef inline object asbuffer_r(object ob, void **base, Py_ssize_t *size):             # <<<<<<<<<<<<<<
 *     """Wrapper for standard calls to asbuffer with a readonly buffer."""
 *     asbuffer(ob, 0, 0, base, size, NULL)
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_asbuffer_r(PyObject *__pyx_v_ob, void **__pyx_v_base, Py_ssize_t *__pyx_v_size) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("asbuffer_r");

  /* "buffers.pxd":190
 * cdef inline object asbuffer_r(object ob, void **base, Py_ssize_t *size):
 *     """Wrapper for standard calls to asbuffer with a readonly buffer."""
 *     asbuffer(ob, 0, 0, base, size, NULL)             # <<<<<<<<<<<<<<
 *     return ob
 * 
 */
  __pyx_t_1 = __pyx_f_7buffers_asbuffer(__pyx_v_ob, 0, 0, __pyx_v_base, __pyx_v_size, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "buffers.pxd":191
 *     """Wrapper for standard calls to asbuffer with a readonly buffer."""
 *     asbuffer(ob, 0, 0, base, size, NULL)
 *     return ob             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ob);
  __pyx_r = __pyx_v_ob;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("buffers.asbuffer_r", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":194
 * 
 * 
 * cdef inline object asbuffer_w(object ob, void **base, Py_ssize_t *size):             # <<<<<<<<<<<<<<
 *     """Wrapper for standard calls to asbuffer with a writable buffer."""
 *     asbuffer(ob, 1, 0, base, size, NULL)
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_asbuffer_w(PyObject *__pyx_v_ob, void **__pyx_v_base, Py_ssize_t *__pyx_v_size) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("asbuffer_w");

  /* "buffers.pxd":196
 * cdef inline object asbuffer_w(object ob, void **base, Py_ssize_t *size):
 *     """Wrapper for standard calls to asbuffer with a writable buffer."""
 *     asbuffer(ob, 1, 0, base, size, NULL)             # <<<<<<<<<<<<<<
 *     return ob
 * 
 */
  __pyx_t_1 = __pyx_f_7buffers_asbuffer(__pyx_v_ob, 1, 0, __pyx_v_base, __pyx_v_size, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "buffers.pxd":197
 *     """Wrapper for standard calls to asbuffer with a writable buffer."""
 *     asbuffer(ob, 1, 0, base, size, NULL)
 *     return ob             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ob);
  __pyx_r = __pyx_v_ob;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("buffers.asbuffer_w", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":203
 * #------------------------------------------------------------------------------
 * 
 * cdef inline object frombuffer_3(void *ptr, Py_ssize_t s, int readonly):             # <<<<<<<<<<<<<<
 *     """Python 3 version of frombuffer.
 * 
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_3(void *__pyx_v_ptr, Py_ssize_t __pyx_v_s, int __pyx_v_readonly) {
  Py_buffer __pyx_v_pybuf;
  Py_ssize_t *__pyx_v_shape;
  PyObject *__pyx_v_astr = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1[1];
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("frombuffer_3");

  /* "buffers.pxd":210
 *     """
 *     cdef Py_buffer pybuf
 *     cdef Py_ssize_t *shape = [s]             # <<<<<<<<<<<<<<
 *     cdef str astr=""
 *     if newstyle_available():
 */
  __pyx_t_1[0] = __pyx_v_s;
  __pyx_v_shape = __pyx_t_1;

  /* "buffers.pxd":211
 *     cdef Py_buffer pybuf
 *     cdef Py_ssize_t *shape = [s]
 *     cdef str astr=""             # <<<<<<<<<<<<<<
 *     if newstyle_available():
 *         PyBuffer_FillInfo(&pybuf, astr, ptr, s, readonly, PyBUF_SIMPLE)
 */
  __Pyx_INCREF(((PyObject *)__pyx_kp_s_11));
  __pyx_v_astr = __pyx_kp_s_11;

  /* "buffers.pxd":212
 *     cdef Py_ssize_t *shape = [s]
 *     cdef str astr=""
 *     if newstyle_available():             # <<<<<<<<<<<<<<
 *         PyBuffer_FillInfo(&pybuf, astr, ptr, s, readonly, PyBUF_SIMPLE)
 *         pybuf.format = "B"
 */
  __pyx_t_2 = __pyx_f_7buffers_newstyle_available();
  if (__pyx_t_2) {

    /* "buffers.pxd":213
 *     cdef str astr=""
 *     if newstyle_available():
 *         PyBuffer_FillInfo(&pybuf, astr, ptr, s, readonly, PyBUF_SIMPLE)             # <<<<<<<<<<<<<<
 *         pybuf.format = "B"
 *         pybuf.shape = shape
 */
    __pyx_t_2 = PyBuffer_FillInfo((&__pyx_v_pybuf), ((PyObject *)__pyx_v_astr), __pyx_v_ptr, __pyx_v_s, __pyx_v_readonly, PyBUF_SIMPLE); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

    /* "buffers.pxd":214
 *     if newstyle_available():
 *         PyBuffer_FillInfo(&pybuf, astr, ptr, s, readonly, PyBUF_SIMPLE)
 *         pybuf.format = "B"             # <<<<<<<<<<<<<<
 *         pybuf.shape = shape
 *         return PyMemoryView_FromBuffer(&pybuf)
 */
    __pyx_v_pybuf.format = __pyx_k__B;

    /* "buffers.pxd":215
 *         PyBuffer_FillInfo(&pybuf, astr, ptr, s, readonly, PyBUF_SIMPLE)
 *         pybuf.format = "B"
 *         pybuf.shape = shape             # <<<<<<<<<<<<<<
 *         return PyMemoryView_FromBuffer(&pybuf)
 *     else:
 */
    __pyx_v_pybuf.shape = __pyx_v_shape;

    /* "buffers.pxd":216
 *         pybuf.format = "B"
 *         pybuf.shape = shape
 *         return PyMemoryView_FromBuffer(&pybuf)             # <<<<<<<<<<<<<<
 *     else:
 *         raise NotImplementedError("New style buffers not available.")
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyMemoryView_FromBuffer((&__pyx_v_pybuf)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "buffers.pxd":218
 *         return PyMemoryView_FromBuffer(&pybuf)
 *     else:
 *         raise NotImplementedError("New style buffers not available.")             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_t_3 = PyObject_Call(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("buffers.frombuffer_3", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_astr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":221
 * 
 * 
 * cdef inline object frombuffer_2(void *ptr, Py_ssize_t s, int readonly):             # <<<<<<<<<<<<<<
 *     """Python 2 version of frombuffer.
 * 
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_2(void *__pyx_v_ptr, Py_ssize_t __pyx_v_s, int __pyx_v_readonly) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("frombuffer_2");

  /* "buffers.pxd":227
 *     """
 * 
 *     if oldstyle_available():             # <<<<<<<<<<<<<<
 *         if readonly:
 *             return PyBuffer_FromMemory(ptr, s)
 */
  __pyx_t_1 = __pyx_f_7buffers_oldstyle_available();
  if (__pyx_t_1) {

    /* "buffers.pxd":228
 * 
 *     if oldstyle_available():
 *         if readonly:             # <<<<<<<<<<<<<<
 *             return PyBuffer_FromMemory(ptr, s)
 *         else:
 */
    if (__pyx_v_readonly) {

      /* "buffers.pxd":229
 *     if oldstyle_available():
 *         if readonly:
 *             return PyBuffer_FromMemory(ptr, s)             # <<<<<<<<<<<<<<
 *         else:
 *             return PyBuffer_FromReadWriteMemory(ptr, s)
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyBuffer_FromMemory(__pyx_v_ptr, __pyx_v_s); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;
      goto __pyx_L4;
    }
    /*else*/ {

      /* "buffers.pxd":231
 *             return PyBuffer_FromMemory(ptr, s)
 *         else:
 *             return PyBuffer_FromReadWriteMemory(ptr, s)             # <<<<<<<<<<<<<<
 *     else:
 *         raise NotImplementedError("Old style buffers not available.")
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyBuffer_FromReadWriteMemory(__pyx_v_ptr, __pyx_v_s); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;
    }
    __pyx_L4:;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "buffers.pxd":233
 *             return PyBuffer_FromReadWriteMemory(ptr, s)
 *     else:
 *         raise NotImplementedError("Old style buffers not available.")             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_t_2 = PyObject_Call(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_k_tuple_15), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("buffers.frombuffer_2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":236
 * 
 * 
 * cdef inline object frombuffer(void *ptr, Py_ssize_t s, int readonly):             # <<<<<<<<<<<<<<
 *     """Create a Python Buffer/View of a C array.
 * 
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer(void *__pyx_v_ptr, Py_ssize_t __pyx_v_s, int __pyx_v_readonly) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("frombuffer");

  /* "buffers.pxd":253
 *     """
 *     # oldstyle first priority for now
 *     if oldstyle_available():             # <<<<<<<<<<<<<<
 *         return frombuffer_2(ptr, s, readonly)
 *     else:
 */
  __pyx_t_1 = __pyx_f_7buffers_oldstyle_available();
  if (__pyx_t_1) {

    /* "buffers.pxd":254
 *     # oldstyle first priority for now
 *     if oldstyle_available():
 *         return frombuffer_2(ptr, s, readonly)             # <<<<<<<<<<<<<<
 *     else:
 *         return frombuffer_3(ptr, s, readonly)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7buffers_frombuffer_2(__pyx_v_ptr, __pyx_v_s, __pyx_v_readonly); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "buffers.pxd":256
 *         return frombuffer_2(ptr, s, readonly)
 *     else:
 *         return frombuffer_3(ptr, s, readonly)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7buffers_frombuffer_3(__pyx_v_ptr, __pyx_v_s, __pyx_v_readonly); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("buffers.frombuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":259
 * 
 * 
 * cdef inline object frombuffer_r(void *ptr, Py_ssize_t s):             # <<<<<<<<<<<<<<
 *     """Wrapper for readonly view frombuffer."""
 *     return frombuffer(ptr, s, 1)
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_r(void *__pyx_v_ptr, Py_ssize_t __pyx_v_s) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("frombuffer_r");

  /* "buffers.pxd":261
 * cdef inline object frombuffer_r(void *ptr, Py_ssize_t s):
 *     """Wrapper for readonly view frombuffer."""
 *     return frombuffer(ptr, s, 1)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7buffers_frombuffer(__pyx_v_ptr, __pyx_v_s, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("buffers.frombuffer_r", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":264
 * 
 * 
 * cdef inline object frombuffer_w(void *ptr, Py_ssize_t s):             # <<<<<<<<<<<<<<
 *     """Wrapper for writable view frombuffer."""
 *     return frombuffer(ptr, s, 0)
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_w(void *__pyx_v_ptr, Py_ssize_t __pyx_v_s) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("frombuffer_w");

  /* "buffers.pxd":266
 * cdef inline object frombuffer_w(void *ptr, Py_ssize_t s):
 *     """Wrapper for writable view frombuffer."""
 *     return frombuffer(ptr, s, 0)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7buffers_frombuffer(__pyx_v_ptr, __pyx_v_s, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("buffers.frombuffer_w", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":273
 * #------------------------------------------------------------------------------
 * 
 * cdef inline object viewfromobject(object obj, int readonly):             # <<<<<<<<<<<<<<
 *     """Construct a Python Buffer/View object from another Python object.
 * 
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_viewfromobject(PyObject *__pyx_v_obj, int __pyx_v_readonly) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("viewfromobject");

  /* "buffers.pxd":289
 *     Buffer/View of the original object.
 *     """
 *     if not memoryview_available():             # <<<<<<<<<<<<<<
 *         if readonly:
 *             return PyBuffer_FromObject(obj, 0, Py_END_OF_BUFFER)
 */
  __pyx_t_1 = (!__pyx_f_7buffers_memoryview_available());
  if (__pyx_t_1) {

    /* "buffers.pxd":290
 *     """
 *     if not memoryview_available():
 *         if readonly:             # <<<<<<<<<<<<<<
 *             return PyBuffer_FromObject(obj, 0, Py_END_OF_BUFFER)
 *         else:
 */
    if (__pyx_v_readonly) {

      /* "buffers.pxd":291
 *     if not memoryview_available():
 *         if readonly:
 *             return PyBuffer_FromObject(obj, 0, Py_END_OF_BUFFER)             # <<<<<<<<<<<<<<
 *         else:
 *             return PyBuffer_FromReadWriteObject(obj, 0, Py_END_OF_BUFFER)
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyBuffer_FromObject(__pyx_v_obj, 0, Py_END_OF_BUFFER); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;
      goto __pyx_L4;
    }
    /*else*/ {

      /* "buffers.pxd":293
 *             return PyBuffer_FromObject(obj, 0, Py_END_OF_BUFFER)
 *         else:
 *             return PyBuffer_FromReadWriteObject(obj, 0, Py_END_OF_BUFFER)             # <<<<<<<<<<<<<<
 *     else:
 *         return PyMemoryView_FromObject(obj)
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyBuffer_FromReadWriteObject(__pyx_v_obj, 0, Py_END_OF_BUFFER); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;
    }
    __pyx_L4:;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "buffers.pxd":295
 *             return PyBuffer_FromReadWriteObject(obj, 0, Py_END_OF_BUFFER)
 *     else:
 *         return PyMemoryView_FromObject(obj)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyMemoryView_FromObject(__pyx_v_obj); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("buffers.viewfromobject", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":298
 * 
 * 
 * cdef inline object viewfromobject_r(object obj):             # <<<<<<<<<<<<<<
 *     """Wrapper for readonly viewfromobject."""
 *     return viewfromobject(obj, 1)
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_viewfromobject_r(PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("viewfromobject_r");

  /* "buffers.pxd":300
 * cdef inline object viewfromobject_r(object obj):
 *     """Wrapper for readonly viewfromobject."""
 *     return viewfromobject(obj, 1)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7buffers_viewfromobject(__pyx_v_obj, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("buffers.viewfromobject_r", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "buffers.pxd":303
 * 
 * 
 * cdef inline object viewfromobject_w(object obj):             # <<<<<<<<<<<<<<
 *     """Wrapper for writable viewfromobject."""
 *     return viewfromobject(obj, 0)
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_viewfromobject_w(PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("viewfromobject_w");

  /* "buffers.pxd":305
 * cdef inline object viewfromobject_w(object obj):
 *     """Wrapper for writable viewfromobject."""
 *     return viewfromobject(obj, 0)             # <<<<<<<<<<<<<<
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7buffers_viewfromobject(__pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("buffers.viewfromobject_w", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_tp_new_3zmq_4core_7message_MessageTracker(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_3zmq_4core_7message_MessageTracker *p;
  PyObject *o = (*t->tp_alloc)(t, 0);
  if (!o) return 0;
  p = ((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)o);
  p->events = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->peers = ((PyObject*)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_3zmq_4core_7message_MessageTracker(PyObject *o) {
  struct __pyx_obj_3zmq_4core_7message_MessageTracker *p = (struct __pyx_obj_3zmq_4core_7message_MessageTracker *)o;
  Py_XDECREF(((PyObject *)p->events));
  Py_XDECREF(((PyObject *)p->peers));
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_3zmq_4core_7message_MessageTracker(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_3zmq_4core_7message_MessageTracker *p = (struct __pyx_obj_3zmq_4core_7message_MessageTracker *)o;
  if (p->events) {
    e = (*v)(p->events, a); if (e) return e;
  }
  if (p->peers) {
    e = (*v)(p->peers, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_3zmq_4core_7message_MessageTracker(PyObject *o) {
  struct __pyx_obj_3zmq_4core_7message_MessageTracker *p = (struct __pyx_obj_3zmq_4core_7message_MessageTracker *)o;
  PyObject* tmp;
  tmp = ((PyObject*)p->events);
  p->events = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->peers);
  p->peers = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_3zmq_4core_7message_MessageTracker[] = {
  {__Pyx_NAMESTR("done"), (PyCFunction)__pyx_pf_3zmq_4core_7message_14MessageTracker_1done, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_3zmq_4core_7message_14MessageTracker_1done)},
  {__Pyx_NAMESTR("wait"), (PyCFunction)__pyx_pf_3zmq_4core_7message_14MessageTracker_2wait, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_3zmq_4core_7message_14MessageTracker_2wait)},
  {__Pyx_NAMESTR("old_wait"), (PyCFunction)__pyx_pf_3zmq_4core_7message_14MessageTracker_3old_wait, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_3zmq_4core_7message_14MessageTracker_3old_wait)},
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_MessageTracker = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  #if PY_VERSION_HEX >= 0x02050000
  0, /*nb_index*/
  #endif
};

static PySequenceMethods __pyx_tp_as_sequence_MessageTracker = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_MessageTracker = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer_MessageTracker = {
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getreadbuffer*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getwritebuffer*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getsegcount*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getcharbuffer*/
  #endif
  #if PY_VERSION_HEX >= 0x02060000
  0, /*bf_getbuffer*/
  #endif
  #if PY_VERSION_HEX >= 0x02060000
  0, /*bf_releasebuffer*/
  #endif
};

static PyTypeObject __pyx_type_3zmq_4core_7message_MessageTracker = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("zmq.core.message.MessageTracker"), /*tp_name*/
  sizeof(struct __pyx_obj_3zmq_4core_7message_MessageTracker), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_3zmq_4core_7message_MessageTracker, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_MessageTracker, /*tp_as_number*/
  &__pyx_tp_as_sequence_MessageTracker, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_MessageTracker, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_MessageTracker, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("MessageTracker(*towatch)\n\n    A class for tracking if 0MQ is done using one or more messages.\n\n    When you send a 0MQ mesage, it is not sent immeidately. The 0MQ IO thread\n    send the message at some later time. Often you want to know when 0MQ has\n    actually sent the message though. This is complicated by the fact that\n    a single 0MQ message can be sent multiple times using differen sockets.\n    This class allows you to track all of the 0MQ usages of a message.\n\n    Parameters\n    ----------\n    *towatch : tuple of Event, MessageTracker, Message instances.\n        This list of objects to track. This class can track the low-level\n        Events used by the Message class, other MessageTrackers or\n        actual Messages.\n    "), /*tp_doc*/
  __pyx_tp_traverse_3zmq_4core_7message_MessageTracker, /*tp_traverse*/
  __pyx_tp_clear_3zmq_4core_7message_MessageTracker, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_3zmq_4core_7message_MessageTracker, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pf_3zmq_4core_7message_14MessageTracker___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_3zmq_4core_7message_MessageTracker, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};
static struct __pyx_vtabstruct_3zmq_4core_7message_Message __pyx_vtable_3zmq_4core_7message_Message;

static PyObject *__pyx_tp_new_3zmq_4core_7message_Message(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_3zmq_4core_7message_Message *p;
  PyObject *o = (*t->tp_alloc)(t, 0);
  if (!o) return 0;
  p = ((struct __pyx_obj_3zmq_4core_7message_Message *)o);
  p->__pyx_vtab = __pyx_vtabptr_3zmq_4core_7message_Message;
  p->_data = Py_None; Py_INCREF(Py_None);
  p->_buffer = Py_None; Py_INCREF(Py_None);
  p->_bytes = Py_None; Py_INCREF(Py_None);
  p->tracker_event = Py_None; Py_INCREF(Py_None);
  p->tracker = Py_None; Py_INCREF(Py_None);
  if (__pyx_pf_3zmq_4core_7message_7Message___cinit__(o, a, k) < 0) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_3zmq_4core_7message_Message(PyObject *o) {
  struct __pyx_obj_3zmq_4core_7message_Message *p = (struct __pyx_obj_3zmq_4core_7message_Message *)o;
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pf_3zmq_4core_7message_7Message_2__dealloc__(o);
    if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  Py_XDECREF(p->_data);
  Py_XDECREF(p->_buffer);
  Py_XDECREF(p->_bytes);
  Py_XDECREF(p->tracker_event);
  Py_XDECREF(p->tracker);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_3zmq_4core_7message_Message(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_3zmq_4core_7message_Message *p = (struct __pyx_obj_3zmq_4core_7message_Message *)o;
  if (p->_data) {
    e = (*v)(p->_data, a); if (e) return e;
  }
  if (p->_buffer) {
    e = (*v)(p->_buffer, a); if (e) return e;
  }
  if (p->_bytes) {
    e = (*v)(p->_bytes, a); if (e) return e;
  }
  if (p->tracker_event) {
    e = (*v)(p->tracker_event, a); if (e) return e;
  }
  if (p->tracker) {
    e = (*v)(p->tracker, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_3zmq_4core_7message_Message(PyObject *o) {
  struct __pyx_obj_3zmq_4core_7message_Message *p = (struct __pyx_obj_3zmq_4core_7message_Message *)o;
  PyObject* tmp;
  tmp = ((PyObject*)p->_data);
  p->_data = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_buffer);
  p->_buffer = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_bytes);
  p->_bytes = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->tracker_event);
  p->tracker_event = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->tracker);
  p->tracker = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_3zmq_4core_7message_7Message_tracker_event(PyObject *o, void *x) {
  return __pyx_pf_3zmq_4core_7message_7Message_13tracker_event___get__(o);
}

static int __pyx_setprop_3zmq_4core_7message_7Message_tracker_event(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_pf_3zmq_4core_7message_7Message_13tracker_event_1__set__(o, v);
  }
  else {
    return __pyx_pf_3zmq_4core_7message_7Message_13tracker_event_2__del__(o);
  }
}

static PyObject *__pyx_getprop_3zmq_4core_7message_7Message_tracker(PyObject *o, void *x) {
  return __pyx_pf_3zmq_4core_7message_7Message_7tracker___get__(o);
}

static int __pyx_setprop_3zmq_4core_7message_7Message_tracker(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_pf_3zmq_4core_7message_7Message_7tracker_1__set__(o, v);
  }
  else {
    return __pyx_pf_3zmq_4core_7message_7Message_7tracker_2__del__(o);
  }
}

static PyMethodDef __pyx_methods_3zmq_4core_7message_Message[] = {
  {__Pyx_NAMESTR("__copy__"), (PyCFunction)__pyx_pf_3zmq_4core_7message_7Message_6__copy__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_3zmq_4core_7message_7Message_6__copy__)},
  {__Pyx_NAMESTR("buffer"), (PyCFunction)__pyx_pf_3zmq_4core_7message_7Message_9buffer, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_3zmq_4core_7message_7Message_9buffer)},
  {__Pyx_NAMESTR("bytes"), (PyCFunction)__pyx_pf_3zmq_4core_7message_7Message_10bytes, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_3zmq_4core_7message_7Message_10bytes)},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_3zmq_4core_7message_Message[] = {
  {(char *)"tracker_event", __pyx_getprop_3zmq_4core_7message_7Message_tracker_event, __pyx_setprop_3zmq_4core_7message_7Message_tracker_event, 0, 0},
  {(char *)"tracker", __pyx_getprop_3zmq_4core_7message_7Message_tracker, __pyx_setprop_3zmq_4core_7message_7Message_tracker, 0, 0},
  {0, 0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Message = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  #if PY_VERSION_HEX >= 0x02050000
  0, /*nb_index*/
  #endif
};

static PySequenceMethods __pyx_tp_as_sequence_Message = {
  __pyx_pf_3zmq_4core_7message_7Message_7__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_Message = {
  __pyx_pf_3zmq_4core_7message_7Message_7__len__, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer_Message = {
  #if PY_MAJOR_VERSION < 3
  __pyx_pf_3zmq_4core_7message_7Message_5__getreadbuffer__, /*bf_getreadbuffer*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getwritebuffer*/
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_pf_3zmq_4core_7message_7Message_4__getsegcount__, /*bf_getsegcount*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getcharbuffer*/
  #endif
  #if PY_VERSION_HEX >= 0x02060000
  __pyx_pf_3zmq_4core_7message_7Message_3__getbuffer__, /*bf_getbuffer*/
  #endif
  #if PY_VERSION_HEX >= 0x02060000
  0, /*bf_releasebuffer*/
  #endif
};

static PyTypeObject __pyx_type_3zmq_4core_7message_Message = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("zmq.core.message.Message"), /*tp_name*/
  sizeof(struct __pyx_obj_3zmq_4core_7message_Message), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_3zmq_4core_7message_Message, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_Message, /*tp_as_number*/
  &__pyx_tp_as_sequence_Message, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Message, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  __pyx_pf_3zmq_4core_7message_7Message_8__str__, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_Message, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("Message(data=None, track=False)\n\n    A Message class for non-copy send/recvs.\n\n    This class is only needed if you want to do non-copying send and recvs.\n    When you pass a string to this class, like ``Message(s)``, the \n    ref-count of `s` is increased by two: once because the Message saves `s` as \n    an instance attribute and another because a ZMQ message is created that\n    points to the buffer of `s`. This second ref-count increase makes sure\n    that `s` lives until all messages that use it have been sent. Once 0MQ\n    sends all the messages and it doesn't need the buffer of s, 0MQ will call\n    ``Py_DECREF(s)``.\n\n    Parameters\n    ----------\n\n    data : object, optional\n        any object that provides the buffer interface will be used to\n        construct the 0MQ message data.\n    track : bool [default: False]\n        whether a MessageTracker_ should be created to track this object.\n        Tracking a message has a cost at creation, because it creates a threadsafe\n        Event object.\n    \n    "), /*tp_doc*/
  __pyx_tp_traverse_3zmq_4core_7message_Message, /*tp_traverse*/
  __pyx_tp_clear_3zmq_4core_7message_Message, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_3zmq_4core_7message_Message, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_3zmq_4core_7message_Message, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pf_3zmq_4core_7message_7Message_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_3zmq_4core_7message_Message, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};

static PyMethodDef __pyx_methods[] = {
  {0, 0, 0, 0}
};

#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef __pyx_moduledef = {
    PyModuleDef_HEAD_INIT,
    __Pyx_NAMESTR("message"),
    __Pyx_DOCSTR(__pyx_k_16), /* m_doc */
    -1, /* m_size */
    __pyx_methods /* m_methods */,
    NULL, /* m_reload */
    NULL, /* m_traverse */
    NULL, /* m_clear */
    NULL /* m_free */
};
#endif

static __Pyx_StringTabEntry __pyx_string_tab[] = {
  {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0},
  {&__pyx_kp_s_10, __pyx_k_10, sizeof(__pyx_k_10), 0, 0, 1, 0},
  {&__pyx_kp_s_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 0, 1, 0},
  {&__pyx_kp_s_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 0, 1, 0},
  {&__pyx_kp_s_14, __pyx_k_14, sizeof(__pyx_k_14), 0, 0, 1, 0},
  {&__pyx_n_s_17, __pyx_k_17, sizeof(__pyx_k_17), 0, 0, 1, 1},
  {&__pyx_n_s_18, __pyx_k_18, sizeof(__pyx_k_18), 0, 0, 1, 1},
  {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0},
  {&__pyx_kp_s_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 1, 0},
  {&__pyx_kp_s_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 0, 1, 0},
  {&__pyx_n_s__AttributeError, __pyx_k__AttributeError, sizeof(__pyx_k__AttributeError), 0, 0, 1, 1},
  {&__pyx_n_s__B, __pyx_k__B, sizeof(__pyx_k__B), 0, 0, 1, 1},
  {&__pyx_n_s__Event, __pyx_k__Event, sizeof(__pyx_k__Event), 0, 0, 1, 1},
  {&__pyx_n_s__ImportError, __pyx_k__ImportError, sizeof(__pyx_k__ImportError), 0, 0, 1, 1},
  {&__pyx_n_s__Message, __pyx_k__Message, sizeof(__pyx_k__Message), 0, 0, 1, 1},
  {&__pyx_n_s__MessageTracker, __pyx_k__MessageTracker, sizeof(__pyx_k__MessageTracker), 0, 0, 1, 1},
  {&__pyx_n_s__NotDone, __pyx_k__NotDone, sizeof(__pyx_k__NotDone), 0, 0, 1, 1},
  {&__pyx_n_s__NotImplementedError, __pyx_k__NotImplementedError, sizeof(__pyx_k__NotImplementedError), 0, 0, 1, 1},
  {&__pyx_n_s__SystemError, __pyx_k__SystemError, sizeof(__pyx_k__SystemError), 0, 0, 1, 1},
  {&__pyx_n_s__TypeError, __pyx_k__TypeError, sizeof(__pyx_k__TypeError), 0, 0, 1, 1},
  {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
  {&__pyx_n_s__ZMQError, __pyx_k__ZMQError, sizeof(__pyx_k__ZMQError), 0, 0, 1, 1},
  {&__pyx_n_s___Event, __pyx_k___Event, sizeof(__pyx_k___Event), 0, 0, 1, 1},
  {&__pyx_n_s____all__, __pyx_k____all__, sizeof(__pyx_k____all__), 0, 0, 1, 1},
  {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
  {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
  {&__pyx_n_s__basestring, __pyx_k__basestring, sizeof(__pyx_k__basestring), 0, 0, 1, 1},
  {&__pyx_n_s__buffer, __pyx_k__buffer, sizeof(__pyx_k__buffer), 0, 0, 1, 1},
  {&__pyx_n_s__bytes, __pyx_k__bytes, sizeof(__pyx_k__bytes), 0, 0, 1, 1},
  {&__pyx_n_s__char, __pyx_k__char, sizeof(__pyx_k__char), 0, 0, 1, 1},
  {&__pyx_n_s__data, __pyx_k__data, sizeof(__pyx_k__data), 0, 0, 1, 1},
  {&__pyx_n_s__decode, __pyx_k__decode, sizeof(__pyx_k__decode), 0, 0, 1, 1},
  {&__pyx_n_s__done, __pyx_k__done, sizeof(__pyx_k__done), 0, 0, 1, 1},
  {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1},
  {&__pyx_n_s__isSet, __pyx_k__isSet, sizeof(__pyx_k__isSet), 0, 0, 1, 1},
  {&__pyx_n_s__is_set, __pyx_k__is_set, sizeof(__pyx_k__is_set), 0, 0, 1, 1},
  {&__pyx_n_s__itemsize, __pyx_k__itemsize, sizeof(__pyx_k__itemsize), 0, 0, 1, 1},
  {&__pyx_n_s__property, __pyx_k__property, sizeof(__pyx_k__property), 0, 0, 1, 1},
  {&__pyx_n_s__set, __pyx_k__set, sizeof(__pyx_k__set), 0, 0, 1, 1},
  {&__pyx_n_s__sleep, __pyx_k__sleep, sizeof(__pyx_k__sleep), 0, 0, 1, 1},
  {&__pyx_n_s__threading, __pyx_k__threading, sizeof(__pyx_k__threading), 0, 0, 1, 1},
  {&__pyx_n_s__time, __pyx_k__time, sizeof(__pyx_k__time), 0, 0, 1, 1},
  {&__pyx_n_s__timeout, __pyx_k__timeout, sizeof(__pyx_k__timeout), 0, 0, 1, 1},
  {&__pyx_n_s__track, __pyx_k__track, sizeof(__pyx_k__track), 0, 0, 1, 1},
  {&__pyx_n_s__tracker, __pyx_k__tracker, sizeof(__pyx_k__tracker), 0, 0, 1, 1},
  {&__pyx_n_s__typecode, __pyx_k__typecode, sizeof(__pyx_k__typecode), 0, 0, 1, 1},
  {&__pyx_n_s__unicode, __pyx_k__unicode, sizeof(__pyx_k__unicode), 0, 0, 1, 1},
  {&__pyx_n_s__wait, __pyx_k__wait, sizeof(__pyx_k__wait), 0, 0, 1, 1},
  {0, 0, 0, 0, 0, 0, 0}
};
static int __Pyx_InitCachedBuiltins(void) {
  __pyx_builtin_ImportError = __Pyx_GetName(__pyx_b, __pyx_n_s__ImportError); if (!__pyx_builtin_ImportError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_AttributeError = __Pyx_GetName(__pyx_b, __pyx_n_s__AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_property = __Pyx_GetName(__pyx_b, __pyx_n_s__property); if (!__pyx_builtin_property) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_TypeError = __Pyx_GetName(__pyx_b, __pyx_n_s__TypeError); if (!__pyx_builtin_TypeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_SystemError = __Pyx_GetName(__pyx_b, __pyx_n_s__SystemError); if (!__pyx_builtin_SystemError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_NotImplementedError = __Pyx_GetName(__pyx_b, __pyx_n_s__NotImplementedError); if (!__pyx_builtin_NotImplementedError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  return 0;
  __pyx_L1_error:;
  return -1;
}

static int __Pyx_InitCachedConstants(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants");

  /* "zmq/core/message.pyx":118
 *             elif isinstance(obj, Message):
 *                 if not obj.tracker:
 *                     raise ValueError("Not a tracked message")             # <<<<<<<<<<<<<<
 *                 self.peers.add(obj.tracker)
 *             else:
 */
  __pyx_k_tuple_2 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_2));
  __Pyx_INCREF(((PyObject *)__pyx_kp_s_1));
  PyTuple_SET_ITEM(__pyx_k_tuple_2, 0, ((PyObject *)__pyx_kp_s_1));
  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2));

  /* "zmq/core/message.pyx":236
 * 
 *         if isinstance(data, unicode):
 *             raise TypeError("Unicode objects not allowed. Only: str/bytes, buffer interfaces.")             # <<<<<<<<<<<<<<
 * 
 *         if data is None:
 */
  __pyx_k_tuple_6 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_6));
  __Pyx_INCREF(((PyObject *)__pyx_kp_s_5));
  PyTuple_SET_ITEM(__pyx_k_tuple_6, 0, ((PyObject *)__pyx_kp_s_5));
  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6));

  /* "zmq/core/message.pyx":306
 *         cdef Py_ssize_t data_len_c
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")             # <<<<<<<<<<<<<<
 *         # read-only, because we don't want to allow
 *         # editing of the message in-place
 */
  __pyx_k_tuple_9 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_9));
  __Pyx_INCREF(((PyObject *)__pyx_kp_s_8));
  PyTuple_SET_ITEM(__pyx_k_tuple_9, 0, ((PyObject *)__pyx_kp_s_8));
  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_8));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_9));

  /* "buffers.pxd":218
 *         return PyMemoryView_FromBuffer(&pybuf)
 *     else:
 *         raise NotImplementedError("New style buffers not available.")             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_k_tuple_13 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_13));
  __Pyx_INCREF(((PyObject *)__pyx_kp_s_12));
  PyTuple_SET_ITEM(__pyx_k_tuple_13, 0, ((PyObject *)__pyx_kp_s_12));
  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_12));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_13));

  /* "buffers.pxd":233
 *             return PyBuffer_FromReadWriteMemory(ptr, s)
 *     else:
 *         raise NotImplementedError("Old style buffers not available.")             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_k_tuple_15 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_15)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_15));
  __Pyx_INCREF(((PyObject *)__pyx_kp_s_14));
  PyTuple_SET_ITEM(__pyx_k_tuple_15, 0, ((PyObject *)__pyx_kp_s_14));
  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_14));
  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_15));
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_InitGlobals(void) {
  #if PY_VERSION_HEX < 0x02040000
  if (unlikely(__Pyx_Py23SetsImport() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #endif
  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  __pyx_int_604800 = PyInt_FromLong(604800); if (unlikely(!__pyx_int_604800)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  return 0;
  __pyx_L1_error:;
  return -1;
}

#if PY_MAJOR_VERSION < 3
PyMODINIT_FUNC initmessage(void); /*proto*/
PyMODINIT_FUNC initmessage(void)
#else
PyMODINIT_FUNC PyInit_message(void); /*proto*/
PyMODINIT_FUNC PyInit_message(void)
#endif
{
  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;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  __Pyx_RefNannyDeclarations
  #if CYTHON_REFNANNY
  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
  if (!__Pyx_RefNanny) {
      PyErr_Clear();
      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
      if (!__Pyx_RefNanny)
          Py_FatalError("failed to import 'refnanny' module");
  }
  #endif
  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_message(void)");
  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #ifdef __pyx_binding_PyCFunctionType_USED
  if (__pyx_binding_PyCFunctionType_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #endif
  /*--- Library function declarations ---*/
  /*--- Threads initialization code ---*/
  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
  #ifdef WITH_THREAD /* Python build with threading support? */
  PyEval_InitThreads();
  #endif
  #endif
  /*--- Module creation code ---*/
  #if PY_MAJOR_VERSION < 3
  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("message"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_16), 0, PYTHON_API_VERSION);
  #else
  __pyx_m = PyModule_Create(&__pyx_moduledef);
  #endif
  if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  #if PY_MAJOR_VERSION < 3
  Py_INCREF(__pyx_m);
  #endif
  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME));
  if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  /*--- Initialize various global constants etc. ---*/
  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_module_is_main_zmq__core__message) {
    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  }
  /*--- Builtin init code ---*/
  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  /*--- Constants init code ---*/
  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  /*--- Global init code ---*/
  /*--- Variable export code ---*/
  /*--- Function export code ---*/
  if (__Pyx_ExportFunction("copy_zmq_msg_bytes", (void (*)(void))__pyx_f_3zmq_4core_7message_copy_zmq_msg_bytes, "PyObject *(zmq_msg_t *)") < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  /*--- Type init code ---*/
  if (PyType_Ready(&__pyx_type_3zmq_4core_7message_MessageTracker) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_3zmq_4core_7message_MessageTracker, "__init__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_3zmq_4core_7message_14MessageTracker___init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_3zmq_4core_7message_14MessageTracker___init__.doc = __pyx_doc_3zmq_4core_7message_14MessageTracker___init__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_3zmq_4core_7message_14MessageTracker___init__;
    }
  }
  if (__Pyx_SetAttrString(__pyx_m, "MessageTracker", (PyObject *)&__pyx_type_3zmq_4core_7message_MessageTracker) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_3zmq_4core_7message_MessageTracker = &__pyx_type_3zmq_4core_7message_MessageTracker;
  __pyx_vtabptr_3zmq_4core_7message_Message = &__pyx_vtable_3zmq_4core_7message_Message;
  __pyx_vtable_3zmq_4core_7message_Message.fast_copy = (struct __pyx_obj_3zmq_4core_7message_Message *(*)(struct __pyx_obj_3zmq_4core_7message_Message *))__pyx_f_3zmq_4core_7message_7Message_fast_copy;
  __pyx_vtable_3zmq_4core_7message_Message._getbuffer = (PyObject *(*)(struct __pyx_obj_3zmq_4core_7message_Message *))__pyx_f_3zmq_4core_7message_7Message__getbuffer;
  if (PyType_Ready(&__pyx_type_3zmq_4core_7message_Message) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_3zmq_4core_7message_Message, "__init__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_3zmq_4core_7message_7Message_1__init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_3zmq_4core_7message_7Message_1__init__.doc = __pyx_doc_3zmq_4core_7message_7Message_1__init__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_3zmq_4core_7message_7Message_1__init__;
    }
  }
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_3zmq_4core_7message_Message, "__len__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_3zmq_4core_7message_7Message_7__len__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_3zmq_4core_7message_7Message_7__len__.doc = __pyx_doc_3zmq_4core_7message_7Message_7__len__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_3zmq_4core_7message_7Message_7__len__;
    }
  }
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_3zmq_4core_7message_Message, "__str__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_3zmq_4core_7message_7Message_8__str__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_3zmq_4core_7message_7Message_8__str__.doc = __pyx_doc_3zmq_4core_7message_7Message_8__str__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_3zmq_4core_7message_7Message_8__str__;
    }
  }
  if (__Pyx_SetVtable(__pyx_type_3zmq_4core_7message_Message.tp_dict, __pyx_vtabptr_3zmq_4core_7message_Message) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "Message", (PyObject *)&__pyx_type_3zmq_4core_7message_Message) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_3zmq_4core_7message_Message = &__pyx_type_3zmq_4core_7message_Message;
  /*--- Type import code ---*/
  __pyx_ptype_7cpython_4bool_bool = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "bool", sizeof(PyBoolObject), 0); if (unlikely(!__pyx_ptype_7cpython_4bool_bool)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_7cpython_7complex_complex = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "complex", sizeof(PyComplexObject), 0); if (unlikely(!__pyx_ptype_7cpython_7complex_complex)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  /*--- Variable import code ---*/
  /*--- Function import code ---*/
  /*--- Execution code ---*/

  /* "zmq/core/message.pyx":40
 * from libzmq cimport *
 * 
 * import time             # <<<<<<<<<<<<<<
 * 
 * try:
 */
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__time), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__time, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "zmq/core/message.pyx":42
 * import time
 * 
 * try:             # <<<<<<<<<<<<<<
 *     # below 3.3
 *     from threading import _Event as Event
 */
  {
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {

      /* "zmq/core/message.pyx":44
 * try:
 *     # below 3.3
 *     from threading import _Event as Event             # <<<<<<<<<<<<<<
 * except (ImportError, AttributeError):
 *     # python throws ImportError, cython throws AttributeError
 */
      __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L2_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_1));
      __Pyx_INCREF(((PyObject *)__pyx_n_s___Event));
      PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s___Event));
      __Pyx_GIVEREF(((PyObject *)__pyx_n_s___Event));
      __pyx_t_5 = __Pyx_Import(((PyObject *)__pyx_n_s__threading), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L2_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
      __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s___Event); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L2_error;}
      __Pyx_GOTREF(__pyx_t_1);
      if (PyObject_SetAttr(__pyx_m, __pyx_n_s__Event, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L2_error;}
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L9_try_end;
    __pyx_L2_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "zmq/core/message.pyx":45
 *     # below 3.3
 *     from threading import _Event as Event
 * except (ImportError, AttributeError):             # <<<<<<<<<<<<<<
 *     # python throws ImportError, cython throws AttributeError
 *     from threading import Event
 */
    __pyx_t_6 = PyErr_ExceptionMatches(__pyx_builtin_ImportError) || PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
    if (__pyx_t_6) {
      __Pyx_AddTraceback("zmq.core.message", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_1, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L4_except_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);

      /* "zmq/core/message.pyx":47
 * except (ImportError, AttributeError):
 *     # python throws ImportError, cython throws AttributeError
 *     from threading import Event             # <<<<<<<<<<<<<<
 * 
 * from zmq.core.error import ZMQError, NotDone
 */
      __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L4_except_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_8));
      __Pyx_INCREF(((PyObject *)__pyx_n_s__Event));
      PyList_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_n_s__Event));
      __Pyx_GIVEREF(((PyObject *)__pyx_n_s__Event));
      __pyx_t_9 = __Pyx_Import(((PyObject *)__pyx_n_s__threading), ((PyObject *)__pyx_t_8), -1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L4_except_error;}
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
      __pyx_t_8 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__Event); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L4_except_error;}
      __Pyx_GOTREF(__pyx_t_8);
      if (PyObject_SetAttr(__pyx_m, __pyx_n_s__Event, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L4_except_error;}
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L3_exception_handled;
    }
    __pyx_L4_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L3_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L9_try_end:;
  }

  /* "zmq/core/message.pyx":49
 *     from threading import Event
 * 
 * from zmq.core.error import ZMQError, NotDone             # <<<<<<<<<<<<<<
 * from zmq.utils.strtypes import bytes,unicode,basestring
 * 
 */
  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_7));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__ZMQError));
  PyList_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_n_s__ZMQError));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ZMQError));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__NotDone));
  PyList_SET_ITEM(__pyx_t_7, 1, ((PyObject *)__pyx_n_s__NotDone));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__NotDone));
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s_17), ((PyObject *)__pyx_t_7), -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
  __pyx_t_7 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__ZMQError); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_7);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ZMQError, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__NotDone); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_7);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__NotDone, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "zmq/core/message.pyx":50
 * 
 * from zmq.core.error import ZMQError, NotDone
 * from zmq.utils.strtypes import bytes,unicode,basestring             # <<<<<<<<<<<<<<
 * 
 * #-----------------------------------------------------------------------------
 */
  __pyx_t_1 = PyList_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__bytes));
  PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__bytes));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__bytes));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__unicode));
  PyList_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_n_s__unicode));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__unicode));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__basestring));
  PyList_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_n_s__basestring));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__basestring));
  __pyx_t_7 = __Pyx_Import(((PyObject *)__pyx_n_s_18), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__bytes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__bytes, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__unicode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__unicode, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__basestring); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__basestring, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "zmq/core/message.pyx":124
 * 
 *     @property
 *     def done(self):             # <<<<<<<<<<<<<<
 *         """Is 0MQ completely done with the message(s) being tracked?"""
 *         for evt in self.events:
 */
  __pyx_t_7 = __Pyx_GetName((PyObject *)__pyx_ptype_3zmq_4core_7message_MessageTracker, __pyx_n_s__done); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_7);
  __pyx_t_7 = 0;
  __pyx_t_7 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_3zmq_4core_7message_MessageTracker->tp_dict, __pyx_n_s__done, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  PyType_Modified(__pyx_ptype_3zmq_4core_7message_MessageTracker);

  /* "zmq/core/message.pyx":211
 *     """
 * 
 *     def __cinit__(self, object data=None, track=False, **kwargs):             # <<<<<<<<<<<<<<
 *         cdef int rc
 *         cdef char *data_c = NULL
 */
  __pyx_t_7 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_k_4 = __pyx_t_7;
  __Pyx_GIVEREF(__pyx_t_7);
  __pyx_t_7 = 0;

  /* "zmq/core/message.pyx":262
 *         self._failed_init = False
 * 
 *     def __init__(self, object data=None, track=False):             # <<<<<<<<<<<<<<
 *         """Enforce signature"""
 *         pass
 */
  __pyx_t_7 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_k_7 = __pyx_t_7;
  __Pyx_GIVEREF(__pyx_t_7);
  __pyx_t_7 = 0;

  /* "zmq/core/message.pyx":382
 * 
 *     @property
 *     def buffer(self):             # <<<<<<<<<<<<<<
 *         """Get a read-only buffer view of the message contents."""
 *         if self._buffer is None:
 */
  __pyx_t_7 = __Pyx_GetName((PyObject *)__pyx_ptype_3zmq_4core_7message_Message, __pyx_n_s__buffer); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_7);
  __pyx_t_7 = 0;
  __pyx_t_7 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_3zmq_4core_7message_Message->tp_dict, __pyx_n_s__buffer, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  PyType_Modified(__pyx_ptype_3zmq_4core_7message_Message);

  /* "zmq/core/message.pyx":389
 * 
 *     @property
 *     def bytes(self):             # <<<<<<<<<<<<<<
 *         """Get the message content as a Python str/bytes object.
 * 
 */
  __pyx_t_7 = __Pyx_GetName((PyObject *)__pyx_ptype_3zmq_4core_7message_Message, __pyx_n_s__bytes); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_7);
  __pyx_t_7 = 0;
  __pyx_t_7 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_3zmq_4core_7message_Message->tp_dict, __pyx_n_s__bytes, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  PyType_Modified(__pyx_ptype_3zmq_4core_7message_Message);

  /* "zmq/core/message.pyx":401
 * 
 * 
 * __all__ = ['MessageTracker', 'Message']             # <<<<<<<<<<<<<<
 */
  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_7));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__MessageTracker));
  PyList_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_n_s__MessageTracker));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__MessageTracker));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__Message));
  PyList_SET_ITEM(__pyx_t_7, 1, ((PyObject *)__pyx_n_s__Message));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__Message));
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____all__, ((PyObject *)__pyx_t_7)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;

  /* "zmq/core/message.pyx":1
 * """0MQ Message related classes."""             # <<<<<<<<<<<<<<
 * 
 * #
 */
  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_7));
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_7)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;

  /* "buffers.pxd":303
 * 
 * 
 * cdef inline object viewfromobject_w(object obj):             # <<<<<<<<<<<<<<
 *     """Wrapper for writable viewfromobject."""
 *     return viewfromobject(obj, 0)
 */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  if (__pyx_m) {
    __Pyx_AddTraceback("init zmq.core.message", __pyx_clineno, __pyx_lineno, __pyx_filename);
    Py_DECREF(__pyx_m); __pyx_m = 0;
  } else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_ImportError, "init zmq.core.message");
  }
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  #if PY_MAJOR_VERSION < 3
  return;
  #else
  return __pyx_m;
  #endif
}

/* Runtime support code */

#if CYTHON_REFNANNY
static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
    PyObject *m = NULL, *p = NULL;
    void *r = NULL;
    m = PyImport_ImportModule((char *)modname);
    if (!m) goto end;
    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
    if (!p) goto end;
    r = PyLong_AsVoidPtr(p);
end:
    Py_XDECREF(p);
    Py_XDECREF(m);
    return (__Pyx_RefNannyAPIStruct *)r;
}
#endif /* CYTHON_REFNANNY */

static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
    PyObject *result;
    result = PyObject_GetAttr(dict, name);
    if (!result) {
        if (dict != __pyx_b) {
            PyErr_Clear();
            result = PyObject_GetAttr(__pyx_b, name);
        }
        if (!result) {
            PyErr_SetObject(PyExc_NameError, name);
        }
    }
    return result;
}


static CYTHON_INLINE int __Pyx_CheckKeywordStrings(
    PyObject *kwdict,
    const char* function_name,
    int kw_allowed)
{
    PyObject* key = 0;
    Py_ssize_t pos = 0;
    while (PyDict_Next(kwdict, &pos, &key, 0)) {
        #if PY_MAJOR_VERSION < 3
        if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key)))
        #else
        if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key)))
        #endif
            goto invalid_keyword_type;
    }
    if ((!kw_allowed) && unlikely(key))
        goto invalid_keyword;
    return 1;
invalid_keyword_type:
    PyErr_Format(PyExc_TypeError,
        "%s() keywords must be strings", function_name);
    return 0;
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
    #if PY_MAJOR_VERSION < 3
        "%s() got an unexpected keyword argument '%s'",
        function_name, PyString_AsString(key));
    #else
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
    return 0;
}

static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyThreadState *tstate = PyThreadState_GET();

    tmp_type = tstate->curexc_type;
    tmp_value = tstate->curexc_value;
    tmp_tb = tstate->curexc_traceback;
    tstate->curexc_type = type;
    tstate->curexc_value = value;
    tstate->curexc_traceback = tb;
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
}

static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
    PyThreadState *tstate = PyThreadState_GET();
    *type = tstate->curexc_type;
    *value = tstate->curexc_value;
    *tb = tstate->curexc_traceback;

    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
}


#if PY_MAJOR_VERSION < 3
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
    /* cause is unused */
    Py_XINCREF(type);
    Py_XINCREF(value);
    Py_XINCREF(tb);
    /* First, check the traceback argument, replacing None with NULL. */
    if (tb == Py_None) {
        Py_DECREF(tb);
        tb = 0;
    }
    else if (tb != NULL && !PyTraceBack_Check(tb)) {
        PyErr_SetString(PyExc_TypeError,
            "raise: arg 3 must be a traceback or None");
        goto raise_error;
    }
    /* Next, replace a missing value with None */
    if (value == NULL) {
        value = Py_None;
        Py_INCREF(value);
    }
    #if PY_VERSION_HEX < 0x02050000
    if (!PyClass_Check(type))
    #else
    if (!PyType_Check(type))
    #endif
    {
        /* Raising an instance.  The value should be a dummy. */
        if (value != Py_None) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto raise_error;
        }
        /* Normalize to raise <class>, <instance> */
        Py_DECREF(value);
        value = type;
        #if PY_VERSION_HEX < 0x02050000
            if (PyInstance_Check(type)) {
                type = (PyObject*) ((PyInstanceObject*)type)->in_class;
                Py_INCREF(type);
            }
            else {
                type = 0;
                PyErr_SetString(PyExc_TypeError,
                    "raise: exception must be an old-style class or instance");
                goto raise_error;
            }
        #else
            type = (PyObject*) Py_TYPE(type);
            Py_INCREF(type);
            if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
                PyErr_SetString(PyExc_TypeError,
                    "raise: exception class must be a subclass of BaseException");
                goto raise_error;
            }
        #endif
    }

    __Pyx_ErrRestore(type, value, tb);
    return;
raise_error:
    Py_XDECREF(value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
    return;
}

#else /* Python 3+ */

static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
    if (tb == Py_None) {
        tb = 0;
    } else if (tb && !PyTraceBack_Check(tb)) {
        PyErr_SetString(PyExc_TypeError,
            "raise: arg 3 must be a traceback or None");
        goto bad;
    }
    if (value == Py_None)
        value = 0;

    if (PyExceptionInstance_Check(type)) {
        if (value) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto bad;
        }
        value = type;
        type = (PyObject*) Py_TYPE(value);
    } else if (!PyExceptionClass_Check(type)) {
        PyErr_SetString(PyExc_TypeError,
            "raise: exception class must be a subclass of BaseException");
        goto bad;
    }

    if (cause) {
        PyObject *fixed_cause;
        if (PyExceptionClass_Check(cause)) {
            fixed_cause = PyObject_CallObject(cause, NULL);
            if (fixed_cause == NULL)
                goto bad;
        }
        else if (PyExceptionInstance_Check(cause)) {
            fixed_cause = cause;
            Py_INCREF(fixed_cause);
        }
        else {
            PyErr_SetString(PyExc_TypeError,
                            "exception causes must derive from "
                            "BaseException");
            goto bad;
        }
        if (!value) {
            value = PyObject_CallObject(type, NULL);
        }
        PyException_SetCause(value, fixed_cause);
    }

    PyErr_SetObject(type, value);

    if (tb) {
        PyThreadState *tstate = PyThreadState_GET();
        PyObject* tmp_tb = tstate->curexc_traceback;
        if (tb != tmp_tb) {
            Py_INCREF(tb);
            tstate->curexc_traceback = tb;
            Py_XDECREF(tmp_tb);
        }
    }

bad:
    return;
}
#endif

static void __Pyx_RaiseDoubleKeywordsError(
    const char* func_name,
    PyObject* kw_name)
{
    PyErr_Format(PyExc_TypeError,
        #if PY_MAJOR_VERSION >= 3
        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
        #else
        "%s() got multiple values for keyword argument '%s'", func_name,
        PyString_AS_STRING(kw_name));
        #endif
}

static int __Pyx_ParseOptionalKeywords(
    PyObject *kwds,
    PyObject **argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    const char* function_name)
{
    PyObject *key = 0, *value = 0;
    Py_ssize_t pos = 0;
    PyObject*** name;
    PyObject*** first_kw_arg = argnames + num_pos_args;

    while (PyDict_Next(kwds, &pos, &key, &value)) {
        name = first_kw_arg;
        while (*name && (**name != key)) name++;
        if (*name) {
            values[name-argnames] = value;
        } else {
            #if PY_MAJOR_VERSION < 3
            if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) {
            #else
            if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) {
            #endif
                goto invalid_keyword_type;
            } else {
                for (name = first_kw_arg; *name; name++) {
                    #if PY_MAJOR_VERSION >= 3
                    if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
                        PyUnicode_Compare(**name, key) == 0) break;
                    #else
                    if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
                        _PyString_Eq(**name, key)) break;
                    #endif
                }
                if (*name) {
                    values[name-argnames] = value;
                } else {
                    /* unexpected keyword found */
                    for (name=argnames; name != first_kw_arg; name++) {
                        if (**name == key) goto arg_passed_twice;
                        #if PY_MAJOR_VERSION >= 3
                        if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
                            PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice;
                        #else
                        if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
                            _PyString_Eq(**name, key)) goto arg_passed_twice;
                        #endif
                    }
                    if (kwds2) {
                        if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
                    } else {
                        goto invalid_keyword;
                    }
                }
            }
        }
    }
    return 0;
arg_passed_twice:
    __Pyx_RaiseDoubleKeywordsError(function_name, **name);
    goto bad;
invalid_keyword_type:
    PyErr_Format(PyExc_TypeError,
        "%s() keywords must be strings", function_name);
    goto bad;
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
    #if PY_MAJOR_VERSION < 3
        "%s() got an unexpected keyword argument '%s'",
        function_name, PyString_AsString(key));
    #else
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
bad:
    return -1;
}

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)
{
    Py_ssize_t num_expected;
    const char *more_or_less;

    if (num_found < num_min) {
        num_expected = num_min;
        more_or_less = "at least";
    } else {
        num_expected = num_max;
        more_or_less = "at most";
    }
    if (exact) {
        more_or_less = "exactly";
    }
    PyErr_Format(PyExc_TypeError,
                 "%s() takes %s %"PY_FORMAT_SIZE_T"d positional argument%s (%"PY_FORMAT_SIZE_T"d given)",
                 func_name, more_or_less, num_expected,
                 (num_expected == 1) ? "" : "s", num_found);
}

static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
    PyObject *local_type, *local_value, *local_tb;
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyThreadState *tstate = PyThreadState_GET();
    local_type = tstate->curexc_type;
    local_value = tstate->curexc_value;
    local_tb = tstate->curexc_traceback;
    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
    PyErr_NormalizeException(&local_type, &local_value, &local_tb);
    if (unlikely(tstate->curexc_type))
        goto bad;
    #if PY_MAJOR_VERSION >= 3
    if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
        goto bad;
    #endif
    *type = local_type;
    *value = local_value;
    *tb = local_tb;
    Py_INCREF(local_type);
    Py_INCREF(local_value);
    Py_INCREF(local_tb);
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = local_type;
    tstate->exc_value = local_value;
    tstate->exc_traceback = local_tb;
    /* Make sure tstate is in a consistent state when we XDECREF
       these objects (XDECREF may run arbitrary code). */
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
    return 0;
bad:
    *type = 0;
    *value = 0;
    *tb = 0;
    Py_XDECREF(local_type);
    Py_XDECREF(local_value);
    Py_XDECREF(local_tb);
    return -1;
}


static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
    PyThreadState *tstate = PyThreadState_GET();
    *type = tstate->exc_type;
    *value = tstate->exc_value;
    *tb = tstate->exc_traceback;
    Py_XINCREF(*type);
    Py_XINCREF(*value);
    Py_XINCREF(*tb);
}

static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyThreadState *tstate = PyThreadState_GET();
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = type;
    tstate->exc_value = value;
    tstate->exc_traceback = tb;
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
}

static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level) {
    PyObject *py_import = 0;
    PyObject *empty_list = 0;
    PyObject *module = 0;
    PyObject *global_dict = 0;
    PyObject *empty_dict = 0;
    PyObject *list;
    py_import = __Pyx_GetAttrString(__pyx_b, "__import__");
    if (!py_import)
        goto bad;
    if (from_list)
        list = from_list;
    else {
        empty_list = PyList_New(0);
        if (!empty_list)
            goto bad;
        list = empty_list;
    }
    global_dict = PyModule_GetDict(__pyx_m);
    if (!global_dict)
        goto bad;
    empty_dict = PyDict_New();
    if (!empty_dict)
        goto bad;
    #if PY_VERSION_HEX >= 0x02050000
    {
        PyObject *py_level = PyInt_FromLong(level);
        if (!py_level)
            goto bad;
        module = PyObject_CallFunctionObjArgs(py_import,
            name, global_dict, empty_dict, list, py_level, NULL);
        Py_DECREF(py_level);
    }
    #else
    if (level>0) {
        PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4.");
        goto bad;
    }
    module = PyObject_CallFunctionObjArgs(py_import,
        name, global_dict, empty_dict, list, NULL);
    #endif
bad:
    Py_XDECREF(empty_list);
    Py_XDECREF(py_import);
    Py_XDECREF(empty_dict);
    return module;
}

static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
    const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(unsigned char) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(unsigned char)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to unsigned char" :
                    "value too large to convert to unsigned char");
            }
            return (unsigned char)-1;
        }
        return (unsigned char)val;
    }
    return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
}

static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
    const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(unsigned short) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(unsigned short)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to unsigned short" :
                    "value too large to convert to unsigned short");
            }
            return (unsigned short)-1;
        }
        return (unsigned short)val;
    }
    return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
}

static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
    const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(unsigned int) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(unsigned int)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to unsigned int" :
                    "value too large to convert to unsigned int");
            }
            return (unsigned int)-1;
        }
        return (unsigned int)val;
    }
    return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
}

static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
    const char neg_one = (char)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(char) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(char)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to char" :
                    "value too large to convert to char");
            }
            return (char)-1;
        }
        return (char)val;
    }
    return (char)__Pyx_PyInt_AsLong(x);
}

static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
    const short neg_one = (short)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(short) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(short)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to short" :
                    "value too large to convert to short");
            }
            return (short)-1;
        }
        return (short)val;
    }
    return (short)__Pyx_PyInt_AsLong(x);
}

static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
    const int neg_one = (int)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(int) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(int)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to int" :
                    "value too large to convert to int");
            }
            return (int)-1;
        }
        return (int)val;
    }
    return (int)__Pyx_PyInt_AsLong(x);
}

static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
    const signed char neg_one = (signed char)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(signed char) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(signed char)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to signed char" :
                    "value too large to convert to signed char");
            }
            return (signed char)-1;
        }
        return (signed char)val;
    }
    return (signed char)__Pyx_PyInt_AsSignedLong(x);
}

static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
    const signed short neg_one = (signed short)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(signed short) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(signed short)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to signed short" :
                    "value too large to convert to signed short");
            }
            return (signed short)-1;
        }
        return (signed short)val;
    }
    return (signed short)__Pyx_PyInt_AsSignedLong(x);
}

static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
    const signed int neg_one = (signed int)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(signed int) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(signed int)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to signed int" :
                    "value too large to convert to signed int");
            }
            return (signed int)-1;
        }
        return (signed int)val;
    }
    return (signed int)__Pyx_PyInt_AsSignedLong(x);
}

static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
    const int neg_one = (int)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(int) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(int)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to int" :
                    "value too large to convert to int");
            }
            return (int)-1;
        }
        return (int)val;
    }
    return (int)__Pyx_PyInt_AsLong(x);
}

static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
    const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_VERSION_HEX < 0x03000000
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to unsigned long");
            return (unsigned long)-1;
        }
        return (unsigned long)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to unsigned long");
                return (unsigned long)-1;
            }
            return (unsigned long)PyLong_AsUnsignedLong(x);
        } else {
            return (unsigned long)PyLong_AsLong(x);
        }
    } else {
        unsigned long val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (unsigned long)-1;
        val = __Pyx_PyInt_AsUnsignedLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_VERSION_HEX < 0x03000000
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to unsigned PY_LONG_LONG");
            return (unsigned PY_LONG_LONG)-1;
        }
        return (unsigned PY_LONG_LONG)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to unsigned PY_LONG_LONG");
                return (unsigned PY_LONG_LONG)-1;
            }
            return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
        } else {
            return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x);
        }
    } else {
        unsigned PY_LONG_LONG val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (unsigned PY_LONG_LONG)-1;
        val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
    const long neg_one = (long)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_VERSION_HEX < 0x03000000
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to long");
            return (long)-1;
        }
        return (long)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to long");
                return (long)-1;
            }
            return (long)PyLong_AsUnsignedLong(x);
        } else {
            return (long)PyLong_AsLong(x);
        }
    } else {
        long val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (long)-1;
        val = __Pyx_PyInt_AsLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
    const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_VERSION_HEX < 0x03000000
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to PY_LONG_LONG");
            return (PY_LONG_LONG)-1;
        }
        return (PY_LONG_LONG)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to PY_LONG_LONG");
                return (PY_LONG_LONG)-1;
            }
            return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
        } else {
            return (PY_LONG_LONG)PyLong_AsLongLong(x);
        }
    } else {
        PY_LONG_LONG val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (PY_LONG_LONG)-1;
        val = __Pyx_PyInt_AsLongLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
    const signed long neg_one = (signed long)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_VERSION_HEX < 0x03000000
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to signed long");
            return (signed long)-1;
        }
        return (signed long)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to signed long");
                return (signed long)-1;
            }
            return (signed long)PyLong_AsUnsignedLong(x);
        } else {
            return (signed long)PyLong_AsLong(x);
        }
    } else {
        signed long val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (signed long)-1;
        val = __Pyx_PyInt_AsSignedLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
    const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_VERSION_HEX < 0x03000000
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to signed PY_LONG_LONG");
            return (signed PY_LONG_LONG)-1;
        }
        return (signed PY_LONG_LONG)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to signed PY_LONG_LONG");
                return (signed PY_LONG_LONG)-1;
            }
            return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
        } else {
            return (signed PY_LONG_LONG)PyLong_AsLongLong(x);
        }
    } else {
        signed PY_LONG_LONG val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (signed PY_LONG_LONG)-1;
        val = __Pyx_PyInt_AsSignedLongLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static void __Pyx_WriteUnraisable(const char *name, int clineno,
                                  int lineno, const char *filename) {
    PyObject *old_exc, *old_val, *old_tb;
    PyObject *ctx;
    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
    #if PY_MAJOR_VERSION < 3
    ctx = PyString_FromString(name);
    #else
    ctx = PyUnicode_FromString(name);
    #endif
    __Pyx_ErrRestore(old_exc, old_val, old_tb);
    if (!ctx) {
        PyErr_WriteUnraisable(Py_None);
    } else {
        PyErr_WriteUnraisable(ctx);
        Py_DECREF(ctx);
    }
}

static int __Pyx_check_binary_version(void) {
    char ctversion[4], rtversion[4];
    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
        char message[200];
        PyOS_snprintf(message, sizeof(message),
                      "compiletime version %s of module '%.100s' "
                      "does not match runtime version %s",
                      ctversion, __Pyx_MODULE_NAME, rtversion);
        #if PY_VERSION_HEX < 0x02050000
        return PyErr_Warn(NULL, message);
        #else
        return PyErr_WarnEx(NULL, message, 1);
        #endif
    }
    return 0;
}

static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
    PyObject *d = 0;
    PyObject *cobj = 0;
    union {
        void (*fp)(void);
        void *p;
    } tmp;

    d = PyObject_GetAttrString(__pyx_m, (char *)"__pyx_capi__");
    if (!d) {
        PyErr_Clear();
        d = PyDict_New();
        if (!d)
            goto bad;
        Py_INCREF(d);
        if (PyModule_AddObject(__pyx_m, (char *)"__pyx_capi__", d) < 0)
            goto bad;
    }
    tmp.fp = f;
#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
    cobj = PyCapsule_New(tmp.p, sig, 0);
#else
    cobj = PyCObject_FromVoidPtrAndDesc(tmp.p, (void *)sig, 0);
#endif
    if (!cobj)
        goto bad;
    if (PyDict_SetItemString(d, name, cobj) < 0)
        goto bad;
    Py_DECREF(cobj);
    Py_DECREF(d);
    return 0;
bad:
    Py_XDECREF(cobj);
    Py_XDECREF(d);
    return -1;
}

static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
    PyObject *ob = PyCapsule_New(vtable, 0, 0);
#else
    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
#endif
    if (!ob)
        goto bad;
    if (PyDict_SetItemString(dict, "__pyx_vtable__", ob) < 0)
        goto bad;
    Py_DECREF(ob);
    return 0;
bad:
    Py_XDECREF(ob);
    return -1;
}

#ifndef __PYX_HAVE_RT_ImportType
#define __PYX_HAVE_RT_ImportType
static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
    size_t size, int strict)
{
    PyObject *py_module = 0;
    PyObject *result = 0;
    PyObject *py_name = 0;
    char warning[200];

    py_module = __Pyx_ImportModule(module_name);
    if (!py_module)
        goto bad;
    #if PY_MAJOR_VERSION < 3
    py_name = PyString_FromString(class_name);
    #else
    py_name = PyUnicode_FromString(class_name);
    #endif
    if (!py_name)
        goto bad;
    result = PyObject_GetAttr(py_module, py_name);
    Py_DECREF(py_name);
    py_name = 0;
    Py_DECREF(py_module);
    py_module = 0;
    if (!result)
        goto bad;
    if (!PyType_Check(result)) {
        PyErr_Format(PyExc_TypeError,
            "%s.%s is not a type object",
            module_name, class_name);
        goto bad;
    }
    if (!strict && ((PyTypeObject *)result)->tp_basicsize > (Py_ssize_t)size) {
        PyOS_snprintf(warning, sizeof(warning),
            "%s.%s size changed, may indicate binary incompatibility",
            module_name, class_name);
        #if PY_VERSION_HEX < 0x02050000
        if (PyErr_Warn(NULL, warning) < 0) goto bad;
        #else
        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
        #endif
    }
    else if (((PyTypeObject *)result)->tp_basicsize != (Py_ssize_t)size) {
        PyErr_Format(PyExc_ValueError,
            "%s.%s has the wrong size, try recompiling",
            module_name, class_name);
        goto bad;
    }
    return (PyTypeObject *)result;
bad:
    Py_XDECREF(py_module);
    Py_XDECREF(result);
    return NULL;
}
#endif

#ifndef __PYX_HAVE_RT_ImportModule
#define __PYX_HAVE_RT_ImportModule
static PyObject *__Pyx_ImportModule(const char *name) {
    PyObject *py_name = 0;
    PyObject *py_module = 0;

    #if PY_MAJOR_VERSION < 3
    py_name = PyString_FromString(name);
    #else
    py_name = PyUnicode_FromString(name);
    #endif
    if (!py_name)
        goto bad;
    py_module = PyImport_Import(py_name);
    Py_DECREF(py_name);
    return py_module;
bad:
    Py_XDECREF(py_name);
    return 0;
}
#endif

#include "compile.h"
#include "frameobject.h"
#include "traceback.h"

static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno,
                               int __pyx_lineno, const char *__pyx_filename) {
    PyObject *py_srcfile = 0;
    PyObject *py_funcname = 0;
    PyObject *py_globals = 0;
    PyCodeObject *py_code = 0;
    PyFrameObject *py_frame = 0;

    #if PY_MAJOR_VERSION < 3
    py_srcfile = PyString_FromString(__pyx_filename);
    #else
    py_srcfile = PyUnicode_FromString(__pyx_filename);
    #endif
    if (!py_srcfile) goto bad;
    if (__pyx_clineno) {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
        #else
        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
        #endif
    }
    else {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromString(funcname);
        #else
        py_funcname = PyUnicode_FromString(funcname);
        #endif
    }
    if (!py_funcname) goto bad;
    py_globals = PyModule_GetDict(__pyx_m);
    if (!py_globals) goto bad;
    py_code = PyCode_New(
        0,            /*int argcount,*/
        #if PY_MAJOR_VERSION >= 3
        0,            /*int kwonlyargcount,*/
        #endif
        0,            /*int nlocals,*/
        0,            /*int stacksize,*/
        0,            /*int flags,*/
        __pyx_empty_bytes, /*PyObject *code,*/
        __pyx_empty_tuple,  /*PyObject *consts,*/
        __pyx_empty_tuple,  /*PyObject *names,*/
        __pyx_empty_tuple,  /*PyObject *varnames,*/
        __pyx_empty_tuple,  /*PyObject *freevars,*/
        __pyx_empty_tuple,  /*PyObject *cellvars,*/
        py_srcfile,   /*PyObject *filename,*/
        py_funcname,  /*PyObject *name,*/
        __pyx_lineno,   /*int firstlineno,*/
        __pyx_empty_bytes  /*PyObject *lnotab*/
    );
    if (!py_code) goto bad;
    py_frame = PyFrame_New(
        PyThreadState_GET(), /*PyThreadState *tstate,*/
        py_code,             /*PyCodeObject *code,*/
        py_globals,          /*PyObject *globals,*/
        0                    /*PyObject *locals*/
    );
    if (!py_frame) goto bad;
    py_frame->f_lineno = __pyx_lineno;
    PyTraceBack_Here(py_frame);
bad:
    Py_XDECREF(py_srcfile);
    Py_XDECREF(py_funcname);
    Py_XDECREF(py_code);
    Py_XDECREF(py_frame);
}

static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
    while (t->p) {
        #if PY_MAJOR_VERSION < 3
        if (t->is_unicode) {
            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
        } else if (t->intern) {
            *t->p = PyString_InternFromString(t->s);
        } else {
            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
        }
        #else  /* Python 3+ has unicode identifiers */
        if (t->is_unicode | t->is_str) {
            if (t->intern) {
                *t->p = PyUnicode_InternFromString(t->s);
            } else if (t->encoding) {
                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
            } else {
                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
            }
        } else {
            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
        }
        #endif
        if (!*t->p)
            return -1;
        ++t;
    }
    return 0;
}

/* Type Conversion Functions */

static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
   int is_true = x == Py_True;
   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
   else return PyObject_IsTrue(x);
}

static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
  PyNumberMethods *m;
  const char *name = NULL;
  PyObject *res = NULL;
#if PY_VERSION_HEX < 0x03000000
  if (PyInt_Check(x) || PyLong_Check(x))
#else
  if (PyLong_Check(x))
#endif
    return Py_INCREF(x), x;
  m = Py_TYPE(x)->tp_as_number;
#if PY_VERSION_HEX < 0x03000000
  if (m && m->nb_int) {
    name = "int";
    res = PyNumber_Int(x);
  }
  else if (m && m->nb_long) {
    name = "long";
    res = PyNumber_Long(x);
  }
#else
  if (m && m->nb_int) {
    name = "int";
    res = PyNumber_Long(x);
  }
#endif
  if (res) {
#if PY_VERSION_HEX < 0x03000000
    if (!PyInt_Check(res) && !PyLong_Check(res)) {
#else
    if (!PyLong_Check(res)) {
#endif
      PyErr_Format(PyExc_TypeError,
                   "__%s__ returned non-%s (type %.200s)",
                   name, name, Py_TYPE(res)->tp_name);
      Py_DECREF(res);
      return NULL;
    }
  }
  else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_TypeError,
                    "an integer is required");
  }
  return res;
}

static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
  Py_ssize_t ival;
  PyObject* x = PyNumber_Index(b);
  if (!x) return -1;
  ival = PyInt_AsSsize_t(x);
  Py_DECREF(x);
  return ival;
}

static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
#if PY_VERSION_HEX < 0x02050000
   if (ival <= LONG_MAX)
       return PyInt_FromLong((long)ival);
   else {
       unsigned char *bytes = (unsigned char *) &ival;
       int one = 1; int little = (int)*(unsigned char*)&one;
       return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
   }
#else
   return PyInt_FromSize_t(ival);
#endif
}

static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
   unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
   if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) {
       return (size_t)-1;
   } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
       PyErr_SetString(PyExc_OverflowError,
                       "value too large to convert to size_t");
       return (size_t)-1;
   }
   return (size_t)val;
}


#endif /* Py_PYTHON_H */
