Current File : /home/mmdealscpanel/yummmdeals.com/pycparser.zip
PK�[�k�^WW__init__.pynu�[���#-----------------------------------------------------------------
# pycparser: __init__.py
#
# This package file exports some convenience functions for
# interacting with pycparser
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------
__all__ = ['c_lexer', 'c_parser', 'c_ast']
__version__ = '2.14'

from subprocess import Popen, PIPE
from .c_parser import CParser


def preprocess_file(filename, cpp_path='cpp', cpp_args=''):
    """ Preprocess a file using cpp.

        filename:
            Name of the file you want to preprocess.

        cpp_path:
        cpp_args:
            Refer to the documentation of parse_file for the meaning of these
            arguments.

        When successful, returns the preprocessed file's contents.
        Errors from cpp will be printed out.
    """
    path_list = [cpp_path]
    if isinstance(cpp_args, list):
        path_list += cpp_args
    elif cpp_args != '':
        path_list += [cpp_args]
    path_list += [filename]

    try:
        # Note the use of universal_newlines to treat all newlines
        # as \n for Python's purpose
        #
        pipe = Popen(   path_list,
                        stdout=PIPE,
                        universal_newlines=True)
        text = pipe.communicate()[0]
    except OSError as e:
        raise RuntimeError("Unable to invoke 'cpp'.  " +
            'Make sure its path was passed correctly\n' +
            ('Original error: %s' % e))

    return text


def parse_file(filename, use_cpp=False, cpp_path='cpp', cpp_args='',
               parser=None):
    """ Parse a C file using pycparser.

        filename:
            Name of the file you want to parse.

        use_cpp:
            Set to True if you want to execute the C pre-processor
            on the file prior to parsing it.

        cpp_path:
            If use_cpp is True, this is the path to 'cpp' on your
            system. If no path is provided, it attempts to just
            execute 'cpp', so it must be in your PATH.

        cpp_args:
            If use_cpp is True, set this to the command line arguments strings
            to cpp. Be careful with quotes - it's best to pass a raw string
            (r'') here. For example:
            r'-I../utils/fake_libc_include'
            If several arguments are required, pass a list of strings.

        parser:
            Optional parser object to be used instead of the default CParser

        When successful, an AST is returned. ParseError can be
        thrown if the file doesn't parse successfully.

        Errors from cpp will be printed out.
    """
    if use_cpp:
        text = preprocess_file(filename, cpp_path, cpp_args)
    else:
        with open(filename, 'rU') as f:
            text = f.read()

    if parser is None:
        parser = CParser()
    return parser.parse(text, filename)
PK�[�6�55c_generator.pynu�[���#------------------------------------------------------------------------------
# pycparser: c_generator.py
#
# C code generator from pycparser AST nodes.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#------------------------------------------------------------------------------
from . import c_ast


class CGenerator(object):
    """ Uses the same visitor pattern as c_ast.NodeVisitor, but modified to
        return a value from each visit method, using string accumulation in
        generic_visit.
    """
    def __init__(self):
        # Statements start with indentation of self.indent_level spaces, using
        # the _make_indent method
        #
        self.indent_level = 0

    def _make_indent(self):
        return ' ' * self.indent_level

    def visit(self, node):
        method = 'visit_' + node.__class__.__name__
        return getattr(self, method, self.generic_visit)(node)

    def generic_visit(self, node):
        #~ print('generic:', type(node))
        if node is None:
            return ''
        else:
            return ''.join(self.visit(c) for c_name, c in node.children())

    def visit_Constant(self, n):
        return n.value

    def visit_ID(self, n):
        return n.name

    def visit_ArrayRef(self, n):
        arrref = self._parenthesize_unless_simple(n.name)
        return arrref + '[' + self.visit(n.subscript) + ']'

    def visit_StructRef(self, n):
        sref = self._parenthesize_unless_simple(n.name)
        return sref + n.type + self.visit(n.field)

    def visit_FuncCall(self, n):
        fref = self._parenthesize_unless_simple(n.name)
        return fref + '(' + self.visit(n.args) + ')'

    def visit_UnaryOp(self, n):
        operand = self._parenthesize_unless_simple(n.expr)
        if n.op == 'p++':
            return '%s++' % operand
        elif n.op == 'p--':
            return '%s--' % operand
        elif n.op == 'sizeof':
            # Always parenthesize the argument of sizeof since it can be
            # a name.
            return 'sizeof(%s)' % self.visit(n.expr)
        else:
            return '%s%s' % (n.op, operand)

    def visit_BinaryOp(self, n):
        lval_str = self._parenthesize_if(n.left,
                            lambda d: not self._is_simple_node(d))
        rval_str = self._parenthesize_if(n.right,
                            lambda d: not self._is_simple_node(d))
        return '%s %s %s' % (lval_str, n.op, rval_str)

    def visit_Assignment(self, n):
        rval_str = self._parenthesize_if(
                            n.rvalue,
                            lambda n: isinstance(n, c_ast.Assignment))
        return '%s %s %s' % (self.visit(n.lvalue), n.op, rval_str)

    def visit_IdentifierType(self, n):
        return ' '.join(n.names)

    def _visit_expr(self, n):
        if isinstance(n, c_ast.InitList):
            return '{' + self.visit(n) + '}'
        elif isinstance(n, c_ast.ExprList):
            return '(' + self.visit(n) + ')'
        else:
            return self.visit(n)

    def visit_Decl(self, n, no_type=False):
        # no_type is used when a Decl is part of a DeclList, where the type is
        # explicitly only for the first declaration in a list.
        #
        s = n.name if no_type else self._generate_decl(n)
        if n.bitsize: s += ' : ' + self.visit(n.bitsize)
        if n.init:
            s += ' = ' + self._visit_expr(n.init)
        return s

    def visit_DeclList(self, n):
        s = self.visit(n.decls[0])
        if len(n.decls) > 1:
            s += ', ' + ', '.join(self.visit_Decl(decl, no_type=True)
                                    for decl in n.decls[1:])
        return s

    def visit_Typedef(self, n):
        s = ''
        if n.storage: s += ' '.join(n.storage) + ' '
        s += self._generate_type(n.type)
        return s

    def visit_Cast(self, n):
        s = '(' + self._generate_type(n.to_type) + ')'
        return s + ' ' + self._parenthesize_unless_simple(n.expr)

    def visit_ExprList(self, n):
        visited_subexprs = []
        for expr in n.exprs:
            visited_subexprs.append(self._visit_expr(expr))
        return ', '.join(visited_subexprs)

    def visit_InitList(self, n):
        visited_subexprs = []
        for expr in n.exprs:
            visited_subexprs.append(self._visit_expr(expr))
        return ', '.join(visited_subexprs)

    def visit_Enum(self, n):
        s = 'enum'
        if n.name: s += ' ' + n.name
        if n.values:
            s += ' {'
            for i, enumerator in enumerate(n.values.enumerators):
                s += enumerator.name
                if enumerator.value:
                    s += ' = ' + self.visit(enumerator.value)
                if i != len(n.values.enumerators) - 1:
                    s += ', '
            s += '}'
        return s

    def visit_FuncDef(self, n):
        decl = self.visit(n.decl)
        self.indent_level = 0
        body = self.visit(n.body)
        if n.param_decls:
            knrdecls = ';\n'.join(self.visit(p) for p in n.param_decls)
            return decl + '\n' + knrdecls + ';\n' + body + '\n'
        else:
            return decl + '\n' + body + '\n'

    def visit_FileAST(self, n):
        s = ''
        for ext in n.ext:
            if isinstance(ext, c_ast.FuncDef):
                s += self.visit(ext)
            else:
                s += self.visit(ext) + ';\n'
        return s

    def visit_Compound(self, n):
        s = self._make_indent() + '{\n'
        self.indent_level += 2
        if n.block_items:
            s += ''.join(self._generate_stmt(stmt) for stmt in n.block_items)
        self.indent_level -= 2
        s += self._make_indent() + '}\n'
        return s

    def visit_EmptyStatement(self, n):
        return ';'

    def visit_ParamList(self, n):
        return ', '.join(self.visit(param) for param in n.params)

    def visit_Return(self, n):
        s = 'return'
        if n.expr: s += ' ' + self.visit(n.expr)
        return s + ';'

    def visit_Break(self, n):
        return 'break;'

    def visit_Continue(self, n):
        return 'continue;'

    def visit_TernaryOp(self, n):
        s = self._visit_expr(n.cond) + ' ? '
        s += self._visit_expr(n.iftrue) + ' : '
        s += self._visit_expr(n.iffalse)
        return s

    def visit_If(self, n):
        s = 'if ('
        if n.cond: s += self.visit(n.cond)
        s += ')\n'
        s += self._generate_stmt(n.iftrue, add_indent=True)
        if n.iffalse:
            s += self._make_indent() + 'else\n'
            s += self._generate_stmt(n.iffalse, add_indent=True)
        return s

    def visit_For(self, n):
        s = 'for ('
        if n.init: s += self.visit(n.init)
        s += ';'
        if n.cond: s += ' ' + self.visit(n.cond)
        s += ';'
        if n.next: s += ' ' + self.visit(n.next)
        s += ')\n'
        s += self._generate_stmt(n.stmt, add_indent=True)
        return s

    def visit_While(self, n):
        s = 'while ('
        if n.cond: s += self.visit(n.cond)
        s += ')\n'
        s += self._generate_stmt(n.stmt, add_indent=True)
        return s

    def visit_DoWhile(self, n):
        s = 'do\n'
        s += self._generate_stmt(n.stmt, add_indent=True)
        s += self._make_indent() + 'while ('
        if n.cond: s += self.visit(n.cond)
        s += ');'
        return s

    def visit_Switch(self, n):
        s = 'switch (' + self.visit(n.cond) + ')\n'
        s += self._generate_stmt(n.stmt, add_indent=True)
        return s

    def visit_Case(self, n):
        s = 'case ' + self.visit(n.expr) + ':\n'
        for stmt in n.stmts:
            s += self._generate_stmt(stmt, add_indent=True)
        return s

    def visit_Default(self, n):
        s = 'default:\n'
        for stmt in n.stmts:
            s += self._generate_stmt(stmt, add_indent=True)
        return s

    def visit_Label(self, n):
        return n.name + ':\n' + self._generate_stmt(n.stmt)

    def visit_Goto(self, n):
        return 'goto ' + n.name + ';'

    def visit_EllipsisParam(self, n):
        return '...'

    def visit_Struct(self, n):
        return self._generate_struct_union(n, 'struct')

    def visit_Typename(self, n):
        return self._generate_type(n.type)

    def visit_Union(self, n):
        return self._generate_struct_union(n, 'union')

    def visit_NamedInitializer(self, n):
        s = ''
        for name in n.name:
            if isinstance(name, c_ast.ID):
                s += '.' + name.name
            elif isinstance(name, c_ast.Constant):
                s += '[' + name.value + ']'
        s += ' = ' + self.visit(n.expr)
        return s

    def visit_FuncDecl(self, n):
        return self._generate_type(n)

    def _generate_struct_union(self, n, name):
        """ Generates code for structs and unions. name should be either
            'struct' or union.
        """
        s = name + ' ' + (n.name or '')
        if n.decls:
            s += '\n'
            s += self._make_indent()
            self.indent_level += 2
            s += '{\n'
            for decl in n.decls:
                s += self._generate_stmt(decl)
            self.indent_level -= 2
            s += self._make_indent() + '}'
        return s

    def _generate_stmt(self, n, add_indent=False):
        """ Generation from a statement node. This method exists as a wrapper
            for individual visit_* methods to handle different treatment of
            some statements in this context.
        """
        typ = type(n)
        if add_indent: self.indent_level += 2
        indent = self._make_indent()
        if add_indent: self.indent_level -= 2

        if typ in (
                c_ast.Decl, c_ast.Assignment, c_ast.Cast, c_ast.UnaryOp,
                c_ast.BinaryOp, c_ast.TernaryOp, c_ast.FuncCall, c_ast.ArrayRef,
                c_ast.StructRef, c_ast.Constant, c_ast.ID, c_ast.Typedef,
                c_ast.ExprList):
            # These can also appear in an expression context so no semicolon
            # is added to them automatically
            #
            return indent + self.visit(n) + ';\n'
        elif typ in (c_ast.Compound,):
            # No extra indentation required before the opening brace of a
            # compound - because it consists of multiple lines it has to
            # compute its own indentation.
            #
            return self.visit(n)
        else:
            return indent + self.visit(n) + '\n'

    def _generate_decl(self, n):
        """ Generation from a Decl node.
        """
        s = ''
        if n.funcspec: s = ' '.join(n.funcspec) + ' '
        if n.storage: s += ' '.join(n.storage) + ' '
        s += self._generate_type(n.type)
        return s

    def _generate_type(self, n, modifiers=[]):
        """ Recursive generation from a type node. n is the type node.
            modifiers collects the PtrDecl, ArrayDecl and FuncDecl modifiers
            encountered on the way down to a TypeDecl, to allow proper
            generation from it.
        """
        typ = type(n)
        #~ print(n, modifiers)

        if typ == c_ast.TypeDecl:
            s = ''
            if n.quals: s += ' '.join(n.quals) + ' '
            s += self.visit(n.type)

            nstr = n.declname if n.declname else ''
            # Resolve modifiers.
            # Wrap in parens to distinguish pointer to array and pointer to
            # function syntax.
            #
            for i, modifier in enumerate(modifiers):
                if isinstance(modifier, c_ast.ArrayDecl):
                    if (i != 0 and isinstance(modifiers[i - 1], c_ast.PtrDecl)):
                        nstr = '(' + nstr + ')'
                    nstr += '[' + self.visit(modifier.dim) + ']'
                elif isinstance(modifier, c_ast.FuncDecl):
                    if (i != 0 and isinstance(modifiers[i - 1], c_ast.PtrDecl)):
                        nstr = '(' + nstr + ')'
                    nstr += '(' + self.visit(modifier.args) + ')'
                elif isinstance(modifier, c_ast.PtrDecl):
                    if modifier.quals:
                        nstr = '* %s %s' % (' '.join(modifier.quals), nstr)
                    else:
                        nstr = '*' + nstr
            if nstr: s += ' ' + nstr
            return s
        elif typ == c_ast.Decl:
            return self._generate_decl(n.type)
        elif typ == c_ast.Typename:
            return self._generate_type(n.type)
        elif typ == c_ast.IdentifierType:
            return ' '.join(n.names) + ' '
        elif typ in (c_ast.ArrayDecl, c_ast.PtrDecl, c_ast.FuncDecl):
            return self._generate_type(n.type, modifiers + [n])
        else:
            return self.visit(n)

    def _parenthesize_if(self, n, condition):
        """ Visits 'n' and returns its string representation, parenthesized
            if the condition function applied to the node returns True.
        """
        s = self._visit_expr(n)
        if condition(n):
            return '(' + s + ')'
        else:
            return s

    def _parenthesize_unless_simple(self, n):
        """ Common use case for _parenthesize_if
        """
        return self._parenthesize_if(n, lambda d: not self._is_simple_node(d))

    def _is_simple_node(self, n):
        """ Returns True for nodes that are "simple" - i.e. nodes that always
            have higher precedence than operators.
        """
        return isinstance(n,(   c_ast.Constant, c_ast.ID, c_ast.ArrayRef,
                                c_ast.StructRef, c_ast.FuncCall))
PK�[�?�::plyparser.pynu�[���#-----------------------------------------------------------------
# plyparser.py
#
# PLYParser class and other utilites for simplifying programming
# parsers with PLY
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------


class Coord(object):
    """ Coordinates of a syntactic element. Consists of:
            - File name
            - Line number
            - (optional) column number, for the Lexer
    """
    __slots__ = ('file', 'line', 'column', '__weakref__')
    def __init__(self, file, line, column=None):
        self.file = file
        self.line = line
        self.column = column

    def __str__(self):
        str = "%s:%s" % (self.file, self.line)
        if self.column: str += ":%s" % self.column
        return str


class ParseError(Exception): pass


class PLYParser(object):
    def _create_opt_rule(self, rulename):
        """ Given a rule name, creates an optional ply.yacc rule
            for it. The name of the optional rule is
            <rulename>_opt
        """
        optname = rulename + '_opt'

        def optrule(self, p):
            p[0] = p[1]

        optrule.__doc__ = '%s : empty\n| %s' % (optname, rulename)
        optrule.__name__ = 'p_%s' % optname
        setattr(self.__class__, optrule.__name__, optrule)

    def _coord(self, lineno, column=None):
        return Coord(
                file=self.clex.filename,
                line=lineno,
                column=column)

    def _parse_error(self, msg, coord):
        raise ParseError("%s: %s" % (coord, msg))
PK�[���mNN	lextab.pynu�[���# lextab.py. This file automatically created by PLY (version 3.9). Don't edit!
_tabversion   = '3.8'
_lextokens    = set(('CONDOP', 'SIGNED', 'XOR', 'DO', 'LNOT', 'ELLIPSIS', 'LSHIFT', 'CASE', 'INT_CONST_DEC', 'PLUS', 'PPHASH', 'DOUBLE', 'AND', 'PLUSEQUAL', 'LBRACKET', 'ELSE', 'SEMI', 'NOT', 'CONTINUE', 'CONST', 'STRING_LITERAL', 'ENUM', 'MOD', 'INLINE', 'FOR', 'LONG', 'GT', 'STRUCT', 'COMMA', 'TYPEDEF', 'RSHIFT', 'VOID', 'RPAREN', 'TYPEID', 'ANDEQUAL', 'UNSIGNED', 'SIZEOF', 'CHAR_CONST', 'CHAR', 'FLOAT_CONST', 'INT', 'FLOAT', '_BOOL', '_COMPLEX', 'GE', 'OREQUAL', 'STATIC', 'RSHIFTEQUAL', 'EXTERN', 'TIMESEQUAL', 'ARROW', 'WCHAR_CONST', 'REGISTER', 'RBRACKET', 'DIVIDE', 'HEX_FLOAT_CONST', 'INT_CONST_OCT', 'SWITCH', 'INT_CONST_HEX', 'DEFAULT', 'LSHIFTEQUAL', 'EQUALS', 'BREAK', 'RESTRICT', 'VOLATILE', 'COLON', 'LPAREN', 'RETURN', 'LOR', 'OFFSETOF', 'RBRACE', 'LE', 'WHILE', 'ID', 'AUTO', 'SHORT', 'LBRACE', 'UNION', 'WSTRING_LITERAL', 'PERIOD', 'MODEQUAL', 'PLUSPLUS', 'MINUS', 'IF', 'LAND', 'MINUSEQUAL', 'EQ', 'LT', 'NE', 'OR', 'TIMES', 'MINUSMINUS', 'DIVEQUAL', 'GOTO', 'INT_CONST_BIN', 'XOREQUAL'))
_lexreflags   = 0
_lexliterals  = ''
_lexstateinfo = {'INITIAL': 'inclusive', 'ppline': 'exclusive', 'pppragma': 'exclusive'}
_lexstatere   = {'INITIAL': [('(?P<t_PPHASH>[ \\t]*\\#)|(?P<t_NEWLINE>\\n+)|(?P<t_LBRACE>\\{)|(?P<t_RBRACE>\\})|(?P<t_FLOAT_CONST>((((([0-9]*\\.[0-9]+)|([0-9]+\\.))([eE][-+]?[0-9]+)?)|([0-9]+([eE][-+]?[0-9]+)))[FfLl]?))|(?P<t_HEX_FLOAT_CONST>(0[xX]([0-9a-fA-F]+|((([0-9a-fA-F]+)?\\.[0-9a-fA-F]+)|([0-9a-fA-F]+\\.)))([pP][+-]?[0-9]+)[FfLl]?))|(?P<t_INT_CONST_HEX>0[xX][0-9a-fA-F]+(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_INT_CONST_BIN>0[bB][01]+(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_BAD_CONST_OCT>0[0-7]*[89])|(?P<t_INT_CONST_OCT>0[0-7]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_INT_CONST_DEC>(0(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|([1-9][0-9]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?))|(?P<t_CHAR_CONST>\'([^\'\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))\')|(?P<t_WCHAR_CONST>L\'([^\'\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))\')|(?P<t_UNMATCHED_QUOTE>(\'([^\'\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*\\n)|(\'([^\'\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*$))|(?P<t_BAD_CHAR_CONST>(\'([^\'\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))[^\'\n]+\')|(\'\')|(\'([\\\\][^a-zA-Z._~^!=&\\^\\-\\\\?\'"x0-7])[^\'\\n]*\'))|(?P<t_WSTRING_LITERAL>L"([^"\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_BAD_STRING_LITERAL>"([^"\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*([\\\\][^a-zA-Z._~^!=&\\^\\-\\\\?\'"x0-7])([^"\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ID>[a-zA-Z_$][0-9a-zA-Z_$]*)|(?P<t_STRING_LITERAL>"([^"\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ELLIPSIS>\\.\\.\\.)|(?P<t_LOR>\\|\\|)|(?P<t_PLUSPLUS>\\+\\+)|(?P<t_LSHIFTEQUAL><<=)|(?P<t_OREQUAL>\\|=)|(?P<t_PLUSEQUAL>\\+=)|(?P<t_RSHIFTEQUAL>>>=)|(?P<t_TIMESEQUAL>\\*=)|(?P<t_XOREQUAL>\\^=)|(?P<t_ANDEQUAL>&=)|(?P<t_ARROW>->)|(?P<t_CONDOP>\\?)|(?P<t_DIVEQUAL>/=)|(?P<t_EQ>==)|(?P<t_GE>>=)|(?P<t_LAND>&&)|(?P<t_LBRACKET>\\[)|(?P<t_LE><=)|(?P<t_LPAREN>\\()|(?P<t_LSHIFT><<)|(?P<t_MINUSEQUAL>-=)|(?P<t_MINUSMINUS>--)|(?P<t_MODEQUAL>%=)|(?P<t_NE>!=)|(?P<t_OR>\\|)|(?P<t_PERIOD>\\.)|(?P<t_PLUS>\\+)|(?P<t_RBRACKET>\\])|(?P<t_RPAREN>\\))|(?P<t_RSHIFT>>>)|(?P<t_TIMES>\\*)|(?P<t_XOR>\\^)|(?P<t_AND>&)|(?P<t_COLON>:)|(?P<t_COMMA>,)|(?P<t_DIVIDE>/)|(?P<t_EQUALS>=)|(?P<t_GT>>)|(?P<t_LNOT>!)|(?P<t_LT><)|(?P<t_MINUS>-)|(?P<t_MOD>%)|(?P<t_NOT>~)|(?P<t_SEMI>;)', [None, ('t_PPHASH', 'PPHASH'), ('t_NEWLINE', 'NEWLINE'), ('t_LBRACE', 'LBRACE'), ('t_RBRACE', 'RBRACE'), ('t_FLOAT_CONST', 'FLOAT_CONST'), None, None, None, None, None, None, None, None, None, ('t_HEX_FLOAT_CONST', 'HEX_FLOAT_CONST'), None, None, None, None, None, None, None, ('t_INT_CONST_HEX', 'INT_CONST_HEX'), None, None, None, None, None, None, None, ('t_INT_CONST_BIN', 'INT_CONST_BIN'), None, None, None, None, None, None, None, ('t_BAD_CONST_OCT', 'BAD_CONST_OCT'), ('t_INT_CONST_OCT', 'INT_CONST_OCT'), None, None, None, None, None, None, None, ('t_INT_CONST_DEC', 'INT_CONST_DEC'), None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, ('t_CHAR_CONST', 'CHAR_CONST'), None, None, None, None, None, None, ('t_WCHAR_CONST', 'WCHAR_CONST'), None, None, None, None, None, None, ('t_UNMATCHED_QUOTE', 'UNMATCHED_QUOTE'), None, None, None, None, None, None, None, None, None, None, None, None, None, None, ('t_BAD_CHAR_CONST', 'BAD_CHAR_CONST'), None, None, None, None, None, None, None, None, None, None, ('t_WSTRING_LITERAL', 'WSTRING_LITERAL'), None, None, None, None, None, None, ('t_BAD_STRING_LITERAL', 'BAD_STRING_LITERAL'), None, None, None, None, None, None, None, None, None, None, None, None, None, ('t_ID', 'ID'), (None, 'STRING_LITERAL'), None, None, None, None, None, None, (None, 'ELLIPSIS'), (None, 'LOR'), (None, 'PLUSPLUS'), (None, 'LSHIFTEQUAL'), (None, 'OREQUAL'), (None, 'PLUSEQUAL'), (None, 'RSHIFTEQUAL'), (None, 'TIMESEQUAL'), (None, 'XOREQUAL'), (None, 'ANDEQUAL'), (None, 'ARROW'), (None, 'CONDOP'), (None, 'DIVEQUAL'), (None, 'EQ'), (None, 'GE'), (None, 'LAND'), (None, 'LBRACKET'), (None, 'LE'), (None, 'LPAREN'), (None, 'LSHIFT'), (None, 'MINUSEQUAL'), (None, 'MINUSMINUS'), (None, 'MODEQUAL'), (None, 'NE'), (None, 'OR'), (None, 'PERIOD'), (None, 'PLUS'), (None, 'RBRACKET'), (None, 'RPAREN'), (None, 'RSHIFT'), (None, 'TIMES'), (None, 'XOR'), (None, 'AND'), (None, 'COLON'), (None, 'COMMA'), (None, 'DIVIDE'), (None, 'EQUALS'), (None, 'GT'), (None, 'LNOT'), (None, 'LT'), (None, 'MINUS'), (None, 'MOD'), (None, 'NOT'), (None, 'SEMI')])], 'ppline': [('(?P<t_ppline_FILENAME>"([^"\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ppline_LINE_NUMBER>(0(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|([1-9][0-9]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?))|(?P<t_ppline_NEWLINE>\\n)|(?P<t_ppline_PPLINE>line)', [None, ('t_ppline_FILENAME', 'FILENAME'), None, None, None, None, None, None, ('t_ppline_LINE_NUMBER', 'LINE_NUMBER'), None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, ('t_ppline_NEWLINE', 'NEWLINE'), ('t_ppline_PPLINE', 'PPLINE')])], 'pppragma': [('(?P<t_pppragma_NEWLINE>\\n)|(?P<t_pppragma_PPPRAGMA>pragma)|(?P<t_pppragma_STR>"([^"\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_pppragma_ID>[a-zA-Z_$][0-9a-zA-Z_$]*)', [None, ('t_pppragma_NEWLINE', 'NEWLINE'), ('t_pppragma_PPPRAGMA', 'PPPRAGMA'), ('t_pppragma_STR', 'STR'), None, None, None, None, None, None, ('t_pppragma_ID', 'ID')])]}
_lexstateignore = {'INITIAL': ' \t', 'ppline': ' \t', 'pppragma': ' \t<>.-{}();=+-*/$%@&^~!?:,0123456789'}
_lexstateerrorf = {'INITIAL': 't_error', 'ppline': 't_ppline_error', 'pppragma': 't_pppragma_error'}
_lexstateeoff = {}
PK�[�>�2UU'__pycache__/lextab.cpython-36.opt-1.pycnu�[���3

��]N��@s�dZeddddddddd	d
ddd
ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`f`�ZdaZdbZdcddddde�ZdfdgdhdfdidjfdkdMfdldGfdmd(fdgdgdgdgdgdgdgdgdgdnd8fdgdgdgdgdgdgdgdod;fdgdgdgdgdgdgdgdpd_fdgdgdgdgdgdgdgdqdrfdsd9fdgdgdgdgdgdgdgdtd	fdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdud&fdgdgdgdgdgdgdvd4fdgdgdgdgdgdgdwdxfdgdgdgdgdgdgdgdgdgdgdgdgdgdgdydzfdgdgdgdgdgdgdgdgdgdgd{dOfdgdgdgdgdgdgd|d}fdgdgdgdgdgdgdgdgdgdgdgdgdgd~dJfdgdfdgdgdgdgdgdgdgdfdgdEfdgdRfdgd=fdgd.fdgdfdgd0fdgd2fdgd`fdgd#fdgd3fdgdfdgd]fdgdWfdgd-fdgdUfdgdfdgdHfdgdCfdgdfdgdVfdgd\fdgdQfdgdYfdgdZfdgdPfdgd
fdgd6fdgd!fdgdfdgd[fdgdfdgd
fdgdBfdgdfdgd7fdgd>fdgdfdgdfdgdXfdgdSfdgdfdgdfdgdfg�fgddgd�d�fdgdgdgdgdgdgd�d�fdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgd�djfd�d�fgfgd�dgd�djfd�d�fd�d�fdgdgdgdgdgdgd�dJfgfgde�Zd�d�d�de�Zd�d�d�de�ZiZ	dgS)�z3.8ZCONDOPZSIGNEDZXORZDOZLNOT�ELLIPSISZLSHIFTZCASEZ
INT_CONST_DEC�PLUSZPPHASHZDOUBLEZAND�	PLUSEQUALZLBRACKET�ELSE�SEMIZNOTZCONTINUEZCONSTZSTRING_LITERALZENUMZMODZINLINEZFORZLONGZGTZSTRUCT�COMMAZTYPEDEFZRSHIFTZVOIDZRPARENZTYPEIDZANDEQUALZUNSIGNEDZSIZEOFZ
CHAR_CONSTZCHARZFLOAT_CONSTZINTZFLOATZ_BOOLZ_COMPLEXZGEZOREQUALZSTATICZRSHIFTEQUALZEXTERNZ
TIMESEQUALZARROWZWCHAR_CONSTZREGISTERZRBRACKETZDIVIDEZHEX_FLOAT_CONSTZ
INT_CONST_OCTZSWITCHZ
INT_CONST_HEXZDEFAULTZLSHIFTEQUALZEQUALSZBREAKZRESTRICTZVOLATILE�COLONZLPARENZRETURNZLORZOFFSETOF�RBRACEZLEZWHILEZIDZAUTOZSHORT�LBRACEZUNIONZWSTRING_LITERALZPERIODZMODEQUALZPLUSPLUS�MINUSZIFZLANDZ
MINUSEQUALZEQZLTZNE�ORZTIMESZ
MINUSMINUSZDIVEQUALZGOTOZ
INT_CONST_BINZXOREQUAL��Z	inclusiveZ	exclusive)ZINITIALZpplineZpppragmaa�	(?P<t_PPHASH>[ \t]*\#)|(?P<t_NEWLINE>\n+)|(?P<t_LBRACE>\{)|(?P<t_RBRACE>\})|(?P<t_FLOAT_CONST>((((([0-9]*\.[0-9]+)|([0-9]+\.))([eE][-+]?[0-9]+)?)|([0-9]+([eE][-+]?[0-9]+)))[FfLl]?))|(?P<t_HEX_FLOAT_CONST>(0[xX]([0-9a-fA-F]+|((([0-9a-fA-F]+)?\.[0-9a-fA-F]+)|([0-9a-fA-F]+\.)))([pP][+-]?[0-9]+)[FfLl]?))|(?P<t_INT_CONST_HEX>0[xX][0-9a-fA-F]+(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_INT_CONST_BIN>0[bB][01]+(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_BAD_CONST_OCT>0[0-7]*[89])|(?P<t_INT_CONST_OCT>0[0-7]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_INT_CONST_DEC>(0(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|([1-9][0-9]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?))|(?P<t_CHAR_CONST>'([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))')|(?P<t_WCHAR_CONST>L'([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))')|(?P<t_UNMATCHED_QUOTE>('([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*\n)|('([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*$))|(?P<t_BAD_CHAR_CONST>('([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))[^'
]+')|('')|('([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])[^'\n]*'))|(?P<t_WSTRING_LITERAL>L"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_BAD_STRING_LITERAL>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ID>[a-zA-Z_$][0-9a-zA-Z_$]*)|(?P<t_STRING_LITERAL>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ELLIPSIS>\.\.\.)|(?P<t_LOR>\|\|)|(?P<t_PLUSPLUS>\+\+)|(?P<t_LSHIFTEQUAL><<=)|(?P<t_OREQUAL>\|=)|(?P<t_PLUSEQUAL>\+=)|(?P<t_RSHIFTEQUAL>>>=)|(?P<t_TIMESEQUAL>\*=)|(?P<t_XOREQUAL>\^=)|(?P<t_ANDEQUAL>&=)|(?P<t_ARROW>->)|(?P<t_CONDOP>\?)|(?P<t_DIVEQUAL>/=)|(?P<t_EQ>==)|(?P<t_GE>>=)|(?P<t_LAND>&&)|(?P<t_LBRACKET>\[)|(?P<t_LE><=)|(?P<t_LPAREN>\()|(?P<t_LSHIFT><<)|(?P<t_MINUSEQUAL>-=)|(?P<t_MINUSMINUS>--)|(?P<t_MODEQUAL>%=)|(?P<t_NE>!=)|(?P<t_OR>\|)|(?P<t_PERIOD>\.)|(?P<t_PLUS>\+)|(?P<t_RBRACKET>\])|(?P<t_RPAREN>\))|(?P<t_RSHIFT>>>)|(?P<t_TIMES>\*)|(?P<t_XOR>\^)|(?P<t_AND>&)|(?P<t_COLON>:)|(?P<t_COMMA>,)|(?P<t_DIVIDE>/)|(?P<t_EQUALS>=)|(?P<t_GT>>)|(?P<t_LNOT>!)|(?P<t_LT><)|(?P<t_MINUS>-)|(?P<t_MOD>%)|(?P<t_NOT>~)|(?P<t_SEMI>;)NZt_PPHASHZ	t_NEWLINE�NEWLINEZt_LBRACEZt_RBRACEZ
t_FLOAT_CONSTZt_HEX_FLOAT_CONSTZt_INT_CONST_HEXZt_INT_CONST_BINZt_BAD_CONST_OCTZ
BAD_CONST_OCTZt_INT_CONST_OCTZt_INT_CONST_DECZt_CHAR_CONSTZ
t_WCHAR_CONSTZt_UNMATCHED_QUOTEZUNMATCHED_QUOTEZt_BAD_CHAR_CONSTZBAD_CHAR_CONSTZt_WSTRING_LITERALZt_BAD_STRING_LITERALZBAD_STRING_LITERALZt_IDaA(?P<t_ppline_FILENAME>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ppline_LINE_NUMBER>(0(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|([1-9][0-9]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?))|(?P<t_ppline_NEWLINE>\n)|(?P<t_ppline_PPLINE>line)Zt_ppline_FILENAMEZFILENAMEZt_ppline_LINE_NUMBERZLINE_NUMBERZt_ppline_NEWLINEZt_ppline_PPLINEZPPLINEz�(?P<t_pppragma_NEWLINE>\n)|(?P<t_pppragma_PPPRAGMA>pragma)|(?P<t_pppragma_STR>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_pppragma_ID>[a-zA-Z_$][0-9a-zA-Z_$]*)Zt_pppragma_NEWLINEZt_pppragma_PPPRAGMAZPPPRAGMAZt_pppragma_STRZSTRZ
t_pppragma_IDz 	z$ 	<>.-{}();=+-*/$%@&^~!?:,0123456789Zt_errorZt_ppline_errorZt_pppragma_error)
Z_tabversion�setZ
_lextokensZ_lexreflagsZ_lexliteralsZ
_lexstateinfoZ_lexstatereZ_lexstateignoreZ_lexstateerrorfZ
_lexstateeoff�rr�/usr/lib/python3.6/lextab.py�<module>s����PK�[ ��1��(__pycache__/_build_tables.cpython-36.pycnu�[���3

g�wUS�@svddlmZed�Zejedd��ddlZddgejdd�<ddlmZej	d	d
d	d�ddl
Z
ddlZddlZdS)�)�ASTCodeGeneratorz
_c_ast.cfgzc_ast.py�wN�.z..)�c_parserTF)Zlex_optimizeZ
yacc_debugZ
yacc_optimize)
Z_ast_genrZast_genZgenerate�open�sys�pathZ	pycparserrZCParserZlextabZyacctabZc_ast�r	r	�#/usr/lib/python3.6/_build_tables.py�<module>sPK�[��×*__pycache__/plyparser.cpython-36.opt-1.pycnu�[���3

g�wU:�@s4Gdd�de�ZGdd�de�ZGdd�de�ZdS)c@s&eZdZdZdZddd�Zd	d
�ZdS)
�Coordz� Coordinates of a syntactic element. Consists of:
            - File name
            - Line number
            - (optional) column number, for the Lexer
    �file�line�column�__weakref__NcCs||_||_||_dS)N)rrr)�selfrrr�r�/usr/lib/python3.6/plyparser.py�__init__szCoord.__init__cCs(d|j|jf}|jr$|d|j7}|S)Nz%s:%sz:%s)rrr)r�strrrr�__str__sz
Coord.__str__)rrrr)N)�__name__�
__module__�__qualname__�__doc__�	__slots__r	rrrrrrs
rc@seZdZdS)�
ParseErrorN)rr
rrrrrrsrc@s&eZdZdd�Zddd�Zdd�ZdS)	�	PLYParsercCs<|d}dd�}d||f|_d||_t|j|j|�dS)z� Given a rule name, creates an optional ply.yacc rule
            for it. The name of the optional rule is
            <rulename>_opt
        Z_optcSs|d|d<dS)N��r)r�prrr�optrule)sz+PLYParser._create_opt_rule.<locals>.optrulez%s : empty
| %szp_%sN)rr�setattr�	__class__)rZrulenameZoptnamerrrr�_create_opt_rule"s

zPLYParser._create_opt_ruleNcCst|jj||d�S)N)rrr)rZclex�filename)r�linenorrrr�_coord0szPLYParser._coordcCstd||f��dS)Nz%s: %s)r)r�msgZcoordrrr�_parse_error6szPLYParser._parse_error)N)rr
rrrrrrrrr!s
rN)�objectr�	Exceptionrrrrrr�<module>sPK�[A&[\�/�/(__pycache__/c_lexer.cpython-36.opt-1.pycnu�[���3

��]m8�@s<ddlZddlZddlmZddlmZGdd�de�ZdS)�N)�lex)�TOKENc<@sleZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Z�dZiZ
x<eD]4Zedkrree
d7<q\edkr�ee
d8<q\ee
ej�<q\We�d
ZdtZduZdvZdwZdxZdyZdzed{ed|Zd}eZeeeZeeeZd~ZdZd�Zd�Zd�Zd�ed�ed�ed�Z d�e d|Z!d�e!d�Z"d�e"Z#d�e!d�e!d�Z$d�e!d�ed�Z%d�e d|Z&d�e&d�Z'd�e'Z(d�e&d�ee&d�Z)d�Z*d�Z+d�e+d|e*d�e*d�Z,d�Z-d�ed�ed�ed�Z.d�ed�ed�e.d|e-d�Z/�dZ0d�d��Z1e2e'�d�d���Z3e2e�d�d���Z4d�d��Z5d�d��Z6d�Z7d�d��Z8d�d��Z9d�d��Z:d�Z;e2e'�d�d���Z<e2e�d�d���Z=d�d��Z>d�Z?d�d��Z@d�ZAd�ZBd�ZCd�ZDd�ZEd�ZFd�ZGd�ZHd�ZId�ZJd�ZKd�ZLd�ZMd�ZNd�ZOd�ZPd�ZQd�ZRd�ZSd�ZTd�ZUd�ZVd�ZWd�ZXd�ZYd�ZZd�Z[d�Z\d�Z]d�Z^d�Z_d�Z`d�Zad�Zbd�Zcd�Zdd�Zed�Zfd�Zgd�Zhd�Zid�Zjd�Zkd�Zle2d�d�d��Zme2d�d�d��Zne'Zoe2e,�d�d��Zpe2e/�d�d��Zqe2e�d�d��Zre2e�d�d��Zse2e�d�d���Zte2e�d�d���Zue2e�d�d���Zve2e"�d�d���Zwe2e#�d�d���Zxe2e$�d��d��Zye2e%��d�d��Zze2e(��d�d��Z{e2e)��d�d��Z|e2e��d�d��Z}�d	�d
�Z~�dS(�CLexera A lexer for the C language. After building it, set the
        input text with input(), and call token() to get new
        tokens.

        The public attribute filename can be set to an initial
        filaneme, but the lexer will update it upon #line
        directives.
    cCs@||_||_||_||_d|_d|_tjd�|_tjd�|_	dS)ab Create a new Lexer.

            error_func:
                An error function. Will be called with an error
                message, line and column as arguments, in case of
                an error during lexing.

            on_lbrace_func, on_rbrace_func:
                Called when an LBRACE or RBRACE is encountered
                (likely to push/pop type_lookup_func's scope)

            type_lookup_func:
                A type lookup function. Given a string, it must
                return True IFF this string is a name of a type
                that was defined with a typedef earlier.
        �Nz([ 	]*line\W)|([ 	]*\d+)z
[ 	]*pragma\W)
�
error_func�on_lbrace_func�on_rbrace_func�type_lookup_func�filename�
last_token�re�compile�line_pattern�pragma_pattern)�selfrrrr	�r�/usr/lib/python3.6/c_lexer.py�__init__szCLexer.__init__cKstjfd|i|��|_dS)z� Builds the lexer from the specification. Must be
            called after the lexer object is created.

            This method exists separately, because the PLY
            manual warns against calling lex.lex inside
            __init__
        �objectN)r�lexer)r�kwargsrrr�build:szCLexer.buildcCsd|j_dS)z? Resets the internal line number counter of the lexer.
        �N)r�lineno)rrrr�reset_linenoDszCLexer.reset_linenocCs|jj|�dS)N)r�input)r�textrrrrIszCLexer.inputcCs|jj�|_|jS)N)r�tokenr)rrrrrLszCLexer.tokencCs|jjjdd|j�}|j|S)z3 Find the column of the token in its line.
        �
r)r�lexdata�rfind�lexpos)rrZlast_crrrr�find_tok_columnPszCLexer.find_tok_columncCs0|j|�}|j||d|d�|jjd�dS)Nrr)�_make_tok_locationrr�skip)r�msgr�locationrrr�_error[s
z
CLexer._errorcCs|j|j|�fS)N)rr")rrrrrr#`szCLexer._make_tok_location�_BOOL�_COMPLEX�AUTO�BREAK�CASE�CHAR�CONST�CONTINUE�DEFAULT�DO�DOUBLE�ELSE�ENUM�EXTERN�FLOAT�FOR�GOTO�IF�INLINE�INT�LONG�REGISTER�OFFSETOF�RESTRICT�RETURN�SHORT�SIGNED�SIZEOF�STATIC�STRUCT�SWITCH�TYPEDEF�UNION�UNSIGNED�VOID�VOLATILE�WHILEZ_BoolZ_Complex�ID�TYPEID�
INT_CONST_DEC�
INT_CONST_OCT�
INT_CONST_HEX�
INT_CONST_BIN�FLOAT_CONST�HEX_FLOAT_CONST�
CHAR_CONST�WCHAR_CONST�STRING_LITERAL�WSTRING_LITERAL�PLUS�MINUS�TIMES�DIVIDE�MOD�OR�AND�NOT�XOR�LSHIFT�RSHIFT�LOR�LAND�LNOT�LT�LE�GT�GE�EQ�NE�EQUALS�
TIMESEQUAL�DIVEQUAL�MODEQUAL�	PLUSEQUAL�
MINUSEQUAL�LSHIFTEQUAL�RSHIFTEQUAL�ANDEQUAL�XOREQUAL�OREQUAL�PLUSPLUS�
MINUSMINUS�ARROW�CONDOP�LPAREN�RPAREN�LBRACKET�RBRACKET�LBRACE�RBRACE�COMMA�PERIOD�SEMI�COLON�ELLIPSIS�PPHASHz[a-zA-Z_$][0-9a-zA-Z_$]*z0[xX]z[0-9a-fA-F]+z0[bB]z[01]+zD(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?z(0z)|([1-9][0-9]*�)z0[0-7]*z0[0-7]*[89]z([a-zA-Z._~!=&\^\-\\?'"])z(\d+)z(x[0-9a-fA-F]+)z#([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])z(\\(�|z))z
([^'\\\n]|�'�Lz('z*\n)|('z*$)z[^'
]+')|('')|('z	[^'\n]*')z
([^"\\\n]|�"z*"�*z([eE][-+]?[0-9]+)z([0-9]*\.[0-9]+)|([0-9]+\.)z((((z
?)|([0-9]+z
))[FfLl]?)z([pP][+-]?[0-9]+)z(((z)?\.z)|(z\.))�(z[FfLl]?)�ppline�	exclusive�pppragmacCsf|jj|jj|jjd�r2|jjd�d|_|_n0|jj|jj|jjd�rX|jjd�n
d|_	|SdS)z[ \t]*\#)�posr�Nr�r�)
r�matchrrr!�begin�pp_line�pp_filenamer�type)r�trrr�t_PPHASH�szCLexer.t_PPHASHcCs0|jdkr|jd|�n|jjd�jd�|_dS)Nz$filename before line number in #liner�)r�r'�value�lstrip�rstripr�)rr�rrr�t_ppline_FILENAMEs
zCLexer.t_ppline_FILENAMEcCs|jdkr|j|_ndS)N)r�r�)rr�rrr�t_ppline_LINE_NUMBER
s

zCLexer.t_ppline_LINE_NUMBERcCsH|jdkr|jd|�n t|j�|j_|jdk	r8|j|_|jjd�dS)z\nNzline number missing in #line�INITIAL)r�r'�intrrr�r
r�)rr�rrr�t_ppline_NEWLINEs

zCLexer.t_ppline_NEWLINEcCsdS)�lineNr)rr�rrr�t_ppline_PPLINE szCLexer.t_ppline_PPLINEz 	cCs|jd|�dS)Nzinvalid #line directive)r')rr�rrr�t_ppline_error&szCLexer.t_ppline_errorcCs |jjd7_|jjd�dS)z\nrr�N)rrr�)rr�rrr�t_pppragma_NEWLINE,szCLexer.t_pppragma_NEWLINEcCsdS)ZpragmaNr)rr�rrr�t_pppragma_PPPRAGMA1szCLexer.t_pppragma_PPPRAGMAz$ 	<>.-{}();=+-*/$%@&^~!?:,0123456789cCsdS)Nr)rr�rrr�t_pppragma_STR7szCLexer.t_pppragma_STRcCsdS)Nr)rr�rrr�
t_pppragma_ID:szCLexer.t_pppragma_IDcCs|jd|�dS)Nzinvalid #pragma directive)r')rr�rrr�t_pppragma_error=szCLexer.t_pppragma_errorcCs|jj|jjd�7_dS)z\n+rN)rrr��count)rr�rrr�	t_NEWLINEFszCLexer.t_NEWLINEz\+�-z\*�/�%z\|�&�~z\^z<<z>>z\|\|z&&�!�<�>z<=z>=z==z!=�=z\*=z/=z%=z\+=z-=z<<=z>>=z&=z\|=z\^=z\+\+z--z->z\?z\(z\)z\[z\]�,z\.�;�:z\.\.\.z\{cCs|j�|S)N)r)rr�rrr�t_LBRACE�szCLexer.t_LBRACEz\}cCs|j�|S)N)r)rr�rrr�t_RBRACE�szCLexer.t_RBRACEcCs|S)Nr)rr�rrr�
t_FLOAT_CONST�szCLexer.t_FLOAT_CONSTcCs|S)Nr)rr�rrr�t_HEX_FLOAT_CONST�szCLexer.t_HEX_FLOAT_CONSTcCs|S)Nr)rr�rrr�t_INT_CONST_HEX�szCLexer.t_INT_CONST_HEXcCs|S)Nr)rr�rrr�t_INT_CONST_BIN�szCLexer.t_INT_CONST_BINcCsd}|j||�dS)NzInvalid octal constant)r')rr�r%rrr�t_BAD_CONST_OCT�szCLexer.t_BAD_CONST_OCTcCs|S)Nr)rr�rrr�t_INT_CONST_OCT�szCLexer.t_INT_CONST_OCTcCs|S)Nr)rr�rrr�t_INT_CONST_DEC�szCLexer.t_INT_CONST_DECcCs|S)Nr)rr�rrr�t_CHAR_CONST�szCLexer.t_CHAR_CONSTcCs|S)Nr)rr�rrr�
t_WCHAR_CONST�szCLexer.t_WCHAR_CONSTcCsd}|j||�dS)NzUnmatched ')r')rr�r%rrr�t_UNMATCHED_QUOTE�szCLexer.t_UNMATCHED_QUOTEcCsd|j}|j||�dS)NzInvalid char constant %s)r�r')rr�r%rrr�t_BAD_CHAR_CONST�s
zCLexer.t_BAD_CHAR_CONSTcCs|S)Nr)rr�rrr�t_WSTRING_LITERAL�szCLexer.t_WSTRING_LITERALcCsd}|j||�dS)Nz#String contains invalid escape code)r')rr�r%rrr�t_BAD_STRING_LITERAL�szCLexer.t_BAD_STRING_LITERALcCs2|jj|jd�|_|jdkr.|j|j�r.d|_|S)NrMrN)�keyword_map�getr�r�r	)rr�rrr�t_ID�szCLexer.t_IDcCs"dt|jd�}|j||�dS)NzIllegal character %sr)�reprr�r')rr�r%rrr�t_error�szCLexer.t_errorN)%r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrL);rMrNrOrPrQrRrSrTrUrVrWrXrYrZr[r\r]r^r_r`rarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzr{r|r}r~rr�r�r�r�r�r�r�r��r�r��r�r�)r�r�)�__name__�
__module__�__qualname__�__doc__rrrrrr"r'r#�keywordsr��keyword�lower�tokensZ
identifierZ
hex_prefixZ
hex_digitsZ
bin_prefixZ
bin_digitsZinteger_suffix_optZdecimal_constantZoctal_constantZhex_constantZbin_constantZbad_octal_constantZ
simple_escapeZdecimal_escapeZ
hex_escapeZ
bad_escapeZescape_sequenceZcconst_charZ
char_constZwchar_constZunmatched_quoteZbad_char_constZstring_charZstring_literalZwstring_literalZbad_string_literalZ
exponent_partZfractional_constantZfloating_constantZbinary_exponent_partZhex_fractional_constantZhex_floating_constantZstatesr�rr�r�r�r�Zt_ppline_ignorer�r�r�Zt_pppragma_ignorer�r�r�Zt_ignorer�Zt_PLUSZt_MINUSZt_TIMESZt_DIVIDEZt_MODZt_ORZt_ANDZt_NOTZt_XORZt_LSHIFTZt_RSHIFTZt_LORZt_LANDZt_LNOTZt_LTZt_GTZt_LEZt_GEZt_EQZt_NEZt_EQUALSZt_TIMESEQUALZ
t_DIVEQUALZ
t_MODEQUALZt_PLUSEQUALZt_MINUSEQUALZ
t_LSHIFTEQUALZ
t_RSHIFTEQUALZ
t_ANDEQUALZ	t_OREQUALZ
t_XOREQUALZ
t_PLUSPLUSZt_MINUSMINUSZt_ARROWZt_CONDOPZt_LPARENZt_RPARENZ
t_LBRACKETZ
t_RBRACKETZt_COMMAZt_PERIODZt_SEMIZt_COLONZ
t_ELLIPSISr�r�Zt_STRING_LITERALr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrs@!



		$	
r)r�sysZplyrZply.lexrrrrrrr�<module>	sPK�[�$V0�!�!)__pycache__/_ast_gen.cpython-36.opt-1.pycnu�[���3

g�wU�!�@shddlZddlmZGdd�de�ZGdd�de�ZdZdZed	krdddl	Z	ed
�Z
e
jedd��dS)
�N)�Templatec@s(eZdZd	dd�Zd
dd�Zdd�ZdS)�ASTCodeGenerator�
_c_ast.cfgcCs ||_dd�|j|�D�|_dS)zN Initialize the code generator from a configuration
            file.
        cSsg|]\}}t||��qS�)�NodeCfg)�.0�name�contentsrr�/usr/lib/python3.6/_ast_gen.py�
<listcomp>sz-ASTCodeGenerator.__init__.<locals>.<listcomp>N)�cfg_filename�
parse_cfgfile�node_cfg)�selfrrrr
�__init__szASTCodeGenerator.__init__NcCsHtt�j|jd�}|t7}x|jD]}||j�d7}q"W|j|�dS)z< Generates the code into file, an open file buffer.
        )rz

N)r�_PROLOGUE_COMMENTZ
substituter�_PROLOGUE_CODEr�generate_source�write)r�file�srcrrrr
�generates
zASTCodeGenerator.generatec
cs�t|d���}x�|D]�}|j�}|s|jd�r0q|jd�}|jd�}|jd�}|dksf||ksf||krvtd||f��|d|�}||d|�}|r�d	d
�|jd�D�ng}	||	fVqWWdQRXdS)ze Parse the configuration file and yield pairs of
            (name, contents) for each node.
        �r�#�:�[�]�zInvalid line in %s:
%s
NcSsg|]}|j��qSr)�strip)r�vrrr
r7sz2ASTCodeGenerator.parse_cfgfile.<locals>.<listcomp>�,)�openr�
startswith�find�RuntimeError�split)
r�filename�f�lineZcolon_iZ
lbracket_iZ
rbracket_ir�valZvallistrrr
r
&s



zASTCodeGenerator.parse_cfgfile)r)N)�__name__�
__module__�__qualname__rrr
rrrr
rs

rc@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
rz� Node configuration.

        name: node name
        contents: a list of contents - attributes and child nodes
        See comment at the top of the configuration file for details.
    cCs�||_g|_g|_g|_g|_x^|D]V}|jd�}|jj|�|jd�rV|jj|�q$|jd�rn|jj|�q$|jj|�q$WdS)N�*z**)r�all_entries�attr�child�	seq_child�rstrip�append�endswith)rrr	�entryZclean_entryrrr
rBs



zNodeCfg.__init__cCs,|j�}|d|j�7}|d|j�7}|S)N�
)�	_gen_init�
_gen_children�_gen_attr_names)rrrrr
rTszNodeCfg.generate_sourcecCs�d|j}|jrDdj|j�}djdd�|jD��}|d7}d|}nd}d}|d	|7}|d
|7}x$|jdgD]}|d||f7}qrW|S)
Nzclass %s(Node):
z, css|]}dj|�VqdS)z'{0}'N)�format)r�errr
�	<genexpr>_sz$NodeCfg._gen_init.<locals>.<genexpr>z, 'coord', '__weakref__'z(self, %s, coord=None)z'coord', '__weakref__'z(self, coord=None)z    __slots__ = (%s)
z    def __init__%s:
Zcoordz        self.%s = %s
)rr.�join)rr�args�slotsZarglistrrrr
r7Zs

zNodeCfg._gen_initcCsld}|jr`|d7}x |jD]}|d	t|d�7}qWx |jD]}|dt|d�7}q<W|d7}n|d7}|S)
Nz    def children(self):
z        nodelist = []
z&        if self.%(child)s is not None:z0 nodelist.append(("%(child)s", self.%(child)s))
)r0zu        for i, child in enumerate(self.%(child)s or []):
            nodelist.append(("%(child)s[%%d]" %% i, child))
z        return tuple(nodelist)
z        return ()
zV        if self.%(child)s is not None: nodelist.append(("%(child)s", self.%(child)s))
)r.r0�dictr1)rrr0r1rrr
r8ns
zNodeCfg._gen_childrencCs"ddjdd�|jD��d}|S)Nz    attr_names = (�css|]}d|VqdS)z%r, Nr)rZnmrrr
r<�sz*NodeCfg._gen_attr_names.<locals>.<genexpr>�))r=r/)rrrrr
r9�szNodeCfg._gen_attr_namesN)	r*r+r,�__doc__rrr7r8r9rrrr
r;sra�#-----------------------------------------------------------------
# ** ATTENTION **
# This code was automatically generated from the file:
# $cfg_filename
#
# Do not modify it directly. Modify the configuration file and
# run the generator again.
# ** ** *** ** **
#
# pycparser: c_ast.py
#
# AST Node classes.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------

a�

import sys


class Node(object):
    __slots__ = ()
    """ Abstract base class for AST nodes.
    """
    def children(self):
        """ A sequence of all children that are Nodes
        """
        pass

    def show(self, buf=sys.stdout, offset=0, attrnames=False, nodenames=False, showcoord=False, _my_node_name=None):
        """ Pretty print the Node and all its attributes and
            children (recursively) to a buffer.

            buf:
                Open IO buffer into which the Node is printed.

            offset:
                Initial offset (amount of leading spaces)

            attrnames:
                True if you want to see the attribute names in
                name=value pairs. False to only see the values.

            nodenames:
                True if you want to see the actual node names
                within their parents.

            showcoord:
                Do you want the coordinates of each Node to be
                displayed.
        """
        lead = ' ' * offset
        if nodenames and _my_node_name is not None:
            buf.write(lead + self.__class__.__name__+ ' <' + _my_node_name + '>: ')
        else:
            buf.write(lead + self.__class__.__name__+ ': ')

        if self.attr_names:
            if attrnames:
                nvlist = [(n, getattr(self,n)) for n in self.attr_names]
                attrstr = ', '.join('%s=%s' % nv for nv in nvlist)
            else:
                vlist = [getattr(self, n) for n in self.attr_names]
                attrstr = ', '.join('%s' % v for v in vlist)
            buf.write(attrstr)

        if showcoord:
            buf.write(' (at %s)' % self.coord)
        buf.write('\n')

        for (child_name, child) in self.children():
            child.show(
                buf,
                offset=offset + 2,
                attrnames=attrnames,
                nodenames=nodenames,
                showcoord=showcoord,
                _my_node_name=child_name)


class NodeVisitor(object):
    """ A base NodeVisitor class for visiting c_ast nodes.
        Subclass it and define your own visit_XXX methods, where
        XXX is the class name you want to visit with these
        methods.

        For example:

        class ConstantVisitor(NodeVisitor):
            def __init__(self):
                self.values = []

            def visit_Constant(self, node):
                self.values.append(node.value)

        Creates a list of values of all the constant nodes
        encountered below the given node. To use it:

        cv = ConstantVisitor()
        cv.visit(node)

        Notes:

        *   generic_visit() will be called for AST nodes for which
            no visit_XXX method was defined.
        *   The children of nodes for which a visit_XXX was
            defined will not be visited - if you need this, call
            generic_visit() on the node.
            You can use:
                NodeVisitor.generic_visit(self, node)
        *   Modeled after Python's own AST visiting facilities
            (the ast module of Python 3.0)
    """
    def visit(self, node):
        """ Visit a node.
        """
        method = 'visit_' + node.__class__.__name__
        visitor = getattr(self, method, self.generic_visit)
        return visitor(node)

    def generic_visit(self, node):
        """ Called if no explicit visitor function exists for a
            node. Implements preorder visiting of the node.
        """
        for c_name, c in node.children():
            self.visit(c)


�__main__z
_c_ast.cfgzc_ast.py�w)
�pprint�stringr�objectrrrrr*�sysZast_genrr!rrrr
�<module>
s*brPK�[�$V0�!�!#__pycache__/_ast_gen.cpython-36.pycnu�[���3

g�wU�!�@shddlZddlmZGdd�de�ZGdd�de�ZdZdZed	krdddl	Z	ed
�Z
e
jedd��dS)
�N)�Templatec@s(eZdZd	dd�Zd
dd�Zdd�ZdS)�ASTCodeGenerator�
_c_ast.cfgcCs ||_dd�|j|�D�|_dS)zN Initialize the code generator from a configuration
            file.
        cSsg|]\}}t||��qS�)�NodeCfg)�.0�name�contentsrr�/usr/lib/python3.6/_ast_gen.py�
<listcomp>sz-ASTCodeGenerator.__init__.<locals>.<listcomp>N)�cfg_filename�
parse_cfgfile�node_cfg)�selfrrrr
�__init__szASTCodeGenerator.__init__NcCsHtt�j|jd�}|t7}x|jD]}||j�d7}q"W|j|�dS)z< Generates the code into file, an open file buffer.
        )rz

N)r�_PROLOGUE_COMMENTZ
substituter�_PROLOGUE_CODEr�generate_source�write)r�file�srcrrrr
�generates
zASTCodeGenerator.generatec
cs�t|d���}x�|D]�}|j�}|s|jd�r0q|jd�}|jd�}|jd�}|dksf||ksf||krvtd||f��|d|�}||d|�}|r�d	d
�|jd�D�ng}	||	fVqWWdQRXdS)ze Parse the configuration file and yield pairs of
            (name, contents) for each node.
        �r�#�:�[�]�zInvalid line in %s:
%s
NcSsg|]}|j��qSr)�strip)r�vrrr
r7sz2ASTCodeGenerator.parse_cfgfile.<locals>.<listcomp>�,)�openr�
startswith�find�RuntimeError�split)
r�filename�f�lineZcolon_iZ
lbracket_iZ
rbracket_ir�valZvallistrrr
r
&s



zASTCodeGenerator.parse_cfgfile)r)N)�__name__�
__module__�__qualname__rrr
rrrr
rs

rc@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
rz� Node configuration.

        name: node name
        contents: a list of contents - attributes and child nodes
        See comment at the top of the configuration file for details.
    cCs�||_g|_g|_g|_g|_x^|D]V}|jd�}|jj|�|jd�rV|jj|�q$|jd�rn|jj|�q$|jj|�q$WdS)N�*z**)r�all_entries�attr�child�	seq_child�rstrip�append�endswith)rrr	�entryZclean_entryrrr
rBs



zNodeCfg.__init__cCs,|j�}|d|j�7}|d|j�7}|S)N�
)�	_gen_init�
_gen_children�_gen_attr_names)rrrrr
rTszNodeCfg.generate_sourcecCs�d|j}|jrDdj|j�}djdd�|jD��}|d7}d|}nd}d}|d	|7}|d
|7}x$|jdgD]}|d||f7}qrW|S)
Nzclass %s(Node):
z, css|]}dj|�VqdS)z'{0}'N)�format)r�errr
�	<genexpr>_sz$NodeCfg._gen_init.<locals>.<genexpr>z, 'coord', '__weakref__'z(self, %s, coord=None)z'coord', '__weakref__'z(self, coord=None)z    __slots__ = (%s)
z    def __init__%s:
Zcoordz        self.%s = %s
)rr.�join)rr�args�slotsZarglistrrrr
r7Zs

zNodeCfg._gen_initcCsld}|jr`|d7}x |jD]}|d	t|d�7}qWx |jD]}|dt|d�7}q<W|d7}n|d7}|S)
Nz    def children(self):
z        nodelist = []
z&        if self.%(child)s is not None:z0 nodelist.append(("%(child)s", self.%(child)s))
)r0zu        for i, child in enumerate(self.%(child)s or []):
            nodelist.append(("%(child)s[%%d]" %% i, child))
z        return tuple(nodelist)
z        return ()
zV        if self.%(child)s is not None: nodelist.append(("%(child)s", self.%(child)s))
)r.r0�dictr1)rrr0r1rrr
r8ns
zNodeCfg._gen_childrencCs"ddjdd�|jD��d}|S)Nz    attr_names = (�css|]}d|VqdS)z%r, Nr)rZnmrrr
r<�sz*NodeCfg._gen_attr_names.<locals>.<genexpr>�))r=r/)rrrrr
r9�szNodeCfg._gen_attr_namesN)	r*r+r,�__doc__rrr7r8r9rrrr
r;sra�#-----------------------------------------------------------------
# ** ATTENTION **
# This code was automatically generated from the file:
# $cfg_filename
#
# Do not modify it directly. Modify the configuration file and
# run the generator again.
# ** ** *** ** **
#
# pycparser: c_ast.py
#
# AST Node classes.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------

a�

import sys


class Node(object):
    __slots__ = ()
    """ Abstract base class for AST nodes.
    """
    def children(self):
        """ A sequence of all children that are Nodes
        """
        pass

    def show(self, buf=sys.stdout, offset=0, attrnames=False, nodenames=False, showcoord=False, _my_node_name=None):
        """ Pretty print the Node and all its attributes and
            children (recursively) to a buffer.

            buf:
                Open IO buffer into which the Node is printed.

            offset:
                Initial offset (amount of leading spaces)

            attrnames:
                True if you want to see the attribute names in
                name=value pairs. False to only see the values.

            nodenames:
                True if you want to see the actual node names
                within their parents.

            showcoord:
                Do you want the coordinates of each Node to be
                displayed.
        """
        lead = ' ' * offset
        if nodenames and _my_node_name is not None:
            buf.write(lead + self.__class__.__name__+ ' <' + _my_node_name + '>: ')
        else:
            buf.write(lead + self.__class__.__name__+ ': ')

        if self.attr_names:
            if attrnames:
                nvlist = [(n, getattr(self,n)) for n in self.attr_names]
                attrstr = ', '.join('%s=%s' % nv for nv in nvlist)
            else:
                vlist = [getattr(self, n) for n in self.attr_names]
                attrstr = ', '.join('%s' % v for v in vlist)
            buf.write(attrstr)

        if showcoord:
            buf.write(' (at %s)' % self.coord)
        buf.write('\n')

        for (child_name, child) in self.children():
            child.show(
                buf,
                offset=offset + 2,
                attrnames=attrnames,
                nodenames=nodenames,
                showcoord=showcoord,
                _my_node_name=child_name)


class NodeVisitor(object):
    """ A base NodeVisitor class for visiting c_ast nodes.
        Subclass it and define your own visit_XXX methods, where
        XXX is the class name you want to visit with these
        methods.

        For example:

        class ConstantVisitor(NodeVisitor):
            def __init__(self):
                self.values = []

            def visit_Constant(self, node):
                self.values.append(node.value)

        Creates a list of values of all the constant nodes
        encountered below the given node. To use it:

        cv = ConstantVisitor()
        cv.visit(node)

        Notes:

        *   generic_visit() will be called for AST nodes for which
            no visit_XXX method was defined.
        *   The children of nodes for which a visit_XXX was
            defined will not be visited - if you need this, call
            generic_visit() on the node.
            You can use:
                NodeVisitor.generic_visit(self, node)
        *   Modeled after Python's own AST visiting facilities
            (the ast module of Python 3.0)
    """
    def visit(self, node):
        """ Visit a node.
        """
        method = 'visit_' + node.__class__.__name__
        visitor = getattr(self, method, self.generic_visit)
        return visitor(node)

    def generic_visit(self, node):
        """ Called if no explicit visitor function exists for a
            node. Implements preorder visiting of the node.
        """
        for c_name, c in node.children():
            self.visit(c)


�__main__z
_c_ast.cfgzc_ast.py�w)
�pprint�stringr�objectrrrrr*�sysZast_genrr!rrrr
�<module>
s*brPK�[�������(__pycache__/yacctab.cpython-36.opt-1.pycnu�[���3

��]U��@svAdZdZdZddddddd	d
ddd
dddddgddddddddddddddd d!gfddddd	d
dd"d#dd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
d8d9d:d;d<d=d>d?d@ddAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQddRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdnd!dodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g�dddddddddddVdwdddddYd9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dddKd��dd'd(dHdJ�dddWdXd
�dd"�d�d�d�dd0d1d[�d�d�d	�d
dOdddK�d�ddx�d�d
�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�dIdb�d�dd\dddd$ddm�d�dd2d3d4d5d6d7d�d��ddd�d�d�duddL�d�d�d �d!�d"�d#�d$�d%�d&�d'�d�d(�d)d��d*�d+�d,d dP�d-�d.d.d/�d/dUdMd,d-dNd!dnd$dd�ddtdd�dq�d0d�dsdyd�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8�d9�d:�d;�d<�d=�d>dc�d?�d@�dA�dB�dC�dD�dEdQ�dF�dG�dHd�dIdvd�ddpdr�dJ�dK�dL�dMdd�dNdZ�dO�dP�dQdddd�dR�dS�dT�dU�dV�dW�dX�dYdd�dZ�d[�d\dddo�d]g�fddddd	d
ddd
dddddgddddddddddddd d!gfddddd	d
dd"d�dd%d&d'd(d)�d^d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d�d�d_�d`d
d8d;d�d�d�dd�d�dCdDdEdFdGdHdIdJdKdLdMdN�d
dOdPdQddRdT�da�dO�dP�db�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@dnd!�dH�dQdodpdqdsdtdudvdwdxdydzd{d|�dfd��dSd�d�d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d>�dY�d�d�d�dm�dn�do�dp�dq�dr�ds�dt�du�dvd��dwd�dxd��dyd�d�d�d�dd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d�d�d�d�dАd��d�d�d�d�d�d�dِd��d��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�d*d*dddddd*dd*dwddddd*d9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dMdPddRdd*d*d*d\d\ddd\d
�dd"�d�d�d�dd0d1d[�d�d�d[�d	�d
dOdd}d*d*d\d*d*�dhd\d\d\d\d\�di�dj�dg�dk�dld�dhd\d\dd1�dd\�d[�d[d*ddd}dm�d�dd2d3d4d5d6d7d\d}d�d\dd\dzd{d|d}�df�d�d~�d�d�d��d�d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d�d�d\d\d\d#d\dd\d\�dh�dhd\d\d\�d,�d[d d\dPd\dMd,d-dNd!dnd}d}dtd\d\d\d\d\dq�d0dsd\ddg�dD�dEdQ�dFd*d\�dHd}�dId\dpdrd\d\d\dd\d\d#�dQd}d}d}d\d\�dT�dU�dVd\dd}d\�d[�d\d}d}do�d]g�fddddd	d
dd"dd$�dd%d&d'd(d)d*�d^d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
d8d;d�d�d�d@dd�dAdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQddRdT�da�dOdU�dP�db�dcdY�d�dB�dN�dC�d*�d+�d�dd[d\�dd�ded]d^d_d`�d�dadbdcdddedfdgdhdidj�d�d�d�d?�d!�d@dmdnd!dodpdqdsdtdudvdwdxdydzd{d|d}�df�d��d��d�d��d
d�dd�d�d�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�dd�d��d�d�d�d)d�d��dm�dn�do�dp�dr�ds�dt�dud�d�d�d�dxd��dyd�d�d�d�dd�d�d�d��dz�d{�d|�d}d�d�d�d�d�d�d�d�dŐd~dƐd��d��d�d�d�d�d�d�d�d�d�d�dАd��d�d�d�dԐd�d�d�dِd�d�dېd��d��d��d��d�d�d�d�d�d�d�d�d�d�d�d�dRd�d�d�d�dWd�d�d�d�d�d�d��g�d^�d^dddddd�dd��d^dwdddddY�d^d9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<d�dad�d��d*�d*�dddd�d
�dd"�d�d�d�dd0d1d[�d�d�d	�d
dOd�d*�da�da�d*�d�d^d��dh�d�d�d�d�d�d*�di�dj�dg�dd��dk�dl�d�d�d�d�d	�dd�d�d��dd��d�d�dd�d�dh�d*�d*dd1�d�dd\�dadd�d*dm�d�dd2d3d4d5d6d7d��d�dz�d|�d}�d*d��d*d�d�d �d!�d"�d*dzd{d|d}�df�d�d~�d�d�d��d��d*�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d*�d*�d#�d$�d*�d*�d*�d��d)d�d#�d*d�d�dh�dh�d*�d*�d*�d+�d,d �ddP�ddMd,d-dNd!dn�d*�d*dt�d*�d*�d*�d*�d*dq�d0ds�d9�d:�d;�d<�d=�d�d>�d��d�ddg�d?�d@�dA�dB�dC�dD�dEdQ�dF�d^�d�dH�d*�dI�d��d*dpdr�d�dJ�dK�d*�dd�d*d#�dNdZ�dQ�d*�d*�d*�d*�d*�dT�dU�dV�d*�dXd�dY�d*�d*�dZ�d[�d\�d*�d*do�d]�gfddddd	d
dd"dd%d&d'd(d)�d^d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
d8d�d�d�dd�dCdDdEdFdGdHdIdJdKdLdMdNdOdPdQddR�da�dO�dP�db�dcdWdXdY�d�dB�dNdZ�dC�d*�d+�d�dd[d\�dd�ded]d^d_d`dadbdcdddedfdgdhdidj�d�d�d�d?�d!�d@d!dodpdqdsdtdudvdwdxdydzd{d|d}�dfd�d�d�d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�dd�d�d��dd�d�d��dd��d�d)d�d��dm�dn�do�dp�dr�ds�dt�dud�d�dxd��dyd�d�d�d�dd�d�d�d��dz�d{�d|�d}d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dŐd~dƐd��d�d�d�d�d�dАd��d�d�d�d�d�d�dِd�d�dېd��d�dܐd�dݐd��d�d�d�d�d�d�d�d�d�d�dRd�d�d�d�dWd�d�d�d�d�d�d��gd,d,dddddd,ddwddddd,d9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd,d,�dc�dddd
�dd"�d�d�dd,d0d1d[�d�d�d	�d
dOd�dd,�dd,d,�dh�d�di�d�d�d�dd��d�d�di�dj�dg�dd��dk�dl�d�d�d�d�dd�d�d��dd��d�d�dd�d�dh�dr�dsdd1d\d,dd�ddm�d�dd2d3d4d5d6d7d��d�d�dd�ddzd{d|d}�df�d�d~�d�d�d��d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d#�d$�d%�d�d&�d'�d�d�d(�dd,�d)d�d#�dd�d�dh�dh�d�d�d,d �ddP�ddMd,d-dNd!dn�d�ddt�d�d�d�d�ddq�d0dsd�d�d��di�di�di�di�di�di�di�di�di�di�di�di�di�di�di�d9�d:�d;�d<�d=�d�d>d,ddg�dD�dEdQ�dFd,�d�dH�d�dI�ddpdr�d�dJ�dK�d�d�dLd�dM�dd#�dQ�d�d�d�d�d�dT�dU�dV�d�dXd�dY�d�d�dZ�d[�d\�d�ddo�d]�gfddddd	d
d�ddd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�d�dAdBdKdLdMdNdOdPdQ�dFddR�d��da�d*�d�d!�d@dmd!�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�g�d-d-dddddd-ddVdwd-d-d-d-dYd9d-dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd-�d_d-d-dd-d-dWdXd-d[�d�d�d	�d
dOd-dd-�d`d-d-d-d-d-�dd\d-d-d-�d�d-d-d-dm�d�dd2d3d4d5d6d7dd-d-d-d-d-�d*�d+�d,d d-d-dPdSd!dndtd-dq�d0dsd-�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]g�fddddd	d
d�ddd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�d�dAdBdKdLdMdNdOdPdQ�dFddR�d��da�d*�d�d!�d@dmd!�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�g�d.d.dddddd.ddVdwd.d.d.d.dYd9d.dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd.�d_d.d.dd.d.dWdXd.d[�d�d�d	�d
dOd.dd.�d`d.d.d.d.d.�dd\d.d.d.�d�d.d.d.dm�d�dd2d3d4d5d6d7dd.d.d.d.d.�d*�d+�d,d d.d.dPdSd!dndtd.dq�d0dsd.�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]g�fddddd	d
d�ddd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�d�dAdBdKdLdMdNdOdPdQ�dFddR�d��da�d*�d�d!�d@dmd!�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�g�d/d/dddddd/ddVdwd/d/d/d/dYd9d/dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd/�d_d/d/dd/d/dWdXd/d[�d�d�d	�d
dOd/dd/�d`d/d/d/d/d/�dd\d/d/d/�d�d/d/d/dm�d�dd2d3d4d5d6d7dd/d/d/d/d/�d*�d+�d,d d/d/dPdSd!dndtd/dq�d0dsd/�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]g�fddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyd0d0dddddd0ddVdwd0d0d0d0dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd0�d_d0d0dd0dWdX�d�d�d	�d
dOd0dd0�d`d0d0d0�dd0d0d0�d�d0d0d0dm�d�dd2d3d4d5d6d7dd0d0d0d0d0�d*�d+�d,d d0d0dPdSd!dndtd0dq�d0dsd0�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyd1d1dddddd1ddVdwd1d1d1d1dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd1�d_d1d1dd1dWdX�d�d�d	�d
dOd1dd1�d`d1d1d1�dd1d1d1�d�d1d1d1dm�d�dd2d3d4d5d6d7dd1d1d1d1d1�d*�d+�d,d d1d1dPdSd!dndtd1dq�d0dsd1�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQddR�d��da�ddmdsdtdudvdwdxdydzd{d|d�d1d�d�d�dd�dd�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�ghd3d3dddddd3ddVdwd3d3d3d3dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd3�d_d3d3dd3dWdX�d�d�d	�d
dOdd3�d`d3d3�dd3dm�d�dd2d3d4d5d6d7dd3�d*�d+�d,d dPd!dndtd3dq�d0dsd3�dB�dC�dD�dEdQ�dF�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]ghfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQddR�d��da�ddmdsdtdudvdwdxdydzd{d|d�d1d�d�d�dd�dd�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�ghd4d4dddddd4ddVdwd4d4d4d4dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd4�d_d4d4dd4dWdX�d�d�d	�d
dOdd4�d`d4d4�dd4dm�d�dd2d3d4d5d6d7dd4�d*�d+�d,d dPd!dndtd4dq�d0dsd4�dB�dC�dD�dEdQ�dF�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]ghfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�d�dAdBdLdMdNdOdPdQddR�d��da�d�d@dmd!dsdtdudvdwdxdydzd{d|d�d1d�d�d�dd�dd�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�gld+d+dddddd+ddVdwd+d+d+d+dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd+�d_d+d+d�d!d+dWdXd[�d�d�d	�d
dOdd+�d`d+d+�du�dd\d+dm�d�dd2d3d4d5d6d7dd+�d*�d+�d,d dPd!dndtd+dq�d0dsd+�dB�dC�dD�dEdQ�dF�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]glfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQddR�d��da�ddmdsdtdudvdwdxdydzd{d|d�d1d�d�d�dd�dd�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�ghd5d5dddddd5ddVdwd5d5d5d5dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd5�d_d5d5dd5dWdX�d�d�d	�d
dOdd5�d`d5d5�dd5dm�d�dd2d3d4d5d6d7dd5�d*�d+�d,d dPd!dndtd5dq�d0dsd5�dB�dC�dD�dEdQ�dF�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]ghfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQddR�d��da�ddmdsdtdudvdwdxdydzd{d|d�d1d�d�d�dd�dd�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�ghd6d6dddddd6ddVdwd6d6d6d6dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd6�d_d6d6dd6dWdX�d�d�d	�d
dOdd6�d`d6d6�dd6dm�d�dd2d3d4d5d6d7dd6�d*�d+�d,d dPd!dndtd6dq�d0dsd6�dB�dC�dD�dEdQ�dF�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]ghfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQddR�d��da�ddmdsdtdudvdwdxdydzd{d|d�d1d�d�d�dd�dd�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�ghd7d7dddddd7ddVdwd7d7d7d7dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd7�d_d7d7dd7dWdX�d�d�d	�d
dOdd7�d`d7d7�dd7dm�d�dd2d3d4d5d6d7dd7�d*�d+�d,d dPd!dndtd7dq�d0dsd7�dB�dC�dD�dEdQ�dF�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]ghfddddd	d
d�ddd$�dd%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d�d�d_�d`d
�dd�d9d;d�dd�dAdBdIdJdKdLdMdNdOdPdQ�dFddR�d�dT�da�d*�ddmdnd!�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d>�dY�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�g�d%d%dddddd%ddVdBdwd%d%d%d%dYd9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dNdQddRdd%�d_d%dBd%dd%dWdX�dd0d1d[�d�d�d	�d
dOd%dd%�d`dBd%d%d%�d�dd\d%d%d%�d�d%d%d%dm�d�dd2d3d4d5d6d7dd%d�d�d%d%d%d%�d*�d+�d,d d%d%dPdSd!dndtd%dq�d0dsd%�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]g�fddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyd�d�dddddd�ddVdwd�d�d�d�dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd��d_d�d�dd�dWdX�d�d�d	�d
dOd�dd��d`d�d�d��dd�d�d��d�d�d�d�dm�d�dd2d3d4d5d6d7dd�d�d�d�d��d*�d+�d,d d�d�dPdSd!dndtd�dq�d0dsd��dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gy�d_�d_ddddd�d_ddVdw�d_�d_�d_�d_dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<d�d_�d_�d_�d_d�d_dWdX�d�d�d	�d
dO�d_d�d_�d`�d_�d_�d_�d�d_�d_�d_�d��d_�d_�d_dm�d�dd2d3d4d5d6d7d�d_�d_�d_�d_�d_�d*�d+�d,d �d_�d_dPdSd!dndt�d_dq�d0ds�d_�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gy�d`�d`ddddd�d`ddVdw�d`�d`�d`�d`dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<d�d`�d_�d`�d`d�d`dWdX�d�d�d	�d
dO�d`d�d`�d`�d`�d`�d`�d�d`�d`�d`�d��d`�d`�d`dm�d�dd2d3d4d5d6d7d�d`�d`�d`�d`�d`�d*�d+�d,d �d`�d`dPdSd!dndt�d`dq�d0ds�d`�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyf�dd$d*d�d�d_�d`�d�d�dd�d9d�ddAdBdMdNdOdPdQdR�d��d/�dO�ddmdsdtdudvdwdxdydzd{d|d��dm�dn�dod�d�ddd�d�d�d�d�d�d��d~�d�d�d�d�d�d�d�d�dِd��d�dܐd��d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�gUddVdYdOdOddRdOd
d�d_ddOddWdXdOdO�d	dOdOdO�d`dOdOd�ddOdm�d�dd2d3d4d5d6d7dOd#dOd�d*�d+d d!dndOdOdtdq�d0dsdOddg�dB�dC�dHdO�dIdpdrdOdOdOddOd#�dNdZ�dQdOdOdO�dT�dU�dVddO�d[�d\dOdOdo�d]gUfd"d$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d8d9dAdBdCdDdEdFdGdHdMdNdPdQdSdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjdm�d[d}d�d�d�d�d�d�d�d�d��d��d�d�d�d�dd�d�d�d�d�d�dƐd��d�d�d�d�d�d�d�d�d�d�dݐd�d�d�d�d�d�gkd�dVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<d��dOdWdXd
�dd"�d�d�d�d�d�d
dO�dO�d7�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd��d�dxd��d#�d$�d%�d&�d'�d�d(�d)d��d�dh�d*�d+�d,d dP�d9�d:�d;�d<�d=�d>didk�dB�dC�dD�dEdQ�dF�dJ�dK�dL�dMdj�dNdZ�dX�dY�dZgkfd"d$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d8d;d�d@dAdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdT�dadU�dbdYd[d\d]d^d_d`dadbdcdddedfdgdhdidj�ddmdnd!dodpdqd}d�d�d�d�d�d��d)d�d��d��d�d�d�d�dd�d�d�d�d�d�d�d�d�d�dƐd��d��d�d��d�d�d�d�d�d�d�d�d�d�d�dېd��d�d�d�d�d�d�d�g�d�d�dwdddddYd9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<d�d�d��dd�d
�dd"�d�d�d�dd0d1d[�d�d�d	�d
dOd�d��dd��d�dd��d�d�d�d�dd�d�d��dd��d�d�dd��dp�d�dd\d�ddd��d�d �d!�d"�d#�d$d��d)d��dpdh�d*�d+�d,d dPdMd,d-dN�d9�d:�d;�d<�d=�d>d�d��dpdidk�d?�d@�dA�dB�dC�dD�dEdQ�dF�dJ�dK�dpdj�dNdZ�dX�dp�dY�dZg�fd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d9d;d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdPdQdSdTdU�dD�dE�dbdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdl�d�ddmdnd!�dI�dT�d[dpdqd}dd�d�d�d�d��d2�d3�d4�d5d�d�d�d�d�d�d�d�d��d�d)d�d�dd�d��d��d�d��dwdd�d�d�d�d�d�d�d�d�d��d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��d��d�d��d�d�d�d�d�dƐd��d��d�dǐd�d�d�d�d�d̐d�d�dΐd��d�d�d�dѐd�dՐd��d�d�d�d�d�d�d�d�d�d�d�d��d��d��d�d�d�d�g�dVdwdddddYd9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dK�d�dPdHdJ�ddWdXd
�dd"�d�d�d�dd0d1d[�d�d�d
dOdK�d�d�d1d]ddx�d�d
�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�dIdb�dv�d��d�dd\�dw�db�d�ddd��d{dudL�d�d�d d_d`dd�d!�d"�d#�d$�d%�d&�d'�d�d(�d{d�d)d��d�d*�d+�dw�dw�d,�d�d dP�d��d/dUdMd,d-dNd��d{d^dy�d{d�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8�d{�d��d9d��d:�d;�d<�d=�d>dl�d�d�dcde�d?�d@�dA�dB�dCda�dD�dE�dc�d�dQ�dF�dG�d{dv�d{�d{�dJ�dK�dL�dMdd�dNdZ�dO�dP�dSd��d�df�d{�dX�dY�dZg�fd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d;d�d@d�dAdBdCdDdEdFdGdH�ddIdJdKdLdMdNdPdQdT�dadU�dG�d�d�d,�dD�dE�dbdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidj�d�d"�dA�d �d�ddmdnd!dpdqdd�d�d��d2�d3�d4�d5d�d��dd�d�d�d�d�d�d��d�d�d)d�d��d�d�d�d�dd�d�d�d�d�d��d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��d�d��d�d�d�d�dŐd��d��d�dƐd��d��d�d�d�d�d�d̐d�d�d�d�dАd�dՐd��d�d�d�d�d�d�d�d�d��d��d��dRd�d�dW�d�d�d�g�dVdwdddddYd9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<�dd�dddWdXd
�dd"�d�d�ddm�dd0d1d[�d�d�d
dO�dd�dd�d��d^d+�ddd]ddx�d�d
�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�dd�d�d%d&�d��d�dd\dd�ddu�d�d d_d`dd�d!�d"d��d#�d$�d%�d&�d'�d�d(�d~d�d�d)d�dʐd*�d+�d,d dPdMd,d-dNd$�ded^dyd�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8dېd9d��d:�d;�d<�d=�d��d�dܐd>dl�dd�d?�d@�dA�dB�dCda�dD�dEdQ�dFd�dvd�d�dJ�dK�dL�dM�dNdZ�dSd�d�d�d�dX�dYdd��dZd�g�fd$d%d*d-d.d/d0d1dddddddddddd2dAdBdMdNdPdQdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdmdodpdqd}�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d��d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dАd�d�d�d�d�d�d�d�d�d�d�d�gwdVdwdYdEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDdWdX�d�d�d
dOdx�d�d
�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd��d�dyddd�d�du�d#�d$�d%�d&�d'�d�d(�d)d��d*�d+�d,d dP�d�dMd,d-dNd�d�dy�d�d�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8�d9�d:�d;�d<�d=�d>�dB�dC�dD�dEdQ�dF�dydv�dJ�dK�dL�dM�dNdZ�dS�dX�dY�dZgwfd-d.d/d�d�dd�dJdKdLdOdR�dO�dcdY�d�dB�dN�dC�d*�d+�d�dd[d\�dd�ded]d^d_d`dadbdcdddedfdgdhdidj�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|d}�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�dd�d��d�d�dd�d��dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d�d�d�d�d�dŐd~dƐd�d��d�d�d�d�d�d�dِd�d�dېd��d��d��d��d�d�d�d�d�d�d�d�d�d�dRd�d�d�d�dWd�d�d�d�d�d�d�g�dEdFdG�d�dddd0d1d[�d	�d�d�dhd��d�d�d�d�d�di�dj�dg�dd��dk�dl�d�d�d�d�dd�d�d��dd��d�d�dd�d�dh�d�ddd1d\�ddm�d�dd2d3d4d5d6d7d��d�d�d�ddzd{d|d}�df�d�d~�d�d�d��d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d#�d$�d�d�d�d)d�d#�dd�d�dh�dh�d�dd �d�dd!dn�d�ddt�d�d�d�d�ddq�d0ds�d9�d:�d;�d<�d=�d�d>ddg�d�dH�d�dI�ddpdr�d�dJ�dK�d�dd�dd#�dQ�d�d�d�d�d�dT�dU�dV�d�dXd�dY�d�d�dZ�d[�d\�d�ddo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dcdY�d�dB�dN�dC�d*�d+�d�dd[d\�dd�ded]d^d_d`dadbdcdddedfdgdhdidj�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|d}�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�dd�d��d�d�dd�d��dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d�d�d�d�d�dŐd~dƐd�d��d�d�d�d�d�d�dِd�d�dېd��d��d��d��d�d�d�d�d�d�d�d�d�d�dRd�d�d�d�dWd�d�d�d�d�d�d�g�dEdFdG�dB�dBddd0d1d[�d	�dB�dB�dhd��dB�dB�dB�dB�dB�di�dj�dg�dd��dk�dl�d�d�d�d�dd�d�d��dd��d�d�dd�d�dh�dB�dBdd1d\�dBdm�d�dd2d3d4d5d6d7d��dB�dB�dB�dBdzd{d|d}�df�d�d~�d�d�d��d��dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�d#�d$�dB�dB�dB�d)d�d#�dBd�dB�dh�dh�dB�dBd �dB�dBd!dn�dB�dBdt�dB�dB�dB�dB�dBdq�d0ds�d9�d:�d;�d<�d=�dB�d>ddg�dB�dH�dB�dI�dBdpdr�dB�dJ�dK�dB�dBd�dBd#�dQ�dB�dB�dB�dB�dB�dT�dU�dV�dB�dXd�dY�dB�dB�dZ�d[�d\�dB�dBdo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdG�dC�dCddd0d1d[�d	�dC�dC�dh�dC�dC�dC�dC�dC�di�dj�dg�dk�dld�dh�dC�dCdd1d\�dCdm�d�dd2d3d4d5d6d7�dC�dC�dC�dCdzd{d|d}�df�d�d~�d�d�d��d��dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dCd#�dCd�dC�dh�dh�dC�dCd �dC�dCd!dn�dC�dCdt�dC�dC�dC�dC�dCdq�d0ds�dCddg�dC�dH�dC�dI�dCdpdr�dC�dC�dCd�dCd#�dQ�dC�dC�dC�dC�dC�dT�dU�dV�dCd�dC�dC�d[�d\�dC�dCdo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dcdWdXdY�d�dB�dNdZ�dC�d*�d+�d�dd[d\�dd�ded]d^d_d`dadbdcdddedfdgdhdidj�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|d}�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�dd�d�d��dd�d�d��dd��dd�d��dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dŐd~dƐd�d��d�d�d�d�d�d�dِd�d�dېd��d�dܐd�dݐd��d�d�d�d�d�d�d�d�d�d�dRd�d�d�d�dWd�d�d�d�d�d�d�g�dEdFdG�d�dddd0d1d[�d	�d�d�dh�d�d$�d�d�d�dd��d�d�di�dj�dg�dd��dk�dl�d�d�d�d�dd�d�d��dd��d�d�dd�d�dh�d�ddd1d\�ddm�d�dd2d3d4d5d6d7d��d�d�d�ddzd{d|d}�df�d�d~�d�d�d��d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d#�d$�d%�d�d&�d'�d�d�d(�d�d)d�d#�dd�d�dh�dh�d�dd �d�dd!dn�d�ddt�d�d�d�d�ddq�d0dsd�d�d�dd�d�d�d��d1�d2�d3�d4�d5d��d$�d$�d$�d$�d9�d:�d;�d<�d=�d�d>ddg�d�dH�d�dI�ddpdr�d�dJ�dK�d�d�dLd�dM�dd#�dQ�d�d�d�d�d�dT�dU�dV�d�dXd�dY�d�d�dZ�d[�d\�d�ddo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dcdWdXdY�d�dB�dNdZ�dC�d*�d+�d�dd[d\�dd�ded]d^d_d`dadbdcdddedfdgdhdidj�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|d}�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�dd�d�d��dd�d�d��dd��dd�d��dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dŐd~dƐd�d��d�d�d�d�d�d�dِd�d�dېd��d�dܐd�dݐd��d�d�d�d�d�d�d�d�d�d�dRd�d�d�d�dWd�d�d�d�d�d�d�g�dEdFdG�d+�d+ddd0d1d[�d	�d+�d+�dh�d�dl�d�d+�d+�d+d��d+�d+�di�dj�dg�dd��dk�dl�d�d�d�d�dd�d�d��dd��d�d�dd�d�dh�d+�d+dd1d\�d+dm�d�dd2d3d4d5d6d7d��d+�d+�d+�d+dzd{d|d}�df�d�d~�d�d�d��d��d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d#�d$�d%�d+�d&�d'�d�d+�d(�d+�d)d�d#�d+d�d+�dh�dh�d+�d+d �d+�d+d!dn�d+�d+dt�d+�d+�d+�d+�d+dq�d0dsd�d�d�dd��dl�dl�dl�dl�dl�dl�dl�dl�dl�dl�dl�dl�dl�d9�d:�d;�d<�d=�d+�d>ddg�d+�dH�d+�dI�d+dpdr�d+�dJ�dK�d+�d+�dLd�dM�d+d#�dQ�d+�d+�d+�d+�d+�dT�dU�dV�d+�dXd�dY�d+�d+�dZ�d[�d\�d+�d+do�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dcdWdXdY�d�dB�dNdZ�dC�d*�d+�d�dd[d\�dd�ded]d^d_d`dadbdcdddedfdgdhdidj�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|d}�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�dd�d�d��dd�d�d��dd��dd�d��dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dŐd~dƐd�d��d�d�d�d�d�d�dِd�d�dېd��d�dܐd�dݐd��d�d�d�d�d�d�d�d�d�d�dRd�d�d�d�dWd�d�d�d�d�d�d�g�dEdFdG�d�dddd0d1d[�d	�d�d�dh�d�d�d�d�d�dd��d�d�di�dj�dg�dd��dk�dl�d�d�d�d�dd�d�d��dd��d�d�dd�d�dh�d�ddd1d\�ddm�d�dd2d3d4d5d6d7d��d�d�d�ddzd{d|d}�df�d�d~�d�d�d��d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d#�d$�d%�d�d&�d'�d�d�d(�d�d)d�d#�dd�d�dh�dh�d�dd �d�dd!dn�d�ddt�d�d�d�d�ddq�d0dsd�d�d�dd��d�d�d�d�d�d�d�d�d�d�d�d�d�d9�d:�d;�d<�d=�d�d>ddg�d�dH�d�dI�ddpdr�d�dJ�dK�d�d�dLd�dM�dd#�dQ�d�d�d�d�d�dT�dU�dV�d�dXd�dY�d�d�dZ�d[�d\�d�ddo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdG�dd�ddddd0d1d[�d	�dd�dd�dh�dd�dd�dd�dd�dd�di�dj�dg�dk�dld�dh�dd�dddd1d\�dddm�d�dd2d3d4d5d6d7�dd�dd�dd�dddzd{d|d}�df�d�d~�d�d�d��d��dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�ddd#�ddd�dd�dh�dh�dd�ddd �dd�ddd!dn�dd�dddt�dd�dd�dd�dd�dddq�d0ds�ddddg�dd�dH�dd�dI�dddpdr�dd�dd�ddd�ddd#�dQ�dd�dd�dd�dd�dd�dT�dU�dV�ddd�dd�dd�d[�d\�dd�dddo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdG�de�deddd0d1d[�d	�de�de�dh�de�de�de�de�de�di�dj�dg�dk�dld�dh�de�dedd1d\�dedm�d�dd2d3d4d5d6d7�de�de�de�dedzd{d|d}�df�d�d~�d�d�d��d��de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�ded#�ded�de�dh�dh�de�ded �de�ded!dn�de�dedt�de�de�de�de�dedq�d0ds�deddg�de�dH�de�dI�dedpdr�de�de�ded�ded#�dQ�de�de�de�de�de�dT�dU�dV�ded�de�de�d[�d\�de�dedo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdG�d��d�ddd0d1d[�d	�d��d��dh�d��d��d��d��d��di�dj�dg�dk�dld�dh�d��d�dd1d\�d�dm�d�dd2d3d4d5d6d7�d��d��d��d�dzd{d|d}�df�d�d~�d�d�d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d�d#�d�d�d��dh�dh�d��d�d �d��d�d!dn�d��d�dt�d��d��d��d��d�dq�d0ds�d�ddg�d��dH�d��dI�d�dpdr�d��d��d�d�d�d#�dQ�d��d��d��d��d��dT�dU�dV�d�d�d��d��d[�d\�d��d�do�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdadaddd0d1d[�d	dada�dhdadadadada�di�dj�dg�dk�dld�dhdadadd1d\dadm�d�dd2d3d4d5d6d7dadadadadzd{d|d}�df�d�d~�d�d�d��d�dadadadadadadadadadadadadadadadadadadadadadadadad#dadda�dh�dhdadad dadad!dndadadtdadadadadadq�d0dsdaddgda�dHda�dIdadpdrdadadaddad#�dQdadadadada�dT�dU�dVdaddada�d[�d\dadado�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdbdbddd0d1d[�d	dbdb�dhdbdbdbdbdb�di�dj�dg�dk�dld�dhdbdbdd1d\dbdm�d�dd2d3d4d5d6d7dbdbdbdbdzd{d|d}�df�d�d~�d�d�d��d�dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd#dbddb�dh�dhdbdbd dbdbd!dndbdbdtdbdbdbdbdbdq�d0dsdbddgdb�dHdb�dIdbdpdrdbdbdbddbd#�dQdbdbdbdbdb�dT�dU�dVdbddbdb�d[�d\dbdbdo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdcdcddd0d1d[�d	dcdc�dhdcdcdcdcdc�di�dj�dg�dk�dld�dhdcdcdd1d\dcdm�d�dd2d3d4d5d6d7dcdcdcdcdzd{d|d}�df�d�d~�d�d�d��d�dcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd#dcddc�dh�dhdcdcd dcdcd!dndcdcdtdcdcdcdcdcdq�d0dsdcddgdc�dHdc�dIdcdpdrdcdcdcddcd#�dQdcdcdcdcdc�dT�dU�dVdcddcdc�d[�d\dcdcdo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGddddddd0d1d[�d	dddd�dhdddddddddd�di�dj�dg�dk�dld�dhdddddd1d\dddm�d�dd2d3d4d5d6d7dddddddddzd{d|d}�df�d�d~�d�d�d��d�ddddddddddddddddddddddddddddddddddddddddddddddddd#ddddd�dh�dhddddd ddddd!dndddddtdddddddddddq�d0dsddddgdd�dHdd�dIdddpdrdddddddddd#�dQdddddddddd�dT�dU�dVddddddd�d[�d\dddddo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdededdd0d1d[�d	dede�dhdedededede�di�dj�dg�dk�dld�dhdededd1d\dedm�d�dd2d3d4d5d6d7dededededzd{d|d}�df�d�d~�d�d�d��d�dedededededededededededededededededededededededed#dedde�dh�dhdeded deded!dndededtdedededededq�d0dsdeddgde�dHde�dIdedpdrdedededded#�dQdedededede�dT�dU�dVdeddede�d[�d\dededo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdfdfddd0d1d[�d	dfdf�dhdfdfdfdfdf�di�dj�dg�dk�dld�dhdfdfdd1d\dfdm�d�dd2d3d4d5d6d7dfdfdfdfdzd{d|d}�df�d�d~�d�d�d��d�dfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd#dfddf�dh�dhdfdfd dfdfd!dndfdfdtdfdfdfdfdfdq�d0dsdfddgdf�dHdf�dIdfdpdrdfdfdfddfd#�dQdfdfdfdfdf�dT�dU�dVdfddfdf�d[�d\dfdfdo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdgdgddd0d1d[�d	dgdg�dhdgdgdgdgdg�di�dj�dg�dk�dld�dhdgdgdd1d\dgdm�d�dd2d3d4d5d6d7dgdgdgdgdzd{d|d}�df�d�d~�d�d�d��d�dgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgd#dgddg�dh�dhdgdgd dgdgd!dndgdgdtdgdgdgdgdgdq�d0dsdgddgdg�dHdg�dIdgdpdrdgdgdgddgd#�dQdgdgdgdgdg�dT�dU�dVdgddgdg�d[�d\dgdgdo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdhdhddd0d1d[�d	dhdh�dhdhdhdhdhdh�di�dj�dg�dk�dld�dhdhdhdd1d\dhdm�d�dd2d3d4d5d6d7dhdhdhdhdzd{d|d}�df�d�d~�d�d�d��d�dhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhd#dhddh�dh�dhdhdhd dhdhd!dndhdhdtdhdhdhdhdhdq�d0dsdhddgdh�dHdh�dIdhdpdrdhdhdhddhd#�dQdhdhdhdhdh�dT�dU�dVdhddhdh�d[�d\dhdhdo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�ded_di�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�dd��dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdididdd0d1d[�d	didi�dhdididididi�di�dj�dg�dk�dld��dd�dhdididd1d\didm�d�dd2d3d4d5d6d7dididididzd{d|d}�df�d�d~�d�d�d��d�didididididididididididididididididididididididi�d)d#diddi�dh�dhdidid didid!dndididtdidididididq�d0dsdiddgdi�dHdi�dIdidpdrdidididdid#�dQdididididi�dT�dU�dVdiddidi�d[�d\didido�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�ded`dj�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�dd��dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdjdjddd0d1d[�d	djdj�dhdjdjdjdjdj�di�dj�dg�dk�dld�d�d�dhdjdjdd1d\djdm�d�dd2d3d4d5d6d7djdjdjdjdzd{d|d}�df�d�d~�d�d�d��d�djdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjd�d#djddj�dh�dhdjdjd djdjd!dndjdjdtdjdjdjdjdjdq�d0dsdjddgdj�dHdj�dIdjdpdrdjdjdjddjd#�dQdjdjdjdjdj�dT�dU�dVdjddjdj�d[�d\djdjdo�d]g�fd-d.d/d�d�dJdL�d��dc�d��d�dVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidj�d�d?�d@d!d�d�d�d�d�d�d�d�d�d��d��dr�d��dsdd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��d�d�d�d�d�d�dƐd��d��d�d�d�d�d�d�d�d�d�d�gZdEdFdGddd0d[d�d�dddx�d�d
�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�ddd1d\du�d#�d$�d%�d&�d'�d�d(�d)d�d�d�d�d�d d�dyd�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8dڐd9�d:�d;�d<�d=�d>�d�d�d�dv�dJ�dK�dL�dM�dS�dX�dY�dZgZfddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	�df�dfdm�d�dd2d3d4d5d6d7�dfd d!dn�df�dfdtdq�d0ds�dH�df�dIdpdr�dQ�df�df�df�dT�dU�dV�df�d[�d\�df�dfdo�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	�d��d�dm�d�dd2d3d4d5d6d7�d�d d!dn�d��d�dtdq�d0ds�dH�d��dIdpdr�dQ�d��d��d��dT�dU�dV�d��d[�d\�d��d�do�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	�d��d�dm�d�dd2d3d4d5d6d7�d�d d!dn�d��d�dtdq�d0ds�dH�d��dIdpdr�dQ�d��d��d��dT�dU�dV�d��d[�d\�d��d�do�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	�d��d�dm�d�dd2d3d4d5d6d7�d�d d!dn�d��d�dtdq�d0ds�dH�d��dIdpdr�dQ�d��d��d��dT�dU�dV�d��d[�d\�d��d�do�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g+d�d	�d��d�dm�d�dd2d3d4d5d6d7�d�d d!dn�d��d�dt�d�dq�d0ds�dH�d��dIdpdr�dQ�d��d��d��dT�dU�dV�d��d[�d\�d��d�do�d]g+fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	d�d�dm�d�dd2d3d4d5d6d7d�d d!dnd�d�dtdq�d0ds�dHd��dIdpdr�dQd�d�d��dT�dU�dVd��d[�d\d�d�do�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	�d
�d
dm�d�dd2d3d4d5d6d7�d
d d!dn�d
�d
dtdq�d0ds�dH�d
�dIdpdr�dQ�d
�d
�d
�dT�dU�dV�d
�d[�d\�d
�d
do�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	�dS�dSdm�d�dd2d3d4d5d6d7�dSd d!dn�dS�dSdtdq�d0ds�dH�dS�dIdpdr�dQ�dS�dS�dS�dT�dU�dV�dS�d[�d\�dS�dSdo�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	d�d�dm�d�dd2d3d4d5d6d7d�d d!dnd�d�dtdq�d0ds�dHd��dIdpdr�dQd�d�d��dT�dU�dVd��d[�d\d�d�do�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	d�d�dm�d�dd2d3d4d5d6d7d�d d!dnd�d�dtdq�d0ds�dHd��dIdpdr�dQd�d�d��dT�dU�dVd��d[�d\d�d�do�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	d�d�dm�d�dd2d3d4d5d6d7d�d d!dnd�d�dtdq�d0ds�dHd��dIdpdr�dQd�d�d��dT�dU�dVd��d[�d\d�d�do�d]g*fddOdRdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdl�d�dI�dT�d[�d\�d]�d0drdsdtdudvdwdxdydzd{d|d�d�d�d�d�d�d�d�d�d d�dm�d��d��dwd�d��d��d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dǐd�d��d��d��d-�d.d�d�d�d�d�d�d�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�g}d�d	ddx�d�d
�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�dbdd�db�d�d�d�ddd	dm�d�dd2d3d4d5d6d7�d#�d$�d%�d&�d'�d�d(�d)d�dd*d)dd�d�d dddSd!dnd�dtdq�d0dsdyd�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8�d9�d:�d;�d<�d=�d>dcdde�dc�d�dT�da�dH�dIdpdr�dJ�dK�dL�dMdd�dQ�dSddf�dT�dU�dV�dXd�dY�dZ�d[�d\do�d]g}fdOdYd[d\d]d^d_d`dadbdcdddedfdgdhdidj�dd}d�d�d�d��d��d�dd�d�d�d�d�dƐd�d��d�d�dېd��d�d�d�d�d�g,�d	�d>�dd��d�d�d�d�dd�d�d��dd��d�d�dd��dqd��d#�d$�d)d��dqdhd �d9�d:�d;�d<�d=�d>�dqdidk�dJ�dK�dqdj�dX�dq�dY�dZg,fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�dh�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�dj�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d��dj�dj�dj�dj�dj�dj�dj�dj�dj�dj�dj�dj�dj�dj�dj�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�dk�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d��dk�dk�dk�dk�dk�dk�dk�dk�dk�dk�dk�dk�dk�dk�dk�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�dJ�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d��dJ�dJ�dJ�dJ�dJ�dJ�dJ�dJ�dJ�dJ�dJ�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�dK�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d��dK�dK�dK�dK�dK�dK�dK�dK�dK�dK�dK�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d9�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d9�d9�d9�d9�d9�d9�d9�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d:�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d:�d:�d:�d:�d:�d:�d:�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d;�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d;�d;�d;�d;�d;�d;�d;�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d<�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d<�d<�d<�d<�d<�d<�d<�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d=�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d4�d5�d=�d=�d=�d=�d=�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d#�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d4�d5�d#�d#�d#�d#�d#�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�dX�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�dX�dX�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�dZ�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d4�d5d��dZ�d6�dZ�dZ�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�d8�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�d�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�dM�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�d�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�d%�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�d&�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�d'�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�d(�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�dL�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�dg�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�g"�dY�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dX�dY�dZg"fdwdxdydzd{d|ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�gd2d3d4d5d6d7d d!dtdq�d0ds�dH�dIdpdr�dQd�dU�dV�d[�d\do�d]gf�d1g�d�gf�dĜaZiZx^ej�D]R\ZZxDeeded�D].\Z	Z
e	ek��r�iee	<e
ee	e<��q�W��q�W[dgdgfdgdgfd�dd"d&d'd(d)d,d8d9d�d�d�d�dR�da�db�d�d�d�d?�d!dodpdqdsd��d)d�d�d��d��dd�dאd�d�d�d�d�dR�d�d�dWd�d�g.d�dd<dDdDdDdDdJd<�d�d�d�dJ�d dr�d�d4�dm�d��d�d�dJd�d�d�d�d��d4d�d�d��d�d�d�d��d�d�d�d�d�d��d�d�d�d�d�g.fddgdd
gfddgddgfdd�d�dd9dRdsd�gd	d	d��d�d�dudud�gfddgd
d
gfddd"�d^d8d��da�dP�dbdo�d�g�d�dd9�ddS�d�ddS�d2d�d�gfdd�dd&d'd(d)�dd9d�d�dR�da�dds�d1d��d�gd"d"d8dEdEdEdEd8d8�db�dbd8�db�dbd8�dbd8�dbgfdd�d�dd9dRdsd�gd#d#d#d#d#d#d#d#gfddd"�d�d^d8d;d�dT�da�dP�dbdo�d�gd$d$d$dAd$d$dAd$dAd$d$d$d$d$gfddd"�d^d8d�dI�da�dP�dbdo�d)�d��d�g�d�dd;�ddTd;dndT�dd;dT�d��d��dgfdd�dd&d'd(d)d,�dd9d�d�d�dK�dFdR�da�d*�d�d!�d@�dU�dV�d\dpdqds�d1�d�d�d�d	�d��d�d��d�g$d&d&d&d&d&d&d&dLd&d&d&dLd&d!dpd&d&dpd&dLd!dpdpdpdpdpd&d&dpdpdpdpdpdpd&d&g$fdd�dd&d'd(d)�dd9d�d��dFdR�da�d*�d�dU�dV�d\dpdqds�d1�d�d�d�d	�d��d�d��d�gd'd'd'd'd'd'd'd'd'd'd'dqd'd'dqd'dqdqdqdqdqd'd'dqdqdqdqdqdqd'd'gfdd�dd&d'd(d)�dd9d�d�dR�da�dds�d1d��d�gd(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(gfdd�dd&d'd(d)�dd9d�d�dR�da�dds�d1d��d�gd)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)gfdd�dd&d'd(d)�dd9d�d��dFdR�da�d*�d�dU�dV�d\dpdqds�d1�d�d�d�d	�d��d�d��d�gdddddddddddddddddddddddddddddddgfdd�dd&d'd(d)�dd9d�d��dFdR�da�d*�d�dU�dV�d\dpdqds�d1�d�d�d�d	�d��d�d��d�gdddddddddddddddddddddddddddddddgfdd�dd&d'd(d)�dd9d�d��dFdR�da�d*�d�dU�dV�d\dpdqds�d1�d�d�d�d	�d��d�d��d�gd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2gfdd�dd&d'd(d)�dd9d�d��dFdR�da�d*�d�dU�dV�d\dpdqds�d1�d�d�d�d	�d��d�d��d�gdddddddddddddddddddddddddddddddgf�dd9g�d�d/gf�dd9g�d�dgfd"d8gd:d:gfd"d8gd=d=gfd"d8�dPgd>d>d�gfd"d8d��da�dbdo�d)�d�gd?d?�dG�dG�d5d��d5�dGgfd"d8d;d�dT�da�dbdo�d)�d��d�gd@d@dUd@dUd@d@d@d@dUd@gfd&d'd(d)gdCdFdGdHgfd,d��d!gdI�d?�dtgfd,d��d!gdK�d@dKgfd�d�dd�dMdNdPdQdR�d/�dOdsd��dnd�d��d~dӐd��d�dܐd�d�d�d�d�d�d�g�d
�dFdR�d�dH�dQ�dU�dVdRdR�ddRdR�ddRdR�d�dR�d��d��d��ddRdRdRdRdRdRgf�ddR�d/dsd�d�d�d�d�d�d�d�d�d�gddyddydydydydydydydydydydygfd��da�d�d�g�d�d�d��dgfd�d��da�d�d�g�d,�d"�d,�d,�d,gfd�d��da�d�d�g�dD�dD�dD�dD�dDgfd�d��da�d�d1�d�g�dE�dE�dE�dE�d��dEgfd��d�d?g�d��d��d�gfd�d�dR�dO�d*�d�d?dsd�d��d6�dh�d�d�d�d�d�dn�dt�dud�d��dz�d{�d|�d}d�d�dאd��d�d�d�d�d�d�dRd�dWd�d�g)�d�dld�dld��d��d�d�d�d�d�d�d��d�d�d�d�dl�d��d�d�d�d�d�d�d�d�d�d��d�dld�d�d�d�d�d�d�d�d�d�g)fd�d�dR�dO�d*�d�d?ds�dfd�d��d6�dh�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d�d�dאd��d��d�d�d�d�d�d�dRd�dWd�d�g/dVdVdVdVdVdVdVdVd�dVdVdVdVdVdVdVdVdVdVd�dVdVd�d�dVdVdVdVdVdVdVd�dVdVd�dVdVdVdVdVdVdVdVdVdVdVdVg/fd�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gGdWdWdWdWd�d�d�d�dWdWdWdWd�dWdWdWdWd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dWdWdWdWdWdWd�dWdWd�d�dWdWdWdWdWdWdWd�d�dWdWd�dWd�dWdWdWdWdWdWdWdWdWdWdWgGfd�d�dR�dO�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d�d�dאd��d��d�d�d�d�d�d�dRd�dWd�d�gAdXdXdXdXdXdXdXdXdXdXdXdXdXd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXgAfd�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gGdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYgGfd�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gG�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dNgGfd�d�dR�dO�dN�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gDdZdZdZdZd�dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd�dZdZdZdZdZd�dZdZdZdZdZdZdZdZdZdZdZgDfd�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gGd[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[gGfd�d�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dq�dt�du�dv�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d��d�d�d�d�d�d�dRd�dWd�d�gKd]d]�dd]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]�d�d]d]�d�d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]�d�d]d]d]d]d]d]d]d]d]d]d]gKfd�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gGd^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^gGfd�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gGd_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_gGfd�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gGd`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`gGfd��dO�dn�d�gdkd��d��d�gfd�g�dAgfd�g�dgf�d
�dH�dQg�dI�d��d�gf�d
�dH�dQ�dwg�dT�dT�dT�d�gf�dF�dU�dVg�d\�d��d�gf�dF�dU�dV�d\�d��d�g�d]�d]�d]�d��d��d�gf�dF�d*�dU�dV�d\dpdq�d�d�d�d	�d��d�g
do�d)dododod�d��d)�d)�d)�d)dodog
fdRg�d0gfdRgdsgfdRdsgdtd�gfdRdsd�d�d�d�d�d�d�d�d�d�gdvdv�d�d�d�d�d�d�d�d�d�d�gfdRdsd�d�d�d�d�d�d�d�d�d�gdwdwdwdwdwdwdwdwdwdwdwdwgfdRdsd�d�d�d�d�d�d�d�d�d�gdxdxdxdxdxdxdxdxdxdxdxdxgfdRdsd�d�d�d�d�d�d�d�d�d�gdzdzdzdzdzdzdzdzdzdzdzdzgfdRdsd�d�d�d�d�d�d�d�d�d�gd{d{d{d{d{d{d{d{d{d{d{d{gfdRdsd�d�d�d�d�d�d�d�d�d�gd|d|d|d|d|d|d|d|d|d|d|d|gfdRdsd�d�d�d�d�d�d�d�d�d�dRd�dWd�d�gd~d~d~d~d~d�d~d�d~d~d~d�d�d~�d�d~d~gfdR�d*dsd�d��dh�d�d�d�dd�d��dz�d|�d}d�d�d�d�d�d�d�d�dRd�dWd�d�gd�dddd��d��d��d�d�ddd�d��d��d�dddddd�d�ddddddgf�db�d)g�d3�d�gfdWg�d6gf�d*�d�d�d�d	g�d�d��d��d��d�gf�dgd gf�d�d�gd�d�gf�d�d�d��d�g�dn�d��dn�d�gf�d�d�d��d�g�do�do�do�dogf�d�d�d��d�g�d��d��d��d�gf�d�d��d�d��d�g�d��d��d��d��d�gf�dI�d\�d0d �d��d��d��d��d�d��d�gd�d�dd�d�d�d�d�d�d�d�gfdogd�gfdogd�gfdo�d�gd�d�gfdpdqgd�d�gf�df�dp�dx�dy�d�g�d��d��d�d�d�gf�dg�d�gf�dŜTZiZx^ej�D]R\ZZxDeeded�D].\Z	Z
e	ek��(r�iee	<e
ee	e<��(q�W��(q�W[�dƐd�d�dȐdȐd�f�dɐd�d�dːd�d4f�d͐d�d�dːd�d5f�dΐd�d�dАd�d4f�dѐd�d�dАd�d5f�dҐd�d�dԐd�d4f�dՐd�d�dԐd�d5f�d֐d�d�dؐd�d4f�dِd�d�dؐd�d5f�dڐd�d�dܐd�d4f�dݐd�d�dܐd�d5f�dސd�d�d�d�d4f�d�d�d�d�d�d5f�d�d�d�d�d�d4f�d�d�d�d�d�d5f�d�d�d�d�d�d4f�d�d�d�d�d�d5f�d�d�d�d�d�d4f�d�d�d�d�d�d5f�d�d�d�d�d�d4f�d�d�d�d�d�d5f�d�d�d�d�d�d4f�d��d�d�d�d�d5f�d��d�d�d��d�d4f�d��d�d�d��d�d5f�d��d�d�d��d�d4f�d��d�d�d��d�d5f�d��d�d�d�d�d4f�d�d�d�d�d�d5f�d�dd�d�d�df�d�dd�d�d�df�d	�d
d�d�d�df�d
�d
d�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�d f�d!�d"d�d#�d�d$f�d%�d"d�d&�d�d'f�d(�d)d�d*�d�d+f�d,�d)d�d*�d�d-f�d.�d)d�d*�d�d/f�d0�d)d�d*�d�d1f�d2�d)d�d*�d�d3f�d4�d)d�d*�d�d5f�d6�d7d�d8�d�d9f�d:�d;d�d<�d�d=f�d>�d?d�d@�d�dAf�dB�d?d�d@�d�dCf�dD�dEd�dF�d�dGf�dH�dEd�dI�d�dJf�dK�dEd�dL�d�dMf�dN�dEd�dO�d�dPf�dQ�dRd�dS�d�dTf�dU�dRd�dS�d�dVf�dW�dRd�dS�d�dXf�dY�dRd�dS�d�dZf�d[�dRd�dS�d�d\f�d]�d^d�d_�d�d`f�da�dbd�dc�d�ddf�de�dbd�dc�d�dff�dg�dbd�dc�d�dhf�di�dbd�dc�d�djf�dk�dbd�dc�d�dlf�dm�dbd�dc�d�dnf�do�dbd�dc�d�dpf�dq�dbd�dc�d�drf�ds�dbd�dc�d�dtf�du�dbd�dc�d�dvf�dw�dbd�dc�d�dxf�dy�dbd�dz�d�d{f�d|�dbd�dz�d�d}f�d~�dbd�dz�d�df�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�dd�d�dĐd�d�f�dƐd�d�dĐd�d�f�dȐd�d�dʐd�d�f�d̐d�d�d͐d�d�f�dϐd�d�d͐d�d�f�dѐd�d�dӐd�d�f�dՐd�d�dӐd�d�f�dאd�d�dؐd�d�f�dڐd�d�dېd�d�f�dݐd�d�dېd�d�f�dߐd�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�df�d�d�d	�d�d�df�d�d�d	�d�d�df�d�d�d�d�d�df�d	�d�d�d
�d�df�d�d�d�d
�d�d
f�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d �d!d�d"�d�d#f�d$�d!d�d"�d�d%f�d&�d'd�d(�d�d)f�d*�d'd�d+�d�d,f�d-�d.d�d/�d�d0f�d1�d.d�d/�d�d2f�d3�d4d�d5�d�d6f�d7�d4d�d8�d�d9f�d:�d4d�d8�d�d;f�d<�d=d�d>�d�d?f�d@�d=d�d>�d�dAf�dB�dCd�dD�d�dEf�dF�dGd�dH�d�dIf�dJ�dGd�dH�d�dKf�dL�dMd�dN�d�dOf�dP�dMd�dN�d�dQf�dR�dSd�dT�d�dUf�dV�dWd�dX�d�dYf�dZ�dWd�d[�d�d\f�d]�dWd�d^�d�d_f�d`�dad�db�d�dcf�dd�dad�de�d�dff�dg�dad�dh�d�dif�dj�dad�dk�d�dlf�dm�dad�dn�d�dof�dp�dad�dq�d�drf�ds�dad�dt�d�duf�dv�dwd�dx�d�dyf�dz�dwd�dx�d�d{f�d|�d}d�d~�d�df�d��d}d�d~�d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d
�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d
�d��d�d�f�d��d��d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�dd�d�f�dĐd�d�dƐd�d�f�dȐd�d�dƐd�d�f�dʐd�d�d̐d�d�f�dΐd�d�d̐d�d�f�dАd�d�d̐d�d�f�dҐd�d�d̐d�d�f�dԐd�d�d̐d�d�f�d֐d�d�d̐d�d�f�dؐd�d�d̐d�d�f�dڐd�d�d̐d�d�f�dܐd�d�d̐d�d�f�dސd�d�d̐d�d�f�d�d�d�d̐d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d��d�d�d�d�d�f�d��d�d�d�d�d�f�d��d�d�d�d�d�f�d��d�d�d�d�d�f�d��d�d�d�d�d�f�d�d�d�d�d�df�d�d�d�d�d�df�d�d�d�d�d�df�d�d�d�d�d�df�d�d�d�d�d�d	f�d
�d�d�d�d�df�d�d�d�d�d�d
f�d�d�d�d�d�df�d�d�d�d�d�df�d�d�d�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d �d�d!f�d"�dd�d �d�d#f�d$�dd�d �d�d%f�d&�dd�d'�d�d(f�d)�dd�d'�d�d*f�d+�d,d�d-�d�d.f�d/�d,d�d-�d�d0f�d1�d,d�d-�d�d2f�d3�d,d�d-�d�d4f�d5�d,d�d-�d�d6f�d7�d,d�d-�d�d8f�d9�d:d�d;�d�d<f�d=�d:d�d>�d�d?f�d@�d:d�dA�d�dBf�dC�d:d�dA�d�dDf�dE�d:d�dF�d�dGf�dH�d:d�dF�d�dIf�dJ�d:d�dF�d�dKf�dL�d:d�dF�d�dMf�dN�d:d�dO�d�dPf�dQ�d:d�dO�d�dRf�dS�d:d	�dT�d�dUf�dV�d:d
�dT�d�dWf�dX�dYd�dZ�d�d[f�d\�dYd�d]�d�d^f�d_�dYd�d`�d�daf�db�dYd�d`�d�dcf�dd�dYd�de�d�dff�dg�dYd	�dh�d�dif�dj�dkd�dl�d�dmf�dn�dkd�dl�d�dof�dp�dqd�dr�d�dsf�dt�dud�dv�d�dwf�dx�dud�dv�d�dyf�dz�dud�dv�d�d{f�d|�dud�dv�d�d}f�d~�dud�d�d�d�f�d��dud�d�d�d�f�d��dud�d��d�d�f�d��dud�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�gZ
�d�S(�z3.8ZLALRZ 0B26D831EE3ADD67934989B5D61F8ACA�����������2�C�Z��ii.i����!�"�#�$�%� �/�&�'i��
��
��������������(�)�*�+�,�-�7�8�9�:�;�<�?�A�B�F�G�H�I�J�K�L�M�O�P�Q�R�S�T�V�W�X�[�]�^�b�o�p�q�r�v�|�}���������������������������������������������������������������iiiiii!i#i$i%i&i'i(i*i+i,i-i/i0i1i3i4i5i;i<i=i>i?i@iCiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViYi[i\i]i^icihioipiqirisiwixi{i|i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i��=�>�@�D�E�6�.���	�3�4�5�z�e�fi�U��������������������i�s�{����N����������������i�x�y�gi}i~�`���������������������������������t�w�h�i�Y�d�����������u�a�c�i������i�����������0�1�_�j�l�~��������������ii	i
i
iiiiiiiii)i6i7i8i9ibiiikii�i�i�i�i�i�i�i�i�i������ieifi��\ii i"i�iiilini�iiiBiDiWiXiZidigijiviyizi�i�i�i�i�i�i��m�k�niiAi_i`iai�i�i�i2iiimitiui:)az$end�SEMIZPPHASHZIDZLPARENZTIMESZCONSTZRESTRICTZVOLATILEZVOIDZ_BOOLZCHARZSHORTZINTZLONGZFLOATZDOUBLEZ_COMPLEXZSIGNEDZUNSIGNEDZAUTOZREGISTERZSTATICZEXTERNZTYPEDEFZINLINEZTYPEIDZENUMZSTRUCTZUNION�LBRACEZEQUALSZLBRACKET�COMMAZRPAREN�COLONZPLUSPLUSZ
MINUSMINUSZSIZEOFZAND�PLUS�MINUSZNOTZLNOTZOFFSETOFZ
INT_CONST_DECZ
INT_CONST_OCTZ
INT_CONST_HEXZ
INT_CONST_BINZFLOAT_CONSTZHEX_FLOAT_CONSTZ
CHAR_CONSTZWCHAR_CONSTZSTRING_LITERALZWSTRING_LITERALZRBRACKETZCASEZDEFAULTZIFZSWITCHZWHILEZDOZFORZGOTOZBREAKZCONTINUEZRETURN�RBRACEZPERIODZCONDOPZDIVIDEZMODZRSHIFTZLSHIFTZLTZLEZGEZGTZEQZNE�ORZXORZLANDZLORZXOREQUALZ
TIMESEQUALZDIVEQUALZMODEQUAL�	PLUSEQUALZ
MINUSEQUALZLSHIFTEQUALZRSHIFTEQUALZANDEQUALZOREQUALZARROW�ELSE�ELLIPSIS)T�translation_unit_or_empty�translation_unit�empty�external_declaration�function_definition�declaration�pp_directive�
declarator�declaration_specifiers�	decl_body�direct_declarator�pointer�type_qualifier�type_specifier�storage_class_specifier�function_specifier�typedef_name�enum_specifier�struct_or_union_specifier�struct_or_union�declaration_list_opt�declaration_list�init_declarator_list_opt�init_declarator_list�init_declarator�abstract_declarator�direct_abstract_declarator�declaration_specifiers_opt�type_qualifier_list_opt�type_qualifier_list�
brace_open�compound_statement�parameter_type_list_opt�parameter_type_list�parameter_list�parameter_declaration�assignment_expression_opt�assignment_expression�conditional_expression�unary_expression�binary_expression�postfix_expression�unary_operator�cast_expression�primary_expression�
identifier�constant�unified_string_literal�unified_wstring_literal�initializer�identifier_list_opt�identifier_list�enumerator_list�
enumerator�struct_declaration_list�struct_declaration�specifier_qualifier_list�block_item_list_opt�block_item_list�
block_item�	statement�labeled_statement�expression_statement�selection_statement�iteration_statement�jump_statement�expression_opt�
expression�abstract_declarator_opt�assignment_operator�	type_name�initializer_list_opt�initializer_list�designation_opt�designation�designator_list�
designator�brace_close�struct_declarator_list_opt�struct_declarator_list�struct_declarator�specifier_qualifier_list_opt�constant_expression�argument_expression_listzS' -> translation_unit_or_emptyzS'Nz abstract_declarator_opt -> emptyrQZp_abstract_declarator_optzplyparser.pyz.abstract_declarator_opt -> abstract_declaratorz"assignment_expression_opt -> emptyr1Zp_assignment_expression_optz2assignment_expression_opt -> assignment_expressionzblock_item_list_opt -> emptyrFZp_block_item_list_optz&block_item_list_opt -> block_item_listzdeclaration_list_opt -> emptyr!Zp_declaration_list_optz(declaration_list_opt -> declaration_listz#declaration_specifiers_opt -> emptyr(Zp_declaration_specifiers_optz4declaration_specifiers_opt -> declaration_specifierszdesignation_opt -> emptyrVZp_designation_optzdesignation_opt -> designationzexpression_opt -> emptyrOZp_expression_optzexpression_opt -> expressionzidentifier_list_opt -> emptyr?Zp_identifier_list_optz&identifier_list_opt -> identifier_listz!init_declarator_list_opt -> emptyr#Zp_init_declarator_list_optz0init_declarator_list_opt -> init_declarator_listzinitializer_list_opt -> emptyrTZp_initializer_list_optz(initializer_list_opt -> initializer_listz parameter_type_list_opt -> emptyr-Zp_parameter_type_list_optz.parameter_type_list_opt -> parameter_type_listz%specifier_qualifier_list_opt -> emptyr^Zp_specifier_qualifier_list_optz8specifier_qualifier_list_opt -> specifier_qualifier_listz#struct_declarator_list_opt -> emptyr[Zp_struct_declarator_list_optz4struct_declarator_list_opt -> struct_declarator_listz type_qualifier_list_opt -> emptyr)Zp_type_qualifier_list_optz.type_qualifier_list_opt -> type_qualifier_listz-translation_unit_or_empty -> translation_unitr
Zp_translation_unit_or_emptyzc_parser.pyi�z"translation_unit_or_empty -> emptyi�z(translation_unit -> external_declarationrZp_translation_unit_1i�z9translation_unit -> translation_unit external_declarationZp_translation_unit_2iz+external_declaration -> function_definitionrZp_external_declaration_1iz#external_declaration -> declarationZp_external_declaration_2iz$external_declaration -> pp_directiveZp_external_declaration_3izexternal_declaration -> SEMIZp_external_declaration_4i zpp_directive -> PPHASHrZp_pp_directivei%zIfunction_definition -> declarator declaration_list_opt compound_statementrZp_function_definition_1i.z`function_definition -> declaration_specifiers declarator declaration_list_opt compound_statementZp_function_definition_2i?zstatement -> labeled_statementrIZp_statementiJz!statement -> expression_statementiKzstatement -> compound_statementiLz statement -> selection_statementiMz statement -> iteration_statementiNzstatement -> jump_statementiOz<decl_body -> declaration_specifiers init_declarator_list_optrZp_decl_bodyi]zdeclaration -> decl_body SEMIrZ
p_declarationi�zdeclaration_list -> declarationr"Zp_declaration_listi�z0declaration_list -> declaration_list declarationi�zCdeclaration_specifiers -> type_qualifier declaration_specifiers_optrZp_declaration_specifiers_1i�zCdeclaration_specifiers -> type_specifier declaration_specifiers_optZp_declaration_specifiers_2i�zLdeclaration_specifiers -> storage_class_specifier declaration_specifiers_optZp_declaration_specifiers_3i�zGdeclaration_specifiers -> function_specifier declaration_specifiers_optZp_declaration_specifiers_4i�zstorage_class_specifier -> AUTOrZp_storage_class_specifieri�z#storage_class_specifier -> REGISTERi�z!storage_class_specifier -> STATICi�z!storage_class_specifier -> EXTERNi�z"storage_class_specifier -> TYPEDEFi�zfunction_specifier -> INLINErZp_function_specifieri�ztype_specifier -> VOIDrZp_type_specifier_1i�ztype_specifier -> _BOOLi�ztype_specifier -> CHARi�ztype_specifier -> SHORTi�ztype_specifier -> INTi�ztype_specifier -> LONGi�ztype_specifier -> FLOATi�ztype_specifier -> DOUBLEi�ztype_specifier -> _COMPLEXi�ztype_specifier -> SIGNEDi�ztype_specifier -> UNSIGNEDi�ztype_specifier -> typedef_nameZp_type_specifier_2i�z type_specifier -> enum_specifieri�z+type_specifier -> struct_or_union_specifieri�ztype_qualifier -> CONSTrZp_type_qualifieri�ztype_qualifier -> RESTRICTi�ztype_qualifier -> VOLATILEi�z'init_declarator_list -> init_declaratorr$Zp_init_declarator_list_1i�zBinit_declarator_list -> init_declarator_list COMMA init_declaratori�z*init_declarator_list -> EQUALS initializerZp_init_declarator_list_2i�z+init_declarator_list -> abstract_declaratorZp_init_declarator_list_3i�zinit_declarator -> declaratorr%Zp_init_declaratoriz0init_declarator -> declarator EQUALS initializerizGspecifier_qualifier_list -> type_qualifier specifier_qualifier_list_optrEZp_specifier_qualifier_list_1izGspecifier_qualifier_list -> type_specifier specifier_qualifier_list_optZp_specifier_qualifier_list_2iz/struct_or_union_specifier -> struct_or_union IDrZp_struct_or_union_specifier_1iz3struct_or_union_specifier -> struct_or_union TYPEIDiz[struct_or_union_specifier -> struct_or_union brace_open struct_declaration_list brace_closeZp_struct_or_union_specifier_2iz^struct_or_union_specifier -> struct_or_union ID brace_open struct_declaration_list brace_closeZp_struct_or_union_specifier_3i'zbstruct_or_union_specifier -> struct_or_union TYPEID brace_open struct_declaration_list brace_closei(zstruct_or_union -> STRUCTr Zp_struct_or_unioni1zstruct_or_union -> UNIONi2z-struct_declaration_list -> struct_declarationrCZp_struct_declaration_listi9zEstruct_declaration_list -> struct_declaration_list struct_declarationi:zNstruct_declaration -> specifier_qualifier_list struct_declarator_list_opt SEMIrDZp_struct_declaration_1i?zGstruct_declaration -> specifier_qualifier_list abstract_declarator SEMIZp_struct_declaration_2iez+struct_declarator_list -> struct_declaratorr\Zp_struct_declarator_listiszHstruct_declarator_list -> struct_declarator_list COMMA struct_declaratoritzstruct_declarator -> declaratorr]Zp_struct_declarator_1i|z9struct_declarator -> declarator COLON constant_expressionZp_struct_declarator_2i�z.struct_declarator -> COLON constant_expressioni�zenum_specifier -> ENUM IDrZp_enum_specifier_1i�zenum_specifier -> ENUM TYPEIDi�z=enum_specifier -> ENUM brace_open enumerator_list brace_closeZp_enum_specifier_2i�z@enum_specifier -> ENUM ID brace_open enumerator_list brace_closeZp_enum_specifier_3i�zDenum_specifier -> ENUM TYPEID brace_open enumerator_list brace_closei�zenumerator_list -> enumeratorrAZp_enumerator_listi�z(enumerator_list -> enumerator_list COMMAi�z3enumerator_list -> enumerator_list COMMA enumeratori�zenumerator -> IDrBZp_enumeratori�z+enumerator -> ID EQUALS constant_expressioni�zdeclarator -> direct_declaratorrZp_declarator_1i�z'declarator -> pointer direct_declaratorZp_declarator_2i�zdeclarator -> pointer TYPEIDZp_declarator_3i�zdirect_declarator -> IDrZp_direct_declarator_1i�z-direct_declarator -> LPAREN declarator RPARENZp_direct_declarator_2i�zjdirect_declarator -> direct_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKETZp_direct_declarator_3i�zmdirect_declarator -> direct_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKETZp_direct_declarator_4i�zidirect_declarator -> direct_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKETi�zVdirect_declarator -> direct_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKETZp_direct_declarator_5izHdirect_declarator -> direct_declarator LPAREN parameter_type_list RPARENZp_direct_declarator_6i
zHdirect_declarator -> direct_declarator LPAREN identifier_list_opt RPARENiz(pointer -> TIMES type_qualifier_list_optrZ	p_pointeri)z0pointer -> TIMES type_qualifier_list_opt pointeri*z%type_qualifier_list -> type_qualifierr*Zp_type_qualifier_listiGz9type_qualifier_list -> type_qualifier_list type_qualifieriHz%parameter_type_list -> parameter_listr.Zp_parameter_type_listiMz4parameter_type_list -> parameter_list COMMA ELLIPSISiNz'parameter_list -> parameter_declarationr/Zp_parameter_listiVz<parameter_list -> parameter_list COMMA parameter_declarationiWz:parameter_declaration -> declaration_specifiers declaratorr0Zp_parameter_declaration_1i`zGparameter_declaration -> declaration_specifiers abstract_declarator_optZp_parameter_declaration_2ikzidentifier_list -> identifierr@Zp_identifier_listi�z3identifier_list -> identifier_list COMMA identifieri�z$initializer -> assignment_expressionr>Zp_initializer_1i�z:initializer -> brace_open initializer_list_opt brace_closeZp_initializer_2i�z<initializer -> brace_open initializer_list COMMA brace_closei�z/initializer_list -> designation_opt initializerrUZp_initializer_listi�zFinitializer_list -> initializer_list COMMA designation_opt initializeri�z%designation -> designator_list EQUALSrWZ
p_designationi�zdesignator_list -> designatorrXZp_designator_listi�z-designator_list -> designator_list designatori�z3designator -> LBRACKET constant_expression RBRACKETrYZp_designatori�zdesignator -> PERIOD identifieri�z=type_name -> specifier_qualifier_list abstract_declarator_optrSZp_type_namei�zabstract_declarator -> pointerr&Zp_abstract_declarator_1i�z9abstract_declarator -> pointer direct_abstract_declaratorZp_abstract_declarator_2i�z1abstract_declarator -> direct_abstract_declaratorZp_abstract_declarator_3i�z?direct_abstract_declarator -> LPAREN abstract_declarator RPARENr'Zp_direct_abstract_declarator_1i�zddirect_abstract_declarator -> direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKETZp_direct_abstract_declarator_2i�zIdirect_abstract_declarator -> LBRACKET assignment_expression_opt RBRACKETZp_direct_abstract_declarator_3i�zPdirect_abstract_declarator -> direct_abstract_declarator LBRACKET TIMES RBRACKETZp_direct_abstract_declarator_4iz5direct_abstract_declarator -> LBRACKET TIMES RBRACKETZp_direct_abstract_declarator_5i
z^direct_abstract_declarator -> direct_abstract_declarator LPAREN parameter_type_list_opt RPARENZp_direct_abstract_declarator_6izCdirect_abstract_declarator -> LPAREN parameter_type_list_opt RPARENZp_direct_abstract_declarator_7i zblock_item -> declarationrHZp_block_itemi+zblock_item -> statementi,zblock_item_list -> block_itemrGZp_block_item_listi3z-block_item_list -> block_item_list block_itemi4z@compound_statement -> brace_open block_item_list_opt brace_closer,Zp_compound_statement_1i:z'labeled_statement -> ID COLON statementrJZp_labeled_statement_1i@z=labeled_statement -> CASE constant_expression COLON statementZp_labeled_statement_2iDz,labeled_statement -> DEFAULT COLON statementZp_labeled_statement_3iHz<selection_statement -> IF LPAREN expression RPAREN statementrLZp_selection_statement_1iLzKselection_statement -> IF LPAREN expression RPAREN statement ELSE statementZp_selection_statement_2iPz@selection_statement -> SWITCH LPAREN expression RPAREN statementZp_selection_statement_3iTz?iteration_statement -> WHILE LPAREN expression RPAREN statementrMZp_iteration_statement_1iYzGiteration_statement -> DO statement WHILE LPAREN expression RPAREN SEMIZp_iteration_statement_2i]ziiteration_statement -> FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statementZp_iteration_statement_3iazaiteration_statement -> FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN statementZp_iteration_statement_4iezjump_statement -> GOTO ID SEMIrNZp_jump_statement_1ijzjump_statement -> BREAK SEMIZp_jump_statement_2inzjump_statement -> CONTINUE SEMIZp_jump_statement_3irz(jump_statement -> RETURN expression SEMIZp_jump_statement_4ivzjump_statement -> RETURN SEMIiwz+expression_statement -> expression_opt SEMIrKZp_expression_statementi|z#expression -> assignment_expressionrPZp_expressioni�z4expression -> expression COMMA assignment_expressioni�ztypedef_name -> TYPEIDrZp_typedef_namei�z/assignment_expression -> conditional_expressionr2Zp_assignment_expressioni�zSassignment_expression -> unary_expression assignment_operator assignment_expressioni�zassignment_operator -> EQUALSrRZp_assignment_operatori�zassignment_operator -> XOREQUALi�z!assignment_operator -> TIMESEQUALi�zassignment_operator -> DIVEQUALi�zassignment_operator -> MODEQUALi�z assignment_operator -> PLUSEQUALi�z!assignment_operator -> MINUSEQUALi�z"assignment_operator -> LSHIFTEQUALi�z"assignment_operator -> RSHIFTEQUALi�zassignment_operator -> ANDEQUALi�zassignment_operator -> OREQUALi�z-constant_expression -> conditional_expressionr_Zp_constant_expressioni�z+conditional_expression -> binary_expressionr3Zp_conditional_expressioni�zZconditional_expression -> binary_expression CONDOP expression COLON conditional_expressioni�z$binary_expression -> cast_expressionr5Zp_binary_expressioni�z>binary_expression -> binary_expression TIMES binary_expressioni�z?binary_expression -> binary_expression DIVIDE binary_expressioni�z<binary_expression -> binary_expression MOD binary_expressioni�z=binary_expression -> binary_expression PLUS binary_expressioni�z>binary_expression -> binary_expression MINUS binary_expressioni�z?binary_expression -> binary_expression RSHIFT binary_expressioni�z?binary_expression -> binary_expression LSHIFT binary_expressioni�z;binary_expression -> binary_expression LT binary_expressioni�z;binary_expression -> binary_expression LE binary_expressioni�z;binary_expression -> binary_expression GE binary_expressioni�z;binary_expression -> binary_expression GT binary_expressioni�z;binary_expression -> binary_expression EQ binary_expressioni�z;binary_expression -> binary_expression NE binary_expressioni�z<binary_expression -> binary_expression AND binary_expressioni�z;binary_expression -> binary_expression OR binary_expressioni�z<binary_expression -> binary_expression XOR binary_expressioni�z=binary_expression -> binary_expression LAND binary_expressioni�z<binary_expression -> binary_expression LOR binary_expressioni�z#cast_expression -> unary_expressionr8Zp_cast_expression_1i�z:cast_expression -> LPAREN type_name RPAREN cast_expressionZp_cast_expression_2i�z&unary_expression -> postfix_expressionr4Zp_unary_expression_1i�z-unary_expression -> PLUSPLUS unary_expressionZp_unary_expression_2i�z/unary_expression -> MINUSMINUS unary_expressioni�z2unary_expression -> unary_operator cast_expressioni�z+unary_expression -> SIZEOF unary_expressionZp_unary_expression_3i�z2unary_expression -> SIZEOF LPAREN type_name RPARENi�zunary_operator -> ANDr7Zp_unary_operatori�zunary_operator -> TIMESi�zunary_operator -> PLUSi�zunary_operator -> MINUSi�zunary_operator -> NOTi�zunary_operator -> LNOTi�z(postfix_expression -> primary_expressionr6Zp_postfix_expression_1i�zEpostfix_expression -> postfix_expression LBRACKET expression RBRACKETZp_postfix_expression_2izOpostfix_expression -> postfix_expression LPAREN argument_expression_list RPARENZp_postfix_expression_3iz6postfix_expression -> postfix_expression LPAREN RPARENiz2postfix_expression -> postfix_expression PERIOD IDZp_postfix_expression_4iz6postfix_expression -> postfix_expression PERIOD TYPEIDi
z1postfix_expression -> postfix_expression ARROW IDiz5postfix_expression -> postfix_expression ARROW TYPEIDiz1postfix_expression -> postfix_expression PLUSPLUSZp_postfix_expression_5iz3postfix_expression -> postfix_expression MINUSMINUSizUpostfix_expression -> LPAREN type_name RPAREN brace_open initializer_list brace_closeZp_postfix_expression_6iz[postfix_expression -> LPAREN type_name RPAREN brace_open initializer_list COMMA brace_closeiz primary_expression -> identifierr9Zp_primary_expression_1i!zprimary_expression -> constantZp_primary_expression_2i%z,primary_expression -> unified_string_literalZp_primary_expression_3i)z-primary_expression -> unified_wstring_literali*z.primary_expression -> LPAREN expression RPARENZp_primary_expression_4i/zGprimary_expression -> OFFSETOF LPAREN type_name COMMA identifier RPARENZp_primary_expression_5i3z1argument_expression_list -> assignment_expressionr`Zp_argument_expression_listi;zPargument_expression_list -> argument_expression_list COMMA assignment_expressioni<zidentifier -> IDr:Zp_identifieriEzconstant -> INT_CONST_DECr;Zp_constant_1iIzconstant -> INT_CONST_OCTiJzconstant -> INT_CONST_HEXiKzconstant -> INT_CONST_BINiLzconstant -> FLOAT_CONSTZp_constant_2iRzconstant -> HEX_FLOAT_CONSTiSzconstant -> CHAR_CONSTZp_constant_3iYzconstant -> WCHAR_CONSTiZz(unified_string_literal -> STRING_LITERALr<Zp_unified_string_literaliez?unified_string_literal -> unified_string_literal STRING_LITERALifz*unified_wstring_literal -> WSTRING_LITERALr=Zp_unified_wstring_literalipzBunified_wstring_literal -> unified_wstring_literal WSTRING_LITERALiqzbrace_open -> LBRACEr+Zp_brace_openi{zbrace_close -> RBRACErZZ
p_brace_closei�zempty -> <empty>rZp_emptyi�)Z_tabversionZ
_lr_methodZ
_lr_signatureZ_lr_action_itemsZ
_lr_action�itemsZ_kZ_v�zipZ_xZ_yZ_lr_goto_itemsZ_lr_gotoZ_lr_productions�rcrc�/usr/lib/python3.6/yacctab.py�<module>s�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PK�[�������"__pycache__/yacctab.cpython-36.pycnu�[���3

��]U��@svAdZdZdZddddddd	d
ddd
dddddgddddddddddddddd d!gfddddd	d
dd"d#dd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
d8d9d:d;d<d=d>d?d@ddAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQddRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdnd!dodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g�dddddddddddVdwdddddYd9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dddKd��dd'd(dHdJ�dddWdXd
�dd"�d�d�d�dd0d1d[�d�d�d	�d
dOdddK�d�ddx�d�d
�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�dIdb�d�dd\dddd$ddm�d�dd2d3d4d5d6d7d�d��ddd�d�d�duddL�d�d�d �d!�d"�d#�d$�d%�d&�d'�d�d(�d)d��d*�d+�d,d dP�d-�d.d.d/�d/dUdMd,d-dNd!dnd$dd�ddtdd�dq�d0d�dsdyd�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8�d9�d:�d;�d<�d=�d>dc�d?�d@�dA�dB�dC�dD�dEdQ�dF�dG�dHd�dIdvd�ddpdr�dJ�dK�dL�dMdd�dNdZ�dO�dP�dQdddd�dR�dS�dT�dU�dV�dW�dX�dYdd�dZ�d[�d\dddo�d]g�fddddd	d
ddd
dddddgddddddddddddd d!gfddddd	d
dd"d�dd%d&d'd(d)�d^d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d�d�d_�d`d
d8d;d�d�d�dd�d�dCdDdEdFdGdHdIdJdKdLdMdN�d
dOdPdQddRdT�da�dO�dP�db�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@dnd!�dH�dQdodpdqdsdtdudvdwdxdydzd{d|�dfd��dSd�d�d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d>�dY�d�d�d�dm�dn�do�dp�dq�dr�ds�dt�du�dvd��dwd�dxd��dyd�d�d�d�dd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d�d�d�d�dАd��d�d�d�d�d�d�dِd��d��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�d*d*dddddd*dd*dwddddd*d9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dMdPddRdd*d*d*d\d\ddd\d
�dd"�d�d�d�dd0d1d[�d�d�d[�d	�d
dOdd}d*d*d\d*d*�dhd\d\d\d\d\�di�dj�dg�dk�dld�dhd\d\dd1�dd\�d[�d[d*ddd}dm�d�dd2d3d4d5d6d7d\d}d�d\dd\dzd{d|d}�df�d�d~�d�d�d��d�d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d�d�d\d\d\d#d\dd\d\�dh�dhd\d\d\�d,�d[d d\dPd\dMd,d-dNd!dnd}d}dtd\d\d\d\d\dq�d0dsd\ddg�dD�dEdQ�dFd*d\�dHd}�dId\dpdrd\d\d\dd\d\d#�dQd}d}d}d\d\�dT�dU�dVd\dd}d\�d[�d\d}d}do�d]g�fddddd	d
dd"dd$�dd%d&d'd(d)d*�d^d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
d8d;d�d�d�d@dd�dAdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQddRdT�da�dOdU�dP�db�dcdY�d�dB�dN�dC�d*�d+�d�dd[d\�dd�ded]d^d_d`�d�dadbdcdddedfdgdhdidj�d�d�d�d?�d!�d@dmdnd!dodpdqdsdtdudvdwdxdydzd{d|d}�df�d��d��d�d��d
d�dd�d�d�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�dd�d��d�d�d�d)d�d��dm�dn�do�dp�dr�ds�dt�dud�d�d�d�dxd��dyd�d�d�d�dd�d�d�d��dz�d{�d|�d}d�d�d�d�d�d�d�d�dŐd~dƐd��d��d�d�d�d�d�d�d�d�d�d�dАd��d�d�d�dԐd�d�d�dِd�d�dېd��d��d��d��d�d�d�d�d�d�d�d�d�d�d�d�dRd�d�d�d�dWd�d�d�d�d�d�d��g�d^�d^dddddd�dd��d^dwdddddY�d^d9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<d�dad�d��d*�d*�dddd�d
�dd"�d�d�d�dd0d1d[�d�d�d	�d
dOd�d*�da�da�d*�d�d^d��dh�d�d�d�d�d�d*�di�dj�dg�dd��dk�dl�d�d�d�d�d	�dd�d�d��dd��d�d�dd�d�dh�d*�d*dd1�d�dd\�dadd�d*dm�d�dd2d3d4d5d6d7d��d�dz�d|�d}�d*d��d*d�d�d �d!�d"�d*dzd{d|d}�df�d�d~�d�d�d��d��d*�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d*�d*�d#�d$�d*�d*�d*�d��d)d�d#�d*d�d�dh�dh�d*�d*�d*�d+�d,d �ddP�ddMd,d-dNd!dn�d*�d*dt�d*�d*�d*�d*�d*dq�d0ds�d9�d:�d;�d<�d=�d�d>�d��d�ddg�d?�d@�dA�dB�dC�dD�dEdQ�dF�d^�d�dH�d*�dI�d��d*dpdr�d�dJ�dK�d*�dd�d*d#�dNdZ�dQ�d*�d*�d*�d*�d*�dT�dU�dV�d*�dXd�dY�d*�d*�dZ�d[�d\�d*�d*do�d]�gfddddd	d
dd"dd%d&d'd(d)�d^d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
d8d�d�d�dd�dCdDdEdFdGdHdIdJdKdLdMdNdOdPdQddR�da�dO�dP�db�dcdWdXdY�d�dB�dNdZ�dC�d*�d+�d�dd[d\�dd�ded]d^d_d`dadbdcdddedfdgdhdidj�d�d�d�d?�d!�d@d!dodpdqdsdtdudvdwdxdydzd{d|d}�dfd�d�d�d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�dd�d�d��dd�d�d��dd��d�d)d�d��dm�dn�do�dp�dr�ds�dt�dud�d�dxd��dyd�d�d�d�dd�d�d�d��dz�d{�d|�d}d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dŐd~dƐd��d�d�d�d�d�dАd��d�d�d�d�d�d�dِd�d�dېd��d�dܐd�dݐd��d�d�d�d�d�d�d�d�d�d�dRd�d�d�d�dWd�d�d�d�d�d�d��gd,d,dddddd,ddwddddd,d9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd,d,�dc�dddd
�dd"�d�d�dd,d0d1d[�d�d�d	�d
dOd�dd,�dd,d,�dh�d�di�d�d�d�dd��d�d�di�dj�dg�dd��dk�dl�d�d�d�d�dd�d�d��dd��d�d�dd�d�dh�dr�dsdd1d\d,dd�ddm�d�dd2d3d4d5d6d7d��d�d�dd�ddzd{d|d}�df�d�d~�d�d�d��d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d#�d$�d%�d�d&�d'�d�d�d(�dd,�d)d�d#�dd�d�dh�dh�d�d�d,d �ddP�ddMd,d-dNd!dn�d�ddt�d�d�d�d�ddq�d0dsd�d�d��di�di�di�di�di�di�di�di�di�di�di�di�di�di�di�d9�d:�d;�d<�d=�d�d>d,ddg�dD�dEdQ�dFd,�d�dH�d�dI�ddpdr�d�dJ�dK�d�d�dLd�dM�dd#�dQ�d�d�d�d�d�dT�dU�dV�d�dXd�dY�d�d�dZ�d[�d\�d�ddo�d]�gfddddd	d
d�ddd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�d�dAdBdKdLdMdNdOdPdQ�dFddR�d��da�d*�d�d!�d@dmd!�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�g�d-d-dddddd-ddVdwd-d-d-d-dYd9d-dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd-�d_d-d-dd-d-dWdXd-d[�d�d�d	�d
dOd-dd-�d`d-d-d-d-d-�dd\d-d-d-�d�d-d-d-dm�d�dd2d3d4d5d6d7dd-d-d-d-d-�d*�d+�d,d d-d-dPdSd!dndtd-dq�d0dsd-�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]g�fddddd	d
d�ddd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�d�dAdBdKdLdMdNdOdPdQ�dFddR�d��da�d*�d�d!�d@dmd!�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�g�d.d.dddddd.ddVdwd.d.d.d.dYd9d.dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd.�d_d.d.dd.d.dWdXd.d[�d�d�d	�d
dOd.dd.�d`d.d.d.d.d.�dd\d.d.d.�d�d.d.d.dm�d�dd2d3d4d5d6d7dd.d.d.d.d.�d*�d+�d,d d.d.dPdSd!dndtd.dq�d0dsd.�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]g�fddddd	d
d�ddd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�d�dAdBdKdLdMdNdOdPdQ�dFddR�d��da�d*�d�d!�d@dmd!�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�g�d/d/dddddd/ddVdwd/d/d/d/dYd9d/dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd/�d_d/d/dd/d/dWdXd/d[�d�d�d	�d
dOd/dd/�d`d/d/d/d/d/�dd\d/d/d/�d�d/d/d/dm�d�dd2d3d4d5d6d7dd/d/d/d/d/�d*�d+�d,d d/d/dPdSd!dndtd/dq�d0dsd/�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]g�fddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyd0d0dddddd0ddVdwd0d0d0d0dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd0�d_d0d0dd0dWdX�d�d�d	�d
dOd0dd0�d`d0d0d0�dd0d0d0�d�d0d0d0dm�d�dd2d3d4d5d6d7dd0d0d0d0d0�d*�d+�d,d d0d0dPdSd!dndtd0dq�d0dsd0�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyd1d1dddddd1ddVdwd1d1d1d1dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd1�d_d1d1dd1dWdX�d�d�d	�d
dOd1dd1�d`d1d1d1�dd1d1d1�d�d1d1d1dm�d�dd2d3d4d5d6d7dd1d1d1d1d1�d*�d+�d,d d1d1dPdSd!dndtd1dq�d0dsd1�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyddddddddddVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd�d_dddddWdX�d�d�d	�d
dOddd�d`ddd�dddd�d�ddddm�d�dd2d3d4d5d6d7dddddd�d*�d+�d,d dddPdSd!dndtddq�d0dsd�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQddR�d��da�ddmdsdtdudvdwdxdydzd{d|d�d1d�d�d�dd�dd�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�ghd3d3dddddd3ddVdwd3d3d3d3dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd3�d_d3d3dd3dWdX�d�d�d	�d
dOdd3�d`d3d3�dd3dm�d�dd2d3d4d5d6d7dd3�d*�d+�d,d dPd!dndtd3dq�d0dsd3�dB�dC�dD�dEdQ�dF�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]ghfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQddR�d��da�ddmdsdtdudvdwdxdydzd{d|d�d1d�d�d�dd�dd�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�ghd4d4dddddd4ddVdwd4d4d4d4dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd4�d_d4d4dd4dWdX�d�d�d	�d
dOdd4�d`d4d4�dd4dm�d�dd2d3d4d5d6d7dd4�d*�d+�d,d dPd!dndtd4dq�d0dsd4�dB�dC�dD�dEdQ�dF�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]ghfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�d�dAdBdLdMdNdOdPdQddR�d��da�d�d@dmd!dsdtdudvdwdxdydzd{d|d�d1d�d�d�dd�dd�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�gld+d+dddddd+ddVdwd+d+d+d+dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd+�d_d+d+d�d!d+dWdXd[�d�d�d	�d
dOdd+�d`d+d+�du�dd\d+dm�d�dd2d3d4d5d6d7dd+�d*�d+�d,d dPd!dndtd+dq�d0dsd+�dB�dC�dD�dEdQ�dF�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]glfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQddR�d��da�ddmdsdtdudvdwdxdydzd{d|d�d1d�d�d�dd�dd�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�ghd5d5dddddd5ddVdwd5d5d5d5dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd5�d_d5d5dd5dWdX�d�d�d	�d
dOdd5�d`d5d5�dd5dm�d�dd2d3d4d5d6d7dd5�d*�d+�d,d dPd!dndtd5dq�d0dsd5�dB�dC�dD�dEdQ�dF�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]ghfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQddR�d��da�ddmdsdtdudvdwdxdydzd{d|d�d1d�d�d�dd�dd�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�ghd6d6dddddd6ddVdwd6d6d6d6dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd6�d_d6d6dd6dWdX�d�d�d	�d
dOdd6�d`d6d6�dd6dm�d�dd2d3d4d5d6d7dd6�d*�d+�d,d dPd!dndtd6dq�d0dsd6�dB�dC�dD�dEdQ�dF�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]ghfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQddR�d��da�ddmdsdtdudvdwdxdydzd{d|d�d1d�d�d�dd�dd�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�ghd7d7dddddd7ddVdwd7d7d7d7dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd7�d_d7d7dd7dWdX�d�d�d	�d
dOdd7�d`d7d7�dd7dm�d�dd2d3d4d5d6d7dd7�d*�d+�d,d dPd!dndtd7dq�d0dsd7�dB�dC�dD�dEdQ�dF�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]ghfddddd	d
d�ddd$�dd%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d�d�d_�d`d
�dd�d9d;d�dd�dAdBdIdJdKdLdMdNdOdPdQ�dFddR�d�dT�da�d*�ddmdnd!�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d>�dY�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�g�d%d%dddddd%ddVdBdwd%d%d%d%dYd9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dNdQddRdd%�d_d%dBd%dd%dWdX�dd0d1d[�d�d�d	�d
dOd%dd%�d`dBd%d%d%�d�dd\d%d%d%�d�d%d%d%dm�d�dd2d3d4d5d6d7dd%d�d�d%d%d%d%�d*�d+�d,d d%d%dPdSd!dndtd%dq�d0dsd%�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]g�fddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gyd�d�dddddd�ddVdwd�d�d�d�dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dd��d_d�d�dd�dWdX�d�d�d	�d
dOd�dd��d`d�d�d��dd�d�d��d�d�d�d�dm�d�dd2d3d4d5d6d7dd�d�d�d�d��d*�d+�d,d d�d�dPdSd!dndtd�dq�d0dsd��dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gy�d_�d_ddddd�d_ddVdw�d_�d_�d_�d_dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<d�d_�d_�d_�d_d�d_dWdX�d�d�d	�d
dO�d_d�d_�d`�d_�d_�d_�d�d_�d_�d_�d��d_�d_�d_dm�d�dd2d3d4d5d6d7d�d_�d_�d_�d_�d_�d*�d+�d,d �d_�d_dPdSd!dndt�d_dq�d0ds�d_�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyfddddd	d
d�ddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d
�dd�d9d�dd�dAdBdMdNdOdPdQ�dFddR�d��da�d*�ddm�dU�dV�d\�d]dpdqdsdtdudvdwdxdydzd{d|d�d1�d�d�d�d	d�d�d�d�d��d�d��d�dd�d�d�d�d�d��d�d�d�d�d�d�dАd-�d.d�d�d�d�d�d�d�d�d�d�d�d�d�d�gy�d`�d`ddddd�d`ddVdw�d`�d`�d`�d`dYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<d�d`�d_�d`�d`d�d`dWdX�d�d�d	�d
dO�d`d�d`�d`�d`�d`�d`�d�d`�d`�d`�d��d`�d`�d`dm�d�dd2d3d4d5d6d7d�d`�d`�d`�d`�d`�d*�d+�d,d �d`�d`dPdSd!dndt�d`dq�d0ds�d`�dB�dC�dD�dEdQ�dFdT�da�dH�dIdpdr�dNdZ�dQ�dT�dU�dV�d[�d\do�d]gyf�dd$d*d�d�d_�d`�d�d�dd�d9d�ddAdBdMdNdOdPdQdR�d��d/�dO�ddmdsdtdudvdwdxdydzd{d|d��dm�dn�dod�d�ddd�d�d�d�d�d�d��d~�d�d�d�d�d�d�d�d�dِd��d�dܐd��d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�gUddVdYdOdOddRdOd
d�d_ddOddWdXdOdO�d	dOdOdO�d`dOdOd�ddOdm�d�dd2d3d4d5d6d7dOd#dOd�d*�d+d d!dndOdOdtdq�d0dsdOddg�dB�dC�dHdO�dIdpdrdOdOdOddOd#�dNdZ�dQdOdOdO�dT�dU�dVddO�d[�d\dOdOdo�d]gUfd"d$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d8d9dAdBdCdDdEdFdGdHdMdNdPdQdSdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjdm�d[d}d�d�d�d�d�d�d�d�d��d��d�d�d�d�dd�d�d�d�d�d�dƐd��d�d�d�d�d�d�d�d�d�d�dݐd�d�d�d�d�d�gkd�dVdwdddddYd9dEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<d��dOdWdXd
�dd"�d�d�d�d�d�d
dO�dO�d7�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd��d�dxd��d#�d$�d%�d&�d'�d�d(�d)d��d�dh�d*�d+�d,d dP�d9�d:�d;�d<�d=�d>didk�dB�dC�dD�dEdQ�dF�dJ�dK�dL�dMdj�dNdZ�dX�dY�dZgkfd"d$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d8d;d�d@dAdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdT�dadU�dbdYd[d\d]d^d_d`dadbdcdddedfdgdhdidj�ddmdnd!dodpdqd}d�d�d�d�d�d��d)d�d��d��d�d�d�d�dd�d�d�d�d�d�d�d�d�d�dƐd��d��d�d��d�d�d�d�d�d�d�d�d�d�d�dېd��d�d�d�d�d�d�d�g�d�d�dwdddddYd9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<d�d�d��dd�d
�dd"�d�d�d�dd0d1d[�d�d�d	�d
dOd�d��dd��d�dd��d�d�d�d�dd�d�d��dd��d�d�dd��dp�d�dd\d�ddd��d�d �d!�d"�d#�d$d��d)d��dpdh�d*�d+�d,d dPdMd,d-dN�d9�d:�d;�d<�d=�d>d�d��dpdidk�d?�d@�dA�dB�dC�dD�dEdQ�dF�dJ�dK�dpdj�dNdZ�dX�dp�dY�dZg�fd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d9d;d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdPdQdSdTdU�dD�dE�dbdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdl�d�ddmdnd!�dI�dT�d[dpdqd}dd�d�d�d�d��d2�d3�d4�d5d�d�d�d�d�d�d�d�d��d�d)d�d�dd�d��d��d�d��dwdd�d�d�d�d�d�d�d�d�d��d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��d��d�d��d�d�d�d�d�dƐd��d��d�dǐd�d�d�d�d�d̐d�d�dΐd��d�d�d�dѐd�dՐd��d�d�d�d�d�d�d�d�d�d�d�d��d��d��d�d�d�d�g�dVdwdddddYd9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<dK�d�dPdHdJ�ddWdXd
�dd"�d�d�d�dd0d1d[�d�d�d
dOdK�d�d�d1d]ddx�d�d
�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�dIdb�dv�d��d�dd\�dw�db�d�ddd��d{dudL�d�d�d d_d`dd�d!�d"�d#�d$�d%�d&�d'�d�d(�d{d�d)d��d�d*�d+�dw�dw�d,�d�d dP�d��d/dUdMd,d-dNd��d{d^dy�d{d�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8�d{�d��d9d��d:�d;�d<�d=�d>dl�d�d�dcde�d?�d@�dA�dB�dCda�dD�dE�dc�d�dQ�dF�dG�d{dv�d{�d{�dJ�dK�dL�dMdd�dNdZ�dO�dP�dSd��d�df�d{�dX�dY�dZg�fd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d;d�d@d�dAdBdCdDdEdFdGdH�ddIdJdKdLdMdNdPdQdT�dadU�dG�d�d�d,�dD�dE�dbdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidj�d�d"�dA�d �d�ddmdnd!dpdqdd�d�d��d2�d3�d4�d5d�d��dd�d�d�d�d�d�d��d�d�d)d�d��d�d�d�d�dd�d�d�d�d�d��d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��d�d��d�d�d�d�dŐd��d��d�dƐd��d��d�d�d�d�d�d̐d�d�d�d�dАd�dՐd��d�d�d�d�d�d�d�d�d��d��d��dRd�d�dW�d�d�d�g�dVdwdddddYd9ddEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDd�d8d:d;d<�dd�dddWdXd
�dd"�d�d�ddm�dd0d1d[�d�d�d
dO�dd�dd�d��d^d+�ddd]ddx�d�d
�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�dd�d�d%d&�d��d�dd\dd�ddu�d�d d_d`dd�d!�d"d��d#�d$�d%�d&�d'�d�d(�d~d�d�d)d�dʐd*�d+�d,d dPdMd,d-dNd$�ded^dyd�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8dېd9d��d:�d;�d<�d=�d��d�dܐd>dl�dd�d?�d@�dA�dB�dCda�dD�dEdQ�dFd�dvd�d�dJ�dK�dL�dM�dNdZ�dSd�d�d�d�dX�dYdd��dZd�g�fd$d%d*d-d.d/d0d1dddddddddddd2dAdBdMdNdPdQdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdmdodpdqd}�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d��d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dАd�d�d�d�d�d�d�d�d�d�d�d�gwdVdwdYdEdFdGd=d�d�d>d�d?d@dd�d�dAdBdCdDdWdX�d�d�d
dOdx�d�d
�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd��d�dyddd�d�du�d#�d$�d%�d&�d'�d�d(�d)d��d*�d+�d,d dP�d�dMd,d-dNd�d�dy�d�d�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8�d9�d:�d;�d<�d=�d>�dB�dC�dD�dEdQ�dF�dydv�dJ�dK�dL�dM�dNdZ�dS�dX�dY�dZgwfd-d.d/d�d�dd�dJdKdLdOdR�dO�dcdY�d�dB�dN�dC�d*�d+�d�dd[d\�dd�ded]d^d_d`dadbdcdddedfdgdhdidj�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|d}�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�dd�d��d�d�dd�d��dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d�d�d�d�d�dŐd~dƐd�d��d�d�d�d�d�d�dِd�d�dېd��d��d��d��d�d�d�d�d�d�d�d�d�d�dRd�d�d�d�dWd�d�d�d�d�d�d�g�dEdFdG�d�dddd0d1d[�d	�d�d�dhd��d�d�d�d�d�di�dj�dg�dd��dk�dl�d�d�d�d�dd�d�d��dd��d�d�dd�d�dh�d�ddd1d\�ddm�d�dd2d3d4d5d6d7d��d�d�d�ddzd{d|d}�df�d�d~�d�d�d��d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d#�d$�d�d�d�d)d�d#�dd�d�dh�dh�d�dd �d�dd!dn�d�ddt�d�d�d�d�ddq�d0ds�d9�d:�d;�d<�d=�d�d>ddg�d�dH�d�dI�ddpdr�d�dJ�dK�d�dd�dd#�dQ�d�d�d�d�d�dT�dU�dV�d�dXd�dY�d�d�dZ�d[�d\�d�ddo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dcdY�d�dB�dN�dC�d*�d+�d�dd[d\�dd�ded]d^d_d`dadbdcdddedfdgdhdidj�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|d}�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�dd�d��d�d�dd�d��dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d�d�d�d�d�dŐd~dƐd�d��d�d�d�d�d�d�dِd�d�dېd��d��d��d��d�d�d�d�d�d�d�d�d�d�dRd�d�d�d�dWd�d�d�d�d�d�d�g�dEdFdG�dB�dBddd0d1d[�d	�dB�dB�dhd��dB�dB�dB�dB�dB�di�dj�dg�dd��dk�dl�d�d�d�d�dd�d�d��dd��d�d�dd�d�dh�dB�dBdd1d\�dBdm�d�dd2d3d4d5d6d7d��dB�dB�dB�dBdzd{d|d}�df�d�d~�d�d�d��d��dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�dB�d#�d$�dB�dB�dB�d)d�d#�dBd�dB�dh�dh�dB�dBd �dB�dBd!dn�dB�dBdt�dB�dB�dB�dB�dBdq�d0ds�d9�d:�d;�d<�d=�dB�d>ddg�dB�dH�dB�dI�dBdpdr�dB�dJ�dK�dB�dBd�dBd#�dQ�dB�dB�dB�dB�dB�dT�dU�dV�dB�dXd�dY�dB�dB�dZ�d[�d\�dB�dBdo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdG�dC�dCddd0d1d[�d	�dC�dC�dh�dC�dC�dC�dC�dC�di�dj�dg�dk�dld�dh�dC�dCdd1d\�dCdm�d�dd2d3d4d5d6d7�dC�dC�dC�dCdzd{d|d}�df�d�d~�d�d�d��d��dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dC�dCd#�dCd�dC�dh�dh�dC�dCd �dC�dCd!dn�dC�dCdt�dC�dC�dC�dC�dCdq�d0ds�dCddg�dC�dH�dC�dI�dCdpdr�dC�dC�dCd�dCd#�dQ�dC�dC�dC�dC�dC�dT�dU�dV�dCd�dC�dC�d[�d\�dC�dCdo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dcdWdXdY�d�dB�dNdZ�dC�d*�d+�d�dd[d\�dd�ded]d^d_d`dadbdcdddedfdgdhdidj�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|d}�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�dd�d�d��dd�d�d��dd��dd�d��dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dŐd~dƐd�d��d�d�d�d�d�d�dِd�d�dېd��d�dܐd�dݐd��d�d�d�d�d�d�d�d�d�d�dRd�d�d�d�dWd�d�d�d�d�d�d�g�dEdFdG�d�dddd0d1d[�d	�d�d�dh�d�d$�d�d�d�dd��d�d�di�dj�dg�dd��dk�dl�d�d�d�d�dd�d�d��dd��d�d�dd�d�dh�d�ddd1d\�ddm�d�dd2d3d4d5d6d7d��d�d�d�ddzd{d|d}�df�d�d~�d�d�d��d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d#�d$�d%�d�d&�d'�d�d�d(�d�d)d�d#�dd�d�dh�dh�d�dd �d�dd!dn�d�ddt�d�d�d�d�ddq�d0dsd�d�d�dd�d�d�d��d1�d2�d3�d4�d5d��d$�d$�d$�d$�d9�d:�d;�d<�d=�d�d>ddg�d�dH�d�dI�ddpdr�d�dJ�dK�d�d�dLd�dM�dd#�dQ�d�d�d�d�d�dT�dU�dV�d�dXd�dY�d�d�dZ�d[�d\�d�ddo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dcdWdXdY�d�dB�dNdZ�dC�d*�d+�d�dd[d\�dd�ded]d^d_d`dadbdcdddedfdgdhdidj�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|d}�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�dd�d�d��dd�d�d��dd��dd�d��dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dŐd~dƐd�d��d�d�d�d�d�d�dِd�d�dېd��d�dܐd�dݐd��d�d�d�d�d�d�d�d�d�d�dRd�d�d�d�dWd�d�d�d�d�d�d�g�dEdFdG�d+�d+ddd0d1d[�d	�d+�d+�dh�d�dl�d�d+�d+�d+d��d+�d+�di�dj�dg�dd��dk�dl�d�d�d�d�dd�d�d��dd��d�d�dd�d�dh�d+�d+dd1d\�d+dm�d�dd2d3d4d5d6d7d��d+�d+�d+�d+dzd{d|d}�df�d�d~�d�d�d��d��d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d+�d#�d$�d%�d+�d&�d'�d�d+�d(�d+�d)d�d#�d+d�d+�dh�dh�d+�d+d �d+�d+d!dn�d+�d+dt�d+�d+�d+�d+�d+dq�d0dsd�d�d�dd��dl�dl�dl�dl�dl�dl�dl�dl�dl�dl�dl�dl�dl�d9�d:�d;�d<�d=�d+�d>ddg�d+�dH�d+�dI�d+dpdr�d+�dJ�dK�d+�d+�dLd�dM�d+d#�dQ�d+�d+�d+�d+�d+�dT�dU�dV�d+�dXd�dY�d+�d+�dZ�d[�d\�d+�d+do�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dcdWdXdY�d�dB�dNdZ�dC�d*�d+�d�dd[d\�dd�ded]d^d_d`dadbdcdddedfdgdhdidj�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|d}�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�dd�d�d��dd�d�d��dd��dd�d��dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dŐd~dƐd�d��d�d�d�d�d�d�dِd�d�dېd��d�dܐd�dݐd��d�d�d�d�d�d�d�d�d�d�dRd�d�d�d�dWd�d�d�d�d�d�d�g�dEdFdG�d�dddd0d1d[�d	�d�d�dh�d�d�d�d�d�dd��d�d�di�dj�dg�dd��dk�dl�d�d�d�d�dd�d�d��dd��d�d�dd�d�dh�d�ddd1d\�ddm�d�dd2d3d4d5d6d7d��d�d�d�ddzd{d|d}�df�d�d~�d�d�d��d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d#�d$�d%�d�d&�d'�d�d�d(�d�d)d�d#�dd�d�dh�dh�d�dd �d�dd!dn�d�ddt�d�d�d�d�ddq�d0dsd�d�d�dd��d�d�d�d�d�d�d�d�d�d�d�d�d�d9�d:�d;�d<�d=�d�d>ddg�d�dH�d�dI�ddpdr�d�dJ�dK�d�d�dLd�dM�dd#�dQ�d�d�d�d�d�dT�dU�dV�d�dXd�dY�d�d�dZ�d[�d\�d�ddo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdG�dd�ddddd0d1d[�d	�dd�dd�dh�dd�dd�dd�dd�dd�di�dj�dg�dk�dld�dh�dd�dddd1d\�dddm�d�dd2d3d4d5d6d7�dd�dd�dd�dddzd{d|d}�df�d�d~�d�d�d��d��dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�ddd#�ddd�dd�dh�dh�dd�ddd �dd�ddd!dn�dd�dddt�dd�dd�dd�dd�dddq�d0ds�ddddg�dd�dH�dd�dI�dddpdr�dd�dd�ddd�ddd#�dQ�dd�dd�dd�dd�dd�dT�dU�dV�ddd�dd�dd�d[�d\�dd�dddo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdG�de�deddd0d1d[�d	�de�de�dh�de�de�de�de�de�di�dj�dg�dk�dld�dh�de�dedd1d\�dedm�d�dd2d3d4d5d6d7�de�de�de�dedzd{d|d}�df�d�d~�d�d�d��d��de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�de�ded#�ded�de�dh�dh�de�ded �de�ded!dn�de�dedt�de�de�de�de�dedq�d0ds�deddg�de�dH�de�dI�dedpdr�de�de�ded�ded#�dQ�de�de�de�de�de�dT�dU�dV�ded�de�de�d[�d\�de�dedo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdG�d��d�ddd0d1d[�d	�d��d��dh�d��d��d��d��d��di�dj�dg�dk�dld�dh�d��d�dd1d\�d�dm�d�dd2d3d4d5d6d7�d��d��d��d�dzd{d|d}�df�d�d~�d�d�d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d�d#�d�d�d��dh�dh�d��d�d �d��d�d!dn�d��d�dt�d��d��d��d��d�dq�d0ds�d�ddg�d��dH�d��dI�d�dpdr�d��d��d�d�d�d#�dQ�d��d��d��d��d��dT�dU�dV�d�d�d��d��d[�d\�d��d�do�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdadaddd0d1d[�d	dada�dhdadadadada�di�dj�dg�dk�dld�dhdadadd1d\dadm�d�dd2d3d4d5d6d7dadadadadzd{d|d}�df�d�d~�d�d�d��d�dadadadadadadadadadadadadadadadadadadadadadadadad#dadda�dh�dhdadad dadad!dndadadtdadadadadadq�d0dsdaddgda�dHda�dIdadpdrdadadaddad#�dQdadadadada�dT�dU�dVdaddada�d[�d\dadado�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdbdbddd0d1d[�d	dbdb�dhdbdbdbdbdb�di�dj�dg�dk�dld�dhdbdbdd1d\dbdm�d�dd2d3d4d5d6d7dbdbdbdbdzd{d|d}�df�d�d~�d�d�d��d�dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd#dbddb�dh�dhdbdbd dbdbd!dndbdbdtdbdbdbdbdbdq�d0dsdbddgdb�dHdb�dIdbdpdrdbdbdbddbd#�dQdbdbdbdbdb�dT�dU�dVdbddbdb�d[�d\dbdbdo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdcdcddd0d1d[�d	dcdc�dhdcdcdcdcdc�di�dj�dg�dk�dld�dhdcdcdd1d\dcdm�d�dd2d3d4d5d6d7dcdcdcdcdzd{d|d}�df�d�d~�d�d�d��d�dcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd#dcddc�dh�dhdcdcd dcdcd!dndcdcdtdcdcdcdcdcdq�d0dsdcddgdc�dHdc�dIdcdpdrdcdcdcddcd#�dQdcdcdcdcdc�dT�dU�dVdcddcdc�d[�d\dcdcdo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGddddddd0d1d[�d	dddd�dhdddddddddd�di�dj�dg�dk�dld�dhdddddd1d\dddm�d�dd2d3d4d5d6d7dddddddddzd{d|d}�df�d�d~�d�d�d��d�ddddddddddddddddddddddddddddddddddddddddddddddddd#ddddd�dh�dhddddd ddddd!dndddddtdddddddddddq�d0dsddddgdd�dHdd�dIdddpdrdddddddddd#�dQdddddddddd�dT�dU�dVddddddd�d[�d\dddddo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdededdd0d1d[�d	dede�dhdedededede�di�dj�dg�dk�dld�dhdededd1d\dedm�d�dd2d3d4d5d6d7dededededzd{d|d}�df�d�d~�d�d�d��d�dedededededededededededededededededededededededed#dedde�dh�dhdeded deded!dndededtdedededededq�d0dsdeddgde�dHde�dIdedpdrdedededded#�dQdedededede�dT�dU�dVdeddede�d[�d\dededo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdfdfddd0d1d[�d	dfdf�dhdfdfdfdfdf�di�dj�dg�dk�dld�dhdfdfdd1d\dfdm�d�dd2d3d4d5d6d7dfdfdfdfdzd{d|d}�df�d�d~�d�d�d��d�dfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd#dfddf�dh�dhdfdfd dfdfd!dndfdfdtdfdfdfdfdfdq�d0dsdfddgdf�dHdf�dIdfdpdrdfdfdfddfd#�dQdfdfdfdfdf�dT�dU�dVdfddfdf�d[�d\dfdfdo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdgdgddd0d1d[�d	dgdg�dhdgdgdgdgdg�di�dj�dg�dk�dld�dhdgdgdd1d\dgdm�d�dd2d3d4d5d6d7dgdgdgdgdzd{d|d}�df�d�d~�d�d�d��d�dgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgd#dgddg�dh�dhdgdgd dgdgd!dndgdgdtdgdgdgdgdgdq�d0dsdgddgdg�dHdg�dIdgdpdrdgdgdgddgd#�dQdgdgdgdgdg�dT�dU�dVdgddgdg�d[�d\dgdgdo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�de�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdhdhddd0d1d[�d	dhdh�dhdhdhdhdhdh�di�dj�dg�dk�dld�dhdhdhdd1d\dhdm�d�dd2d3d4d5d6d7dhdhdhdhdzd{d|d}�df�d�d~�d�d�d��d�dhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhd#dhddh�dh�dhdhdhd dhdhd!dndhdhdtdhdhdhdhdhdq�d0dsdhddgdh�dHdh�dIdhdpdrdhdhdhddhd#�dQdhdhdhdhdh�dT�dU�dVdhddhdh�d[�d\dhdhdo�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�ded_di�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�dd��dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdididdd0d1d[�d	didi�dhdididididi�di�dj�dg�dk�dld��dd�dhdididd1d\didm�d�dd2d3d4d5d6d7dididididzd{d|d}�df�d�d~�d�d�d��d�didididididididididididididididididididididididi�d)d#diddi�dh�dhdidid didid!dndididtdidididididq�d0dsdiddgdi�dHdi�dIdidpdrdidididdid#�dQdididididi�dT�dU�dVdiddidi�d[�d\didido�d]g�fd-d.d/d�d�dd�dJdKdLdOdR�dO�dc�d�dB�dN�dC�d*�d+�d�d�dd�ded`dj�d�d�d�d?�d!�d@d!dsdtdudvdwdxdydzd{d|�dfd�d��d6�d7�d8�d�dM�d�d%�d&�d'�d(�dL�dg�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�dd��dm�dn�do�dp�dr�ds�dt�dud�dx�dydd�d�d�d��dz�d{�d|�d}d�d�d�d��d~�d�d��d�d�d�d�d�d�dِd��d��d��d��d��d�d�d�d�d�d�d�d�d�d�dR�d�d�dWd�d�d�d�d�d�g�dEdFdGdjdjddd0d1d[�d	djdj�dhdjdjdjdjdj�di�dj�dg�dk�dld�d�d�dhdjdjdd1d\djdm�d�dd2d3d4d5d6d7djdjdjdjdzd{d|d}�df�d�d~�d�d�d��d�djdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjd�d#djddj�dh�dhdjdjd djdjd!dndjdjdtdjdjdjdjdjdq�d0dsdjddgdj�dHdj�dIdjdpdrdjdjdjddjd#�dQdjdjdjdjdj�dT�dU�dVdjddjdj�d[�d\djdjdo�d]g�fd-d.d/d�d�dJdL�d��dc�d��d�dVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidj�d�d?�d@d!d�d�d�d�d�d�d�d�d�d��d��dr�d��dsdd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��d�d�d�d�d�d�dƐd��d��d�d�d�d�d�d�d�d�d�d�gZdEdFdGddd0d[d�d�dddx�d�d
�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�ddd1d\du�d#�d$�d%�d&�d'�d�d(�d)d�d�d�d�d�d d�dyd�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8dڐd9�d:�d;�d<�d=�d>�d�d�d�dv�dJ�dK�dL�dM�dS�dX�dY�dZgZfddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	�df�dfdm�d�dd2d3d4d5d6d7�dfd d!dn�df�dfdtdq�d0ds�dH�df�dIdpdr�dQ�df�df�df�dT�dU�dV�df�d[�d\�df�dfdo�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	�d��d�dm�d�dd2d3d4d5d6d7�d�d d!dn�d��d�dtdq�d0ds�dH�d��dIdpdr�dQ�d��d��d��dT�dU�dV�d��d[�d\�d��d�do�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	�d��d�dm�d�dd2d3d4d5d6d7�d�d d!dn�d��d�dtdq�d0ds�dH�d��dIdpdr�dQ�d��d��d��dT�dU�dV�d��d[�d\�d��d�do�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	�d��d�dm�d�dd2d3d4d5d6d7�d�d d!dn�d��d�dtdq�d0ds�dH�d��dIdpdr�dQ�d��d��d��dT�dU�dV�d��d[�d\�d��d�do�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g+d�d	�d��d�dm�d�dd2d3d4d5d6d7�d�d d!dn�d��d�dt�d�dq�d0ds�dH�d��dIdpdr�dQ�d��d��d��dT�dU�dV�d��d[�d\�d��d�do�d]g+fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	d�d�dm�d�dd2d3d4d5d6d7d�d d!dnd�d�dtdq�d0ds�dHd��dIdpdr�dQd�d�d��dT�dU�dVd��d[�d\d�d�do�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	�d
�d
dm�d�dd2d3d4d5d6d7�d
d d!dn�d
�d
dtdq�d0ds�dH�d
�dIdpdr�dQ�d
�d
�d
�dT�dU�dV�d
�d[�d\�d
�d
do�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	�dS�dSdm�d�dd2d3d4d5d6d7�dSd d!dn�dS�dSdtdq�d0ds�dH�dS�dIdpdr�dQ�dS�dS�dS�dT�dU�dV�dS�d[�d\�dS�dSdo�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	d�d�dm�d�dd2d3d4d5d6d7d�d d!dnd�d�dtdq�d0ds�dHd��dIdpdr�dQd�d�d��dT�dU�dVd��d[�d\d�d�do�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	d�d�dm�d�dd2d3d4d5d6d7d�d d!dnd�d�dtdq�d0ds�dHd��dIdpdr�dQd�d�d��dT�dU�dVd��d[�d\d�d�do�d]g*fddOdRdsdtdudvdwdxdydzd{d|d�ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g*d�d	d�d�dm�d�dd2d3d4d5d6d7d�d d!dnd�d�dtdq�d0ds�dHd��dIdpdr�dQd�d�d��dT�dU�dVd��d[�d\d�d�do�d]g*fddOdRdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdl�d�dI�dT�d[�d\�d]�d0drdsdtdudvdwdxdydzd{d|d�d�d�d�d�d�d�d�d�d d�dm�d��d��dwd�d��d��d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dǐd�d��d��d��d-�d.d�d�d�d�d�d�d�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d�d�d�g}d�d	ddx�d�d
�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�dbdd�db�d�d�d�ddd	dm�d�dd2d3d4d5d6d7�d#�d$�d%�d&�d'�d�d(�d)d�dd*d)dd�d�d dddSd!dnd�dtdq�d0dsdyd�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8�d9�d:�d;�d<�d=�d>dcdde�dc�d�dT�da�dH�dIdpdr�dJ�dK�dL�dMdd�dQ�dSddf�dT�dU�dV�dXd�dY�dZ�d[�d\do�d]g}fdOdYd[d\d]d^d_d`dadbdcdddedfdgdhdidj�dd}d�d�d�d��d��d�dd�d�d�d�d�dƐd�d��d�d�dېd��d�d�d�d�d�g,�d	�d>�dd��d�d�d�d�dd�d�d��dd��d�d�dd��dqd��d#�d$�d)d��dqdhd �d9�d:�d;�d<�d=�d>�dqdidk�dJ�dK�dqdj�dX�dq�dY�dZg,fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�dh�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�dj�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d��dj�dj�dj�dj�dj�dj�dj�dj�dj�dj�dj�dj�dj�dj�dj�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�dk�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d��dk�dk�dk�dk�dk�dk�dk�dk�dk�dk�dk�dk�dk�dk�dk�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�dJ�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d��dJ�dJ�dJ�dJ�dJ�dJ�dJ�dJ�dJ�dJ�dJ�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�dK�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d��dK�dK�dK�dK�dK�dK�dK�dK�dK�dK�dK�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d9�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d9�d9�d9�d9�d9�d9�d9�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d:�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d:�d:�d:�d:�d:�d:�d:�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d;�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d;�d;�d;�d;�d;�d;�d;�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d<�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d<�d<�d<�d<�d<�d<�d<�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d=�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d4�d5�d=�d=�d=�d=�d=�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d#�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d4�d5�d#�d#�d#�d#�d#�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�dX�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�dX�dX�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�dZ�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d4�d5d��dZ�d6�dZ�dZ�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�g>�d�d�dd��dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d d�d�d�dd�d�d�d��d1�d2�d3�d4�d5d�d��d6�d7�d8�d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg>fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�d8�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�d�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�dM�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�d�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�d%�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�d&�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�d'�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�d(�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�dL�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�d�d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�d�d�g*�dg�d�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d%�d&�d'�d�d(�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dL�dM�dX�dY�dZg*fdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}d�d�d�d�dd�d�d�d�d�d�d�d�d�d�d�g"�dY�dd��d�d�d�d�dd�d�d��dd��d�d�dd�d��d#�d$�d)d�d �d9�d:�d;�d<�d=�d>�dJ�dK�dX�dY�dZg"fdwdxdydzd{d|ddd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�gd2d3d4d5d6d7d d!dtdq�d0ds�dH�dIdpdr�dQd�dU�dV�d[�d\do�d]gf�d1g�d�gf�dĜaZiZx^ej�D]R\ZZxDeeded�D].\Z	Z
e	ek��r�iee	<e
ee	e<��q�W��q�W[dgdgfdgdgfd�dd"d&d'd(d)d,d8d9d�d�d�d�dR�da�db�d�d�d�d?�d!dodpdqdsd��d)d�d�d��d��dd�dאd�d�d�d�d�dR�d�d�dWd�d�g.d�dd<dDdDdDdDdJd<�d�d�d�dJ�d dr�d�d4�dm�d��d�d�dJd�d�d�d�d��d4d�d�d��d�d�d�d��d�d�d�d�d�d��d�d�d�d�d�g.fddgdd
gfddgddgfdd�d�dd9dRdsd�gd	d	d��d�d�dudud�gfddgd
d
gfddd"�d^d8d��da�dP�dbdo�d�g�d�dd9�ddS�d�ddS�d2d�d�gfdd�dd&d'd(d)�dd9d�d�dR�da�dds�d1d��d�gd"d"d8dEdEdEdEd8d8�db�dbd8�db�dbd8�dbd8�dbgfdd�d�dd9dRdsd�gd#d#d#d#d#d#d#d#gfddd"�d�d^d8d;d�dT�da�dP�dbdo�d�gd$d$d$dAd$d$dAd$dAd$d$d$d$d$gfddd"�d^d8d�dI�da�dP�dbdo�d)�d��d�g�d�dd;�ddTd;dndT�dd;dT�d��d��dgfdd�dd&d'd(d)d,�dd9d�d�d�dK�dFdR�da�d*�d�d!�d@�dU�dV�d\dpdqds�d1�d�d�d�d	�d��d�d��d�g$d&d&d&d&d&d&d&dLd&d&d&dLd&d!dpd&d&dpd&dLd!dpdpdpdpdpd&d&dpdpdpdpdpdpd&d&g$fdd�dd&d'd(d)�dd9d�d��dFdR�da�d*�d�dU�dV�d\dpdqds�d1�d�d�d�d	�d��d�d��d�gd'd'd'd'd'd'd'd'd'd'd'dqd'd'dqd'dqdqdqdqdqd'd'dqdqdqdqdqdqd'd'gfdd�dd&d'd(d)�dd9d�d�dR�da�dds�d1d��d�gd(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(gfdd�dd&d'd(d)�dd9d�d�dR�da�dds�d1d��d�gd)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)gfdd�dd&d'd(d)�dd9d�d��dFdR�da�d*�d�dU�dV�d\dpdqds�d1�d�d�d�d	�d��d�d��d�gdddddddddddddddddddddddddddddddgfdd�dd&d'd(d)�dd9d�d��dFdR�da�d*�d�dU�dV�d\dpdqds�d1�d�d�d�d	�d��d�d��d�gdddddddddddddddddddddddddddddddgfdd�dd&d'd(d)�dd9d�d��dFdR�da�d*�d�dU�dV�d\dpdqds�d1�d�d�d�d	�d��d�d��d�gd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2gfdd�dd&d'd(d)�dd9d�d��dFdR�da�d*�d�dU�dV�d\dpdqds�d1�d�d�d�d	�d��d�d��d�gdddddddddddddddddddddddddddddddgf�dd9g�d�d/gf�dd9g�d�dgfd"d8gd:d:gfd"d8gd=d=gfd"d8�dPgd>d>d�gfd"d8d��da�dbdo�d)�d�gd?d?�dG�dG�d5d��d5�dGgfd"d8d;d�dT�da�dbdo�d)�d��d�gd@d@dUd@dUd@d@d@d@dUd@gfd&d'd(d)gdCdFdGdHgfd,d��d!gdI�d?�dtgfd,d��d!gdK�d@dKgfd�d�dd�dMdNdPdQdR�d/�dOdsd��dnd�d��d~dӐd��d�dܐd�d�d�d�d�d�d�g�d
�dFdR�d�dH�dQ�dU�dVdRdR�ddRdR�ddRdR�d�dR�d��d��d��ddRdRdRdRdRdRgf�ddR�d/dsd�d�d�d�d�d�d�d�d�d�gddyddydydydydydydydydydydygfd��da�d�d�g�d�d�d��dgfd�d��da�d�d�g�d,�d"�d,�d,�d,gfd�d��da�d�d�g�dD�dD�dD�dD�dDgfd�d��da�d�d1�d�g�dE�dE�dE�dE�d��dEgfd��d�d?g�d��d��d�gfd�d�dR�dO�d*�d�d?dsd�d��d6�dh�d�d�d�d�d�dn�dt�dud�d��dz�d{�d|�d}d�d�dאd��d�d�d�d�d�d�dRd�dWd�d�g)�d�dld�dld��d��d�d�d�d�d�d�d��d�d�d�d�dl�d��d�d�d�d�d�d�d�d�d�d��d�dld�d�d�d�d�d�d�d�d�d�g)fd�d�dR�dO�d*�d�d?ds�dfd�d��d6�dh�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d�d�dאd��d��d�d�d�d�d�d�dRd�dWd�d�g/dVdVdVdVdVdVdVdVd�dVdVdVdVdVdVdVdVdVdVd�dVdVd�d�dVdVdVdVdVdVdVd�dVdVd�dVdVdVdVdVdVdVdVdVdVdVdVg/fd�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gGdWdWdWdWd�d�d�d�dWdWdWdWd�dWdWdWdWd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dWdWdWdWdWdWd�dWdWd�d�dWdWdWdWdWdWdWd�d�dWdWd�dWd�dWdWdWdWdWdWdWdWdWdWdWgGfd�d�dR�dO�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d�d�dאd��d��d�d�d�d�d�d�dRd�dWd�d�gAdXdXdXdXdXdXdXdXdXdXdXdXdXd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXgAfd�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gGdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYgGfd�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gG�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dN�dNgGfd�d�dR�dO�dN�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gDdZdZdZdZd�dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd�dZdZdZdZdZd�dZdZdZdZdZdZdZdZdZdZdZgDfd�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gGd[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[gGfd�d�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dq�dt�du�dv�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d��d�d�d�d�d�d�dRd�dWd�d�gKd]d]�dd]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]�d�d]d]�d�d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]�d�d]d]d]d]d]d]d]d]d]d]d]gKfd�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gGd^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^gGfd�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gGd_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_gGfd�d�dR�dO�d�dB�dN�dC�d*�d�d?ds�dfd�d��d6�dh�di�dj�dk�dl�d�dJ�dK�d9�d:�d;�d<�d=�d#�d$�dX�dZ�d�d�d�d�d�d�d�dn�dp�dt�du�dx�dyd�d��dz�d{�d|�d}d��d~�d�d�dאd��d��d��d�d�d�d�d�d�dRd�dWd�d�gGd`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`gGfd��dO�dn�d�gdkd��d��d�gfd�g�dAgfd�g�dgf�d
�dH�dQg�dI�d��d�gf�d
�dH�dQ�dwg�dT�dT�dT�d�gf�dF�dU�dVg�d\�d��d�gf�dF�dU�dV�d\�d��d�g�d]�d]�d]�d��d��d�gf�dF�d*�dU�dV�d\dpdq�d�d�d�d	�d��d�g
do�d)dododod�d��d)�d)�d)�d)dodog
fdRg�d0gfdRgdsgfdRdsgdtd�gfdRdsd�d�d�d�d�d�d�d�d�d�gdvdv�d�d�d�d�d�d�d�d�d�d�gfdRdsd�d�d�d�d�d�d�d�d�d�gdwdwdwdwdwdwdwdwdwdwdwdwgfdRdsd�d�d�d�d�d�d�d�d�d�gdxdxdxdxdxdxdxdxdxdxdxdxgfdRdsd�d�d�d�d�d�d�d�d�d�gdzdzdzdzdzdzdzdzdzdzdzdzgfdRdsd�d�d�d�d�d�d�d�d�d�gd{d{d{d{d{d{d{d{d{d{d{d{gfdRdsd�d�d�d�d�d�d�d�d�d�gd|d|d|d|d|d|d|d|d|d|d|d|gfdRdsd�d�d�d�d�d�d�d�d�d�dRd�dWd�d�gd~d~d~d~d~d�d~d�d~d~d~d�d�d~�d�d~d~gfdR�d*dsd�d��dh�d�d�d�dd�d��dz�d|�d}d�d�d�d�d�d�d�d�dRd�dWd�d�gd�dddd��d��d��d�d�ddd�d��d��d�dddddd�d�ddddddgf�db�d)g�d3�d�gfdWg�d6gf�d*�d�d�d�d	g�d�d��d��d��d�gf�dgd gf�d�d�gd�d�gf�d�d�d��d�g�dn�d��dn�d�gf�d�d�d��d�g�do�do�do�dogf�d�d�d��d�g�d��d��d��d�gf�d�d��d�d��d�g�d��d��d��d��d�gf�dI�d\�d0d �d��d��d��d��d�d��d�gd�d�dd�d�d�d�d�d�d�d�gfdogd�gfdogd�gfdo�d�gd�d�gfdpdqgd�d�gf�df�dp�dx�dy�d�g�d��d��d�d�d�gf�dg�d�gf�dŜTZiZx^ej�D]R\ZZxDeeded�D].\Z	Z
e	ek��(r�iee	<e
ee	e<��(q�W��(q�W[�dƐd�d�dȐdȐd�f�dɐd�d�dːd�d4f�d͐d�d�dːd�d5f�dΐd�d�dАd�d4f�dѐd�d�dАd�d5f�dҐd�d�dԐd�d4f�dՐd�d�dԐd�d5f�d֐d�d�dؐd�d4f�dِd�d�dؐd�d5f�dڐd�d�dܐd�d4f�dݐd�d�dܐd�d5f�dސd�d�d�d�d4f�d�d�d�d�d�d5f�d�d�d�d�d�d4f�d�d�d�d�d�d5f�d�d�d�d�d�d4f�d�d�d�d�d�d5f�d�d�d�d�d�d4f�d�d�d�d�d�d5f�d�d�d�d�d�d4f�d�d�d�d�d�d5f�d�d�d�d�d�d4f�d��d�d�d�d�d5f�d��d�d�d��d�d4f�d��d�d�d��d�d5f�d��d�d�d��d�d4f�d��d�d�d��d�d5f�d��d�d�d�d�d4f�d�d�d�d�d�d5f�d�dd�d�d�df�d�dd�d�d�df�d	�d
d�d�d�df�d
�d
d�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�d f�d!�d"d�d#�d�d$f�d%�d"d�d&�d�d'f�d(�d)d�d*�d�d+f�d,�d)d�d*�d�d-f�d.�d)d�d*�d�d/f�d0�d)d�d*�d�d1f�d2�d)d�d*�d�d3f�d4�d)d�d*�d�d5f�d6�d7d�d8�d�d9f�d:�d;d�d<�d�d=f�d>�d?d�d@�d�dAf�dB�d?d�d@�d�dCf�dD�dEd�dF�d�dGf�dH�dEd�dI�d�dJf�dK�dEd�dL�d�dMf�dN�dEd�dO�d�dPf�dQ�dRd�dS�d�dTf�dU�dRd�dS�d�dVf�dW�dRd�dS�d�dXf�dY�dRd�dS�d�dZf�d[�dRd�dS�d�d\f�d]�d^d�d_�d�d`f�da�dbd�dc�d�ddf�de�dbd�dc�d�dff�dg�dbd�dc�d�dhf�di�dbd�dc�d�djf�dk�dbd�dc�d�dlf�dm�dbd�dc�d�dnf�do�dbd�dc�d�dpf�dq�dbd�dc�d�drf�ds�dbd�dc�d�dtf�du�dbd�dc�d�dvf�dw�dbd�dc�d�dxf�dy�dbd�dz�d�d{f�d|�dbd�dz�d�d}f�d~�dbd�dz�d�df�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�dd�d�dĐd�d�f�dƐd�d�dĐd�d�f�dȐd�d�dʐd�d�f�d̐d�d�d͐d�d�f�dϐd�d�d͐d�d�f�dѐd�d�dӐd�d�f�dՐd�d�dӐd�d�f�dאd�d�dؐd�d�f�dڐd�d�dېd�d�f�dݐd�d�dېd�d�f�dߐd�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�df�d�d�d	�d�d�df�d�d�d	�d�d�df�d�d�d�d�d�df�d	�d�d�d
�d�df�d�d�d�d
�d�d
f�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d �d!d�d"�d�d#f�d$�d!d�d"�d�d%f�d&�d'd�d(�d�d)f�d*�d'd�d+�d�d,f�d-�d.d�d/�d�d0f�d1�d.d�d/�d�d2f�d3�d4d�d5�d�d6f�d7�d4d�d8�d�d9f�d:�d4d�d8�d�d;f�d<�d=d�d>�d�d?f�d@�d=d�d>�d�dAf�dB�dCd�dD�d�dEf�dF�dGd�dH�d�dIf�dJ�dGd�dH�d�dKf�dL�dMd�dN�d�dOf�dP�dMd�dN�d�dQf�dR�dSd�dT�d�dUf�dV�dWd�dX�d�dYf�dZ�dWd�d[�d�d\f�d]�dWd�d^�d�d_f�d`�dad�db�d�dcf�dd�dad�de�d�dff�dg�dad�dh�d�dif�dj�dad�dk�d�dlf�dm�dad�dn�d�dof�dp�dad�dq�d�drf�ds�dad�dt�d�duf�dv�dwd�dx�d�dyf�dz�dwd�dx�d�d{f�d|�d}d�d~�d�df�d��d}d�d~�d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d
�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d
�d��d�d�f�d��d��d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�dd�d�f�dĐd�d�dƐd�d�f�dȐd�d�dƐd�d�f�dʐd�d�d̐d�d�f�dΐd�d�d̐d�d�f�dАd�d�d̐d�d�f�dҐd�d�d̐d�d�f�dԐd�d�d̐d�d�f�d֐d�d�d̐d�d�f�dؐd�d�d̐d�d�f�dڐd�d�d̐d�d�f�dܐd�d�d̐d�d�f�dސd�d�d̐d�d�f�d�d�d�d̐d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d�d�d�d�d�d�f�d��d�d�d�d�d�f�d��d�d�d�d�d�f�d��d�d�d�d�d�f�d��d�d�d�d�d�f�d��d�d�d�d�d�f�d�d�d�d�d�df�d�d�d�d�d�df�d�d�d�d�d�df�d�d�d�d�d�df�d�d�d�d�d�d	f�d
�d�d�d�d�df�d�d�d�d�d�d
f�d�d�d�d�d�df�d�d�d�d�d�df�d�d�d�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d�d�df�d�dd�d �d�d!f�d"�dd�d �d�d#f�d$�dd�d �d�d%f�d&�dd�d'�d�d(f�d)�dd�d'�d�d*f�d+�d,d�d-�d�d.f�d/�d,d�d-�d�d0f�d1�d,d�d-�d�d2f�d3�d,d�d-�d�d4f�d5�d,d�d-�d�d6f�d7�d,d�d-�d�d8f�d9�d:d�d;�d�d<f�d=�d:d�d>�d�d?f�d@�d:d�dA�d�dBf�dC�d:d�dA�d�dDf�dE�d:d�dF�d�dGf�dH�d:d�dF�d�dIf�dJ�d:d�dF�d�dKf�dL�d:d�dF�d�dMf�dN�d:d�dO�d�dPf�dQ�d:d�dO�d�dRf�dS�d:d	�dT�d�dUf�dV�d:d
�dT�d�dWf�dX�dYd�dZ�d�d[f�d\�dYd�d]�d�d^f�d_�dYd�d`�d�daf�db�dYd�d`�d�dcf�dd�dYd�de�d�dff�dg�dYd	�dh�d�dif�dj�dkd�dl�d�dmf�dn�dkd�dl�d�dof�dp�dqd�dr�d�dsf�dt�dud�dv�d�dwf�dx�dud�dv�d�dyf�dz�dud�dv�d�d{f�d|�dud�dv�d�d}f�d~�dud�d�d�d�f�d��dud�d�d�d�f�d��dud�d��d�d�f�d��dud�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�d��d�d�d��d�d�f�gZ
�d�S(�z3.8ZLALRZ 0B26D831EE3ADD67934989B5D61F8ACA�����������2�C�Z��ii.i����!�"�#�$�%� �/�&�'i��
��
��������������(�)�*�+�,�-�7�8�9�:�;�<�?�A�B�F�G�H�I�J�K�L�M�O�P�Q�R�S�T�V�W�X�[�]�^�b�o�p�q�r�v�|�}���������������������������������������������������������������iiiiii!i#i$i%i&i'i(i*i+i,i-i/i0i1i3i4i5i;i<i=i>i?i@iCiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViYi[i\i]i^icihioipiqirisiwixi{i|i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i��=�>�@�D�E�6�.���	�3�4�5�z�e�fi�U��������������������i�s�{����N����������������i�x�y�gi}i~�`���������������������������������t�w�h�i�Y�d�����������u�a�c�i������i�����������0�1�_�j�l�~��������������ii	i
i
iiiiiiiii)i6i7i8i9ibiiikii�i�i�i�i�i�i�i�i�i������ieifi��\ii i"i�iiilini�iiiBiDiWiXiZidigijiviyizi�i�i�i�i�i�i��m�k�niiAi_i`iai�i�i�i2iiimitiui:)az$end�SEMIZPPHASHZIDZLPARENZTIMESZCONSTZRESTRICTZVOLATILEZVOIDZ_BOOLZCHARZSHORTZINTZLONGZFLOATZDOUBLEZ_COMPLEXZSIGNEDZUNSIGNEDZAUTOZREGISTERZSTATICZEXTERNZTYPEDEFZINLINEZTYPEIDZENUMZSTRUCTZUNION�LBRACEZEQUALSZLBRACKET�COMMAZRPAREN�COLONZPLUSPLUSZ
MINUSMINUSZSIZEOFZAND�PLUS�MINUSZNOTZLNOTZOFFSETOFZ
INT_CONST_DECZ
INT_CONST_OCTZ
INT_CONST_HEXZ
INT_CONST_BINZFLOAT_CONSTZHEX_FLOAT_CONSTZ
CHAR_CONSTZWCHAR_CONSTZSTRING_LITERALZWSTRING_LITERALZRBRACKETZCASEZDEFAULTZIFZSWITCHZWHILEZDOZFORZGOTOZBREAKZCONTINUEZRETURN�RBRACEZPERIODZCONDOPZDIVIDEZMODZRSHIFTZLSHIFTZLTZLEZGEZGTZEQZNE�ORZXORZLANDZLORZXOREQUALZ
TIMESEQUALZDIVEQUALZMODEQUAL�	PLUSEQUALZ
MINUSEQUALZLSHIFTEQUALZRSHIFTEQUALZANDEQUALZOREQUALZARROW�ELSE�ELLIPSIS)T�translation_unit_or_empty�translation_unit�empty�external_declaration�function_definition�declaration�pp_directive�
declarator�declaration_specifiers�	decl_body�direct_declarator�pointer�type_qualifier�type_specifier�storage_class_specifier�function_specifier�typedef_name�enum_specifier�struct_or_union_specifier�struct_or_union�declaration_list_opt�declaration_list�init_declarator_list_opt�init_declarator_list�init_declarator�abstract_declarator�direct_abstract_declarator�declaration_specifiers_opt�type_qualifier_list_opt�type_qualifier_list�
brace_open�compound_statement�parameter_type_list_opt�parameter_type_list�parameter_list�parameter_declaration�assignment_expression_opt�assignment_expression�conditional_expression�unary_expression�binary_expression�postfix_expression�unary_operator�cast_expression�primary_expression�
identifier�constant�unified_string_literal�unified_wstring_literal�initializer�identifier_list_opt�identifier_list�enumerator_list�
enumerator�struct_declaration_list�struct_declaration�specifier_qualifier_list�block_item_list_opt�block_item_list�
block_item�	statement�labeled_statement�expression_statement�selection_statement�iteration_statement�jump_statement�expression_opt�
expression�abstract_declarator_opt�assignment_operator�	type_name�initializer_list_opt�initializer_list�designation_opt�designation�designator_list�
designator�brace_close�struct_declarator_list_opt�struct_declarator_list�struct_declarator�specifier_qualifier_list_opt�constant_expression�argument_expression_listzS' -> translation_unit_or_emptyzS'Nz abstract_declarator_opt -> emptyrQZp_abstract_declarator_optzplyparser.pyz.abstract_declarator_opt -> abstract_declaratorz"assignment_expression_opt -> emptyr1Zp_assignment_expression_optz2assignment_expression_opt -> assignment_expressionzblock_item_list_opt -> emptyrFZp_block_item_list_optz&block_item_list_opt -> block_item_listzdeclaration_list_opt -> emptyr!Zp_declaration_list_optz(declaration_list_opt -> declaration_listz#declaration_specifiers_opt -> emptyr(Zp_declaration_specifiers_optz4declaration_specifiers_opt -> declaration_specifierszdesignation_opt -> emptyrVZp_designation_optzdesignation_opt -> designationzexpression_opt -> emptyrOZp_expression_optzexpression_opt -> expressionzidentifier_list_opt -> emptyr?Zp_identifier_list_optz&identifier_list_opt -> identifier_listz!init_declarator_list_opt -> emptyr#Zp_init_declarator_list_optz0init_declarator_list_opt -> init_declarator_listzinitializer_list_opt -> emptyrTZp_initializer_list_optz(initializer_list_opt -> initializer_listz parameter_type_list_opt -> emptyr-Zp_parameter_type_list_optz.parameter_type_list_opt -> parameter_type_listz%specifier_qualifier_list_opt -> emptyr^Zp_specifier_qualifier_list_optz8specifier_qualifier_list_opt -> specifier_qualifier_listz#struct_declarator_list_opt -> emptyr[Zp_struct_declarator_list_optz4struct_declarator_list_opt -> struct_declarator_listz type_qualifier_list_opt -> emptyr)Zp_type_qualifier_list_optz.type_qualifier_list_opt -> type_qualifier_listz-translation_unit_or_empty -> translation_unitr
Zp_translation_unit_or_emptyzc_parser.pyi�z"translation_unit_or_empty -> emptyi�z(translation_unit -> external_declarationrZp_translation_unit_1i�z9translation_unit -> translation_unit external_declarationZp_translation_unit_2iz+external_declaration -> function_definitionrZp_external_declaration_1iz#external_declaration -> declarationZp_external_declaration_2iz$external_declaration -> pp_directiveZp_external_declaration_3izexternal_declaration -> SEMIZp_external_declaration_4i zpp_directive -> PPHASHrZp_pp_directivei%zIfunction_definition -> declarator declaration_list_opt compound_statementrZp_function_definition_1i.z`function_definition -> declaration_specifiers declarator declaration_list_opt compound_statementZp_function_definition_2i?zstatement -> labeled_statementrIZp_statementiJz!statement -> expression_statementiKzstatement -> compound_statementiLz statement -> selection_statementiMz statement -> iteration_statementiNzstatement -> jump_statementiOz<decl_body -> declaration_specifiers init_declarator_list_optrZp_decl_bodyi]zdeclaration -> decl_body SEMIrZ
p_declarationi�zdeclaration_list -> declarationr"Zp_declaration_listi�z0declaration_list -> declaration_list declarationi�zCdeclaration_specifiers -> type_qualifier declaration_specifiers_optrZp_declaration_specifiers_1i�zCdeclaration_specifiers -> type_specifier declaration_specifiers_optZp_declaration_specifiers_2i�zLdeclaration_specifiers -> storage_class_specifier declaration_specifiers_optZp_declaration_specifiers_3i�zGdeclaration_specifiers -> function_specifier declaration_specifiers_optZp_declaration_specifiers_4i�zstorage_class_specifier -> AUTOrZp_storage_class_specifieri�z#storage_class_specifier -> REGISTERi�z!storage_class_specifier -> STATICi�z!storage_class_specifier -> EXTERNi�z"storage_class_specifier -> TYPEDEFi�zfunction_specifier -> INLINErZp_function_specifieri�ztype_specifier -> VOIDrZp_type_specifier_1i�ztype_specifier -> _BOOLi�ztype_specifier -> CHARi�ztype_specifier -> SHORTi�ztype_specifier -> INTi�ztype_specifier -> LONGi�ztype_specifier -> FLOATi�ztype_specifier -> DOUBLEi�ztype_specifier -> _COMPLEXi�ztype_specifier -> SIGNEDi�ztype_specifier -> UNSIGNEDi�ztype_specifier -> typedef_nameZp_type_specifier_2i�z type_specifier -> enum_specifieri�z+type_specifier -> struct_or_union_specifieri�ztype_qualifier -> CONSTrZp_type_qualifieri�ztype_qualifier -> RESTRICTi�ztype_qualifier -> VOLATILEi�z'init_declarator_list -> init_declaratorr$Zp_init_declarator_list_1i�zBinit_declarator_list -> init_declarator_list COMMA init_declaratori�z*init_declarator_list -> EQUALS initializerZp_init_declarator_list_2i�z+init_declarator_list -> abstract_declaratorZp_init_declarator_list_3i�zinit_declarator -> declaratorr%Zp_init_declaratoriz0init_declarator -> declarator EQUALS initializerizGspecifier_qualifier_list -> type_qualifier specifier_qualifier_list_optrEZp_specifier_qualifier_list_1izGspecifier_qualifier_list -> type_specifier specifier_qualifier_list_optZp_specifier_qualifier_list_2iz/struct_or_union_specifier -> struct_or_union IDrZp_struct_or_union_specifier_1iz3struct_or_union_specifier -> struct_or_union TYPEIDiz[struct_or_union_specifier -> struct_or_union brace_open struct_declaration_list brace_closeZp_struct_or_union_specifier_2iz^struct_or_union_specifier -> struct_or_union ID brace_open struct_declaration_list brace_closeZp_struct_or_union_specifier_3i'zbstruct_or_union_specifier -> struct_or_union TYPEID brace_open struct_declaration_list brace_closei(zstruct_or_union -> STRUCTr Zp_struct_or_unioni1zstruct_or_union -> UNIONi2z-struct_declaration_list -> struct_declarationrCZp_struct_declaration_listi9zEstruct_declaration_list -> struct_declaration_list struct_declarationi:zNstruct_declaration -> specifier_qualifier_list struct_declarator_list_opt SEMIrDZp_struct_declaration_1i?zGstruct_declaration -> specifier_qualifier_list abstract_declarator SEMIZp_struct_declaration_2iez+struct_declarator_list -> struct_declaratorr\Zp_struct_declarator_listiszHstruct_declarator_list -> struct_declarator_list COMMA struct_declaratoritzstruct_declarator -> declaratorr]Zp_struct_declarator_1i|z9struct_declarator -> declarator COLON constant_expressionZp_struct_declarator_2i�z.struct_declarator -> COLON constant_expressioni�zenum_specifier -> ENUM IDrZp_enum_specifier_1i�zenum_specifier -> ENUM TYPEIDi�z=enum_specifier -> ENUM brace_open enumerator_list brace_closeZp_enum_specifier_2i�z@enum_specifier -> ENUM ID brace_open enumerator_list brace_closeZp_enum_specifier_3i�zDenum_specifier -> ENUM TYPEID brace_open enumerator_list brace_closei�zenumerator_list -> enumeratorrAZp_enumerator_listi�z(enumerator_list -> enumerator_list COMMAi�z3enumerator_list -> enumerator_list COMMA enumeratori�zenumerator -> IDrBZp_enumeratori�z+enumerator -> ID EQUALS constant_expressioni�zdeclarator -> direct_declaratorrZp_declarator_1i�z'declarator -> pointer direct_declaratorZp_declarator_2i�zdeclarator -> pointer TYPEIDZp_declarator_3i�zdirect_declarator -> IDrZp_direct_declarator_1i�z-direct_declarator -> LPAREN declarator RPARENZp_direct_declarator_2i�zjdirect_declarator -> direct_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKETZp_direct_declarator_3i�zmdirect_declarator -> direct_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKETZp_direct_declarator_4i�zidirect_declarator -> direct_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKETi�zVdirect_declarator -> direct_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKETZp_direct_declarator_5izHdirect_declarator -> direct_declarator LPAREN parameter_type_list RPARENZp_direct_declarator_6i
zHdirect_declarator -> direct_declarator LPAREN identifier_list_opt RPARENiz(pointer -> TIMES type_qualifier_list_optrZ	p_pointeri)z0pointer -> TIMES type_qualifier_list_opt pointeri*z%type_qualifier_list -> type_qualifierr*Zp_type_qualifier_listiGz9type_qualifier_list -> type_qualifier_list type_qualifieriHz%parameter_type_list -> parameter_listr.Zp_parameter_type_listiMz4parameter_type_list -> parameter_list COMMA ELLIPSISiNz'parameter_list -> parameter_declarationr/Zp_parameter_listiVz<parameter_list -> parameter_list COMMA parameter_declarationiWz:parameter_declaration -> declaration_specifiers declaratorr0Zp_parameter_declaration_1i`zGparameter_declaration -> declaration_specifiers abstract_declarator_optZp_parameter_declaration_2ikzidentifier_list -> identifierr@Zp_identifier_listi�z3identifier_list -> identifier_list COMMA identifieri�z$initializer -> assignment_expressionr>Zp_initializer_1i�z:initializer -> brace_open initializer_list_opt brace_closeZp_initializer_2i�z<initializer -> brace_open initializer_list COMMA brace_closei�z/initializer_list -> designation_opt initializerrUZp_initializer_listi�zFinitializer_list -> initializer_list COMMA designation_opt initializeri�z%designation -> designator_list EQUALSrWZ
p_designationi�zdesignator_list -> designatorrXZp_designator_listi�z-designator_list -> designator_list designatori�z3designator -> LBRACKET constant_expression RBRACKETrYZp_designatori�zdesignator -> PERIOD identifieri�z=type_name -> specifier_qualifier_list abstract_declarator_optrSZp_type_namei�zabstract_declarator -> pointerr&Zp_abstract_declarator_1i�z9abstract_declarator -> pointer direct_abstract_declaratorZp_abstract_declarator_2i�z1abstract_declarator -> direct_abstract_declaratorZp_abstract_declarator_3i�z?direct_abstract_declarator -> LPAREN abstract_declarator RPARENr'Zp_direct_abstract_declarator_1i�zddirect_abstract_declarator -> direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKETZp_direct_abstract_declarator_2i�zIdirect_abstract_declarator -> LBRACKET assignment_expression_opt RBRACKETZp_direct_abstract_declarator_3i�zPdirect_abstract_declarator -> direct_abstract_declarator LBRACKET TIMES RBRACKETZp_direct_abstract_declarator_4iz5direct_abstract_declarator -> LBRACKET TIMES RBRACKETZp_direct_abstract_declarator_5i
z^direct_abstract_declarator -> direct_abstract_declarator LPAREN parameter_type_list_opt RPARENZp_direct_abstract_declarator_6izCdirect_abstract_declarator -> LPAREN parameter_type_list_opt RPARENZp_direct_abstract_declarator_7i zblock_item -> declarationrHZp_block_itemi+zblock_item -> statementi,zblock_item_list -> block_itemrGZp_block_item_listi3z-block_item_list -> block_item_list block_itemi4z@compound_statement -> brace_open block_item_list_opt brace_closer,Zp_compound_statement_1i:z'labeled_statement -> ID COLON statementrJZp_labeled_statement_1i@z=labeled_statement -> CASE constant_expression COLON statementZp_labeled_statement_2iDz,labeled_statement -> DEFAULT COLON statementZp_labeled_statement_3iHz<selection_statement -> IF LPAREN expression RPAREN statementrLZp_selection_statement_1iLzKselection_statement -> IF LPAREN expression RPAREN statement ELSE statementZp_selection_statement_2iPz@selection_statement -> SWITCH LPAREN expression RPAREN statementZp_selection_statement_3iTz?iteration_statement -> WHILE LPAREN expression RPAREN statementrMZp_iteration_statement_1iYzGiteration_statement -> DO statement WHILE LPAREN expression RPAREN SEMIZp_iteration_statement_2i]ziiteration_statement -> FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statementZp_iteration_statement_3iazaiteration_statement -> FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN statementZp_iteration_statement_4iezjump_statement -> GOTO ID SEMIrNZp_jump_statement_1ijzjump_statement -> BREAK SEMIZp_jump_statement_2inzjump_statement -> CONTINUE SEMIZp_jump_statement_3irz(jump_statement -> RETURN expression SEMIZp_jump_statement_4ivzjump_statement -> RETURN SEMIiwz+expression_statement -> expression_opt SEMIrKZp_expression_statementi|z#expression -> assignment_expressionrPZp_expressioni�z4expression -> expression COMMA assignment_expressioni�ztypedef_name -> TYPEIDrZp_typedef_namei�z/assignment_expression -> conditional_expressionr2Zp_assignment_expressioni�zSassignment_expression -> unary_expression assignment_operator assignment_expressioni�zassignment_operator -> EQUALSrRZp_assignment_operatori�zassignment_operator -> XOREQUALi�z!assignment_operator -> TIMESEQUALi�zassignment_operator -> DIVEQUALi�zassignment_operator -> MODEQUALi�z assignment_operator -> PLUSEQUALi�z!assignment_operator -> MINUSEQUALi�z"assignment_operator -> LSHIFTEQUALi�z"assignment_operator -> RSHIFTEQUALi�zassignment_operator -> ANDEQUALi�zassignment_operator -> OREQUALi�z-constant_expression -> conditional_expressionr_Zp_constant_expressioni�z+conditional_expression -> binary_expressionr3Zp_conditional_expressioni�zZconditional_expression -> binary_expression CONDOP expression COLON conditional_expressioni�z$binary_expression -> cast_expressionr5Zp_binary_expressioni�z>binary_expression -> binary_expression TIMES binary_expressioni�z?binary_expression -> binary_expression DIVIDE binary_expressioni�z<binary_expression -> binary_expression MOD binary_expressioni�z=binary_expression -> binary_expression PLUS binary_expressioni�z>binary_expression -> binary_expression MINUS binary_expressioni�z?binary_expression -> binary_expression RSHIFT binary_expressioni�z?binary_expression -> binary_expression LSHIFT binary_expressioni�z;binary_expression -> binary_expression LT binary_expressioni�z;binary_expression -> binary_expression LE binary_expressioni�z;binary_expression -> binary_expression GE binary_expressioni�z;binary_expression -> binary_expression GT binary_expressioni�z;binary_expression -> binary_expression EQ binary_expressioni�z;binary_expression -> binary_expression NE binary_expressioni�z<binary_expression -> binary_expression AND binary_expressioni�z;binary_expression -> binary_expression OR binary_expressioni�z<binary_expression -> binary_expression XOR binary_expressioni�z=binary_expression -> binary_expression LAND binary_expressioni�z<binary_expression -> binary_expression LOR binary_expressioni�z#cast_expression -> unary_expressionr8Zp_cast_expression_1i�z:cast_expression -> LPAREN type_name RPAREN cast_expressionZp_cast_expression_2i�z&unary_expression -> postfix_expressionr4Zp_unary_expression_1i�z-unary_expression -> PLUSPLUS unary_expressionZp_unary_expression_2i�z/unary_expression -> MINUSMINUS unary_expressioni�z2unary_expression -> unary_operator cast_expressioni�z+unary_expression -> SIZEOF unary_expressionZp_unary_expression_3i�z2unary_expression -> SIZEOF LPAREN type_name RPARENi�zunary_operator -> ANDr7Zp_unary_operatori�zunary_operator -> TIMESi�zunary_operator -> PLUSi�zunary_operator -> MINUSi�zunary_operator -> NOTi�zunary_operator -> LNOTi�z(postfix_expression -> primary_expressionr6Zp_postfix_expression_1i�zEpostfix_expression -> postfix_expression LBRACKET expression RBRACKETZp_postfix_expression_2izOpostfix_expression -> postfix_expression LPAREN argument_expression_list RPARENZp_postfix_expression_3iz6postfix_expression -> postfix_expression LPAREN RPARENiz2postfix_expression -> postfix_expression PERIOD IDZp_postfix_expression_4iz6postfix_expression -> postfix_expression PERIOD TYPEIDi
z1postfix_expression -> postfix_expression ARROW IDiz5postfix_expression -> postfix_expression ARROW TYPEIDiz1postfix_expression -> postfix_expression PLUSPLUSZp_postfix_expression_5iz3postfix_expression -> postfix_expression MINUSMINUSizUpostfix_expression -> LPAREN type_name RPAREN brace_open initializer_list brace_closeZp_postfix_expression_6iz[postfix_expression -> LPAREN type_name RPAREN brace_open initializer_list COMMA brace_closeiz primary_expression -> identifierr9Zp_primary_expression_1i!zprimary_expression -> constantZp_primary_expression_2i%z,primary_expression -> unified_string_literalZp_primary_expression_3i)z-primary_expression -> unified_wstring_literali*z.primary_expression -> LPAREN expression RPARENZp_primary_expression_4i/zGprimary_expression -> OFFSETOF LPAREN type_name COMMA identifier RPARENZp_primary_expression_5i3z1argument_expression_list -> assignment_expressionr`Zp_argument_expression_listi;zPargument_expression_list -> argument_expression_list COMMA assignment_expressioni<zidentifier -> IDr:Zp_identifieriEzconstant -> INT_CONST_DECr;Zp_constant_1iIzconstant -> INT_CONST_OCTiJzconstant -> INT_CONST_HEXiKzconstant -> INT_CONST_BINiLzconstant -> FLOAT_CONSTZp_constant_2iRzconstant -> HEX_FLOAT_CONSTiSzconstant -> CHAR_CONSTZp_constant_3iYzconstant -> WCHAR_CONSTiZz(unified_string_literal -> STRING_LITERALr<Zp_unified_string_literaliez?unified_string_literal -> unified_string_literal STRING_LITERALifz*unified_wstring_literal -> WSTRING_LITERALr=Zp_unified_wstring_literalipzBunified_wstring_literal -> unified_wstring_literal WSTRING_LITERALiqzbrace_open -> LBRACEr+Zp_brace_openi{zbrace_close -> RBRACErZZ
p_brace_closei�zempty -> <empty>rZp_emptyi�)Z_tabversionZ
_lr_methodZ
_lr_signatureZ_lr_action_itemsZ
_lr_action�itemsZ_kZ_v�zipZ_xZ_yZ_lr_goto_itemsZ_lr_gotoZ_lr_productions�rcrc�/usr/lib/python3.6/yacctab.py�<module>s�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PK�[ǦX+:+:,__pycache__/c_generator.cpython-36.opt-1.pycnu�[���3

g�wU5�@s ddlmZGdd�de�ZdS)�)�c_astc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdldd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)dOdP�Z*dQdR�Z+dSdT�Z,dUdV�Z-dWdX�Z.dYdZ�Z/d[d\�Z0d]d^�Z1dmd_d`�Z2dadb�Z3gfdcdd�Z4dedf�Z5dgdh�Z6didj�Z7dkS)n�
CGeneratorz� Uses the same visitor pattern as c_ast.NodeVisitor, but modified to
        return a value from each visit method, using string accumulation in
        generic_visit.
    cCs
d|_dS)N�)�indent_level)�self�r�!/usr/lib/python3.6/c_generator.py�__init__szCGenerator.__init__cCs
d|jS)N� )r)rrrr�_make_indentszCGenerator._make_indentcCsd|jj}t|||j�|�S)NZvisit_)�	__class__�__name__�getattr�
generic_visit)r�node�methodrrr�visitszCGenerator.visitcs,|dkrdSdj�fdd�|j�D��SdS)N�c3s|]\}}�j|�VqdS)N)r)�.0Zc_name�c)rrr�	<genexpr>#sz+CGenerator.generic_visit.<locals>.<genexpr>)�joinZchildren)rrr)rrrszCGenerator.generic_visitcCs|jS)N)�value)r�nrrr�visit_Constant%szCGenerator.visit_ConstantcCs|jS)N)�name)rrrrr�visit_ID(szCGenerator.visit_IDcCs$|j|j�}|d|j|j�dS)N�[�])�_parenthesize_unless_simplerrZ	subscript)rrZarrrefrrr�visit_ArrayRef+szCGenerator.visit_ArrayRefcCs"|j|j�}||j|j|j�S)N)rr�typerZfield)rrZsrefrrr�visit_StructRef/szCGenerator.visit_StructRefcCs$|j|j�}|d|j|j�dS)N�(�))rrr�args)rrZfrefrrr�visit_FuncCall3szCGenerator.visit_FuncCallcCs\|j|j�}|jdkrd|S|jdkr0d|S|jdkrJd|j|j�Sd|j|fSdS)Nzp++z%s++zp--z%s--Zsizeofz
sizeof(%s)z%s%s)r�expr�opr)rrZoperandrrr�
visit_UnaryOp7s


zCGenerator.visit_UnaryOpcs<�j|j�fdd��}�j|j�fdd��}d||j|fS)Ncs�j|�S)N)�_is_simple_node)�d)rrr�<lambda>Fsz+CGenerator.visit_BinaryOp.<locals>.<lambda>cs�j|�S)N)r*)r+)rrrr,Hsz%s %s %s)�_parenthesize_if�left�rightr()rrZlval_str�rval_strr)rr�visit_BinaryOpDs
zCGenerator.visit_BinaryOpcCs*|j|jdd��}d|j|j�|j|fS)NcSst|tj�S)N)�
isinstancer�
Assignment)rrrrr,Nsz-CGenerator.visit_Assignment.<locals>.<lambda>z%s %s %s)r-ZrvaluerZlvaluer()rrr0rrr�visit_AssignmentKs
zCGenerator.visit_AssignmentcCsdj|j�S)Nr
)r�names)rrrrr�visit_IdentifierTypeQszCGenerator.visit_IdentifierTypecCsJt|tj�rd|j|�dSt|tj�r<d|j|�dS|j|�SdS)N�{�}r#r$)r2rZInitListr�ExprList)rrrrr�_visit_exprTs
zCGenerator._visit_exprFcCsL|r
|jn|j|�}|jr.|d|j|j�7}|jrH|d|j|j�7}|S)Nz : z = )r�_generate_declZbitsizer�initr:)rr�no_type�srrr�
visit_Decl\szCGenerator.visit_DeclcsL�j|jd�}t|j�dkrH|ddj�fdd�|jdd�D��7}|S)Nrrz, c3s|]}�j|dd�VqdS)T)r=N)r?)r�decl)rrrrisz,CGenerator.visit_DeclList.<locals>.<genexpr>)r�decls�lenr)rrr>r)rr�visit_DeclListfs
zCGenerator.visit_DeclListcCs2d}|jr|dj|j�d7}||j|j�7}|S)Nrr
)�storager�_generate_typer!)rrr>rrr�
visit_Typedefms
zCGenerator.visit_TypedefcCs(d|j|j�d}|d|j|j�S)Nr#r$r
)rEZto_typerr')rrr>rrr�
visit_CastsszCGenerator.visit_CastcCs.g}x|jD]}|j|j|��qWdj|�S)Nz, )�exprs�appendr:r)rr�visited_subexprsr'rrr�visit_ExprListwszCGenerator.visit_ExprListcCs.g}x|jD]}|j|j|��qWdj|�S)Nz, )rHrIr:r)rrrJr'rrr�visit_InitList}szCGenerator.visit_InitListcCs�d}|jr|d|j7}|jr�|d7}xXt|jj�D]H\}}||j7}|jr`|d|j|j�7}|t|jj�dkr4|d7}q4W|d7}|S)N�enumr
z {z = rz, r8)r�values�	enumerateZenumeratorsrrrB)rrr>�iZ
enumeratorrrr�
visit_Enum�s
zCGenerator.visit_Enumcsj�j|j�}d�_�j|j�}|jrVdj�fdd�|jD��}|d|d|dS|d|dSdS)Nrz;
c3s|]}�j|�VqdS)N)r)r�p)rrrr�sz+CGenerator.visit_FuncDef.<locals>.<genexpr>�
)rr@r�bodyZparam_declsr)rrr@rTZknrdeclsr)rr�
visit_FuncDef�szCGenerator.visit_FuncDefcCsFd}x<|jD]2}t|tj�r,||j|�7}q||j|�d7}qW|S)Nrz;
)�extr2rZFuncDefr)rrr>rVrrr�
visit_FileAST�szCGenerator.visit_FileASTcs`�j�d}�jd7_|jr>|dj�fdd�|jD��7}�jd8_|�j�d7}|S)Nz{
�rc3s|]}�j|�VqdS)N)�_generate_stmt)r�stmt)rrrr�sz,CGenerator.visit_Compound.<locals>.<genexpr>z}
)rrZblock_itemsr)rrr>r)rr�visit_Compound�szCGenerator.visit_CompoundcCsdS)N�;r)rrrrr�visit_EmptyStatement�szCGenerator.visit_EmptyStatementcsdj�fdd�|jD��S)Nz, c3s|]}�j|�VqdS)N)r)rZparam)rrrr�sz-CGenerator.visit_ParamList.<locals>.<genexpr>)rZparams)rrr)rr�visit_ParamList�szCGenerator.visit_ParamListcCs&d}|jr|d|j|j�7}|dS)N�returnr
r\)r'r)rrr>rrr�visit_Return�szCGenerator.visit_ReturncCsdS)Nzbreak;r)rrrrr�visit_Break�szCGenerator.visit_BreakcCsdS)Nz	continue;r)rrrrr�visit_Continue�szCGenerator.visit_ContinuecCs8|j|j�d}||j|j�d7}||j|j�7}|S)Nz ? z : )r:�cond�iftrue�iffalse)rrr>rrr�visit_TernaryOp�szCGenerator.visit_TernaryOpcCsdd}|jr||j|j�7}|d7}||j|jdd�7}|jr`||j�d7}||j|jdd�7}|S)Nzif (z)
T)�
add_indentzelse
)rcrrYrdrer)rrr>rrr�visit_If�szCGenerator.visit_IfcCs~d}|jr||j|j�7}|d7}|jr<|d|j|j�7}|d7}|jr^|d|j|j�7}|d7}||j|jdd�7}|S)Nzfor (r\r
z)
T)rg)r<rrc�nextrYrZ)rrr>rrr�	visit_For�szCGenerator.visit_ForcCs:d}|jr||j|j�7}|d7}||j|jdd�7}|S)Nzwhile (z)
T)rg)rcrrYrZ)rrr>rrr�visit_While�szCGenerator.visit_WhilecCsJd}||j|jdd�7}||j�d7}|jr>||j|j�7}|d7}|S)Nzdo
T)rgzwhile (z);)rYrZrrcr)rrr>rrr�
visit_DoWhile�szCGenerator.visit_DoWhilecCs,d|j|j�d}||j|jdd�7}|S)Nzswitch (z)
T)rg)rrcrYrZ)rrr>rrr�visit_Switch�szCGenerator.visit_SwitchcCs:d|j|j�d}x |jD]}||j|dd�7}qW|S)Nzcase z:
T)rg)rr'�stmtsrY)rrr>rZrrr�
visit_Case�szCGenerator.visit_CasecCs*d}x |jD]}||j|dd�7}qW|S)Nz	default:
T)rg)rnrY)rrr>rZrrr�
visit_Default�szCGenerator.visit_DefaultcCs|jd|j|j�S)Nz:
)rrYrZ)rrrrr�visit_Label�szCGenerator.visit_LabelcCsd|jdS)Nzgoto r\)r)rrrrr�
visit_Goto�szCGenerator.visit_GotocCsdS)Nz...r)rrrrr�visit_EllipsisParam�szCGenerator.visit_EllipsisParamcCs|j|d�S)N�struct)�_generate_struct_union)rrrrr�visit_StructszCGenerator.visit_StructcCs|j|j�S)N)rEr!)rrrrr�visit_TypenameszCGenerator.visit_TypenamecCs|j|d�S)N�union)ru)rrrrr�visit_UnionszCGenerator.visit_UnioncCsfd}xH|jD]>}t|tj�r,|d|j7}qt|tj�r|d|jd7}qW|d|j|j�7}|S)Nr�.rrz = )rr2r�ID�Constantrrr')rrr>rrrr�visit_NamedInitializersz!CGenerator.visit_NamedInitializercCs
|j|�S)N)rE)rrrrr�visit_FuncDeclszCGenerator.visit_FuncDeclcCs�|d|jpd}|jr~|d7}||j�7}|jd7_|d7}x|jD]}||j|�7}qJW|jd8_||j�d7}|S)ze Generates code for structs and unions. name should be either
            'struct' or union.
        r
rrSrXz{
r8)rrArrrY)rrrr>r@rrrrusz!CGenerator._generate_struct_unioncCs�t|�}|r|jd7_|j�}|r4|jd8_|tjtjtjtjtjtj	tj
tjtjtj
tjtjtjf
kr�||j|�dS|tjfkr�|j|�S||j|�dSdS)z� Generation from a statement node. This method exists as a wrapper
            for individual visit_* methods to handle different treatment of
            some statements in this context.
        rXz;
rSN)r!rrr�Declr3ZCastZUnaryOpZBinaryOpZ	TernaryOp�FuncCall�ArrayRef�	StructRefr|r{ZTypedefr9rZCompound)rrrg�typ�indentrrrrY(s

zCGenerator._generate_stmtcCsHd}|jrdj|j�d}|jr4|dj|j�d7}||j|j�7}|S)z& Generation from a Decl node.
        rr
)ZfuncspecrrDrEr!)rrr>rrrr;DszCGenerator._generate_declcCs�t|�}|tjk�rNd}|jr2|dj|j�d7}||j|j�7}|jrN|jnd}x�t|�D]�\}}t|tj	�r�|dkr�t||dtj
�r�d|d}|d|j|j�d7}q\t|tj��r|dkr�t||dtj
�r�d|d}|d|j|j
�d7}q\t|tj
�r\|j�r,d	dj|j�|f}q\d
|}q\W|�rJ|d|7}|S|tjk�rf|j|j�S|tjk�r~|j|j�S|tjk�r�dj|j�dS|tj	tj
tjfk�r�|j|j||g�S|j|�SdS)z� Recursive generation from a type node. n is the type node.
            modifiers collects the PtrDecl, ArrayDecl and FuncDecl modifiers
            encountered on the way down to a TypeDecl, to allow proper
            generation from it.
        rr
rrr#r$rrz* %s %s�*N)r!rZTypeDeclZqualsrrZdeclnamerOr2Z	ArrayDeclZPtrDeclZdimZFuncDeclr%rr;ZTypenamerEZIdentifierTyper5)rrZ	modifiersr�r>ZnstrrPZmodifierrrrrEMs@zCGenerator._generate_typecCs&|j|�}||�rd|dS|SdS)z� Visits 'n' and returns its string representation, parenthesized
            if the condition function applied to the node returns True.
        r#r$N)r:)rrZ	conditionr>rrrr-{s
zCGenerator._parenthesize_ifcs�j|�fdd��S)z. Common use case for _parenthesize_if
        cs�j|�S)N)r*)r+)rrrr,�sz8CGenerator._parenthesize_unless_simple.<locals>.<lambda>)r-)rrr)rrr�sz&CGenerator._parenthesize_unless_simplecCst|tjtjtjtjtjf�S)z~ Returns True for nodes that are "simple" - i.e. nodes that always
            have higher precedence than operators.
        )r2rr|r{r�r�r�)rrrrrr*�szCGenerator._is_simple_nodeN)F)F)8r
�
__module__�__qualname__�__doc__r	rrrrrr r"r&r)r1r4r6r:r?rCrFrGrKrLrQrUrWr[r]r^r`rarbrfrhrjrkrlrmrorprqrrrsrvrwryr}r~rurYr;rEr-rr*rrrrrsj



		


	.
rN)rr�objectrrrrr�<module>	sPK�[��	�	)__pycache__/ast_transforms.cpython-36.pycnu�[���3

g�wU�
�@s ddlmZdd�Zdd�ZdS)�)�c_astcCs�t|tj�st�t|jtj�s"|Stjg|jj�}d}xh|jjD]\}t|tjtj	f�rz|jj
|�t||j�|jd}q@|dkr�|jj
|�q@|jj
|�q@W||_|S)a� The 'case' statements in a 'switch' come out of parsing with one
        child node, so subsequent statements are just tucked to the parent
        Compound. Additionally, consecutive (fall-through) case statements
        come out messy. This is a peculiarity of the C grammar. The following:

            switch (myvar) {
                case 10:
                    k = 10;
                    p = k + 1;
                    return 10;
                case 20:
                case 30:
                    return 20;
                default:
                    break;
            }

        Creates this tree (pseudo-dump):

            Switch
                ID: myvar
                Compound:
                    Case 10:
                        k = 10
                    p = k + 1
                    return 10
                    Case 20:
                        Case 30:
                            return 20
                    Default:
                        break

        The goal of this transform it to fix this mess, turning it into the
        following:

            Switch
                ID: myvar
                Compound:
                    Case 10:
                        k = 10
                        p = k + 1
                        return 10
                    Case 20:
                    Case 30:
                        return 20
                    Default:
                        break

        A fixed AST node is returned. The argument may be modified.
    Nr���)
�
isinstancerZSwitch�AssertionErrorZstmtZCompoundZcoordZblock_items�Case�Default�append�_extract_nested_case�stmts)Zswitch_nodeZnew_compoundZ	last_caseZchild�r�$/usr/lib/python3.6/ast_transforms.py�fix_switch_cases
s3r
cCs:t|jdtjtjf�r6|j|jj��t|d|�dS)z� Recursively extract consecutive Case statements that are made nested
        by the parser and add them to the stmts_list.
    �rNr)rr
rrrr�popr	)Z	case_nodeZ
stmts_listrrrr	bsr	N)�rr
r	rrrr�<module>
sUPK�[ǦX+:+:&__pycache__/c_generator.cpython-36.pycnu�[���3

g�wU5�@s ddlmZGdd�de�ZdS)�)�c_astc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdldd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)dOdP�Z*dQdR�Z+dSdT�Z,dUdV�Z-dWdX�Z.dYdZ�Z/d[d\�Z0d]d^�Z1dmd_d`�Z2dadb�Z3gfdcdd�Z4dedf�Z5dgdh�Z6didj�Z7dkS)n�
CGeneratorz� Uses the same visitor pattern as c_ast.NodeVisitor, but modified to
        return a value from each visit method, using string accumulation in
        generic_visit.
    cCs
d|_dS)N�)�indent_level)�self�r�!/usr/lib/python3.6/c_generator.py�__init__szCGenerator.__init__cCs
d|jS)N� )r)rrrr�_make_indentszCGenerator._make_indentcCsd|jj}t|||j�|�S)NZvisit_)�	__class__�__name__�getattr�
generic_visit)r�node�methodrrr�visitszCGenerator.visitcs,|dkrdSdj�fdd�|j�D��SdS)N�c3s|]\}}�j|�VqdS)N)r)�.0Zc_name�c)rrr�	<genexpr>#sz+CGenerator.generic_visit.<locals>.<genexpr>)�joinZchildren)rrr)rrrszCGenerator.generic_visitcCs|jS)N)�value)r�nrrr�visit_Constant%szCGenerator.visit_ConstantcCs|jS)N)�name)rrrrr�visit_ID(szCGenerator.visit_IDcCs$|j|j�}|d|j|j�dS)N�[�])�_parenthesize_unless_simplerrZ	subscript)rrZarrrefrrr�visit_ArrayRef+szCGenerator.visit_ArrayRefcCs"|j|j�}||j|j|j�S)N)rr�typerZfield)rrZsrefrrr�visit_StructRef/szCGenerator.visit_StructRefcCs$|j|j�}|d|j|j�dS)N�(�))rrr�args)rrZfrefrrr�visit_FuncCall3szCGenerator.visit_FuncCallcCs\|j|j�}|jdkrd|S|jdkr0d|S|jdkrJd|j|j�Sd|j|fSdS)Nzp++z%s++zp--z%s--Zsizeofz
sizeof(%s)z%s%s)r�expr�opr)rrZoperandrrr�
visit_UnaryOp7s


zCGenerator.visit_UnaryOpcs<�j|j�fdd��}�j|j�fdd��}d||j|fS)Ncs�j|�S)N)�_is_simple_node)�d)rrr�<lambda>Fsz+CGenerator.visit_BinaryOp.<locals>.<lambda>cs�j|�S)N)r*)r+)rrrr,Hsz%s %s %s)�_parenthesize_if�left�rightr()rrZlval_str�rval_strr)rr�visit_BinaryOpDs
zCGenerator.visit_BinaryOpcCs*|j|jdd��}d|j|j�|j|fS)NcSst|tj�S)N)�
isinstancer�
Assignment)rrrrr,Nsz-CGenerator.visit_Assignment.<locals>.<lambda>z%s %s %s)r-ZrvaluerZlvaluer()rrr0rrr�visit_AssignmentKs
zCGenerator.visit_AssignmentcCsdj|j�S)Nr
)r�names)rrrrr�visit_IdentifierTypeQszCGenerator.visit_IdentifierTypecCsJt|tj�rd|j|�dSt|tj�r<d|j|�dS|j|�SdS)N�{�}r#r$)r2rZInitListr�ExprList)rrrrr�_visit_exprTs
zCGenerator._visit_exprFcCsL|r
|jn|j|�}|jr.|d|j|j�7}|jrH|d|j|j�7}|S)Nz : z = )r�_generate_declZbitsizer�initr:)rr�no_type�srrr�
visit_Decl\szCGenerator.visit_DeclcsL�j|jd�}t|j�dkrH|ddj�fdd�|jdd�D��7}|S)Nrrz, c3s|]}�j|dd�VqdS)T)r=N)r?)r�decl)rrrrisz,CGenerator.visit_DeclList.<locals>.<genexpr>)r�decls�lenr)rrr>r)rr�visit_DeclListfs
zCGenerator.visit_DeclListcCs2d}|jr|dj|j�d7}||j|j�7}|S)Nrr
)�storager�_generate_typer!)rrr>rrr�
visit_Typedefms
zCGenerator.visit_TypedefcCs(d|j|j�d}|d|j|j�S)Nr#r$r
)rEZto_typerr')rrr>rrr�
visit_CastsszCGenerator.visit_CastcCs.g}x|jD]}|j|j|��qWdj|�S)Nz, )�exprs�appendr:r)rr�visited_subexprsr'rrr�visit_ExprListwszCGenerator.visit_ExprListcCs.g}x|jD]}|j|j|��qWdj|�S)Nz, )rHrIr:r)rrrJr'rrr�visit_InitList}szCGenerator.visit_InitListcCs�d}|jr|d|j7}|jr�|d7}xXt|jj�D]H\}}||j7}|jr`|d|j|j�7}|t|jj�dkr4|d7}q4W|d7}|S)N�enumr
z {z = rz, r8)r�values�	enumerateZenumeratorsrrrB)rrr>�iZ
enumeratorrrr�
visit_Enum�s
zCGenerator.visit_Enumcsj�j|j�}d�_�j|j�}|jrVdj�fdd�|jD��}|d|d|dS|d|dSdS)Nrz;
c3s|]}�j|�VqdS)N)r)r�p)rrrr�sz+CGenerator.visit_FuncDef.<locals>.<genexpr>�
)rr@r�bodyZparam_declsr)rrr@rTZknrdeclsr)rr�
visit_FuncDef�szCGenerator.visit_FuncDefcCsFd}x<|jD]2}t|tj�r,||j|�7}q||j|�d7}qW|S)Nrz;
)�extr2rZFuncDefr)rrr>rVrrr�
visit_FileAST�szCGenerator.visit_FileASTcs`�j�d}�jd7_|jr>|dj�fdd�|jD��7}�jd8_|�j�d7}|S)Nz{
�rc3s|]}�j|�VqdS)N)�_generate_stmt)r�stmt)rrrr�sz,CGenerator.visit_Compound.<locals>.<genexpr>z}
)rrZblock_itemsr)rrr>r)rr�visit_Compound�szCGenerator.visit_CompoundcCsdS)N�;r)rrrrr�visit_EmptyStatement�szCGenerator.visit_EmptyStatementcsdj�fdd�|jD��S)Nz, c3s|]}�j|�VqdS)N)r)rZparam)rrrr�sz-CGenerator.visit_ParamList.<locals>.<genexpr>)rZparams)rrr)rr�visit_ParamList�szCGenerator.visit_ParamListcCs&d}|jr|d|j|j�7}|dS)N�returnr
r\)r'r)rrr>rrr�visit_Return�szCGenerator.visit_ReturncCsdS)Nzbreak;r)rrrrr�visit_Break�szCGenerator.visit_BreakcCsdS)Nz	continue;r)rrrrr�visit_Continue�szCGenerator.visit_ContinuecCs8|j|j�d}||j|j�d7}||j|j�7}|S)Nz ? z : )r:�cond�iftrue�iffalse)rrr>rrr�visit_TernaryOp�szCGenerator.visit_TernaryOpcCsdd}|jr||j|j�7}|d7}||j|jdd�7}|jr`||j�d7}||j|jdd�7}|S)Nzif (z)
T)�
add_indentzelse
)rcrrYrdrer)rrr>rrr�visit_If�szCGenerator.visit_IfcCs~d}|jr||j|j�7}|d7}|jr<|d|j|j�7}|d7}|jr^|d|j|j�7}|d7}||j|jdd�7}|S)Nzfor (r\r
z)
T)rg)r<rrc�nextrYrZ)rrr>rrr�	visit_For�szCGenerator.visit_ForcCs:d}|jr||j|j�7}|d7}||j|jdd�7}|S)Nzwhile (z)
T)rg)rcrrYrZ)rrr>rrr�visit_While�szCGenerator.visit_WhilecCsJd}||j|jdd�7}||j�d7}|jr>||j|j�7}|d7}|S)Nzdo
T)rgzwhile (z);)rYrZrrcr)rrr>rrr�
visit_DoWhile�szCGenerator.visit_DoWhilecCs,d|j|j�d}||j|jdd�7}|S)Nzswitch (z)
T)rg)rrcrYrZ)rrr>rrr�visit_Switch�szCGenerator.visit_SwitchcCs:d|j|j�d}x |jD]}||j|dd�7}qW|S)Nzcase z:
T)rg)rr'�stmtsrY)rrr>rZrrr�
visit_Case�szCGenerator.visit_CasecCs*d}x |jD]}||j|dd�7}qW|S)Nz	default:
T)rg)rnrY)rrr>rZrrr�
visit_Default�szCGenerator.visit_DefaultcCs|jd|j|j�S)Nz:
)rrYrZ)rrrrr�visit_Label�szCGenerator.visit_LabelcCsd|jdS)Nzgoto r\)r)rrrrr�
visit_Goto�szCGenerator.visit_GotocCsdS)Nz...r)rrrrr�visit_EllipsisParam�szCGenerator.visit_EllipsisParamcCs|j|d�S)N�struct)�_generate_struct_union)rrrrr�visit_StructszCGenerator.visit_StructcCs|j|j�S)N)rEr!)rrrrr�visit_TypenameszCGenerator.visit_TypenamecCs|j|d�S)N�union)ru)rrrrr�visit_UnionszCGenerator.visit_UnioncCsfd}xH|jD]>}t|tj�r,|d|j7}qt|tj�r|d|jd7}qW|d|j|j�7}|S)Nr�.rrz = )rr2r�ID�Constantrrr')rrr>rrrr�visit_NamedInitializersz!CGenerator.visit_NamedInitializercCs
|j|�S)N)rE)rrrrr�visit_FuncDeclszCGenerator.visit_FuncDeclcCs�|d|jpd}|jr~|d7}||j�7}|jd7_|d7}x|jD]}||j|�7}qJW|jd8_||j�d7}|S)ze Generates code for structs and unions. name should be either
            'struct' or union.
        r
rrSrXz{
r8)rrArrrY)rrrr>r@rrrrusz!CGenerator._generate_struct_unioncCs�t|�}|r|jd7_|j�}|r4|jd8_|tjtjtjtjtjtj	tj
tjtjtj
tjtjtjf
kr�||j|�dS|tjfkr�|j|�S||j|�dSdS)z� Generation from a statement node. This method exists as a wrapper
            for individual visit_* methods to handle different treatment of
            some statements in this context.
        rXz;
rSN)r!rrr�Declr3ZCastZUnaryOpZBinaryOpZ	TernaryOp�FuncCall�ArrayRef�	StructRefr|r{ZTypedefr9rZCompound)rrrg�typ�indentrrrrY(s

zCGenerator._generate_stmtcCsHd}|jrdj|j�d}|jr4|dj|j�d7}||j|j�7}|S)z& Generation from a Decl node.
        rr
)ZfuncspecrrDrEr!)rrr>rrrr;DszCGenerator._generate_declcCs�t|�}|tjk�rNd}|jr2|dj|j�d7}||j|j�7}|jrN|jnd}x�t|�D]�\}}t|tj	�r�|dkr�t||dtj
�r�d|d}|d|j|j�d7}q\t|tj��r|dkr�t||dtj
�r�d|d}|d|j|j
�d7}q\t|tj
�r\|j�r,d	dj|j�|f}q\d
|}q\W|�rJ|d|7}|S|tjk�rf|j|j�S|tjk�r~|j|j�S|tjk�r�dj|j�dS|tj	tj
tjfk�r�|j|j||g�S|j|�SdS)z� Recursive generation from a type node. n is the type node.
            modifiers collects the PtrDecl, ArrayDecl and FuncDecl modifiers
            encountered on the way down to a TypeDecl, to allow proper
            generation from it.
        rr
rrr#r$rrz* %s %s�*N)r!rZTypeDeclZqualsrrZdeclnamerOr2Z	ArrayDeclZPtrDeclZdimZFuncDeclr%rr;ZTypenamerEZIdentifierTyper5)rrZ	modifiersr�r>ZnstrrPZmodifierrrrrEMs@zCGenerator._generate_typecCs&|j|�}||�rd|dS|SdS)z� Visits 'n' and returns its string representation, parenthesized
            if the condition function applied to the node returns True.
        r#r$N)r:)rrZ	conditionr>rrrr-{s
zCGenerator._parenthesize_ifcs�j|�fdd��S)z. Common use case for _parenthesize_if
        cs�j|�S)N)r*)r+)rrrr,�sz8CGenerator._parenthesize_unless_simple.<locals>.<lambda>)r-)rrr)rrr�sz&CGenerator._parenthesize_unless_simplecCst|tjtjtjtjtjf�S)z~ Returns True for nodes that are "simple" - i.e. nodes that always
            have higher precedence than operators.
        )r2rr|r{r�r�r�)rrrrrr*�szCGenerator._is_simple_nodeN)F)F)8r
�
__module__�__qualname__�__doc__r	rrrrrr r"r&r)r1r4r6r:r?rCrFrGrKrLrQrUrWr[r]r^r`rarbrfrhrjrkrlrmrorprqrrrsrvrwryr}r~rurYr;rEr-rr*rrrrrsj



		


	.
rN)rr�objectrrrrr�<module>	sPK�[����#t#t&__pycache__/c_ast.cpython-36.opt-1.pycnu�[���3

��]([�@sddlZGdd�de�ZGdd�de�ZGdd�de�ZGdd	�d	e�ZGd
d�de�ZGdd
�d
e�ZGdd�de�ZGdd�de�Z	Gdd�de�Z
Gdd�de�ZGdd�de�ZGdd�de�Z
Gdd�de�ZGdd�de�ZGdd�de�ZGd d!�d!e�ZGd"d#�d#e�ZGd$d%�d%e�ZGd&d'�d'e�ZGd(d)�d)e�ZGd*d+�d+e�ZGd,d-�d-e�ZGd.d/�d/e�ZGd0d1�d1e�ZGd2d3�d3e�ZGd4d5�d5e�ZGd6d7�d7e�ZGd8d9�d9e�ZGd:d;�d;e�ZGd<d=�d=e�ZGd>d?�d?e�Z Gd@dA�dAe�Z!GdBdC�dCe�Z"GdDdE�dEe�Z#GdFdG�dGe�Z$GdHdI�dIe�Z%GdJdK�dKe�Z&GdLdM�dMe�Z'GdNdO�dOe�Z(GdPdQ�dQe�Z)GdRdS�dSe�Z*GdTdU�dUe�Z+GdVdW�dWe�Z,GdXdY�dYe�Z-GdZd[�d[e�Z.Gd\d]�d]e�Z/Gd^d_�d_e�Z0Gd`da�dae�Z1dS)b�Nc@s0eZdZfZdd�Zejdddddfdd�ZdS)�NodecCsdS)z3 A sequence of all children that are Nodes
        N�)�selfrr�/usr/lib/python3.6/c_ast.py�childrensz
Node.childrenrFNc
	sd|}|r4|dk	r4|j|�jjd|d�n|j|�jjd��jr�|r~�fdd��jD�}djd	d
�|D��}	n(�fdd��jD�}
djdd
�|
D��}	|j|	�|r�|jd
�j�|jd�x.�j�D]"\}}|j||d||||d�q�WdS)a� Pretty print the Node and all its attributes and
            children (recursively) to a buffer.

            buf:
                Open IO buffer into which the Node is printed.

            offset:
                Initial offset (amount of leading spaces)

            attrnames:
                True if you want to see the attribute names in
                name=value pairs. False to only see the values.

            nodenames:
                True if you want to see the actual node names
                within their parents.

            showcoord:
                Do you want the coordinates of each Node to be
                displayed.
        � Nz <z>: z: csg|]}|t�|�f�qSr)�getattr)�.0�n)rrr�
<listcomp>=szNode.show.<locals>.<listcomp>z, css|]}d|VqdS)z%s=%sNr)r	Znvrrr�	<genexpr>>szNode.show.<locals>.<genexpr>csg|]}t�|��qSr)r)r	r
)rrrr@scss|]}d|VqdS)z%sNr)r	�vrrrrAsz (at %s)�
�)�offset�	attrnames�	nodenames�	showcoord�
_my_node_name)�write�	__class__�__name__�
attr_names�join�coordr�show)
rZbufrrrrrZleadZnvlistZattrstrZvlistZ
child_name�childr)rrrs, 

z	Node.show)r�
__module__�__qualname__�	__slots__r�sys�stdoutrrrrrrsrc@s eZdZdZdd�Zdd�ZdS)�NodeVisitora- A base NodeVisitor class for visiting c_ast nodes.
        Subclass it and define your own visit_XXX methods, where
        XXX is the class name you want to visit with these
        methods.

        For example:

        class ConstantVisitor(NodeVisitor):
            def __init__(self):
                self.values = []

            def visit_Constant(self, node):
                self.values.append(node.value)

        Creates a list of values of all the constant nodes
        encountered below the given node. To use it:

        cv = ConstantVisitor()
        cv.visit(node)

        Notes:

        *   generic_visit() will be called for AST nodes for which
            no visit_XXX method was defined.
        *   The children of nodes for which a visit_XXX was
            defined will not be visited - if you need this, call
            generic_visit() on the node.
            You can use:
                NodeVisitor.generic_visit(self, node)
        *   Modeled after Python's own AST visiting facilities
            (the ast module of Python 3.0)
    cCs"d|jj}t|||j�}||�S)z Visit a node.
        Zvisit_)rrr�
generic_visit)r�node�methodZvisitorrrr�visitsszNodeVisitor.visitcCs$x|j�D]\}}|j|�q
WdS)zy Called if no explicit visitor function exists for a
            node. Implements preorder visiting of the node.
        N)rr&)rr$Zc_name�crrrr#zszNodeVisitor.generic_visitN)rrr�__doc__r&r#rrrrr"Rs r"c@s&eZdZdZddd�Zd	d
�Zd
ZdS)�	ArrayDecl�type�dim�	dim_qualsr�__weakref__NcCs||_||_||_||_dS)N)r*r+r,r)rr*r+r,rrrr�__init__�szArrayDecl.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nr*r+)r*�appendr+�tuple)r�nodelistrrrr�s

zArrayDecl.children)r*r+r,rr-)N)r,)rrrrr.rrrrrrr)�s
r)c@s&eZdZd
Zddd�Zdd	�ZfZdS)�ArrayRef�name�	subscriptrr-NcCs||_||_||_dS)N)r3r4r)rr3r4rrrrr.�szArrayRef.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nr3r4)r3r/r4r0)rr1rrrr�s

zArrayRef.children)r3r4rr-)N)rrrrr.rrrrrrr2�s
r2c@s&eZdZdZddd�Zd	d
�Zd
ZdS)�
Assignment�op�lvalue�rvaluerr-NcCs||_||_||_||_dS)N)r6r7r8r)rr6r7r8rrrrr.�szAssignment.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nr7r8)r7r/r8r0)rr1rrrr�s

zAssignment.children)r6r7r8rr-)N)r6)rrrrr.rrrrrrr5�s
r5c@s&eZdZdZddd�Zd	d
�Zd
ZdS)�BinaryOpr6�left�rightrr-NcCs||_||_||_||_dS)N)r6r:r;r)rr6r:r;rrrrr.�szBinaryOp.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nr:r;)r:r/r;r0)rr1rrrr�s

zBinaryOp.children)r6r:r;rr-)N)r6)rrrrr.rrrrrrr9�s
r9c@s&eZdZdZd	dd�Zdd�ZfZdS)
�Breakrr-NcCs
||_dS)N)r)rrrrrr.�szBreak.__init__cCsfS)Nr)rrrrr�szBreak.children)rr-)N)rrrrr.rrrrrrr<�s
r<c@s&eZdZd
Zddd�Zdd	�ZfZdS)�Case�expr�stmtsrr-NcCs||_||_||_dS)N)r>r?r)rr>r?rrrrr.�sz
Case.__init__cCsTg}|jdk	r|jd|jf�x,t|jp*g�D]\}}|jd||f�q.Wt|�S)Nr>z	stmts[%d])r>r/�	enumerater?r0)rr1�irrrrr�s
z
Case.children)r>r?rr-)N)rrrrr.rrrrrrr=�s
r=c@s&eZdZd
Zddd�Zdd	�ZfZdS)�Cast�to_typer>rr-NcCs||_||_||_dS)N)rCr>r)rrCr>rrrrr.�sz
Cast.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)NrCr>)rCr/r>r0)rr1rrrr�s

z
Cast.children)rCr>rr-)N)rrrrr.rrrrrrrB�s
rBc@s&eZdZd	Zd
dd�Zdd�ZfZdS)�Compound�block_itemsrr-NcCs||_||_dS)N)rEr)rrErrrrr.�szCompound.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nzblock_items[%d])r@rEr/r0)rr1rArrrrr�szCompound.children)rErr-)N)rrrrr.rrrrrrrD�s
rDc@s&eZdZd
Zddd�Zdd	�ZfZdS)�CompoundLiteralr*�initrr-NcCs||_||_||_dS)N)r*rGr)rr*rGrrrrr.�szCompoundLiteral.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nr*rG)r*r/rGr0)rr1rrrr�s

zCompoundLiteral.children)r*rGrr-)N)rrrrr.rrrrrrrF�s
rFc@s&eZdZd
Zddd�Zdd	�ZdZdS)
�Constantr*�valuerr-NcCs||_||_||_dS)N)r*rIr)rr*rIrrrrr.	szConstant.__init__cCsg}t|�S)N)r0)rr1rrrrszConstant.children)r*rIrr-)N)r*rI)rrrrr.rrrrrrrHs
rHc@s&eZdZdZd	dd�Zdd�ZfZdS)
�Continuerr-NcCs
||_dS)N)r)rrrrrr.szContinue.__init__cCsfS)Nr)rrrrrszContinue.children)rr-)N)rrrrr.rrrrrrrJs
rJc	@s&eZdZdZddd�Zd
d�ZdZd
S)�Declr3�quals�storage�funcspecr*rG�bitsizerr-Nc		Cs4||_||_||_||_||_||_||_||_dS)N)r3rLrMrNr*rGrOr)	rr3rLrMrNr*rGrOrrrrr. sz
Decl.__init__cCsZg}|jdk	r|jd|jf�|jdk	r8|jd|jf�|jdk	rR|jd|jf�t|�S)Nr*rGrO)r*r/rGrOr0)rr1rrrr*s


z
Decl.children)	r3rLrMrNr*rGrOrr-)N)r3rLrMrN)rrrrr.rrrrrrrKs

rKc@s&eZdZd	Zd
dd�Zdd�ZfZdS)�DeclList�declsrr-NcCs||_||_dS)N)rQr)rrQrrrrr.5szDeclList.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nz	decls[%d])r@rQr/r0)rr1rArrrrr9szDeclList.children)rQrr-)N)rrrrr.rrrrrrrP3s
rPc@s&eZdZd	Zd
dd�Zdd�ZfZdS)�Defaultr?rr-NcCs||_||_dS)N)r?r)rr?rrrrr.CszDefault.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nz	stmts[%d])r@r?r/r0)rr1rArrrrrGszDefault.children)r?rr-)N)rrrrr.rrrrrrrRAs
rRc@s&eZdZd
Zddd�Zdd	�ZfZdS)�DoWhile�cond�stmtrr-NcCs||_||_||_dS)N)rTrUr)rrTrUrrrrr.QszDoWhile.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)NrTrU)rTr/rUr0)rr1rrrrVs

zDoWhile.children)rTrUrr-)N)rrrrr.rrrrrrrSOs
rSc@s&eZdZdZd	dd�Zdd�ZfZdS)
�
EllipsisParamrr-NcCs
||_dS)N)r)rrrrrr.`szEllipsisParam.__init__cCsfS)Nr)rrrrrcszEllipsisParam.children)rr-)N)rrrrr.rrrrrrrV^s
rVc@s&eZdZdZd	dd�Zdd�ZfZdS)
�EmptyStatementrr-NcCs
||_dS)N)r)rrrrrr.jszEmptyStatement.__init__cCsfS)Nr)rrrrrmszEmptyStatement.children)rr-)N)rrrrr.rrrrrrrWhs
rWc@s&eZdZd
Zddd�Zdd	�ZdZdS)
�Enumr3�valuesrr-NcCs||_||_||_dS)N)r3rYr)rr3rYrrrrr.tsz
Enum.__init__cCs&g}|jdk	r|jd|jf�t|�S)NrY)rYr/r0)rr1rrrrys
z
Enum.children)r3rYrr-)N)r3)rrrrr.rrrrrrrXrs
rXc@s&eZdZd
Zddd�Zdd	�ZdZdS)
�
Enumeratorr3rIrr-NcCs||_||_||_dS)N)r3rIr)rr3rIrrrrr.�szEnumerator.__init__cCs&g}|jdk	r|jd|jf�t|�S)NrI)rIr/r0)rr1rrrr�s
zEnumerator.children)r3rIrr-)N)r3)rrrrr.rrrrrrrZ�s
rZc@s&eZdZd	Zd
dd�Zdd�ZfZdS)�EnumeratorList�enumeratorsrr-NcCs||_||_dS)N)r\r)rr\rrrrr.�szEnumeratorList.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nzenumerators[%d])r@r\r/r0)rr1rArrrrr�szEnumeratorList.children)r\rr-)N)rrrrr.rrrrrrr[�s
r[c@s&eZdZd	Zd
dd�Zdd�ZfZdS)�ExprList�exprsrr-NcCs||_||_dS)N)r^r)rr^rrrrr.�szExprList.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nz	exprs[%d])r@r^r/r0)rr1rArrrrr�szExprList.children)r^rr-)N)rrrrr.rrrrrrr]�s
r]c@s&eZdZd	Zd
dd�Zdd�ZfZdS)�FileAST�extrr-NcCs||_||_dS)N)r`r)rr`rrrrr.�szFileAST.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nzext[%d])r@r`r/r0)rr1rArrrrr�szFileAST.children)r`rr-)N)rrrrr.rrrrrrr_�s
r_c@s&eZdZdZd
dd	�Zd
d�ZfZdS)�ForrGrT�nextrUrr-NcCs"||_||_||_||_||_dS)N)rGrTrbrUr)rrGrTrbrUrrrrr.�s
zFor.__init__cCstg}|jdk	r|jd|jf�|jdk	r8|jd|jf�|jdk	rR|jd|jf�|jdk	rl|jd|jf�t|�S)NrGrTrbrU)rGr/rTrbrUr0)rr1rrrr�s



zFor.children)rGrTrbrUrr-)N)rrrrr.rrrrrrra�s
rac@s&eZdZd
Zddd�Zdd	�ZfZdS)�FuncCallr3�argsrr-NcCs||_||_||_dS)N)r3rdr)rr3rdrrrrr.�szFuncCall.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nr3rd)r3r/rdr0)rr1rrrr�s

zFuncCall.children)r3rdrr-)N)rrrrr.rrrrrrrc�s
rcc@s&eZdZd
Zddd�Zdd	�ZfZdS)�FuncDeclrdr*rr-NcCs||_||_||_dS)N)rdr*r)rrdr*rrrrr.�szFuncDecl.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nrdr*)rdr/r*r0)rr1rrrr�s

zFuncDecl.children)rdr*rr-)N)rrrrr.rrrrrrre�s
rec@s&eZdZdZddd�Zd	d
�ZfZdS)
�FuncDef�decl�param_decls�bodyrr-NcCs||_||_||_||_dS)N)rgrhrir)rrgrhrirrrrr.�szFuncDef.__init__cCsng}|jdk	r|jd|jf�|jdk	r8|jd|jf�x,t|jpDg�D]\}}|jd||f�qHWt|�S)Nrgrizparam_decls[%d])rgr/rir@rhr0)rr1rArrrrr�s

zFuncDef.children)rgrhrirr-)N)rrrrr.rrrrrrrf�s
rfc@s&eZdZd	Zd
dd�Zdd�ZdZdS)�Gotor3rr-NcCs||_||_dS)N)r3r)rr3rrrrr.�sz
Goto.__init__cCsg}t|�S)N)r0)rr1rrrrsz
Goto.children)r3rr-)N)r3)rrrrr.rrrrrrrj�s
rjc@s&eZdZd	Zd
dd�Zdd�ZdZdS)�IDr3rr-NcCs||_||_dS)N)r3r)rr3rrrrr.	szID.__init__cCsg}t|�S)N)r0)rr1rrrr
szID.children)r3rr-)N)r3)rrrrr.rrrrrrrks
rkc@s&eZdZd	Zd
dd�Zdd�ZdZdS)�IdentifierType�namesrr-NcCs||_||_dS)N)rmr)rrmrrrrr.szIdentifierType.__init__cCsg}t|�S)N)r0)rr1rrrrszIdentifierType.children)rmrr-)N)rm)rrrrr.rrrrrrrls
rlc@s&eZdZdZddd�Zd	d
�ZfZdS)
�IfrT�iftrue�iffalserr-NcCs||_||_||_||_dS)N)rTrorpr)rrTrorprrrrr.!szIf.__init__cCsZg}|jdk	r|jd|jf�|jdk	r8|jd|jf�|jdk	rR|jd|jf�t|�S)NrTrorp)rTr/rorpr0)rr1rrrr's


zIf.children)rTrorprr-)N)rrrrr.rrrrrrrns
rnc@s&eZdZd	Zd
dd�Zdd�ZfZdS)�InitListr^rr-NcCs||_||_dS)N)r^r)rr^rrrrr.2szInitList.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nz	exprs[%d])r@r^r/r0)rr1rArrrrr6szInitList.children)r^rr-)N)rrrrr.rrrrrrrq0s
rqc@s&eZdZd
Zddd�Zdd	�ZdZdS)
�Labelr3rUrr-NcCs||_||_||_dS)N)r3rUr)rr3rUrrrrr.@szLabel.__init__cCs&g}|jdk	r|jd|jf�t|�S)NrU)rUr/r0)rr1rrrrEs
zLabel.children)r3rUrr-)N)r3)rrrrr.rrrrrrrr>s
rrc@s&eZdZd
Zddd�Zdd	�ZfZdS)�NamedInitializerr3r>rr-NcCs||_||_||_dS)N)r3r>r)rr3r>rrrrr.NszNamedInitializer.__init__cCsTg}|jdk	r|jd|jf�x,t|jp*g�D]\}}|jd||f�q.Wt|�S)Nr>zname[%d])r>r/r@r3r0)rr1rArrrrrSs
zNamedInitializer.children)r3r>rr-)N)rrrrr.rrrrrrrsLs
rsc@s&eZdZd	Zd
dd�Zdd�ZfZdS)�	ParamList�paramsrr-NcCs||_||_dS)N)rur)rrurrrrr.^szParamList.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nz
params[%d])r@rur/r0)rr1rArrrrrbszParamList.children)rurr-)N)rrrrr.rrrrrrrt\s
rtc@s&eZdZd
Zddd�Zdd	�ZdZdS)
�PtrDeclrLr*rr-NcCs||_||_||_dS)N)rLr*r)rrLr*rrrrr.lszPtrDecl.__init__cCs&g}|jdk	r|jd|jf�t|�S)Nr*)r*r/r0)rr1rrrrqs
zPtrDecl.children)rLr*rr-)N)rL)rrrrr.rrrrrrrvjs
rvc@s&eZdZd	Zd
dd�Zdd�ZfZdS)�Returnr>rr-NcCs||_||_dS)N)r>r)rr>rrrrr.zszReturn.__init__cCs&g}|jdk	r|jd|jf�t|�S)Nr>)r>r/r0)rr1rrrr~s
zReturn.children)r>rr-)N)rrrrr.rrrrrrrwxs
rwc@s&eZdZd
Zddd�Zdd	�ZdZdS)
�Structr3rQrr-NcCs||_||_||_dS)N)r3rQr)rr3rQrrrrr.�szStruct.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nz	decls[%d])r@rQr/r0)rr1rArrrrr�szStruct.children)r3rQrr-)N)r3)rrrrr.rrrrrrrx�s
rxc@s&eZdZdZddd�Zd	d
�Zd
ZdS)�	StructRefr3r*�fieldrr-NcCs||_||_||_||_dS)N)r3r*rzr)rr3r*rzrrrrr.�szStructRef.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nr3rz)r3r/rzr0)rr1rrrr�s

zStructRef.children)r3r*rzrr-)N)r*)rrrrr.rrrrrrry�s
ryc@s&eZdZd
Zddd�Zdd	�ZfZdS)�SwitchrTrUrr-NcCs||_||_||_dS)N)rTrUr)rrTrUrrrrr.�szSwitch.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)NrTrU)rTr/rUr0)rr1rrrr�s

zSwitch.children)rTrUrr-)N)rrrrr.rrrrrrr{�s
r{c@s&eZdZdZddd�Zd	d
�ZfZdS)
�	TernaryOprTrorprr-NcCs||_||_||_||_dS)N)rTrorpr)rrTrorprrrrr.�szTernaryOp.__init__cCsZg}|jdk	r|jd|jf�|jdk	r8|jd|jf�|jdk	rR|jd|jf�t|�S)NrTrorp)rTr/rorpr0)rr1rrrr�s


zTernaryOp.children)rTrorprr-)N)rrrrr.rrrrrrr|�s
r|c@s&eZdZdZddd�Zd	d
�Zd
ZdS)�TypeDecl�declnamerLr*rr-NcCs||_||_||_||_dS)N)r~rLr*r)rr~rLr*rrrrr.�szTypeDecl.__init__cCs&g}|jdk	r|jd|jf�t|�S)Nr*)r*r/r0)rr1rrrr�s
zTypeDecl.children)r~rLr*rr-)N)r~rL)rrrrr.rrrrrrr}�s
r}c@s&eZdZdZd
dd	�Zd
d�ZdZdS)�Typedefr3rLrMr*rr-NcCs"||_||_||_||_||_dS)N)r3rLrMr*r)rr3rLrMr*rrrrr.�s
zTypedef.__init__cCs&g}|jdk	r|jd|jf�t|�S)Nr*)r*r/r0)rr1rrrr�s
zTypedef.children)r3rLrMr*rr-)N)r3rLrM)rrrrr.rrrrrrr�s
rc@s&eZdZdZddd�Zd	d
�Zd
ZdS)�Typenamer3rLr*rr-NcCs||_||_||_||_dS)N)r3rLr*r)rr3rLr*rrrrr.�szTypename.__init__cCs&g}|jdk	r|jd|jf�t|�S)Nr*)r*r/r0)rr1rrrr�s
zTypename.children)r3rLr*rr-)N)r3rL)rrrrr.rrrrrrr��s
r�c@s&eZdZd
Zddd�Zdd	�ZdZdS)
�UnaryOpr6r>rr-NcCs||_||_||_dS)N)r6r>r)rr6r>rrrrr.�szUnaryOp.__init__cCs&g}|jdk	r|jd|jf�t|�S)Nr>)r>r/r0)rr1rrrr�s
zUnaryOp.children)r6r>rr-)N)r6)rrrrr.rrrrrrr��s
r�c@s&eZdZd
Zddd�Zdd	�ZdZdS)
�Unionr3rQrr-NcCs||_||_||_dS)N)r3rQr)rr3rQrrrrr.szUnion.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nz	decls[%d])r@rQr/r0)rr1rArrrrrszUnion.children)r3rQrr-)N)r3)rrrrr.rrrrrrr�s
r�c@s&eZdZd
Zddd�Zdd	�ZfZdS)�WhilerTrUrr-NcCs||_||_||_dS)N)rTrUr)rrTrUrrrrr.szWhile.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)NrTrU)rTr/rUr0)rr1rrrrs

zWhile.children)rTrUrr-)N)rrrrr.rrrrrrr�s
r�)2r �objectrr"r)r2r5r9r<r=rBrDrFrHrJrKrPrRrSrVrWrXrZr[r]r_rarcrerfrjrkrlrnrqrrrsrtrvrwrxryr{r|r}rr�r�r�r�rrrr�<module>s`<0





PK�[��}F����#__pycache__/c_parser.cpython-36.pycnu�[���3

��]��@s�ddlZddlmZddlmZddlmZddlmZm	Z	m
Z
ddlmZGdd	�d	e�Z
ed
kr|ddlZddlZddlZdS)�N)�yacc�)�c_ast)�CLexer)�	PLYParser�Coord�
ParseError)�fix_switch_casesc
@sDeZdZ�dCdd�Z�dDd	d
�Zdd�Zd
d�Zdd�Zdd�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd �Zd!d"�Zd#d$�Z�dEd%d&�Zd'd(�Zd)d*�Z�dPZd>d?�Zd@dA�ZdBdC�ZdDdE�ZdFdG�ZdHdI�ZdJdK�ZdLdM�ZdNdO�ZdPdQ�ZdRdS�Z dTdU�Z!dVdW�Z"dXdY�Z#dZd[�Z$d\d]�Z%d^d_�Z&d`da�Z'dbdc�Z(ddde�Z)dfdg�Z*dhdi�Z+djdk�Z,dldm�Z-dndo�Z.dpdq�Z/drds�Z0dtdu�Z1dvdw�Z2dxdy�Z3dzd{�Z4d|d}�Z5d~d�Z6d�d��Z7d�d��Z8d�d��Z9d�d��Z:d�d��Z;d�d��Z<d�d��Z=d�d��Z>d�d��Z?d�d��Z@d�d��ZAd�d��ZBd�d��ZCd�d��ZDd�d��ZEd�d��ZFd�d��ZGd�d��ZHd�d��ZId�d��ZJd�d��ZKd�d��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSd�d��ZTd�d��ZUd�d��ZVd�d��ZWd�dÄZXd�dńZYd�dDŽZZd�dɄZ[d�d˄Z\d�d̈́Z]d�dτZ^d�dфZ_d�dӄZ`d�dՄZad�dׄZbd�dلZcd�dۄZdd�d݄Zed�d߄Zfd�d�Zgd�d�Zhd�d�Zid�d�Zjd�d�Zkd�d�Zld�d�Zmd�d�Znd�d�Zod�d�Zpd�d��Zqd�d��Zrd�d��Zsd�d��Ztd�d��Zud�d��Zv�d�d�Zw�d�d�Zx�d�d�Zy�d�d�Zz�d�d	�Z{�d
�d�Z|�d�d
�Z}�d�d�Z~�d�d�Z�d�d�Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d �d!�Z��d"�d#�Z��d$�d%�Z��d&�d'�Z��d(�d)�Z��d*�d+�Z��d,�d-�Z��d.�d/�Z��d0�d1�Z��d2�d3�Z��d4�d5�Z��d6�d7�Z��d8�d9�Z��d:�d;�Z��d<�d=�Z��d>�d?�Z��d@�dA�Z��dBS(Q�CParserT�pycparser.lextab�pycparser.yacctabF�c	Cs�t|j|j|j|jd�|_|jj|||d�|jj|_ddddddd	d
ddd
dddg}x|D]}|j|�q\Wt	j	|d||||d�|_
t�g|_d|_
dS)a� Create a new CParser.

            Some arguments for controlling the debug/optimization
            level of the parser are provided. The defaults are
            tuned for release/performance mode.
            The simple rules for using them are:
            *) When tweaking CParser/CLexer, set these to False
            *) When releasing a stable parser, set to True

            lex_optimize:
                Set to False when you're modifying the lexer.
                Otherwise, changes in the lexer won't be used, if
                some lextab.py file exists.
                When releasing with a stable lexer, set to True
                to save the re-generation of the lexer table on
                each run.

            lextab:
                Points to the lex table that's used for optimized
                mode. Only if you're modifying the lexer and want
                some tests to avoid re-generating the table, make
                this point to a local lex table file (that's been
                earlier generated with lex_optimize=True)

            yacc_optimize:
                Set to False when you're modifying the parser.
                Otherwise, changes in the parser won't be used, if
                some parsetab.py file exists.
                When releasing with a stable parser, set to True
                to save the re-generation of the parser table on
                each run.

            yacctab:
                Points to the yacc table that's used for optimized
                mode. Only if you're modifying the parser, make
                this point to a local yacc table file

            yacc_debug:
                Generate a parser.out file that explains how yacc
                built the parsing table from the grammar.

            taboutputdir:
                Set this parameter to control the location of generated
                lextab and yacctab files.
        )Z
error_funcZon_lbrace_funcZon_rbrace_funcZtype_lookup_func)�optimize�lextab�	outputdirZabstract_declaratorZassignment_expressionZdeclaration_listZdeclaration_specifiersZdesignationZ
expressionZidentifier_listZinit_declarator_listZinitializer_listZparameter_type_listZspecifier_qualifier_listZblock_item_listZtype_qualifier_listZstruct_declarator_listZtranslation_unit_or_empty)�module�start�debugrZ	tabmodulerN)r�_lex_error_func�_lex_on_lbrace_func�_lex_on_rbrace_func�_lex_type_lookup_func�clexZbuild�tokensZ_create_opt_ruler�cparser�dict�_scope_stack�_last_yielded_token)	�selfZlex_optimizerZ
yacc_optimizeZyacctabZ
yacc_debugZtaboutputdirZrules_with_optZrule�r�/usr/lib/python3.6/c_parser.py�__init__sF5




zCParser.__init__rcCs6||j_|jj�t�g|_d|_|jj||j|d�S)a& Parses C code and returns an AST.

            text:
                A string containing the C source code

            filename:
                Name of the file being parsed (for meaningful
                error messages)

            debuglevel:
                Debug level to yacc
        N)�inputZlexerr)r�filenameZreset_linenorrrr�parse)r�textr#Z
debuglevelrrr r$~s


z
CParser.parsecCs|jjt��dS)N)r�appendr)rrrr �_push_scope�szCParser._push_scopecCs t|j�dkst�|jj�dS)Nr)�lenr�AssertionError�pop)rrrr �
_pop_scope�szCParser._pop_scopecCs4|jdj|d�s"|jd||�d|jd|<dS)zC Add a new typedef name (ie a TYPEID) to the current scope
        rTz;Typedef %r previously declared as non-typedef in this scopeN���r,)r�get�_parse_error)r�name�coordrrr �_add_typedef_name�s

zCParser._add_typedef_namecCs4|jdj|d�r"|jd||�d|jd|<dS)ze Add a new object, function, or enum member name (ie an ID) to the
            current scope
        rFz;Non-typedef %r previously declared as typedef in this scopeNr,r,)rr-r.)rr/r0rrr �_add_identifier�s

zCParser._add_identifiercCs.x(t|j�D]}|j|�}|dk	r|SqWdS)z8 Is *name* a typedef-name in the current scope?
        NF)�reversedrr-)rr/ZscopeZin_scoperrr �_is_type_in_scope�s

zCParser._is_type_in_scopecCs|j||j||��dS)N)r.�_coord)r�msg�line�columnrrr r�szCParser._lex_error_funccCs|j�dS)N)r')rrrr r�szCParser._lex_on_lbrace_funccCs|j�dS)N)r+)rrrr r�szCParser._lex_on_rbrace_funccCs|j|�}|S)z� Looks up types that were previously defined with
            typedef.
            Passed to the lexer for recognizing identifiers that
            are types.
        )r4)rr/Zis_typerrr r�s
zCParser._lex_type_lookup_funccCs|jjS)z� We need access to yacc's lookahead token in certain cases.
            This is the last token yacc requested from the lexer, so we
            ask the lexer.
        )rZ
last_token)rrrr �_get_yacc_lookahead_token�sz!CParser._get_yacc_lookahead_tokencCsd|}|}x|jr|j}q
Wt|tj�r0||_|S|}xt|jtj�sL|j}q6W|j|_||_|SdS)z� Tacks a type modifier on a declarator, and returns
            the modified declarator.

            Note: the declarator and modifier may be modified
        N)�type�
isinstancer�TypeDecl)r�decl�modifierZ
modifier_headZ
modifier_tailZ	decl_tailrrr �_type_modify_decl�s

zCParser._type_modify_declcCs�|}xt|tj�s|j}qW|j|_|j|_x>|D]6}t|tj�s2t|�dkr^|j	d|j
�q2||_|Sq2W|s�t|jtj�s�|j	d|j
�tjdg|j
d�|_n tjdd�|D�|dj
d�|_|S)	z- Fixes a declaration. Modifies decl.
        rz Invalid multiple types specifiedzMissing type in declaration�int)r0cSsg|]}|jD]}|�qqSr)�names)�.0�idr/rrr �
<listcomp>Usz/CParser._fix_decl_name_type.<locals>.<listcomp>r)r;rr<r:�declnamer/�quals�IdentifierTyper(r.r0�FuncDecl)rr=�typenamer:Ztnrrr �_fix_decl_name_type,s.


zCParser._fix_decl_name_typecCs(|ptggggd�}||jd|�|S)a� Declaration specifiers are represented by a dictionary
            with the entries:
            * qual: a list of type qualifiers
            * storage: a list of storage type qualifiers
            * type: a list of type specifiers
            * function: a list of function specifiers

            This method is given a declaration specifier, and a
            new specifier of a given kind.
            Returns the declaration specifier, with the new
            specifier incorporated.
        )�qual�storager:�functionr)r�insert)rZdeclspecZnewspecZkind�specrrr �_add_declaration_specifierYs
z"CParser._add_declaration_specifiercCsRd|dk}g}|djd�dk	r&�n4|dddkr�t|d�dksvt|ddj�d	ksv|j|ddjd�r�d
}x"|dD]}t|d�r�|j}Pq�W|jd|�tj|ddjddd|ddjd
�|dd<|dd=nrt	|ddtj
tjtjf��sZ|dd}xt	|tj��s.|j
}�qW|jdk�rZ|ddjd|_|dd=x�|D]�}	|	ddk	�svt�|�r�tjd|d|d|	d|	djd�}
n<tjd|d|d|d|	d|	jd�|	jd�|	djd�}
t	|
j
tj
tjtjf��r|
}n|j|
|d�}|�r>|�r.|j|j|j�n|j|j|j�|j|��q`W|S)z� Builds a list of declarations all sharing the given specifiers.
            If typedef_namespace is true, each declared name is added
            to the "typedef namespace", which also includes objects,
            functions, and enum constants.
        �typedefrLr�bitsizeNr=r:�r�?r0zInvalid declaration)rEr:rFr0rK)r/rFrLr:r0rM�init)r/rFrL�funcspecr:rUrRr0r,r,r,r,r,r,r,)r-r(rAr4�hasattrr0r.rr<r;�Struct�UnionrGr:rEr)ZTypedef�DeclrJr1r/r2r&)rrO�decls�typedef_namespaceZ
is_typedefZdeclarationsr0�tZdecls_0_tailr=�declarationZ
fixed_declrrr �_build_declarationsjsn&


zCParser._build_declarationscCsBd|dkst�|j|t|dd�gdd�d}tj||||jd�S)	z' Builds a function definition.
        rQrLN)r=rUT)rOr[r\r)r=�param_decls�bodyr0)r)r_rrZFuncDefr0)rrOr=r`rar^rrr �_build_function_definition�sz"CParser._build_function_definitioncCs|dkrtjStjSdS)z` Given a token (either STRUCT or UNION), selects the
            appropriate AST class.
        �structN)rrXrY)r�tokenrrr �_select_struct_union_class�sz"CParser._select_struct_union_class�left�LOR�LAND�OR�XOR�AND�EQ�NE�GT�GE�LT�LE�RSHIFT�LSHIFT�PLUS�MINUS�TIMES�DIVIDE�MODcCs2|ddkrtjg�|d<ntj|d�|d<dS)zh translation_unit_or_empty   : translation_unit
                                        | empty
        rNr)rZFileAST)r�prrr �p_translation_unit_or_empty�sz#CParser.p_translation_unit_or_emptycCs|d|d<dS)z4 translation_unit    : external_declaration
        rrNr)rryrrr �p_translation_unit_1�szCParser.p_translation_unit_1cCs.|ddk	r|dj|d�|d|d<dS)zE translation_unit    : translation_unit external_declaration
        rSNrr)�extend)rryrrr �p_translation_unit_2szCParser.p_translation_unit_2cCs|dg|d<dS)z7 external_declaration    : function_definition
        rrNr)rryrrr �p_external_declaration_1sz CParser.p_external_declaration_1cCs|d|d<dS)z/ external_declaration    : declaration
        rrNr)rryrrr �p_external_declaration_2sz CParser.p_external_declaration_2cCs|d|d<dS)z0 external_declaration    : pp_directive
        rrNr)rryrrr �p_external_declaration_3sz CParser.p_external_declaration_3cCsd|d<dS)z( external_declaration    : SEMI
        Nrr)rryrrr �p_external_declaration_4sz CParser.p_external_declaration_4cCs|jd|j|jd���dS)z  pp_directive  : PPHASH
        zDirectives not supported yetrN)r.r5�lineno)rryrrr �p_pp_directive$szCParser.p_pp_directivecCsPtggtjdg|j|jd��d�ggd�}|j||d|d|dd�|d<d	S)
zR function_definition : declarator declaration_list_opt compound_statement
        r@r)r0)rKrLr:rMrS�)rOr=r`rarN)rrrGr5r�rb)rryrOrrr �p_function_definition_1-szCParser.p_function_definition_1cCs.|d}|j||d|d|dd�|d<dS)zi function_definition : declaration_specifiers declarator declaration_list_opt compound_statement
        rrSr��)rOr=r`rarN)rb)rryrOrrr �p_function_definition_2>szCParser.p_function_definition_2cCs|d|d<dS)a
 statement   : labeled_statement
                        | expression_statement
                        | compound_statement
                        | selection_statement
                        | iteration_statement
                        | jump_statement
        rrNr)rryrrr �p_statementIszCParser.p_statementc
Cs�|d}|ddkr�|d}tjtjtjf}t|�dkrzt|d|�rztjd|d|d|d|ddd|djd	�g}q�|j|t	ddd
�gdd�}n|j||ddd�}||d<dS)
zE decl_body : declaration_specifiers init_declarator_list_opt
        rrSNr:rrKrLrM)r/rFrLrVr:rUrRr0)r=rUT)rOr[r\)
rrXrY�Enumr(r;rZr0r_r)rryrOZtyZs_u_or_er[rrr �p_decl_body\s.
zCParser.p_decl_bodycCs|d|d<dS)z& declaration : decl_body SEMI
        rrNr)rryrrr �
p_declaration�szCParser.p_declarationcCs,t|�dkr|dn|d|d|d<dS)zj declaration_list    : declaration
                                | declaration_list declaration
        rSrrN)r()rryrrr �p_declaration_list�szCParser.p_declaration_listcCs|j|d|dd�|d<dS)zM declaration_specifiers  : type_qualifier declaration_specifiers_opt
        rSrrKrN)rP)rryrrr �p_declaration_specifiers_1�sz"CParser.p_declaration_specifiers_1cCs|j|d|dd�|d<dS)zM declaration_specifiers  : type_specifier declaration_specifiers_opt
        rSrr:rN)rP)rryrrr �p_declaration_specifiers_2�sz"CParser.p_declaration_specifiers_2cCs|j|d|dd�|d<dS)zV declaration_specifiers  : storage_class_specifier declaration_specifiers_opt
        rSrrLrN)rP)rryrrr �p_declaration_specifiers_3�sz"CParser.p_declaration_specifiers_3cCs|j|d|dd�|d<dS)zQ declaration_specifiers  : function_specifier declaration_specifiers_opt
        rSrrMrN)rP)rryrrr �p_declaration_specifiers_4�sz"CParser.p_declaration_specifiers_4cCs|d|d<dS)z� storage_class_specifier : AUTO
                                    | REGISTER
                                    | STATIC
                                    | EXTERN
                                    | TYPEDEF
        rrNr)rryrrr �p_storage_class_specifier�sz!CParser.p_storage_class_specifiercCs|d|d<dS)z& function_specifier  : INLINE
        rrNr)rryrrr �p_function_specifier�szCParser.p_function_specifiercCs(tj|dg|j|jd��d�|d<dS)a� type_specifier  : VOID
                            | _BOOL
                            | CHAR
                            | SHORT
                            | INT
                            | LONG
                            | FLOAT
                            | DOUBLE
                            | _COMPLEX
                            | SIGNED
                            | UNSIGNED
        r)r0rN)rrGr5r�)rryrrr �p_type_specifier_1�s
zCParser.p_type_specifier_1cCs|d|d<dS)z� type_specifier  : typedef_name
                            | enum_specifier
                            | struct_or_union_specifier
        rrNr)rryrrr �p_type_specifier_2�szCParser.p_type_specifier_2cCs|d|d<dS)zo type_qualifier  : CONST
                            | RESTRICT
                            | VOLATILE
        rrNr)rryrrr �p_type_qualifier�szCParser.p_type_qualifiercCs0t|�dkr|d|dgn|dg|d<dS)z� init_declarator_list    : init_declarator
                                    | init_declarator_list COMMA init_declarator
        r�rr�rN)r()rryrrr �p_init_declarator_list_1�sz CParser.p_init_declarator_list_1cCstd|dd�g|d<dS)z6 init_declarator_list    : EQUALS initializer
        NrS)r=rUr)r)rryrrr �p_init_declarator_list_2�sz CParser.p_init_declarator_list_2cCst|ddd�g|d<dS)z7 init_declarator_list    : abstract_declarator
        rN)r=rUr)r)rryrrr �p_init_declarator_list_3�sz CParser.p_init_declarator_list_3cCs,t|dt|�dkr|dndd�|d<dS)zb init_declarator : declarator
                            | declarator EQUALS initializer
        rrSr�N)r=rUr)rr()rryrrr �p_init_declaratorszCParser.p_init_declaratorcCs|j|d|dd�|d<dS)zS specifier_qualifier_list    : type_qualifier specifier_qualifier_list_opt
        rSrrKrN)rP)rryrrr �p_specifier_qualifier_list_1sz$CParser.p_specifier_qualifier_list_1cCs|j|d|dd�|d<dS)zS specifier_qualifier_list    : type_specifier specifier_qualifier_list_opt
        rSrr:rN)rP)rryrrr �p_specifier_qualifier_list_2sz$CParser.p_specifier_qualifier_list_2cCs4|j|d�}||dd|j|jd��d�|d<dS)z{ struct_or_union_specifier   : struct_or_union ID
                                        | struct_or_union TYPEID
        rrSN)r/r[r0r)rer5r�)rry�klassrrr �p_struct_or_union_specifier_1s
z%CParser.p_struct_or_union_specifier_1cCs4|j|d�}|d|d|j|jd��d�|d<dS)zd struct_or_union_specifier : struct_or_union brace_open struct_declaration_list brace_close
        rNr�rS)r/r[r0r)rer5r�)rryr�rrr �p_struct_or_union_specifier_2s
z%CParser.p_struct_or_union_specifier_2cCs8|j|d�}||d|d|j|jd��d�|d<dS)z� struct_or_union_specifier   : struct_or_union ID brace_open struct_declaration_list brace_close
                                        | struct_or_union TYPEID brace_open struct_declaration_list brace_close
        rrSr�)r/r[r0rN)rer5r�)rryr�rrr �p_struct_or_union_specifier_3&s
z%CParser.p_struct_or_union_specifier_3cCs|d|d<dS)zF struct_or_union : STRUCT
                            | UNION
        rrNr)rryrrr �p_struct_or_union0szCParser.p_struct_or_unioncCs,t|�dkr|dn|d|d|d<dS)z� struct_declaration_list     : struct_declaration
                                        | struct_declaration_list struct_declaration
        rSrrN)r()rryrrr �p_struct_declaration_list8sz!CParser.p_struct_declaration_listcCs�|d}d|dkst�|ddk	r8|j||dd�}nht|d�dkr�|dd}t|tj�rf|}n
tj|�}|j|t|d	�gd�}n|j|tddd
�gd�}||d<dS)zW struct_declaration : specifier_qualifier_list struct_declarator_list_opt SEMI
        rrQrLrSN)rOr[r:r)r=)r=rU)r)r_r(r;rZNoderGr)rryrOr[ZnodeZ	decl_typerrr �p_struct_declaration_1>s$
zCParser.p_struct_declaration_1cCs(|j|dt|ddd�gd�|d<dS)zP struct_declaration : specifier_qualifier_list abstract_declarator SEMI
        rrSN)r=rU)rOr[r)r_r)rryrrr �p_struct_declaration_2ds
zCParser.p_struct_declaration_2cCs0t|�dkr|d|dgn|dg|d<dS)z� struct_declarator_list  : struct_declarator
                                    | struct_declarator_list COMMA struct_declarator
        r�rr�rN)r()rryrrr �p_struct_declarator_listrsz CParser.p_struct_declarator_listcCs|ddd�|d<dS)z( struct_declarator : declarator
        rN)r=rRrr)rryrrr �p_struct_declarator_1{szCParser.p_struct_declarator_1cCsDt|�dkr$|d|dd�|d<ntjddd�|dd�|d<dS)z� struct_declarator   : declarator COLON constant_expression
                                | COLON constant_expression
        r�r)r=rRrNrS)r(rr<)rryrrr �p_struct_declarator_2�szCParser.p_struct_declarator_2cCs&tj|dd|j|jd���|d<dS)zM enum_specifier  : ENUM ID
                            | ENUM TYPEID
        rSNrr)rr�r5r�)rryrrr �p_enum_specifier_1�szCParser.p_enum_specifier_1cCs&tjd|d|j|jd���|d<dS)zG enum_specifier  : ENUM brace_open enumerator_list brace_close
        Nr�rr)rr�r5r�)rryrrr �p_enum_specifier_2�szCParser.p_enum_specifier_2cCs*tj|d|d|j|jd���|d<dS)z� enum_specifier  : ENUM ID brace_open enumerator_list brace_close
                            | ENUM TYPEID brace_open enumerator_list brace_close
        rSr�rrN)rr�r5r�)rryrrr �p_enum_specifier_3�szCParser.p_enum_specifier_3cCsht|�dkr*tj|dg|dj�|d<n:t|�dkrD|d|d<n |djj|d�|d|d<dS)z� enumerator_list : enumerator
                            | enumerator_list COMMA
                            | enumerator_list COMMA enumerator
        rSrrr�N)r(rZEnumeratorListr0Zenumeratorsr&)rryrrr �p_enumerator_list�szCParser.p_enumerator_listcCsjt|�dkr,tj|dd|j|jd���}n"tj|d|d|j|jd���}|j|j|j�||d<dS)zR enumerator  : ID
                        | ID EQUALS constant_expression
        rSrNr�r)r(rZ
Enumeratorr5r�r2r/r0)rryZ
enumeratorrrr �p_enumerator�szCParser.p_enumeratorcCs|d|d<dS)z) declarator  : direct_declarator
        rrNr)rryrrr �p_declarator_1�szCParser.p_declarator_1cCs|j|d|d�|d<dS)z1 declarator  : pointer direct_declarator
        rSrrN)r?)rryrrr �p_declarator_2�szCParser.p_declarator_2cCs:tj|ddd|j|jd��d�}|j||d�|d<dS)z& declarator  : pointer TYPEID
        rSN)rEr:rFr0rr)rr<r5r�r?)rryr=rrr �p_declarator_3�szCParser.p_declarator_3cCs*tj|ddd|j|jd��d�|d<dS)z" direct_declarator   : ID
        rN)rEr:rFr0r)rr<r5r�)rryrrr �p_direct_declarator_1�s
zCParser.p_direct_declarator_1cCs|d|d<dS)z8 direct_declarator   : LPAREN declarator RPAREN
        rSrNr)rryrrr �p_direct_declarator_2�szCParser.p_direct_declarator_2cCsft|�dkr|dngpg}tjdt|�dkr6|dn|d||djd�}|j|d|d�|d<dS)	zu direct_declarator   : direct_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET
        �r�Nr�r)r:�dim�	dim_qualsr0)r=r>r)r(r�	ArrayDeclr0r?)rryrF�arrrrr �p_direct_declarator_3�szCParser.p_direct_declarator_3cCs^dd�|d|dgD�}dd�|D�}tjd|d||djd	�}|j|d|d
�|d<dS)z� direct_declarator   : direct_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKET
                                | direct_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKET
        cSs g|]}t|t�r|n|g�qSr)r;�list)rB�itemrrr rD�sz1CParser.p_direct_declarator_4.<locals>.<listcomp>r�r�cSs"g|]}|D]}|dk	r|�qqS)Nr)rBZsublistrKrrr rD�s
Nr�r)r:r�r�r0)r=r>r)rr�r0r?)rryZlisted_qualsr�r�rrr �p_direct_declarator_4�szCParser.p_direct_declarator_4cCs^tjdtj|d|j|jd���|ddkr4|dng|djd�}|j|d|d�|d<dS)za direct_declarator   : direct_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKET
        Nr�r�r)r:r�r�r0)r=r>r)rr��IDr5r�r0r?)rryr�rrr �p_direct_declarator_5szCParser.p_direct_declarator_5cCs|tj|dd|djd�}|j�jdkrb|jdk	rbx.|jjD]"}t|tj�rNP|j	|j
|j�q<W|j|d|d�|d<dS)z� direct_declarator   : direct_declarator LPAREN parameter_type_list RPAREN
                                | direct_declarator LPAREN identifier_list_opt RPAREN
        r�Nr)�argsr:r0�LBRACE)r=r>r)rrHr0r9r:r��paramsr;�
EllipsisParamr2r/r?)rry�funcZparamrrr �p_direct_declarator_6s

zCParser.p_direct_declarator_6cCsr|j|jd��}tj|dpgd|d�}t|�dkrf|d}x|jdk	rP|j}q>W||_|d|d<n||d<dS)zm pointer : TIMES type_qualifier_list_opt
                    | TIMES type_qualifier_list_opt pointer
        rrSN)rFr:r0r�r)r5r�rZPtrDeclr(r:)rryr0Znested_typeZ	tail_typerrr �	p_pointer(s
zCParser.p_pointercCs0t|�dkr|dgn|d|dg|d<dS)zs type_qualifier_list : type_qualifier
                                | type_qualifier_list type_qualifier
        rSrrN)r()rryrrr �p_type_qualifier_listFszCParser.p_type_qualifier_listcCs>t|�dkr.|djjtj|j|jd����|d|d<dS)zn parameter_type_list : parameter_list
                                | parameter_list COMMA ELLIPSIS
        rSrr�rN)r(r�r&rr�r5r�)rryrrr �p_parameter_type_listLs"zCParser.p_parameter_type_listcCsNt|�dkr*tj|dg|dj�|d<n |djj|d�|d|d<dS)zz parameter_list  : parameter_declaration
                            | parameter_list COMMA parameter_declaration
        rSrrr�N)r(r�	ParamListr0r�r&)rryrrr �p_parameter_listUszCParser.p_parameter_listcCsX|d}|ds2tjdg|j|jd��d�g|d<|j|t|dd�gd�d|d<d	S)
zE parameter_declaration   : declaration_specifiers declarator
        rr:r@)r0rS)r=)rOr[rN)rrGr5r�r_r)rryrOrrr �p_parameter_declaration_1_sz!CParser.p_parameter_declaration_1cCs�|d}|ds2tjdg|j|jd��d�g|d<t|d�dkr�t|dd
j�dkr�|j|ddjd�r�|j|t|ddd�gd	�d}nHtj	d
|d|dp�tj
ddd�|j|jd��d�}|d}|j||�}||d<dS)zR parameter_declaration   : declaration_specifiers abstract_declarator_opt
        rr:r@)r0rrSN)r=rU)rOr[r
rK)r/rFr:r0r,r,)rrGr5r�r(rAr4r_r�Typenamer<rJ)rryrOr=rIrrr �p_parameter_declaration_2js"&z!CParser.p_parameter_declaration_2cCsNt|�dkr*tj|dg|dj�|d<n |djj|d�|d|d<dS)ze identifier_list : identifier
                            | identifier_list COMMA identifier
        rSrrr�N)r(rr�r0r�r&)rryrrr �p_identifier_list�szCParser.p_identifier_listcCs|d|d<dS)z- initializer : assignment_expression
        rrNr)rryrrr �p_initializer_1�szCParser.p_initializer_1cCs:|ddkr*tjg|j|jd���|d<n|d|d<dS)z� initializer : brace_open initializer_list_opt brace_close
                        | brace_open initializer_list COMMA brace_close
        rSNrr)r�InitListr5r�)rryrrr �p_initializer_2�szCParser.p_initializer_2cCs�t|�dkrN|ddkr |dntj|d|d�}tj|g|dj�|d<nD|ddkrb|dntj|d|d�}|djj|�|d|d<dS)z� initializer_list    : designation_opt initializer
                                | initializer_list COMMA designation_opt initializer
        r�rNrSrr�)r(rZNamedInitializerr�r0�exprsr&)rryrUrrr �p_initializer_list�s((zCParser.p_initializer_listcCs|d|d<dS)z. designation : designator_list EQUALS
        rrNr)rryrrr �
p_designation�szCParser.p_designationcCs0t|�dkr|dgn|d|dg|d<dS)z_ designator_list : designator
                            | designator_list designator
        rSrrN)r()rryrrr �p_designator_list�szCParser.p_designator_listcCs|d|d<dS)zi designator  : LBRACKET constant_expression RBRACKET
                        | PERIOD identifier
        rSrNr)rryrrr �p_designator�szCParser.p_designatorcCsTtjd|dd|dp$tjddd�|j|jd��d�}|j||dd�|d<dS)	zH type_name   : specifier_qualifier_list abstract_declarator_opt
        r
rrKrSN)r/rFr:r0r:r)rr�r<r5r�rJ)rryrIrrr �p_type_name�s	
zCParser.p_type_namecCs(tjddd�}|j||dd�|d<dS)z+ abstract_declarator     : pointer
        Nr)r=r>r)rr<r?)rryZ	dummytyperrr �p_abstract_declarator_1�szCParser.p_abstract_declarator_1cCs|j|d|d�|d<dS)zF abstract_declarator     : pointer direct_abstract_declarator
        rSrrN)r?)rryrrr �p_abstract_declarator_2�szCParser.p_abstract_declarator_2cCs|d|d<dS)z> abstract_declarator     : direct_abstract_declarator
        rrNr)rryrrr �p_abstract_declarator_3�szCParser.p_abstract_declarator_3cCs|d|d<dS)zA direct_abstract_declarator  : LPAREN abstract_declarator RPAREN rSrNr)rryrrr �p_direct_abstract_declarator_1�sz&CParser.p_direct_abstract_declarator_1cCs6tjd|dg|djd�}|j|d|d�|d<dS)zn direct_abstract_declarator  : direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKET
        Nr�r)r:r�r�r0)r=r>r)rr�r0r?)rryr�rrr �p_direct_abstract_declarator_2�sz&CParser.p_direct_abstract_declarator_2cCs4tjtjddd�|dg|j|jd��d�|d<dS)zS direct_abstract_declarator  : LBRACKET assignment_expression_opt RBRACKET
        NrSr)r:r�r�r0r)rr�r<r5r�)rryrrr �p_direct_abstract_declarator_3�s
z&CParser.p_direct_abstract_declarator_3cCsJtjdtj|d|j|jd���g|djd�}|j|d|d�|d<dS)zZ direct_abstract_declarator  : direct_abstract_declarator LBRACKET TIMES RBRACKET
        Nr�r)r:r�r�r0)r=r>r)rr�r�r5r�r0r?)rryr�rrr �p_direct_abstract_declarator_4sz&CParser.p_direct_abstract_declarator_4cCsHtjtjddd�tj|d|j|jd���g|j|jd��d�|d<dS)z? direct_abstract_declarator  : LBRACKET TIMES RBRACKET
        Nr�r)r:r�r�r0r)rr�r<r�r5r�)rryrrr �p_direct_abstract_declarator_5s
z&CParser.p_direct_abstract_declarator_5cCs4tj|dd|djd�}|j|d|d�|d<dS)zh direct_abstract_declarator  : direct_abstract_declarator LPAREN parameter_type_list_opt RPAREN
        r�Nr)r�r:r0)r=r>r)rrHr0r?)rryr�rrr �p_direct_abstract_declarator_6s
z&CParser.p_direct_abstract_declarator_6cCs2tj|dtjddd�|j|jd��d�|d<dS)zM direct_abstract_declarator  : LPAREN parameter_type_list_opt RPAREN
        rSNr)r�r:r0r)rrHr<r5r�)rryrrr �p_direct_abstract_declarator_7sz&CParser.p_direct_abstract_declarator_7cCs(t|dt�r|dn|dg|d<dS)zG block_item  : declaration
                        | statement
        rrN)r;r�)rryrrr �p_block_item*szCParser.p_block_itemcCs:t|�dks|ddgkr"|dn|d|d|d<dS)z_ block_item_list : block_item
                            | block_item_list block_item
        rSNrr)r()rryrrr �p_block_item_list2szCParser.p_block_item_listcCs&tj|d|j|jd��d�|d<dS)zA compound_statement : brace_open block_item_list_opt brace_close rSr)Zblock_itemsr0rN)rZCompoundr5r�)rryrrr �p_compound_statement_19szCParser.p_compound_statement_1cCs*tj|d|d|j|jd���|d<dS)z( labeled_statement : ID COLON statement rr�rN)rZLabelr5r�)rryrrr �p_labeled_statement_1?szCParser.p_labeled_statement_1cCs,tj|d|dg|j|jd���|d<dS)z> labeled_statement : CASE constant_expression COLON statement rSr�rrN)rZCaser5r�)rryrrr �p_labeled_statement_2CszCParser.p_labeled_statement_2cCs&tj|dg|j|jd���|d<dS)z- labeled_statement : DEFAULT COLON statement r�rrN)rZDefaultr5r�)rryrrr �p_labeled_statement_3GszCParser.p_labeled_statement_3cCs,tj|d|dd|j|jd���|d<dS)z= selection_statement : IF LPAREN expression RPAREN statement r�r�Nrr)r�Ifr5r�)rryrrr �p_selection_statement_1KszCParser.p_selection_statement_1cCs0tj|d|d|d|j|jd���|d<dS)zL selection_statement : IF LPAREN expression RPAREN statement ELSE statement r�r��rrN)rr�r5r�)rryrrr �p_selection_statement_2OszCParser.p_selection_statement_2cCs.ttj|d|d|j|jd����|d<dS)zA selection_statement : SWITCH LPAREN expression RPAREN statement r�r�rrN)r	rZSwitchr5r�)rryrrr �p_selection_statement_3SszCParser.p_selection_statement_3cCs*tj|d|d|j|jd���|d<dS)z@ iteration_statement : WHILE LPAREN expression RPAREN statement r�r�rrN)rZWhiler5r�)rryrrr �p_iteration_statement_1XszCParser.p_iteration_statement_1cCs*tj|d|d|j|jd���|d<dS)zH iteration_statement : DO statement WHILE LPAREN expression RPAREN SEMI r�rSrrN)rZDoWhiler5r�)rryrrr �p_iteration_statement_2\szCParser.p_iteration_statement_2cCs6tj|d|d|d|d|j|jd���|d<dS)zj iteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statement r�r�r��	rrN)r�Forr5r�)rryrrr �p_iteration_statement_3`szCParser.p_iteration_statement_3cCsJtjtj|d|j|jd���|d|d|d|j|jd���|d<dS)zb iteration_statement : FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN statement r�rr���rN)rr�ZDeclListr5r�)rryrrr �p_iteration_statement_4dszCParser.p_iteration_statement_4cCs$tj|d|j|jd���|d<dS)z  jump_statement  : GOTO ID SEMI rSrrN)rZGotor5r�)rryrrr �p_jump_statement_1iszCParser.p_jump_statement_1cCstj|j|jd���|d<dS)z jump_statement  : BREAK SEMI rrN)rZBreakr5r�)rryrrr �p_jump_statement_2mszCParser.p_jump_statement_2cCstj|j|jd���|d<dS)z! jump_statement  : CONTINUE SEMI rrN)rZContinuer5r�)rryrrr �p_jump_statement_3qszCParser.p_jump_statement_3cCs4tjt|�dkr|dnd|j|jd���|d<dS)z\ jump_statement  : RETURN expression SEMI
                            | RETURN SEMI
        r�rSNrr)rZReturnr(r5r�)rryrrr �p_jump_statement_4uszCParser.p_jump_statement_4cCs8|ddkr(tj|j|jd���|d<n|d|d<dS)z, expression_statement : expression_opt SEMI rNr)rZEmptyStatementr5r�)rryrrr �p_expression_statement{szCParser.p_expression_statementcCsjt|�dkr|d|d<nLt|dtj�sFtj|dg|dj�|d<|djj|d�|d|d<dS)zn expression  : assignment_expression
                        | expression COMMA assignment_expression
        rSrrr�N)r(r;r�ExprListr0r�r&)rryrrr �p_expression�szCParser.p_expressioncCs(tj|dg|j|jd��d�|d<dS)z typedef_name : TYPEID r)r0rN)rrGr5r�)rryrrr �p_typedef_name�szCParser.p_typedef_namecCsDt|�dkr|d|d<n&tj|d|d|d|dj�|d<dS)z� assignment_expression   : conditional_expression
                                    | unary_expression assignment_operator assignment_expression
        rSrrr�N)r(rZ
Assignmentr0)rryrrr �p_assignment_expression�szCParser.p_assignment_expressioncCs|d|d<dS)a� assignment_operator : EQUALS
                                | XOREQUAL
                                | TIMESEQUAL
                                | DIVEQUAL
                                | MODEQUAL
                                | PLUSEQUAL
                                | MINUSEQUAL
                                | LSHIFTEQUAL
                                | RSHIFTEQUAL
                                | ANDEQUAL
                                | OREQUAL
        rrNr)rryrrr �p_assignment_operator�s
zCParser.p_assignment_operatorcCs|d|d<dS)z. constant_expression : conditional_expression rrNr)rryrrr �p_constant_expression�szCParser.p_constant_expressioncCsDt|�dkr|d|d<n&tj|d|d|d|dj�|d<dS)z� conditional_expression  : binary_expression
                                    | binary_expression CONDOP expression COLON conditional_expression
        rSrrr�r�N)r(rZ	TernaryOpr0)rryrrr �p_conditional_expression�sz CParser.p_conditional_expressioncCsDt|�dkr|d|d<n&tj|d|d|d|dj�|d<dS)ak binary_expression   : cast_expression
                                | binary_expression TIMES binary_expression
                                | binary_expression DIVIDE binary_expression
                                | binary_expression MOD binary_expression
                                | binary_expression PLUS binary_expression
                                | binary_expression MINUS binary_expression
                                | binary_expression RSHIFT binary_expression
                                | binary_expression LSHIFT binary_expression
                                | binary_expression LT binary_expression
                                | binary_expression LE binary_expression
                                | binary_expression GE binary_expression
                                | binary_expression GT binary_expression
                                | binary_expression EQ binary_expression
                                | binary_expression NE binary_expression
                                | binary_expression AND binary_expression
                                | binary_expression OR binary_expression
                                | binary_expression XOR binary_expression
                                | binary_expression LAND binary_expression
                                | binary_expression LOR binary_expression
        rSrrr�N)r(rZBinaryOpr0)rryrrr �p_binary_expression�szCParser.p_binary_expressioncCs|d|d<dS)z$ cast_expression : unary_expression rrNr)rryrrr �p_cast_expression_1�szCParser.p_cast_expression_1cCs*tj|d|d|j|jd���|d<dS)z; cast_expression : LPAREN type_name RPAREN cast_expression rSr�rrN)rZCastr5r�)rryrrr �p_cast_expression_2�szCParser.p_cast_expression_2cCs|d|d<dS)z* unary_expression    : postfix_expression rrNr)rryrrr �p_unary_expression_1�szCParser.p_unary_expression_1cCs$tj|d|d|dj�|d<dS)z� unary_expression    : PLUSPLUS unary_expression
                                | MINUSMINUS unary_expression
                                | unary_operator cast_expression
        rrSrN)r�UnaryOpr0)rryrrr �p_unary_expression_2�szCParser.p_unary_expression_2cCs>tj|dt|�dkr|dn|d|j|jd���|d<dS)zx unary_expression    : SIZEOF unary_expression
                                | SIZEOF LPAREN type_name RPAREN
        rr�rSrN)rrr(r5r�)rryrrr �p_unary_expression_3�szCParser.p_unary_expression_3cCs|d|d<dS)z� unary_operator  : AND
                            | TIMES
                            | PLUS
                            | MINUS
                            | NOT
                            | LNOT
        rrNr)rryrrr �p_unary_operator�szCParser.p_unary_operatorcCs|d|d<dS)z* postfix_expression  : primary_expression rrNr)rryrrr �p_postfix_expression_1�szCParser.p_postfix_expression_1cCs$tj|d|d|dj�|d<dS)zG postfix_expression  : postfix_expression LBRACKET expression RBRACKET rr�rN)rZArrayRefr0)rryrrr �p_postfix_expression_2szCParser.p_postfix_expression_2cCs4tj|dt|�dkr|dnd|dj�|d<dS)z� postfix_expression  : postfix_expression LPAREN argument_expression_list RPAREN
                                | postfix_expression LPAREN RPAREN
        rr�r�Nr)r�FuncCallr(r0)rryrrr �p_postfix_expression_3szCParser.p_postfix_expression_3cCsBtj|d|j|jd���}tj|d|d||dj�|d<dS)z� postfix_expression  : postfix_expression PERIOD ID
                                | postfix_expression PERIOD TYPEID
                                | postfix_expression ARROW ID
                                | postfix_expression ARROW TYPEID
        r�rrSrN)rr�r5r�Z	StructRefr0)rryZfieldrrr �p_postfix_expression_4szCParser.p_postfix_expression_4cCs(tjd|d|d|dj�|d<dS)z{ postfix_expression  : postfix_expression PLUSPLUS
                                | postfix_expression MINUSMINUS
        ryrSrrN)rrr0)rryrrr �p_postfix_expression_5szCParser.p_postfix_expression_5cCstj|d|d�|d<dS)z� postfix_expression  : LPAREN type_name RPAREN brace_open initializer_list brace_close
                                | LPAREN type_name RPAREN brace_open initializer_list COMMA brace_close
        rSr�rN)rZCompoundLiteral)rryrrr �p_postfix_expression_6szCParser.p_postfix_expression_6cCs|d|d<dS)z" primary_expression  : identifier rrNr)rryrrr �p_primary_expression_1 szCParser.p_primary_expression_1cCs|d|d<dS)z  primary_expression  : constant rrNr)rryrrr �p_primary_expression_2$szCParser.p_primary_expression_2cCs|d|d<dS)zp primary_expression  : unified_string_literal
                                | unified_wstring_literal
        rrNr)rryrrr �p_primary_expression_3(szCParser.p_primary_expression_3cCs|d|d<dS)z0 primary_expression  : LPAREN expression RPAREN rSrNr)rryrrr �p_primary_expression_4.szCParser.p_primary_expression_4cCsF|j|jd��}tjtj|d|�tj|d|dg|�|�|d<dS)zQ primary_expression  : OFFSETOF LPAREN type_name COMMA identifier RPAREN
        rr�r�rN)r5r�rrr�r�)rryr0rrr �p_primary_expression_52szCParser.p_primary_expression_5cCsNt|�dkr*tj|dg|dj�|d<n |djj|d�|d|d<dS)z� argument_expression_list    : assignment_expression
                                        | argument_expression_list COMMA assignment_expression
        rSrrr�N)r(rr�r0r�r&)rryrrr �p_argument_expression_list:sz"CParser.p_argument_expression_listcCs$tj|d|j|jd���|d<dS)z identifier  : ID rrN)rr�r5r�)rryrrr �p_identifierDszCParser.p_identifiercCs&tjd|d|j|jd���|d<dS)z� constant    : INT_CONST_DEC
                        | INT_CONST_OCT
                        | INT_CONST_HEX
                        | INT_CONST_BIN
        r@rrN)r�Constantr5r�)rryrrr �p_constant_1HszCParser.p_constant_1cCs&tjd|d|j|jd���|d<dS)zM constant    : FLOAT_CONST
                        | HEX_FLOAT_CONST
        �floatrrN)rrr5r�)rryrrr �p_constant_2QszCParser.p_constant_2cCs&tjd|d|j|jd���|d<dS)zH constant    : CHAR_CONST
                        | WCHAR_CONST
        �charrrN)rrr5r�)rryrrr �p_constant_3XszCParser.p_constant_3cCsht|�dkr0tjd|d|j|jd���|d<n4|djdd�|ddd�|d_|d|d<dS)z~ unified_string_literal  : STRING_LITERAL
                                    | unified_string_literal STRING_LITERAL
        rS�stringrrNr,)r(rrr5r��value)rryrrr �p_unified_string_literalds
 (z CParser.p_unified_string_literalcCslt|�dkr0tjd|d|j|jd���|d<n8|djj�dd�|ddd�|d_|d|d<dS)z� unified_wstring_literal : WSTRING_LITERAL
                                    | unified_wstring_literal WSTRING_LITERAL
        rSrrrNr,)r(rrr5r�r�rstrip)rryrrr �p_unified_wstring_literalos
 ,z!CParser.p_unified_wstring_literalcCs|d|d<dS)z  brace_open  :   LBRACE
        rrNr)rryrrr �p_brace_openzszCParser.p_brace_opencCs|d|d<dS)z  brace_close :   RBRACE
        rrNr)rryrrr �
p_brace_closeszCParser.p_brace_closecCsd|d<dS)zempty : Nrr)rryrrr �p_empty�szCParser.p_emptycCs<|r,|jd|j|j|j|jj|�d��n|jdd�dS)Nz
before: %s)r�r8zAt end of inputr
)r.rr5r�rZfind_tok_column)rryrrr �p_error�szCParser.p_errorN)TrTrFr
)r
r)F�rfrg�rfrh�rfri�rfrj�rfrk�rfrlrm�rfrnrorprq�rfrrrs�rfrtru�rfrvrwrx)
r"r#r$r%r&r'r(r)r*r+)��__name__�
__module__�__qualname__r!r$r'r+r1r2r4rrrrr9r?rJrPr_rbreZ
precedencerzr{r}r~rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrr	r
rrr
rrrrrrrrrrrrr r!rrrr r
sFc	

	)7-Y
		;		
	
&		
			

	
		

		
	
	r
�__main__)�reZplyrr
rZc_lexerrZ	plyparserrrrZast_transformsr	r
r,�pprintZtime�sysrrrr �<module>	s,PK�[��×$__pycache__/plyparser.cpython-36.pycnu�[���3

g�wU:�@s4Gdd�de�ZGdd�de�ZGdd�de�ZdS)c@s&eZdZdZdZddd�Zd	d
�ZdS)
�Coordz� Coordinates of a syntactic element. Consists of:
            - File name
            - Line number
            - (optional) column number, for the Lexer
    �file�line�column�__weakref__NcCs||_||_||_dS)N)rrr)�selfrrr�r�/usr/lib/python3.6/plyparser.py�__init__szCoord.__init__cCs(d|j|jf}|jr$|d|j7}|S)Nz%s:%sz:%s)rrr)r�strrrr�__str__sz
Coord.__str__)rrrr)N)�__name__�
__module__�__qualname__�__doc__�	__slots__r	rrrrrrs
rc@seZdZdS)�
ParseErrorN)rr
rrrrrrsrc@s&eZdZdd�Zddd�Zdd�ZdS)	�	PLYParsercCs<|d}dd�}d||f|_d||_t|j|j|�dS)z� Given a rule name, creates an optional ply.yacc rule
            for it. The name of the optional rule is
            <rulename>_opt
        Z_optcSs|d|d<dS)N��r)r�prrr�optrule)sz+PLYParser._create_opt_rule.<locals>.optrulez%s : empty
| %szp_%sN)rr�setattr�	__class__)rZrulenameZoptnamerrrr�_create_opt_rule"s

zPLYParser._create_opt_ruleNcCst|jj||d�S)N)rrr)rZclex�filename)r�linenorrrr�_coord0szPLYParser._coordcCstd||f��dS)Nz%s: %s)r)r�msgZcoordrrr�_parse_error6szPLYParser._parse_error)N)rr
rrrrrrrrr!s
rN)�objectr�	Exceptionrrrrrr�<module>sPK�[ ��1��.__pycache__/_build_tables.cpython-36.opt-1.pycnu�[���3

g�wUS�@svddlmZed�Zejedd��ddlZddgejdd�<ddlmZej	d	d
d	d�ddl
Z
ddlZddlZdS)�)�ASTCodeGeneratorz
_c_ast.cfgzc_ast.py�wN�.z..)�c_parserTF)Zlex_optimizeZ
yacc_debugZ
yacc_optimize)
Z_ast_genrZast_genZgenerate�open�sys�pathZ	pycparserrZCParserZlextabZyacctabZc_ast�r	r	�#/usr/lib/python3.6/_build_tables.py�<module>sPK�[A&[\�/�/"__pycache__/c_lexer.cpython-36.pycnu�[���3

��]m8�@s<ddlZddlZddlmZddlmZGdd�de�ZdS)�N)�lex)�TOKENc<@sleZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Z�dZiZ
x<eD]4Zedkrree
d7<q\edkr�ee
d8<q\ee
ej�<q\We�d
ZdtZduZdvZdwZdxZdyZdzed{ed|Zd}eZeeeZeeeZd~ZdZd�Zd�Zd�Zd�ed�ed�ed�Z d�e d|Z!d�e!d�Z"d�e"Z#d�e!d�e!d�Z$d�e!d�ed�Z%d�e d|Z&d�e&d�Z'd�e'Z(d�e&d�ee&d�Z)d�Z*d�Z+d�e+d|e*d�e*d�Z,d�Z-d�ed�ed�ed�Z.d�ed�ed�e.d|e-d�Z/�dZ0d�d��Z1e2e'�d�d���Z3e2e�d�d���Z4d�d��Z5d�d��Z6d�Z7d�d��Z8d�d��Z9d�d��Z:d�Z;e2e'�d�d���Z<e2e�d�d���Z=d�d��Z>d�Z?d�d��Z@d�ZAd�ZBd�ZCd�ZDd�ZEd�ZFd�ZGd�ZHd�ZId�ZJd�ZKd�ZLd�ZMd�ZNd�ZOd�ZPd�ZQd�ZRd�ZSd�ZTd�ZUd�ZVd�ZWd�ZXd�ZYd�ZZd�Z[d�Z\d�Z]d�Z^d�Z_d�Z`d�Zad�Zbd�Zcd�Zdd�Zed�Zfd�Zgd�Zhd�Zid�Zjd�Zkd�Zle2d�d�d��Zme2d�d�d��Zne'Zoe2e,�d�d��Zpe2e/�d�d��Zqe2e�d�d��Zre2e�d�d��Zse2e�d�d���Zte2e�d�d���Zue2e�d�d���Zve2e"�d�d���Zwe2e#�d�d���Zxe2e$�d��d��Zye2e%��d�d��Zze2e(��d�d��Z{e2e)��d�d��Z|e2e��d�d��Z}�d	�d
�Z~�dS(�CLexera A lexer for the C language. After building it, set the
        input text with input(), and call token() to get new
        tokens.

        The public attribute filename can be set to an initial
        filaneme, but the lexer will update it upon #line
        directives.
    cCs@||_||_||_||_d|_d|_tjd�|_tjd�|_	dS)ab Create a new Lexer.

            error_func:
                An error function. Will be called with an error
                message, line and column as arguments, in case of
                an error during lexing.

            on_lbrace_func, on_rbrace_func:
                Called when an LBRACE or RBRACE is encountered
                (likely to push/pop type_lookup_func's scope)

            type_lookup_func:
                A type lookup function. Given a string, it must
                return True IFF this string is a name of a type
                that was defined with a typedef earlier.
        �Nz([ 	]*line\W)|([ 	]*\d+)z
[ 	]*pragma\W)
�
error_func�on_lbrace_func�on_rbrace_func�type_lookup_func�filename�
last_token�re�compile�line_pattern�pragma_pattern)�selfrrrr	�r�/usr/lib/python3.6/c_lexer.py�__init__szCLexer.__init__cKstjfd|i|��|_dS)z� Builds the lexer from the specification. Must be
            called after the lexer object is created.

            This method exists separately, because the PLY
            manual warns against calling lex.lex inside
            __init__
        �objectN)r�lexer)r�kwargsrrr�build:szCLexer.buildcCsd|j_dS)z? Resets the internal line number counter of the lexer.
        �N)r�lineno)rrrr�reset_linenoDszCLexer.reset_linenocCs|jj|�dS)N)r�input)r�textrrrrIszCLexer.inputcCs|jj�|_|jS)N)r�tokenr)rrrrrLszCLexer.tokencCs|jjjdd|j�}|j|S)z3 Find the column of the token in its line.
        �
r)r�lexdata�rfind�lexpos)rrZlast_crrrr�find_tok_columnPszCLexer.find_tok_columncCs0|j|�}|j||d|d�|jjd�dS)Nrr)�_make_tok_locationrr�skip)r�msgr�locationrrr�_error[s
z
CLexer._errorcCs|j|j|�fS)N)rr")rrrrrr#`szCLexer._make_tok_location�_BOOL�_COMPLEX�AUTO�BREAK�CASE�CHAR�CONST�CONTINUE�DEFAULT�DO�DOUBLE�ELSE�ENUM�EXTERN�FLOAT�FOR�GOTO�IF�INLINE�INT�LONG�REGISTER�OFFSETOF�RESTRICT�RETURN�SHORT�SIGNED�SIZEOF�STATIC�STRUCT�SWITCH�TYPEDEF�UNION�UNSIGNED�VOID�VOLATILE�WHILEZ_BoolZ_Complex�ID�TYPEID�
INT_CONST_DEC�
INT_CONST_OCT�
INT_CONST_HEX�
INT_CONST_BIN�FLOAT_CONST�HEX_FLOAT_CONST�
CHAR_CONST�WCHAR_CONST�STRING_LITERAL�WSTRING_LITERAL�PLUS�MINUS�TIMES�DIVIDE�MOD�OR�AND�NOT�XOR�LSHIFT�RSHIFT�LOR�LAND�LNOT�LT�LE�GT�GE�EQ�NE�EQUALS�
TIMESEQUAL�DIVEQUAL�MODEQUAL�	PLUSEQUAL�
MINUSEQUAL�LSHIFTEQUAL�RSHIFTEQUAL�ANDEQUAL�XOREQUAL�OREQUAL�PLUSPLUS�
MINUSMINUS�ARROW�CONDOP�LPAREN�RPAREN�LBRACKET�RBRACKET�LBRACE�RBRACE�COMMA�PERIOD�SEMI�COLON�ELLIPSIS�PPHASHz[a-zA-Z_$][0-9a-zA-Z_$]*z0[xX]z[0-9a-fA-F]+z0[bB]z[01]+zD(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?z(0z)|([1-9][0-9]*�)z0[0-7]*z0[0-7]*[89]z([a-zA-Z._~!=&\^\-\\?'"])z(\d+)z(x[0-9a-fA-F]+)z#([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])z(\\(�|z))z
([^'\\\n]|�'�Lz('z*\n)|('z*$)z[^'
]+')|('')|('z	[^'\n]*')z
([^"\\\n]|�"z*"�*z([eE][-+]?[0-9]+)z([0-9]*\.[0-9]+)|([0-9]+\.)z((((z
?)|([0-9]+z
))[FfLl]?)z([pP][+-]?[0-9]+)z(((z)?\.z)|(z\.))�(z[FfLl]?)�ppline�	exclusive�pppragmacCsf|jj|jj|jjd�r2|jjd�d|_|_n0|jj|jj|jjd�rX|jjd�n
d|_	|SdS)z[ \t]*\#)�posr�Nr�r�)
r�matchrrr!�begin�pp_line�pp_filenamer�type)r�trrr�t_PPHASH�szCLexer.t_PPHASHcCs0|jdkr|jd|�n|jjd�jd�|_dS)Nz$filename before line number in #liner�)r�r'�value�lstrip�rstripr�)rr�rrr�t_ppline_FILENAMEs
zCLexer.t_ppline_FILENAMEcCs|jdkr|j|_ndS)N)r�r�)rr�rrr�t_ppline_LINE_NUMBER
s

zCLexer.t_ppline_LINE_NUMBERcCsH|jdkr|jd|�n t|j�|j_|jdk	r8|j|_|jjd�dS)z\nNzline number missing in #line�INITIAL)r�r'�intrrr�r
r�)rr�rrr�t_ppline_NEWLINEs

zCLexer.t_ppline_NEWLINEcCsdS)�lineNr)rr�rrr�t_ppline_PPLINE szCLexer.t_ppline_PPLINEz 	cCs|jd|�dS)Nzinvalid #line directive)r')rr�rrr�t_ppline_error&szCLexer.t_ppline_errorcCs |jjd7_|jjd�dS)z\nrr�N)rrr�)rr�rrr�t_pppragma_NEWLINE,szCLexer.t_pppragma_NEWLINEcCsdS)ZpragmaNr)rr�rrr�t_pppragma_PPPRAGMA1szCLexer.t_pppragma_PPPRAGMAz$ 	<>.-{}();=+-*/$%@&^~!?:,0123456789cCsdS)Nr)rr�rrr�t_pppragma_STR7szCLexer.t_pppragma_STRcCsdS)Nr)rr�rrr�
t_pppragma_ID:szCLexer.t_pppragma_IDcCs|jd|�dS)Nzinvalid #pragma directive)r')rr�rrr�t_pppragma_error=szCLexer.t_pppragma_errorcCs|jj|jjd�7_dS)z\n+rN)rrr��count)rr�rrr�	t_NEWLINEFszCLexer.t_NEWLINEz\+�-z\*�/�%z\|�&�~z\^z<<z>>z\|\|z&&�!�<�>z<=z>=z==z!=�=z\*=z/=z%=z\+=z-=z<<=z>>=z&=z\|=z\^=z\+\+z--z->z\?z\(z\)z\[z\]�,z\.�;�:z\.\.\.z\{cCs|j�|S)N)r)rr�rrr�t_LBRACE�szCLexer.t_LBRACEz\}cCs|j�|S)N)r)rr�rrr�t_RBRACE�szCLexer.t_RBRACEcCs|S)Nr)rr�rrr�
t_FLOAT_CONST�szCLexer.t_FLOAT_CONSTcCs|S)Nr)rr�rrr�t_HEX_FLOAT_CONST�szCLexer.t_HEX_FLOAT_CONSTcCs|S)Nr)rr�rrr�t_INT_CONST_HEX�szCLexer.t_INT_CONST_HEXcCs|S)Nr)rr�rrr�t_INT_CONST_BIN�szCLexer.t_INT_CONST_BINcCsd}|j||�dS)NzInvalid octal constant)r')rr�r%rrr�t_BAD_CONST_OCT�szCLexer.t_BAD_CONST_OCTcCs|S)Nr)rr�rrr�t_INT_CONST_OCT�szCLexer.t_INT_CONST_OCTcCs|S)Nr)rr�rrr�t_INT_CONST_DEC�szCLexer.t_INT_CONST_DECcCs|S)Nr)rr�rrr�t_CHAR_CONST�szCLexer.t_CHAR_CONSTcCs|S)Nr)rr�rrr�
t_WCHAR_CONST�szCLexer.t_WCHAR_CONSTcCsd}|j||�dS)NzUnmatched ')r')rr�r%rrr�t_UNMATCHED_QUOTE�szCLexer.t_UNMATCHED_QUOTEcCsd|j}|j||�dS)NzInvalid char constant %s)r�r')rr�r%rrr�t_BAD_CHAR_CONST�s
zCLexer.t_BAD_CHAR_CONSTcCs|S)Nr)rr�rrr�t_WSTRING_LITERAL�szCLexer.t_WSTRING_LITERALcCsd}|j||�dS)Nz#String contains invalid escape code)r')rr�r%rrr�t_BAD_STRING_LITERAL�szCLexer.t_BAD_STRING_LITERALcCs2|jj|jd�|_|jdkr.|j|j�r.d|_|S)NrMrN)�keyword_map�getr�r�r	)rr�rrr�t_ID�szCLexer.t_IDcCs"dt|jd�}|j||�dS)NzIllegal character %sr)�reprr�r')rr�r%rrr�t_error�szCLexer.t_errorN)%r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrL);rMrNrOrPrQrRrSrTrUrVrWrXrYrZr[r\r]r^r_r`rarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzr{r|r}r~rr�r�r�r�r�r�r�r��r�r��r�r�)r�r�)�__name__�
__module__�__qualname__�__doc__rrrrrr"r'r#�keywordsr��keyword�lower�tokensZ
identifierZ
hex_prefixZ
hex_digitsZ
bin_prefixZ
bin_digitsZinteger_suffix_optZdecimal_constantZoctal_constantZhex_constantZbin_constantZbad_octal_constantZ
simple_escapeZdecimal_escapeZ
hex_escapeZ
bad_escapeZescape_sequenceZcconst_charZ
char_constZwchar_constZunmatched_quoteZbad_char_constZstring_charZstring_literalZwstring_literalZbad_string_literalZ
exponent_partZfractional_constantZfloating_constantZbinary_exponent_partZhex_fractional_constantZhex_floating_constantZstatesr�rr�r�r�r�Zt_ppline_ignorer�r�r�Zt_pppragma_ignorer�r�r�Zt_ignorer�Zt_PLUSZt_MINUSZt_TIMESZt_DIVIDEZt_MODZt_ORZt_ANDZt_NOTZt_XORZt_LSHIFTZt_RSHIFTZt_LORZt_LANDZt_LNOTZt_LTZt_GTZt_LEZt_GEZt_EQZt_NEZt_EQUALSZt_TIMESEQUALZ
t_DIVEQUALZ
t_MODEQUALZt_PLUSEQUALZt_MINUSEQUALZ
t_LSHIFTEQUALZ
t_RSHIFTEQUALZ
t_ANDEQUALZ	t_OREQUALZ
t_XOREQUALZ
t_PLUSPLUSZt_MINUSMINUSZt_ARROWZt_CONDOPZt_LPARENZt_RPARENZ
t_LBRACKETZ
t_RBRACKETZt_COMMAZt_PERIODZt_SEMIZt_COLONZ
t_ELLIPSISr�r�Zt_STRING_LITERALr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrs@!



		$	
r)r�sysZplyrZply.lexrrrrrrr�<module>	sPK�[����#t#t __pycache__/c_ast.cpython-36.pycnu�[���3

��]([�@sddlZGdd�de�ZGdd�de�ZGdd�de�ZGdd	�d	e�ZGd
d�de�ZGdd
�d
e�ZGdd�de�ZGdd�de�Z	Gdd�de�Z
Gdd�de�ZGdd�de�ZGdd�de�Z
Gdd�de�ZGdd�de�ZGdd�de�ZGd d!�d!e�ZGd"d#�d#e�ZGd$d%�d%e�ZGd&d'�d'e�ZGd(d)�d)e�ZGd*d+�d+e�ZGd,d-�d-e�ZGd.d/�d/e�ZGd0d1�d1e�ZGd2d3�d3e�ZGd4d5�d5e�ZGd6d7�d7e�ZGd8d9�d9e�ZGd:d;�d;e�ZGd<d=�d=e�ZGd>d?�d?e�Z Gd@dA�dAe�Z!GdBdC�dCe�Z"GdDdE�dEe�Z#GdFdG�dGe�Z$GdHdI�dIe�Z%GdJdK�dKe�Z&GdLdM�dMe�Z'GdNdO�dOe�Z(GdPdQ�dQe�Z)GdRdS�dSe�Z*GdTdU�dUe�Z+GdVdW�dWe�Z,GdXdY�dYe�Z-GdZd[�d[e�Z.Gd\d]�d]e�Z/Gd^d_�d_e�Z0Gd`da�dae�Z1dS)b�Nc@s0eZdZfZdd�Zejdddddfdd�ZdS)�NodecCsdS)z3 A sequence of all children that are Nodes
        N�)�selfrr�/usr/lib/python3.6/c_ast.py�childrensz
Node.childrenrFNc
	sd|}|r4|dk	r4|j|�jjd|d�n|j|�jjd��jr�|r~�fdd��jD�}djd	d
�|D��}	n(�fdd��jD�}
djdd
�|
D��}	|j|	�|r�|jd
�j�|jd�x.�j�D]"\}}|j||d||||d�q�WdS)a� Pretty print the Node and all its attributes and
            children (recursively) to a buffer.

            buf:
                Open IO buffer into which the Node is printed.

            offset:
                Initial offset (amount of leading spaces)

            attrnames:
                True if you want to see the attribute names in
                name=value pairs. False to only see the values.

            nodenames:
                True if you want to see the actual node names
                within their parents.

            showcoord:
                Do you want the coordinates of each Node to be
                displayed.
        � Nz <z>: z: csg|]}|t�|�f�qSr)�getattr)�.0�n)rrr�
<listcomp>=szNode.show.<locals>.<listcomp>z, css|]}d|VqdS)z%s=%sNr)r	Znvrrr�	<genexpr>>szNode.show.<locals>.<genexpr>csg|]}t�|��qSr)r)r	r
)rrrr@scss|]}d|VqdS)z%sNr)r	�vrrrrAsz (at %s)�
�)�offset�	attrnames�	nodenames�	showcoord�
_my_node_name)�write�	__class__�__name__�
attr_names�join�coordr�show)
rZbufrrrrrZleadZnvlistZattrstrZvlistZ
child_name�childr)rrrs, 

z	Node.show)r�
__module__�__qualname__�	__slots__r�sys�stdoutrrrrrrsrc@s eZdZdZdd�Zdd�ZdS)�NodeVisitora- A base NodeVisitor class for visiting c_ast nodes.
        Subclass it and define your own visit_XXX methods, where
        XXX is the class name you want to visit with these
        methods.

        For example:

        class ConstantVisitor(NodeVisitor):
            def __init__(self):
                self.values = []

            def visit_Constant(self, node):
                self.values.append(node.value)

        Creates a list of values of all the constant nodes
        encountered below the given node. To use it:

        cv = ConstantVisitor()
        cv.visit(node)

        Notes:

        *   generic_visit() will be called for AST nodes for which
            no visit_XXX method was defined.
        *   The children of nodes for which a visit_XXX was
            defined will not be visited - if you need this, call
            generic_visit() on the node.
            You can use:
                NodeVisitor.generic_visit(self, node)
        *   Modeled after Python's own AST visiting facilities
            (the ast module of Python 3.0)
    cCs"d|jj}t|||j�}||�S)z Visit a node.
        Zvisit_)rrr�
generic_visit)r�node�methodZvisitorrrr�visitsszNodeVisitor.visitcCs$x|j�D]\}}|j|�q
WdS)zy Called if no explicit visitor function exists for a
            node. Implements preorder visiting of the node.
        N)rr&)rr$Zc_name�crrrr#zszNodeVisitor.generic_visitN)rrr�__doc__r&r#rrrrr"Rs r"c@s&eZdZdZddd�Zd	d
�Zd
ZdS)�	ArrayDecl�type�dim�	dim_qualsr�__weakref__NcCs||_||_||_||_dS)N)r*r+r,r)rr*r+r,rrrr�__init__�szArrayDecl.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nr*r+)r*�appendr+�tuple)r�nodelistrrrr�s

zArrayDecl.children)r*r+r,rr-)N)r,)rrrrr.rrrrrrr)�s
r)c@s&eZdZd
Zddd�Zdd	�ZfZdS)�ArrayRef�name�	subscriptrr-NcCs||_||_||_dS)N)r3r4r)rr3r4rrrrr.�szArrayRef.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nr3r4)r3r/r4r0)rr1rrrr�s

zArrayRef.children)r3r4rr-)N)rrrrr.rrrrrrr2�s
r2c@s&eZdZdZddd�Zd	d
�Zd
ZdS)�
Assignment�op�lvalue�rvaluerr-NcCs||_||_||_||_dS)N)r6r7r8r)rr6r7r8rrrrr.�szAssignment.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nr7r8)r7r/r8r0)rr1rrrr�s

zAssignment.children)r6r7r8rr-)N)r6)rrrrr.rrrrrrr5�s
r5c@s&eZdZdZddd�Zd	d
�Zd
ZdS)�BinaryOpr6�left�rightrr-NcCs||_||_||_||_dS)N)r6r:r;r)rr6r:r;rrrrr.�szBinaryOp.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nr:r;)r:r/r;r0)rr1rrrr�s

zBinaryOp.children)r6r:r;rr-)N)r6)rrrrr.rrrrrrr9�s
r9c@s&eZdZdZd	dd�Zdd�ZfZdS)
�Breakrr-NcCs
||_dS)N)r)rrrrrr.�szBreak.__init__cCsfS)Nr)rrrrr�szBreak.children)rr-)N)rrrrr.rrrrrrr<�s
r<c@s&eZdZd
Zddd�Zdd	�ZfZdS)�Case�expr�stmtsrr-NcCs||_||_||_dS)N)r>r?r)rr>r?rrrrr.�sz
Case.__init__cCsTg}|jdk	r|jd|jf�x,t|jp*g�D]\}}|jd||f�q.Wt|�S)Nr>z	stmts[%d])r>r/�	enumerater?r0)rr1�irrrrr�s
z
Case.children)r>r?rr-)N)rrrrr.rrrrrrr=�s
r=c@s&eZdZd
Zddd�Zdd	�ZfZdS)�Cast�to_typer>rr-NcCs||_||_||_dS)N)rCr>r)rrCr>rrrrr.�sz
Cast.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)NrCr>)rCr/r>r0)rr1rrrr�s

z
Cast.children)rCr>rr-)N)rrrrr.rrrrrrrB�s
rBc@s&eZdZd	Zd
dd�Zdd�ZfZdS)�Compound�block_itemsrr-NcCs||_||_dS)N)rEr)rrErrrrr.�szCompound.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nzblock_items[%d])r@rEr/r0)rr1rArrrrr�szCompound.children)rErr-)N)rrrrr.rrrrrrrD�s
rDc@s&eZdZd
Zddd�Zdd	�ZfZdS)�CompoundLiteralr*�initrr-NcCs||_||_||_dS)N)r*rGr)rr*rGrrrrr.�szCompoundLiteral.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nr*rG)r*r/rGr0)rr1rrrr�s

zCompoundLiteral.children)r*rGrr-)N)rrrrr.rrrrrrrF�s
rFc@s&eZdZd
Zddd�Zdd	�ZdZdS)
�Constantr*�valuerr-NcCs||_||_||_dS)N)r*rIr)rr*rIrrrrr.	szConstant.__init__cCsg}t|�S)N)r0)rr1rrrrszConstant.children)r*rIrr-)N)r*rI)rrrrr.rrrrrrrHs
rHc@s&eZdZdZd	dd�Zdd�ZfZdS)
�Continuerr-NcCs
||_dS)N)r)rrrrrr.szContinue.__init__cCsfS)Nr)rrrrrszContinue.children)rr-)N)rrrrr.rrrrrrrJs
rJc	@s&eZdZdZddd�Zd
d�ZdZd
S)�Declr3�quals�storage�funcspecr*rG�bitsizerr-Nc		Cs4||_||_||_||_||_||_||_||_dS)N)r3rLrMrNr*rGrOr)	rr3rLrMrNr*rGrOrrrrr. sz
Decl.__init__cCsZg}|jdk	r|jd|jf�|jdk	r8|jd|jf�|jdk	rR|jd|jf�t|�S)Nr*rGrO)r*r/rGrOr0)rr1rrrr*s


z
Decl.children)	r3rLrMrNr*rGrOrr-)N)r3rLrMrN)rrrrr.rrrrrrrKs

rKc@s&eZdZd	Zd
dd�Zdd�ZfZdS)�DeclList�declsrr-NcCs||_||_dS)N)rQr)rrQrrrrr.5szDeclList.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nz	decls[%d])r@rQr/r0)rr1rArrrrr9szDeclList.children)rQrr-)N)rrrrr.rrrrrrrP3s
rPc@s&eZdZd	Zd
dd�Zdd�ZfZdS)�Defaultr?rr-NcCs||_||_dS)N)r?r)rr?rrrrr.CszDefault.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nz	stmts[%d])r@r?r/r0)rr1rArrrrrGszDefault.children)r?rr-)N)rrrrr.rrrrrrrRAs
rRc@s&eZdZd
Zddd�Zdd	�ZfZdS)�DoWhile�cond�stmtrr-NcCs||_||_||_dS)N)rTrUr)rrTrUrrrrr.QszDoWhile.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)NrTrU)rTr/rUr0)rr1rrrrVs

zDoWhile.children)rTrUrr-)N)rrrrr.rrrrrrrSOs
rSc@s&eZdZdZd	dd�Zdd�ZfZdS)
�
EllipsisParamrr-NcCs
||_dS)N)r)rrrrrr.`szEllipsisParam.__init__cCsfS)Nr)rrrrrcszEllipsisParam.children)rr-)N)rrrrr.rrrrrrrV^s
rVc@s&eZdZdZd	dd�Zdd�ZfZdS)
�EmptyStatementrr-NcCs
||_dS)N)r)rrrrrr.jszEmptyStatement.__init__cCsfS)Nr)rrrrrmszEmptyStatement.children)rr-)N)rrrrr.rrrrrrrWhs
rWc@s&eZdZd
Zddd�Zdd	�ZdZdS)
�Enumr3�valuesrr-NcCs||_||_||_dS)N)r3rYr)rr3rYrrrrr.tsz
Enum.__init__cCs&g}|jdk	r|jd|jf�t|�S)NrY)rYr/r0)rr1rrrrys
z
Enum.children)r3rYrr-)N)r3)rrrrr.rrrrrrrXrs
rXc@s&eZdZd
Zddd�Zdd	�ZdZdS)
�
Enumeratorr3rIrr-NcCs||_||_||_dS)N)r3rIr)rr3rIrrrrr.�szEnumerator.__init__cCs&g}|jdk	r|jd|jf�t|�S)NrI)rIr/r0)rr1rrrr�s
zEnumerator.children)r3rIrr-)N)r3)rrrrr.rrrrrrrZ�s
rZc@s&eZdZd	Zd
dd�Zdd�ZfZdS)�EnumeratorList�enumeratorsrr-NcCs||_||_dS)N)r\r)rr\rrrrr.�szEnumeratorList.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nzenumerators[%d])r@r\r/r0)rr1rArrrrr�szEnumeratorList.children)r\rr-)N)rrrrr.rrrrrrr[�s
r[c@s&eZdZd	Zd
dd�Zdd�ZfZdS)�ExprList�exprsrr-NcCs||_||_dS)N)r^r)rr^rrrrr.�szExprList.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nz	exprs[%d])r@r^r/r0)rr1rArrrrr�szExprList.children)r^rr-)N)rrrrr.rrrrrrr]�s
r]c@s&eZdZd	Zd
dd�Zdd�ZfZdS)�FileAST�extrr-NcCs||_||_dS)N)r`r)rr`rrrrr.�szFileAST.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nzext[%d])r@r`r/r0)rr1rArrrrr�szFileAST.children)r`rr-)N)rrrrr.rrrrrrr_�s
r_c@s&eZdZdZd
dd	�Zd
d�ZfZdS)�ForrGrT�nextrUrr-NcCs"||_||_||_||_||_dS)N)rGrTrbrUr)rrGrTrbrUrrrrr.�s
zFor.__init__cCstg}|jdk	r|jd|jf�|jdk	r8|jd|jf�|jdk	rR|jd|jf�|jdk	rl|jd|jf�t|�S)NrGrTrbrU)rGr/rTrbrUr0)rr1rrrr�s



zFor.children)rGrTrbrUrr-)N)rrrrr.rrrrrrra�s
rac@s&eZdZd
Zddd�Zdd	�ZfZdS)�FuncCallr3�argsrr-NcCs||_||_||_dS)N)r3rdr)rr3rdrrrrr.�szFuncCall.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nr3rd)r3r/rdr0)rr1rrrr�s

zFuncCall.children)r3rdrr-)N)rrrrr.rrrrrrrc�s
rcc@s&eZdZd
Zddd�Zdd	�ZfZdS)�FuncDeclrdr*rr-NcCs||_||_||_dS)N)rdr*r)rrdr*rrrrr.�szFuncDecl.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nrdr*)rdr/r*r0)rr1rrrr�s

zFuncDecl.children)rdr*rr-)N)rrrrr.rrrrrrre�s
rec@s&eZdZdZddd�Zd	d
�ZfZdS)
�FuncDef�decl�param_decls�bodyrr-NcCs||_||_||_||_dS)N)rgrhrir)rrgrhrirrrrr.�szFuncDef.__init__cCsng}|jdk	r|jd|jf�|jdk	r8|jd|jf�x,t|jpDg�D]\}}|jd||f�qHWt|�S)Nrgrizparam_decls[%d])rgr/rir@rhr0)rr1rArrrrr�s

zFuncDef.children)rgrhrirr-)N)rrrrr.rrrrrrrf�s
rfc@s&eZdZd	Zd
dd�Zdd�ZdZdS)�Gotor3rr-NcCs||_||_dS)N)r3r)rr3rrrrr.�sz
Goto.__init__cCsg}t|�S)N)r0)rr1rrrrsz
Goto.children)r3rr-)N)r3)rrrrr.rrrrrrrj�s
rjc@s&eZdZd	Zd
dd�Zdd�ZdZdS)�IDr3rr-NcCs||_||_dS)N)r3r)rr3rrrrr.	szID.__init__cCsg}t|�S)N)r0)rr1rrrr
szID.children)r3rr-)N)r3)rrrrr.rrrrrrrks
rkc@s&eZdZd	Zd
dd�Zdd�ZdZdS)�IdentifierType�namesrr-NcCs||_||_dS)N)rmr)rrmrrrrr.szIdentifierType.__init__cCsg}t|�S)N)r0)rr1rrrrszIdentifierType.children)rmrr-)N)rm)rrrrr.rrrrrrrls
rlc@s&eZdZdZddd�Zd	d
�ZfZdS)
�IfrT�iftrue�iffalserr-NcCs||_||_||_||_dS)N)rTrorpr)rrTrorprrrrr.!szIf.__init__cCsZg}|jdk	r|jd|jf�|jdk	r8|jd|jf�|jdk	rR|jd|jf�t|�S)NrTrorp)rTr/rorpr0)rr1rrrr's


zIf.children)rTrorprr-)N)rrrrr.rrrrrrrns
rnc@s&eZdZd	Zd
dd�Zdd�ZfZdS)�InitListr^rr-NcCs||_||_dS)N)r^r)rr^rrrrr.2szInitList.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nz	exprs[%d])r@r^r/r0)rr1rArrrrr6szInitList.children)r^rr-)N)rrrrr.rrrrrrrq0s
rqc@s&eZdZd
Zddd�Zdd	�ZdZdS)
�Labelr3rUrr-NcCs||_||_||_dS)N)r3rUr)rr3rUrrrrr.@szLabel.__init__cCs&g}|jdk	r|jd|jf�t|�S)NrU)rUr/r0)rr1rrrrEs
zLabel.children)r3rUrr-)N)r3)rrrrr.rrrrrrrr>s
rrc@s&eZdZd
Zddd�Zdd	�ZfZdS)�NamedInitializerr3r>rr-NcCs||_||_||_dS)N)r3r>r)rr3r>rrrrr.NszNamedInitializer.__init__cCsTg}|jdk	r|jd|jf�x,t|jp*g�D]\}}|jd||f�q.Wt|�S)Nr>zname[%d])r>r/r@r3r0)rr1rArrrrrSs
zNamedInitializer.children)r3r>rr-)N)rrrrr.rrrrrrrsLs
rsc@s&eZdZd	Zd
dd�Zdd�ZfZdS)�	ParamList�paramsrr-NcCs||_||_dS)N)rur)rrurrrrr.^szParamList.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nz
params[%d])r@rur/r0)rr1rArrrrrbszParamList.children)rurr-)N)rrrrr.rrrrrrrt\s
rtc@s&eZdZd
Zddd�Zdd	�ZdZdS)
�PtrDeclrLr*rr-NcCs||_||_||_dS)N)rLr*r)rrLr*rrrrr.lszPtrDecl.__init__cCs&g}|jdk	r|jd|jf�t|�S)Nr*)r*r/r0)rr1rrrrqs
zPtrDecl.children)rLr*rr-)N)rL)rrrrr.rrrrrrrvjs
rvc@s&eZdZd	Zd
dd�Zdd�ZfZdS)�Returnr>rr-NcCs||_||_dS)N)r>r)rr>rrrrr.zszReturn.__init__cCs&g}|jdk	r|jd|jf�t|�S)Nr>)r>r/r0)rr1rrrr~s
zReturn.children)r>rr-)N)rrrrr.rrrrrrrwxs
rwc@s&eZdZd
Zddd�Zdd	�ZdZdS)
�Structr3rQrr-NcCs||_||_||_dS)N)r3rQr)rr3rQrrrrr.�szStruct.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nz	decls[%d])r@rQr/r0)rr1rArrrrr�szStruct.children)r3rQrr-)N)r3)rrrrr.rrrrrrrx�s
rxc@s&eZdZdZddd�Zd	d
�Zd
ZdS)�	StructRefr3r*�fieldrr-NcCs||_||_||_||_dS)N)r3r*rzr)rr3r*rzrrrrr.�szStructRef.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)Nr3rz)r3r/rzr0)rr1rrrr�s

zStructRef.children)r3r*rzrr-)N)r*)rrrrr.rrrrrrry�s
ryc@s&eZdZd
Zddd�Zdd	�ZfZdS)�SwitchrTrUrr-NcCs||_||_||_dS)N)rTrUr)rrTrUrrrrr.�szSwitch.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)NrTrU)rTr/rUr0)rr1rrrr�s

zSwitch.children)rTrUrr-)N)rrrrr.rrrrrrr{�s
r{c@s&eZdZdZddd�Zd	d
�ZfZdS)
�	TernaryOprTrorprr-NcCs||_||_||_||_dS)N)rTrorpr)rrTrorprrrrr.�szTernaryOp.__init__cCsZg}|jdk	r|jd|jf�|jdk	r8|jd|jf�|jdk	rR|jd|jf�t|�S)NrTrorp)rTr/rorpr0)rr1rrrr�s


zTernaryOp.children)rTrorprr-)N)rrrrr.rrrrrrr|�s
r|c@s&eZdZdZddd�Zd	d
�Zd
ZdS)�TypeDecl�declnamerLr*rr-NcCs||_||_||_||_dS)N)r~rLr*r)rr~rLr*rrrrr.�szTypeDecl.__init__cCs&g}|jdk	r|jd|jf�t|�S)Nr*)r*r/r0)rr1rrrr�s
zTypeDecl.children)r~rLr*rr-)N)r~rL)rrrrr.rrrrrrr}�s
r}c@s&eZdZdZd
dd	�Zd
d�ZdZdS)�Typedefr3rLrMr*rr-NcCs"||_||_||_||_||_dS)N)r3rLrMr*r)rr3rLrMr*rrrrr.�s
zTypedef.__init__cCs&g}|jdk	r|jd|jf�t|�S)Nr*)r*r/r0)rr1rrrr�s
zTypedef.children)r3rLrMr*rr-)N)r3rLrM)rrrrr.rrrrrrr�s
rc@s&eZdZdZddd�Zd	d
�Zd
ZdS)�Typenamer3rLr*rr-NcCs||_||_||_||_dS)N)r3rLr*r)rr3rLr*rrrrr.�szTypename.__init__cCs&g}|jdk	r|jd|jf�t|�S)Nr*)r*r/r0)rr1rrrr�s
zTypename.children)r3rLr*rr-)N)r3rL)rrrrr.rrrrrrr��s
r�c@s&eZdZd
Zddd�Zdd	�ZdZdS)
�UnaryOpr6r>rr-NcCs||_||_||_dS)N)r6r>r)rr6r>rrrrr.�szUnaryOp.__init__cCs&g}|jdk	r|jd|jf�t|�S)Nr>)r>r/r0)rr1rrrr�s
zUnaryOp.children)r6r>rr-)N)r6)rrrrr.rrrrrrr��s
r�c@s&eZdZd
Zddd�Zdd	�ZdZdS)
�Unionr3rQrr-NcCs||_||_||_dS)N)r3rQr)rr3rQrrrrr.szUnion.__init__cCs:g}x,t|jpg�D]\}}|jd||f�qWt|�S)Nz	decls[%d])r@rQr/r0)rr1rArrrrrszUnion.children)r3rQrr-)N)r3)rrrrr.rrrrrrr�s
r�c@s&eZdZd
Zddd�Zdd	�ZfZdS)�WhilerTrUrr-NcCs||_||_||_dS)N)rTrUr)rrTrUrrrrr.szWhile.__init__cCs@g}|jdk	r|jd|jf�|jdk	r8|jd|jf�t|�S)NrTrU)rTr/rUr0)rr1rrrrs

zWhile.children)rTrUrr-)N)rrrrr.rrrrrrr�s
r�)2r �objectrr"r)r2r5r9r<r=rBrDrFrHrJrKrPrRrSrVrWrXrZr[r]r_rarcrerfrjrkrlrnrqrrrsrtrvrwrxryr{r|r}rr�r�r�r�rrrr�<module>s`<0





PK�[��/)�	�	#__pycache__/__init__.cpython-36.pycnu�[���3

g�wUW�@sBdddgZdZddlmZmZddlmZdd
d�Zddd�Zd
S)Zc_lexer�c_parserZc_astz2.14�)�Popen�PIPE�)�CParser�cpp�cCs�|g}t|t�r||7}n|dkr,||g7}||g7}yt|tdd�}|j�d}Wn2tk
r�}ztd	d|��WYdd}~XnX|S)
ae Preprocess a file using cpp.

        filename:
            Name of the file you want to preprocess.

        cpp_path:
        cpp_args:
            Refer to the documentation of parse_file for the meaning of these
            arguments.

        When successful, returns the preprocessed file's contents.
        Errors from cpp will be printed out.
    rT)�stdoutZuniversal_newlinesrzUnable to invoke 'cpp'.  z(Make sure its path was passed correctly
zOriginal error: %sNzAUnable to invoke 'cpp'.  Make sure its path was passed correctly
)�
isinstance�listrrZcommunicate�OSError�RuntimeError)�filename�cpp_path�cpp_args�	path_list�pipe�text�e�r�/usr/lib/python3.6/__init__.py�preprocess_files 



rFNc
CsJ|rt|||�}nt|d��}|j�}WdQRX|dkr>t�}|j||�S)a� Parse a C file using pycparser.

        filename:
            Name of the file you want to parse.

        use_cpp:
            Set to True if you want to execute the C pre-processor
            on the file prior to parsing it.

        cpp_path:
            If use_cpp is True, this is the path to 'cpp' on your
            system. If no path is provided, it attempts to just
            execute 'cpp', so it must be in your PATH.

        cpp_args:
            If use_cpp is True, set this to the command line arguments strings
            to cpp. Be careful with quotes - it's best to pass a raw string
            (r'') here. For example:
            r'-I../utils/fake_libc_include'
            If several arguments are required, pass a list of strings.

        parser:
            Optional parser object to be used instead of the default CParser

        When successful, an AST is returned. ParseError can be
        thrown if the file doesn't parse successfully.

        Errors from cpp will be printed out.
    ZrUN)r�open�readr�parse)rZuse_cpprr�parserr�frrr�
parse_file6sr)rr)FrrN)	�__all__�__version__�
subprocessrrrrrrrrrr�<module>
s

%PK�[��/)�	�	)__pycache__/__init__.cpython-36.opt-1.pycnu�[���3

g�wUW�@sBdddgZdZddlmZmZddlmZdd
d�Zddd�Zd
S)Zc_lexer�c_parserZc_astz2.14�)�Popen�PIPE�)�CParser�cpp�cCs�|g}t|t�r||7}n|dkr,||g7}||g7}yt|tdd�}|j�d}Wn2tk
r�}ztd	d|��WYdd}~XnX|S)
ae Preprocess a file using cpp.

        filename:
            Name of the file you want to preprocess.

        cpp_path:
        cpp_args:
            Refer to the documentation of parse_file for the meaning of these
            arguments.

        When successful, returns the preprocessed file's contents.
        Errors from cpp will be printed out.
    rT)�stdoutZuniversal_newlinesrzUnable to invoke 'cpp'.  z(Make sure its path was passed correctly
zOriginal error: %sNzAUnable to invoke 'cpp'.  Make sure its path was passed correctly
)�
isinstance�listrrZcommunicate�OSError�RuntimeError)�filename�cpp_path�cpp_args�	path_list�pipe�text�e�r�/usr/lib/python3.6/__init__.py�preprocess_files 



rFNc
CsJ|rt|||�}nt|d��}|j�}WdQRX|dkr>t�}|j||�S)a� Parse a C file using pycparser.

        filename:
            Name of the file you want to parse.

        use_cpp:
            Set to True if you want to execute the C pre-processor
            on the file prior to parsing it.

        cpp_path:
            If use_cpp is True, this is the path to 'cpp' on your
            system. If no path is provided, it attempts to just
            execute 'cpp', so it must be in your PATH.

        cpp_args:
            If use_cpp is True, set this to the command line arguments strings
            to cpp. Be careful with quotes - it's best to pass a raw string
            (r'') here. For example:
            r'-I../utils/fake_libc_include'
            If several arguments are required, pass a list of strings.

        parser:
            Optional parser object to be used instead of the default CParser

        When successful, an AST is returned. ParseError can be
        thrown if the file doesn't parse successfully.

        Errors from cpp will be printed out.
    ZrUN)r�open�readr�parse)rZuse_cpprr�parserr�frrr�
parse_file6sr)rr)FrrN)	�__all__�__version__�
subprocessrrrrrrrrrr�<module>
s

%PK�[(31CL�L�)__pycache__/c_parser.cpython-36.opt-1.pycnu�[���3

��]��@s�ddlZddlmZddlmZddlmZddlmZm	Z	m
Z
ddlmZGdd	�d	e�Z
ed
kr|ddlZddlZddlZdS)�N)�yacc�)�c_ast)�CLexer)�	PLYParser�Coord�
ParseError)�fix_switch_casesc
@sDeZdZ�dCdd�Z�dDd	d
�Zdd�Zd
d�Zdd�Zdd�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd �Zd!d"�Zd#d$�Z�dEd%d&�Zd'd(�Zd)d*�Z�dPZd>d?�Zd@dA�ZdBdC�ZdDdE�ZdFdG�ZdHdI�ZdJdK�ZdLdM�ZdNdO�ZdPdQ�ZdRdS�Z dTdU�Z!dVdW�Z"dXdY�Z#dZd[�Z$d\d]�Z%d^d_�Z&d`da�Z'dbdc�Z(ddde�Z)dfdg�Z*dhdi�Z+djdk�Z,dldm�Z-dndo�Z.dpdq�Z/drds�Z0dtdu�Z1dvdw�Z2dxdy�Z3dzd{�Z4d|d}�Z5d~d�Z6d�d��Z7d�d��Z8d�d��Z9d�d��Z:d�d��Z;d�d��Z<d�d��Z=d�d��Z>d�d��Z?d�d��Z@d�d��ZAd�d��ZBd�d��ZCd�d��ZDd�d��ZEd�d��ZFd�d��ZGd�d��ZHd�d��ZId�d��ZJd�d��ZKd�d��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSd�d��ZTd�d��ZUd�d��ZVd�d��ZWd�dÄZXd�dńZYd�dDŽZZd�dɄZ[d�d˄Z\d�d̈́Z]d�dτZ^d�dфZ_d�dӄZ`d�dՄZad�dׄZbd�dلZcd�dۄZdd�d݄Zed�d߄Zfd�d�Zgd�d�Zhd�d�Zid�d�Zjd�d�Zkd�d�Zld�d�Zmd�d�Znd�d�Zod�d�Zpd�d��Zqd�d��Zrd�d��Zsd�d��Ztd�d��Zud�d��Zv�d�d�Zw�d�d�Zx�d�d�Zy�d�d�Zz�d�d	�Z{�d
�d�Z|�d�d
�Z}�d�d�Z~�d�d�Z�d�d�Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d �d!�Z��d"�d#�Z��d$�d%�Z��d&�d'�Z��d(�d)�Z��d*�d+�Z��d,�d-�Z��d.�d/�Z��d0�d1�Z��d2�d3�Z��d4�d5�Z��d6�d7�Z��d8�d9�Z��d:�d;�Z��d<�d=�Z��d>�d?�Z��d@�dA�Z��dBS(Q�CParserT�pycparser.lextab�pycparser.yacctabF�c	Cs�t|j|j|j|jd�|_|jj|||d�|jj|_ddddddd	d
ddd
dddg}x|D]}|j|�q\Wt	j	|d||||d�|_
t�g|_d|_
dS)a� Create a new CParser.

            Some arguments for controlling the debug/optimization
            level of the parser are provided. The defaults are
            tuned for release/performance mode.
            The simple rules for using them are:
            *) When tweaking CParser/CLexer, set these to False
            *) When releasing a stable parser, set to True

            lex_optimize:
                Set to False when you're modifying the lexer.
                Otherwise, changes in the lexer won't be used, if
                some lextab.py file exists.
                When releasing with a stable lexer, set to True
                to save the re-generation of the lexer table on
                each run.

            lextab:
                Points to the lex table that's used for optimized
                mode. Only if you're modifying the lexer and want
                some tests to avoid re-generating the table, make
                this point to a local lex table file (that's been
                earlier generated with lex_optimize=True)

            yacc_optimize:
                Set to False when you're modifying the parser.
                Otherwise, changes in the parser won't be used, if
                some parsetab.py file exists.
                When releasing with a stable parser, set to True
                to save the re-generation of the parser table on
                each run.

            yacctab:
                Points to the yacc table that's used for optimized
                mode. Only if you're modifying the parser, make
                this point to a local yacc table file

            yacc_debug:
                Generate a parser.out file that explains how yacc
                built the parsing table from the grammar.

            taboutputdir:
                Set this parameter to control the location of generated
                lextab and yacctab files.
        )Z
error_funcZon_lbrace_funcZon_rbrace_funcZtype_lookup_func)�optimize�lextab�	outputdirZabstract_declaratorZassignment_expressionZdeclaration_listZdeclaration_specifiersZdesignationZ
expressionZidentifier_listZinit_declarator_listZinitializer_listZparameter_type_listZspecifier_qualifier_listZblock_item_listZtype_qualifier_listZstruct_declarator_listZtranslation_unit_or_empty)�module�start�debugrZ	tabmodulerN)r�_lex_error_func�_lex_on_lbrace_func�_lex_on_rbrace_func�_lex_type_lookup_func�clexZbuild�tokensZ_create_opt_ruler�cparser�dict�_scope_stack�_last_yielded_token)	�selfZlex_optimizerZ
yacc_optimizeZyacctabZ
yacc_debugZtaboutputdirZrules_with_optZrule�r�/usr/lib/python3.6/c_parser.py�__init__sF5




zCParser.__init__rcCs6||j_|jj�t�g|_d|_|jj||j|d�S)a& Parses C code and returns an AST.

            text:
                A string containing the C source code

            filename:
                Name of the file being parsed (for meaningful
                error messages)

            debuglevel:
                Debug level to yacc
        N)�inputZlexerr)r�filenameZreset_linenorrrr�parse)r�textr#Z
debuglevelrrr r$~s


z
CParser.parsecCs|jjt��dS)N)r�appendr)rrrr �_push_scope�szCParser._push_scopecCs|jj�dS)N)r�pop)rrrr �
_pop_scope�szCParser._pop_scopecCs4|jdj|d�s"|jd||�d|jd|<dS)zC Add a new typedef name (ie a TYPEID) to the current scope
        rTz;Typedef %r previously declared as non-typedef in this scopeN���r*)r�get�_parse_error)r�name�coordrrr �_add_typedef_name�s

zCParser._add_typedef_namecCs4|jdj|d�r"|jd||�d|jd|<dS)ze Add a new object, function, or enum member name (ie an ID) to the
            current scope
        rFz;Non-typedef %r previously declared as typedef in this scopeNr*r*)rr+r,)rr-r.rrr �_add_identifier�s

zCParser._add_identifiercCs.x(t|j�D]}|j|�}|dk	r|SqWdS)z8 Is *name* a typedef-name in the current scope?
        NF)�reversedrr+)rr-ZscopeZin_scoperrr �_is_type_in_scope�s

zCParser._is_type_in_scopecCs|j||j||��dS)N)r,�_coord)r�msg�line�columnrrr r�szCParser._lex_error_funccCs|j�dS)N)r')rrrr r�szCParser._lex_on_lbrace_funccCs|j�dS)N)r))rrrr r�szCParser._lex_on_rbrace_funccCs|j|�}|S)z� Looks up types that were previously defined with
            typedef.
            Passed to the lexer for recognizing identifiers that
            are types.
        )r2)rr-Zis_typerrr r�s
zCParser._lex_type_lookup_funccCs|jjS)z� We need access to yacc's lookahead token in certain cases.
            This is the last token yacc requested from the lexer, so we
            ask the lexer.
        )rZ
last_token)rrrr �_get_yacc_lookahead_token�sz!CParser._get_yacc_lookahead_tokencCsd|}|}x|jr|j}q
Wt|tj�r0||_|S|}xt|jtj�sL|j}q6W|j|_||_|SdS)z� Tacks a type modifier on a declarator, and returns
            the modified declarator.

            Note: the declarator and modifier may be modified
        N)�type�
isinstancer�TypeDecl)r�decl�modifierZ
modifier_headZ
modifier_tailZ	decl_tailrrr �_type_modify_decl�s

zCParser._type_modify_declcCs�|}xt|tj�s|j}qW|j|_|j|_x>|D]6}t|tj�s2t|�dkr^|j	d|j
�q2||_|Sq2W|s�t|jtj�s�|j	d|j
�tjdg|j
d�|_n tjdd�|D�|dj
d�|_|S)	z- Fixes a declaration. Modifies decl.
        rz Invalid multiple types specifiedzMissing type in declaration�int)r.cSsg|]}|jD]}|�qqSr)�names)�.0�idr-rrr �
<listcomp>Usz/CParser._fix_decl_name_type.<locals>.<listcomp>r)r9rr:r8�declnamer-�quals�IdentifierType�lenr,r.�FuncDecl)rr;�typenamer8Ztnrrr �_fix_decl_name_type,s.


zCParser._fix_decl_name_typecCs(|ptggggd�}||jd|�|S)a� Declaration specifiers are represented by a dictionary
            with the entries:
            * qual: a list of type qualifiers
            * storage: a list of storage type qualifiers
            * type: a list of type specifiers
            * function: a list of function specifiers

            This method is given a declaration specifier, and a
            new specifier of a given kind.
            Returns the declaration specifier, with the new
            specifier incorporated.
        )�qual�storager8�functionr)r�insert)rZdeclspecZnewspecZkind�specrrr �_add_declaration_specifierYs
z"CParser._add_declaration_specifiercCs@d|dk}g}|djd�dk	r&�n4|dddkr�t|d�dksvt|ddj�d	ksv|j|ddjd�r�d
}x"|dD]}t|d�r�|j}Pq�W|jd|�tj|ddjddd|ddjd
�|dd<|dd=nrt	|ddtj
tjtjf��sZ|dd}xt	|tj��s.|j
}�qW|jdk�rZ|ddjd|_|dd=x�|D]�}	|�r�tjd|d|d|	d|	djd�}
n<tjd|d|d|d|	d|	jd�|	jd�|	djd�}
t	|
j
tj
tjtjf��r�|
}n|j|
|d�}|�r,|�r|j|j|j�n|j|j|j�|j|��q`W|S)z� Builds a list of declarations all sharing the given specifiers.
            If typedef_namespace is true, each declared name is added
            to the "typedef namespace", which also includes objects,
            functions, and enum constants.
        ZtypedefrKr�bitsizeNr;r8�r�?r.zInvalid declaration)rCr8rDr.rJ)r-rDrKr8r.rL�init)r-rDrK�funcspecr8rSrPr.r*r*r*r*r*r*r*)r+rFr?r2�hasattrr.r,rr:r9�Struct�UnionrEr8rCZTypedef�DeclrIr/r-r0r&)rrN�decls�typedef_namespaceZ
is_typedefZdeclarationsr.�tZdecls_0_tailr;�declarationZ
fixed_declrrr �_build_declarationsjsl&


zCParser._build_declarationscCs2|j|t|dd�gdd�d}tj||||jd�S)z' Builds a function definition.
        N)r;rST)rNrYrZr)r;�param_decls�bodyr.)r]rrZFuncDefr.)rrNr;r^r_r\rrr �_build_function_definition�sz"CParser._build_function_definitioncCs|dkrtjStjSdS)z` Given a token (either STRUCT or UNION), selects the
            appropriate AST class.
        �structN)rrVrW)r�tokenrrr �_select_struct_union_class�sz"CParser._select_struct_union_class�left�LOR�LAND�OR�XOR�AND�EQ�NE�GT�GE�LT�LE�RSHIFT�LSHIFT�PLUS�MINUS�TIMES�DIVIDE�MODcCs2|ddkrtjg�|d<ntj|d�|d<dS)zh translation_unit_or_empty   : translation_unit
                                        | empty
        rNr)rZFileAST)r�prrr �p_translation_unit_or_empty�sz#CParser.p_translation_unit_or_emptycCs|d|d<dS)z4 translation_unit    : external_declaration
        rrNr)rrwrrr �p_translation_unit_1�szCParser.p_translation_unit_1cCs.|ddk	r|dj|d�|d|d<dS)zE translation_unit    : translation_unit external_declaration
        rQNrr)�extend)rrwrrr �p_translation_unit_2szCParser.p_translation_unit_2cCs|dg|d<dS)z7 external_declaration    : function_definition
        rrNr)rrwrrr �p_external_declaration_1sz CParser.p_external_declaration_1cCs|d|d<dS)z/ external_declaration    : declaration
        rrNr)rrwrrr �p_external_declaration_2sz CParser.p_external_declaration_2cCs|d|d<dS)z0 external_declaration    : pp_directive
        rrNr)rrwrrr �p_external_declaration_3sz CParser.p_external_declaration_3cCsd|d<dS)z( external_declaration    : SEMI
        Nrr)rrwrrr �p_external_declaration_4sz CParser.p_external_declaration_4cCs|jd|j|jd���dS)z  pp_directive  : PPHASH
        zDirectives not supported yetrN)r,r3�lineno)rrwrrr �p_pp_directive$szCParser.p_pp_directivecCsPtggtjdg|j|jd��d�ggd�}|j||d|d|dd�|d<d	S)
zR function_definition : declarator declaration_list_opt compound_statement
        r>r)r.)rJrKr8rLrQ�)rNr;r^r_rN)rrrEr3r�r`)rrwrNrrr �p_function_definition_1-szCParser.p_function_definition_1cCs.|d}|j||d|d|dd�|d<dS)zi function_definition : declaration_specifiers declarator declaration_list_opt compound_statement
        rrQr��)rNr;r^r_rN)r`)rrwrNrrr �p_function_definition_2>szCParser.p_function_definition_2cCs|d|d<dS)a
 statement   : labeled_statement
                        | expression_statement
                        | compound_statement
                        | selection_statement
                        | iteration_statement
                        | jump_statement
        rrNr)rrwrrr �p_statementIszCParser.p_statementc
Cs�|d}|ddkr�|d}tjtjtjf}t|�dkrzt|d|�rztjd|d|d|d|ddd|djd	�g}q�|j|t	ddd
�gdd�}n|j||ddd�}||d<dS)
zE decl_body : declaration_specifiers init_declarator_list_opt
        rrQNr8rrJrKrL)r-rDrKrTr8rSrPr.)r;rST)rNrYrZ)
rrVrW�EnumrFr9rXr.r]r)rrwrNZtyZs_u_or_erYrrr �p_decl_body\s.
zCParser.p_decl_bodycCs|d|d<dS)z& declaration : decl_body SEMI
        rrNr)rrwrrr �
p_declaration�szCParser.p_declarationcCs,t|�dkr|dn|d|d|d<dS)zj declaration_list    : declaration
                                | declaration_list declaration
        rQrrN)rF)rrwrrr �p_declaration_list�szCParser.p_declaration_listcCs|j|d|dd�|d<dS)zM declaration_specifiers  : type_qualifier declaration_specifiers_opt
        rQrrJrN)rO)rrwrrr �p_declaration_specifiers_1�sz"CParser.p_declaration_specifiers_1cCs|j|d|dd�|d<dS)zM declaration_specifiers  : type_specifier declaration_specifiers_opt
        rQrr8rN)rO)rrwrrr �p_declaration_specifiers_2�sz"CParser.p_declaration_specifiers_2cCs|j|d|dd�|d<dS)zV declaration_specifiers  : storage_class_specifier declaration_specifiers_opt
        rQrrKrN)rO)rrwrrr �p_declaration_specifiers_3�sz"CParser.p_declaration_specifiers_3cCs|j|d|dd�|d<dS)zQ declaration_specifiers  : function_specifier declaration_specifiers_opt
        rQrrLrN)rO)rrwrrr �p_declaration_specifiers_4�sz"CParser.p_declaration_specifiers_4cCs|d|d<dS)z� storage_class_specifier : AUTO
                                    | REGISTER
                                    | STATIC
                                    | EXTERN
                                    | TYPEDEF
        rrNr)rrwrrr �p_storage_class_specifier�sz!CParser.p_storage_class_specifiercCs|d|d<dS)z& function_specifier  : INLINE
        rrNr)rrwrrr �p_function_specifier�szCParser.p_function_specifiercCs(tj|dg|j|jd��d�|d<dS)a� type_specifier  : VOID
                            | _BOOL
                            | CHAR
                            | SHORT
                            | INT
                            | LONG
                            | FLOAT
                            | DOUBLE
                            | _COMPLEX
                            | SIGNED
                            | UNSIGNED
        r)r.rN)rrEr3r�)rrwrrr �p_type_specifier_1�s
zCParser.p_type_specifier_1cCs|d|d<dS)z� type_specifier  : typedef_name
                            | enum_specifier
                            | struct_or_union_specifier
        rrNr)rrwrrr �p_type_specifier_2�szCParser.p_type_specifier_2cCs|d|d<dS)zo type_qualifier  : CONST
                            | RESTRICT
                            | VOLATILE
        rrNr)rrwrrr �p_type_qualifier�szCParser.p_type_qualifiercCs0t|�dkr|d|dgn|dg|d<dS)z� init_declarator_list    : init_declarator
                                    | init_declarator_list COMMA init_declarator
        r�rr�rN)rF)rrwrrr �p_init_declarator_list_1�sz CParser.p_init_declarator_list_1cCstd|dd�g|d<dS)z6 init_declarator_list    : EQUALS initializer
        NrQ)r;rSr)r)rrwrrr �p_init_declarator_list_2�sz CParser.p_init_declarator_list_2cCst|ddd�g|d<dS)z7 init_declarator_list    : abstract_declarator
        rN)r;rSr)r)rrwrrr �p_init_declarator_list_3�sz CParser.p_init_declarator_list_3cCs,t|dt|�dkr|dndd�|d<dS)zb init_declarator : declarator
                            | declarator EQUALS initializer
        rrQr�N)r;rSr)rrF)rrwrrr �p_init_declaratorszCParser.p_init_declaratorcCs|j|d|dd�|d<dS)zS specifier_qualifier_list    : type_qualifier specifier_qualifier_list_opt
        rQrrJrN)rO)rrwrrr �p_specifier_qualifier_list_1sz$CParser.p_specifier_qualifier_list_1cCs|j|d|dd�|d<dS)zS specifier_qualifier_list    : type_specifier specifier_qualifier_list_opt
        rQrr8rN)rO)rrwrrr �p_specifier_qualifier_list_2sz$CParser.p_specifier_qualifier_list_2cCs4|j|d�}||dd|j|jd��d�|d<dS)z{ struct_or_union_specifier   : struct_or_union ID
                                        | struct_or_union TYPEID
        rrQN)r-rYr.r)rcr3r�)rrw�klassrrr �p_struct_or_union_specifier_1s
z%CParser.p_struct_or_union_specifier_1cCs4|j|d�}|d|d|j|jd��d�|d<dS)zd struct_or_union_specifier : struct_or_union brace_open struct_declaration_list brace_close
        rNr�rQ)r-rYr.r)rcr3r�)rrwr�rrr �p_struct_or_union_specifier_2s
z%CParser.p_struct_or_union_specifier_2cCs8|j|d�}||d|d|j|jd��d�|d<dS)z� struct_or_union_specifier   : struct_or_union ID brace_open struct_declaration_list brace_close
                                        | struct_or_union TYPEID brace_open struct_declaration_list brace_close
        rrQr�)r-rYr.rN)rcr3r�)rrwr�rrr �p_struct_or_union_specifier_3&s
z%CParser.p_struct_or_union_specifier_3cCs|d|d<dS)zF struct_or_union : STRUCT
                            | UNION
        rrNr)rrwrrr �p_struct_or_union0szCParser.p_struct_or_unioncCs,t|�dkr|dn|d|d|d<dS)z� struct_declaration_list     : struct_declaration
                                        | struct_declaration_list struct_declaration
        rQrrN)rF)rrwrrr �p_struct_declaration_list8sz!CParser.p_struct_declaration_listcCs�|d}|ddk	r(|j||dd�}nht|d�dkrx|dd}t|tj�rV|}n
tj|�}|j|t|d�gd�}n|j|tddd�gd�}||d<dS)	zW struct_declaration : specifier_qualifier_list struct_declarator_list_opt SEMI
        rrQN)rNrYr8r)r;)r;rS)r]rFr9rZNoderEr)rrwrNrYZnodeZ	decl_typerrr �p_struct_declaration_1>s"
zCParser.p_struct_declaration_1cCs(|j|dt|ddd�gd�|d<dS)zP struct_declaration : specifier_qualifier_list abstract_declarator SEMI
        rrQN)r;rS)rNrYr)r]r)rrwrrr �p_struct_declaration_2ds
zCParser.p_struct_declaration_2cCs0t|�dkr|d|dgn|dg|d<dS)z� struct_declarator_list  : struct_declarator
                                    | struct_declarator_list COMMA struct_declarator
        r�rr�rN)rF)rrwrrr �p_struct_declarator_listrsz CParser.p_struct_declarator_listcCs|ddd�|d<dS)z( struct_declarator : declarator
        rN)r;rPrr)rrwrrr �p_struct_declarator_1{szCParser.p_struct_declarator_1cCsDt|�dkr$|d|dd�|d<ntjddd�|dd�|d<dS)z� struct_declarator   : declarator COLON constant_expression
                                | COLON constant_expression
        r�r)r;rPrNrQ)rFrr:)rrwrrr �p_struct_declarator_2�szCParser.p_struct_declarator_2cCs&tj|dd|j|jd���|d<dS)zM enum_specifier  : ENUM ID
                            | ENUM TYPEID
        rQNrr)rr�r3r�)rrwrrr �p_enum_specifier_1�szCParser.p_enum_specifier_1cCs&tjd|d|j|jd���|d<dS)zG enum_specifier  : ENUM brace_open enumerator_list brace_close
        Nr�rr)rr�r3r�)rrwrrr �p_enum_specifier_2�szCParser.p_enum_specifier_2cCs*tj|d|d|j|jd���|d<dS)z� enum_specifier  : ENUM ID brace_open enumerator_list brace_close
                            | ENUM TYPEID brace_open enumerator_list brace_close
        rQr�rrN)rr�r3r�)rrwrrr �p_enum_specifier_3�szCParser.p_enum_specifier_3cCsht|�dkr*tj|dg|dj�|d<n:t|�dkrD|d|d<n |djj|d�|d|d<dS)z� enumerator_list : enumerator
                            | enumerator_list COMMA
                            | enumerator_list COMMA enumerator
        rQrrr�N)rFrZEnumeratorListr.Zenumeratorsr&)rrwrrr �p_enumerator_list�szCParser.p_enumerator_listcCsjt|�dkr,tj|dd|j|jd���}n"tj|d|d|j|jd���}|j|j|j�||d<dS)zR enumerator  : ID
                        | ID EQUALS constant_expression
        rQrNr�r)rFrZ
Enumeratorr3r�r0r-r.)rrwZ
enumeratorrrr �p_enumerator�szCParser.p_enumeratorcCs|d|d<dS)z) declarator  : direct_declarator
        rrNr)rrwrrr �p_declarator_1�szCParser.p_declarator_1cCs|j|d|d�|d<dS)z1 declarator  : pointer direct_declarator
        rQrrN)r=)rrwrrr �p_declarator_2�szCParser.p_declarator_2cCs:tj|ddd|j|jd��d�}|j||d�|d<dS)z& declarator  : pointer TYPEID
        rQN)rCr8rDr.rr)rr:r3r�r=)rrwr;rrr �p_declarator_3�szCParser.p_declarator_3cCs*tj|ddd|j|jd��d�|d<dS)z" direct_declarator   : ID
        rN)rCr8rDr.r)rr:r3r�)rrwrrr �p_direct_declarator_1�s
zCParser.p_direct_declarator_1cCs|d|d<dS)z8 direct_declarator   : LPAREN declarator RPAREN
        rQrNr)rrwrrr �p_direct_declarator_2�szCParser.p_direct_declarator_2cCsft|�dkr|dngpg}tjdt|�dkr6|dn|d||djd�}|j|d|d�|d<dS)	zu direct_declarator   : direct_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET
        �r�Nr�r)r8�dim�	dim_qualsr.)r;r<r)rFr�	ArrayDeclr.r=)rrwrD�arrrrr �p_direct_declarator_3�szCParser.p_direct_declarator_3cCs^dd�|d|dgD�}dd�|D�}tjd|d||djd	�}|j|d|d
�|d<dS)z� direct_declarator   : direct_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKET
                                | direct_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKET
        cSs g|]}t|t�r|n|g�qSr)r9�list)r@�itemrrr rB�sz1CParser.p_direct_declarator_4.<locals>.<listcomp>r�r�cSs"g|]}|D]}|dk	r|�qqS)Nr)r@ZsublistrJrrr rB�s
Nr�r)r8r�r�r.)r;r<r)rr�r.r=)rrwZlisted_qualsr�r�rrr �p_direct_declarator_4�szCParser.p_direct_declarator_4cCs^tjdtj|d|j|jd���|ddkr4|dng|djd�}|j|d|d�|d<dS)za direct_declarator   : direct_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKET
        Nr�r�r)r8r�r�r.)r;r<r)rr��IDr3r�r.r=)rrwr�rrr �p_direct_declarator_5szCParser.p_direct_declarator_5cCs|tj|dd|djd�}|j�jdkrb|jdk	rbx.|jjD]"}t|tj�rNP|j	|j
|j�q<W|j|d|d�|d<dS)z� direct_declarator   : direct_declarator LPAREN parameter_type_list RPAREN
                                | direct_declarator LPAREN identifier_list_opt RPAREN
        r�Nr)�argsr8r.�LBRACE)r;r<r)rrGr.r7r8r��paramsr9�
EllipsisParamr0r-r=)rrw�funcZparamrrr �p_direct_declarator_6s

zCParser.p_direct_declarator_6cCsr|j|jd��}tj|dpgd|d�}t|�dkrf|d}x|jdk	rP|j}q>W||_|d|d<n||d<dS)zm pointer : TIMES type_qualifier_list_opt
                    | TIMES type_qualifier_list_opt pointer
        rrQN)rDr8r.r�r)r3r�rZPtrDeclrFr8)rrwr.Znested_typeZ	tail_typerrr �	p_pointer(s
zCParser.p_pointercCs0t|�dkr|dgn|d|dg|d<dS)zs type_qualifier_list : type_qualifier
                                | type_qualifier_list type_qualifier
        rQrrN)rF)rrwrrr �p_type_qualifier_listFszCParser.p_type_qualifier_listcCs>t|�dkr.|djjtj|j|jd����|d|d<dS)zn parameter_type_list : parameter_list
                                | parameter_list COMMA ELLIPSIS
        rQrr�rN)rFr�r&rr�r3r�)rrwrrr �p_parameter_type_listLs"zCParser.p_parameter_type_listcCsNt|�dkr*tj|dg|dj�|d<n |djj|d�|d|d<dS)zz parameter_list  : parameter_declaration
                            | parameter_list COMMA parameter_declaration
        rQrrr�N)rFr�	ParamListr.r�r&)rrwrrr �p_parameter_listUszCParser.p_parameter_listcCsX|d}|ds2tjdg|j|jd��d�g|d<|j|t|dd�gd�d|d<d	S)
zE parameter_declaration   : declaration_specifiers declarator
        rr8r>)r.rQ)r;)rNrYrN)rrEr3r�r]r)rrwrNrrr �p_parameter_declaration_1_sz!CParser.p_parameter_declaration_1cCs�|d}|ds2tjdg|j|jd��d�g|d<t|d�dkr�t|dd
j�dkr�|j|ddjd�r�|j|t|ddd�gd	�d}nHtj	d
|d|dp�tj
ddd�|j|jd��d�}|d}|j||�}||d<dS)zR parameter_declaration   : declaration_specifiers abstract_declarator_opt
        rr8r>)r.rrQN)r;rS)rNrYr
rJ)r-rDr8r.r*r*)rrEr3r�rFr?r2r]r�Typenamer:rI)rrwrNr;rHrrr �p_parameter_declaration_2js"&z!CParser.p_parameter_declaration_2cCsNt|�dkr*tj|dg|dj�|d<n |djj|d�|d|d<dS)ze identifier_list : identifier
                            | identifier_list COMMA identifier
        rQrrr�N)rFrr�r.r�r&)rrwrrr �p_identifier_list�szCParser.p_identifier_listcCs|d|d<dS)z- initializer : assignment_expression
        rrNr)rrwrrr �p_initializer_1�szCParser.p_initializer_1cCs:|ddkr*tjg|j|jd���|d<n|d|d<dS)z� initializer : brace_open initializer_list_opt brace_close
                        | brace_open initializer_list COMMA brace_close
        rQNrr)r�InitListr3r�)rrwrrr �p_initializer_2�szCParser.p_initializer_2cCs�t|�dkrN|ddkr |dntj|d|d�}tj|g|dj�|d<nD|ddkrb|dntj|d|d�}|djj|�|d|d<dS)z� initializer_list    : designation_opt initializer
                                | initializer_list COMMA designation_opt initializer
        r�rNrQrr�)rFrZNamedInitializerr�r.�exprsr&)rrwrSrrr �p_initializer_list�s((zCParser.p_initializer_listcCs|d|d<dS)z. designation : designator_list EQUALS
        rrNr)rrwrrr �
p_designation�szCParser.p_designationcCs0t|�dkr|dgn|d|dg|d<dS)z_ designator_list : designator
                            | designator_list designator
        rQrrN)rF)rrwrrr �p_designator_list�szCParser.p_designator_listcCs|d|d<dS)zi designator  : LBRACKET constant_expression RBRACKET
                        | PERIOD identifier
        rQrNr)rrwrrr �p_designator�szCParser.p_designatorcCsTtjd|dd|dp$tjddd�|j|jd��d�}|j||dd�|d<dS)	zH type_name   : specifier_qualifier_list abstract_declarator_opt
        r
rrJrQN)r-rDr8r.r8r)rr�r:r3r�rI)rrwrHrrr �p_type_name�s	
zCParser.p_type_namecCs(tjddd�}|j||dd�|d<dS)z+ abstract_declarator     : pointer
        Nr)r;r<r)rr:r=)rrwZ	dummytyperrr �p_abstract_declarator_1�szCParser.p_abstract_declarator_1cCs|j|d|d�|d<dS)zF abstract_declarator     : pointer direct_abstract_declarator
        rQrrN)r=)rrwrrr �p_abstract_declarator_2�szCParser.p_abstract_declarator_2cCs|d|d<dS)z> abstract_declarator     : direct_abstract_declarator
        rrNr)rrwrrr �p_abstract_declarator_3�szCParser.p_abstract_declarator_3cCs|d|d<dS)zA direct_abstract_declarator  : LPAREN abstract_declarator RPAREN rQrNr)rrwrrr �p_direct_abstract_declarator_1�sz&CParser.p_direct_abstract_declarator_1cCs6tjd|dg|djd�}|j|d|d�|d<dS)zn direct_abstract_declarator  : direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKET
        Nr�r)r8r�r�r.)r;r<r)rr�r.r=)rrwr�rrr �p_direct_abstract_declarator_2�sz&CParser.p_direct_abstract_declarator_2cCs4tjtjddd�|dg|j|jd��d�|d<dS)zS direct_abstract_declarator  : LBRACKET assignment_expression_opt RBRACKET
        NrQr)r8r�r�r.r)rr�r:r3r�)rrwrrr �p_direct_abstract_declarator_3�s
z&CParser.p_direct_abstract_declarator_3cCsJtjdtj|d|j|jd���g|djd�}|j|d|d�|d<dS)zZ direct_abstract_declarator  : direct_abstract_declarator LBRACKET TIMES RBRACKET
        Nr�r)r8r�r�r.)r;r<r)rr�r�r3r�r.r=)rrwr�rrr �p_direct_abstract_declarator_4sz&CParser.p_direct_abstract_declarator_4cCsHtjtjddd�tj|d|j|jd���g|j|jd��d�|d<dS)z? direct_abstract_declarator  : LBRACKET TIMES RBRACKET
        Nr�r)r8r�r�r.r)rr�r:r�r3r�)rrwrrr �p_direct_abstract_declarator_5s
z&CParser.p_direct_abstract_declarator_5cCs4tj|dd|djd�}|j|d|d�|d<dS)zh direct_abstract_declarator  : direct_abstract_declarator LPAREN parameter_type_list_opt RPAREN
        r�Nr)r�r8r.)r;r<r)rrGr.r=)rrwr�rrr �p_direct_abstract_declarator_6s
z&CParser.p_direct_abstract_declarator_6cCs2tj|dtjddd�|j|jd��d�|d<dS)zM direct_abstract_declarator  : LPAREN parameter_type_list_opt RPAREN
        rQNr)r�r8r.r)rrGr:r3r�)rrwrrr �p_direct_abstract_declarator_7sz&CParser.p_direct_abstract_declarator_7cCs(t|dt�r|dn|dg|d<dS)zG block_item  : declaration
                        | statement
        rrN)r9r�)rrwrrr �p_block_item*szCParser.p_block_itemcCs:t|�dks|ddgkr"|dn|d|d|d<dS)z_ block_item_list : block_item
                            | block_item_list block_item
        rQNrr)rF)rrwrrr �p_block_item_list2szCParser.p_block_item_listcCs&tj|d|j|jd��d�|d<dS)zA compound_statement : brace_open block_item_list_opt brace_close rQr)Zblock_itemsr.rN)rZCompoundr3r�)rrwrrr �p_compound_statement_19szCParser.p_compound_statement_1cCs*tj|d|d|j|jd���|d<dS)z( labeled_statement : ID COLON statement rr�rN)rZLabelr3r�)rrwrrr �p_labeled_statement_1?szCParser.p_labeled_statement_1cCs,tj|d|dg|j|jd���|d<dS)z> labeled_statement : CASE constant_expression COLON statement rQr�rrN)rZCaser3r�)rrwrrr �p_labeled_statement_2CszCParser.p_labeled_statement_2cCs&tj|dg|j|jd���|d<dS)z- labeled_statement : DEFAULT COLON statement r�rrN)rZDefaultr3r�)rrwrrr �p_labeled_statement_3GszCParser.p_labeled_statement_3cCs,tj|d|dd|j|jd���|d<dS)z= selection_statement : IF LPAREN expression RPAREN statement r�r�Nrr)r�Ifr3r�)rrwrrr �p_selection_statement_1KszCParser.p_selection_statement_1cCs0tj|d|d|d|j|jd���|d<dS)zL selection_statement : IF LPAREN expression RPAREN statement ELSE statement r�r��rrN)rr�r3r�)rrwrrr �p_selection_statement_2OszCParser.p_selection_statement_2cCs.ttj|d|d|j|jd����|d<dS)zA selection_statement : SWITCH LPAREN expression RPAREN statement r�r�rrN)r	rZSwitchr3r�)rrwrrr �p_selection_statement_3SszCParser.p_selection_statement_3cCs*tj|d|d|j|jd���|d<dS)z@ iteration_statement : WHILE LPAREN expression RPAREN statement r�r�rrN)rZWhiler3r�)rrwrrr �p_iteration_statement_1XszCParser.p_iteration_statement_1cCs*tj|d|d|j|jd���|d<dS)zH iteration_statement : DO statement WHILE LPAREN expression RPAREN SEMI r�rQrrN)rZDoWhiler3r�)rrwrrr �p_iteration_statement_2\szCParser.p_iteration_statement_2cCs6tj|d|d|d|d|j|jd���|d<dS)zj iteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statement r�r�r��	rrN)r�Forr3r�)rrwrrr �p_iteration_statement_3`szCParser.p_iteration_statement_3cCsJtjtj|d|j|jd���|d|d|d|j|jd���|d<dS)zb iteration_statement : FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN statement r�rr���rN)rr�ZDeclListr3r�)rrwrrr �p_iteration_statement_4dszCParser.p_iteration_statement_4cCs$tj|d|j|jd���|d<dS)z  jump_statement  : GOTO ID SEMI rQrrN)rZGotor3r�)rrwrrr �p_jump_statement_1iszCParser.p_jump_statement_1cCstj|j|jd���|d<dS)z jump_statement  : BREAK SEMI rrN)rZBreakr3r�)rrwrrr �p_jump_statement_2mszCParser.p_jump_statement_2cCstj|j|jd���|d<dS)z! jump_statement  : CONTINUE SEMI rrN)rZContinuer3r�)rrwrrr �p_jump_statement_3qszCParser.p_jump_statement_3cCs4tjt|�dkr|dnd|j|jd���|d<dS)z\ jump_statement  : RETURN expression SEMI
                            | RETURN SEMI
        r�rQNrr)rZReturnrFr3r�)rrwrrr �p_jump_statement_4uszCParser.p_jump_statement_4cCs8|ddkr(tj|j|jd���|d<n|d|d<dS)z, expression_statement : expression_opt SEMI rNr)rZEmptyStatementr3r�)rrwrrr �p_expression_statement{szCParser.p_expression_statementcCsjt|�dkr|d|d<nLt|dtj�sFtj|dg|dj�|d<|djj|d�|d|d<dS)zn expression  : assignment_expression
                        | expression COMMA assignment_expression
        rQrrr�N)rFr9r�ExprListr.r�r&)rrwrrr �p_expression�szCParser.p_expressioncCs(tj|dg|j|jd��d�|d<dS)z typedef_name : TYPEID r)r.rN)rrEr3r�)rrwrrr �p_typedef_name�szCParser.p_typedef_namecCsDt|�dkr|d|d<n&tj|d|d|d|dj�|d<dS)z� assignment_expression   : conditional_expression
                                    | unary_expression assignment_operator assignment_expression
        rQrrr�N)rFrZ
Assignmentr.)rrwrrr �p_assignment_expression�szCParser.p_assignment_expressioncCs|d|d<dS)a� assignment_operator : EQUALS
                                | XOREQUAL
                                | TIMESEQUAL
                                | DIVEQUAL
                                | MODEQUAL
                                | PLUSEQUAL
                                | MINUSEQUAL
                                | LSHIFTEQUAL
                                | RSHIFTEQUAL
                                | ANDEQUAL
                                | OREQUAL
        rrNr)rrwrrr �p_assignment_operator�s
zCParser.p_assignment_operatorcCs|d|d<dS)z. constant_expression : conditional_expression rrNr)rrwrrr �p_constant_expression�szCParser.p_constant_expressioncCsDt|�dkr|d|d<n&tj|d|d|d|dj�|d<dS)z� conditional_expression  : binary_expression
                                    | binary_expression CONDOP expression COLON conditional_expression
        rQrrr�r�N)rFrZ	TernaryOpr.)rrwrrr �p_conditional_expression�sz CParser.p_conditional_expressioncCsDt|�dkr|d|d<n&tj|d|d|d|dj�|d<dS)ak binary_expression   : cast_expression
                                | binary_expression TIMES binary_expression
                                | binary_expression DIVIDE binary_expression
                                | binary_expression MOD binary_expression
                                | binary_expression PLUS binary_expression
                                | binary_expression MINUS binary_expression
                                | binary_expression RSHIFT binary_expression
                                | binary_expression LSHIFT binary_expression
                                | binary_expression LT binary_expression
                                | binary_expression LE binary_expression
                                | binary_expression GE binary_expression
                                | binary_expression GT binary_expression
                                | binary_expression EQ binary_expression
                                | binary_expression NE binary_expression
                                | binary_expression AND binary_expression
                                | binary_expression OR binary_expression
                                | binary_expression XOR binary_expression
                                | binary_expression LAND binary_expression
                                | binary_expression LOR binary_expression
        rQrrr�N)rFrZBinaryOpr.)rrwrrr �p_binary_expression�szCParser.p_binary_expressioncCs|d|d<dS)z$ cast_expression : unary_expression rrNr)rrwrrr �p_cast_expression_1�szCParser.p_cast_expression_1cCs*tj|d|d|j|jd���|d<dS)z; cast_expression : LPAREN type_name RPAREN cast_expression rQr�rrN)rZCastr3r�)rrwrrr �p_cast_expression_2�szCParser.p_cast_expression_2cCs|d|d<dS)z* unary_expression    : postfix_expression rrNr)rrwrrr �p_unary_expression_1�szCParser.p_unary_expression_1cCs$tj|d|d|dj�|d<dS)z� unary_expression    : PLUSPLUS unary_expression
                                | MINUSMINUS unary_expression
                                | unary_operator cast_expression
        rrQrN)r�UnaryOpr.)rrwrrr �p_unary_expression_2�szCParser.p_unary_expression_2cCs>tj|dt|�dkr|dn|d|j|jd���|d<dS)zx unary_expression    : SIZEOF unary_expression
                                | SIZEOF LPAREN type_name RPAREN
        rr�rQrN)rr�rFr3r�)rrwrrr �p_unary_expression_3�szCParser.p_unary_expression_3cCs|d|d<dS)z� unary_operator  : AND
                            | TIMES
                            | PLUS
                            | MINUS
                            | NOT
                            | LNOT
        rrNr)rrwrrr �p_unary_operator�szCParser.p_unary_operatorcCs|d|d<dS)z* postfix_expression  : primary_expression rrNr)rrwrrr �p_postfix_expression_1�szCParser.p_postfix_expression_1cCs$tj|d|d|dj�|d<dS)zG postfix_expression  : postfix_expression LBRACKET expression RBRACKET rr�rN)rZArrayRefr.)rrwrrr �p_postfix_expression_2szCParser.p_postfix_expression_2cCs4tj|dt|�dkr|dnd|dj�|d<dS)z� postfix_expression  : postfix_expression LPAREN argument_expression_list RPAREN
                                | postfix_expression LPAREN RPAREN
        rr�r�Nr)r�FuncCallrFr.)rrwrrr �p_postfix_expression_3szCParser.p_postfix_expression_3cCsBtj|d|j|jd���}tj|d|d||dj�|d<dS)z� postfix_expression  : postfix_expression PERIOD ID
                                | postfix_expression PERIOD TYPEID
                                | postfix_expression ARROW ID
                                | postfix_expression ARROW TYPEID
        r�rrQrN)rr�r3r�Z	StructRefr.)rrwZfieldrrr �p_postfix_expression_4szCParser.p_postfix_expression_4cCs(tjd|d|d|dj�|d<dS)z{ postfix_expression  : postfix_expression PLUSPLUS
                                | postfix_expression MINUSMINUS
        rwrQrrN)rr�r.)rrwrrr �p_postfix_expression_5szCParser.p_postfix_expression_5cCstj|d|d�|d<dS)z� postfix_expression  : LPAREN type_name RPAREN brace_open initializer_list brace_close
                                | LPAREN type_name RPAREN brace_open initializer_list COMMA brace_close
        rQr�rN)rZCompoundLiteral)rrwrrr �p_postfix_expression_6szCParser.p_postfix_expression_6cCs|d|d<dS)z" primary_expression  : identifier rrNr)rrwrrr �p_primary_expression_1 szCParser.p_primary_expression_1cCs|d|d<dS)z  primary_expression  : constant rrNr)rrwrrr �p_primary_expression_2$szCParser.p_primary_expression_2cCs|d|d<dS)zp primary_expression  : unified_string_literal
                                | unified_wstring_literal
        rrNr)rrwrrr �p_primary_expression_3(szCParser.p_primary_expression_3cCs|d|d<dS)z0 primary_expression  : LPAREN expression RPAREN rQrNr)rrwrrr �p_primary_expression_4.szCParser.p_primary_expression_4cCsF|j|jd��}tjtj|d|�tj|d|dg|�|�|d<dS)zQ primary_expression  : OFFSETOF LPAREN type_name COMMA identifier RPAREN
        rr�r�rN)r3r�rrr�r�)rrwr.rrr �p_primary_expression_52szCParser.p_primary_expression_5cCsNt|�dkr*tj|dg|dj�|d<n |djj|d�|d|d<dS)z� argument_expression_list    : assignment_expression
                                        | argument_expression_list COMMA assignment_expression
        rQrrr�N)rFrr�r.r�r&)rrwrrr �p_argument_expression_list:sz"CParser.p_argument_expression_listcCs$tj|d|j|jd���|d<dS)z identifier  : ID rrN)rr�r3r�)rrwrrr �p_identifierDszCParser.p_identifiercCs&tjd|d|j|jd���|d<dS)z� constant    : INT_CONST_DEC
                        | INT_CONST_OCT
                        | INT_CONST_HEX
                        | INT_CONST_BIN
        r>rrN)r�Constantr3r�)rrwrrr �p_constant_1HszCParser.p_constant_1cCs&tjd|d|j|jd���|d<dS)zM constant    : FLOAT_CONST
                        | HEX_FLOAT_CONST
        �floatrrN)rrr3r�)rrwrrr �p_constant_2QszCParser.p_constant_2cCs&tjd|d|j|jd���|d<dS)zH constant    : CHAR_CONST
                        | WCHAR_CONST
        �charrrN)rrr3r�)rrwrrr �p_constant_3XszCParser.p_constant_3cCsht|�dkr0tjd|d|j|jd���|d<n4|djdd�|ddd�|d_|d|d<dS)z~ unified_string_literal  : STRING_LITERAL
                                    | unified_string_literal STRING_LITERAL
        rQ�stringrrNr*)rFrrr3r��value)rrwrrr �p_unified_string_literalds
 (z CParser.p_unified_string_literalcCslt|�dkr0tjd|d|j|jd���|d<n8|djj�dd�|ddd�|d_|d|d<dS)z� unified_wstring_literal : WSTRING_LITERAL
                                    | unified_wstring_literal WSTRING_LITERAL
        rQrrrNr*)rFrrr3r�r�rstrip)rrwrrr �p_unified_wstring_literalos
 ,z!CParser.p_unified_wstring_literalcCs|d|d<dS)z  brace_open  :   LBRACE
        rrNr)rrwrrr �p_brace_openzszCParser.p_brace_opencCs|d|d<dS)z  brace_close :   RBRACE
        rrNr)rrwrrr �
p_brace_closeszCParser.p_brace_closecCsd|d<dS)zempty : Nrr)rrwrrr �p_empty�szCParser.p_emptycCs<|r,|jd|j|j|j|jj|�d��n|jdd�dS)Nz
before: %s)r�r6zAt end of inputr
)r,rr3r�rZfind_tok_column)rrwrrr �p_error�szCParser.p_errorN)TrTrFr
)r
r)F�rdre�rdrf�rdrg�rdrh�rdri�rdrjrk�rdrlrmrnro�rdrprq�rdrrrs�rdrtrurv)
r r!r"r#r$r%r&r'r(r))��__name__�
__module__�__qualname__r!r$r'r)r/r0r2rrrrr7r=rIrOr]r`rcZ
precedencerxryr{r|r}r~rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrr	r
rrr
rrrrrrrrrrrrrrrr r
sFc	

	)7-Y
		;		
	
&		
			

	
		

		
	
	r
�__main__)�reZplyrr
rZc_lexerrZ	plyparserrrrZast_transformsr	r
r*�pprintZtime�sysrrrr �<module>	s,PK�[�AB�	�	/__pycache__/ast_transforms.cpython-36.opt-1.pycnu�[���3

g�wU�
�@s ddlmZdd�Zdd�ZdS)�)�c_astcCs�t|jtj�s|Stjg|jj�}d}xh|jjD]\}t|tjtjf�rj|jj|�t	||j�|jd}q0|dkr�|jj|�q0|j
j|�q0W||_|S)a� The 'case' statements in a 'switch' come out of parsing with one
        child node, so subsequent statements are just tucked to the parent
        Compound. Additionally, consecutive (fall-through) case statements
        come out messy. This is a peculiarity of the C grammar. The following:

            switch (myvar) {
                case 10:
                    k = 10;
                    p = k + 1;
                    return 10;
                case 20:
                case 30:
                    return 20;
                default:
                    break;
            }

        Creates this tree (pseudo-dump):

            Switch
                ID: myvar
                Compound:
                    Case 10:
                        k = 10
                    p = k + 1
                    return 10
                    Case 20:
                        Case 30:
                            return 20
                    Default:
                        break

        The goal of this transform it to fix this mess, turning it into the
        following:

            Switch
                ID: myvar
                Compound:
                    Case 10:
                        k = 10
                        p = k + 1
                        return 10
                    Case 20:
                    Case 30:
                        return 20
                    Default:
                        break

        A fixed AST node is returned. The argument may be modified.
    Nr���)�
isinstanceZstmtrZCompoundZcoordZblock_items�Case�Default�append�_extract_nested_case�stmts)Zswitch_nodeZnew_compoundZ	last_caseZchild�r
�$/usr/lib/python3.6/ast_transforms.py�fix_switch_cases
s4rcCs:t|jdtjtjf�r6|j|jj��t|d|�dS)z� Recursively extract consecutive Case statements that are made nested
        by the parser and add them to the stmts_list.
    �rNr)rr	rrrr�popr)Z	case_nodeZ
stmts_listr
r
rrbsrN)�rrrr
r
r
r�<module>
sUPK�[�>�2UU!__pycache__/lextab.cpython-36.pycnu�[���3

��]N��@s�dZeddddddddd	d
ddd
ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`f`�ZdaZdbZdcddddde�ZdfdgdhdfdidjfdkdMfdldGfdmd(fdgdgdgdgdgdgdgdgdgdnd8fdgdgdgdgdgdgdgdod;fdgdgdgdgdgdgdgdpd_fdgdgdgdgdgdgdgdqdrfdsd9fdgdgdgdgdgdgdgdtd	fdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdud&fdgdgdgdgdgdgdvd4fdgdgdgdgdgdgdwdxfdgdgdgdgdgdgdgdgdgdgdgdgdgdgdydzfdgdgdgdgdgdgdgdgdgdgd{dOfdgdgdgdgdgdgd|d}fdgdgdgdgdgdgdgdgdgdgdgdgdgd~dJfdgdfdgdgdgdgdgdgdgdfdgdEfdgdRfdgd=fdgd.fdgdfdgd0fdgd2fdgd`fdgd#fdgd3fdgdfdgd]fdgdWfdgd-fdgdUfdgdfdgdHfdgdCfdgdfdgdVfdgd\fdgdQfdgdYfdgdZfdgdPfdgd
fdgd6fdgd!fdgdfdgd[fdgdfdgd
fdgdBfdgdfdgd7fdgd>fdgdfdgdfdgdXfdgdSfdgdfdgdfdgdfg�fgddgd�d�fdgdgdgdgdgdgd�d�fdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgd�djfd�d�fgfgd�dgd�djfd�d�fd�d�fdgdgdgdgdgdgd�dJfgfgde�Zd�d�d�de�Zd�d�d�de�ZiZ	dgS)�z3.8ZCONDOPZSIGNEDZXORZDOZLNOT�ELLIPSISZLSHIFTZCASEZ
INT_CONST_DEC�PLUSZPPHASHZDOUBLEZAND�	PLUSEQUALZLBRACKET�ELSE�SEMIZNOTZCONTINUEZCONSTZSTRING_LITERALZENUMZMODZINLINEZFORZLONGZGTZSTRUCT�COMMAZTYPEDEFZRSHIFTZVOIDZRPARENZTYPEIDZANDEQUALZUNSIGNEDZSIZEOFZ
CHAR_CONSTZCHARZFLOAT_CONSTZINTZFLOATZ_BOOLZ_COMPLEXZGEZOREQUALZSTATICZRSHIFTEQUALZEXTERNZ
TIMESEQUALZARROWZWCHAR_CONSTZREGISTERZRBRACKETZDIVIDEZHEX_FLOAT_CONSTZ
INT_CONST_OCTZSWITCHZ
INT_CONST_HEXZDEFAULTZLSHIFTEQUALZEQUALSZBREAKZRESTRICTZVOLATILE�COLONZLPARENZRETURNZLORZOFFSETOF�RBRACEZLEZWHILEZIDZAUTOZSHORT�LBRACEZUNIONZWSTRING_LITERALZPERIODZMODEQUALZPLUSPLUS�MINUSZIFZLANDZ
MINUSEQUALZEQZLTZNE�ORZTIMESZ
MINUSMINUSZDIVEQUALZGOTOZ
INT_CONST_BINZXOREQUAL��Z	inclusiveZ	exclusive)ZINITIALZpplineZpppragmaa�	(?P<t_PPHASH>[ \t]*\#)|(?P<t_NEWLINE>\n+)|(?P<t_LBRACE>\{)|(?P<t_RBRACE>\})|(?P<t_FLOAT_CONST>((((([0-9]*\.[0-9]+)|([0-9]+\.))([eE][-+]?[0-9]+)?)|([0-9]+([eE][-+]?[0-9]+)))[FfLl]?))|(?P<t_HEX_FLOAT_CONST>(0[xX]([0-9a-fA-F]+|((([0-9a-fA-F]+)?\.[0-9a-fA-F]+)|([0-9a-fA-F]+\.)))([pP][+-]?[0-9]+)[FfLl]?))|(?P<t_INT_CONST_HEX>0[xX][0-9a-fA-F]+(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_INT_CONST_BIN>0[bB][01]+(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_BAD_CONST_OCT>0[0-7]*[89])|(?P<t_INT_CONST_OCT>0[0-7]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_INT_CONST_DEC>(0(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|([1-9][0-9]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?))|(?P<t_CHAR_CONST>'([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))')|(?P<t_WCHAR_CONST>L'([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))')|(?P<t_UNMATCHED_QUOTE>('([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*\n)|('([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*$))|(?P<t_BAD_CHAR_CONST>('([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))[^'
]+')|('')|('([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])[^'\n]*'))|(?P<t_WSTRING_LITERAL>L"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_BAD_STRING_LITERAL>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ID>[a-zA-Z_$][0-9a-zA-Z_$]*)|(?P<t_STRING_LITERAL>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ELLIPSIS>\.\.\.)|(?P<t_LOR>\|\|)|(?P<t_PLUSPLUS>\+\+)|(?P<t_LSHIFTEQUAL><<=)|(?P<t_OREQUAL>\|=)|(?P<t_PLUSEQUAL>\+=)|(?P<t_RSHIFTEQUAL>>>=)|(?P<t_TIMESEQUAL>\*=)|(?P<t_XOREQUAL>\^=)|(?P<t_ANDEQUAL>&=)|(?P<t_ARROW>->)|(?P<t_CONDOP>\?)|(?P<t_DIVEQUAL>/=)|(?P<t_EQ>==)|(?P<t_GE>>=)|(?P<t_LAND>&&)|(?P<t_LBRACKET>\[)|(?P<t_LE><=)|(?P<t_LPAREN>\()|(?P<t_LSHIFT><<)|(?P<t_MINUSEQUAL>-=)|(?P<t_MINUSMINUS>--)|(?P<t_MODEQUAL>%=)|(?P<t_NE>!=)|(?P<t_OR>\|)|(?P<t_PERIOD>\.)|(?P<t_PLUS>\+)|(?P<t_RBRACKET>\])|(?P<t_RPAREN>\))|(?P<t_RSHIFT>>>)|(?P<t_TIMES>\*)|(?P<t_XOR>\^)|(?P<t_AND>&)|(?P<t_COLON>:)|(?P<t_COMMA>,)|(?P<t_DIVIDE>/)|(?P<t_EQUALS>=)|(?P<t_GT>>)|(?P<t_LNOT>!)|(?P<t_LT><)|(?P<t_MINUS>-)|(?P<t_MOD>%)|(?P<t_NOT>~)|(?P<t_SEMI>;)NZt_PPHASHZ	t_NEWLINE�NEWLINEZt_LBRACEZt_RBRACEZ
t_FLOAT_CONSTZt_HEX_FLOAT_CONSTZt_INT_CONST_HEXZt_INT_CONST_BINZt_BAD_CONST_OCTZ
BAD_CONST_OCTZt_INT_CONST_OCTZt_INT_CONST_DECZt_CHAR_CONSTZ
t_WCHAR_CONSTZt_UNMATCHED_QUOTEZUNMATCHED_QUOTEZt_BAD_CHAR_CONSTZBAD_CHAR_CONSTZt_WSTRING_LITERALZt_BAD_STRING_LITERALZBAD_STRING_LITERALZt_IDaA(?P<t_ppline_FILENAME>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ppline_LINE_NUMBER>(0(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|([1-9][0-9]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?))|(?P<t_ppline_NEWLINE>\n)|(?P<t_ppline_PPLINE>line)Zt_ppline_FILENAMEZFILENAMEZt_ppline_LINE_NUMBERZLINE_NUMBERZt_ppline_NEWLINEZt_ppline_PPLINEZPPLINEz�(?P<t_pppragma_NEWLINE>\n)|(?P<t_pppragma_PPPRAGMA>pragma)|(?P<t_pppragma_STR>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_pppragma_ID>[a-zA-Z_$][0-9a-zA-Z_$]*)Zt_pppragma_NEWLINEZt_pppragma_PPPRAGMAZPPPRAGMAZt_pppragma_STRZSTRZ
t_pppragma_IDz 	z$ 	<>.-{}();=+-*/$%@&^~!?:,0123456789Zt_errorZt_ppline_errorZt_pppragma_error)
Z_tabversion�setZ
_lextokensZ_lexreflagsZ_lexliteralsZ
_lexstateinfoZ_lexstatereZ_lexstateignoreZ_lexstateerrorfZ
_lexstateeoff�rr�/usr/lib/python3.6/lextab.py�<module>s����PK�[�cx�SS_build_tables.pynu�[���#-----------------------------------------------------------------
# pycparser: _build_tables.py
#
# A dummy for generating the lexing/parsing tables and and
# compiling them into .pyc for faster execution in optimized mode.
# Also generates AST code from the configuration file.
# Should be called from the pycparser directory.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------

# Generate c_ast.py
from _ast_gen import ASTCodeGenerator
ast_gen = ASTCodeGenerator('_c_ast.cfg')
ast_gen.generate(open('c_ast.py', 'w'))

import sys
sys.path[0:0] = ['.', '..']
from pycparser import c_parser

# Generates the tables
#
c_parser.CParser(
    lex_optimize=True,
    yacc_debug=False,
    yacc_optimize=True)

# Load to compile into .pyc
#
import lextab
import yacctab
import c_ast
PK�[8KF4U�U�
yacctab.pynu�[���
# yacctab.py
# This file is automatically generated. Do not edit.
_tabversion = '3.8'

_lr_method = 'LALR'

_lr_signature = '0B26D831EE3ADD67934989B5D61F8ACA'
    
_lr_action_items = {'$end':([0,1,2,3,4,5,6,7,8,12,50,67,90,199,285,302,],[-263,0,-29,-30,-31,-33,-34,-35,-36,-37,-32,-47,-38,-39,-262,-159,]),'SEMI':([0,2,4,5,6,7,8,10,11,12,13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,55,56,57,58,59,60,63,65,66,67,70,71,72,73,74,75,76,77,79,80,81,82,83,84,86,87,88,90,91,93,94,98,111,112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,143,144,157,158,159,169,170,171,173,174,175,176,177,178,179,180,181,182,183,184,187,189,192,195,196,197,198,199,200,201,202,203,209,210,246,247,248,250,251,252,254,259,260,278,279,283,285,289,291,292,293,294,295,296,298,299,300,301,302,303,304,305,307,308,309,315,316,317,318,319,320,323,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,360,367,368,369,370,371,375,376,379,380,385,386,387,388,390,394,395,396,397,399,400,404,406,408,412,413,414,415,416,417,418,419,421,422,423,428,429,430,432,434,436,437,438,441,442,443,445,446,447,448,],[8,8,-31,-33,-34,-35,-36,-263,67,-37,-111,-178,-263,-263,-263,-263,-114,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,-263,-81,-46,-145,-17,-18,-77,-80,-147,-47,-112,-113,-50,-9,-10,-51,-52,-53,-122,-27,-28,-124,-101,-102,-261,-85,-86,-38,-263,-81,-145,-146,-179,-214,-193,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-79,-134,-115,-123,-125,-263,-263,-263,-13,-263,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,309,-14,-263,317,318,320,-176,-39,-82,-78,-148,-154,-150,-152,-236,-237,-217,-218,-219,-214,-220,-258,-260,-120,-121,-103,-262,-87,381,382,-25,-26,-96,-98,-83,-23,-24,-84,-159,-158,-13,-263,-192,-263,-175,-263,396,-171,-172,397,-174,-180,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,-231,-232,-233,-234,-235,-244,-135,-149,-151,-153,-116,-119,-104,-105,-88,-89,-100,-160,-263,-162,-177,421,-263,-170,-173,-229,-230,-221,-215,-136,-117,-118,-97,-99,-161,-263,-263,-263,-263,433,-194,-163,-165,-166,439,-238,-245,-263,443,-239,-164,-167,-263,-263,-169,-168,]),'PPHASH':([0,2,4,5,6,7,8,12,50,67,90,199,285,302,],[12,12,-31,-33,-34,-35,-36,-37,-32,-47,-38,-39,-262,-159,]),'ID':([0,2,4,5,6,7,8,10,12,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,55,58,61,62,64,67,68,69,72,73,74,75,76,77,79,80,81,82,83,84,85,86,87,88,90,91,94,95,97,99,106,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,158,159,160,161,169,170,171,174,175,176,177,178,179,180,181,182,183,185,192,194,197,199,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,249,253,255,264,265,266,269,270,272,275,276,277,280,283,284,285,286,289,297,298,299,300,301,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,375,376,379,380,383,384,386,387,388,395,396,397,398,401,403,405,407,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[20,20,-31,-33,-34,-35,-36,20,-37,20,-178,-263,-263,-263,-263,20,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,83,87,-90,-91,-32,20,20,20,125,125,-47,-263,125,-50,-9,-10,-51,-52,-53,-122,-27,-28,-124,-101,-102,164,-261,-85,-86,-38,184,20,20,125,20,20,-223,125,125,125,125,125,-224,-225,-222,-226,-227,-263,-223,125,125,-263,-28,-123,-125,164,164,20,-263,-263,184,-157,-155,-156,-40,-41,-42,-43,-44,-45,125,184,316,125,-39,125,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,347,349,125,125,125,-11,125,-12,125,125,-223,-223,125,125,125,-103,164,-262,125,-87,125,-83,-23,-24,-84,-159,-158,184,184,-175,125,125,125,125,125,-171,-172,-174,125,-263,-139,-104,-105,-88,-89,20,125,-160,184,-162,125,-170,-173,125,125,125,-263,125,125,-11,-161,184,184,184,125,125,-163,-165,-166,125,-263,184,125,-164,-167,184,184,-169,-168,]),'LPAREN':([0,2,4,5,6,7,8,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,55,58,61,62,64,66,67,68,70,72,73,74,75,76,77,79,80,81,82,83,84,86,87,88,90,91,94,95,97,98,99,106,108,114,115,116,117,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,145,146,147,149,150,151,157,158,159,169,170,171,174,175,176,177,178,179,180,181,182,183,184,185,188,190,191,192,193,197,199,202,203,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,246,247,249,253,255,258,259,260,264,265,266,269,272,275,276,277,278,279,283,285,286,289,297,298,299,300,301,302,303,305,308,309,310,311,312,313,315,317,318,320,345,347,348,349,350,354,355,357,358,361,363,367,368,369,370,371,375,376,379,380,383,384,386,387,388,393,395,396,397,398,399,400,401,403,405,409,410,412,413,416,417,418,419,420,421,428,429,430,433,434,435,436,437,439,441,442,443,445,446,447,448,],[21,21,-31,-33,-34,-35,-36,61,-37,69,21,-178,-263,-263,-263,-263,-114,21,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,95,61,61,120,120,148,-47,-263,69,-50,-9,-10,-51,-52,-53,-122,-27,-28,-124,-101,-102,-261,-85,-86,-38,120,95,95,120,148,21,61,-223,243,249,249,253,255,120,-224,-225,-222,-228,-248,-226,-227,-240,-241,-242,-243,261,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-223,120,120,-263,-28,-115,-123,-125,95,-263,-263,120,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,253,310,312,313,120,315,120,-39,-148,-154,-150,-152,120,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,120,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,120,120,-236,-237,120,120,120,358,-258,-260,-11,120,-12,253,-223,-223,120,120,-120,-121,-103,-262,253,-87,253,-83,-23,-24,-84,-159,-158,120,120,-175,120,120,120,120,120,-171,-172,-174,-231,-232,-233,-234,-235,253,-244,358,358,-263,-139,-149,-151,-153,-116,-119,-104,-105,-88,-89,21,253,-160,120,-162,420,120,-170,-173,253,-229,-230,120,253,-263,120,-11,-117,-118,-161,120,120,120,120,120,-163,-165,-166,120,-238,-263,-245,120,120,-239,-164,-167,120,120,-169,-168,]),'TIMES':([0,2,4,5,6,7,8,10,12,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,55,61,62,64,67,68,72,73,74,75,76,77,79,80,81,82,83,84,86,87,88,90,91,95,97,99,106,108,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,146,147,149,150,151,159,169,170,171,174,175,176,177,178,179,180,181,182,183,184,185,192,197,199,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,246,247,248,249,250,251,252,253,254,255,258,259,260,264,265,266,269,272,275,276,277,283,285,286,289,297,298,299,300,301,302,303,305,308,309,310,311,312,313,315,317,318,320,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,354,355,358,361,363,375,376,379,380,383,384,386,387,388,395,396,397,398,399,400,401,403,404,405,406,409,410,416,417,418,419,420,421,428,429,430,433,434,435,436,437,439,441,442,443,445,446,447,448,],[23,23,-31,-33,-34,-35,-36,23,-37,-178,-263,-263,-263,-263,23,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,23,23,108,146,-47,-263,-50,-9,-10,-51,-52,-53,23,-27,-28,-124,-101,-102,-261,-85,-86,-38,146,23,146,23,23,-223,-214,224,-216,146,146,146,-195,146,146,-224,-225,-222,-228,-248,-226,-227,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-223,272,275,-263,-28,-125,23,-263,-263,146,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,146,146,146,-39,146,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,-236,-237,-217,146,-218,-219,-214,146,-220,146,23,-258,-260,-11,146,-12,146,-223,-223,146,146,-103,-262,146,-87,146,-83,-23,-24,-84,-159,-158,146,146,-175,146,146,146,146,146,-171,-172,-174,-196,-197,-198,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-231,-232,-233,-234,-235,146,-244,23,-263,-139,-104,-105,-88,-89,23,146,-160,146,-162,146,-170,-173,146,-229,-230,146,146,-221,-263,-215,146,-11,-161,146,146,146,146,146,-163,-165,-166,146,-238,-263,-245,146,146,-239,-164,-167,146,146,-169,-168,]),'CONST':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,68,69,70,71,81,82,83,84,86,87,88,89,90,91,92,95,120,148,150,151,157,159,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[24,24,-31,-33,-34,-35,-36,24,-37,-111,-178,24,24,24,24,-114,-56,24,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,24,-48,24,24,-47,24,24,-112,-113,24,-124,-101,-102,-261,-85,-86,24,-38,24,-49,24,24,24,24,24,-115,-125,24,24,24,-92,24,24,24,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,24,24,24,24,24,-120,-121,-103,-262,24,24,-87,-93,-159,-158,-175,24,-171,-172,-174,24,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'RESTRICT':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,68,69,70,71,81,82,83,84,86,87,88,89,90,91,92,95,120,148,150,151,157,159,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[25,25,-31,-33,-34,-35,-36,25,-37,-111,-178,25,25,25,25,-114,-56,25,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,25,-48,25,25,-47,25,25,-112,-113,25,-124,-101,-102,-261,-85,-86,25,-38,25,-49,25,25,25,25,25,-115,-125,25,25,25,-92,25,25,25,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,25,25,25,25,25,-120,-121,-103,-262,25,25,-87,-93,-159,-158,-175,25,-171,-172,-174,25,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'VOLATILE':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,68,69,70,71,81,82,83,84,86,87,88,89,90,91,92,95,120,148,150,151,157,159,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[26,26,-31,-33,-34,-35,-36,26,-37,-111,-178,26,26,26,26,-114,-56,26,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,26,-48,26,26,-47,26,26,-112,-113,26,-124,-101,-102,-261,-85,-86,26,-38,26,-49,26,26,26,26,26,-115,-125,26,26,26,-92,26,26,26,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,26,26,26,26,26,-120,-121,-103,-262,26,26,-87,-93,-159,-158,-175,26,-171,-172,-174,26,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'VOID':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[27,27,-31,-33,-34,-35,-36,27,-37,-111,-178,27,27,27,27,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,27,-48,27,27,-47,27,-112,-113,-101,-102,-261,-85,-86,27,-38,27,-49,27,27,27,-115,27,27,27,-92,27,27,27,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,27,27,27,27,27,-120,-121,-103,-262,27,27,-87,-93,-159,-158,-175,27,-171,-172,-174,27,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'_BOOL':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[28,28,-31,-33,-34,-35,-36,28,-37,-111,-178,28,28,28,28,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,28,-48,28,28,-47,28,-112,-113,-101,-102,-261,-85,-86,28,-38,28,-49,28,28,28,-115,28,28,28,-92,28,28,28,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,28,28,28,28,28,-120,-121,-103,-262,28,28,-87,-93,-159,-158,-175,28,-171,-172,-174,28,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'CHAR':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[29,29,-31,-33,-34,-35,-36,29,-37,-111,-178,29,29,29,29,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,29,-48,29,29,-47,29,-112,-113,-101,-102,-261,-85,-86,29,-38,29,-49,29,29,29,-115,29,29,29,-92,29,29,29,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,29,29,29,29,29,-120,-121,-103,-262,29,29,-87,-93,-159,-158,-175,29,-171,-172,-174,29,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'SHORT':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[30,30,-31,-33,-34,-35,-36,30,-37,-111,-178,30,30,30,30,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,30,-48,30,30,-47,30,-112,-113,-101,-102,-261,-85,-86,30,-38,30,-49,30,30,30,-115,30,30,30,-92,30,30,30,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,30,30,30,30,30,-120,-121,-103,-262,30,30,-87,-93,-159,-158,-175,30,-171,-172,-174,30,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'INT':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[31,31,-31,-33,-34,-35,-36,31,-37,-111,-178,31,31,31,31,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,31,-48,31,31,-47,31,-112,-113,-101,-102,-261,-85,-86,31,-38,31,-49,31,31,31,-115,31,31,31,-92,31,31,31,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,31,31,31,31,31,-120,-121,-103,-262,31,31,-87,-93,-159,-158,-175,31,-171,-172,-174,31,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'LONG':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[32,32,-31,-33,-34,-35,-36,32,-37,-111,-178,32,32,32,32,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,32,-48,32,32,-47,32,-112,-113,-101,-102,-261,-85,-86,32,-38,32,-49,32,32,32,-115,32,32,32,-92,32,32,32,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,32,32,32,32,32,-120,-121,-103,-262,32,32,-87,-93,-159,-158,-175,32,-171,-172,-174,32,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'FLOAT':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[33,33,-31,-33,-34,-35,-36,33,-37,-111,-178,33,33,33,33,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,33,-48,33,33,-47,33,-112,-113,-101,-102,-261,-85,-86,33,-38,33,-49,33,33,33,-115,33,33,33,-92,33,33,33,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,33,33,33,33,33,-120,-121,-103,-262,33,33,-87,-93,-159,-158,-175,33,-171,-172,-174,33,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'DOUBLE':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[34,34,-31,-33,-34,-35,-36,34,-37,-111,-178,34,34,34,34,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,34,-48,34,34,-47,34,-112,-113,-101,-102,-261,-85,-86,34,-38,34,-49,34,34,34,-115,34,34,34,-92,34,34,34,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,34,34,34,34,34,-120,-121,-103,-262,34,34,-87,-93,-159,-158,-175,34,-171,-172,-174,34,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'_COMPLEX':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[35,35,-31,-33,-34,-35,-36,35,-37,-111,-178,35,35,35,35,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,35,-48,35,35,-47,35,-112,-113,-101,-102,-261,-85,-86,35,-38,35,-49,35,35,35,-115,35,35,35,-92,35,35,35,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,35,35,35,35,35,-120,-121,-103,-262,35,35,-87,-93,-159,-158,-175,35,-171,-172,-174,35,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'SIGNED':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[36,36,-31,-33,-34,-35,-36,36,-37,-111,-178,36,36,36,36,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,36,-48,36,36,-47,36,-112,-113,-101,-102,-261,-85,-86,36,-38,36,-49,36,36,36,-115,36,36,36,-92,36,36,36,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,36,36,36,36,36,-120,-121,-103,-262,36,36,-87,-93,-159,-158,-175,36,-171,-172,-174,36,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'UNSIGNED':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[37,37,-31,-33,-34,-35,-36,37,-37,-111,-178,37,37,37,37,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,37,-48,37,37,-47,37,-112,-113,-101,-102,-261,-85,-86,37,-38,37,-49,37,37,37,-115,37,37,37,-92,37,37,37,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,37,37,37,37,37,-120,-121,-103,-262,37,37,-87,-93,-159,-158,-175,37,-171,-172,-174,37,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'AUTO':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,90,91,92,95,148,157,174,175,176,177,178,179,180,181,182,183,199,204,278,279,283,285,289,302,303,309,315,317,318,320,358,370,371,375,376,379,380,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[41,41,-31,-33,-34,-35,-36,41,-37,-111,-178,41,41,41,41,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,41,-48,41,41,-47,41,-112,-113,-101,-102,-261,-85,-86,-38,41,-49,41,41,-115,41,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,41,-120,-121,-103,-262,-87,-159,-158,-175,41,-171,-172,-174,41,-116,-119,-104,-105,-88,-89,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'REGISTER':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,90,91,92,95,148,157,174,175,176,177,178,179,180,181,182,183,199,204,278,279,283,285,289,302,303,309,315,317,318,320,358,370,371,375,376,379,380,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[42,42,-31,-33,-34,-35,-36,42,-37,-111,-178,42,42,42,42,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,42,-48,42,42,-47,42,-112,-113,-101,-102,-261,-85,-86,-38,42,-49,42,42,-115,42,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,42,-120,-121,-103,-262,-87,-159,-158,-175,42,-171,-172,-174,42,-116,-119,-104,-105,-88,-89,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'STATIC':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,68,69,70,71,82,83,84,86,87,88,90,91,92,95,148,151,157,159,174,175,176,177,178,179,180,181,182,183,199,204,278,279,283,285,289,302,303,309,315,317,318,320,358,370,371,375,376,379,380,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[22,22,-31,-33,-34,-35,-36,22,-37,-111,-178,22,22,22,22,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,22,-48,22,22,-47,150,22,-112,-113,-124,-101,-102,-261,-85,-86,-38,22,-49,22,22,277,-115,-125,22,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,22,-120,-121,-103,-262,-87,-159,-158,-175,22,-171,-172,-174,22,-116,-119,-104,-105,-88,-89,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'EXTERN':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,90,91,92,95,148,157,174,175,176,177,178,179,180,181,182,183,199,204,278,279,283,285,289,302,303,309,315,317,318,320,358,370,371,375,376,379,380,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[43,43,-31,-33,-34,-35,-36,43,-37,-111,-178,43,43,43,43,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,43,-48,43,43,-47,43,-112,-113,-101,-102,-261,-85,-86,-38,43,-49,43,43,-115,43,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,43,-120,-121,-103,-262,-87,-159,-158,-175,43,-171,-172,-174,43,-116,-119,-104,-105,-88,-89,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'TYPEDEF':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,90,91,92,95,148,157,174,175,176,177,178,179,180,181,182,183,199,204,278,279,283,285,289,302,303,309,315,317,318,320,358,370,371,375,376,379,380,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[44,44,-31,-33,-34,-35,-36,44,-37,-111,-178,44,44,44,44,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,44,-48,44,44,-47,44,-112,-113,-101,-102,-261,-85,-86,-38,44,-49,44,44,-115,44,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,44,-120,-121,-103,-262,-87,-159,-158,-175,44,-171,-172,-174,44,-116,-119,-104,-105,-88,-89,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'INLINE':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,90,91,92,95,148,157,174,175,176,177,178,179,180,181,182,183,199,204,278,279,283,285,289,302,303,309,315,317,318,320,358,370,371,375,376,379,380,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[45,45,-31,-33,-34,-35,-36,45,-37,-111,-178,45,45,45,45,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,45,-48,45,45,-47,45,-112,-113,-101,-102,-261,-85,-86,-38,45,-49,45,45,-115,45,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,45,-120,-121,-103,-262,-87,-159,-158,-175,45,-171,-172,-174,45,-116,-119,-104,-105,-88,-89,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'TYPEID':([0,2,4,5,6,7,8,9,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,53,54,56,58,61,67,69,70,71,79,80,81,82,83,84,86,87,88,89,90,91,92,94,95,120,148,157,158,159,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,244,245,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[15,15,-31,-33,-34,-35,-36,15,-37,-111,71,-178,15,15,15,15,-114,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,84,88,-90,-91,-32,15,-48,15,71,15,-47,15,-112,-113,-122,-27,-28,-124,-101,-102,-261,-85,-86,15,-38,15,-49,71,15,15,15,-115,-123,-125,15,15,15,-92,15,15,15,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,15,348,350,15,15,15,15,-120,-121,-103,-262,15,15,-87,-93,-159,-158,-175,15,-171,-172,-174,15,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'ENUM':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[46,46,-31,-33,-34,-35,-36,46,-37,-111,-178,46,46,46,46,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,46,-48,46,46,-47,46,-112,-113,-101,-102,-261,-85,-86,46,-38,46,-49,46,46,46,-115,46,46,46,-92,46,46,46,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,46,46,46,46,46,-120,-121,-103,-262,46,46,-87,-93,-159,-158,-175,46,-171,-172,-174,46,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'STRUCT':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[48,48,-31,-33,-34,-35,-36,48,-37,-111,-178,48,48,48,48,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,48,-48,48,48,-47,48,-112,-113,-101,-102,-261,-85,-86,48,-38,48,-49,48,48,48,-115,48,48,48,-92,48,48,48,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,48,48,48,48,48,-120,-121,-103,-262,48,48,-87,-93,-159,-158,-175,48,-171,-172,-174,48,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'UNION':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[49,49,-31,-33,-34,-35,-36,49,-37,-111,-178,49,49,49,49,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,49,-48,49,49,-47,49,-112,-113,-101,-102,-261,-85,-86,49,-38,49,-49,49,49,49,-115,49,49,49,-92,49,49,49,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,49,49,49,49,49,-120,-121,-103,-262,49,49,-87,-93,-159,-158,-175,49,-171,-172,-174,49,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'LBRACE':([9,13,20,46,47,48,49,51,52,53,54,56,64,67,70,71,83,84,86,87,88,91,92,96,97,145,157,174,175,176,177,178,179,180,181,182,183,192,264,265,266,278,279,285,302,303,305,308,309,317,318,320,354,361,363,370,371,386,387,388,396,397,402,403,404,405,409,410,412,413,416,417,418,419,428,429,430,435,437,442,443,445,446,447,448,],[-263,-111,-114,86,86,-90,-91,86,-7,-8,-48,-263,86,-47,-112,-113,86,86,-261,86,86,86,-49,86,86,-263,-115,86,-157,-155,-156,-40,-41,-42,-43,-44,-45,86,-11,86,-12,-120,-121,-262,-159,-158,86,86,-175,-171,-172,-174,86,-263,-139,-116,-119,-160,86,-162,-170,-173,86,86,86,-263,86,-11,-117,-118,-161,86,86,86,-163,-165,-166,-263,86,-164,-167,86,86,-169,-168,]),'EQUALS':([10,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,55,56,70,71,72,73,74,75,76,77,83,84,87,88,93,112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,157,164,184,246,247,248,250,251,252,254,259,260,267,268,278,279,283,285,289,345,347,348,349,350,355,364,366,370,371,375,376,379,380,399,400,404,406,411,412,413,434,436,441,],[64,-111,-178,-263,-263,-263,-263,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,64,97,-112,-113,-50,-9,-10,-51,-52,-53,-101,-102,-85,-86,97,212,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-115,286,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,363,-140,-120,-121,-103,-262,-87,-231,-232,-233,-234,-235,-244,-141,-143,-116,-119,-104,-105,-88,-89,-229,-230,-221,-215,-142,-117,-118,-238,-245,-239,]),'LBRACKET':([10,13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,55,58,61,66,70,72,73,74,75,76,77,79,80,81,82,83,84,86,87,88,94,95,98,106,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,157,158,159,169,170,171,184,202,203,209,210,246,247,258,259,260,267,268,278,279,283,285,289,298,299,300,301,345,347,348,349,350,355,357,358,361,364,366,367,368,369,370,371,375,376,379,380,399,400,405,411,412,413,434,435,436,441,],[62,68,-178,-263,-263,-263,-263,-114,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,62,62,62,147,68,-50,-9,-10,-51,-52,-53,-122,-27,-28,-124,-101,-102,-261,-85,-86,62,62,147,62,242,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,269,-115,-123,-125,62,-263,-263,-248,-148,-154,-150,-152,-236,-237,62,-258,-260,269,-140,-120,-121,-103,-262,-87,-83,-23,-24,-84,-231,-232,-233,-234,-235,-244,62,62,269,-141,-143,-149,-151,-153,-116,-119,-104,-105,-88,-89,-229,-230,269,-142,-117,-118,-238,269,-245,-239,]),'COMMA':([13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,56,58,60,63,65,66,70,71,72,73,74,75,76,77,79,80,81,82,83,84,87,88,93,94,98,104,105,106,111,112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,143,144,155,156,157,158,159,162,163,164,170,171,184,189,198,200,201,202,203,205,206,207,208,209,210,246,247,248,250,251,252,254,257,258,259,260,263,278,279,281,282,283,284,285,289,294,295,296,298,299,300,301,307,319,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,355,356,357,359,360,362,367,368,369,370,371,374,375,376,377,378,379,380,385,389,390,391,392,399,400,404,406,408,412,413,414,415,423,424,425,427,431,434,436,441,],[-111,-178,-263,-263,-263,-263,-114,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-81,-145,99,-77,-80,-147,-112,-113,-50,-9,-10,-51,-52,-53,-122,-27,-28,-124,-101,-102,-85,-86,-81,-145,-146,204,-128,-263,-179,-214,-193,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-79,-134,280,-132,-115,-123,-125,284,-106,-109,-263,-263,-248,311,-176,-82,-78,-148,-154,-130,-131,-1,-2,-150,-152,-236,-237,-217,-218,-219,-214,-220,311,-263,-258,-260,361,-120,-121,284,284,-103,-107,-262,-87,383,-96,-98,-83,-23,-24,-84,-192,311,-129,-180,311,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,311,401,-231,-246,-232,-233,-234,-235,-244,-144,-145,407,-135,-137,-149,-151,-153,-116,-119,-133,-104,-105,-108,-110,-88,-89,-100,311,-177,311,311,-229,-230,-221,-215,-136,-117,-118,-97,-99,-194,-247,435,-138,311,-238,-245,-239,]),'RPAREN':([13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,58,61,66,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,87,88,94,95,98,100,101,102,103,104,105,106,111,112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,148,152,153,154,155,156,157,158,159,170,171,189,198,202,203,205,206,207,208,209,210,243,246,247,248,250,251,252,254,256,257,258,259,260,273,278,279,283,285,289,298,299,300,301,304,321,322,323,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,344,345,346,347,348,349,350,351,352,353,355,356,357,358,367,368,369,370,371,374,375,376,379,380,389,390,391,392,399,400,404,406,412,413,423,424,426,431,433,434,436,439,440,441,444,],[-111,-178,-263,-263,-263,-263,-114,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-145,-263,-147,-263,-112,-113,-50,-9,-10,-51,-52,-53,157,-122,-27,-28,-124,-101,-102,-85,-86,-145,-263,-146,202,203,-21,-22,-126,-128,-263,-179,-214,-193,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,278,279,-15,-16,-132,-115,-123,-125,-263,-263,-14,-176,-148,-154,-130,-131,-1,-2,-150,-152,345,-236,-237,-217,-218,-219,-214,-220,354,355,-263,-258,-260,369,-120,-121,-103,-262,-87,-83,-23,-24,-84,-13,-127,-129,-180,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,400,-231,-246,-232,-233,-234,-235,402,403,404,-244,-144,-145,-263,-149,-151,-153,-116,-119,-133,-104,-105,-88,-89,417,-177,418,419,-229,-230,-221,-215,-117,-118,-194,-247,436,438,-263,-238,-245,-263,445,-239,446,]),'COLON':([13,15,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,70,71,83,84,87,88,111,112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,157,169,170,171,184,186,198,246,247,248,250,251,252,254,259,260,278,279,283,285,289,296,298,299,300,301,306,307,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,370,371,375,376,379,380,383,390,399,400,404,406,412,413,423,434,436,441,],[-111,-178,-114,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-112,-113,-101,-102,-85,-86,-179,-214,-193,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-115,297,-263,-263,305,308,-176,-236,-237,-217,-218,-219,-214,-220,-258,-260,-120,-121,-103,-262,-87,384,-83,-23,-24,-84,387,-192,-180,398,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,-231,-232,-233,-234,-235,-244,-116,-119,-104,-105,-88,-89,297,-177,-229,-230,-221,-215,-117,-118,-194,-238,-245,-239,]),'PLUSPLUS':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,114,115,116,117,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,184,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,246,247,249,253,255,259,260,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,345,347,348,349,350,354,355,361,363,384,386,387,388,395,396,397,398,399,400,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,434,435,436,437,439,441,442,443,445,446,447,448,],[-74,-75,-76,115,115,-47,-263,-27,-28,-124,-261,115,115,-223,246,115,115,115,115,115,-224,-225,-222,-228,-248,-226,-227,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-223,115,115,-263,-28,-125,115,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,115,115,115,115,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,-236,-237,115,115,115,-258,-260,-11,115,-12,115,-223,-223,115,115,-262,115,115,-159,-158,115,115,-175,115,115,115,115,115,-171,-172,-174,-231,-232,-233,-234,-235,115,-244,-263,-139,115,-160,115,-162,115,-170,-173,115,-229,-230,115,115,-263,115,-11,-161,115,115,115,115,115,-163,-165,-166,115,-238,-263,-245,115,115,-239,-164,-167,115,115,-169,-168,]),'MINUSMINUS':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,114,115,116,117,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,184,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,246,247,249,253,255,259,260,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,345,347,348,349,350,354,355,361,363,384,386,387,388,395,396,397,398,399,400,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,434,435,436,437,439,441,442,443,445,446,447,448,],[-74,-75,-76,116,116,-47,-263,-27,-28,-124,-261,116,116,-223,247,116,116,116,116,116,-224,-225,-222,-228,-248,-226,-227,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-223,116,116,-263,-28,-125,116,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,116,116,116,116,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,-236,-237,116,116,116,-258,-260,-11,116,-12,116,-223,-223,116,116,-262,116,116,-159,-158,116,116,-175,116,116,116,116,116,-171,-172,-174,-231,-232,-233,-234,-235,116,-244,-263,-139,116,-160,116,-162,116,-170,-173,116,-229,-230,116,116,-263,116,-11,-161,116,116,116,116,116,-163,-165,-166,116,-238,-263,-245,116,116,-239,-164,-167,116,116,-169,-168,]),'SIZEOF':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,119,119,-47,-263,-27,-28,-124,-261,119,119,-223,119,119,119,119,119,-224,-225,-222,-226,-227,-263,-223,119,119,-263,-28,-125,119,-157,-155,-156,-40,-41,-42,-43,-44,-45,119,119,119,119,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,-11,119,-12,119,-223,-223,119,119,-262,119,119,-159,-158,119,119,-175,119,119,119,119,119,-171,-172,-174,119,-263,-139,119,-160,119,-162,119,-170,-173,119,119,119,-263,119,-11,-161,119,119,119,119,119,-163,-165,-166,119,-263,119,119,-164,-167,119,119,-169,-168,]),'AND':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,184,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,246,247,248,249,250,251,252,253,254,255,259,260,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,354,355,361,363,384,386,387,388,395,396,397,398,399,400,401,403,404,405,406,409,410,416,417,418,419,420,421,428,429,430,433,434,435,436,437,439,441,442,443,445,446,447,448,],[-74,-75,-76,123,123,-47,-263,-27,-28,-124,-261,123,123,-223,-214,237,-216,123,123,123,-195,123,123,-224,-225,-222,-228,-248,-226,-227,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-223,123,123,-263,-28,-125,123,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,123,123,123,123,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,-236,-237,-217,123,-218,-219,-214,123,-220,123,-258,-260,-11,123,-12,123,-223,-223,123,123,-262,123,123,-159,-158,123,123,-175,123,123,123,123,123,-171,-172,-174,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,237,237,237,237,-231,-232,-233,-234,-235,123,-244,-263,-139,123,-160,123,-162,123,-170,-173,123,-229,-230,123,123,-221,-263,-215,123,-11,-161,123,123,123,123,123,-163,-165,-166,123,-238,-263,-245,123,123,-239,-164,-167,123,123,-169,-168,]),'PLUS':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,184,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,246,247,248,249,250,251,252,253,254,255,259,260,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,354,355,361,363,384,386,387,388,395,396,397,398,399,400,401,403,404,405,406,409,410,416,417,418,419,420,421,428,429,430,433,434,435,436,437,439,441,442,443,445,446,447,448,],[-74,-75,-76,121,121,-47,-263,-27,-28,-124,-261,121,121,-223,-214,227,-216,121,121,121,-195,121,121,-224,-225,-222,-228,-248,-226,-227,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-223,121,121,-263,-28,-125,121,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,121,121,121,121,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,-236,-237,-217,121,-218,-219,-214,121,-220,121,-258,-260,-11,121,-12,121,-223,-223,121,121,-262,121,121,-159,-158,121,121,-175,121,121,121,121,121,-171,-172,-174,-196,-197,-198,-199,-200,227,227,227,227,227,227,227,227,227,227,227,227,227,-231,-232,-233,-234,-235,121,-244,-263,-139,121,-160,121,-162,121,-170,-173,121,-229,-230,121,121,-221,-263,-215,121,-11,-161,121,121,121,121,121,-163,-165,-166,121,-238,-263,-245,121,121,-239,-164,-167,121,121,-169,-168,]),'MINUS':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,184,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,246,247,248,249,250,251,252,253,254,255,259,260,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,354,355,361,363,384,386,387,388,395,396,397,398,399,400,401,403,404,405,406,409,410,416,417,418,419,420,421,428,429,430,433,434,435,436,437,439,441,442,443,445,446,447,448,],[-74,-75,-76,122,122,-47,-263,-27,-28,-124,-261,122,122,-223,-214,228,-216,122,122,122,-195,122,122,-224,-225,-222,-228,-248,-226,-227,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-223,122,122,-263,-28,-125,122,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,122,122,122,122,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,-236,-237,-217,122,-218,-219,-214,122,-220,122,-258,-260,-11,122,-12,122,-223,-223,122,122,-262,122,122,-159,-158,122,122,-175,122,122,122,122,122,-171,-172,-174,-196,-197,-198,-199,-200,228,228,228,228,228,228,228,228,228,228,228,228,228,-231,-232,-233,-234,-235,122,-244,-263,-139,122,-160,122,-162,122,-170,-173,122,-229,-230,122,122,-221,-263,-215,122,-11,-161,122,122,122,122,122,-163,-165,-166,122,-238,-263,-245,122,122,-239,-164,-167,122,122,-169,-168,]),'NOT':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,126,126,-47,-263,-27,-28,-124,-261,126,126,-223,126,126,126,126,126,-224,-225,-222,-226,-227,-263,-223,126,126,-263,-28,-125,126,-157,-155,-156,-40,-41,-42,-43,-44,-45,126,126,126,126,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,-11,126,-12,126,-223,-223,126,126,-262,126,126,-159,-158,126,126,-175,126,126,126,126,126,-171,-172,-174,126,-263,-139,126,-160,126,-162,126,-170,-173,126,126,126,-263,126,-11,-161,126,126,126,126,126,-163,-165,-166,126,-263,126,126,-164,-167,126,126,-169,-168,]),'LNOT':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,127,127,-47,-263,-27,-28,-124,-261,127,127,-223,127,127,127,127,127,-224,-225,-222,-226,-227,-263,-223,127,127,-263,-28,-125,127,-157,-155,-156,-40,-41,-42,-43,-44,-45,127,127,127,127,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,-11,127,-12,127,-223,-223,127,127,-262,127,127,-159,-158,127,127,-175,127,127,127,127,127,-171,-172,-174,127,-263,-139,127,-160,127,-162,127,-170,-173,127,127,127,-263,127,-11,-161,127,127,127,127,127,-163,-165,-166,127,-263,127,127,-164,-167,127,127,-169,-168,]),'OFFSETOF':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,132,132,-47,-263,-27,-28,-124,-261,132,132,-223,132,132,132,132,132,-224,-225,-222,-226,-227,-263,-223,132,132,-263,-28,-125,132,-157,-155,-156,-40,-41,-42,-43,-44,-45,132,132,132,132,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,-11,132,-12,132,-223,-223,132,132,-262,132,132,-159,-158,132,132,-175,132,132,132,132,132,-171,-172,-174,132,-263,-139,132,-160,132,-162,132,-170,-173,132,132,132,-263,132,-11,-161,132,132,132,132,132,-163,-165,-166,132,-263,132,132,-164,-167,132,132,-169,-168,]),'INT_CONST_DEC':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,133,133,-47,-263,-27,-28,-124,-261,133,133,-223,133,133,133,133,133,-224,-225,-222,-226,-227,-263,-223,133,133,-263,-28,-125,133,-157,-155,-156,-40,-41,-42,-43,-44,-45,133,133,133,133,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,-11,133,-12,133,-223,-223,133,133,-262,133,133,-159,-158,133,133,-175,133,133,133,133,133,-171,-172,-174,133,-263,-139,133,-160,133,-162,133,-170,-173,133,133,133,-263,133,-11,-161,133,133,133,133,133,-163,-165,-166,133,-263,133,133,-164,-167,133,133,-169,-168,]),'INT_CONST_OCT':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,134,134,-47,-263,-27,-28,-124,-261,134,134,-223,134,134,134,134,134,-224,-225,-222,-226,-227,-263,-223,134,134,-263,-28,-125,134,-157,-155,-156,-40,-41,-42,-43,-44,-45,134,134,134,134,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,-11,134,-12,134,-223,-223,134,134,-262,134,134,-159,-158,134,134,-175,134,134,134,134,134,-171,-172,-174,134,-263,-139,134,-160,134,-162,134,-170,-173,134,134,134,-263,134,-11,-161,134,134,134,134,134,-163,-165,-166,134,-263,134,134,-164,-167,134,134,-169,-168,]),'INT_CONST_HEX':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,135,135,-47,-263,-27,-28,-124,-261,135,135,-223,135,135,135,135,135,-224,-225,-222,-226,-227,-263,-223,135,135,-263,-28,-125,135,-157,-155,-156,-40,-41,-42,-43,-44,-45,135,135,135,135,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,-11,135,-12,135,-223,-223,135,135,-262,135,135,-159,-158,135,135,-175,135,135,135,135,135,-171,-172,-174,135,-263,-139,135,-160,135,-162,135,-170,-173,135,135,135,-263,135,-11,-161,135,135,135,135,135,-163,-165,-166,135,-263,135,135,-164,-167,135,135,-169,-168,]),'INT_CONST_BIN':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,136,136,-47,-263,-27,-28,-124,-261,136,136,-223,136,136,136,136,136,-224,-225,-222,-226,-227,-263,-223,136,136,-263,-28,-125,136,-157,-155,-156,-40,-41,-42,-43,-44,-45,136,136,136,136,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,-11,136,-12,136,-223,-223,136,136,-262,136,136,-159,-158,136,136,-175,136,136,136,136,136,-171,-172,-174,136,-263,-139,136,-160,136,-162,136,-170,-173,136,136,136,-263,136,-11,-161,136,136,136,136,136,-163,-165,-166,136,-263,136,136,-164,-167,136,136,-169,-168,]),'FLOAT_CONST':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,137,137,-47,-263,-27,-28,-124,-261,137,137,-223,137,137,137,137,137,-224,-225,-222,-226,-227,-263,-223,137,137,-263,-28,-125,137,-157,-155,-156,-40,-41,-42,-43,-44,-45,137,137,137,137,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,-11,137,-12,137,-223,-223,137,137,-262,137,137,-159,-158,137,137,-175,137,137,137,137,137,-171,-172,-174,137,-263,-139,137,-160,137,-162,137,-170,-173,137,137,137,-263,137,-11,-161,137,137,137,137,137,-163,-165,-166,137,-263,137,137,-164,-167,137,137,-169,-168,]),'HEX_FLOAT_CONST':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,138,138,-47,-263,-27,-28,-124,-261,138,138,-223,138,138,138,138,138,-224,-225,-222,-226,-227,-263,-223,138,138,-263,-28,-125,138,-157,-155,-156,-40,-41,-42,-43,-44,-45,138,138,138,138,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,-11,138,-12,138,-223,-223,138,138,-262,138,138,-159,-158,138,138,-175,138,138,138,138,138,-171,-172,-174,138,-263,-139,138,-160,138,-162,138,-170,-173,138,138,138,-263,138,-11,-161,138,138,138,138,138,-163,-165,-166,138,-263,138,138,-164,-167,138,138,-169,-168,]),'CHAR_CONST':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,139,139,-47,-263,-27,-28,-124,-261,139,139,-223,139,139,139,139,139,-224,-225,-222,-226,-227,-263,-223,139,139,-263,-28,-125,139,-157,-155,-156,-40,-41,-42,-43,-44,-45,139,139,139,139,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,-11,139,-12,139,-223,-223,139,139,-262,139,139,-159,-158,139,139,-175,139,139,139,139,139,-171,-172,-174,139,-263,-139,139,-160,139,-162,139,-170,-173,139,139,139,-263,139,-11,-161,139,139,139,139,139,-163,-165,-166,139,-263,139,139,-164,-167,139,139,-169,-168,]),'WCHAR_CONST':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,140,140,-47,-263,-27,-28,-124,-261,140,140,-223,140,140,140,140,140,-224,-225,-222,-226,-227,-263,-223,140,140,-263,-28,-125,140,-157,-155,-156,-40,-41,-42,-43,-44,-45,140,140,140,140,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,-11,140,-12,140,-223,-223,140,140,-262,140,140,-159,-158,140,140,-175,140,140,140,140,140,-171,-172,-174,140,-263,-139,140,-160,140,-162,140,-170,-173,140,140,140,-263,140,-11,-161,140,140,140,140,140,-163,-165,-166,140,-263,140,140,-164,-167,140,140,-169,-168,]),'STRING_LITERAL':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,130,141,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,259,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,141,141,-47,-263,-27,-28,-124,-261,141,141,-223,141,141,141,141,141,-224,-225,-222,-226,-227,259,-257,-263,-223,141,141,-263,-28,-125,141,-157,-155,-156,-40,-41,-42,-43,-44,-45,141,141,141,141,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,-258,-11,141,-12,141,-223,-223,141,141,-262,141,141,-159,-158,141,141,-175,141,141,141,141,141,-171,-172,-174,141,-263,-139,141,-160,141,-162,141,-170,-173,141,141,141,-263,141,-11,-161,141,141,141,141,141,-163,-165,-166,141,-263,141,141,-164,-167,141,141,-169,-168,]),'WSTRING_LITERAL':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,131,142,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,260,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,142,142,-47,-263,-27,-28,-124,-261,142,142,-223,142,142,142,142,142,-224,-225,-222,-226,-227,260,-259,-263,-223,142,142,-263,-28,-125,142,-157,-155,-156,-40,-41,-42,-43,-44,-45,142,142,142,142,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,-260,-11,142,-12,142,-223,-223,142,142,-262,142,142,-159,-158,142,142,-175,142,142,142,142,142,-171,-172,-174,142,-263,-139,142,-160,142,-162,142,-170,-173,142,142,142,-263,142,-11,-161,142,142,142,142,142,-163,-165,-166,142,-263,142,142,-164,-167,142,142,-169,-168,]),'RBRACKET':([24,25,26,62,68,80,82,107,108,109,110,111,112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,147,149,151,159,198,246,247,248,250,251,252,254,259,260,271,272,274,275,285,307,323,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,345,347,348,349,350,355,365,372,373,390,399,400,404,406,423,434,436,441,],[-74,-75,-76,-263,-263,-27,-124,209,210,-3,-4,-179,-214,-193,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-263,-28,-125,-176,-236,-237,-217,-218,-219,-214,-220,-258,-260,367,368,370,371,-262,-192,-180,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,399,-231,-232,-233,-234,-235,-244,411,412,413,-177,-229,-230,-221,-215,-194,-238,-245,-239,]),'CASE':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,185,185,-157,-155,-156,-40,-41,-42,-43,-44,-45,185,-262,-159,-158,185,185,-175,-171,-172,-174,-160,185,-162,-170,-173,-161,185,185,185,-163,-165,-166,185,-164,-167,185,185,-169,-168,]),'DEFAULT':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,186,186,-157,-155,-156,-40,-41,-42,-43,-44,-45,186,-262,-159,-158,186,186,-175,-171,-172,-174,-160,186,-162,-170,-173,-161,186,186,186,-163,-165,-166,186,-164,-167,186,186,-169,-168,]),'IF':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,188,188,-157,-155,-156,-40,-41,-42,-43,-44,-45,188,-262,-159,-158,188,188,-175,-171,-172,-174,-160,188,-162,-170,-173,-161,188,188,188,-163,-165,-166,188,-164,-167,188,188,-169,-168,]),'SWITCH':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,190,190,-157,-155,-156,-40,-41,-42,-43,-44,-45,190,-262,-159,-158,190,190,-175,-171,-172,-174,-160,190,-162,-170,-173,-161,190,190,190,-163,-165,-166,190,-164,-167,190,190,-169,-168,]),'WHILE':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,314,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,191,191,-157,-155,-156,-40,-41,-42,-43,-44,-45,191,-262,-159,-158,191,191,-175,393,-171,-172,-174,-160,191,-162,-170,-173,-161,191,191,191,-163,-165,-166,191,-164,-167,191,191,-169,-168,]),'DO':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,192,192,-157,-155,-156,-40,-41,-42,-43,-44,-45,192,-262,-159,-158,192,192,-175,-171,-172,-174,-160,192,-162,-170,-173,-161,192,192,192,-163,-165,-166,192,-164,-167,192,192,-169,-168,]),'FOR':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,193,193,-157,-155,-156,-40,-41,-42,-43,-44,-45,193,-262,-159,-158,193,193,-175,-171,-172,-174,-160,193,-162,-170,-173,-161,193,193,193,-163,-165,-166,193,-164,-167,193,193,-169,-168,]),'GOTO':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,194,194,-157,-155,-156,-40,-41,-42,-43,-44,-45,194,-262,-159,-158,194,194,-175,-171,-172,-174,-160,194,-162,-170,-173,-161,194,194,194,-163,-165,-166,194,-164,-167,194,194,-169,-168,]),'BREAK':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,195,195,-157,-155,-156,-40,-41,-42,-43,-44,-45,195,-262,-159,-158,195,195,-175,-171,-172,-174,-160,195,-162,-170,-173,-161,195,195,195,-163,-165,-166,195,-164,-167,195,195,-169,-168,]),'CONTINUE':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,196,196,-157,-155,-156,-40,-41,-42,-43,-44,-45,196,-262,-159,-158,196,196,-175,-171,-172,-174,-160,196,-162,-170,-173,-161,196,196,196,-163,-165,-166,196,-164,-167,196,196,-169,-168,]),'RETURN':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,197,197,-157,-155,-156,-40,-41,-42,-43,-44,-45,197,-262,-159,-158,197,197,-175,-171,-172,-174,-160,197,-162,-170,-173,-161,197,197,197,-163,-165,-166,197,-164,-167,197,197,-169,-168,]),'RBRACE':([67,86,91,111,112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,144,145,162,163,164,167,168,172,173,174,175,176,177,178,179,180,181,182,183,246,247,248,250,251,252,254,259,260,262,263,264,281,282,284,285,287,288,290,302,303,307,309,317,318,320,323,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,360,361,362,377,378,381,382,386,388,396,397,399,400,404,406,408,416,423,425,427,428,429,430,434,435,436,441,442,443,447,448,],[-47,-261,-263,-179,-214,-193,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-134,-263,285,-106,-109,285,-92,285,-5,-6,-157,-155,-156,-40,-41,-42,-43,-44,-45,-236,-237,-217,-218,-219,-214,-220,-258,-260,285,-20,-19,285,285,-107,-262,285,285,-93,-159,-158,-192,-175,-171,-172,-174,-180,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,-231,-232,-233,-234,-235,-244,-135,285,-137,-108,-110,-94,-95,-160,-162,-170,-173,-229,-230,-221,-215,-136,-161,-194,285,-138,-163,-165,-166,-238,285,-245,-239,-164,-167,-169,-168,]),'PERIOD':([86,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,184,246,247,259,260,267,268,285,345,347,348,349,350,355,361,364,366,399,400,405,411,434,435,436,441,],[-261,244,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,270,-248,-236,-237,-258,-260,270,-140,-262,-231,-232,-233,-234,-235,-244,270,-141,-143,-229,-230,270,-142,-238,270,-245,-239,]),'CONDOP':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,223,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'DIVIDE':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,225,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'MOD':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,226,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'RSHIFT':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,229,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,229,229,229,229,229,229,229,229,229,229,229,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'LSHIFT':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,230,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,230,230,230,230,230,230,230,230,230,230,230,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'LT':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,231,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,231,231,231,231,231,231,231,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'LE':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,232,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,232,232,232,232,232,232,232,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'GE':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,233,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,233,233,233,233,233,233,233,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'GT':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,234,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,234,234,234,234,234,234,234,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'EQ':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,235,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,235,235,235,235,235,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'NE':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,236,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,236,236,236,236,236,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'OR':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,238,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,238,238,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'XOR':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,239,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,239,-211,239,239,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'LAND':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,240,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,240,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'LOR':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,241,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'XOREQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[213,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'TIMESEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[214,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'DIVEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[215,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'MODEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[216,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'PLUSEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[217,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'MINUSEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[218,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'LSHIFTEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[219,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'RSHIFTEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[220,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'ANDEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[221,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'OREQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[222,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'ARROW':([114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,259,260,285,345,347,348,349,350,355,399,400,434,436,441,],[245,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-238,-245,-239,]),'ELSE':([178,179,180,181,182,183,285,302,309,317,318,320,386,388,396,397,416,428,429,430,442,443,447,448,],[-40,-41,-42,-43,-44,-45,-262,-159,-175,-171,-172,-174,-160,-162,-170,-173,-161,437,-165,-166,-164,-167,-169,-168,]),'ELLIPSIS':([204,],[321,]),}

_lr_action = {}
for _k, _v in _lr_action_items.items():
   for _x,_y in zip(_v[0],_v[1]):
      if not _x in _lr_action:  _lr_action[_x] = {}
      _lr_action[_x][_k] = _y
del _lr_action_items

_lr_goto_items = {'translation_unit_or_empty':([0,],[1,]),'translation_unit':([0,],[2,]),'empty':([0,9,10,16,17,18,19,23,55,56,61,62,68,69,91,95,106,145,147,148,149,150,169,170,171,174,192,258,305,308,315,358,361,387,395,405,417,418,419,421,433,435,437,439,445,446,],[3,52,59,73,73,73,73,80,59,52,102,109,80,154,173,102,207,264,109,102,109,80,293,299,299,304,304,207,304,304,304,102,410,304,304,410,304,304,304,304,304,410,304,304,304,304,]),'external_declaration':([0,2,],[4,50,]),'function_definition':([0,2,],[5,5,]),'declaration':([0,2,9,53,56,91,174,315,],[6,6,54,92,54,176,176,395,]),'pp_directive':([0,2,],[7,7,]),'declarator':([0,2,10,21,55,61,95,99,106,169,383,],[9,9,56,78,93,78,78,93,205,296,296,]),'declaration_specifiers':([0,2,9,16,17,18,19,53,56,61,69,91,95,148,174,204,315,358,],[10,10,55,74,74,74,74,55,55,106,106,55,106,106,55,106,55,106,]),'decl_body':([0,2,9,53,56,91,174,315,],[11,11,11,11,11,11,11,11,]),'direct_declarator':([0,2,10,14,21,55,58,61,94,95,99,106,169,383,],[13,13,13,70,13,13,70,13,70,13,13,13,13,13,]),'pointer':([0,2,10,21,55,61,79,95,99,106,169,258,358,383,],[14,14,58,14,94,58,158,94,14,58,94,357,357,14,]),'type_qualifier':([0,2,9,16,17,18,19,23,53,56,61,68,69,81,89,91,95,120,148,150,151,165,166,167,170,171,174,204,249,253,255,261,287,288,315,358,],[16,16,16,16,16,16,16,82,16,16,16,82,16,159,170,16,16,170,16,82,159,170,170,170,170,170,16,16,170,170,170,170,170,170,16,16,]),'type_specifier':([0,2,9,16,17,18,19,53,56,61,69,89,91,95,120,148,165,166,167,170,171,174,204,249,253,255,261,287,288,315,358,],[17,17,17,17,17,17,17,17,17,17,17,171,17,17,171,17,171,171,171,171,171,17,17,171,171,171,171,171,171,17,17,]),'storage_class_specifier':([0,2,9,16,17,18,19,53,56,61,69,91,95,148,174,204,315,358,],[18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,]),'function_specifier':([0,2,9,16,17,18,19,53,56,61,69,91,95,148,174,204,315,358,],[19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,]),'typedef_name':([0,2,9,16,17,18,19,53,56,61,69,89,91,95,120,148,165,166,167,170,171,174,204,249,253,255,261,287,288,315,358,],[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,]),'enum_specifier':([0,2,9,16,17,18,19,53,56,61,69,89,91,95,120,148,165,166,167,170,171,174,204,249,253,255,261,287,288,315,358,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'struct_or_union_specifier':([0,2,9,16,17,18,19,53,56,61,69,89,91,95,120,148,165,166,167,170,171,174,204,249,253,255,261,287,288,315,358,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'struct_or_union':([0,2,9,16,17,18,19,53,56,61,69,89,91,95,120,148,165,166,167,170,171,174,204,249,253,255,261,287,288,315,358,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,]),'declaration_list_opt':([9,56,],[51,96,]),'declaration_list':([9,56,],[53,53,]),'init_declarator_list_opt':([10,55,],[57,57,]),'init_declarator_list':([10,55,],[60,60,]),'init_declarator':([10,55,99,],[63,63,201,]),'abstract_declarator':([10,55,61,95,106,169,258,358,],[65,65,100,100,208,292,208,100,]),'direct_abstract_declarator':([10,55,58,61,94,95,106,169,258,357,358,],[66,66,98,66,98,66,66,66,66,98,66,]),'declaration_specifiers_opt':([16,17,18,19,],[72,75,76,77,]),'type_qualifier_list_opt':([23,68,150,],[79,149,276,]),'type_qualifier_list':([23,68,150,],[81,151,81,]),'brace_open':([46,47,51,64,83,84,87,88,91,96,97,174,192,265,305,308,354,387,402,403,404,409,417,418,419,437,445,446,],[85,89,91,145,160,161,165,166,91,91,145,91,91,145,91,91,405,91,405,405,405,145,91,91,91,91,91,91,]),'compound_statement':([51,91,96,174,192,305,308,387,417,418,419,437,445,446,],[90,180,199,180,180,180,180,180,180,180,180,180,180,180,]),'parameter_type_list_opt':([61,95,148,358,],[101,101,273,101,]),'parameter_type_list':([61,69,95,148,358,],[103,152,103,103,103,]),'parameter_list':([61,69,95,148,358,],[104,104,104,104,104,]),'parameter_declaration':([61,69,95,148,204,358,],[105,105,105,105,322,105,]),'assignment_expression_opt':([62,147,149,],[107,271,274,]),'assignment_expression':([62,64,91,97,120,147,149,174,192,197,211,223,242,243,249,253,255,265,276,277,305,308,310,311,312,313,315,387,395,401,409,417,418,419,420,421,433,437,439,445,446,],[110,144,198,144,198,110,110,198,198,198,323,198,198,346,198,198,198,144,372,373,198,198,198,390,198,198,198,198,198,424,144,198,198,198,198,198,198,198,198,198,198,]),'conditional_expression':([62,64,91,97,120,147,149,174,185,192,197,211,223,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,384,387,395,398,401,409,417,418,419,420,421,433,437,439,445,446,],[111,111,111,111,111,111,111,111,307,111,111,111,111,111,111,111,111,111,111,307,111,111,307,307,111,111,111,111,111,111,111,307,111,111,423,111,111,111,111,111,111,111,111,111,111,111,111,]),'unary_expression':([62,64,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[112,112,112,112,248,250,252,254,112,112,112,112,252,112,112,112,112,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,112,112,112,112,112,112,252,112,112,252,252,112,112,112,112,112,112,112,252,252,112,112,252,112,252,112,112,112,112,112,112,112,112,112,112,112,]),'binary_expression':([62,64,91,97,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,384,387,395,398,401,409,417,418,419,420,421,433,437,439,445,446,],[113,113,113,113,113,113,113,113,113,113,113,113,113,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,]),'postfix_expression':([62,64,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,]),'unary_operator':([62,64,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,]),'cast_expression':([62,64,91,97,117,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[118,118,118,118,251,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,406,118,118,118,118,118,406,118,118,118,118,118,118,118,118,118,118,118,]),'primary_expression':([62,64,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,]),'identifier':([62,64,69,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,270,276,277,280,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,407,409,417,418,419,420,421,433,437,439,445,446,],[128,128,156,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,366,128,128,374,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,426,128,128,128,128,128,128,128,128,128,128,128,]),'constant':([62,64,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,]),'unified_string_literal':([62,64,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,]),'unified_wstring_literal':([62,64,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,]),'initializer':([64,97,265,409,],[143,200,362,427,]),'identifier_list_opt':([69,],[153,]),'identifier_list':([69,],[155,]),'enumerator_list':([85,160,161,],[162,281,282,]),'enumerator':([85,160,161,284,],[163,163,163,377,]),'struct_declaration_list':([89,165,166,],[167,287,288,]),'struct_declaration':([89,165,166,167,287,288,],[168,168,168,290,290,290,]),'specifier_qualifier_list':([89,120,165,166,167,170,171,249,253,255,261,287,288,],[169,258,169,169,169,300,300,258,258,258,258,169,169,]),'block_item_list_opt':([91,],[172,]),'block_item_list':([91,],[174,]),'block_item':([91,174,],[175,303,]),'statement':([91,174,192,305,308,387,417,418,419,437,445,446,],[177,177,314,386,388,416,428,429,430,442,447,448,]),'labeled_statement':([91,174,192,305,308,387,417,418,419,437,445,446,],[178,178,178,178,178,178,178,178,178,178,178,178,]),'expression_statement':([91,174,192,305,308,387,417,418,419,437,445,446,],[179,179,179,179,179,179,179,179,179,179,179,179,]),'selection_statement':([91,174,192,305,308,387,417,418,419,437,445,446,],[181,181,181,181,181,181,181,181,181,181,181,181,]),'iteration_statement':([91,174,192,305,308,387,417,418,419,437,445,446,],[182,182,182,182,182,182,182,182,182,182,182,182,]),'jump_statement':([91,174,192,305,308,387,417,418,419,437,445,446,],[183,183,183,183,183,183,183,183,183,183,183,183,]),'expression_opt':([91,174,192,305,308,315,387,395,417,418,419,421,433,437,439,445,446,],[187,187,187,187,187,394,187,422,187,187,187,432,440,187,444,187,187,]),'expression':([91,120,174,192,197,223,242,249,253,255,305,308,310,312,313,315,387,395,417,418,419,420,421,433,437,439,445,446,],[189,257,189,189,319,324,343,257,257,257,189,189,389,391,392,189,189,189,189,189,189,431,189,189,189,189,189,189,]),'abstract_declarator_opt':([106,258,],[206,356,]),'assignment_operator':([112,],[211,]),'type_name':([120,249,253,255,261,],[256,351,352,353,359,]),'initializer_list_opt':([145,],[262,]),'initializer_list':([145,405,],[263,425,]),'designation_opt':([145,361,405,435,],[265,409,265,409,]),'designation':([145,361,405,435,],[266,266,266,266,]),'designator_list':([145,361,405,435,],[267,267,267,267,]),'designator':([145,267,361,405,435,],[268,364,268,268,268,]),'brace_close':([162,167,172,262,281,282,287,288,361,425,435,],[283,289,302,360,375,376,379,380,408,434,441,]),'struct_declarator_list_opt':([169,],[291,]),'struct_declarator_list':([169,],[294,]),'struct_declarator':([169,383,],[295,414,]),'specifier_qualifier_list_opt':([170,171,],[298,301,]),'constant_expression':([185,269,286,297,384,],[306,365,378,385,415,]),'argument_expression_list':([243,],[344,]),}

_lr_goto = {}
for _k, _v in _lr_goto_items.items():
   for _x, _y in zip(_v[0], _v[1]):
       if not _x in _lr_goto: _lr_goto[_x] = {}
       _lr_goto[_x][_k] = _y
del _lr_goto_items
_lr_productions = [
  ("S' -> translation_unit_or_empty","S'",1,None,None,None),
  ('abstract_declarator_opt -> empty','abstract_declarator_opt',1,'p_abstract_declarator_opt','plyparser.py',42),
  ('abstract_declarator_opt -> abstract_declarator','abstract_declarator_opt',1,'p_abstract_declarator_opt','plyparser.py',43),
  ('assignment_expression_opt -> empty','assignment_expression_opt',1,'p_assignment_expression_opt','plyparser.py',42),
  ('assignment_expression_opt -> assignment_expression','assignment_expression_opt',1,'p_assignment_expression_opt','plyparser.py',43),
  ('block_item_list_opt -> empty','block_item_list_opt',1,'p_block_item_list_opt','plyparser.py',42),
  ('block_item_list_opt -> block_item_list','block_item_list_opt',1,'p_block_item_list_opt','plyparser.py',43),
  ('declaration_list_opt -> empty','declaration_list_opt',1,'p_declaration_list_opt','plyparser.py',42),
  ('declaration_list_opt -> declaration_list','declaration_list_opt',1,'p_declaration_list_opt','plyparser.py',43),
  ('declaration_specifiers_opt -> empty','declaration_specifiers_opt',1,'p_declaration_specifiers_opt','plyparser.py',42),
  ('declaration_specifiers_opt -> declaration_specifiers','declaration_specifiers_opt',1,'p_declaration_specifiers_opt','plyparser.py',43),
  ('designation_opt -> empty','designation_opt',1,'p_designation_opt','plyparser.py',42),
  ('designation_opt -> designation','designation_opt',1,'p_designation_opt','plyparser.py',43),
  ('expression_opt -> empty','expression_opt',1,'p_expression_opt','plyparser.py',42),
  ('expression_opt -> expression','expression_opt',1,'p_expression_opt','plyparser.py',43),
  ('identifier_list_opt -> empty','identifier_list_opt',1,'p_identifier_list_opt','plyparser.py',42),
  ('identifier_list_opt -> identifier_list','identifier_list_opt',1,'p_identifier_list_opt','plyparser.py',43),
  ('init_declarator_list_opt -> empty','init_declarator_list_opt',1,'p_init_declarator_list_opt','plyparser.py',42),
  ('init_declarator_list_opt -> init_declarator_list','init_declarator_list_opt',1,'p_init_declarator_list_opt','plyparser.py',43),
  ('initializer_list_opt -> empty','initializer_list_opt',1,'p_initializer_list_opt','plyparser.py',42),
  ('initializer_list_opt -> initializer_list','initializer_list_opt',1,'p_initializer_list_opt','plyparser.py',43),
  ('parameter_type_list_opt -> empty','parameter_type_list_opt',1,'p_parameter_type_list_opt','plyparser.py',42),
  ('parameter_type_list_opt -> parameter_type_list','parameter_type_list_opt',1,'p_parameter_type_list_opt','plyparser.py',43),
  ('specifier_qualifier_list_opt -> empty','specifier_qualifier_list_opt',1,'p_specifier_qualifier_list_opt','plyparser.py',42),
  ('specifier_qualifier_list_opt -> specifier_qualifier_list','specifier_qualifier_list_opt',1,'p_specifier_qualifier_list_opt','plyparser.py',43),
  ('struct_declarator_list_opt -> empty','struct_declarator_list_opt',1,'p_struct_declarator_list_opt','plyparser.py',42),
  ('struct_declarator_list_opt -> struct_declarator_list','struct_declarator_list_opt',1,'p_struct_declarator_list_opt','plyparser.py',43),
  ('type_qualifier_list_opt -> empty','type_qualifier_list_opt',1,'p_type_qualifier_list_opt','plyparser.py',42),
  ('type_qualifier_list_opt -> type_qualifier_list','type_qualifier_list_opt',1,'p_type_qualifier_list_opt','plyparser.py',43),
  ('translation_unit_or_empty -> translation_unit','translation_unit_or_empty',1,'p_translation_unit_or_empty','c_parser.py',501),
  ('translation_unit_or_empty -> empty','translation_unit_or_empty',1,'p_translation_unit_or_empty','c_parser.py',502),
  ('translation_unit -> external_declaration','translation_unit',1,'p_translation_unit_1','c_parser.py',510),
  ('translation_unit -> translation_unit external_declaration','translation_unit',2,'p_translation_unit_2','c_parser.py',517),
  ('external_declaration -> function_definition','external_declaration',1,'p_external_declaration_1','c_parser.py',529),
  ('external_declaration -> declaration','external_declaration',1,'p_external_declaration_2','c_parser.py',534),
  ('external_declaration -> pp_directive','external_declaration',1,'p_external_declaration_3','c_parser.py',539),
  ('external_declaration -> SEMI','external_declaration',1,'p_external_declaration_4','c_parser.py',544),
  ('pp_directive -> PPHASH','pp_directive',1,'p_pp_directive','c_parser.py',549),
  ('function_definition -> declarator declaration_list_opt compound_statement','function_definition',3,'p_function_definition_1','c_parser.py',558),
  ('function_definition -> declaration_specifiers declarator declaration_list_opt compound_statement','function_definition',4,'p_function_definition_2','c_parser.py',575),
  ('statement -> labeled_statement','statement',1,'p_statement','c_parser.py',586),
  ('statement -> expression_statement','statement',1,'p_statement','c_parser.py',587),
  ('statement -> compound_statement','statement',1,'p_statement','c_parser.py',588),
  ('statement -> selection_statement','statement',1,'p_statement','c_parser.py',589),
  ('statement -> iteration_statement','statement',1,'p_statement','c_parser.py',590),
  ('statement -> jump_statement','statement',1,'p_statement','c_parser.py',591),
  ('decl_body -> declaration_specifiers init_declarator_list_opt','decl_body',2,'p_decl_body','c_parser.py',605),
  ('declaration -> decl_body SEMI','declaration',2,'p_declaration','c_parser.py',664),
  ('declaration_list -> declaration','declaration_list',1,'p_declaration_list','c_parser.py',673),
  ('declaration_list -> declaration_list declaration','declaration_list',2,'p_declaration_list','c_parser.py',674),
  ('declaration_specifiers -> type_qualifier declaration_specifiers_opt','declaration_specifiers',2,'p_declaration_specifiers_1','c_parser.py',679),
  ('declaration_specifiers -> type_specifier declaration_specifiers_opt','declaration_specifiers',2,'p_declaration_specifiers_2','c_parser.py',684),
  ('declaration_specifiers -> storage_class_specifier declaration_specifiers_opt','declaration_specifiers',2,'p_declaration_specifiers_3','c_parser.py',689),
  ('declaration_specifiers -> function_specifier declaration_specifiers_opt','declaration_specifiers',2,'p_declaration_specifiers_4','c_parser.py',694),
  ('storage_class_specifier -> AUTO','storage_class_specifier',1,'p_storage_class_specifier','c_parser.py',699),
  ('storage_class_specifier -> REGISTER','storage_class_specifier',1,'p_storage_class_specifier','c_parser.py',700),
  ('storage_class_specifier -> STATIC','storage_class_specifier',1,'p_storage_class_specifier','c_parser.py',701),
  ('storage_class_specifier -> EXTERN','storage_class_specifier',1,'p_storage_class_specifier','c_parser.py',702),
  ('storage_class_specifier -> TYPEDEF','storage_class_specifier',1,'p_storage_class_specifier','c_parser.py',703),
  ('function_specifier -> INLINE','function_specifier',1,'p_function_specifier','c_parser.py',708),
  ('type_specifier -> VOID','type_specifier',1,'p_type_specifier_1','c_parser.py',713),
  ('type_specifier -> _BOOL','type_specifier',1,'p_type_specifier_1','c_parser.py',714),
  ('type_specifier -> CHAR','type_specifier',1,'p_type_specifier_1','c_parser.py',715),
  ('type_specifier -> SHORT','type_specifier',1,'p_type_specifier_1','c_parser.py',716),
  ('type_specifier -> INT','type_specifier',1,'p_type_specifier_1','c_parser.py',717),
  ('type_specifier -> LONG','type_specifier',1,'p_type_specifier_1','c_parser.py',718),
  ('type_specifier -> FLOAT','type_specifier',1,'p_type_specifier_1','c_parser.py',719),
  ('type_specifier -> DOUBLE','type_specifier',1,'p_type_specifier_1','c_parser.py',720),
  ('type_specifier -> _COMPLEX','type_specifier',1,'p_type_specifier_1','c_parser.py',721),
  ('type_specifier -> SIGNED','type_specifier',1,'p_type_specifier_1','c_parser.py',722),
  ('type_specifier -> UNSIGNED','type_specifier',1,'p_type_specifier_1','c_parser.py',723),
  ('type_specifier -> typedef_name','type_specifier',1,'p_type_specifier_2','c_parser.py',728),
  ('type_specifier -> enum_specifier','type_specifier',1,'p_type_specifier_2','c_parser.py',729),
  ('type_specifier -> struct_or_union_specifier','type_specifier',1,'p_type_specifier_2','c_parser.py',730),
  ('type_qualifier -> CONST','type_qualifier',1,'p_type_qualifier','c_parser.py',735),
  ('type_qualifier -> RESTRICT','type_qualifier',1,'p_type_qualifier','c_parser.py',736),
  ('type_qualifier -> VOLATILE','type_qualifier',1,'p_type_qualifier','c_parser.py',737),
  ('init_declarator_list -> init_declarator','init_declarator_list',1,'p_init_declarator_list_1','c_parser.py',742),
  ('init_declarator_list -> init_declarator_list COMMA init_declarator','init_declarator_list',3,'p_init_declarator_list_1','c_parser.py',743),
  ('init_declarator_list -> EQUALS initializer','init_declarator_list',2,'p_init_declarator_list_2','c_parser.py',753),
  ('init_declarator_list -> abstract_declarator','init_declarator_list',1,'p_init_declarator_list_3','c_parser.py',761),
  ('init_declarator -> declarator','init_declarator',1,'p_init_declarator','c_parser.py',769),
  ('init_declarator -> declarator EQUALS initializer','init_declarator',3,'p_init_declarator','c_parser.py',770),
  ('specifier_qualifier_list -> type_qualifier specifier_qualifier_list_opt','specifier_qualifier_list',2,'p_specifier_qualifier_list_1','c_parser.py',775),
  ('specifier_qualifier_list -> type_specifier specifier_qualifier_list_opt','specifier_qualifier_list',2,'p_specifier_qualifier_list_2','c_parser.py',780),
  ('struct_or_union_specifier -> struct_or_union ID','struct_or_union_specifier',2,'p_struct_or_union_specifier_1','c_parser.py',788),
  ('struct_or_union_specifier -> struct_or_union TYPEID','struct_or_union_specifier',2,'p_struct_or_union_specifier_1','c_parser.py',789),
  ('struct_or_union_specifier -> struct_or_union brace_open struct_declaration_list brace_close','struct_or_union_specifier',4,'p_struct_or_union_specifier_2','c_parser.py',798),
  ('struct_or_union_specifier -> struct_or_union ID brace_open struct_declaration_list brace_close','struct_or_union_specifier',5,'p_struct_or_union_specifier_3','c_parser.py',807),
  ('struct_or_union_specifier -> struct_or_union TYPEID brace_open struct_declaration_list brace_close','struct_or_union_specifier',5,'p_struct_or_union_specifier_3','c_parser.py',808),
  ('struct_or_union -> STRUCT','struct_or_union',1,'p_struct_or_union','c_parser.py',817),
  ('struct_or_union -> UNION','struct_or_union',1,'p_struct_or_union','c_parser.py',818),
  ('struct_declaration_list -> struct_declaration','struct_declaration_list',1,'p_struct_declaration_list','c_parser.py',825),
  ('struct_declaration_list -> struct_declaration_list struct_declaration','struct_declaration_list',2,'p_struct_declaration_list','c_parser.py',826),
  ('struct_declaration -> specifier_qualifier_list struct_declarator_list_opt SEMI','struct_declaration',3,'p_struct_declaration_1','c_parser.py',831),
  ('struct_declaration -> specifier_qualifier_list abstract_declarator SEMI','struct_declaration',3,'p_struct_declaration_2','c_parser.py',869),
  ('struct_declarator_list -> struct_declarator','struct_declarator_list',1,'p_struct_declarator_list','c_parser.py',883),
  ('struct_declarator_list -> struct_declarator_list COMMA struct_declarator','struct_declarator_list',3,'p_struct_declarator_list','c_parser.py',884),
  ('struct_declarator -> declarator','struct_declarator',1,'p_struct_declarator_1','c_parser.py',892),
  ('struct_declarator -> declarator COLON constant_expression','struct_declarator',3,'p_struct_declarator_2','c_parser.py',897),
  ('struct_declarator -> COLON constant_expression','struct_declarator',2,'p_struct_declarator_2','c_parser.py',898),
  ('enum_specifier -> ENUM ID','enum_specifier',2,'p_enum_specifier_1','c_parser.py',906),
  ('enum_specifier -> ENUM TYPEID','enum_specifier',2,'p_enum_specifier_1','c_parser.py',907),
  ('enum_specifier -> ENUM brace_open enumerator_list brace_close','enum_specifier',4,'p_enum_specifier_2','c_parser.py',912),
  ('enum_specifier -> ENUM ID brace_open enumerator_list brace_close','enum_specifier',5,'p_enum_specifier_3','c_parser.py',917),
  ('enum_specifier -> ENUM TYPEID brace_open enumerator_list brace_close','enum_specifier',5,'p_enum_specifier_3','c_parser.py',918),
  ('enumerator_list -> enumerator','enumerator_list',1,'p_enumerator_list','c_parser.py',923),
  ('enumerator_list -> enumerator_list COMMA','enumerator_list',2,'p_enumerator_list','c_parser.py',924),
  ('enumerator_list -> enumerator_list COMMA enumerator','enumerator_list',3,'p_enumerator_list','c_parser.py',925),
  ('enumerator -> ID','enumerator',1,'p_enumerator','c_parser.py',936),
  ('enumerator -> ID EQUALS constant_expression','enumerator',3,'p_enumerator','c_parser.py',937),
  ('declarator -> direct_declarator','declarator',1,'p_declarator_1','c_parser.py',952),
  ('declarator -> pointer direct_declarator','declarator',2,'p_declarator_2','c_parser.py',957),
  ('declarator -> pointer TYPEID','declarator',2,'p_declarator_3','c_parser.py',966),
  ('direct_declarator -> ID','direct_declarator',1,'p_direct_declarator_1','c_parser.py',977),
  ('direct_declarator -> LPAREN declarator RPAREN','direct_declarator',3,'p_direct_declarator_2','c_parser.py',986),
  ('direct_declarator -> direct_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET','direct_declarator',5,'p_direct_declarator_3','c_parser.py',991),
  ('direct_declarator -> direct_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKET','direct_declarator',6,'p_direct_declarator_4','c_parser.py',1005),
  ('direct_declarator -> direct_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKET','direct_declarator',6,'p_direct_declarator_4','c_parser.py',1006),
  ('direct_declarator -> direct_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKET','direct_declarator',5,'p_direct_declarator_5','c_parser.py',1026),
  ('direct_declarator -> direct_declarator LPAREN parameter_type_list RPAREN','direct_declarator',4,'p_direct_declarator_6','c_parser.py',1037),
  ('direct_declarator -> direct_declarator LPAREN identifier_list_opt RPAREN','direct_declarator',4,'p_direct_declarator_6','c_parser.py',1038),
  ('pointer -> TIMES type_qualifier_list_opt','pointer',2,'p_pointer','c_parser.py',1065),
  ('pointer -> TIMES type_qualifier_list_opt pointer','pointer',3,'p_pointer','c_parser.py',1066),
  ('type_qualifier_list -> type_qualifier','type_qualifier_list',1,'p_type_qualifier_list','c_parser.py',1095),
  ('type_qualifier_list -> type_qualifier_list type_qualifier','type_qualifier_list',2,'p_type_qualifier_list','c_parser.py',1096),
  ('parameter_type_list -> parameter_list','parameter_type_list',1,'p_parameter_type_list','c_parser.py',1101),
  ('parameter_type_list -> parameter_list COMMA ELLIPSIS','parameter_type_list',3,'p_parameter_type_list','c_parser.py',1102),
  ('parameter_list -> parameter_declaration','parameter_list',1,'p_parameter_list','c_parser.py',1110),
  ('parameter_list -> parameter_list COMMA parameter_declaration','parameter_list',3,'p_parameter_list','c_parser.py',1111),
  ('parameter_declaration -> declaration_specifiers declarator','parameter_declaration',2,'p_parameter_declaration_1','c_parser.py',1120),
  ('parameter_declaration -> declaration_specifiers abstract_declarator_opt','parameter_declaration',2,'p_parameter_declaration_2','c_parser.py',1131),
  ('identifier_list -> identifier','identifier_list',1,'p_identifier_list','c_parser.py',1162),
  ('identifier_list -> identifier_list COMMA identifier','identifier_list',3,'p_identifier_list','c_parser.py',1163),
  ('initializer -> assignment_expression','initializer',1,'p_initializer_1','c_parser.py',1172),
  ('initializer -> brace_open initializer_list_opt brace_close','initializer',3,'p_initializer_2','c_parser.py',1177),
  ('initializer -> brace_open initializer_list COMMA brace_close','initializer',4,'p_initializer_2','c_parser.py',1178),
  ('initializer_list -> designation_opt initializer','initializer_list',2,'p_initializer_list','c_parser.py',1186),
  ('initializer_list -> initializer_list COMMA designation_opt initializer','initializer_list',4,'p_initializer_list','c_parser.py',1187),
  ('designation -> designator_list EQUALS','designation',2,'p_designation','c_parser.py',1198),
  ('designator_list -> designator','designator_list',1,'p_designator_list','c_parser.py',1206),
  ('designator_list -> designator_list designator','designator_list',2,'p_designator_list','c_parser.py',1207),
  ('designator -> LBRACKET constant_expression RBRACKET','designator',3,'p_designator','c_parser.py',1212),
  ('designator -> PERIOD identifier','designator',2,'p_designator','c_parser.py',1213),
  ('type_name -> specifier_qualifier_list abstract_declarator_opt','type_name',2,'p_type_name','c_parser.py',1218),
  ('abstract_declarator -> pointer','abstract_declarator',1,'p_abstract_declarator_1','c_parser.py',1235),
  ('abstract_declarator -> pointer direct_abstract_declarator','abstract_declarator',2,'p_abstract_declarator_2','c_parser.py',1243),
  ('abstract_declarator -> direct_abstract_declarator','abstract_declarator',1,'p_abstract_declarator_3','c_parser.py',1248),
  ('direct_abstract_declarator -> LPAREN abstract_declarator RPAREN','direct_abstract_declarator',3,'p_direct_abstract_declarator_1','c_parser.py',1258),
  ('direct_abstract_declarator -> direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKET','direct_abstract_declarator',4,'p_direct_abstract_declarator_2','c_parser.py',1262),
  ('direct_abstract_declarator -> LBRACKET assignment_expression_opt RBRACKET','direct_abstract_declarator',3,'p_direct_abstract_declarator_3','c_parser.py',1273),
  ('direct_abstract_declarator -> direct_abstract_declarator LBRACKET TIMES RBRACKET','direct_abstract_declarator',4,'p_direct_abstract_declarator_4','c_parser.py',1282),
  ('direct_abstract_declarator -> LBRACKET TIMES RBRACKET','direct_abstract_declarator',3,'p_direct_abstract_declarator_5','c_parser.py',1293),
  ('direct_abstract_declarator -> direct_abstract_declarator LPAREN parameter_type_list_opt RPAREN','direct_abstract_declarator',4,'p_direct_abstract_declarator_6','c_parser.py',1302),
  ('direct_abstract_declarator -> LPAREN parameter_type_list_opt RPAREN','direct_abstract_declarator',3,'p_direct_abstract_declarator_7','c_parser.py',1312),
  ('block_item -> declaration','block_item',1,'p_block_item','c_parser.py',1323),
  ('block_item -> statement','block_item',1,'p_block_item','c_parser.py',1324),
  ('block_item_list -> block_item','block_item_list',1,'p_block_item_list','c_parser.py',1331),
  ('block_item_list -> block_item_list block_item','block_item_list',2,'p_block_item_list','c_parser.py',1332),
  ('compound_statement -> brace_open block_item_list_opt brace_close','compound_statement',3,'p_compound_statement_1','c_parser.py',1338),
  ('labeled_statement -> ID COLON statement','labeled_statement',3,'p_labeled_statement_1','c_parser.py',1344),
  ('labeled_statement -> CASE constant_expression COLON statement','labeled_statement',4,'p_labeled_statement_2','c_parser.py',1348),
  ('labeled_statement -> DEFAULT COLON statement','labeled_statement',3,'p_labeled_statement_3','c_parser.py',1352),
  ('selection_statement -> IF LPAREN expression RPAREN statement','selection_statement',5,'p_selection_statement_1','c_parser.py',1356),
  ('selection_statement -> IF LPAREN expression RPAREN statement ELSE statement','selection_statement',7,'p_selection_statement_2','c_parser.py',1360),
  ('selection_statement -> SWITCH LPAREN expression RPAREN statement','selection_statement',5,'p_selection_statement_3','c_parser.py',1364),
  ('iteration_statement -> WHILE LPAREN expression RPAREN statement','iteration_statement',5,'p_iteration_statement_1','c_parser.py',1369),
  ('iteration_statement -> DO statement WHILE LPAREN expression RPAREN SEMI','iteration_statement',7,'p_iteration_statement_2','c_parser.py',1373),
  ('iteration_statement -> FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statement','iteration_statement',9,'p_iteration_statement_3','c_parser.py',1377),
  ('iteration_statement -> FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN statement','iteration_statement',8,'p_iteration_statement_4','c_parser.py',1381),
  ('jump_statement -> GOTO ID SEMI','jump_statement',3,'p_jump_statement_1','c_parser.py',1386),
  ('jump_statement -> BREAK SEMI','jump_statement',2,'p_jump_statement_2','c_parser.py',1390),
  ('jump_statement -> CONTINUE SEMI','jump_statement',2,'p_jump_statement_3','c_parser.py',1394),
  ('jump_statement -> RETURN expression SEMI','jump_statement',3,'p_jump_statement_4','c_parser.py',1398),
  ('jump_statement -> RETURN SEMI','jump_statement',2,'p_jump_statement_4','c_parser.py',1399),
  ('expression_statement -> expression_opt SEMI','expression_statement',2,'p_expression_statement','c_parser.py',1404),
  ('expression -> assignment_expression','expression',1,'p_expression','c_parser.py',1411),
  ('expression -> expression COMMA assignment_expression','expression',3,'p_expression','c_parser.py',1412),
  ('typedef_name -> TYPEID','typedef_name',1,'p_typedef_name','c_parser.py',1424),
  ('assignment_expression -> conditional_expression','assignment_expression',1,'p_assignment_expression','c_parser.py',1428),
  ('assignment_expression -> unary_expression assignment_operator assignment_expression','assignment_expression',3,'p_assignment_expression','c_parser.py',1429),
  ('assignment_operator -> EQUALS','assignment_operator',1,'p_assignment_operator','c_parser.py',1442),
  ('assignment_operator -> XOREQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1443),
  ('assignment_operator -> TIMESEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1444),
  ('assignment_operator -> DIVEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1445),
  ('assignment_operator -> MODEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1446),
  ('assignment_operator -> PLUSEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1447),
  ('assignment_operator -> MINUSEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1448),
  ('assignment_operator -> LSHIFTEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1449),
  ('assignment_operator -> RSHIFTEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1450),
  ('assignment_operator -> ANDEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1451),
  ('assignment_operator -> OREQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1452),
  ('constant_expression -> conditional_expression','constant_expression',1,'p_constant_expression','c_parser.py',1457),
  ('conditional_expression -> binary_expression','conditional_expression',1,'p_conditional_expression','c_parser.py',1461),
  ('conditional_expression -> binary_expression CONDOP expression COLON conditional_expression','conditional_expression',5,'p_conditional_expression','c_parser.py',1462),
  ('binary_expression -> cast_expression','binary_expression',1,'p_binary_expression','c_parser.py',1470),
  ('binary_expression -> binary_expression TIMES binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1471),
  ('binary_expression -> binary_expression DIVIDE binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1472),
  ('binary_expression -> binary_expression MOD binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1473),
  ('binary_expression -> binary_expression PLUS binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1474),
  ('binary_expression -> binary_expression MINUS binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1475),
  ('binary_expression -> binary_expression RSHIFT binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1476),
  ('binary_expression -> binary_expression LSHIFT binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1477),
  ('binary_expression -> binary_expression LT binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1478),
  ('binary_expression -> binary_expression LE binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1479),
  ('binary_expression -> binary_expression GE binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1480),
  ('binary_expression -> binary_expression GT binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1481),
  ('binary_expression -> binary_expression EQ binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1482),
  ('binary_expression -> binary_expression NE binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1483),
  ('binary_expression -> binary_expression AND binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1484),
  ('binary_expression -> binary_expression OR binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1485),
  ('binary_expression -> binary_expression XOR binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1486),
  ('binary_expression -> binary_expression LAND binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1487),
  ('binary_expression -> binary_expression LOR binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1488),
  ('cast_expression -> unary_expression','cast_expression',1,'p_cast_expression_1','c_parser.py',1496),
  ('cast_expression -> LPAREN type_name RPAREN cast_expression','cast_expression',4,'p_cast_expression_2','c_parser.py',1500),
  ('unary_expression -> postfix_expression','unary_expression',1,'p_unary_expression_1','c_parser.py',1504),
  ('unary_expression -> PLUSPLUS unary_expression','unary_expression',2,'p_unary_expression_2','c_parser.py',1508),
  ('unary_expression -> MINUSMINUS unary_expression','unary_expression',2,'p_unary_expression_2','c_parser.py',1509),
  ('unary_expression -> unary_operator cast_expression','unary_expression',2,'p_unary_expression_2','c_parser.py',1510),
  ('unary_expression -> SIZEOF unary_expression','unary_expression',2,'p_unary_expression_3','c_parser.py',1515),
  ('unary_expression -> SIZEOF LPAREN type_name RPAREN','unary_expression',4,'p_unary_expression_3','c_parser.py',1516),
  ('unary_operator -> AND','unary_operator',1,'p_unary_operator','c_parser.py',1524),
  ('unary_operator -> TIMES','unary_operator',1,'p_unary_operator','c_parser.py',1525),
  ('unary_operator -> PLUS','unary_operator',1,'p_unary_operator','c_parser.py',1526),
  ('unary_operator -> MINUS','unary_operator',1,'p_unary_operator','c_parser.py',1527),
  ('unary_operator -> NOT','unary_operator',1,'p_unary_operator','c_parser.py',1528),
  ('unary_operator -> LNOT','unary_operator',1,'p_unary_operator','c_parser.py',1529),
  ('postfix_expression -> primary_expression','postfix_expression',1,'p_postfix_expression_1','c_parser.py',1534),
  ('postfix_expression -> postfix_expression LBRACKET expression RBRACKET','postfix_expression',4,'p_postfix_expression_2','c_parser.py',1538),
  ('postfix_expression -> postfix_expression LPAREN argument_expression_list RPAREN','postfix_expression',4,'p_postfix_expression_3','c_parser.py',1542),
  ('postfix_expression -> postfix_expression LPAREN RPAREN','postfix_expression',3,'p_postfix_expression_3','c_parser.py',1543),
  ('postfix_expression -> postfix_expression PERIOD ID','postfix_expression',3,'p_postfix_expression_4','c_parser.py',1548),
  ('postfix_expression -> postfix_expression PERIOD TYPEID','postfix_expression',3,'p_postfix_expression_4','c_parser.py',1549),
  ('postfix_expression -> postfix_expression ARROW ID','postfix_expression',3,'p_postfix_expression_4','c_parser.py',1550),
  ('postfix_expression -> postfix_expression ARROW TYPEID','postfix_expression',3,'p_postfix_expression_4','c_parser.py',1551),
  ('postfix_expression -> postfix_expression PLUSPLUS','postfix_expression',2,'p_postfix_expression_5','c_parser.py',1557),
  ('postfix_expression -> postfix_expression MINUSMINUS','postfix_expression',2,'p_postfix_expression_5','c_parser.py',1558),
  ('postfix_expression -> LPAREN type_name RPAREN brace_open initializer_list brace_close','postfix_expression',6,'p_postfix_expression_6','c_parser.py',1563),
  ('postfix_expression -> LPAREN type_name RPAREN brace_open initializer_list COMMA brace_close','postfix_expression',7,'p_postfix_expression_6','c_parser.py',1564),
  ('primary_expression -> identifier','primary_expression',1,'p_primary_expression_1','c_parser.py',1569),
  ('primary_expression -> constant','primary_expression',1,'p_primary_expression_2','c_parser.py',1573),
  ('primary_expression -> unified_string_literal','primary_expression',1,'p_primary_expression_3','c_parser.py',1577),
  ('primary_expression -> unified_wstring_literal','primary_expression',1,'p_primary_expression_3','c_parser.py',1578),
  ('primary_expression -> LPAREN expression RPAREN','primary_expression',3,'p_primary_expression_4','c_parser.py',1583),
  ('primary_expression -> OFFSETOF LPAREN type_name COMMA identifier RPAREN','primary_expression',6,'p_primary_expression_5','c_parser.py',1587),
  ('argument_expression_list -> assignment_expression','argument_expression_list',1,'p_argument_expression_list','c_parser.py',1595),
  ('argument_expression_list -> argument_expression_list COMMA assignment_expression','argument_expression_list',3,'p_argument_expression_list','c_parser.py',1596),
  ('identifier -> ID','identifier',1,'p_identifier','c_parser.py',1605),
  ('constant -> INT_CONST_DEC','constant',1,'p_constant_1','c_parser.py',1609),
  ('constant -> INT_CONST_OCT','constant',1,'p_constant_1','c_parser.py',1610),
  ('constant -> INT_CONST_HEX','constant',1,'p_constant_1','c_parser.py',1611),
  ('constant -> INT_CONST_BIN','constant',1,'p_constant_1','c_parser.py',1612),
  ('constant -> FLOAT_CONST','constant',1,'p_constant_2','c_parser.py',1618),
  ('constant -> HEX_FLOAT_CONST','constant',1,'p_constant_2','c_parser.py',1619),
  ('constant -> CHAR_CONST','constant',1,'p_constant_3','c_parser.py',1625),
  ('constant -> WCHAR_CONST','constant',1,'p_constant_3','c_parser.py',1626),
  ('unified_string_literal -> STRING_LITERAL','unified_string_literal',1,'p_unified_string_literal','c_parser.py',1637),
  ('unified_string_literal -> unified_string_literal STRING_LITERAL','unified_string_literal',2,'p_unified_string_literal','c_parser.py',1638),
  ('unified_wstring_literal -> WSTRING_LITERAL','unified_wstring_literal',1,'p_unified_wstring_literal','c_parser.py',1648),
  ('unified_wstring_literal -> unified_wstring_literal WSTRING_LITERAL','unified_wstring_literal',2,'p_unified_wstring_literal','c_parser.py',1649),
  ('brace_open -> LBRACE','brace_open',1,'p_brace_open','c_parser.py',1659),
  ('brace_close -> RBRACE','brace_close',1,'p_brace_close','c_parser.py',1664),
  ('empty -> <empty>','empty',0,'p_empty','c_parser.py',1669),
]
PK�[Q ���c_parser.pynu�[���#------------------------------------------------------------------------------
# pycparser: c_parser.py
#
# CParser class: Parser and AST builder for the C language
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#------------------------------------------------------------------------------
import re

from ply import yacc

from . import c_ast
from .c_lexer import CLexer
from .plyparser import PLYParser, Coord, ParseError
from .ast_transforms import fix_switch_cases


class CParser(PLYParser):
    def __init__(
            self,
            lex_optimize=True,
            lextab='pycparser.lextab',
            yacc_optimize=True,
            yacctab='pycparser.yacctab',
            yacc_debug=False,
            taboutputdir=''):
        """ Create a new CParser.

            Some arguments for controlling the debug/optimization
            level of the parser are provided. The defaults are
            tuned for release/performance mode.
            The simple rules for using them are:
            *) When tweaking CParser/CLexer, set these to False
            *) When releasing a stable parser, set to True

            lex_optimize:
                Set to False when you're modifying the lexer.
                Otherwise, changes in the lexer won't be used, if
                some lextab.py file exists.
                When releasing with a stable lexer, set to True
                to save the re-generation of the lexer table on
                each run.

            lextab:
                Points to the lex table that's used for optimized
                mode. Only if you're modifying the lexer and want
                some tests to avoid re-generating the table, make
                this point to a local lex table file (that's been
                earlier generated with lex_optimize=True)

            yacc_optimize:
                Set to False when you're modifying the parser.
                Otherwise, changes in the parser won't be used, if
                some parsetab.py file exists.
                When releasing with a stable parser, set to True
                to save the re-generation of the parser table on
                each run.

            yacctab:
                Points to the yacc table that's used for optimized
                mode. Only if you're modifying the parser, make
                this point to a local yacc table file

            yacc_debug:
                Generate a parser.out file that explains how yacc
                built the parsing table from the grammar.

            taboutputdir:
                Set this parameter to control the location of generated
                lextab and yacctab files.
        """
        self.clex = CLexer(
            error_func=self._lex_error_func,
            on_lbrace_func=self._lex_on_lbrace_func,
            on_rbrace_func=self._lex_on_rbrace_func,
            type_lookup_func=self._lex_type_lookup_func)

        self.clex.build(
            optimize=lex_optimize,
            lextab=lextab,
            outputdir=taboutputdir)
        self.tokens = self.clex.tokens

        rules_with_opt = [
            'abstract_declarator',
            'assignment_expression',
            'declaration_list',
            'declaration_specifiers',
            'designation',
            'expression',
            'identifier_list',
            'init_declarator_list',
            'initializer_list',
            'parameter_type_list',
            'specifier_qualifier_list',
            'block_item_list',
            'type_qualifier_list',
            'struct_declarator_list'
        ]

        for rule in rules_with_opt:
            self._create_opt_rule(rule)

        self.cparser = yacc.yacc(
            module=self,
            start='translation_unit_or_empty',
            debug=yacc_debug,
            optimize=yacc_optimize,
            tabmodule=yacctab,
            outputdir=taboutputdir)

        # Stack of scopes for keeping track of symbols. _scope_stack[-1] is
        # the current (topmost) scope. Each scope is a dictionary that
        # specifies whether a name is a type. If _scope_stack[n][name] is
        # True, 'name' is currently a type in the scope. If it's False,
        # 'name' is used in the scope but not as a type (for instance, if we
        # saw: int name;
        # If 'name' is not a key in _scope_stack[n] then 'name' was not defined
        # in this scope at all.
        self._scope_stack = [dict()]

        # Keeps track of the last token given to yacc (the lookahead token)
        self._last_yielded_token = None

    def parse(self, text, filename='', debuglevel=0):
        """ Parses C code and returns an AST.

            text:
                A string containing the C source code

            filename:
                Name of the file being parsed (for meaningful
                error messages)

            debuglevel:
                Debug level to yacc
        """
        self.clex.filename = filename
        self.clex.reset_lineno()
        self._scope_stack = [dict()]
        self._last_yielded_token = None
        return self.cparser.parse(
                input=text,
                lexer=self.clex,
                debug=debuglevel)

    ######################--   PRIVATE   --######################

    def _push_scope(self):
        self._scope_stack.append(dict())

    def _pop_scope(self):
        assert len(self._scope_stack) > 1
        self._scope_stack.pop()

    def _add_typedef_name(self, name, coord):
        """ Add a new typedef name (ie a TYPEID) to the current scope
        """
        if not self._scope_stack[-1].get(name, True):
            self._parse_error(
                "Typedef %r previously declared as non-typedef "
                "in this scope" % name, coord)
        self._scope_stack[-1][name] = True

    def _add_identifier(self, name, coord):
        """ Add a new object, function, or enum member name (ie an ID) to the
            current scope
        """
        if self._scope_stack[-1].get(name, False):
            self._parse_error(
                "Non-typedef %r previously declared as typedef "
                "in this scope" % name, coord)
        self._scope_stack[-1][name] = False

    def _is_type_in_scope(self, name):
        """ Is *name* a typedef-name in the current scope?
        """
        for scope in reversed(self._scope_stack):
            # If name is an identifier in this scope it shadows typedefs in
            # higher scopes.
            in_scope = scope.get(name)
            if in_scope is not None: return in_scope
        return False

    def _lex_error_func(self, msg, line, column):
        self._parse_error(msg, self._coord(line, column))

    def _lex_on_lbrace_func(self):
        self._push_scope()

    def _lex_on_rbrace_func(self):
        self._pop_scope()

    def _lex_type_lookup_func(self, name):
        """ Looks up types that were previously defined with
            typedef.
            Passed to the lexer for recognizing identifiers that
            are types.
        """
        is_type = self._is_type_in_scope(name)
        return is_type

    def _get_yacc_lookahead_token(self):
        """ We need access to yacc's lookahead token in certain cases.
            This is the last token yacc requested from the lexer, so we
            ask the lexer.
        """
        return self.clex.last_token

    # To understand what's going on here, read sections A.8.5 and
    # A.8.6 of K&R2 very carefully.
    #
    # A C type consists of a basic type declaration, with a list
    # of modifiers. For example:
    #
    # int *c[5];
    #
    # The basic declaration here is 'int c', and the pointer and
    # the array are the modifiers.
    #
    # Basic declarations are represented by TypeDecl (from module c_ast) and the
    # modifiers are FuncDecl, PtrDecl and ArrayDecl.
    #
    # The standard states that whenever a new modifier is parsed, it should be
    # added to the end of the list of modifiers. For example:
    #
    # K&R2 A.8.6.2: Array Declarators
    #
    # In a declaration T D where D has the form
    #   D1 [constant-expression-opt]
    # and the type of the identifier in the declaration T D1 is
    # "type-modifier T", the type of the
    # identifier of D is "type-modifier array of T"
    #
    # This is what this method does. The declarator it receives
    # can be a list of declarators ending with TypeDecl. It
    # tacks the modifier to the end of this list, just before
    # the TypeDecl.
    #
    # Additionally, the modifier may be a list itself. This is
    # useful for pointers, that can come as a chain from the rule
    # p_pointer. In this case, the whole modifier list is spliced
    # into the new location.
    def _type_modify_decl(self, decl, modifier):
        """ Tacks a type modifier on a declarator, and returns
            the modified declarator.

            Note: the declarator and modifier may be modified
        """
        #~ print '****'
        #~ decl.show(offset=3)
        #~ modifier.show(offset=3)
        #~ print '****'

        modifier_head = modifier
        modifier_tail = modifier

        # The modifier may be a nested list. Reach its tail.
        #
        while modifier_tail.type:
            modifier_tail = modifier_tail.type

        # If the decl is a basic type, just tack the modifier onto
        # it
        #
        if isinstance(decl, c_ast.TypeDecl):
            modifier_tail.type = decl
            return modifier
        else:
            # Otherwise, the decl is a list of modifiers. Reach
            # its tail and splice the modifier onto the tail,
            # pointing to the underlying basic type.
            #
            decl_tail = decl

            while not isinstance(decl_tail.type, c_ast.TypeDecl):
                decl_tail = decl_tail.type

            modifier_tail.type = decl_tail.type
            decl_tail.type = modifier_head
            return decl

    # Due to the order in which declarators are constructed,
    # they have to be fixed in order to look like a normal AST.
    #
    # When a declaration arrives from syntax construction, it has
    # these problems:
    # * The innermost TypeDecl has no type (because the basic
    #   type is only known at the uppermost declaration level)
    # * The declaration has no variable name, since that is saved
    #   in the innermost TypeDecl
    # * The typename of the declaration is a list of type
    #   specifiers, and not a node. Here, basic identifier types
    #   should be separated from more complex types like enums
    #   and structs.
    #
    # This method fixes these problems.
    #
    def _fix_decl_name_type(self, decl, typename):
        """ Fixes a declaration. Modifies decl.
        """
        # Reach the underlying basic type
        #
        type = decl
        while not isinstance(type, c_ast.TypeDecl):
            type = type.type

        decl.name = type.declname
        type.quals = decl.quals

        # The typename is a list of types. If any type in this
        # list isn't an IdentifierType, it must be the only
        # type in the list (it's illegal to declare "int enum ..")
        # If all the types are basic, they're collected in the
        # IdentifierType holder.
        #
        for tn in typename:
            if not isinstance(tn, c_ast.IdentifierType):
                if len(typename) > 1:
                    self._parse_error(
                        "Invalid multiple types specified", tn.coord)
                else:
                    type.type = tn
                    return decl

        if not typename:
            # Functions default to returning int
            #
            if not isinstance(decl.type, c_ast.FuncDecl):
                self._parse_error(
                        "Missing type in declaration", decl.coord)
            type.type = c_ast.IdentifierType(
                    ['int'],
                    coord=decl.coord)
        else:
            # At this point, we know that typename is a list of IdentifierType
            # nodes. Concatenate all the names into a single list.
            #
            type.type = c_ast.IdentifierType(
                [name for id in typename for name in id.names],
                coord=typename[0].coord)
        return decl

    def _add_declaration_specifier(self, declspec, newspec, kind):
        """ Declaration specifiers are represented by a dictionary
            with the entries:
            * qual: a list of type qualifiers
            * storage: a list of storage type qualifiers
            * type: a list of type specifiers
            * function: a list of function specifiers

            This method is given a declaration specifier, and a
            new specifier of a given kind.
            Returns the declaration specifier, with the new
            specifier incorporated.
        """
        spec = declspec or dict(qual=[], storage=[], type=[], function=[])
        spec[kind].insert(0, newspec)
        return spec

    def _build_declarations(self, spec, decls, typedef_namespace=False):
        """ Builds a list of declarations all sharing the given specifiers.
            If typedef_namespace is true, each declared name is added
            to the "typedef namespace", which also includes objects,
            functions, and enum constants.
        """
        is_typedef = 'typedef' in spec['storage']
        declarations = []

        # Bit-fields are allowed to be unnamed.
        #
        if decls[0].get('bitsize') is not None:
            pass

        # When redeclaring typedef names as identifiers in inner scopes, a
        # problem can occur where the identifier gets grouped into
        # spec['type'], leaving decl as None.  This can only occur for the
        # first declarator.
        #
        elif decls[0]['decl'] is None:
            if len(spec['type']) < 2 or len(spec['type'][-1].names) != 1 or \
                    not self._is_type_in_scope(spec['type'][-1].names[0]):
                coord = '?'
                for t in spec['type']:
                    if hasattr(t, 'coord'):
                        coord = t.coord
                        break
                self._parse_error('Invalid declaration', coord)

            # Make this look as if it came from "direct_declarator:ID"
            decls[0]['decl'] = c_ast.TypeDecl(
                declname=spec['type'][-1].names[0],
                type=None,
                quals=None,
                coord=spec['type'][-1].coord)
            # Remove the "new" type's name from the end of spec['type']
            del spec['type'][-1]

        # A similar problem can occur where the declaration ends up looking
        # like an abstract declarator.  Give it a name if this is the case.
        #
        elif not isinstance(decls[0]['decl'],
                (c_ast.Struct, c_ast.Union, c_ast.IdentifierType)):
            decls_0_tail = decls[0]['decl']
            while not isinstance(decls_0_tail, c_ast.TypeDecl):
                decls_0_tail = decls_0_tail.type
            if decls_0_tail.declname is None:
                decls_0_tail.declname = spec['type'][-1].names[0]
                del spec['type'][-1]

        for decl in decls:
            assert decl['decl'] is not None
            if is_typedef:
                declaration = c_ast.Typedef(
                    name=None,
                    quals=spec['qual'],
                    storage=spec['storage'],
                    type=decl['decl'],
                    coord=decl['decl'].coord)
            else:
                declaration = c_ast.Decl(
                    name=None,
                    quals=spec['qual'],
                    storage=spec['storage'],
                    funcspec=spec['function'],
                    type=decl['decl'],
                    init=decl.get('init'),
                    bitsize=decl.get('bitsize'),
                    coord=decl['decl'].coord)

            if isinstance(declaration.type,
                    (c_ast.Struct, c_ast.Union, c_ast.IdentifierType)):
                fixed_decl = declaration
            else:
                fixed_decl = self._fix_decl_name_type(declaration, spec['type'])

            # Add the type name defined by typedef to a
            # symbol table (for usage in the lexer)
            #
            if typedef_namespace:
                if is_typedef:
                    self._add_typedef_name(fixed_decl.name, fixed_decl.coord)
                else:
                    self._add_identifier(fixed_decl.name, fixed_decl.coord)

            declarations.append(fixed_decl)

        return declarations

    def _build_function_definition(self, spec, decl, param_decls, body):
        """ Builds a function definition.
        """
        assert 'typedef' not in spec['storage']

        declaration = self._build_declarations(
            spec=spec,
            decls=[dict(decl=decl, init=None)],
            typedef_namespace=True)[0]

        return c_ast.FuncDef(
            decl=declaration,
            param_decls=param_decls,
            body=body,
            coord=decl.coord)

    def _select_struct_union_class(self, token):
        """ Given a token (either STRUCT or UNION), selects the
            appropriate AST class.
        """
        if token == 'struct':
            return c_ast.Struct
        else:
            return c_ast.Union

    ##
    ## Precedence and associativity of operators
    ##
    precedence = (
        ('left', 'LOR'),
        ('left', 'LAND'),
        ('left', 'OR'),
        ('left', 'XOR'),
        ('left', 'AND'),
        ('left', 'EQ', 'NE'),
        ('left', 'GT', 'GE', 'LT', 'LE'),
        ('left', 'RSHIFT', 'LSHIFT'),
        ('left', 'PLUS', 'MINUS'),
        ('left', 'TIMES', 'DIVIDE', 'MOD')
    )

    ##
    ## Grammar productions
    ## Implementation of the BNF defined in K&R2 A.13
    ##

    # Wrapper around a translation unit, to allow for empty input.
    # Not strictly part of the C99 Grammar, but useful in practice.
    #
    def p_translation_unit_or_empty(self, p):
        """ translation_unit_or_empty   : translation_unit
                                        | empty
        """
        if p[1] is None:
            p[0] = c_ast.FileAST([])
        else:
            p[0] = c_ast.FileAST(p[1])

    def p_translation_unit_1(self, p):
        """ translation_unit    : external_declaration
        """
        # Note: external_declaration is already a list
        #
        p[0] = p[1]

    def p_translation_unit_2(self, p):
        """ translation_unit    : translation_unit external_declaration
        """
        if p[2] is not None:
            p[1].extend(p[2])
        p[0] = p[1]

    # Declarations always come as lists (because they can be
    # several in one line), so we wrap the function definition
    # into a list as well, to make the return value of
    # external_declaration homogenous.
    #
    def p_external_declaration_1(self, p):
        """ external_declaration    : function_definition
        """
        p[0] = [p[1]]

    def p_external_declaration_2(self, p):
        """ external_declaration    : declaration
        """
        p[0] = p[1]

    def p_external_declaration_3(self, p):
        """ external_declaration    : pp_directive
        """
        p[0] = p[1]

    def p_external_declaration_4(self, p):
        """ external_declaration    : SEMI
        """
        p[0] = None

    def p_pp_directive(self, p):
        """ pp_directive  : PPHASH
        """
        self._parse_error('Directives not supported yet',
            self._coord(p.lineno(1)))

    # In function definitions, the declarator can be followed by
    # a declaration list, for old "K&R style" function definitios.
    #
    def p_function_definition_1(self, p):
        """ function_definition : declarator declaration_list_opt compound_statement
        """
        # no declaration specifiers - 'int' becomes the default type
        spec = dict(
            qual=[],
            storage=[],
            type=[c_ast.IdentifierType(['int'],
                                       coord=self._coord(p.lineno(1)))],
            function=[])

        p[0] = self._build_function_definition(
            spec=spec,
            decl=p[1],
            param_decls=p[2],
            body=p[3])

    def p_function_definition_2(self, p):
        """ function_definition : declaration_specifiers declarator declaration_list_opt compound_statement
        """
        spec = p[1]

        p[0] = self._build_function_definition(
            spec=spec,
            decl=p[2],
            param_decls=p[3],
            body=p[4])

    def p_statement(self, p):
        """ statement   : labeled_statement
                        | expression_statement
                        | compound_statement
                        | selection_statement
                        | iteration_statement
                        | jump_statement
        """
        p[0] = p[1]

    # In C, declarations can come several in a line:
    #   int x, *px, romulo = 5;
    #
    # However, for the AST, we will split them to separate Decl
    # nodes.
    #
    # This rule splits its declarations and always returns a list
    # of Decl nodes, even if it's one element long.
    #
    def p_decl_body(self, p):
        """ decl_body : declaration_specifiers init_declarator_list_opt
        """
        spec = p[1]

        # p[2] (init_declarator_list_opt) is either a list or None
        #
        if p[2] is None:
            # By the standard, you must have at least one declarator unless
            # declaring a structure tag, a union tag, or the members of an
            # enumeration.
            #
            ty = spec['type']
            s_u_or_e = (c_ast.Struct, c_ast.Union, c_ast.Enum)
            if len(ty) == 1 and isinstance(ty[0], s_u_or_e):
                decls = [c_ast.Decl(
                    name=None,
                    quals=spec['qual'],
                    storage=spec['storage'],
                    funcspec=spec['function'],
                    type=ty[0],
                    init=None,
                    bitsize=None,
                    coord=ty[0].coord)]

            # However, this case can also occur on redeclared identifiers in
            # an inner scope.  The trouble is that the redeclared type's name
            # gets grouped into declaration_specifiers; _build_declarations
            # compensates for this.
            #
            else:
                decls = self._build_declarations(
                    spec=spec,
                    decls=[dict(decl=None, init=None)],
                    typedef_namespace=True)

        else:
            decls = self._build_declarations(
                spec=spec,
                decls=p[2],
                typedef_namespace=True)

        p[0] = decls

    # The declaration has been split to a decl_body sub-rule and
    # SEMI, because having them in a single rule created a problem
    # for defining typedefs.
    #
    # If a typedef line was directly followed by a line using the
    # type defined with the typedef, the type would not be
    # recognized. This is because to reduce the declaration rule,
    # the parser's lookahead asked for the token after SEMI, which
    # was the type from the next line, and the lexer had no chance
    # to see the updated type symbol table.
    #
    # Splitting solves this problem, because after seeing SEMI,
    # the parser reduces decl_body, which actually adds the new
    # type into the table to be seen by the lexer before the next
    # line is reached.
    def p_declaration(self, p):
        """ declaration : decl_body SEMI
        """
        p[0] = p[1]

    # Since each declaration is a list of declarations, this
    # rule will combine all the declarations and return a single
    # list
    #
    def p_declaration_list(self, p):
        """ declaration_list    : declaration
                                | declaration_list declaration
        """
        p[0] = p[1] if len(p) == 2 else p[1] + p[2]

    def p_declaration_specifiers_1(self, p):
        """ declaration_specifiers  : type_qualifier declaration_specifiers_opt
        """
        p[0] = self._add_declaration_specifier(p[2], p[1], 'qual')

    def p_declaration_specifiers_2(self, p):
        """ declaration_specifiers  : type_specifier declaration_specifiers_opt
        """
        p[0] = self._add_declaration_specifier(p[2], p[1], 'type')

    def p_declaration_specifiers_3(self, p):
        """ declaration_specifiers  : storage_class_specifier declaration_specifiers_opt
        """
        p[0] = self._add_declaration_specifier(p[2], p[1], 'storage')

    def p_declaration_specifiers_4(self, p):
        """ declaration_specifiers  : function_specifier declaration_specifiers_opt
        """
        p[0] = self._add_declaration_specifier(p[2], p[1], 'function')

    def p_storage_class_specifier(self, p):
        """ storage_class_specifier : AUTO
                                    | REGISTER
                                    | STATIC
                                    | EXTERN
                                    | TYPEDEF
        """
        p[0] = p[1]

    def p_function_specifier(self, p):
        """ function_specifier  : INLINE
        """
        p[0] = p[1]

    def p_type_specifier_1(self, p):
        """ type_specifier  : VOID
                            | _BOOL
                            | CHAR
                            | SHORT
                            | INT
                            | LONG
                            | FLOAT
                            | DOUBLE
                            | _COMPLEX
                            | SIGNED
                            | UNSIGNED
        """
        p[0] = c_ast.IdentifierType([p[1]], coord=self._coord(p.lineno(1)))

    def p_type_specifier_2(self, p):
        """ type_specifier  : typedef_name
                            | enum_specifier
                            | struct_or_union_specifier
        """
        p[0] = p[1]

    def p_type_qualifier(self, p):
        """ type_qualifier  : CONST
                            | RESTRICT
                            | VOLATILE
        """
        p[0] = p[1]

    def p_init_declarator_list_1(self, p):
        """ init_declarator_list    : init_declarator
                                    | init_declarator_list COMMA init_declarator
        """
        p[0] = p[1] + [p[3]] if len(p) == 4 else [p[1]]

    # If the code is declaring a variable that was declared a typedef in an
    # outer scope, yacc will think the name is part of declaration_specifiers,
    # not init_declarator, and will then get confused by EQUALS.  Pass None
    # up in place of declarator, and handle this at a higher level.
    #
    def p_init_declarator_list_2(self, p):
        """ init_declarator_list    : EQUALS initializer
        """
        p[0] = [dict(decl=None, init=p[2])]

    # Similarly, if the code contains duplicate typedefs of, for example,
    # array types, the array portion will appear as an abstract declarator.
    #
    def p_init_declarator_list_3(self, p):
        """ init_declarator_list    : abstract_declarator
        """
        p[0] = [dict(decl=p[1], init=None)]

    # Returns a {decl=<declarator> : init=<initializer>} dictionary
    # If there's no initializer, uses None
    #
    def p_init_declarator(self, p):
        """ init_declarator : declarator
                            | declarator EQUALS initializer
        """
        p[0] = dict(decl=p[1], init=(p[3] if len(p) > 2 else None))

    def p_specifier_qualifier_list_1(self, p):
        """ specifier_qualifier_list    : type_qualifier specifier_qualifier_list_opt
        """
        p[0] = self._add_declaration_specifier(p[2], p[1], 'qual')

    def p_specifier_qualifier_list_2(self, p):
        """ specifier_qualifier_list    : type_specifier specifier_qualifier_list_opt
        """
        p[0] = self._add_declaration_specifier(p[2], p[1], 'type')

    # TYPEID is allowed here (and in other struct/enum related tag names), because
    # struct/enum tags reside in their own namespace and can be named the same as types
    #
    def p_struct_or_union_specifier_1(self, p):
        """ struct_or_union_specifier   : struct_or_union ID
                                        | struct_or_union TYPEID
        """
        klass = self._select_struct_union_class(p[1])
        p[0] = klass(
            name=p[2],
            decls=None,
            coord=self._coord(p.lineno(2)))

    def p_struct_or_union_specifier_2(self, p):
        """ struct_or_union_specifier : struct_or_union brace_open struct_declaration_list brace_close
        """
        klass = self._select_struct_union_class(p[1])
        p[0] = klass(
            name=None,
            decls=p[3],
            coord=self._coord(p.lineno(2)))

    def p_struct_or_union_specifier_3(self, p):
        """ struct_or_union_specifier   : struct_or_union ID brace_open struct_declaration_list brace_close
                                        | struct_or_union TYPEID brace_open struct_declaration_list brace_close
        """
        klass = self._select_struct_union_class(p[1])
        p[0] = klass(
            name=p[2],
            decls=p[4],
            coord=self._coord(p.lineno(2)))

    def p_struct_or_union(self, p):
        """ struct_or_union : STRUCT
                            | UNION
        """
        p[0] = p[1]

    # Combine all declarations into a single list
    #
    def p_struct_declaration_list(self, p):
        """ struct_declaration_list     : struct_declaration
                                        | struct_declaration_list struct_declaration
        """
        p[0] = p[1] if len(p) == 2 else p[1] + p[2]

    def p_struct_declaration_1(self, p):
        """ struct_declaration : specifier_qualifier_list struct_declarator_list_opt SEMI
        """
        spec = p[1]
        assert 'typedef' not in spec['storage']

        if p[2] is not None:
            decls = self._build_declarations(
                spec=spec,
                decls=p[2])

        elif len(spec['type']) == 1:
            # Anonymous struct/union, gcc extension, C1x feature.
            # Although the standard only allows structs/unions here, I see no
            # reason to disallow other types since some compilers have typedefs
            # here, and pycparser isn't about rejecting all invalid code.
            #
            node = spec['type'][0]
            if isinstance(node, c_ast.Node):
                decl_type = node
            else:
                decl_type = c_ast.IdentifierType(node)

            decls = self._build_declarations(
                spec=spec,
                decls=[dict(decl=decl_type)])

        else:
            # Structure/union members can have the same names as typedefs.
            # The trouble is that the member's name gets grouped into
            # specifier_qualifier_list; _build_declarations compensates.
            #
            decls = self._build_declarations(
                spec=spec,
                decls=[dict(decl=None, init=None)])

        p[0] = decls

    def p_struct_declaration_2(self, p):
        """ struct_declaration : specifier_qualifier_list abstract_declarator SEMI
        """
        # "Abstract declarator?!", you ask?  Structure members can have the
        # same names as typedefs.  The trouble is that the member's name gets
        # grouped into specifier_qualifier_list, leaving any remainder to
        # appear as an abstract declarator, as in:
        #   typedef int Foo;
        #   struct { Foo Foo[3]; };
        #
        p[0] = self._build_declarations(
                spec=p[1],
                decls=[dict(decl=p[2], init=None)])

    def p_struct_declarator_list(self, p):
        """ struct_declarator_list  : struct_declarator
                                    | struct_declarator_list COMMA struct_declarator
        """
        p[0] = p[1] + [p[3]] if len(p) == 4 else [p[1]]

    # struct_declarator passes up a dict with the keys: decl (for
    # the underlying declarator) and bitsize (for the bitsize)
    #
    def p_struct_declarator_1(self, p):
        """ struct_declarator : declarator
        """
        p[0] = {'decl': p[1], 'bitsize': None}

    def p_struct_declarator_2(self, p):
        """ struct_declarator   : declarator COLON constant_expression
                                | COLON constant_expression
        """
        if len(p) > 3:
            p[0] = {'decl': p[1], 'bitsize': p[3]}
        else:
            p[0] = {'decl': c_ast.TypeDecl(None, None, None), 'bitsize': p[2]}

    def p_enum_specifier_1(self, p):
        """ enum_specifier  : ENUM ID
                            | ENUM TYPEID
        """
        p[0] = c_ast.Enum(p[2], None, self._coord(p.lineno(1)))

    def p_enum_specifier_2(self, p):
        """ enum_specifier  : ENUM brace_open enumerator_list brace_close
        """
        p[0] = c_ast.Enum(None, p[3], self._coord(p.lineno(1)))

    def p_enum_specifier_3(self, p):
        """ enum_specifier  : ENUM ID brace_open enumerator_list brace_close
                            | ENUM TYPEID brace_open enumerator_list brace_close
        """
        p[0] = c_ast.Enum(p[2], p[4], self._coord(p.lineno(1)))

    def p_enumerator_list(self, p):
        """ enumerator_list : enumerator
                            | enumerator_list COMMA
                            | enumerator_list COMMA enumerator
        """
        if len(p) == 2:
            p[0] = c_ast.EnumeratorList([p[1]], p[1].coord)
        elif len(p) == 3:
            p[0] = p[1]
        else:
            p[1].enumerators.append(p[3])
            p[0] = p[1]

    def p_enumerator(self, p):
        """ enumerator  : ID
                        | ID EQUALS constant_expression
        """
        if len(p) == 2:
            enumerator = c_ast.Enumerator(
                        p[1], None,
                        self._coord(p.lineno(1)))
        else:
            enumerator = c_ast.Enumerator(
                        p[1], p[3],
                        self._coord(p.lineno(1)))
        self._add_identifier(enumerator.name, enumerator.coord)

        p[0] = enumerator

    def p_declarator_1(self, p):
        """ declarator  : direct_declarator
        """
        p[0] = p[1]

    def p_declarator_2(self, p):
        """ declarator  : pointer direct_declarator
        """
        p[0] = self._type_modify_decl(p[2], p[1])

    # Since it's impossible for a type to be specified after a pointer, assume
    # it's intended to be the name for this declaration.  _add_identifier will
    # raise an error if this TYPEID can't be redeclared.
    #
    def p_declarator_3(self, p):
        """ declarator  : pointer TYPEID
        """
        decl = c_ast.TypeDecl(
            declname=p[2],
            type=None,
            quals=None,
            coord=self._coord(p.lineno(2)))

        p[0] = self._type_modify_decl(decl, p[1])

    def p_direct_declarator_1(self, p):
        """ direct_declarator   : ID
        """
        p[0] = c_ast.TypeDecl(
            declname=p[1],
            type=None,
            quals=None,
            coord=self._coord(p.lineno(1)))

    def p_direct_declarator_2(self, p):
        """ direct_declarator   : LPAREN declarator RPAREN
        """
        p[0] = p[2]

    def p_direct_declarator_3(self, p):
        """ direct_declarator   : direct_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET
        """
        quals = (p[3] if len(p) > 5 else []) or []
        # Accept dimension qualifiers
        # Per C99 6.7.5.3 p7
        arr = c_ast.ArrayDecl(
            type=None,
            dim=p[4] if len(p) > 5 else p[3],
            dim_quals=quals,
            coord=p[1].coord)

        p[0] = self._type_modify_decl(decl=p[1], modifier=arr)

    def p_direct_declarator_4(self, p):
        """ direct_declarator   : direct_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKET
                                | direct_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKET
        """
        # Using slice notation for PLY objects doesn't work in Python 3 for the
        # version of PLY embedded with pycparser; see PLY Google Code issue 30.
        # Work around that here by listing the two elements separately.
        listed_quals = [item if isinstance(item, list) else [item]
            for item in [p[3],p[4]]]
        dim_quals = [qual for sublist in listed_quals for qual in sublist
            if qual is not None]
        arr = c_ast.ArrayDecl(
            type=None,
            dim=p[5],
            dim_quals=dim_quals,
            coord=p[1].coord)

        p[0] = self._type_modify_decl(decl=p[1], modifier=arr)

    # Special for VLAs
    #
    def p_direct_declarator_5(self, p):
        """ direct_declarator   : direct_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKET
        """
        arr = c_ast.ArrayDecl(
            type=None,
            dim=c_ast.ID(p[4], self._coord(p.lineno(4))),
            dim_quals=p[3] if p[3] != None else [],
            coord=p[1].coord)

        p[0] = self._type_modify_decl(decl=p[1], modifier=arr)

    def p_direct_declarator_6(self, p):
        """ direct_declarator   : direct_declarator LPAREN parameter_type_list RPAREN
                                | direct_declarator LPAREN identifier_list_opt RPAREN
        """
        func = c_ast.FuncDecl(
            args=p[3],
            type=None,
            coord=p[1].coord)

        # To see why _get_yacc_lookahead_token is needed, consider:
        #   typedef char TT;
        #   void foo(int TT) { TT = 10; }
        # Outside the function, TT is a typedef, but inside (starting and
        # ending with the braces) it's a parameter.  The trouble begins with
        # yacc's lookahead token.  We don't know if we're declaring or
        # defining a function until we see LBRACE, but if we wait for yacc to
        # trigger a rule on that token, then TT will have already been read
        # and incorrectly interpreted as TYPEID.  We need to add the
        # parameters to the scope the moment the lexer sees LBRACE.
        #
        if self._get_yacc_lookahead_token().type == "LBRACE":
            if func.args is not None:
                for param in func.args.params:
                    if isinstance(param, c_ast.EllipsisParam): break
                    self._add_identifier(param.name, param.coord)

        p[0] = self._type_modify_decl(decl=p[1], modifier=func)

    def p_pointer(self, p):
        """ pointer : TIMES type_qualifier_list_opt
                    | TIMES type_qualifier_list_opt pointer
        """
        coord = self._coord(p.lineno(1))
        # Pointer decls nest from inside out. This is important when different
        # levels have different qualifiers. For example:
        #
        #  char * const * p;
        #
        # Means "pointer to const pointer to char"
        #
        # While: 
        #
        #  char ** const p;
        #
        # Means "const pointer to pointer to char"
        #
        # So when we construct PtrDecl nestings, the leftmost pointer goes in
        # as the most nested type.
        nested_type = c_ast.PtrDecl(quals=p[2] or [], type=None, coord=coord)
        if len(p) > 3:
            tail_type = p[3]
            while tail_type.type is not None:
                tail_type = tail_type.type
            tail_type.type = nested_type
            p[0] = p[3]
        else:
            p[0] = nested_type

    def p_type_qualifier_list(self, p):
        """ type_qualifier_list : type_qualifier
                                | type_qualifier_list type_qualifier
        """
        p[0] = [p[1]] if len(p) == 2 else p[1] + [p[2]]

    def p_parameter_type_list(self, p):
        """ parameter_type_list : parameter_list
                                | parameter_list COMMA ELLIPSIS
        """
        if len(p) > 2:
            p[1].params.append(c_ast.EllipsisParam(self._coord(p.lineno(3))))

        p[0] = p[1]

    def p_parameter_list(self, p):
        """ parameter_list  : parameter_declaration
                            | parameter_list COMMA parameter_declaration
        """
        if len(p) == 2: # single parameter
            p[0] = c_ast.ParamList([p[1]], p[1].coord)
        else:
            p[1].params.append(p[3])
            p[0] = p[1]

    def p_parameter_declaration_1(self, p):
        """ parameter_declaration   : declaration_specifiers declarator
        """
        spec = p[1]
        if not spec['type']:
            spec['type'] = [c_ast.IdentifierType(['int'],
                coord=self._coord(p.lineno(1)))]
        p[0] = self._build_declarations(
            spec=spec,
            decls=[dict(decl=p[2])])[0]

    def p_parameter_declaration_2(self, p):
        """ parameter_declaration   : declaration_specifiers abstract_declarator_opt
        """
        spec = p[1]
        if not spec['type']:
            spec['type'] = [c_ast.IdentifierType(['int'],
                coord=self._coord(p.lineno(1)))]

        # Parameters can have the same names as typedefs.  The trouble is that
        # the parameter's name gets grouped into declaration_specifiers, making
        # it look like an old-style declaration; compensate.
        #
        if len(spec['type']) > 1 and len(spec['type'][-1].names) == 1 and \
                self._is_type_in_scope(spec['type'][-1].names[0]):
            decl = self._build_declarations(
                    spec=spec,
                    decls=[dict(decl=p[2], init=None)])[0]

        # This truly is an old-style parameter declaration
        #
        else:
            decl = c_ast.Typename(
                name='',
                quals=spec['qual'],
                type=p[2] or c_ast.TypeDecl(None, None, None),
                coord=self._coord(p.lineno(2)))
            typename = spec['type']
            decl = self._fix_decl_name_type(decl, typename)

        p[0] = decl

    def p_identifier_list(self, p):
        """ identifier_list : identifier
                            | identifier_list COMMA identifier
        """
        if len(p) == 2: # single parameter
            p[0] = c_ast.ParamList([p[1]], p[1].coord)
        else:
            p[1].params.append(p[3])
            p[0] = p[1]

    def p_initializer_1(self, p):
        """ initializer : assignment_expression
        """
        p[0] = p[1]

    def p_initializer_2(self, p):
        """ initializer : brace_open initializer_list_opt brace_close
                        | brace_open initializer_list COMMA brace_close
        """
        if p[2] is None:
            p[0] = c_ast.InitList([], self._coord(p.lineno(1)))
        else:
            p[0] = p[2]

    def p_initializer_list(self, p):
        """ initializer_list    : designation_opt initializer
                                | initializer_list COMMA designation_opt initializer
        """
        if len(p) == 3: # single initializer
            init = p[2] if p[1] is None else c_ast.NamedInitializer(p[1], p[2])
            p[0] = c_ast.InitList([init], p[2].coord)
        else:
            init = p[4] if p[3] is None else c_ast.NamedInitializer(p[3], p[4])
            p[1].exprs.append(init)
            p[0] = p[1]

    def p_designation(self, p):
        """ designation : designator_list EQUALS
        """
        p[0] = p[1]

    # Designators are represented as a list of nodes, in the order in which
    # they're written in the code.
    #
    def p_designator_list(self, p):
        """ designator_list : designator
                            | designator_list designator
        """
        p[0] = [p[1]] if len(p) == 2 else p[1] + [p[2]]

    def p_designator(self, p):
        """ designator  : LBRACKET constant_expression RBRACKET
                        | PERIOD identifier
        """
        p[0] = p[2]

    def p_type_name(self, p):
        """ type_name   : specifier_qualifier_list abstract_declarator_opt
        """
        #~ print '=========='
        #~ print p[1]
        #~ print p[2]
        #~ print p[2].children()
        #~ print '=========='

        typename = c_ast.Typename(
            name='',
            quals=p[1]['qual'],
            type=p[2] or c_ast.TypeDecl(None, None, None),
            coord=self._coord(p.lineno(2)))

        p[0] = self._fix_decl_name_type(typename, p[1]['type'])

    def p_abstract_declarator_1(self, p):
        """ abstract_declarator     : pointer
        """
        dummytype = c_ast.TypeDecl(None, None, None)
        p[0] = self._type_modify_decl(
            decl=dummytype,
            modifier=p[1])

    def p_abstract_declarator_2(self, p):
        """ abstract_declarator     : pointer direct_abstract_declarator
        """
        p[0] = self._type_modify_decl(p[2], p[1])

    def p_abstract_declarator_3(self, p):
        """ abstract_declarator     : direct_abstract_declarator
        """
        p[0] = p[1]

    # Creating and using direct_abstract_declarator_opt here
    # instead of listing both direct_abstract_declarator and the
    # lack of it in the beginning of _1 and _2 caused two
    # shift/reduce errors.
    #
    def p_direct_abstract_declarator_1(self, p):
        """ direct_abstract_declarator  : LPAREN abstract_declarator RPAREN """
        p[0] = p[2]

    def p_direct_abstract_declarator_2(self, p):
        """ direct_abstract_declarator  : direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKET
        """
        arr = c_ast.ArrayDecl(
            type=None,
            dim=p[3],
            dim_quals=[],
            coord=p[1].coord)

        p[0] = self._type_modify_decl(decl=p[1], modifier=arr)

    def p_direct_abstract_declarator_3(self, p):
        """ direct_abstract_declarator  : LBRACKET assignment_expression_opt RBRACKET
        """
        p[0] = c_ast.ArrayDecl(
            type=c_ast.TypeDecl(None, None, None),
            dim=p[2],
            dim_quals=[],
            coord=self._coord(p.lineno(1)))

    def p_direct_abstract_declarator_4(self, p):
        """ direct_abstract_declarator  : direct_abstract_declarator LBRACKET TIMES RBRACKET
        """
        arr = c_ast.ArrayDecl(
            type=None,
            dim=c_ast.ID(p[3], self._coord(p.lineno(3))),
            dim_quals=[],
            coord=p[1].coord)

        p[0] = self._type_modify_decl(decl=p[1], modifier=arr)

    def p_direct_abstract_declarator_5(self, p):
        """ direct_abstract_declarator  : LBRACKET TIMES RBRACKET
        """
        p[0] = c_ast.ArrayDecl(
            type=c_ast.TypeDecl(None, None, None),
            dim=c_ast.ID(p[3], self._coord(p.lineno(3))),
            dim_quals=[],
            coord=self._coord(p.lineno(1)))

    def p_direct_abstract_declarator_6(self, p):
        """ direct_abstract_declarator  : direct_abstract_declarator LPAREN parameter_type_list_opt RPAREN
        """
        func = c_ast.FuncDecl(
            args=p[3],
            type=None,
            coord=p[1].coord)

        p[0] = self._type_modify_decl(decl=p[1], modifier=func)

    def p_direct_abstract_declarator_7(self, p):
        """ direct_abstract_declarator  : LPAREN parameter_type_list_opt RPAREN
        """
        p[0] = c_ast.FuncDecl(
            args=p[2],
            type=c_ast.TypeDecl(None, None, None),
            coord=self._coord(p.lineno(1)))

    # declaration is a list, statement isn't. To make it consistent, block_item
    # will always be a list
    #
    def p_block_item(self, p):
        """ block_item  : declaration
                        | statement
        """
        p[0] = p[1] if isinstance(p[1], list) else [p[1]]

    # Since we made block_item a list, this just combines lists
    #
    def p_block_item_list(self, p):
        """ block_item_list : block_item
                            | block_item_list block_item
        """
        # Empty block items (plain ';') produce [None], so ignore them
        p[0] = p[1] if (len(p) == 2 or p[2] == [None]) else p[1] + p[2]

    def p_compound_statement_1(self, p):
        """ compound_statement : brace_open block_item_list_opt brace_close """
        p[0] = c_ast.Compound(
            block_items=p[2],
            coord=self._coord(p.lineno(1)))

    def p_labeled_statement_1(self, p):
        """ labeled_statement : ID COLON statement """
        p[0] = c_ast.Label(p[1], p[3], self._coord(p.lineno(1)))

    def p_labeled_statement_2(self, p):
        """ labeled_statement : CASE constant_expression COLON statement """
        p[0] = c_ast.Case(p[2], [p[4]], self._coord(p.lineno(1)))

    def p_labeled_statement_3(self, p):
        """ labeled_statement : DEFAULT COLON statement """
        p[0] = c_ast.Default([p[3]], self._coord(p.lineno(1)))

    def p_selection_statement_1(self, p):
        """ selection_statement : IF LPAREN expression RPAREN statement """
        p[0] = c_ast.If(p[3], p[5], None, self._coord(p.lineno(1)))

    def p_selection_statement_2(self, p):
        """ selection_statement : IF LPAREN expression RPAREN statement ELSE statement """
        p[0] = c_ast.If(p[3], p[5], p[7], self._coord(p.lineno(1)))

    def p_selection_statement_3(self, p):
        """ selection_statement : SWITCH LPAREN expression RPAREN statement """
        p[0] = fix_switch_cases(
                c_ast.Switch(p[3], p[5], self._coord(p.lineno(1))))

    def p_iteration_statement_1(self, p):
        """ iteration_statement : WHILE LPAREN expression RPAREN statement """
        p[0] = c_ast.While(p[3], p[5], self._coord(p.lineno(1)))

    def p_iteration_statement_2(self, p):
        """ iteration_statement : DO statement WHILE LPAREN expression RPAREN SEMI """
        p[0] = c_ast.DoWhile(p[5], p[2], self._coord(p.lineno(1)))

    def p_iteration_statement_3(self, p):
        """ iteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statement """
        p[0] = c_ast.For(p[3], p[5], p[7], p[9], self._coord(p.lineno(1)))

    def p_iteration_statement_4(self, p):
        """ iteration_statement : FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN statement """
        p[0] = c_ast.For(c_ast.DeclList(p[3], self._coord(p.lineno(1))),
                         p[4], p[6], p[8], self._coord(p.lineno(1)))

    def p_jump_statement_1(self, p):
        """ jump_statement  : GOTO ID SEMI """
        p[0] = c_ast.Goto(p[2], self._coord(p.lineno(1)))

    def p_jump_statement_2(self, p):
        """ jump_statement  : BREAK SEMI """
        p[0] = c_ast.Break(self._coord(p.lineno(1)))

    def p_jump_statement_3(self, p):
        """ jump_statement  : CONTINUE SEMI """
        p[0] = c_ast.Continue(self._coord(p.lineno(1)))

    def p_jump_statement_4(self, p):
        """ jump_statement  : RETURN expression SEMI
                            | RETURN SEMI
        """
        p[0] = c_ast.Return(p[2] if len(p) == 4 else None, self._coord(p.lineno(1)))

    def p_expression_statement(self, p):
        """ expression_statement : expression_opt SEMI """
        if p[1] is None:
            p[0] = c_ast.EmptyStatement(self._coord(p.lineno(1)))
        else:
            p[0] = p[1]

    def p_expression(self, p):
        """ expression  : assignment_expression
                        | expression COMMA assignment_expression
        """
        if len(p) == 2:
            p[0] = p[1]
        else:
            if not isinstance(p[1], c_ast.ExprList):
                p[1] = c_ast.ExprList([p[1]], p[1].coord)

            p[1].exprs.append(p[3])
            p[0] = p[1]

    def p_typedef_name(self, p):
        """ typedef_name : TYPEID """
        p[0] = c_ast.IdentifierType([p[1]], coord=self._coord(p.lineno(1)))

    def p_assignment_expression(self, p):
        """ assignment_expression   : conditional_expression
                                    | unary_expression assignment_operator assignment_expression
        """
        if len(p) == 2:
            p[0] = p[1]
        else:
            p[0] = c_ast.Assignment(p[2], p[1], p[3], p[1].coord)

    # K&R2 defines these as many separate rules, to encode
    # precedence and associativity. Why work hard ? I'll just use
    # the built in precedence/associativity specification feature
    # of PLY. (see precedence declaration above)
    #
    def p_assignment_operator(self, p):
        """ assignment_operator : EQUALS
                                | XOREQUAL
                                | TIMESEQUAL
                                | DIVEQUAL
                                | MODEQUAL
                                | PLUSEQUAL
                                | MINUSEQUAL
                                | LSHIFTEQUAL
                                | RSHIFTEQUAL
                                | ANDEQUAL
                                | OREQUAL
        """
        p[0] = p[1]

    def p_constant_expression(self, p):
        """ constant_expression : conditional_expression """
        p[0] = p[1]

    def p_conditional_expression(self, p):
        """ conditional_expression  : binary_expression
                                    | binary_expression CONDOP expression COLON conditional_expression
        """
        if len(p) == 2:
            p[0] = p[1]
        else:
            p[0] = c_ast.TernaryOp(p[1], p[3], p[5], p[1].coord)

    def p_binary_expression(self, p):
        """ binary_expression   : cast_expression
                                | binary_expression TIMES binary_expression
                                | binary_expression DIVIDE binary_expression
                                | binary_expression MOD binary_expression
                                | binary_expression PLUS binary_expression
                                | binary_expression MINUS binary_expression
                                | binary_expression RSHIFT binary_expression
                                | binary_expression LSHIFT binary_expression
                                | binary_expression LT binary_expression
                                | binary_expression LE binary_expression
                                | binary_expression GE binary_expression
                                | binary_expression GT binary_expression
                                | binary_expression EQ binary_expression
                                | binary_expression NE binary_expression
                                | binary_expression AND binary_expression
                                | binary_expression OR binary_expression
                                | binary_expression XOR binary_expression
                                | binary_expression LAND binary_expression
                                | binary_expression LOR binary_expression
        """
        if len(p) == 2:
            p[0] = p[1]
        else:
            p[0] = c_ast.BinaryOp(p[2], p[1], p[3], p[1].coord)

    def p_cast_expression_1(self, p):
        """ cast_expression : unary_expression """
        p[0] = p[1]

    def p_cast_expression_2(self, p):
        """ cast_expression : LPAREN type_name RPAREN cast_expression """
        p[0] = c_ast.Cast(p[2], p[4], self._coord(p.lineno(1)))

    def p_unary_expression_1(self, p):
        """ unary_expression    : postfix_expression """
        p[0] = p[1]

    def p_unary_expression_2(self, p):
        """ unary_expression    : PLUSPLUS unary_expression
                                | MINUSMINUS unary_expression
                                | unary_operator cast_expression
        """
        p[0] = c_ast.UnaryOp(p[1], p[2], p[2].coord)

    def p_unary_expression_3(self, p):
        """ unary_expression    : SIZEOF unary_expression
                                | SIZEOF LPAREN type_name RPAREN
        """
        p[0] = c_ast.UnaryOp(
            p[1],
            p[2] if len(p) == 3 else p[3],
            self._coord(p.lineno(1)))

    def p_unary_operator(self, p):
        """ unary_operator  : AND
                            | TIMES
                            | PLUS
                            | MINUS
                            | NOT
                            | LNOT
        """
        p[0] = p[1]

    def p_postfix_expression_1(self, p):
        """ postfix_expression  : primary_expression """
        p[0] = p[1]

    def p_postfix_expression_2(self, p):
        """ postfix_expression  : postfix_expression LBRACKET expression RBRACKET """
        p[0] = c_ast.ArrayRef(p[1], p[3], p[1].coord)

    def p_postfix_expression_3(self, p):
        """ postfix_expression  : postfix_expression LPAREN argument_expression_list RPAREN
                                | postfix_expression LPAREN RPAREN
        """
        p[0] = c_ast.FuncCall(p[1], p[3] if len(p) == 5 else None, p[1].coord)

    def p_postfix_expression_4(self, p):
        """ postfix_expression  : postfix_expression PERIOD ID
                                | postfix_expression PERIOD TYPEID
                                | postfix_expression ARROW ID
                                | postfix_expression ARROW TYPEID
        """
        field = c_ast.ID(p[3], self._coord(p.lineno(3)))
        p[0] = c_ast.StructRef(p[1], p[2], field, p[1].coord)

    def p_postfix_expression_5(self, p):
        """ postfix_expression  : postfix_expression PLUSPLUS
                                | postfix_expression MINUSMINUS
        """
        p[0] = c_ast.UnaryOp('p' + p[2], p[1], p[1].coord)

    def p_postfix_expression_6(self, p):
        """ postfix_expression  : LPAREN type_name RPAREN brace_open initializer_list brace_close
                                | LPAREN type_name RPAREN brace_open initializer_list COMMA brace_close
        """
        p[0] = c_ast.CompoundLiteral(p[2], p[5])

    def p_primary_expression_1(self, p):
        """ primary_expression  : identifier """
        p[0] = p[1]

    def p_primary_expression_2(self, p):
        """ primary_expression  : constant """
        p[0] = p[1]

    def p_primary_expression_3(self, p):
        """ primary_expression  : unified_string_literal
                                | unified_wstring_literal
        """
        p[0] = p[1]

    def p_primary_expression_4(self, p):
        """ primary_expression  : LPAREN expression RPAREN """
        p[0] = p[2]

    def p_primary_expression_5(self, p):
        """ primary_expression  : OFFSETOF LPAREN type_name COMMA identifier RPAREN
        """
        coord = self._coord(p.lineno(1))
        p[0] = c_ast.FuncCall(c_ast.ID(p[1], coord),
                              c_ast.ExprList([p[3], p[5]], coord),
                              coord)

    def p_argument_expression_list(self, p):
        """ argument_expression_list    : assignment_expression
                                        | argument_expression_list COMMA assignment_expression
        """
        if len(p) == 2: # single expr
            p[0] = c_ast.ExprList([p[1]], p[1].coord)
        else:
            p[1].exprs.append(p[3])
            p[0] = p[1]

    def p_identifier(self, p):
        """ identifier  : ID """
        p[0] = c_ast.ID(p[1], self._coord(p.lineno(1)))

    def p_constant_1(self, p):
        """ constant    : INT_CONST_DEC
                        | INT_CONST_OCT
                        | INT_CONST_HEX
                        | INT_CONST_BIN
        """
        p[0] = c_ast.Constant(
            'int', p[1], self._coord(p.lineno(1)))

    def p_constant_2(self, p):
        """ constant    : FLOAT_CONST
                        | HEX_FLOAT_CONST
        """
        p[0] = c_ast.Constant(
            'float', p[1], self._coord(p.lineno(1)))

    def p_constant_3(self, p):
        """ constant    : CHAR_CONST
                        | WCHAR_CONST
        """
        p[0] = c_ast.Constant(
            'char', p[1], self._coord(p.lineno(1)))

    # The "unified" string and wstring literal rules are for supporting
    # concatenation of adjacent string literals.
    # I.e. "hello " "world" is seen by the C compiler as a single string literal
    # with the value "hello world"
    #
    def p_unified_string_literal(self, p):
        """ unified_string_literal  : STRING_LITERAL
                                    | unified_string_literal STRING_LITERAL
        """
        if len(p) == 2: # single literal
            p[0] = c_ast.Constant(
                'string', p[1], self._coord(p.lineno(1)))
        else:
            p[1].value = p[1].value[:-1] + p[2][1:]
            p[0] = p[1]

    def p_unified_wstring_literal(self, p):
        """ unified_wstring_literal : WSTRING_LITERAL
                                    | unified_wstring_literal WSTRING_LITERAL
        """
        if len(p) == 2: # single literal
            p[0] = c_ast.Constant(
                'string', p[1], self._coord(p.lineno(1)))
        else:
            p[1].value = p[1].value.rstrip()[:-1] + p[2][2:]
            p[0] = p[1]

    def p_brace_open(self, p):
        """ brace_open  :   LBRACE
        """
        p[0] = p[1]

    def p_brace_close(self, p):
        """ brace_close :   RBRACE
        """
        p[0] = p[1]

    def p_empty(self, p):
        'empty : '
        p[0] = None

    def p_error(self, p):
        # If error recovery is added here in the future, make sure
        # _get_yacc_lookahead_token still works!
        #
        if p:
            self._parse_error(
                'before: %s' % p.value,
                self._coord(lineno=p.lineno,
                            column=self.clex.find_tok_column(p)))
        else:
            self._parse_error('At end of input', '')


#------------------------------------------------------------------------------
if __name__ == "__main__":
    import pprint
    import time, sys

    #t1 = time.time()
    #parser = CParser(lex_optimize=True, yacc_debug=True, yacc_optimize=False)
    #sys.write(time.time() - t1)

    #buf = '''
        #int (*k)(int);
    #'''

    ## set debuglevel to 2 for debugging
    #t = parser.parse(buf, 'x.c', debuglevel=0)
    #t.show(showcoord=True)

PK�[���TT
_c_ast.cfgnu�[���#-----------------------------------------------------------------
# pycparser: _c_ast.cfg
#
# Defines the AST Node classes used in pycparser.
#
# Each entry is a Node sub-class name, listing the attributes
# and child nodes of the class:
#   <name>*     - a child node
#   <name>**    - a sequence of child nodes
#   <name>      - an attribute
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------

# ArrayDecl is a nested declaration of an array with the given type.
# dim: the dimension (for example, constant 42)
# dim_quals: list of dimension qualifiers, to support C99's allowing 'const'
#            and 'static' within the array dimension in function declarations.
ArrayDecl: [type*, dim*, dim_quals]

ArrayRef: [name*, subscript*]

# op: =, +=, /= etc.
#
Assignment: [op, lvalue*, rvalue*]

BinaryOp: [op, left*, right*]

Break: []

Case: [expr*, stmts**]

Cast: [to_type*, expr*]

# Compound statement in C99 is a list of block items (declarations or
# statements).
#
Compound: [block_items**]

# Compound literal (anonymous aggregate) for C99.
# (type-name) {initializer_list}
# type: the typename
# init: InitList for the initializer list
#
CompoundLiteral: [type*, init*]

# type: int, char, float, etc. see CLexer for constant token types
#
Constant: [type, value]

Continue: []

# name: the variable being declared
# quals: list of qualifiers (const, volatile)
# funcspec: list function specifiers (i.e. inline in C99)
# storage: list of storage specifiers (extern, register, etc.)
# type: declaration type (probably nested with all the modifiers)
# init: initialization value, or None
# bitsize: bit field size, or None
#
Decl: [name, quals, storage, funcspec, type*, init*, bitsize*]

DeclList: [decls**]

Default: [stmts**]

DoWhile: [cond*, stmt*]

# Represents the ellipsis (...) parameter in a function
# declaration
#
EllipsisParam: []

# An empty statement (a semicolon ';' on its own)
#
EmptyStatement: []

# Enumeration type specifier
# name: an optional ID
# values: an EnumeratorList
#
Enum: [name, values*]

# A name/value pair for enumeration values
#
Enumerator: [name, value*]

# A list of enumerators
#
EnumeratorList: [enumerators**]

# A list of expressions separated by the comma operator.
#
ExprList: [exprs**]

# This is the top of the AST, representing a single C file (a
# translation unit in K&R jargon). It contains a list of
# "external-declaration"s, which is either declarations (Decl),
# Typedef or function definitions (FuncDef).
#
FileAST: [ext**]

# for (init; cond; next) stmt
#
For: [init*, cond*, next*, stmt*]

# name: Id
# args: ExprList
#
FuncCall: [name*, args*]

# type <decl>(args)
#
FuncDecl: [args*, type*]

# Function definition: a declarator for the function name and
# a body, which is a compound statement.
# There's an optional list of parameter declarations for old
# K&R-style definitions
#
FuncDef: [decl*, param_decls**, body*]

Goto: [name]

ID: [name]

# Holder for types that are a simple identifier (e.g. the built
# ins void, char etc. and typedef-defined types)
#
IdentifierType: [names]

If: [cond*, iftrue*, iffalse*]

# An initialization list used for compound literals.
#
InitList: [exprs**]

Label: [name, stmt*]

# A named initializer for C99.
# The name of a NamedInitializer is a sequence of Nodes, because
# names can be hierarchical and contain constant expressions.
#
NamedInitializer: [name**, expr*]

# a list of comma separated function parameter declarations
#
ParamList: [params**]

PtrDecl: [quals, type*]

Return: [expr*]

# name: struct tag name
# decls: declaration of members
#
Struct: [name, decls**]

# type: . or ->
# name.field or name->field
#
StructRef: [name*, type, field*]

Switch: [cond*, stmt*]

# cond ? iftrue : iffalse
#
TernaryOp: [cond*, iftrue*, iffalse*]

# A base type declaration
#
TypeDecl: [declname, quals, type*]

# A typedef declaration.
# Very similar to Decl, but without some attributes
#
Typedef: [name, quals, storage, type*]

Typename: [name, quals, type*]

UnaryOp: [op, expr*]

# name: union tag name
# decls: declaration of members
#
Union: [name, decls**]

While: [cond*, stmt*]
PK�[����m8m8
c_lexer.pynu�[���#------------------------------------------------------------------------------
# pycparser: c_lexer.py
#
# CLexer class: lexer for the C language
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#------------------------------------------------------------------------------
import re
import sys

from ply import lex
from ply.lex import TOKEN


class CLexer(object):
    """ A lexer for the C language. After building it, set the
        input text with input(), and call token() to get new
        tokens.

        The public attribute filename can be set to an initial
        filaneme, but the lexer will update it upon #line
        directives.
    """
    def __init__(self, error_func, on_lbrace_func, on_rbrace_func,
                 type_lookup_func):
        """ Create a new Lexer.

            error_func:
                An error function. Will be called with an error
                message, line and column as arguments, in case of
                an error during lexing.

            on_lbrace_func, on_rbrace_func:
                Called when an LBRACE or RBRACE is encountered
                (likely to push/pop type_lookup_func's scope)

            type_lookup_func:
                A type lookup function. Given a string, it must
                return True IFF this string is a name of a type
                that was defined with a typedef earlier.
        """
        self.error_func = error_func
        self.on_lbrace_func = on_lbrace_func
        self.on_rbrace_func = on_rbrace_func
        self.type_lookup_func = type_lookup_func
        self.filename = ''

        # Keeps track of the last token returned from self.token()
        self.last_token = None

        # Allow either "# line" or "# <num>" to support GCC's
        # cpp output
        #
        self.line_pattern = re.compile('([ \t]*line\W)|([ \t]*\d+)')
        self.pragma_pattern = re.compile('[ \t]*pragma\W')

    def build(self, **kwargs):
        """ Builds the lexer from the specification. Must be
            called after the lexer object is created.

            This method exists separately, because the PLY
            manual warns against calling lex.lex inside
            __init__
        """
        self.lexer = lex.lex(object=self, **kwargs)

    def reset_lineno(self):
        """ Resets the internal line number counter of the lexer.
        """
        self.lexer.lineno = 1

    def input(self, text):
        self.lexer.input(text)

    def token(self):
        self.last_token = self.lexer.token()
        return self.last_token

    def find_tok_column(self, token):
        """ Find the column of the token in its line.
        """
        last_cr = self.lexer.lexdata.rfind('\n', 0, token.lexpos)
        return token.lexpos - last_cr

    ######################--   PRIVATE   --######################

    ##
    ## Internal auxiliary methods
    ##
    def _error(self, msg, token):
        location = self._make_tok_location(token)
        self.error_func(msg, location[0], location[1])
        self.lexer.skip(1)

    def _make_tok_location(self, token):
        return (token.lineno, self.find_tok_column(token))

    ##
    ## Reserved keywords
    ##
    keywords = (
        '_BOOL', '_COMPLEX', 'AUTO', 'BREAK', 'CASE', 'CHAR', 'CONST',
        'CONTINUE', 'DEFAULT', 'DO', 'DOUBLE', 'ELSE', 'ENUM', 'EXTERN',
        'FLOAT', 'FOR', 'GOTO', 'IF', 'INLINE', 'INT', 'LONG', 
        'REGISTER', 'OFFSETOF',
        'RESTRICT', 'RETURN', 'SHORT', 'SIGNED', 'SIZEOF', 'STATIC', 'STRUCT',
        'SWITCH', 'TYPEDEF', 'UNION', 'UNSIGNED', 'VOID',
        'VOLATILE', 'WHILE',
    )

    keyword_map = {}
    for keyword in keywords:
        if keyword == '_BOOL':
            keyword_map['_Bool'] = keyword
        elif keyword == '_COMPLEX':
            keyword_map['_Complex'] = keyword
        else:
            keyword_map[keyword.lower()] = keyword

    ##
    ## All the tokens recognized by the lexer
    ##
    tokens = keywords + (
        # Identifiers
        'ID',

        # Type identifiers (identifiers previously defined as
        # types with typedef)
        'TYPEID',

        # constants
        'INT_CONST_DEC', 'INT_CONST_OCT', 'INT_CONST_HEX', 'INT_CONST_BIN',
        'FLOAT_CONST', 'HEX_FLOAT_CONST',
        'CHAR_CONST',
        'WCHAR_CONST',

        # String literals
        'STRING_LITERAL',
        'WSTRING_LITERAL',

        # Operators
        'PLUS', 'MINUS', 'TIMES', 'DIVIDE', 'MOD',
        'OR', 'AND', 'NOT', 'XOR', 'LSHIFT', 'RSHIFT',
        'LOR', 'LAND', 'LNOT',
        'LT', 'LE', 'GT', 'GE', 'EQ', 'NE',

        # Assignment
        'EQUALS', 'TIMESEQUAL', 'DIVEQUAL', 'MODEQUAL',
        'PLUSEQUAL', 'MINUSEQUAL',
        'LSHIFTEQUAL','RSHIFTEQUAL', 'ANDEQUAL', 'XOREQUAL',
        'OREQUAL',

        # Increment/decrement
        'PLUSPLUS', 'MINUSMINUS',

        # Structure dereference (->)
        'ARROW',

        # Conditional operator (?)
        'CONDOP',

        # Delimeters
        'LPAREN', 'RPAREN',         # ( )
        'LBRACKET', 'RBRACKET',     # [ ]
        'LBRACE', 'RBRACE',         # { }
        'COMMA', 'PERIOD',          # . ,
        'SEMI', 'COLON',            # ; :

        # Ellipsis (...)
        'ELLIPSIS',

        # pre-processor
        'PPHASH',      # '#'
    )

    ##
    ## Regexes for use in tokens
    ##
    ##

    # valid C identifiers (K&R2: A.2.3), plus '$' (supported by some compilers)
    identifier = r'[a-zA-Z_$][0-9a-zA-Z_$]*'

    hex_prefix = '0[xX]'
    hex_digits = '[0-9a-fA-F]+'
    bin_prefix = '0[bB]'
    bin_digits = '[01]+'

    # integer constants (K&R2: A.2.5.1)
    integer_suffix_opt = r'(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?'
    decimal_constant = '(0'+integer_suffix_opt+')|([1-9][0-9]*'+integer_suffix_opt+')'
    octal_constant = '0[0-7]*'+integer_suffix_opt
    hex_constant = hex_prefix+hex_digits+integer_suffix_opt
    bin_constant = bin_prefix+bin_digits+integer_suffix_opt

    bad_octal_constant = '0[0-7]*[89]'

    # character constants (K&R2: A.2.5.2)
    # Note: a-zA-Z and '.-~^_!=&;,' are allowed as escape chars to support #line
    # directives with Windows paths as filenames (..\..\dir\file)
    # For the same reason, decimal_escape allows all digit sequences. We want to
    # parse all correct code, even if it means to sometimes parse incorrect
    # code.
    #
    simple_escape = r"""([a-zA-Z._~!=&\^\-\\?'"])"""
    decimal_escape = r"""(\d+)"""
    hex_escape = r"""(x[0-9a-fA-F]+)"""
    bad_escape = r"""([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])"""

    escape_sequence = r"""(\\("""+simple_escape+'|'+decimal_escape+'|'+hex_escape+'))'
    cconst_char = r"""([^'\\\n]|"""+escape_sequence+')'
    char_const = "'"+cconst_char+"'"
    wchar_const = 'L'+char_const
    unmatched_quote = "('"+cconst_char+"*\\n)|('"+cconst_char+"*$)"
    bad_char_const = r"""('"""+cconst_char+"""[^'\n]+')|('')|('"""+bad_escape+r"""[^'\n]*')"""

    # string literals (K&R2: A.2.6)
    string_char = r"""([^"\\\n]|"""+escape_sequence+')'
    string_literal = '"'+string_char+'*"'
    wstring_literal = 'L'+string_literal
    bad_string_literal = '"'+string_char+'*'+bad_escape+string_char+'*"'

    # floating constants (K&R2: A.2.5.3)
    exponent_part = r"""([eE][-+]?[0-9]+)"""
    fractional_constant = r"""([0-9]*\.[0-9]+)|([0-9]+\.)"""
    floating_constant = '(((('+fractional_constant+')'+exponent_part+'?)|([0-9]+'+exponent_part+'))[FfLl]?)'
    binary_exponent_part = r'''([pP][+-]?[0-9]+)'''
    hex_fractional_constant = '((('+hex_digits+r""")?\."""+hex_digits+')|('+hex_digits+r"""\.))"""
    hex_floating_constant = '('+hex_prefix+'('+hex_digits+'|'+hex_fractional_constant+')'+binary_exponent_part+'[FfLl]?)'

    ##
    ## Lexer states: used for preprocessor \n-terminated directives
    ##
    states = (
        # ppline: preprocessor line directives
        #
        ('ppline', 'exclusive'),

        # pppragma: pragma
        #
        ('pppragma', 'exclusive'),
    )

    def t_PPHASH(self, t):
        r'[ \t]*\#'
        if self.line_pattern.match(t.lexer.lexdata, pos=t.lexer.lexpos):
            t.lexer.begin('ppline')
            self.pp_line = self.pp_filename = None
        elif self.pragma_pattern.match(t.lexer.lexdata, pos=t.lexer.lexpos):
            t.lexer.begin('pppragma')
        else:
            t.type = 'PPHASH'
            return t

    ##
    ## Rules for the ppline state
    ##
    @TOKEN(string_literal)
    def t_ppline_FILENAME(self, t):
        if self.pp_line is None:
            self._error('filename before line number in #line', t)
        else:
            self.pp_filename = t.value.lstrip('"').rstrip('"')

    @TOKEN(decimal_constant)
    def t_ppline_LINE_NUMBER(self, t):
        if self.pp_line is None:
            self.pp_line = t.value
        else:
            # Ignore: GCC's cpp sometimes inserts a numeric flag
            # after the file name
            pass

    def t_ppline_NEWLINE(self, t):
        r'\n'

        if self.pp_line is None:
            self._error('line number missing in #line', t)
        else:
            self.lexer.lineno = int(self.pp_line)

            if self.pp_filename is not None:
                self.filename = self.pp_filename

        t.lexer.begin('INITIAL')

    def t_ppline_PPLINE(self, t):
        r'line'
        pass

    t_ppline_ignore = ' \t'

    def t_ppline_error(self, t):
        self._error('invalid #line directive', t)

    ##
    ## Rules for the pppragma state
    ##
    def t_pppragma_NEWLINE(self, t):
        r'\n'
        t.lexer.lineno += 1
        t.lexer.begin('INITIAL')

    def t_pppragma_PPPRAGMA(self, t):
        r'pragma'
        pass

    t_pppragma_ignore = ' \t<>.-{}();=+-*/$%@&^~!?:,0123456789'

    @TOKEN(string_literal)
    def t_pppragma_STR(self, t): pass

    @TOKEN(identifier)
    def t_pppragma_ID(self, t): pass

    def t_pppragma_error(self, t):
        self._error('invalid #pragma directive', t)

    ##
    ## Rules for the normal state
    ##
    t_ignore = ' \t'

    # Newlines
    def t_NEWLINE(self, t):
        r'\n+'
        t.lexer.lineno += t.value.count("\n")

    # Operators
    t_PLUS              = r'\+'
    t_MINUS             = r'-'
    t_TIMES             = r'\*'
    t_DIVIDE            = r'/'
    t_MOD               = r'%'
    t_OR                = r'\|'
    t_AND               = r'&'
    t_NOT               = r'~'
    t_XOR               = r'\^'
    t_LSHIFT            = r'<<'
    t_RSHIFT            = r'>>'
    t_LOR               = r'\|\|'
    t_LAND              = r'&&'
    t_LNOT              = r'!'
    t_LT                = r'<'
    t_GT                = r'>'
    t_LE                = r'<='
    t_GE                = r'>='
    t_EQ                = r'=='
    t_NE                = r'!='

    # Assignment operators
    t_EQUALS            = r'='
    t_TIMESEQUAL        = r'\*='
    t_DIVEQUAL          = r'/='
    t_MODEQUAL          = r'%='
    t_PLUSEQUAL         = r'\+='
    t_MINUSEQUAL        = r'-='
    t_LSHIFTEQUAL       = r'<<='
    t_RSHIFTEQUAL       = r'>>='
    t_ANDEQUAL          = r'&='
    t_OREQUAL           = r'\|='
    t_XOREQUAL          = r'\^='

    # Increment/decrement
    t_PLUSPLUS          = r'\+\+'
    t_MINUSMINUS        = r'--'

    # ->
    t_ARROW             = r'->'

    # ?
    t_CONDOP            = r'\?'

    # Delimeters
    t_LPAREN            = r'\('
    t_RPAREN            = r'\)'
    t_LBRACKET          = r'\['
    t_RBRACKET          = r'\]'
    t_COMMA             = r','
    t_PERIOD            = r'\.'
    t_SEMI              = r';'
    t_COLON             = r':'
    t_ELLIPSIS          = r'\.\.\.'

    # Scope delimiters
    # To see why on_lbrace_func is needed, consider:
    #   typedef char TT;
    #   void foo(int TT) { TT = 10; }
    #   TT x = 5;
    # Outside the function, TT is a typedef, but inside (starting and ending
    # with the braces) it's a parameter.  The trouble begins with yacc's
    # lookahead token.  If we open a new scope in brace_open, then TT has
    # already been read and incorrectly interpreted as TYPEID.  So, we need
    # to open and close scopes from within the lexer.
    # Similar for the TT immediately outside the end of the function.
    #
    @TOKEN(r'\{')
    def t_LBRACE(self, t):
        self.on_lbrace_func()
        return t
    @TOKEN(r'\}')
    def t_RBRACE(self, t):
        self.on_rbrace_func()
        return t

    t_STRING_LITERAL = string_literal

    # The following floating and integer constants are defined as
    # functions to impose a strict order (otherwise, decimal
    # is placed before the others because its regex is longer,
    # and this is bad)
    #
    @TOKEN(floating_constant)
    def t_FLOAT_CONST(self, t):
        return t

    @TOKEN(hex_floating_constant)
    def t_HEX_FLOAT_CONST(self, t):
        return t

    @TOKEN(hex_constant)
    def t_INT_CONST_HEX(self, t):
        return t

    @TOKEN(bin_constant)
    def t_INT_CONST_BIN(self, t):
        return t

    @TOKEN(bad_octal_constant)
    def t_BAD_CONST_OCT(self, t):
        msg = "Invalid octal constant"
        self._error(msg, t)

    @TOKEN(octal_constant)
    def t_INT_CONST_OCT(self, t):
        return t

    @TOKEN(decimal_constant)
    def t_INT_CONST_DEC(self, t):
        return t

    # Must come before bad_char_const, to prevent it from
    # catching valid char constants as invalid
    #
    @TOKEN(char_const)
    def t_CHAR_CONST(self, t):
        return t

    @TOKEN(wchar_const)
    def t_WCHAR_CONST(self, t):
        return t

    @TOKEN(unmatched_quote)
    def t_UNMATCHED_QUOTE(self, t):
        msg = "Unmatched '"
        self._error(msg, t)

    @TOKEN(bad_char_const)
    def t_BAD_CHAR_CONST(self, t):
        msg = "Invalid char constant %s" % t.value
        self._error(msg, t)

    @TOKEN(wstring_literal)
    def t_WSTRING_LITERAL(self, t):
        return t

    # unmatched string literals are caught by the preprocessor

    @TOKEN(bad_string_literal)
    def t_BAD_STRING_LITERAL(self, t):
        msg = "String contains invalid escape code"
        self._error(msg, t)

    @TOKEN(identifier)
    def t_ID(self, t):
        t.type = self.keyword_map.get(t.value, "ID")
        if t.type == 'ID' and self.type_lookup_func(t.value):
            t.type = "TYPEID"
        return t

    def t_error(self, t):
        msg = 'Illegal character %s' % repr(t.value[0])
        self._error(msg, t)

PK�[L#&��
�
ast_transforms.pynu�[���#------------------------------------------------------------------------------
# pycparser: ast_transforms.py
#
# Some utilities used by the parser to create a friendlier AST.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#------------------------------------------------------------------------------

from . import c_ast


def fix_switch_cases(switch_node):
    """ The 'case' statements in a 'switch' come out of parsing with one
        child node, so subsequent statements are just tucked to the parent
        Compound. Additionally, consecutive (fall-through) case statements
        come out messy. This is a peculiarity of the C grammar. The following:

            switch (myvar) {
                case 10:
                    k = 10;
                    p = k + 1;
                    return 10;
                case 20:
                case 30:
                    return 20;
                default:
                    break;
            }

        Creates this tree (pseudo-dump):

            Switch
                ID: myvar
                Compound:
                    Case 10:
                        k = 10
                    p = k + 1
                    return 10
                    Case 20:
                        Case 30:
                            return 20
                    Default:
                        break

        The goal of this transform it to fix this mess, turning it into the
        following:

            Switch
                ID: myvar
                Compound:
                    Case 10:
                        k = 10
                        p = k + 1
                        return 10
                    Case 20:
                    Case 30:
                        return 20
                    Default:
                        break

        A fixed AST node is returned. The argument may be modified.
    """
    assert isinstance(switch_node, c_ast.Switch)
    if not isinstance(switch_node.stmt, c_ast.Compound):
        return switch_node

    # The new Compound child for the Switch, which will collect children in the
    # correct order
    new_compound = c_ast.Compound([], switch_node.stmt.coord)

    # The last Case/Default node
    last_case = None

    # Goes over the children of the Compound below the Switch, adding them
    # either directly below new_compound or below the last Case as appropriate
    for child in switch_node.stmt.block_items:
        if isinstance(child, (c_ast.Case, c_ast.Default)):
            # If it's a Case/Default:
            # 1. Add it to the Compound and mark as "last case"
            # 2. If its immediate child is also a Case or Default, promote it
            #    to a sibling.
            new_compound.block_items.append(child)
            _extract_nested_case(child, new_compound.block_items)
            last_case = new_compound.block_items[-1]
        else:
            # Other statements are added as children to the last case, if it
            # exists.
            if last_case is None:
                new_compound.block_items.append(child)
            else:
                last_case.stmts.append(child)

    switch_node.stmt = new_compound
    return switch_node


def _extract_nested_case(case_node, stmts_list):
    """ Recursively extract consecutive Case statements that are made nested
        by the parser and add them to the stmts_list.
    """
    if isinstance(case_node.stmts[0], (c_ast.Case, c_ast.Default)):
        stmts_list.append(case_node.stmts.pop())
        _extract_nested_case(stmts_list[-1], stmts_list)

PK�[}��{�!�!_ast_gen.pynu�[���#-----------------------------------------------------------------
# _ast_gen.py
#
# Generates the AST Node classes from a specification given in
# a configuration file
#
# The design of this module was inspired by astgen.py from the
# Python 2.5 code-base.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------
import pprint
from string import Template


class ASTCodeGenerator(object):
    def __init__(self, cfg_filename='_c_ast.cfg'):
        """ Initialize the code generator from a configuration
            file.
        """
        self.cfg_filename = cfg_filename
        self.node_cfg = [NodeCfg(name, contents)
            for (name, contents) in self.parse_cfgfile(cfg_filename)]

    def generate(self, file=None):
        """ Generates the code into file, an open file buffer.
        """
        src = Template(_PROLOGUE_COMMENT).substitute(
            cfg_filename=self.cfg_filename)

        src += _PROLOGUE_CODE
        for node_cfg in self.node_cfg:
            src += node_cfg.generate_source() + '\n\n'

        file.write(src)

    def parse_cfgfile(self, filename):
        """ Parse the configuration file and yield pairs of
            (name, contents) for each node.
        """
        with open(filename, "r") as f:
            for line in f:
                line = line.strip()
                if not line or line.startswith('#'):
                    continue
                colon_i = line.find(':')
                lbracket_i = line.find('[')
                rbracket_i = line.find(']')
                if colon_i < 1 or lbracket_i <= colon_i or rbracket_i <= lbracket_i:
                    raise RuntimeError("Invalid line in %s:\n%s\n" % (filename, line))

                name = line[:colon_i]
                val = line[lbracket_i + 1:rbracket_i]
                vallist = [v.strip() for v in val.split(',')] if val else []
                yield name, vallist


class NodeCfg(object):
    """ Node configuration.

        name: node name
        contents: a list of contents - attributes and child nodes
        See comment at the top of the configuration file for details.
    """
    def __init__(self, name, contents):
        self.name = name
        self.all_entries = []
        self.attr = []
        self.child = []
        self.seq_child = []

        for entry in contents:
            clean_entry = entry.rstrip('*')
            self.all_entries.append(clean_entry)

            if entry.endswith('**'):
                self.seq_child.append(clean_entry)
            elif entry.endswith('*'):
                self.child.append(clean_entry)
            else:
                self.attr.append(entry)

    def generate_source(self):
        src = self._gen_init()
        src += '\n' + self._gen_children()
        src += '\n' + self._gen_attr_names()
        return src

    def _gen_init(self):
        src = "class %s(Node):\n" % self.name

        if self.all_entries:
            args = ', '.join(self.all_entries)
            slots = ', '.join("'{0}'".format(e) for e in self.all_entries)
            slots += ", 'coord', '__weakref__'"
            arglist = '(self, %s, coord=None)' % args
        else:
            slots = "'coord', '__weakref__'"
            arglist = '(self, coord=None)'

        src += "    __slots__ = (%s)\n" % slots
        src += "    def __init__%s:\n" % arglist

        for name in self.all_entries + ['coord']:
            src += "        self.%s = %s\n" % (name, name)

        return src

    def _gen_children(self):
        src = '    def children(self):\n'

        if self.all_entries:
            src += '        nodelist = []\n'

            for child in self.child:
                src += (
                    '        if self.%(child)s is not None:' +
                    ' nodelist.append(("%(child)s", self.%(child)s))\n') % (
                        dict(child=child))

            for seq_child in self.seq_child:
                src += (
                    '        for i, child in enumerate(self.%(child)s or []):\n'
                    '            nodelist.append(("%(child)s[%%d]" %% i, child))\n') % (
                        dict(child=seq_child))

            src += '        return tuple(nodelist)\n'
        else:
            src += '        return ()\n'

        return src

    def _gen_attr_names(self):
        src = "    attr_names = (" + ''.join("%r, " % nm for nm in self.attr) + ')'
        return src


_PROLOGUE_COMMENT = \
r'''#-----------------------------------------------------------------
# ** ATTENTION **
# This code was automatically generated from the file:
# $cfg_filename
#
# Do not modify it directly. Modify the configuration file and
# run the generator again.
# ** ** *** ** **
#
# pycparser: c_ast.py
#
# AST Node classes.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------

'''

_PROLOGUE_CODE = r'''
import sys


class Node(object):
    __slots__ = ()
    """ Abstract base class for AST nodes.
    """
    def children(self):
        """ A sequence of all children that are Nodes
        """
        pass

    def show(self, buf=sys.stdout, offset=0, attrnames=False, nodenames=False, showcoord=False, _my_node_name=None):
        """ Pretty print the Node and all its attributes and
            children (recursively) to a buffer.

            buf:
                Open IO buffer into which the Node is printed.

            offset:
                Initial offset (amount of leading spaces)

            attrnames:
                True if you want to see the attribute names in
                name=value pairs. False to only see the values.

            nodenames:
                True if you want to see the actual node names
                within their parents.

            showcoord:
                Do you want the coordinates of each Node to be
                displayed.
        """
        lead = ' ' * offset
        if nodenames and _my_node_name is not None:
            buf.write(lead + self.__class__.__name__+ ' <' + _my_node_name + '>: ')
        else:
            buf.write(lead + self.__class__.__name__+ ': ')

        if self.attr_names:
            if attrnames:
                nvlist = [(n, getattr(self,n)) for n in self.attr_names]
                attrstr = ', '.join('%s=%s' % nv for nv in nvlist)
            else:
                vlist = [getattr(self, n) for n in self.attr_names]
                attrstr = ', '.join('%s' % v for v in vlist)
            buf.write(attrstr)

        if showcoord:
            buf.write(' (at %s)' % self.coord)
        buf.write('\n')

        for (child_name, child) in self.children():
            child.show(
                buf,
                offset=offset + 2,
                attrnames=attrnames,
                nodenames=nodenames,
                showcoord=showcoord,
                _my_node_name=child_name)


class NodeVisitor(object):
    """ A base NodeVisitor class for visiting c_ast nodes.
        Subclass it and define your own visit_XXX methods, where
        XXX is the class name you want to visit with these
        methods.

        For example:

        class ConstantVisitor(NodeVisitor):
            def __init__(self):
                self.values = []

            def visit_Constant(self, node):
                self.values.append(node.value)

        Creates a list of values of all the constant nodes
        encountered below the given node. To use it:

        cv = ConstantVisitor()
        cv.visit(node)

        Notes:

        *   generic_visit() will be called for AST nodes for which
            no visit_XXX method was defined.
        *   The children of nodes for which a visit_XXX was
            defined will not be visited - if you need this, call
            generic_visit() on the node.
            You can use:
                NodeVisitor.generic_visit(self, node)
        *   Modeled after Python's own AST visiting facilities
            (the ast module of Python 3.0)
    """
    def visit(self, node):
        """ Visit a node.
        """
        method = 'visit_' + node.__class__.__name__
        visitor = getattr(self, method, self.generic_visit)
        return visitor(node)

    def generic_visit(self, node):
        """ Called if no explicit visitor function exists for a
            node. Implements preorder visiting of the node.
        """
        for c_name, c in node.children():
            self.visit(c)


'''


if __name__ == "__main__":
    import sys
    ast_gen = ASTCodeGenerator('_c_ast.cfg')
    ast_gen.generate(open('c_ast.py', 'w'))

PK�[ĬR([([c_ast.pynu�[���#-----------------------------------------------------------------
# ** ATTENTION **
# This code was automatically generated from the file:
# _c_ast.cfg
#
# Do not modify it directly. Modify the configuration file and
# run the generator again.
# ** ** *** ** **
#
# pycparser: c_ast.py
#
# AST Node classes.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------


import sys


class Node(object):
    __slots__ = ()
    """ Abstract base class for AST nodes.
    """
    def children(self):
        """ A sequence of all children that are Nodes
        """
        pass

    def show(self, buf=sys.stdout, offset=0, attrnames=False, nodenames=False, showcoord=False, _my_node_name=None):
        """ Pretty print the Node and all its attributes and
            children (recursively) to a buffer.

            buf:
                Open IO buffer into which the Node is printed.

            offset:
                Initial offset (amount of leading spaces)

            attrnames:
                True if you want to see the attribute names in
                name=value pairs. False to only see the values.

            nodenames:
                True if you want to see the actual node names
                within their parents.

            showcoord:
                Do you want the coordinates of each Node to be
                displayed.
        """
        lead = ' ' * offset
        if nodenames and _my_node_name is not None:
            buf.write(lead + self.__class__.__name__+ ' <' + _my_node_name + '>: ')
        else:
            buf.write(lead + self.__class__.__name__+ ': ')

        if self.attr_names:
            if attrnames:
                nvlist = [(n, getattr(self,n)) for n in self.attr_names]
                attrstr = ', '.join('%s=%s' % nv for nv in nvlist)
            else:
                vlist = [getattr(self, n) for n in self.attr_names]
                attrstr = ', '.join('%s' % v for v in vlist)
            buf.write(attrstr)

        if showcoord:
            buf.write(' (at %s)' % self.coord)
        buf.write('\n')

        for (child_name, child) in self.children():
            child.show(
                buf,
                offset=offset + 2,
                attrnames=attrnames,
                nodenames=nodenames,
                showcoord=showcoord,
                _my_node_name=child_name)


class NodeVisitor(object):
    """ A base NodeVisitor class for visiting c_ast nodes.
        Subclass it and define your own visit_XXX methods, where
        XXX is the class name you want to visit with these
        methods.

        For example:

        class ConstantVisitor(NodeVisitor):
            def __init__(self):
                self.values = []

            def visit_Constant(self, node):
                self.values.append(node.value)

        Creates a list of values of all the constant nodes
        encountered below the given node. To use it:

        cv = ConstantVisitor()
        cv.visit(node)

        Notes:

        *   generic_visit() will be called for AST nodes for which
            no visit_XXX method was defined.
        *   The children of nodes for which a visit_XXX was
            defined will not be visited - if you need this, call
            generic_visit() on the node.
            You can use:
                NodeVisitor.generic_visit(self, node)
        *   Modeled after Python's own AST visiting facilities
            (the ast module of Python 3.0)
    """
    def visit(self, node):
        """ Visit a node.
        """
        method = 'visit_' + node.__class__.__name__
        visitor = getattr(self, method, self.generic_visit)
        return visitor(node)

    def generic_visit(self, node):
        """ Called if no explicit visitor function exists for a
            node. Implements preorder visiting of the node.
        """
        for c_name, c in node.children():
            self.visit(c)


class ArrayDecl(Node):
    __slots__ = ('type', 'dim', 'dim_quals', 'coord', '__weakref__')
    def __init__(self, type, dim, dim_quals, coord=None):
        self.type = type
        self.dim = dim
        self.dim_quals = dim_quals
        self.coord = coord

    def children(self):
        nodelist = []
        if self.type is not None: nodelist.append(("type", self.type))
        if self.dim is not None: nodelist.append(("dim", self.dim))
        return tuple(nodelist)

    attr_names = ('dim_quals', )

class ArrayRef(Node):
    __slots__ = ('name', 'subscript', 'coord', '__weakref__')
    def __init__(self, name, subscript, coord=None):
        self.name = name
        self.subscript = subscript
        self.coord = coord

    def children(self):
        nodelist = []
        if self.name is not None: nodelist.append(("name", self.name))
        if self.subscript is not None: nodelist.append(("subscript", self.subscript))
        return tuple(nodelist)

    attr_names = ()

class Assignment(Node):
    __slots__ = ('op', 'lvalue', 'rvalue', 'coord', '__weakref__')
    def __init__(self, op, lvalue, rvalue, coord=None):
        self.op = op
        self.lvalue = lvalue
        self.rvalue = rvalue
        self.coord = coord

    def children(self):
        nodelist = []
        if self.lvalue is not None: nodelist.append(("lvalue", self.lvalue))
        if self.rvalue is not None: nodelist.append(("rvalue", self.rvalue))
        return tuple(nodelist)

    attr_names = ('op', )

class BinaryOp(Node):
    __slots__ = ('op', 'left', 'right', 'coord', '__weakref__')
    def __init__(self, op, left, right, coord=None):
        self.op = op
        self.left = left
        self.right = right
        self.coord = coord

    def children(self):
        nodelist = []
        if self.left is not None: nodelist.append(("left", self.left))
        if self.right is not None: nodelist.append(("right", self.right))
        return tuple(nodelist)

    attr_names = ('op', )

class Break(Node):
    __slots__ = ('coord', '__weakref__')
    def __init__(self, coord=None):
        self.coord = coord

    def children(self):
        return ()

    attr_names = ()

class Case(Node):
    __slots__ = ('expr', 'stmts', 'coord', '__weakref__')
    def __init__(self, expr, stmts, coord=None):
        self.expr = expr
        self.stmts = stmts
        self.coord = coord

    def children(self):
        nodelist = []
        if self.expr is not None: nodelist.append(("expr", self.expr))
        for i, child in enumerate(self.stmts or []):
            nodelist.append(("stmts[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class Cast(Node):
    __slots__ = ('to_type', 'expr', 'coord', '__weakref__')
    def __init__(self, to_type, expr, coord=None):
        self.to_type = to_type
        self.expr = expr
        self.coord = coord

    def children(self):
        nodelist = []
        if self.to_type is not None: nodelist.append(("to_type", self.to_type))
        if self.expr is not None: nodelist.append(("expr", self.expr))
        return tuple(nodelist)

    attr_names = ()

class Compound(Node):
    __slots__ = ('block_items', 'coord', '__weakref__')
    def __init__(self, block_items, coord=None):
        self.block_items = block_items
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.block_items or []):
            nodelist.append(("block_items[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class CompoundLiteral(Node):
    __slots__ = ('type', 'init', 'coord', '__weakref__')
    def __init__(self, type, init, coord=None):
        self.type = type
        self.init = init
        self.coord = coord

    def children(self):
        nodelist = []
        if self.type is not None: nodelist.append(("type", self.type))
        if self.init is not None: nodelist.append(("init", self.init))
        return tuple(nodelist)

    attr_names = ()

class Constant(Node):
    __slots__ = ('type', 'value', 'coord', '__weakref__')
    def __init__(self, type, value, coord=None):
        self.type = type
        self.value = value
        self.coord = coord

    def children(self):
        nodelist = []
        return tuple(nodelist)

    attr_names = ('type', 'value', )

class Continue(Node):
    __slots__ = ('coord', '__weakref__')
    def __init__(self, coord=None):
        self.coord = coord

    def children(self):
        return ()

    attr_names = ()

class Decl(Node):
    __slots__ = ('name', 'quals', 'storage', 'funcspec', 'type', 'init', 'bitsize', 'coord', '__weakref__')
    def __init__(self, name, quals, storage, funcspec, type, init, bitsize, coord=None):
        self.name = name
        self.quals = quals
        self.storage = storage
        self.funcspec = funcspec
        self.type = type
        self.init = init
        self.bitsize = bitsize
        self.coord = coord

    def children(self):
        nodelist = []
        if self.type is not None: nodelist.append(("type", self.type))
        if self.init is not None: nodelist.append(("init", self.init))
        if self.bitsize is not None: nodelist.append(("bitsize", self.bitsize))
        return tuple(nodelist)

    attr_names = ('name', 'quals', 'storage', 'funcspec', )

class DeclList(Node):
    __slots__ = ('decls', 'coord', '__weakref__')
    def __init__(self, decls, coord=None):
        self.decls = decls
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.decls or []):
            nodelist.append(("decls[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class Default(Node):
    __slots__ = ('stmts', 'coord', '__weakref__')
    def __init__(self, stmts, coord=None):
        self.stmts = stmts
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.stmts or []):
            nodelist.append(("stmts[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class DoWhile(Node):
    __slots__ = ('cond', 'stmt', 'coord', '__weakref__')
    def __init__(self, cond, stmt, coord=None):
        self.cond = cond
        self.stmt = stmt
        self.coord = coord

    def children(self):
        nodelist = []
        if self.cond is not None: nodelist.append(("cond", self.cond))
        if self.stmt is not None: nodelist.append(("stmt", self.stmt))
        return tuple(nodelist)

    attr_names = ()

class EllipsisParam(Node):
    __slots__ = ('coord', '__weakref__')
    def __init__(self, coord=None):
        self.coord = coord

    def children(self):
        return ()

    attr_names = ()

class EmptyStatement(Node):
    __slots__ = ('coord', '__weakref__')
    def __init__(self, coord=None):
        self.coord = coord

    def children(self):
        return ()

    attr_names = ()

class Enum(Node):
    __slots__ = ('name', 'values', 'coord', '__weakref__')
    def __init__(self, name, values, coord=None):
        self.name = name
        self.values = values
        self.coord = coord

    def children(self):
        nodelist = []
        if self.values is not None: nodelist.append(("values", self.values))
        return tuple(nodelist)

    attr_names = ('name', )

class Enumerator(Node):
    __slots__ = ('name', 'value', 'coord', '__weakref__')
    def __init__(self, name, value, coord=None):
        self.name = name
        self.value = value
        self.coord = coord

    def children(self):
        nodelist = []
        if self.value is not None: nodelist.append(("value", self.value))
        return tuple(nodelist)

    attr_names = ('name', )

class EnumeratorList(Node):
    __slots__ = ('enumerators', 'coord', '__weakref__')
    def __init__(self, enumerators, coord=None):
        self.enumerators = enumerators
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.enumerators or []):
            nodelist.append(("enumerators[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class ExprList(Node):
    __slots__ = ('exprs', 'coord', '__weakref__')
    def __init__(self, exprs, coord=None):
        self.exprs = exprs
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.exprs or []):
            nodelist.append(("exprs[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class FileAST(Node):
    __slots__ = ('ext', 'coord', '__weakref__')
    def __init__(self, ext, coord=None):
        self.ext = ext
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.ext or []):
            nodelist.append(("ext[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class For(Node):
    __slots__ = ('init', 'cond', 'next', 'stmt', 'coord', '__weakref__')
    def __init__(self, init, cond, next, stmt, coord=None):
        self.init = init
        self.cond = cond
        self.next = next
        self.stmt = stmt
        self.coord = coord

    def children(self):
        nodelist = []
        if self.init is not None: nodelist.append(("init", self.init))
        if self.cond is not None: nodelist.append(("cond", self.cond))
        if self.next is not None: nodelist.append(("next", self.next))
        if self.stmt is not None: nodelist.append(("stmt", self.stmt))
        return tuple(nodelist)

    attr_names = ()

class FuncCall(Node):
    __slots__ = ('name', 'args', 'coord', '__weakref__')
    def __init__(self, name, args, coord=None):
        self.name = name
        self.args = args
        self.coord = coord

    def children(self):
        nodelist = []
        if self.name is not None: nodelist.append(("name", self.name))
        if self.args is not None: nodelist.append(("args", self.args))
        return tuple(nodelist)

    attr_names = ()

class FuncDecl(Node):
    __slots__ = ('args', 'type', 'coord', '__weakref__')
    def __init__(self, args, type, coord=None):
        self.args = args
        self.type = type
        self.coord = coord

    def children(self):
        nodelist = []
        if self.args is not None: nodelist.append(("args", self.args))
        if self.type is not None: nodelist.append(("type", self.type))
        return tuple(nodelist)

    attr_names = ()

class FuncDef(Node):
    __slots__ = ('decl', 'param_decls', 'body', 'coord', '__weakref__')
    def __init__(self, decl, param_decls, body, coord=None):
        self.decl = decl
        self.param_decls = param_decls
        self.body = body
        self.coord = coord

    def children(self):
        nodelist = []
        if self.decl is not None: nodelist.append(("decl", self.decl))
        if self.body is not None: nodelist.append(("body", self.body))
        for i, child in enumerate(self.param_decls or []):
            nodelist.append(("param_decls[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class Goto(Node):
    __slots__ = ('name', 'coord', '__weakref__')
    def __init__(self, name, coord=None):
        self.name = name
        self.coord = coord

    def children(self):
        nodelist = []
        return tuple(nodelist)

    attr_names = ('name', )

class ID(Node):
    __slots__ = ('name', 'coord', '__weakref__')
    def __init__(self, name, coord=None):
        self.name = name
        self.coord = coord

    def children(self):
        nodelist = []
        return tuple(nodelist)

    attr_names = ('name', )

class IdentifierType(Node):
    __slots__ = ('names', 'coord', '__weakref__')
    def __init__(self, names, coord=None):
        self.names = names
        self.coord = coord

    def children(self):
        nodelist = []
        return tuple(nodelist)

    attr_names = ('names', )

class If(Node):
    __slots__ = ('cond', 'iftrue', 'iffalse', 'coord', '__weakref__')
    def __init__(self, cond, iftrue, iffalse, coord=None):
        self.cond = cond
        self.iftrue = iftrue
        self.iffalse = iffalse
        self.coord = coord

    def children(self):
        nodelist = []
        if self.cond is not None: nodelist.append(("cond", self.cond))
        if self.iftrue is not None: nodelist.append(("iftrue", self.iftrue))
        if self.iffalse is not None: nodelist.append(("iffalse", self.iffalse))
        return tuple(nodelist)

    attr_names = ()

class InitList(Node):
    __slots__ = ('exprs', 'coord', '__weakref__')
    def __init__(self, exprs, coord=None):
        self.exprs = exprs
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.exprs or []):
            nodelist.append(("exprs[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class Label(Node):
    __slots__ = ('name', 'stmt', 'coord', '__weakref__')
    def __init__(self, name, stmt, coord=None):
        self.name = name
        self.stmt = stmt
        self.coord = coord

    def children(self):
        nodelist = []
        if self.stmt is not None: nodelist.append(("stmt", self.stmt))
        return tuple(nodelist)

    attr_names = ('name', )

class NamedInitializer(Node):
    __slots__ = ('name', 'expr', 'coord', '__weakref__')
    def __init__(self, name, expr, coord=None):
        self.name = name
        self.expr = expr
        self.coord = coord

    def children(self):
        nodelist = []
        if self.expr is not None: nodelist.append(("expr", self.expr))
        for i, child in enumerate(self.name or []):
            nodelist.append(("name[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class ParamList(Node):
    __slots__ = ('params', 'coord', '__weakref__')
    def __init__(self, params, coord=None):
        self.params = params
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.params or []):
            nodelist.append(("params[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class PtrDecl(Node):
    __slots__ = ('quals', 'type', 'coord', '__weakref__')
    def __init__(self, quals, type, coord=None):
        self.quals = quals
        self.type = type
        self.coord = coord

    def children(self):
        nodelist = []
        if self.type is not None: nodelist.append(("type", self.type))
        return tuple(nodelist)

    attr_names = ('quals', )

class Return(Node):
    __slots__ = ('expr', 'coord', '__weakref__')
    def __init__(self, expr, coord=None):
        self.expr = expr
        self.coord = coord

    def children(self):
        nodelist = []
        if self.expr is not None: nodelist.append(("expr", self.expr))
        return tuple(nodelist)

    attr_names = ()

class Struct(Node):
    __slots__ = ('name', 'decls', 'coord', '__weakref__')
    def __init__(self, name, decls, coord=None):
        self.name = name
        self.decls = decls
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.decls or []):
            nodelist.append(("decls[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ('name', )

class StructRef(Node):
    __slots__ = ('name', 'type', 'field', 'coord', '__weakref__')
    def __init__(self, name, type, field, coord=None):
        self.name = name
        self.type = type
        self.field = field
        self.coord = coord

    def children(self):
        nodelist = []
        if self.name is not None: nodelist.append(("name", self.name))
        if self.field is not None: nodelist.append(("field", self.field))
        return tuple(nodelist)

    attr_names = ('type', )

class Switch(Node):
    __slots__ = ('cond', 'stmt', 'coord', '__weakref__')
    def __init__(self, cond, stmt, coord=None):
        self.cond = cond
        self.stmt = stmt
        self.coord = coord

    def children(self):
        nodelist = []
        if self.cond is not None: nodelist.append(("cond", self.cond))
        if self.stmt is not None: nodelist.append(("stmt", self.stmt))
        return tuple(nodelist)

    attr_names = ()

class TernaryOp(Node):
    __slots__ = ('cond', 'iftrue', 'iffalse', 'coord', '__weakref__')
    def __init__(self, cond, iftrue, iffalse, coord=None):
        self.cond = cond
        self.iftrue = iftrue
        self.iffalse = iffalse
        self.coord = coord

    def children(self):
        nodelist = []
        if self.cond is not None: nodelist.append(("cond", self.cond))
        if self.iftrue is not None: nodelist.append(("iftrue", self.iftrue))
        if self.iffalse is not None: nodelist.append(("iffalse", self.iffalse))
        return tuple(nodelist)

    attr_names = ()

class TypeDecl(Node):
    __slots__ = ('declname', 'quals', 'type', 'coord', '__weakref__')
    def __init__(self, declname, quals, type, coord=None):
        self.declname = declname
        self.quals = quals
        self.type = type
        self.coord = coord

    def children(self):
        nodelist = []
        if self.type is not None: nodelist.append(("type", self.type))
        return tuple(nodelist)

    attr_names = ('declname', 'quals', )

class Typedef(Node):
    __slots__ = ('name', 'quals', 'storage', 'type', 'coord', '__weakref__')
    def __init__(self, name, quals, storage, type, coord=None):
        self.name = name
        self.quals = quals
        self.storage = storage
        self.type = type
        self.coord = coord

    def children(self):
        nodelist = []
        if self.type is not None: nodelist.append(("type", self.type))
        return tuple(nodelist)

    attr_names = ('name', 'quals', 'storage', )

class Typename(Node):
    __slots__ = ('name', 'quals', 'type', 'coord', '__weakref__')
    def __init__(self, name, quals, type, coord=None):
        self.name = name
        self.quals = quals
        self.type = type
        self.coord = coord

    def children(self):
        nodelist = []
        if self.type is not None: nodelist.append(("type", self.type))
        return tuple(nodelist)

    attr_names = ('name', 'quals', )

class UnaryOp(Node):
    __slots__ = ('op', 'expr', 'coord', '__weakref__')
    def __init__(self, op, expr, coord=None):
        self.op = op
        self.expr = expr
        self.coord = coord

    def children(self):
        nodelist = []
        if self.expr is not None: nodelist.append(("expr", self.expr))
        return tuple(nodelist)

    attr_names = ('op', )

class Union(Node):
    __slots__ = ('name', 'decls', 'coord', '__weakref__')
    def __init__(self, name, decls, coord=None):
        self.name = name
        self.decls = decls
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.decls or []):
            nodelist.append(("decls[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ('name', )

class While(Node):
    __slots__ = ('cond', 'stmt', 'coord', '__weakref__')
    def __init__(self, cond, stmt, coord=None):
        self.cond = cond
        self.stmt = stmt
        self.coord = coord

    def children(self):
        nodelist = []
        if self.cond is not None: nodelist.append(("cond", self.cond))
        if self.stmt is not None: nodelist.append(("stmt", self.stmt))
        return tuple(nodelist)

    attr_names = ()

PK�[�k�^WW__init__.pynu�[���PK�[�6�55�c_generator.pynu�[���PK�[�?�::�@plyparser.pynu�[���PK�[���mNN	HGlextab.pynu�[���PK�[�>�2UU'�c__pycache__/lextab.cpython-36.opt-1.pycnu�[���PK�[ ��1��({z__pycache__/_build_tables.cpython-36.pycnu�[���PK�[��×*�|__pycache__/plyparser.cpython-36.opt-1.pycnu�[���PK�[A&[\�/�/(�__pycache__/c_lexer.cpython-36.opt-1.pycnu�[���PK�[�$V0�!�!),�__pycache__/_ast_gen.cpython-36.opt-1.pycnu�[���PK�[�$V0�!�!#\�__pycache__/_ast_gen.cpython-36.pycnu�[���PK�[�������(��__pycache__/yacctab.cpython-36.opt-1.pycnu�[���PK�[�������"՗__pycache__/yacctab.cpython-36.pycnu�[���PK�[ǦX+:+:,6__pycache__/c_generator.cpython-36.opt-1.pycnu�[���PK�[��	�	)�p__pycache__/ast_transforms.cpython-36.pycnu�[���PK�[ǦX+:+:&�z__pycache__/c_generator.cpython-36.pycnu�[���PK�[����#t#t&6�__pycache__/c_ast.cpython-36.opt-1.pycnu�[���PK�[��}F����#�)__pycache__/c_parser.cpython-36.pycnu�[���PK�[��×$�__pycache__/plyparser.cpython-36.pycnu�[���PK�[ ��1��.0__pycache__/_build_tables.cpython-36.opt-1.pycnu�[���PK�[A&[\�/�/"a__pycache__/c_lexer.cpython-36.pycnu�[���PK�[����#t#t �>__pycache__/c_ast.cpython-36.pycnu�[���PK�[��/)�	�	#��__pycache__/__init__.cpython-36.pycnu�[���PK�[��/)�	�	)7�__pycache__/__init__.cpython-36.opt-1.pycnu�[���PK�[(31CL�L�)�__pycache__/c_parser.cpython-36.opt-1.pycnu�[���PK�[�AB�	�	/$�__pycache__/ast_transforms.cpython-36.opt-1.pycnu�[���PK�[�>�2UU!�__pycache__/lextab.cpython-36.pycnu�[���PK�[�cx�SS��_build_tables.pynu�[���PK�[8KF4U�U�
I�yacctab.pynu�[���PK�[Q ���ز	c_parser.pynu�[���PK�[���TT
�
_c_ast.cfgnu�[���PK�[����m8m8
��
c_lexer.pynu�[���PK�[L#&��
�
K�
ast_transforms.pynu�[���PK�[}��{�!�!|�
_ast_gen.pynu�[���PK�[ĬR([([�c_ast.pynu�[���PK""_�z