commit b820316f373a048678632adfb7b23612ebe64ddb Author: Mysterie Date: Tue Jun 5 10:46:41 2012 +0200 first commit diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100755 index 00000000..9ca6c9be --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,11 @@ +include MANIFEST +include MANIFEST.in +include README +include ANNOUNCE CHANGES TODO +include uncompyle +include test_pythonlib +include test_one +include compile_tests +graft test +graft scripts +global-exclude *~ .*~ diff --git a/PKG-INFO b/PKG-INFO new file mode 100755 index 00000000..c5e150b7 --- /dev/null +++ b/PKG-INFO @@ -0,0 +1,10 @@ +Metadata-Version: 1.1 +Name: uncompyle +Version: 1.1 +Summary: Python byte-code to source-code converter +Home-page: http://github.com/sysfrog/uncompyle +Author: Hartmut Goebel +Author-email: hartmut@oberon.noris.de +License: GPLv3 +Description: UNKNOWN +Platform: UNKNOWN diff --git a/README b/README new file mode 100755 index 00000000..b930ea94 --- /dev/null +++ b/README @@ -0,0 +1,106 @@ + + uncompyle2 + A Python 2.5, 2.6, 2.7 byte-code decompiler, written in Python 2.7 + 0.13 + 2012-6-5 + +Introduction +------------ + +'uncompyle2' converts Python byte-code back into equivalent Python +source. It accepts byte-code from Python version 2.5, 2.6 & 2.7. Additionally, +it will only run on Python 2.7. + +The generated source is very readable: docstrings, lists, tuples and +hashes get pretty-printed. + +'uncompyle2' may also verify the equivalence of the generated source by +by compiling it and comparing both byte-codes. + +'uncompyle2' is based on John Aycock's generic small languages compiler +'spark' (http://www.csr.uvic.ca/~aycock/python/) and his prior work on +'uncompyle'. + +Additional note (3 July 2004, Ben Burton): + + The original website from which this software was obtained is no longer + available. It has now become a commercial decompilation service, with + no software available for download. + + Any developers seeking to make alterations or enhancements to this code + should therefore consider these debian packages an appropriate starting + point. + +Additional note (5 June 2012): + + The decompilation of python bytecode 2.5 & 2.6 is based on the work of + Eloi Vanderbeken. bytecode is translated to a pseudo 2.7 python bytecode + and then decompiled. + +Features +-------- + + * decompiles Python byte-code into equivalent Python source + + * decompiles byte-code from Python version 2.5, 2.6, 2.7 + + * pretty-prints docstrings, hashes, lists and tuples + + * reads directly from .pyc/.pyo files, bulk-decompile whole + directories + + * output may be written to file, a directory or to stdout + + * option for including byte-code disassembly into generated source + + For a list of changes please refer to the 'CHANGES' file. + + +Requirements +------------ + +uncompyle2 requires Python 2.7 + + +Installation +------------ + +You may either create a RPM and install this, or install directly from +the source distribution. + +Creating RPMS: + + python setup.py bdist_rpm + + If you need to force the python interpreter to eg. pyton2: + python2 setup.py bdist_rpm --python=python2 + + +Installation from the source distribution: + + python setup.py install + + To install to a user's home-dir: + python setup.py install --home= + + To install to another prefix (eg. /usr/local) + python setup.py install --prefix=/usr/local + + If you need to force the python interpreter to eg. pyton2: + python2 setup.py install + + For more information on 'Installing Python Modules' please refer to + http://www.python.org/doc/current/inst/inst.html + + +Usage +----- + +uncompyle2 -h prints short usage +uncompyle2 --help prints long usage + + +Known Bugs/Restrictions +----------------------- + +I have some known bug in the 2.5 & 2.6 decompilation version but this will be fixed in a few. diff --git a/build/lib.linux-i686-2.7/uncompyle2/Parser.py b/build/lib.linux-i686-2.7/uncompyle2/Parser.py new file mode 100755 index 00000000..89fc675a --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/Parser.py @@ -0,0 +1,776 @@ +# Copyright (c) 1999 John Aycock +# Copyright (c) 2000-2002 by hartmut Goebel +# Copyright (c) 2005 by Dan Pascu +# +# See main module for license. +# + +__all__ = ['parse', 'AST', 'ParserError', 'Parser'] + +from spark import GenericASTBuilder +import string, exceptions, sys +from UserList import UserList + +from Scanner import Token + +class AST(UserList): + def __init__(self, type, kids=[]): + self.type = intern(type) + UserList.__init__(self, kids) + + def __getslice__(self, low, high): return self.data[low:high] + def __eq__(self, o): + if isinstance(o, AST): + return self.type == o.type \ + and UserList.__eq__(self, o) + else: + return self.type == o + + def __hash__(self): return hash(self.type) + + def __repr__(self, indent=''): + rv = str(self.type) + for k in self: + rv = rv + '\n' + string.replace(str(k), '\n', '\n ') + return rv + + +class ParserError(Exception): + def __init__(self, token, offset): + self.token = token + self.offset = offset + + def __str__(self): + return "Syntax error at or near `%r' token at offset %s" % \ + (self.token, self.offset) + + +class Parser(GenericASTBuilder): + def __init__(self): + GenericASTBuilder.__init__(self, AST, 'stmts') + self.customized = {} + + def cleanup(self): + """ + Remove recursive references to allow garbage + collector to collect this object. + """ + for dict in (self.rule2func, self.rules, self.rule2name): + for i in dict.keys(): + dict[i] = None + for i in dir(self): + setattr(self, i, None) + + def error(self, token): + raise ParserError(token, token.offset) + + def typestring(self, token): + return token.type + + def p_funcdef(self, args): + ''' + stmt ::= funcdef + funcdef ::= mkfunc designator + stmt ::= funcdefdeco + funcdefdeco ::= mkfuncdeco designator + mkfuncdeco ::= expr mkfuncdeco CALL_FUNCTION_1 + mkfuncdeco ::= expr mkfuncdeco0 CALL_FUNCTION_1 + mkfuncdeco0 ::= mkfunc + load_closure ::= load_closure LOAD_CLOSURE + load_closure ::= LOAD_CLOSURE + ''' + + def p_list_comprehension(self, args): + ''' + expr ::= list_compr + list_compr ::= BUILD_LIST_0 list_iter + + list_iter ::= list_for + list_iter ::= list_if + list_iter ::= list_if_not + list_iter ::= lc_body + + _come_from ::= COME_FROM + _come_from ::= + + list_for ::= expr _for designator list_iter JUMP_BACK + list_if ::= expr jmp_false list_iter + list_if_not ::= expr jmp_true list_iter + + lc_body ::= expr LIST_APPEND + ''' + + def p_setcomp(self, args): + ''' + expr ::= setcomp + + setcomp ::= LOAD_SETCOMP MAKE_FUNCTION_0 expr GET_ITER CALL_FUNCTION_1 + + stmt ::= setcomp_func + + setcomp_func ::= BUILD_SET_0 LOAD_FAST FOR_ITER designator comp_iter + JUMP_BACK RETURN_VALUE RETURN_LAST + + comp_iter ::= comp_if + comp_iter ::= comp_ifnot + comp_iter ::= comp_for + comp_iter ::= comp_body + comp_body ::= set_comp_body + comp_body ::= gen_comp_body + comp_body ::= dict_comp_body + set_comp_body ::= expr SET_ADD + gen_comp_body ::= expr YIELD_VALUE POP_TOP + dict_comp_body ::= expr expr MAP_ADD + + comp_if ::= expr jmp_false comp_iter + comp_ifnot ::= expr jmp_true comp_iter + comp_for ::= expr _for designator comp_iter JUMP_BACK + ''' + + def p_genexpr(self, args): + ''' + expr ::= genexpr + + genexpr ::= LOAD_GENEXPR MAKE_FUNCTION_0 expr GET_ITER CALL_FUNCTION_1 + + stmt ::= genexpr_func + + genexpr_func ::= LOAD_FAST FOR_ITER designator comp_iter JUMP_BACK + ''' + + + def p_dictcomp(self, args): + ''' + expr ::= dictcomp + dictcomp ::= LOAD_DICTCOMP MAKE_FUNCTION_0 expr GET_ITER CALL_FUNCTION_1 + stmt ::= dictcomp_func + + dictcomp_func ::= BUILD_MAP LOAD_FAST FOR_ITER designator + comp_iter JUMP_BACK RETURN_VALUE RETURN_LAST + + ''' + + + def p_augmented_assign(self, args): + ''' + stmt ::= augassign1 + stmt ::= augassign2 + augassign1 ::= expr expr inplace_op designator + augassign1 ::= expr expr inplace_op ROT_THREE STORE_SUBSCR + augassign1 ::= expr expr inplace_op ROT_TWO STORE_SLICE+0 + augassign1 ::= expr expr inplace_op ROT_THREE STORE_SLICE+1 + augassign1 ::= expr expr inplace_op ROT_THREE STORE_SLICE+2 + augassign1 ::= expr expr inplace_op ROT_FOUR STORE_SLICE+3 + augassign2 ::= expr DUP_TOP LOAD_ATTR expr + inplace_op ROT_TWO STORE_ATTR + + inplace_op ::= INPLACE_ADD + inplace_op ::= INPLACE_SUBTRACT + inplace_op ::= INPLACE_MULTIPLY + inplace_op ::= INPLACE_DIVIDE + inplace_op ::= INPLACE_TRUE_DIVIDE + inplace_op ::= INPLACE_FLOOR_DIVIDE + inplace_op ::= INPLACE_MODULO + inplace_op ::= INPLACE_POWER + inplace_op ::= INPLACE_LSHIFT + inplace_op ::= INPLACE_RSHIFT + inplace_op ::= INPLACE_AND + inplace_op ::= INPLACE_XOR + inplace_op ::= INPLACE_OR + ''' + + def p_assign(self, args): + ''' + stmt ::= assign + assign ::= expr DUP_TOP designList + assign ::= expr designator + + stmt ::= assign2 + stmt ::= assign3 + assign2 ::= expr expr ROT_TWO designator designator + assign3 ::= expr expr expr ROT_THREE ROT_TWO designator designator designator + ''' + + def p_print(self, args): + ''' + stmt ::= print_items_stmt + stmt ::= print_nl + stmt ::= print_items_nl_stmt + + print_items_stmt ::= expr PRINT_ITEM print_items_opt + print_items_nl_stmt ::= expr PRINT_ITEM print_items_opt PRINT_NEWLINE_CONT + print_items_opt ::= print_items + print_items_opt ::= + print_items ::= print_items print_item + print_items ::= print_item + print_item ::= expr PRINT_ITEM_CONT + print_nl ::= PRINT_NEWLINE + ''' + + def p_print_to(self, args): + ''' + stmt ::= print_to + stmt ::= print_to_nl + stmt ::= print_nl_to + print_to ::= expr print_to_items POP_TOP + print_to_nl ::= expr print_to_items PRINT_NEWLINE_TO + print_nl_to ::= expr PRINT_NEWLINE_TO + print_to_items ::= print_to_items print_to_item + print_to_items ::= print_to_item + print_to_item ::= DUP_TOP expr ROT_TWO PRINT_ITEM_TO + ''' + + def p_import20(self, args): + ''' + stmt ::= importstmt + stmt ::= importfrom + stmt ::= importstar + stmt ::= importmultiple + + importlist2 ::= importlist2 import_as + importlist2 ::= import_as + import_as ::= IMPORT_NAME designator + import_as ::= IMPORT_NAME LOAD_ATTR designator + import_as ::= IMPORT_NAME LOAD_ATTR LOAD_ATTR designator + import_as ::= IMPORT_NAME LOAD_ATTR LOAD_ATTR LOAD_ATTR designator + import_as ::= IMPORT_FROM designator + + importstmt ::= LOAD_CONST LOAD_CONST import_as + importstar ::= LOAD_CONST LOAD_CONST IMPORT_NAME IMPORT_STAR + importfrom ::= LOAD_CONST LOAD_CONST IMPORT_NAME importlist2 POP_TOP + importstar ::= LOAD_CONST LOAD_CONST IMPORT_NAME_CONT IMPORT_STAR + importfrom ::= LOAD_CONST LOAD_CONST IMPORT_NAME_CONT importlist2 POP_TOP + importmultiple ::= LOAD_CONST LOAD_CONST import_as imports_cont + + imports_cont ::= imports_cont import_cont + imports_cont ::= import_cont + import_cont ::= LOAD_CONST LOAD_CONST import_as_cont + import_as_cont ::= IMPORT_NAME_CONT designator + import_as_cont ::= IMPORT_NAME_CONT LOAD_ATTR designator + import_as_cont ::= IMPORT_NAME_CONT LOAD_ATTR LOAD_ATTR designator + import_as_cont ::= IMPORT_NAME_CONT LOAD_ATTR LOAD_ATTR LOAD_ATTR designator + import_as_cont ::= IMPORT_FROM designator + ''' + + def p_grammar(self, args): + ''' + stmts ::= stmts sstmt + stmts ::= sstmt + sstmt ::= stmt + sstmt ::= ifelsestmtr + sstmt ::= return_stmt RETURN_LAST + + stmts_opt ::= stmts + stmts_opt ::= passstmt + passstmt ::= + + _stmts ::= _stmts stmt + _stmts ::= stmt + + c_stmts ::= _stmts + c_stmts ::= _stmts lastc_stmt + c_stmts ::= lastc_stmt + c_stmts ::= continue_stmts + + lastc_stmt ::= iflaststmt + lastc_stmt ::= whileelselaststmt + lastc_stmt ::= forelselaststmt + lastc_stmt ::= ifelsestmtr + lastc_stmt ::= ifelsestmtc + lastc_stmt ::= tryelsestmtc + + c_stmts_opt ::= c_stmts + c_stmts_opt ::= passstmt + + l_stmts ::= _stmts + l_stmts ::= return_stmts + l_stmts ::= continue_stmts + l_stmts ::= _stmts lastl_stmt + l_stmts ::= lastl_stmt + + lastl_stmt ::= iflaststmtl + lastl_stmt ::= ifelsestmtl + lastl_stmt ::= forelselaststmtl + lastl_stmt ::= tryelsestmtl + + l_stmts_opt ::= l_stmts + l_stmts_opt ::= passstmt + + suite_stmts ::= _stmts + suite_stmts ::= return_stmts + suite_stmts ::= continue_stmts + + suite_stmts_opt ::= suite_stmts + suite_stmts_opt ::= passstmt + + else_suite ::= suite_stmts + else_suitel ::= l_stmts + else_suitec ::= c_stmts + else_suitec ::= return_stmts + + designList ::= designator designator + designList ::= designator DUP_TOP designList + + designator ::= STORE_FAST + designator ::= STORE_NAME + designator ::= STORE_GLOBAL + designator ::= STORE_DEREF + designator ::= expr STORE_ATTR + designator ::= expr STORE_SLICE+0 + designator ::= expr expr STORE_SLICE+1 + designator ::= expr expr STORE_SLICE+2 + designator ::= expr expr expr STORE_SLICE+3 + designator ::= store_subscr + store_subscr ::= expr expr STORE_SUBSCR + designator ::= unpack + designator ::= unpack_list + + stmt ::= classdef + stmt ::= call_stmt + call_stmt ::= expr POP_TOP + + stmt ::= return_stmt + return_stmt ::= expr RETURN_VALUE + return_stmts ::= return_stmt + return_stmts ::= _stmts return_stmt + + return_if_stmts ::= return_if_stmt + return_if_stmts ::= _stmts return_if_stmt + return_if_stmt ::= expr RETURN_END_IF + + stmt ::= break_stmt + break_stmt ::= BREAK_LOOP + + stmt ::= continue_stmt + continue_stmt ::= CONTINUE + continue_stmt ::= CONTINUE_LOOP + continue_stmts ::= _stmts lastl_stmt continue_stmt + continue_stmts ::= lastl_stmt continue_stmt + continue_stmts ::= continue_stmt + + stmt ::= raise_stmt + raise_stmt ::= exprlist RAISE_VARARGS + raise_stmt ::= nullexprlist RAISE_VARARGS + + stmt ::= exec_stmt + exec_stmt ::= expr exprlist DUP_TOP EXEC_STMT + exec_stmt ::= expr exprlist EXEC_STMT + + stmt ::= assert + stmt ::= assert2 + stmt ::= ifstmt + stmt ::= ifelsestmt + + stmt ::= whilestmt + stmt ::= whilenotstmt + stmt ::= while1stmt + stmt ::= whileelsestmt + stmt ::= while1elsestmt + stmt ::= forstmt + stmt ::= forelsestmt + stmt ::= trystmt + stmt ::= tryelsestmt + stmt ::= tryfinallystmt + stmt ::= withstmt + stmt ::= withasstmt + + stmt ::= del_stmt + del_stmt ::= DELETE_FAST + del_stmt ::= DELETE_NAME + del_stmt ::= DELETE_GLOBAL + del_stmt ::= expr DELETE_SLICE+0 + del_stmt ::= expr expr DELETE_SLICE+1 + del_stmt ::= expr expr DELETE_SLICE+2 + del_stmt ::= expr expr expr DELETE_SLICE+3 + del_stmt ::= delete_subscr + delete_subscr ::= expr expr DELETE_SUBSCR + del_stmt ::= expr DELETE_ATTR + + kwarg ::= LOAD_CONST expr + + classdef ::= LOAD_CONST expr mkfunc + CALL_FUNCTION_0 BUILD_CLASS designator + + stmt ::= classdefdeco + classdefdeco ::= classdefdeco1 designator + classdefdeco1 ::= expr classdefdeco1 CALL_FUNCTION_1 + classdefdeco1 ::= expr classdefdeco2 CALL_FUNCTION_1 + classdefdeco2 ::= LOAD_CONST expr mkfunc CALL_FUNCTION_0 BUILD_CLASS + + _jump ::= JUMP_ABSOLUTE + _jump ::= JUMP_FORWARD + _jump ::= JUMP_BACK + + jmp_false ::= POP_JUMP_IF_FALSE + jmp_false ::= JUMP_IF_FALSE + jmp_true ::= POP_JUMP_IF_TRUE + jmp_true ::= JUMP_IF_TRUE + + multi_come_from ::= multi_come_from COME_FROM + multi_come_from ::= + assert_end ::= multi_come_from POP_TOP + assert_end ::= + + assert ::= assert_expr jmp_true + LOAD_ASSERT RAISE_VARARGS assert_end + assert2 ::= assert_expr jmp_true + LOAD_ASSERT expr RAISE_VARARGS assert_end + assert ::= assert_expr jmp_true + LOAD_GLOBAL RAISE_VARARGS assert_end + assert2 ::= assert_expr jmp_true + LOAD_GLOBAL expr RAISE_VARARGS assert_end + + assert_expr ::= assert_expr_or + assert_expr ::= assert_expr_and + assert_expr ::= expr + assert_expr_or ::= assert_expr jmp_true expr + assert_expr_and ::= assert_expr jmp_false expr + + ifstmt ::= testexpr _ifstmts_jump + + testexpr ::= testfalse + testexpr ::= testtrue + testfalse ::= expr jmp_false + testtrue ::= expr jmp_true + + _ifstmts_jump ::= return_if_stmts + _ifstmts_jump ::= c_stmts_opt JUMP_FORWARD COME_FROM + + iflaststmt ::= testexpr c_stmts_opt JUMP_ABSOLUTE + + iflaststmtl ::= testexpr c_stmts_opt JUMP_BACK + + ifelsestmt ::= testexpr c_stmts_opt JUMP_FORWARD else_suite COME_FROM + + ifelsestmtc ::= testexpr c_stmts_opt JUMP_ABSOLUTE else_suitec + + ifelsestmtr ::= testexpr return_if_stmts return_stmts + + ifelsestmtl ::= testexpr c_stmts_opt JUMP_BACK else_suitel + + + trystmt ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK + try_middle COME_FROM + + tryelsestmt ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK + try_middle else_suite COME_FROM + + tryelsestmtc ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK + try_middle else_suitec COME_FROM + + tryelsestmtl ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK + try_middle else_suitel COME_FROM + + try_middle ::= jmp_abs COME_FROM except_stmts + END_FINALLY + try_middle ::= JUMP_FORWARD COME_FROM except_stmts + END_FINALLY COME_FROM + + except_stmts ::= except_stmts except_stmt + except_stmts ::= except_stmt + + except_stmt ::= except_cond1 except_suite + except_stmt ::= except_cond2 except_suite + except_stmt ::= except + + except_suite ::= c_stmts_opt JUMP_FORWARD + except_suite ::= c_stmts_opt jmp_abs + except_suite ::= return_stmts + + except_cond1 ::= DUP_TOP expr COMPARE_OP + jmp_false POP_TOP POP_TOP POP_TOP + + except_cond2 ::= DUP_TOP expr COMPARE_OP + jmp_false POP_TOP designator POP_TOP + + except ::= POP_TOP POP_TOP POP_TOP c_stmts_opt JUMP_FORWARD + except ::= POP_TOP POP_TOP POP_TOP c_stmts_opt jmp_abs + except ::= POP_TOP POP_TOP POP_TOP return_stmts + + jmp_abs ::= JUMP_ABSOLUTE + jmp_abs ::= JUMP_BACK + + tryfinallystmt ::= SETUP_FINALLY suite_stmts + POP_BLOCK LOAD_CONST + COME_FROM suite_stmts_opt END_FINALLY + + withstmt ::= expr SETUP_WITH POP_TOP suite_stmts_opt + POP_BLOCK LOAD_CONST COME_FROM + WITH_CLEANUP END_FINALLY + + withasstmt ::= expr SETUP_WITH designator suite_stmts_opt + POP_BLOCK LOAD_CONST COME_FROM + WITH_CLEANUP END_FINALLY + + whilestmt ::= SETUP_LOOP + testexpr + l_stmts_opt JUMP_BACK + POP_BLOCK COME_FROM + + whilestmt ::= SETUP_LOOP + testexpr + return_stmts + POP_BLOCK COME_FROM + + while1stmt ::= SETUP_LOOP l_stmts JUMP_BACK COME_FROM + while1stmt ::= SETUP_LOOP return_stmts COME_FROM + whileelsestmt ::= SETUP_LOOP testexpr + l_stmts_opt JUMP_BACK + POP_BLOCK + else_suite COME_FROM + + whileelselaststmt ::= SETUP_LOOP testexpr + l_stmts_opt JUMP_BACK + POP_BLOCK + else_suitec COME_FROM + + _for ::= GET_ITER FOR_ITER + _for ::= LOAD_CONST FOR_LOOP + + for_block ::= l_stmts_opt JUMP_BACK + for_block ::= return_stmts _come_from + + forstmt ::= SETUP_LOOP expr _for designator + for_block POP_BLOCK COME_FROM + + forelsestmt ::= SETUP_LOOP expr _for designator + for_block POP_BLOCK else_suite COME_FROM + + forelselaststmt ::= SETUP_LOOP expr _for designator + for_block POP_BLOCK else_suitec COME_FROM + + forelselaststmtl ::= SETUP_LOOP expr _for designator + for_block POP_BLOCK else_suitel COME_FROM + + ''' + + def p_expr(self, args): + ''' + expr ::= _mklambda + expr ::= SET_LINENO + expr ::= LOAD_FAST + expr ::= LOAD_NAME + expr ::= LOAD_CONST + expr ::= LOAD_ASSERT + expr ::= LOAD_GLOBAL + expr ::= LOAD_DEREF + expr ::= LOAD_LOCALS + expr ::= load_attr + expr ::= binary_expr + expr ::= binary_expr_na + expr ::= build_list + expr ::= cmp + expr ::= mapexpr + expr ::= and + expr ::= and2 + expr ::= or + expr ::= unary_expr + expr ::= call_function + expr ::= unary_not + expr ::= unary_convert + expr ::= binary_subscr + expr ::= binary_subscr2 + expr ::= load_attr + expr ::= get_iter + expr ::= slice0 + expr ::= slice1 + expr ::= slice2 + expr ::= slice3 + expr ::= buildslice2 + expr ::= buildslice3 + expr ::= yield + + binary_expr ::= expr expr binary_op + binary_op ::= BINARY_ADD + binary_op ::= BINARY_MULTIPLY + binary_op ::= BINARY_AND + binary_op ::= BINARY_OR + binary_op ::= BINARY_XOR + binary_op ::= BINARY_SUBTRACT + binary_op ::= BINARY_DIVIDE + binary_op ::= BINARY_TRUE_DIVIDE + binary_op ::= BINARY_FLOOR_DIVIDE + binary_op ::= BINARY_MODULO + binary_op ::= BINARY_LSHIFT + binary_op ::= BINARY_RSHIFT + binary_op ::= BINARY_POWER + + unary_expr ::= expr unary_op + unary_op ::= UNARY_POSITIVE + unary_op ::= UNARY_NEGATIVE + unary_op ::= UNARY_INVERT + + unary_not ::= expr UNARY_NOT + unary_convert ::= expr UNARY_CONVERT + + binary_subscr ::= expr expr BINARY_SUBSCR + binary_subscr2 ::= expr expr DUP_TOPX_2 BINARY_SUBSCR + + load_attr ::= expr LOAD_ATTR + get_iter ::= expr GET_ITER + slice0 ::= expr SLICE+0 + slice0 ::= expr DUP_TOP SLICE+0 + slice1 ::= expr expr SLICE+1 + slice1 ::= expr expr DUP_TOPX_2 SLICE+1 + slice2 ::= expr expr SLICE+2 + slice2 ::= expr expr DUP_TOPX_2 SLICE+2 + slice3 ::= expr expr expr SLICE+3 + slice3 ::= expr expr expr DUP_TOPX_3 SLICE+3 + buildslice3 ::= expr expr expr BUILD_SLICE_3 + buildslice2 ::= expr expr BUILD_SLICE_2 + + yield ::= expr YIELD_VALUE + + _mklambda ::= load_closure mklambda + _mklambda ::= mklambda + + or ::= expr jmp_true expr _come_from + or ::= expr JUMP_IF_TRUE_OR_POP expr COME_FROM + and ::= expr jmp_false expr _come_from + and ::= expr JUMP_IF_FALSE_OR_POP expr COME_FROM + and2 ::= _jump jmp_false COME_FROM expr COME_FROM + + expr ::= conditional + conditional ::= expr jmp_false expr JUMP_FORWARD expr COME_FROM + conditional ::= expr jmp_false expr JUMP_ABSOLUTE expr + expr ::= conditionalnot + conditionalnot ::= expr jmp_true expr _jump expr COME_FROM + + stmt ::= return_lambda + stmt ::= conditional_lambda + stmt ::= conditional_lambda2 + + return_lambda ::= expr RETURN_VALUE LAMBDA_MARKER + conditional_lambda ::= expr jmp_false return_if_stmt return_stmt LAMBDA_MARKER + + cmp ::= cmp_list + cmp ::= compare + compare ::= expr expr COMPARE_OP + cmp_list ::= expr cmp_list1 ROT_TWO POP_TOP + _come_from + cmp_list1 ::= expr DUP_TOP ROT_THREE + COMPARE_OP JUMP_IF_FALSE_OR_POP + cmp_list1 COME_FROM + cmp_list1 ::= expr DUP_TOP ROT_THREE + COMPARE_OP jmp_false + cmp_list1 _come_from + cmp_list1 ::= expr DUP_TOP ROT_THREE + COMPARE_OP JUMP_IF_FALSE_OR_POP + cmp_list2 COME_FROM + cmp_list1 ::= expr DUP_TOP ROT_THREE + COMPARE_OP jmp_false + cmp_list2 _come_from + cmp_list2 ::= expr COMPARE_OP JUMP_FORWARD + cmp_list2 ::= expr COMPARE_OP RETURN_VALUE + mapexpr ::= BUILD_MAP kvlist + + kvlist ::= kvlist kv + kvlist ::= kvlist kv2 + kvlist ::= kvlist kv3 + kvlist ::= + + kv ::= DUP_TOP expr ROT_TWO expr STORE_SUBSCR + kv2 ::= DUP_TOP expr expr ROT_THREE STORE_SUBSCR + kv3 ::= expr expr STORE_MAP + + exprlist ::= exprlist expr + exprlist ::= expr + + nullexprlist ::= + ''' + + def nonterminal(self, nt, args): + collect = ('stmts', 'exprlist', 'kvlist', '_stmts', 'print_items') + + if nt in collect and len(args) > 1: + # + # Collect iterated thingies together. + # + rv = args[0] + rv.append(args[1]) + else: + rv = GenericASTBuilder.nonterminal(self, nt, args) + return rv + + def __ambiguity(self, children): + # only for debugging! to be removed hG/2000-10-15 + print children + return GenericASTBuilder.ambiguity(self, children) + + def resolve(self, list): + if len(list) == 2 and 'funcdef' in list and 'assign' in list: + return 'funcdef' + if 'grammar' in list and 'expr' in list: + return 'expr' + #print >> sys.stderr, 'resolve', str(list) + return GenericASTBuilder.resolve(self, list) + +nop = lambda self, args: None + +p = Parser() + +def parse(tokens, customize): + # + # Special handling for opcodes that take a variable number + # of arguments -- we add a new rule for each: + # + # expr ::= {expr}^n BUILD_LIST_n + # expr ::= {expr}^n BUILD_TUPLE_n + # unpack_list ::= UNPACK_LIST {expr}^n + # unpack ::= UNPACK_TUPLE {expr}^n + # unpack ::= UNPACK_SEQEUENE {expr}^n + # mkfunc ::= {expr}^n LOAD_CONST MAKE_FUNCTION_n + # mkfunc ::= {expr}^n load_closure LOAD_CONST MAKE_FUNCTION_n + # expr ::= expr {expr}^n CALL_FUNCTION_n + # expr ::= expr {expr}^n CALL_FUNCTION_VAR_n POP_TOP + # expr ::= expr {expr}^n CALL_FUNCTION_VAR_KW_n POP_TOP + # expr ::= expr {expr}^n CALL_FUNCTION_KW_n POP_TOP + # + global p + for k, v in customize.items(): + # avoid adding the same rule twice to this parser + if p.customized.has_key(k): + continue + p.customized[k] = None + + #nop = lambda self, args: None + op = k[:string.rfind(k, '_')] + if op in ('BUILD_LIST', 'BUILD_TUPLE', 'BUILD_SET'): + rule = 'build_list ::= ' + 'expr '*v + k + elif op in ('UNPACK_TUPLE', 'UNPACK_SEQUENCE'): + rule = 'unpack ::= ' + k + ' designator'*v + elif op == 'UNPACK_LIST': + rule = 'unpack_list ::= ' + k + ' designator'*v + elif op == 'DUP_TOPX': + # no need to add a rule + continue + #rule = 'dup_topx ::= ' + 'expr '*v + k + elif op == 'MAKE_FUNCTION': + p.addRule('mklambda ::= %s LOAD_LAMBDA %s' % + ('expr '*v, k), nop) + rule = 'mkfunc ::= %s LOAD_CONST %s' % ('expr '*v, k) + elif op == 'MAKE_CLOSURE': + p.addRule('mklambda ::= %s load_closure LOAD_LAMBDA %s' % + ('expr '*v, k), nop) + p.addRule('genexpr ::= %s load_closure LOAD_GENEXPR %s expr GET_ITER CALL_FUNCTION_1' % + ('expr '*v, k), nop) + p.addRule('setcomp ::= %s load_closure LOAD_SETCOMP %s expr GET_ITER CALL_FUNCTION_1' % + ('expr '*v, k), nop) + p.addRule('dictcomp ::= %s load_closure LOAD_DICTCOMP %s expr GET_ITER CALL_FUNCTION_1' % + ('expr '*v, k), nop) + rule = 'mkfunc ::= %s load_closure LOAD_CONST %s' % ('expr '*v, k) +# rule = 'mkfunc ::= %s closure_list LOAD_CONST %s' % ('expr '*v, k) + elif op in ('CALL_FUNCTION', 'CALL_FUNCTION_VAR', + 'CALL_FUNCTION_VAR_KW', 'CALL_FUNCTION_KW'): + na = (v & 0xff) # positional parameters + nk = (v >> 8) & 0xff # keyword parameters + # number of apply equiv arguments: + nak = ( len(op)-len('CALL_FUNCTION') ) / 3 + rule = 'call_function ::= expr ' + 'expr '*na + 'kwarg '*nk \ + + 'expr ' * nak + k + else: + raise Exception('unknown customize token %s' % k) + p.addRule(rule, nop) + ast = p.parse(tokens) +# p.cleanup() + return ast diff --git a/build/lib.linux-i686-2.7/uncompyle2/Scanner.py b/build/lib.linux-i686-2.7/uncompyle2/Scanner.py new file mode 100755 index 00000000..83369d1d --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/Scanner.py @@ -0,0 +1,849 @@ +# Copyright (c) 1999 John Aycock +# Copyright (c) 2000-2002 by hartmut Goebel +# Copyright (c) 2005 by Dan Pascu +# +# See main module for license. +# + +__all__ = ['Token', 'Scanner', 'getscanner'] + +import types +import disas as dis +from collections import namedtuple +from array import array +from operator import itemgetter + +class Token: + """ + Class representing a byte-code token. + + A byte-code token is equivalent to the contents of one line + as output by dis.dis(). + """ + def __init__(self, type_, attr=None, pattr=None, offset=-1, linestart=False): + self.type = intern(type_) + self.attr = attr + self.pattr = pattr + self.offset = offset + self.linestart = linestart + + def __cmp__(self, o): + if isinstance(o, Token): + # both are tokens: compare type and pattr + return cmp(self.type, o.type) or cmp(self.pattr, o.pattr) + else: + return cmp(self.type, o) + + def __repr__(self): return str(self.type) + def __str__(self): + pattr = self.pattr + if self.linestart: + return '\n%s\t%-17s %r' % (self.offset, self.type, pattr) + else: + return '%s\t%-17s %r' % (self.offset, self.type, pattr) + + def __hash__(self): return hash(self.type) + def __getitem__(self, i): raise IndexError + + +class Code: + """ + Class for representing code-objects. + + This is similar to the original code object, but additionally + the diassembled code is stored in the attribute '_tokens'. + """ + def __init__(self, co, scanner, classname=None): + for i in dir(co): + if i.startswith('co_'): + setattr(self, i, getattr(co, i)) + self._tokens, self._customize = scanner.disassemble(co, classname) + +class Scanner: + def __init__(self, version): + self.version = version + self.resetTokenClass() + + dis.setVersion(version) + globals().update({'HAVE_ARGUMENT': dis.HAVE_ARGUMENT}) + globals().update({k.replace('+','_'):v for (k,v) in dis.opmap.items()}) + globals().update({'PJIF': dis.opmap['POP_JUMP_IF_FALSE']}) + globals().update({'PJIT': dis.opmap['POP_JUMP_IF_TRUE']}) + globals().update({'JA': dis.opmap['JUMP_ABSOLUTE']}) + globals().update({'JF': dis.opmap['JUMP_FORWARD']}) + + self.JUMP_OPs = map(lambda op: dis.opname[op], + dis.hasjrel + dis.hasjabs) + + def setShowAsm(self, showasm, out=None): + self.showasm = showasm + self.out = out + + def setTokenClass(self, tokenClass): + assert type(tokenClass) == types.ClassType + self.Token = tokenClass + + def resetTokenClass(self): + self.setTokenClass(Token) + + def disassemble(self, co, classname=None): + """ + Disassemble a code object, returning a list of 'Token'. + + The main part of this procedure is modelled after + dis.disassemble(). + """ + rv = [] + customize = {} + Token = self.Token # shortcut + self.code = code = array('B', co.co_code) + n = len(code) + self.prev = [0] + # mapping adresses of instru & arg + for i in self.op_range(0, n): + c = code[i] + op = code[i] + self.prev.append(i) + if op >= HAVE_ARGUMENT: + self.prev.append(i) + self.prev.append(i) + + self.lines = [] + linetuple = namedtuple('linetuple', ['l_no', 'next']) + j = 0 + # linestarts contains bloc code adresse (addr,block) + linestarts = list(dis.findlinestarts(co)) + linestartoffsets = {a for (a, _) in linestarts} + (prev_start_byte, prev_line_no) = linestarts[0] + for (start_byte, line_no) in linestarts[1:]: + while j < start_byte: + self.lines.append(linetuple(prev_line_no, start_byte)) + j += 1 + last_op = code[self.prev[start_byte]] + (prev_start_byte, prev_line_no) = (start_byte, line_no) + while j < n: + self.lines.append(linetuple(prev_line_no, n)) + j+=1 + # self.lines contains (block,addrLastInstr) + cf = self.find_jump_targets(code) + # contains (code, [addrRefToCode]) + if classname: + classname = '_' + classname.lstrip('_') + '__' + def unmangle(name): + if name.startswith(classname) and name[-2:] != '__': + return name[len(classname) - 2:] + return name + + free = [ unmangle(name) for name in (co.co_cellvars + co.co_freevars) ] + names = [ unmangle(name) for name in co.co_names ] + varnames = [ unmangle(name) for name in co.co_varnames ] + else: + free = co.co_cellvars + co.co_freevars + names = co.co_names + varnames = co.co_varnames + + last_stmt = self.next_stmt[0] + i = self.next_stmt[last_stmt] + replace = {} + while i < n-1: + if self.lines[last_stmt].next > i: + if code[last_stmt] == PRINT_ITEM: + if code[i] == PRINT_ITEM: + replace[i] = 'PRINT_ITEM_CONT' + elif code[i] == PRINT_NEWLINE: + replace[i] = 'PRINT_NEWLINE_CONT' + last_stmt = i + i = self.next_stmt[i] + + imports = self.all_instr(0, n, (IMPORT_NAME, IMPORT_FROM, IMPORT_STAR)) + if len(imports) > 1: + last_import = imports[0] + for i in imports[1:]: + if self.lines[last_import].next > i: + if code[last_import] == IMPORT_NAME == code[i]: + replace[i] = 'IMPORT_NAME_CONT' + last_import = i + + extended_arg = 0 + for offset in self.op_range(0, n): + + if offset in cf: + k = 0 + for j in cf[offset]: + rv.append(Token('COME_FROM', None, repr(j), + offset="%s_%d" % (offset, k) )) + k += 1 + + op = code[offset] + opname = dis.opname[op] + oparg = None; pattr = None + if op >= HAVE_ARGUMENT: + oparg = code[offset+1] + code[offset+2] * 256 + extended_arg + extended_arg = 0 + if op == dis.EXTENDED_ARG: + extended_arg = oparg * 65536L + continue + if op in dis.hasconst: + const = co.co_consts[oparg] + if type(const) == types.CodeType: + oparg = const + if const.co_name == '': + assert opname == 'LOAD_CONST' + opname = 'LOAD_LAMBDA' + elif const.co_name == '': + opname = 'LOAD_GENEXPR' + elif const.co_name == '': + opname = 'LOAD_DICTCOMP' + elif const.co_name == '': + opname = 'LOAD_SETCOMP' + # verify uses 'pattr' for comparism, since 'attr' + # now holds Code(const) and thus can not be used + # for comparism (todo: think about changing this) + #pattr = 'code_object @ 0x%x %s->%s' %\ + # (id(const), const.co_filename, const.co_name) + pattr = '' + else: + pattr = const + elif op in dis.hasname: + pattr = names[oparg] + elif op in dis.hasjrel: + pattr = repr(offset + 3 + oparg) + elif op in dis.hasjabs: + pattr = repr(oparg) + elif op in dis.haslocal: + pattr = varnames[oparg] + elif op in dis.hascompare: + pattr = dis.cmp_op[oparg] + elif op in dis.hasfree: + pattr = free[oparg] + + if op in (BUILD_LIST, BUILD_TUPLE, BUILD_SET, BUILD_SLICE, + UNPACK_SEQUENCE, + MAKE_FUNCTION, CALL_FUNCTION, MAKE_CLOSURE, + CALL_FUNCTION_VAR, CALL_FUNCTION_KW, + CALL_FUNCTION_VAR_KW, DUP_TOPX, + ): + # CE - Hack for >= 2.5 + # Now all values loaded via LOAD_CLOSURE are packed into + # a tuple before calling MAKE_CLOSURE. + if op == BUILD_TUPLE and \ + code[offset-3] == LOAD_CLOSURE: + continue + else: + opname = '%s_%d' % (opname, oparg) + if op != BUILD_SLICE: + customize[opname] = oparg + elif op == JA: + target = self.get_target(offset) + if target < offset: + if offset in self.stmts and code[offset+3] not in (END_FINALLY, POP_BLOCK) \ + and offset not in self.not_continue: + opname = 'CONTINUE' + else: + opname = 'JUMP_BACK' + + elif op == LOAD_GLOBAL: + try: + if pattr == 'AssertionError' and rv and rv[-1] == 'POP_JUMP_IF_TRUE': + opname = 'LOAD_ASSERT' + except AttributeError: + pass + elif op == RETURN_VALUE: + if offset in self.return_end_ifs: + opname = 'RETURN_END_IF' + + if offset not in replace: + rv.append(Token(opname, oparg, pattr, offset, linestart = offset in linestartoffsets)) + else: + rv.append(Token(replace[offset], oparg, pattr, offset, linestart = offset in linestartoffsets)) + + if self.showasm: + out = self.out # shortcut + for t in rv: + print >>out, t + print >>out + + return rv, customize + + def get_target(self, pos, op=None): + if op is None: + op = self.code[pos] + target = self.code[pos+1] + self.code[pos+2] * 256 + if op in dis.hasjrel: + target += pos + 3 + return target + + def first_instr(self, start, end, instr, target=None, exact=True): + """ + Find the first in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + return i + dest = self.get_target(i, op) + if dest == target: + return i + elif not exact: + _distance = abs(target - dest) + if _distance < distance: + distance = _distance + pos = i + return pos + + def last_instr(self, start, end, instr, target=None, exact=True): + """ + Find the last in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + + code = self.code + if not (start>=0 and end<=len(code)): + return None + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + pos = i + else: + dest = self.get_target(i, op) + if dest == target: + distance = 0 + pos = i + elif not exact: + _distance = abs(target - dest) + if _distance <= distance: + distance = _distance + pos = i + return pos + + def all_instr(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + return result + + def op_size(self, op): + if op < HAVE_ARGUMENT: + return 1 + else: + return 3 + + def op_range(self, start, end): + while start < end: + yield start + start += self.op_size(self.code[start]) + + def build_stmt_indices(self): + code = self.code + start = 0; + end = len(code) + + stmt_opcodes = { + SETUP_LOOP, BREAK_LOOP, CONTINUE_LOOP, + SETUP_FINALLY, END_FINALLY, SETUP_EXCEPT, SETUP_WITH, + POP_BLOCK, STORE_FAST, DELETE_FAST, STORE_DEREF, + STORE_GLOBAL, DELETE_GLOBAL, STORE_NAME, DELETE_NAME, + STORE_ATTR, DELETE_ATTR, STORE_SUBSCR, DELETE_SUBSCR, + RETURN_VALUE, RAISE_VARARGS, POP_TOP, + PRINT_EXPR, PRINT_ITEM, PRINT_NEWLINE, PRINT_ITEM_TO, PRINT_NEWLINE_TO, + STORE_SLICE_0, STORE_SLICE_1, STORE_SLICE_2, STORE_SLICE_3, + DELETE_SLICE_0, DELETE_SLICE_1, DELETE_SLICE_2, DELETE_SLICE_3, + JUMP_ABSOLUTE, EXEC_STMT, + } + + stmt_opcode_seqs = [(PJIF, JF), (PJIF, JA), (PJIT, JF), (PJIT, JA)] + + designator_ops = { + STORE_FAST, STORE_NAME, STORE_GLOBAL, STORE_DEREF, STORE_ATTR, + STORE_SLICE_0, STORE_SLICE_1, STORE_SLICE_2, STORE_SLICE_3, + STORE_SUBSCR, UNPACK_SEQUENCE, JA + } + + prelim = self.all_instr(start, end, stmt_opcodes) + + stmts = self.stmts = set(prelim) + + pass_stmts = set() + for seq in stmt_opcode_seqs: + for i in self.op_range(start, end-(len(seq)+1)): + match = True + for elem in seq: + if elem != code[i]: + match = False + break + i += self.op_size(code[i]) + + if match: + i = self.prev[i] + stmts.add(i) + pass_stmts.add(i) + + if pass_stmts: + stmt_list = list(stmts) + stmt_list.sort() + else: + stmt_list = prelim + last_stmt = -1 + self.next_stmt = [] + slist = self.next_stmt = [] + i = 0 + for s in stmt_list: + if code[s] == JA and s not in pass_stmts: + target = self.get_target(s) + if target > s or self.lines[last_stmt].l_no == self.lines[s].l_no: + stmts.remove(s) + continue + j = self.prev[s] + while code[j] == JA: + j = self.prev[j] + if code[j] == LIST_APPEND: #list comprehension + stmts.remove(s) + continue + elif code[s] == POP_TOP and code[self.prev[s]] == ROT_TWO: + stmts.remove(s) + continue + elif code[s] in designator_ops: + j = self.prev[s] + while code[j] in designator_ops: + j = self.prev[j] + if code[j] == FOR_ITER: + stmts.remove(s) + continue + last_stmt = s + slist += [s] * (s-i) + i = s + slist += [len(code)] * (len(code)-len(slist)) + + + def remove_mid_line_ifs(self, ifs): + filtered = [] + for i in ifs: + if self.lines[i].l_no == self.lines[i+3].l_no: + if self.code[self.prev[self.lines[i].next]] in (PJIT, PJIF): + continue + filtered.append(i) + return filtered + + + def rem_or(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + + pjits = self.all_instr(start, end, PJIT) + filtered = [] + for pjit in pjits: + tgt = self.get_target(pjit)-3 + for i in result: + if i <= pjit or i >= tgt: + filtered.append(i) + result = filtered + filtered = [] + return result + + def next_except_jump(self, start): + """ + Return the next jump that was generated by an except SomeException: + construct in a try...except...else clause or None if not found. + """ + + except_match = self.first_instr(start, self.lines[start].next, POP_JUMP_IF_FALSE) + if except_match: + jmp = self.prev[self.get_target(except_match)] + self.ignore_if.add(except_match) + return jmp + + count_END_FINALLY = 0 + count_SETUP_ = 0 + for i in self.op_range(start, len(self.code)): + op = self.code[i] + if op == END_FINALLY: + if count_END_FINALLY == count_SETUP_: + assert self.code[self.prev[i]] in (JA, JF, RETURN_VALUE) + return self.prev[i] + count_END_FINALLY += 1 + elif op in (SETUP_EXCEPT, SETUP_WITH, SETUP_FINALLY): + count_SETUP_ += 1 + + + def restrict_to_parent(self, target, parent): + """Restrict pos to parent boundaries.""" + if not (parent['start'] < target < parent['end']): + target = parent['end'] + return target + + + def detect_structure(self, pos, op=None): + """ + Detect type of block structures and their boundaries to fix optimizied jumps + in python2.3+ + """ + + # TODO: check the struct boundaries more precisely -Dan + + code = self.code + # Ev remove this test and make op a mandatory argument -Dan + if op is None: + op = code[pos] + + ## Detect parent structure + parent = self.structs[0] + start = parent['start'] + end = parent['end'] + for s in self.structs: + _start = s['start'] + _end = s['end'] + if (_start <= pos < _end) and (_start >= start and _end <= end): + start = _start + end = _end + parent = s + ## We need to know how many new structures were added in this run + origStructCount = len(self.structs) + + if op == SETUP_LOOP: + #import pdb; pdb.set_trace() + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + if target != end: + self.fixed_jumps[pos] = end + + (line_no, next_line_byte) = self.lines[pos] + jump_back = self.last_instr(start, end, JA, + next_line_byte, False) + if not jump_back: # loop suite ends in return. wtf right? + jump_back = self.last_instr(start, end, RETURN_VALUE) + 1 + if not jump_back: + return + if code[self.prev[next_line_byte]] not in (PJIF, PJIT): + loop_type = 'for' + else: + loop_type = 'while' + self.ignore_if.add(self.prev[next_line_byte]) + target = next_line_byte + end = jump_back + 3 + else: + if self.get_target(jump_back) >= next_line_byte: + jump_back = self.last_instr(start, end, JA, + start, False) + + if end > jump_back+4 and code[end] in (JF, JA): + if code[jump_back+4] in (JA, JF): + if self.get_target(jump_back+4) == self.get_target(end): + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + elif target < pos: + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + + target = self.get_target(jump_back, JA) + + if code[target] in (FOR_ITER, GET_ITER): + loop_type = 'for' + else: + loop_type = 'while' + test = self.prev[next_line_byte] + if test == pos: + loop_type = 'while 1' + else: + self.ignore_if.add(test) + test_target = self.get_target(test) + if test_target > (jump_back+3): + jump_back = test_target + + self.loops.append(target) + self.structs.append({'type': loop_type + '-loop', + 'start': target, + 'end': jump_back}) + if jump_back+3 != end: + self.structs.append({'type': loop_type + '-else', + 'start': jump_back+3, + 'end': end}) + elif op == SETUP_EXCEPT: + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + if target != end: + self.fixed_jumps[pos] = end + #print target, end, parent + ## Add the try block + self.structs.append({'type': 'try', + 'start': start, + 'end': end-4}) + ## Now isolate the except and else blocks + end_else = start_else = self.get_target(self.prev[end]) + + ## Add the except blocks + i = end + while self.code[i] != END_FINALLY: + jmp = self.next_except_jump(i) + if self.code[jmp] == RETURN_VALUE: + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp+1}) + i = jmp + 1 + else: + if self.get_target(jmp) != start_else: + end_else = self.get_target(jmp) + if self.code[jmp] == JF: + self.fixed_jumps[jmp] = -1 + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp}) + i = jmp + 3 + + ## Add the try-else block + if end_else != start_else: + r_end_else = self.restrict_to_parent(end_else, parent) + self.structs.append({'type': 'try-else', + 'start': i+1, + 'end': r_end_else}) + self.fixed_jumps[i] = r_end_else + else: + self.fixed_jumps[i] = i+1 + + + elif op in (PJIF, PJIT): + start = pos+3 + target = self.get_target(pos, op) + rtarget = self.restrict_to_parent(target, parent) + pre = self.prev + + if target != rtarget and parent['type'] == 'and/or': + self.fixed_jumps[pos] = rtarget + return + #does this jump to right after another cond jump? + # if so, it's part of a larger conditional + if (code[pre[target]] in (JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP, + PJIF, PJIT)) and (target > pos): + self.fixed_jumps[pos] = pre[target] + self.structs.append({'type': 'and/or', + 'start': start, + 'end': pre[target]}) + return + + # is this an if and + if op == PJIF: + match = self.rem_or(start, self.next_stmt[pos], PJIF, target) + match = self.remove_mid_line_ifs(match) + if match: + if code[pre[rtarget]] in (JF, JA) \ + and pre[rtarget] not in self.stmts \ + and self.restrict_to_parent(self.get_target(pre[rtarget]), parent) == rtarget: + if code[pre[pre[rtarget]]] == JA \ + and self.remove_mid_line_ifs([pos]) \ + and target == self.get_target(pre[pre[rtarget]]) \ + and (pre[pre[rtarget]] not in self.stmts or self.get_target(pre[pre[rtarget]]) > pre[pre[rtarget]])\ + and 1 == len(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], (PJIF, PJIT), target))): + pass + elif code[pre[pre[rtarget]]] == RETURN_VALUE \ + and self.remove_mid_line_ifs([pos]) \ + and 1 == (len(set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT), target))) \ + | set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT, JA), pre[rtarget], True))))): + pass + else: + fix = None + jump_ifs = self.all_instr(start, self.next_stmt[pos], PJIF) + last_jump_good = True + for j in jump_ifs: + if target == self.get_target(j): + if self.lines[j].next == j+3 and last_jump_good: + fix = j + break + else: + last_jump_good = False + self.fixed_jumps[pos] = fix or match[-1] + return + else: + self.fixed_jumps[pos] = match[-1] + return + else: # op == PJIT + next = self.next_stmt[pos] + if pre[next] == pos: + pass + elif code[next] in (JF, JA) and target == self.get_target(next): + if code[pre[next]] == PJIF: + if code[next] == JF or target != rtarget or code[pre[pre[rtarget]]] not in (JA, RETURN_VALUE): + self.fixed_jumps[pos] = pre[next] + return + elif code[next] == JA and code[target] in (JA, JF) \ + and self.get_target(target) == self.get_target(next): + self.fixed_jumps[pos] = pre[next] + return + + #don't add a struct for a while test, it's already taken care of + if pos in self.ignore_if: + return + + if code[pre[rtarget]] == JA and pre[rtarget] in self.stmts \ + and pre[rtarget] != pos and pre[pre[rtarget]] != pos \ + and not (code[rtarget] == JA and code[rtarget+3] == POP_BLOCK and code[pre[pre[rtarget]]] != JA): + rtarget = pre[rtarget] + + #does the if jump just beyond a jump op, then this is probably an if statement + if code[pre[rtarget]] in (JA, JF): + if_end = self.get_target(pre[rtarget]) + + #is this a loop not an if? + if (if_end < pre[rtarget]) and (code[pre[if_end]] == SETUP_LOOP): + if(if_end > start): + return + + end = self.restrict_to_parent(if_end, parent) + + self.structs.append({'type': 'if-then', + 'start': start, + 'end': pre[rtarget]}) + self.not_continue.add(pre[rtarget]) + + if rtarget < end: + self.structs.append({'type': 'if-else', + 'start': rtarget, + 'end': end}) + elif code[pre[rtarget]] == RETURN_VALUE: + self.structs.append({'type': 'if-then', + 'start': start, + 'end': rtarget}) + self.return_end_ifs.add(pre[rtarget]) + + elif op in (JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP): + target = self.get_target(pos, op) + if target > pos: + unop_target = self.last_instr(pos, target, JF, target) + if unop_target and code[unop_target+3] != ROT_TWO: + self.fixed_jumps[pos] = unop_target + else: + self.fixed_jumps[pos] = self.restrict_to_parent(target, parent) + + + + + def find_jump_targets(self, code): + """ + Detect all offsets in a byte code which are jump targets. + + Return the list of offsets. + + This procedure is modelled after dis.findlables(), but here + for each target the number of jumps are counted. + """ + + hasjrel = dis.hasjrel + hasjabs = dis.hasjabs + + n = len(code) + self.structs = [{'type': 'root', + 'start': 0, + 'end': n-1}] + self.loops = [] ## All loop entry points + self.fixed_jumps = {} ## Map fixed jumps to their real destination + self.ignore_if = set() + self.build_stmt_indices() + self.not_continue = set() + self.return_end_ifs = set() + + targets = {} + for i in self.op_range(0, n): + op = code[i] + + ## Determine structures and fix jumps for 2.3+ + self.detect_structure(i, op) + + if op >= HAVE_ARGUMENT: + label = self.fixed_jumps.get(i) + oparg = code[i+1] + code[i+2] * 256 + + + if label is None: + if op in hasjrel and op != FOR_ITER: + label = i + 3 + oparg + elif op in hasjabs: + if op in (JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP): + if (oparg > i): + label = oparg + + if label is not None and label != -1: + targets[label] = targets.get(label, []) + [i] + elif op == END_FINALLY and i in self.fixed_jumps: + label = self.fixed_jumps[i] + targets[label] = targets.get(label, []) + [i] + return targets diff --git a/build/lib.linux-i686-2.7/uncompyle2/Scanner25.py b/build/lib.linux-i686-2.7/uncompyle2/Scanner25.py new file mode 100755 index 00000000..f215f8b3 --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/Scanner25.py @@ -0,0 +1,945 @@ +# Copyright (c) 1999 John Aycock +# Copyright (c) 2000-2002 by hartmut Goebel +# Copyright (c) 2005 by Dan Pascu +# +# See main module for license. +# + +__all__ = ['Token', 'Scanner', 'getscanner'] + +import types +import disas as dis +from collections import namedtuple +from array import array +from operator import itemgetter +from struct import * +from Scanner import Token, Code + +class Scanner: + def __init__(self, version): + self.version = version + self.resetTokenClass() + + dis.setVersion(version) + globals().update({'HAVE_ARGUMENT': dis.HAVE_ARGUMENT}) + globals().update({k.replace('+','_'):v for (k,v) in dis.opmap.items()}) + globals().update({'PJIF': dis.opmap['JUMP_IF_FALSE']}) + globals().update({'PJIT': dis.opmap['JUMP_IF_TRUE']}) + globals().update({'JA': dis.opmap['JUMP_ABSOLUTE']}) + globals().update({'JF': dis.opmap['JUMP_FORWARD']}) + + self.JUMP_OPs = map(lambda op: dis.opname[op], + dis.hasjrel + dis.hasjabs) + + def setShowAsm(self, showasm, out=None): + self.showasm = showasm + self.out = out + + def setTokenClass(self, tokenClass): + assert type(tokenClass) == types.ClassType + self.Token = tokenClass + + def resetTokenClass(self): + self.setTokenClass(Token) + + def disassemble(self, co, classname=None): + """ + Disassemble a code object, returning a list of 'Token'. + + The main part of this procedure is modelled after + dis.disassemble(). + """ + rv = [] + customize = {} + Token = self.Token # shortcut + self.code = array('B', co.co_code) + n = len(self.code) + # linestarts contains bloc code adresse (addr,block) + self.linestarts = list(dis.findlinestarts(co)) + self.prev = [0] + pop_delet = 0 + i=0 + self.restructRelativeJump() + # class and names + if classname: + classname = '_' + classname.lstrip('_') + '__' + def unmangle(name): + if name.startswith(classname) and name[-2:] != '__': + return name[len(classname) - 2:] + return name + + free = [ unmangle(name) for name in (co.co_cellvars + co.co_freevars) ] + names = [ unmangle(name) for name in co.co_names ] + varnames = [ unmangle(name) for name in co.co_varnames ] + else: + free = co.co_cellvars + co.co_freevars + names = co.co_names + varnames = co.co_varnames + self.names = names + # add instruction to remonde in "toDel" list + toDel = [] + while i < n-pop_delet: + op = self.code[i] + ret = self.getOpcodeToDel(i) + if ret != None: + toDel += ret + if op >= dis.HAVE_ARGUMENT: + i += 2 + i += 1 + + if toDel: # degeu a revoir / repenser (tout faire d'un coup? chaud) + toDel = sorted(list(set(toDel))) + delta = 0 + for x in toDel: + if self.code[x-delta] >= dis.HAVE_ARGUMENT: + self.code.pop(x-delta) + self.restructCode(x-delta) + self.code.pop(x-delta) + self.restructCode(x-delta) + self.code.pop(x-delta) + self.restructCode(x-delta) + delta += 3 + else: + self.code.pop(x-delta) + self.restructCode(x-delta) + delta += 1 + # mapping adresses of prev instru + n = len(self.code) + for i in self.op_range(0, n): + op = self.code[i] + self.prev.append(i) + if op >= HAVE_ARGUMENT: + self.prev.append(i) + self.prev.append(i) + + j = 0 + linestarts = self.linestarts + self.lines = [] + linetuple = namedtuple('linetuple', ['l_no', 'next']) + linestartoffsets = {a for (a, _) in linestarts} + (prev_start_byte, prev_line_no) = linestarts[0] + for (start_byte, line_no) in linestarts[1:]: + while j < start_byte: + self.lines.append(linetuple(prev_line_no, start_byte)) + j += 1 + last_op = self.code[self.prev[start_byte]] + (prev_start_byte, prev_line_no) = (start_byte, line_no) + while j < n: + self.lines.append(linetuple(prev_line_no, n)) + j+=1 + # self.lines contains (block,addrLastInstr) + cf = self.find_jump_targets(self.code) + # contains (code, [addrRefToCode]) + + last_stmt = self.next_stmt[0] + i = self.next_stmt[last_stmt] + replace = {} + while i < n-1: + if self.lines[last_stmt].next > i: + if self.code[last_stmt] == PRINT_ITEM: + if self.code[i] == PRINT_ITEM: + replace[i] = 'PRINT_ITEM_CONT' + elif self.code[i] == PRINT_NEWLINE: + replace[i] = 'PRINT_NEWLINE_CONT' + last_stmt = i + i = self.next_stmt[i] + + imports = self.all_instr(0, n, (IMPORT_NAME, IMPORT_FROM, IMPORT_STAR)) + if len(imports) > 1: + last_import = imports[0] + for i in imports[1:]: + if self.lines[last_import].next > i: + if self.code[last_import] == IMPORT_NAME == self.code[i]: + replace[i] = 'IMPORT_NAME_CONT' + last_import = i + + extended_arg = 0 + for offset in self.op_range(0, n): + if offset in cf: + k = 0 + for j in cf[offset]: + rv.append(Token('COME_FROM', None, repr(j), + offset="%s_%d" % (offset, k) )) + k += 1 + + op = self.code[offset] + opname = dis.opname[op] + oparg = None; pattr = None + if op >= HAVE_ARGUMENT: + oparg = self.get_argument(offset) + extended_arg + extended_arg = 0 + if op == dis.EXTENDED_ARG: + extended_arg = oparg * 65536L + continue + if op in dis.hasconst: + const = co.co_consts[oparg] + if type(const) == types.CodeType: + oparg = const + if const.co_name == '': + assert opname == 'LOAD_CONST' + opname = 'LOAD_LAMBDA' + elif const.co_name == '': + opname = 'LOAD_GENEXPR' + elif const.co_name == '': + opname = 'LOAD_DICTCOMP' + elif const.co_name == '': + opname = 'LOAD_SETCOMP' + # verify uses 'pattr' for comparism, since 'attr' + # now holds Code(const) and thus can not be used + # for comparism (todo: think about changing this) + #pattr = 'code_object @ 0x%x %s->%s' %\ + # (id(const), const.co_filename, const.co_name) + pattr = '' + else: + pattr = const + elif op in dis.hasname: + pattr = names[oparg] + elif op in dis.hasjrel: + pattr = repr(offset + 3 + oparg) + elif op in dis.hasjabs: + pattr = repr(oparg) + elif op in dis.haslocal: + pattr = varnames[oparg] + elif op in dis.hascompare: + pattr = dis.cmp_op[oparg] + elif op in dis.hasfree: + pattr = free[oparg] + + if op in (BUILD_LIST, BUILD_TUPLE, BUILD_SLICE, + UNPACK_SEQUENCE, + MAKE_FUNCTION, CALL_FUNCTION, MAKE_CLOSURE, + CALL_FUNCTION_VAR, CALL_FUNCTION_KW, + CALL_FUNCTION_VAR_KW, DUP_TOPX, + ): + # CE - Hack for >= 2.5 + # Now all values loaded via LOAD_CLOSURE are packed into + # a tuple before calling MAKE_CLOSURE. + if op == BUILD_TUPLE and \ + self.code[offset-3] == LOAD_CLOSURE: + continue + else: + opname = '%s_%d' % (opname, oparg) + if op != BUILD_SLICE: + customize[opname] = oparg + elif op == JA: + target = self.get_target(offset) + if target < offset: + if offset in self.stmts and self.code[offset+3] not in (END_FINALLY, POP_BLOCK) \ + and offset not in self.not_continue: + opname = 'CONTINUE' + else: + opname = 'JUMP_BACK' + + elif op == LOAD_GLOBAL: + try: + if pattr == 'AssertionError' and rv and rv[-1] == 'JUMP_IF_TRUE': + opname = 'LOAD_ASSERT' + except AttributeError: + pass + elif op == RETURN_VALUE: + if offset in self.return_end_ifs: + opname = 'RETURN_END_IF' + + if offset not in replace: + rv.append(Token(opname, oparg, pattr, offset, linestart = offset in linestartoffsets)) + else: + rv.append(Token(replace[offset], oparg, pattr, offset, linestart = offset in linestartoffsets)) + + if self.showasm: + out = self.out # shortcut + for t in rv: + print >>out, t + print >>out + return rv, customize + + def getOpcodeToDel(self, i): + """ + check validity of the opcode at position I and return a list of opcode to delete + """ + opcode = self.code[i] + opsize = self.op_size(opcode) + if opcode == EXTENDED_ARG: + raise 'A faire' + if opcode in (PJIF,PJIT,JA,JF): + if self.code[i+opsize] == POP_TOP: + if self.code[i+opsize] == self.code[i+opsize+1] and self.code[i+opsize] == self.code[i+opsize+2] \ + and opcode in (JF,JA) and self.code[i+opsize] != self.code[i+opsize+3]: + pass + else: + return [i+opsize] + if opcode == RAISE_VARARGS: + if self.code[i+opsize] == POP_TOP: + return [i+opsize] + if opcode == BUILD_LIST: + if self.code[i+opsize] == DUP_TOP and self.code[i+opsize+1] in (STORE_NAME,STORE_FAST): + # del DUP/STORE_NAME x + toDel = [i+opsize,i+opsize+1] + nameDel = self.get_argument(i+opsize+1) + start = i+opsize+1 + end = start + # del LOAD_NAME x + while end < len(self.code): + end = self.first_instr(end, len(self.code), (LOAD_NAME,LOAD_FAST)) + if nameDel == self.get_argument(end): + toDel += [end] + break + if self.code[end] == LOAD_NAME: + end += self.op_size(LOAD_NAME) + else: + end += self.op_size(LOAD_FAST) + # log JA/POP_TOP to del and update PJIF + while start < end: + start = self.first_instr(start, len(self.code), (PJIF)) + if start == None: break + target = self.get_target(start) + if self.code[target] == POP_TOP and self.code[target-3] == JA: + toDel += [target, target-3] + # update PJIF + target = self.get_target(target-3) + if target > 0xFFFF: + raise 'A gerer' + self.code[start+1] = target & 0xFF + self.code[start+2] = (target >> 8) & 0xFF + start += self.op_size(PJIF) + # del DELETE_NAME x + while end < len(self.code): + end = self.first_instr(end, len(self.code), (DELETE_NAME,DELETE_FAST)) + if nameDel == self.get_argument(end): + toDel += [end] + break + if self.code[end] == DELETE_NAME: + end += self.op_size(DELETE_NAME) + else: + end += self.op_size(DELETE_FAST) + return toDel + return None + + def restructRelativeJump(self): + """ + change relative JUMP_IF_FALSE/TRUE to absolut jump + and remap the target of PJIF/PJIT + """ + for i in self.op_range(0, len(self.code)): + if(self.code[i] in (PJIF,PJIT)): + target = self.get_argument(i) + target += i + 3 + if target > 0xFFFF: + raise 'A gerer' + self.code[i+1] = target & 0xFF + self.code[i+2] = (target >> 8) & 0xFF + + for i in self.op_range(0, len(self.code)): + if(self.code[i] in (PJIF,PJIT)): + target = self.get_target(i) + if self.code[target] == JA: + target = self.get_target(target) + if target > 0xFFFF: + raise 'A gerer' + self.code[i+1] = target & 0xFF + self.code[i+2] = (target >> 8) & 0xFF + + def restructCode(self, i): + """ + restruct linestarts and jump destination after removing a POP_TOP + """ + result = list() + for item in self.linestarts: + if i < item[0]: + result.append((item[0]-1, item[1])) + else: + result.append((item[0], item[1])) + self.linestarts = result + + for x in self.op_range(0, len(self.code)): + op = self.code[x] + if op >= HAVE_ARGUMENT: + if op in dis.hasjrel: + if x < i and self.get_target(x) > i: + if self.code[x+1]-1 < 0: + self.code[x+2] -= 1 + self.code[x+1] = self.code[x+1]+255 + else: + self.code[x+1] -= 1 + elif op in dis.hasjabs: + if i < self.get_target(x): + if self.code[x+1]-1 < 0: + self.code[x+2] -= 1 + self.code[x+1] = self.code[x+1]+255 + else: + self.code[x+1] -= 1 + + def get_target(self, pos, op=None): + if op is None: + op = self.code[pos] + target = self.get_argument(pos) + if op in dis.hasjrel: + target += pos + 3 + return target + + def get_argument(self, pos): + target = self.code[pos+1] + self.code[pos+2] * 256 + return target + + def first_instr(self, start, end, instr, target=None, exact=True): + """ + Find the first in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + return i + dest = self.get_target(i, op) + if dest == target: + return i + elif not exact: + _distance = abs(target - dest) + if _distance < distance: + distance = _distance + pos = i + return pos + + def last_instr(self, start, end, instr, target=None, exact=True): + """ + Find the last in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + + code = self.code + if not (start>=0 and end<=len(code)): + return None + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + pos = i + else: + dest = self.get_target(i, op) + if dest == target: + distance = 0 + pos = i + elif not exact: + _distance = abs(target - dest) + if _distance <= distance: + distance = _distance + pos = i + return pos + + def all_instr(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + return result + + def op_size(self, op): + if op < HAVE_ARGUMENT: + return 1 + else: + return 3 + + def op_range(self, start, end): + while start < end: + yield start + start += self.op_size(self.code[start]) + + def build_stmt_indices(self): + code = self.code + start = 0; + end = len(code) + + stmt_opcodes = { + SETUP_LOOP, BREAK_LOOP, CONTINUE_LOOP, + SETUP_FINALLY, END_FINALLY, SETUP_EXCEPT, + POP_BLOCK, STORE_FAST, DELETE_FAST, STORE_DEREF, + STORE_GLOBAL, DELETE_GLOBAL, STORE_NAME, DELETE_NAME, + STORE_ATTR, DELETE_ATTR, STORE_SUBSCR, DELETE_SUBSCR, + RETURN_VALUE, RAISE_VARARGS, POP_TOP, + PRINT_EXPR, PRINT_ITEM, PRINT_NEWLINE, PRINT_ITEM_TO, PRINT_NEWLINE_TO, + JUMP_ABSOLUTE, EXEC_STMT, + } + + stmt_opcode_seqs = [(PJIF, JF), (PJIF, JA), (PJIT, JF), (PJIT, JA)] + + designator_ops = { + STORE_FAST, STORE_NAME, STORE_GLOBAL, STORE_DEREF, STORE_ATTR, + STORE_SLICE_0, STORE_SLICE_1, STORE_SLICE_2, STORE_SLICE_3, + STORE_SUBSCR, UNPACK_SEQUENCE, JA + } + + prelim = self.all_instr(start, end, stmt_opcodes) + + stmts = self.stmts = set(prelim) + pass_stmts = set() + for seq in stmt_opcode_seqs: + for i in self.op_range(start, end-(len(seq)+1)): + match = True + for elem in seq: + if elem != code[i]: + match = False + break + i += self.op_size(code[i]) + + if match: + i = self.prev[i] + stmts.add(i) + pass_stmts.add(i) + + if pass_stmts: + stmt_list = list(stmts) + stmt_list.sort() + else: + stmt_list = prelim + last_stmt = -1 + self.next_stmt = [] + slist = self.next_stmt = [] + i = 0 + for s in stmt_list: + if code[s] == JA and s not in pass_stmts: + target = self.get_target(s) + if target > s or self.lines[last_stmt].l_no == self.lines[s].l_no: + stmts.remove(s) + continue + j = self.prev[s] + while code[j] == JA: + j = self.prev[j] + if code[j] == LIST_APPEND: #list comprehension + stmts.remove(s) + continue + elif code[s] == POP_TOP and code[self.prev[s]] == ROT_TWO: + stmts.remove(s) + continue + elif code[s] in designator_ops: + j = self.prev[s] + while code[j] in designator_ops: + j = self.prev[j] + if code[j] == FOR_ITER: + stmts.remove(s) + continue + last_stmt = s + slist += [s] * (s-i) + i = s + slist += [len(code)] * (len(code)-len(slist)) + + def remove_mid_line_ifs(self, ifs): + filtered = [] + for i in ifs: + if self.lines[i].l_no == self.lines[i+3].l_no: + if self.code[self.prev[self.lines[i].next]] in (PJIT, PJIF): + continue + filtered.append(i) + return filtered + + + def rem_or(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + + pjits = self.all_instr(start, end, PJIT) + filtered = [] + for pjit in pjits: + tgt = self.get_target(pjit)-3 + for i in result: + if i <= pjit or i >= tgt: + filtered.append(i) + result = filtered + filtered = [] + return result + + def next_except_jump(self, start): + """ + Return the next jump that was generated by an except SomeException: + construct in a try...except...else clause or None if not found. + """ + except_match = self.first_instr(start, self.lines[start].next, (PJIF)) + if except_match: + jmp = self.prev[self.get_target(except_match)] + self.ignore_if.add(except_match) + return jmp + + count_END_FINALLY = 0 + count_SETUP_ = 0 + for i in self.op_range(start, len(self.code)): + op = self.code[i] + if op == END_FINALLY: + if count_END_FINALLY == count_SETUP_: + if self.code[self.prev[i]] == NOP: + i = self.prev[i] + assert self.code[self.prev[i]] in (JA, JF, RETURN_VALUE) + return self.prev[i] + count_END_FINALLY += 1 + elif op in (SETUP_EXCEPT, SETUP_FINALLY): + count_SETUP_ += 1 + #return self.lines[start].next + + def restrict_to_parent(self, target, parent): + """Restrict pos to parent boundaries.""" + if not (parent['start'] < target < parent['end']): + target = parent['end'] + return target + + def detect_structure(self, pos, op=None): + """ + Detect type of block structures and their boundaries to fix optimizied jumps + in python2.3+ + """ + + # TODO: check the struct boundaries more precisely -Dan + + code = self.code + # Ev remove this test and make op a mandatory argument -Dan + if op is None: + op = code[pos] + + ## Detect parent structure + parent = self.structs[0] + start = parent['start'] + end = parent['end'] + for s in self.structs: + _start = s['start'] + _end = s['end'] + if (_start <= pos < _end) and (_start >= start and _end <= end): + start = _start + end = _end + parent = s + ## We need to know how many new structures were added in this run + origStructCount = len(self.structs) + + if op == SETUP_LOOP: + #import pdb; pdb.set_trace() + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + + if target != end: + self.fixed_jumps[pos] = end + + (line_no, next_line_byte) = self.lines[pos] + jump_back = self.last_instr(start, end, JA, + next_line_byte, False) + if not jump_back: # loop suite ends in return. wtf right? + jump_back = self.last_instr(start, end, RETURN_VALUE) + 1 + if not jump_back: + return + if code[self.prev[next_line_byte]] not in (PJIF, PJIT): + loop_type = 'for' + else: + loop_type = 'while' + self.ignore_if.add(self.prev[next_line_byte]) + target = next_line_byte + end = jump_back + 3 + else: + if self.get_target(jump_back) >= next_line_byte: + jump_back = self.last_instr(start, end, JA, + start, False) + if end > jump_back+4 and code[end] in (JF, JA): + if code[jump_back+4] in (JA, JF): + if self.get_target(jump_back+4) == self.get_target(end): + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + elif target < pos: + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + + target = self.get_target(jump_back, JA) + + if code[target] in (FOR_ITER, GET_ITER): + loop_type = 'for' + else: + loop_type = 'while' + test = self.prev[next_line_byte] + if test == pos: + loop_type = 'while 1' + else: + self.ignore_if.add(test) + test_target = self.get_target(test) + if test_target > (jump_back+3): + jump_back = test_target + + self.loops.append(target) + self.structs.append({'type': loop_type + '-loop', + 'start': target, + 'end': jump_back}) + if jump_back+3 != end: + self.structs.append({'type': loop_type + '-else', + 'start': jump_back+3, + 'end': end}) + elif op == SETUP_EXCEPT: + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + if target != end: + self.fixed_jumps[pos] = end + #print target, end, parent + ## Add the try block + self.structs.append({'type': 'try', + 'start': start, + 'end': end-4}) + ## Now isolate the except and else blocks + end_else = start_else = self.get_target(self.prev[end]) + + ## Add the except blocks + i = end + while self.code[i] != END_FINALLY: + jmp = self.next_except_jump(i) + if jmp == None: # check + i = self.next_stmt[i] + continue + if self.code[jmp] == RETURN_VALUE: + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp+1}) + i = jmp + 1 + else: + if self.get_target(jmp) != start_else: + end_else = self.get_target(jmp) + if self.code[jmp] == JF: + #self.fixed_jumps[i] = jmp + self.fixed_jumps[jmp] = -1 + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp}) + i = jmp + 3 + + ## Add the try-else block + if end_else != start_else: + r_end_else = self.restrict_to_parent(end_else, parent) + self.structs.append({'type': 'try-else', + 'start': i+2, # check + 'end': r_end_else}) + self.fixed_jumps[i] = r_end_else + else: + self.fixed_jumps[i] = i+1 + + elif op in (PJIF, PJIT): + start = pos+3 + target = self.get_target(pos, op) + rtarget = self.restrict_to_parent(target, parent) + pre = self.prev + + if target != rtarget and parent['type'] == 'and/or': + self.fixed_jumps[pos] = rtarget + return + #does this jump to right after another cond jump? + # if so, it's part of a larger conditional + if (code[pre[target]] in (PJIF, PJIT)) and (target > pos): + self.fixed_jumps[pos] = pre[target] + self.structs.append({'type': 'and/or', + 'start': start, + 'end': pre[target]}) + return + + # is this an if and + if op == PJIF: + match = self.rem_or(start, self.next_stmt[pos], PJIF, target) + match = self.remove_mid_line_ifs(match) + if match: + if code[pre[rtarget]] in (JF, JA) \ + and pre[rtarget] not in self.stmts \ + and self.restrict_to_parent(self.get_target(pre[rtarget]), parent) == rtarget: + if code[pre[pre[rtarget]]] == JA \ + and self.remove_mid_line_ifs([pos]) \ + and target == self.get_target(pre[pre[rtarget]]) \ + and (pre[pre[rtarget]] not in self.stmts or self.get_target(pre[pre[rtarget]]) > pre[pre[rtarget]])\ + and 1 == len(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], (PJIF, PJIT), target))): + pass + elif code[pre[pre[rtarget]]] == RETURN_VALUE \ + and self.remove_mid_line_ifs([pos]) \ + and 1 == (len(set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT), target))) \ + | set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT, JA), pre[rtarget], True))))): + pass + else: + fix = None + jump_ifs = self.all_instr(start, self.next_stmt[pos], PJIF) + last_jump_good = True + for j in jump_ifs: + if target == self.get_target(j): + if self.lines[j].next == j+3 and last_jump_good: + fix = j + break + else: + last_jump_good = False + self.fixed_jumps[pos] = fix or match[-1] + return + else: + self.fixed_jumps[pos] = match[-1] + return + else: # op == PJIT + next = self.next_stmt[pos] + if pre[next] == pos: + pass + elif code[next] in (JF, JA) and target == self.get_target(next): + if code[pre[next]] == PJIF: + if code[next] == JF or target != rtarget or code[pre[pre[rtarget]]] not in (JA, RETURN_VALUE): + self.fixed_jumps[pos] = pre[next] + return + elif code[next] == JA and code[target] in (JA, JF) \ + and self.get_target(target) == self.get_target(next): + self.fixed_jumps[pos] = pre[next] + return + #don't add a struct for a while test, it's already taken care of + if pos in self.ignore_if: + return + + if code[pre[rtarget]] == JA and pre[rtarget] in self.stmts \ + and pre[rtarget] != pos and pre[pre[rtarget]] != pos \ + and not (code[rtarget] == JA and code[rtarget+3] == POP_BLOCK and code[pre[pre[rtarget]]] != JA): + rtarget = pre[rtarget] + #does the if jump just beyond a jump op, then this is probably an if statement + if code[pre[rtarget]] in (JA, JF): + if_end = self.get_target(pre[rtarget]) + + #is this a loop not an if? + if (if_end < pre[rtarget]) and (code[pre[if_end]] == SETUP_LOOP): + if(if_end > start): + return + + end = self.restrict_to_parent(if_end, parent) + + self.structs.append({'type': 'if-then', + 'start': start, + 'end': pre[rtarget]}) + self.not_continue.add(pre[rtarget]) + + if rtarget < end: + self.structs.append({'type': 'if-else', + 'start': rtarget, + 'end': end}) + elif code[pre[rtarget]] == RETURN_VALUE: + self.structs.append({'type': 'if-then', + 'start': start, + 'end': rtarget}) + self.return_end_ifs.add(pre[rtarget]) + # if it's an old JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP + #if target > pos: + # unop_target = self.last_instr(pos, target, JF, target) + # if unop_target and code[unop_target+3] != ROT_TWO: + # self.fixed_jumps[pos] = unop_target + # else: + # self.fixed_jumps[pos] = self.restrict_to_parent(target, parent) + + def find_jump_targets(self, code): + """ + Detect all offsets in a byte code which are jump targets. + + Return the list of offsets. + + This procedure is modelled after dis.findlables(), but here + for each target the number of jumps are counted. + """ + + hasjrel = dis.hasjrel + hasjabs = dis.hasjabs + + n = len(code) + self.structs = [{'type': 'root', + 'start': 0, + 'end': n-1}] + self.loops = [] ## All loop entry points + self.fixed_jumps = {} ## Map fixed jumps to their real destination + self.ignore_if = set() + self.build_stmt_indices() + self.not_continue = set() + self.return_end_ifs = set() + + targets = {} + for i in self.op_range(0, n): + op = code[i] + + ## Determine structures and fix jumps for 2.3+ + self.detect_structure(i, op) + + if op >= HAVE_ARGUMENT: + label = self.fixed_jumps.get(i) + oparg = self.get_argument(i) + if label is None: + if op in hasjrel and op != FOR_ITER: + label = i + 3 + oparg + #elif op in hasjabs: Pas de gestion des jump abslt + #if op in (PJIF, PJIT): Or pop a faire + #if (oparg > i): + #label = oparg + if label is not None and label != -1: + targets[label] = targets.get(label, []) + [i] + elif op == END_FINALLY and i in self.fixed_jumps: + label = self.fixed_jumps[i] + targets[label] = targets.get(label, []) + [i] + return targets + diff --git a/build/lib.linux-i686-2.7/uncompyle2/Scanner26.py b/build/lib.linux-i686-2.7/uncompyle2/Scanner26.py new file mode 100755 index 00000000..6c0b3376 --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/Scanner26.py @@ -0,0 +1,937 @@ +# Copyright (c) 1999 John Aycock +# Copyright (c) 2000-2002 by hartmut Goebel +# Copyright (c) 2005 by Dan Pascu +# +# See main module for license. +# + +__all__ = ['Token', 'Scanner', 'getscanner'] + +import types +import disas as dis +from collections import namedtuple +from array import array +from operator import itemgetter +from struct import * +from Scanner import Token, Code + +class Scanner: + def __init__(self, version): + self.version = version + self.resetTokenClass() + + dis.setVersion(version) + globals().update({'HAVE_ARGUMENT': dis.HAVE_ARGUMENT}) + globals().update({k.replace('+','_'):v for (k,v) in dis.opmap.items()}) + globals().update({'PJIF': dis.opmap['JUMP_IF_FALSE']}) + globals().update({'PJIT': dis.opmap['JUMP_IF_TRUE']}) + globals().update({'JA': dis.opmap['JUMP_ABSOLUTE']}) + globals().update({'JF': dis.opmap['JUMP_FORWARD']}) + + self.JUMP_OPs = map(lambda op: dis.opname[op], + dis.hasjrel + dis.hasjabs) + + def setShowAsm(self, showasm, out=None): + self.showasm = showasm + self.out = out + + def setTokenClass(self, tokenClass): + assert type(tokenClass) == types.ClassType + self.Token = tokenClass + + def resetTokenClass(self): + self.setTokenClass(Token) + + def disassemble(self, co, classname=None): + """ + Disassemble a code object, returning a list of 'Token'. + + The main part of this procedure is modelled after + dis.disassemble(). + """ + rv = [] + customize = {} + Token = self.Token # shortcut + self.code = array('B', co.co_code) + n = len(self.code) + # linestarts contains bloc code adresse (addr,block) + self.linestarts = list(dis.findlinestarts(co)) + self.prev = [0] + pop_delet = 0 + i=0 + self.restructRelativeJump() + # class and names + if classname: + classname = '_' + classname.lstrip('_') + '__' + def unmangle(name): + if name.startswith(classname) and name[-2:] != '__': + return name[len(classname) - 2:] + return name + + free = [ unmangle(name) for name in (co.co_cellvars + co.co_freevars) ] + names = [ unmangle(name) for name in co.co_names ] + varnames = [ unmangle(name) for name in co.co_varnames ] + else: + free = co.co_cellvars + co.co_freevars + names = co.co_names + varnames = co.co_varnames + self.names = names + # add instruction to remonde in "toDel" list + toDel = [] + while i < n-pop_delet: + op = self.code[i] + ret = self.getOpcodeToDel(i) + if ret != None: + toDel += ret + if op >= dis.HAVE_ARGUMENT: + i += 2 + i += 1 + + if toDel: # degeu a revoir / repenser (tout faire d'un coup? chaud) + toDel = sorted(list(set(toDel))) + delta = 0 + for x in toDel: + if self.code[x-delta] >= dis.HAVE_ARGUMENT: + self.code.pop(x-delta) + self.restructCode(x-delta) + self.code.pop(x-delta) + self.restructCode(x-delta) + self.code.pop(x-delta) + self.restructCode(x-delta) + delta += 3 + else: + self.code.pop(x-delta) + self.restructCode(x-delta) + delta += 1 + # mapping adresses of prev instru + n = len(self.code) + for i in self.op_range(0, n): + op = self.code[i] + self.prev.append(i) + if op >= HAVE_ARGUMENT: + self.prev.append(i) + self.prev.append(i) + + j = 0 + linestarts = self.linestarts + self.lines = [] + linetuple = namedtuple('linetuple', ['l_no', 'next']) + linestartoffsets = {a for (a, _) in linestarts} + (prev_start_byte, prev_line_no) = linestarts[0] + for (start_byte, line_no) in linestarts[1:]: + while j < start_byte: + self.lines.append(linetuple(prev_line_no, start_byte)) + j += 1 + last_op = self.code[self.prev[start_byte]] + (prev_start_byte, prev_line_no) = (start_byte, line_no) + while j < n: + self.lines.append(linetuple(prev_line_no, n)) + j+=1 + # self.lines contains (block,addrLastInstr) + cf = self.find_jump_targets(self.code) + # contains (code, [addrRefToCode]) + + last_stmt = self.next_stmt[0] + i = self.next_stmt[last_stmt] + replace = {} + while i < n-1: + if self.lines[last_stmt].next > i: + if self.code[last_stmt] == PRINT_ITEM: + if self.code[i] == PRINT_ITEM: + replace[i] = 'PRINT_ITEM_CONT' + elif self.code[i] == PRINT_NEWLINE: + replace[i] = 'PRINT_NEWLINE_CONT' + last_stmt = i + i = self.next_stmt[i] + + imports = self.all_instr(0, n, (IMPORT_NAME, IMPORT_FROM, IMPORT_STAR)) + if len(imports) > 1: + last_import = imports[0] + for i in imports[1:]: + if self.lines[last_import].next > i: + if self.code[last_import] == IMPORT_NAME == self.code[i]: + replace[i] = 'IMPORT_NAME_CONT' + last_import = i + + extended_arg = 0 + for offset in self.op_range(0, n): + if offset in cf: + k = 0 + for j in cf[offset]: + rv.append(Token('COME_FROM', None, repr(j), + offset="%s_%d" % (offset, k) )) + k += 1 + + op = self.code[offset] + opname = dis.opname[op] + oparg = None; pattr = None + if op >= HAVE_ARGUMENT: + oparg = self.get_argument(offset) + extended_arg + extended_arg = 0 + if op == dis.EXTENDED_ARG: + extended_arg = oparg * 65536L + continue + if op in dis.hasconst: + const = co.co_consts[oparg] + if type(const) == types.CodeType: + oparg = const + if const.co_name == '': + assert opname == 'LOAD_CONST' + opname = 'LOAD_LAMBDA' + elif const.co_name == '': + opname = 'LOAD_GENEXPR' + elif const.co_name == '': + opname = 'LOAD_DICTCOMP' + elif const.co_name == '': + opname = 'LOAD_SETCOMP' + # verify uses 'pattr' for comparism, since 'attr' + # now holds Code(const) and thus can not be used + # for comparism (todo: think about changing this) + #pattr = 'code_object @ 0x%x %s->%s' %\ + # (id(const), const.co_filename, const.co_name) + pattr = '' + else: + pattr = const + elif op in dis.hasname: + pattr = names[oparg] + elif op in dis.hasjrel: + pattr = repr(offset + 3 + oparg) + elif op in dis.hasjabs: + pattr = repr(oparg) + elif op in dis.haslocal: + pattr = varnames[oparg] + elif op in dis.hascompare: + pattr = dis.cmp_op[oparg] + elif op in dis.hasfree: + pattr = free[oparg] + + if op in (BUILD_LIST, BUILD_TUPLE, BUILD_SLICE, + UNPACK_SEQUENCE, + MAKE_FUNCTION, CALL_FUNCTION, MAKE_CLOSURE, + CALL_FUNCTION_VAR, CALL_FUNCTION_KW, + CALL_FUNCTION_VAR_KW, DUP_TOPX, + ): + # CE - Hack for >= 2.5 + # Now all values loaded via LOAD_CLOSURE are packed into + # a tuple before calling MAKE_CLOSURE. + if op == BUILD_TUPLE and \ + self.code[offset-3] == LOAD_CLOSURE: + continue + else: + opname = '%s_%d' % (opname, oparg) + if op != BUILD_SLICE: + customize[opname] = oparg + elif op == JA: + target = self.get_target(offset) + if target < offset: + if offset in self.stmts and self.code[offset+3] not in (END_FINALLY, POP_BLOCK) \ + and offset not in self.not_continue: + opname = 'CONTINUE' + else: + opname = 'JUMP_BACK' + + elif op == LOAD_GLOBAL: + try: + if pattr == 'AssertionError' and rv and rv[-1] == 'JUMP_IF_TRUE': + opname = 'LOAD_ASSERT' + except AttributeError: + pass + elif op == RETURN_VALUE: + if offset in self.return_end_ifs: + opname = 'RETURN_END_IF' + + if offset not in replace: + rv.append(Token(opname, oparg, pattr, offset, linestart = offset in linestartoffsets)) + else: + rv.append(Token(replace[offset], oparg, pattr, offset, linestart = offset in linestartoffsets)) + + if self.showasm: + out = self.out # shortcut + for t in rv: + print >>out, t + print >>out + return rv, customize + + def getOpcodeToDel(self, i): + """ + check validity of the opcode at position I and return a list of opcode to delete + """ + opcode = self.code[i] + opsize = self.op_size(opcode) + if opcode == EXTENDED_ARG: + raise 'A faire' + if opcode in (PJIF,PJIT,JA,JF): + if self.code[i+opsize] == POP_TOP: + if self.code[i+opsize] == self.code[i+opsize+1] and self.code[i+opsize] == self.code[i+opsize+2] \ + and opcode in (JF,JA) and self.code[i+opsize] != self.code[i+opsize+3]: + pass + else: + return [i+opsize] + if opcode == BUILD_LIST: + if self.code[i+opsize] == DUP_TOP and self.code[i+opsize+1] in (STORE_NAME,STORE_FAST): + # del DUP/STORE_NAME x + toDel = [i+opsize,i+opsize+1] + nameDel = self.get_argument(i+opsize+1) + start = i+opsize+1 + end = start + # del LOAD_NAME x + while end < len(self.code): + end = self.first_instr(end, len(self.code), (LOAD_NAME,LOAD_FAST)) + if nameDel == self.get_argument(end): + toDel += [end] + break + if self.code[end] == LOAD_NAME: + end += self.op_size(LOAD_NAME) + else: + end += self.op_size(LOAD_FAST) + # log JA/POP_TOP to del and update PJIF + while start < end: + start = self.first_instr(start, len(self.code), (PJIF)) + if start == None: break + target = self.get_target(start) + if self.code[target] == POP_TOP and self.code[target-3] == JA: + toDel += [target, target-3] + # update PJIF + target = self.get_target(target-3) + if target > 0xFFFF: + raise 'A gerer' + self.code[start+1] = target & 0xFF + self.code[start+2] = (target >> 8) & 0xFF + start += self.op_size(PJIF) + # del DELETE_NAME x + while end < len(self.code): + end = self.first_instr(end, len(self.code), (DELETE_NAME,DELETE_FAST)) + if nameDel == self.get_argument(end): + toDel += [end] + break + if self.code[end] == DELETE_NAME: + end += self.op_size(DELETE_NAME) + else: + end += self.op_size(DELETE_FAST) + return toDel + return None + + def restructRelativeJump(self): + """ + change relative JUMP_IF_FALSE/TRUE to absolut jump + """ + for i in self.op_range(0, len(self.code)): + if(self.code[i] in (PJIF,PJIT)): + target = self.get_argument(i) + target += i + 3 + if target > 0xFFFF: + raise 'A gerer' + self.code[i+1] = target & 0xFF + self.code[i+2] = (target >> 8) & 0xFF + + for i in self.op_range(0, len(self.code)): + if(self.code[i] in (PJIF,PJIT)): + target = self.get_target(i) + if self.code[target] == JA: + target = self.get_target(target) + if target > 0xFFFF: + raise 'A gerer' + self.code[i+1] = target & 0xFF + self.code[i+2] = (target >> 8) & 0xFF + + def restructCode(self, i): + """ + restruct linestarts and jump destination after removing a POP_TOP + """ + result = list() + for item in self.linestarts: + if i < item[0]: + result.append((item[0]-1, item[1])) + else: + result.append((item[0], item[1])) + self.linestarts = result + + for x in self.op_range(0, len(self.code)): + op = self.code[x] + if op >= HAVE_ARGUMENT: + if op in dis.hasjrel: + if x < i and self.get_target(x) > i: + if self.code[x+1]-1 < 0: + self.code[x+2] -= 1 + self.code[x+1] = self.code[x+1]+255 + else: + self.code[x+1] -= 1 + elif op in dis.hasjabs: + if i < self.get_target(x): + if self.code[x+1]-1 < 0: + self.code[x+2] -= 1 + self.code[x+1] = self.code[x+1]+255 + else: + self.code[x+1] -= 1 + + def get_target(self, pos, op=None): + if op is None: + op = self.code[pos] + target = self.get_argument(pos) + if op in dis.hasjrel: + target += pos + 3 + return target + + def get_argument(self, pos): + target = self.code[pos+1] + self.code[pos+2] * 256 + return target + + def first_instr(self, start, end, instr, target=None, exact=True): + """ + Find the first in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + return i + dest = self.get_target(i, op) + if dest == target: + return i + elif not exact: + _distance = abs(target - dest) + if _distance < distance: + distance = _distance + pos = i + return pos + + def last_instr(self, start, end, instr, target=None, exact=True): + """ + Find the last in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + + code = self.code + if not (start>=0 and end<=len(code)): + return None + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + pos = i + else: + dest = self.get_target(i, op) + if dest == target: + distance = 0 + pos = i + elif not exact: + _distance = abs(target - dest) + if _distance <= distance: + distance = _distance + pos = i + return pos + + def all_instr(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + return result + + def op_size(self, op): + if op < HAVE_ARGUMENT: + return 1 + else: + return 3 + + def op_range(self, start, end): + while start < end: + yield start + start += self.op_size(self.code[start]) + + def build_stmt_indices(self): + code = self.code + start = 0; + end = len(code) + + stmt_opcodes = { + SETUP_LOOP, BREAK_LOOP, CONTINUE_LOOP, + SETUP_FINALLY, END_FINALLY, SETUP_EXCEPT, + POP_BLOCK, STORE_FAST, DELETE_FAST, STORE_DEREF, + STORE_GLOBAL, DELETE_GLOBAL, STORE_NAME, DELETE_NAME, + STORE_ATTR, DELETE_ATTR, STORE_SUBSCR, DELETE_SUBSCR, + RETURN_VALUE, RAISE_VARARGS, POP_TOP, + PRINT_EXPR, PRINT_ITEM, PRINT_NEWLINE, PRINT_ITEM_TO, PRINT_NEWLINE_TO, + JUMP_ABSOLUTE, EXEC_STMT, + } + + stmt_opcode_seqs = [(PJIF, JF), (PJIF, JA), (PJIT, JF), (PJIT, JA)] + + designator_ops = { + STORE_FAST, STORE_NAME, STORE_GLOBAL, STORE_DEREF, STORE_ATTR, + STORE_SLICE_0, STORE_SLICE_1, STORE_SLICE_2, STORE_SLICE_3, + STORE_SUBSCR, UNPACK_SEQUENCE, JA + } + + prelim = self.all_instr(start, end, stmt_opcodes) + + stmts = self.stmts = set(prelim) + pass_stmts = set() + for seq in stmt_opcode_seqs: + for i in self.op_range(start, end-(len(seq)+1)): + match = True + for elem in seq: + if elem != code[i]: + match = False + break + i += self.op_size(code[i]) + + if match: + i = self.prev[i] + stmts.add(i) + pass_stmts.add(i) + + if pass_stmts: + stmt_list = list(stmts) + stmt_list.sort() + else: + stmt_list = prelim + last_stmt = -1 + self.next_stmt = [] + slist = self.next_stmt = [] + i = 0 + for s in stmt_list: + if code[s] == JA and s not in pass_stmts: + target = self.get_target(s) + if target > s or self.lines[last_stmt].l_no == self.lines[s].l_no: + stmts.remove(s) + continue + j = self.prev[s] + while code[j] == JA: + j = self.prev[j] + if code[j] == LIST_APPEND: #list comprehension + stmts.remove(s) + continue + elif code[s] == POP_TOP and code[self.prev[s]] == ROT_TWO: + stmts.remove(s) + continue + elif code[s] in designator_ops: + j = self.prev[s] + while code[j] in designator_ops: + j = self.prev[j] + if code[j] == FOR_ITER: + stmts.remove(s) + continue + last_stmt = s + slist += [s] * (s-i) + i = s + slist += [len(code)] * (len(code)-len(slist)) + + + def remove_mid_line_ifs(self, ifs): + filtered = [] + for i in ifs: + if self.lines[i].l_no == self.lines[i+3].l_no: + if self.code[self.prev[self.lines[i].next]] in (PJIT, PJIF): + continue + filtered.append(i) + return filtered + + + def rem_or(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + + pjits = self.all_instr(start, end, PJIT) + filtered = [] + for pjit in pjits: + tgt = self.get_target(pjit)-3 + for i in result: + if i <= pjit or i >= tgt: + filtered.append(i) + result = filtered + filtered = [] + return result + + def next_except_jump(self, start): + """ + Return the next jump that was generated by an except SomeException: + construct in a try...except...else clause or None if not found. + """ + except_match = self.first_instr(start, self.lines[start].next, (PJIF)) + if except_match: + jmp = self.prev[self.get_target(except_match)] + self.ignore_if.add(except_match) + return jmp + + count_END_FINALLY = 0 + count_SETUP_ = 0 + for i in self.op_range(start, len(self.code)): + op = self.code[i] + if op == END_FINALLY: + if count_END_FINALLY == count_SETUP_: + if self.code[self.prev[i]] == NOP: + i = self.prev[i] + assert self.code[self.prev[i]] in (JA, JF, RETURN_VALUE) + return self.prev[i] + count_END_FINALLY += 1 + elif op in (SETUP_EXCEPT, SETUP_FINALLY): + count_SETUP_ += 1 + #return self.lines[start].next + + def restrict_to_parent(self, target, parent): + """Restrict pos to parent boundaries.""" + if not (parent['start'] < target < parent['end']): + target = parent['end'] + return target + + def detect_structure(self, pos, op=None): + """ + Detect type of block structures and their boundaries to fix optimizied jumps + in python2.3+ + """ + + # TODO: check the struct boundaries more precisely -Dan + + code = self.code + # Ev remove this test and make op a mandatory argument -Dan + if op is None: + op = code[pos] + + ## Detect parent structure + parent = self.structs[0] + start = parent['start'] + end = parent['end'] + for s in self.structs: + _start = s['start'] + _end = s['end'] + if (_start <= pos < _end) and (_start >= start and _end <= end): + start = _start + end = _end + parent = s + ## We need to know how many new structures were added in this run + origStructCount = len(self.structs) + + if op == SETUP_LOOP: + #import pdb; pdb.set_trace() + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + + if target != end: + self.fixed_jumps[pos] = end + + (line_no, next_line_byte) = self.lines[pos] + jump_back = self.last_instr(start, end, JA, + next_line_byte, False) + if not jump_back: # loop suite ends in return. wtf right? + jump_back = self.last_instr(start, end, RETURN_VALUE) + 1 + if not jump_back: + return + if code[self.prev[next_line_byte]] not in (PJIF, PJIT): + loop_type = 'for' + else: + loop_type = 'while' + self.ignore_if.add(self.prev[next_line_byte]) + target = next_line_byte + end = jump_back + 3 + else: + if self.get_target(jump_back) >= next_line_byte: + jump_back = self.last_instr(start, end, JA, + start, False) + if end > jump_back+4 and code[end] in (JF, JA): + if code[jump_back+4] in (JA, JF): + if self.get_target(jump_back+4) == self.get_target(end): + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + elif target < pos: + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + + target = self.get_target(jump_back, JA) + + if code[target] in (FOR_ITER, GET_ITER): + loop_type = 'for' + else: + loop_type = 'while' + test = self.prev[next_line_byte] + if test == pos: + loop_type = 'while 1' + else: + self.ignore_if.add(test) + test_target = self.get_target(test) + if test_target > (jump_back+3): + jump_back = test_target + + self.loops.append(target) + self.structs.append({'type': loop_type + '-loop', + 'start': target, + 'end': jump_back}) + if jump_back+3 != end: + self.structs.append({'type': loop_type + '-else', + 'start': jump_back+3, + 'end': end}) + elif op == SETUP_EXCEPT: + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + if target != end: + self.fixed_jumps[pos] = end + #print target, end, parent + ## Add the try block + self.structs.append({'type': 'try', + 'start': start, + 'end': end-4}) + ## Now isolate the except and else blocks + end_else = start_else = self.get_target(self.prev[end]) + + ## Add the except blocks + i = end + while self.code[i] != END_FINALLY: + jmp = self.next_except_jump(i) + if jmp == None: # check + i = self.next_stmt[i] + continue + if self.code[jmp] == RETURN_VALUE: + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp+1}) + i = jmp + 1 + else: + if self.get_target(jmp) != start_else: + end_else = self.get_target(jmp) + if self.code[jmp] == JF: + #self.fixed_jumps[i] = jmp + self.fixed_jumps[jmp] = -1 + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp}) + i = jmp + 3 + + ## Add the try-else block + if end_else != start_else: + r_end_else = self.restrict_to_parent(end_else, parent) + self.structs.append({'type': 'try-else', + 'start': i+2, # check + 'end': r_end_else}) + self.fixed_jumps[i] = r_end_else + else: + self.fixed_jumps[i] = i+1 + + elif op in (PJIF, PJIT): + start = pos+3 + target = self.get_target(pos, op) + rtarget = self.restrict_to_parent(target, parent) + pre = self.prev + + if target != rtarget and parent['type'] == 'and/or': + self.fixed_jumps[pos] = rtarget + return + #does this jump to right after another cond jump? + # if so, it's part of a larger conditional + if (code[pre[target]] in (PJIF, PJIT)) and (target > pos): + self.fixed_jumps[pos] = pre[target] + self.structs.append({'type': 'and/or', + 'start': start, + 'end': pre[target]}) + return + + # is this an if and + if op == PJIF: + match = self.rem_or(start, self.next_stmt[pos], PJIF, target) + match = self.remove_mid_line_ifs(match) + if match: + if code[pre[rtarget]] in (JF, JA) \ + and pre[rtarget] not in self.stmts \ + and self.restrict_to_parent(self.get_target(pre[rtarget]), parent) == rtarget: + if code[pre[pre[rtarget]]] == JA \ + and self.remove_mid_line_ifs([pos]) \ + and target == self.get_target(pre[pre[rtarget]]) \ + and (pre[pre[rtarget]] not in self.stmts or self.get_target(pre[pre[rtarget]]) > pre[pre[rtarget]])\ + and 1 == len(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], (PJIF, PJIT), target))): + pass + elif code[pre[pre[rtarget]]] == RETURN_VALUE \ + and self.remove_mid_line_ifs([pos]) \ + and 1 == (len(set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT), target))) \ + | set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT, JA), pre[rtarget], True))))): + pass + else: + fix = None + jump_ifs = self.all_instr(start, self.next_stmt[pos], PJIF) + last_jump_good = True + for j in jump_ifs: + if target == self.get_target(j): + if self.lines[j].next == j+3 and last_jump_good: + fix = j + break + else: + last_jump_good = False + self.fixed_jumps[pos] = fix or match[-1] + return + else: + self.fixed_jumps[pos] = match[-1] + return + else: # op == PJIT + next = self.next_stmt[pos] + if pre[next] == pos: + pass + elif code[next] in (JF, JA) and target == self.get_target(next): + if code[pre[next]] == PJIF: + if code[next] == JF or target != rtarget or code[pre[pre[rtarget]]] not in (JA, RETURN_VALUE): + self.fixed_jumps[pos] = pre[next] + return + elif code[next] == JA and code[target] in (JA, JF) \ + and self.get_target(target) == self.get_target(next): + self.fixed_jumps[pos] = pre[next] + return + + #don't add a struct for a while test, it's already taken care of + if pos in self.ignore_if: + return + + if code[pre[rtarget]] == JA and pre[rtarget] in self.stmts \ + and pre[rtarget] != pos and pre[pre[rtarget]] != pos \ + and not (code[rtarget] == JA and code[rtarget+3] == POP_BLOCK and code[pre[pre[rtarget]]] != JA): + rtarget = pre[rtarget] + #does the if jump just beyond a jump op, then this is probably an if statement + if code[pre[rtarget]] in (JA, JF): + if_end = self.get_target(pre[rtarget]) + + #is this a loop not an if? + if (if_end < pre[rtarget]) and (code[pre[if_end]] == SETUP_LOOP): + if(if_end > start): + return + + end = self.restrict_to_parent(if_end, parent) + + self.structs.append({'type': 'if-then', + 'start': start, + 'end': pre[rtarget]}) + self.not_continue.add(pre[rtarget]) + + if rtarget < end: + self.structs.append({'type': 'if-else', + 'start': rtarget, + 'end': end}) + elif code[pre[rtarget]] == RETURN_VALUE: + self.structs.append({'type': 'if-then', + 'start': start, + 'end': rtarget}) + self.return_end_ifs.add(pre[rtarget]) + + + def find_jump_targets(self, code): + """ + Detect all offsets in a byte code which are jump targets. + + Return the list of offsets. + + This procedure is modelled after dis.findlables(), but here + for each target the number of jumps are counted. + """ + + hasjrel = dis.hasjrel + hasjabs = dis.hasjabs + + n = len(code) + self.structs = [{'type': 'root', + 'start': 0, + 'end': n-1}] + self.loops = [] ## All loop entry points + self.fixed_jumps = {} ## Map fixed jumps to their real destination + self.ignore_if = set() + self.build_stmt_indices() + self.not_continue = set() + self.return_end_ifs = set() + + targets = {} + for i in self.op_range(0, n): + op = code[i] + + ## Determine structures and fix jumps for 2.3+ + self.detect_structure(i, op) + + if op >= HAVE_ARGUMENT: + label = self.fixed_jumps.get(i) + oparg = self.get_argument(i) + if label is None: + if op in hasjrel and op != FOR_ITER: + label = i + 3 + oparg + #elif op in hasjabs: Pas de gestion des jump abslt + #if op in (PJIF, PJIT): Or pop a faire + #if (oparg > i): + #label = oparg + if label is not None and label != -1: + targets[label] = targets.get(label, []) + [i] + elif op == END_FINALLY and i in self.fixed_jumps: + label = self.fixed_jumps[i] + targets[label] = targets.get(label, []) + [i] + return targets + diff --git a/build/lib.linux-i686-2.7/uncompyle2/Scanner27.py b/build/lib.linux-i686-2.7/uncompyle2/Scanner27.py new file mode 100755 index 00000000..3c2d677c --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/Scanner27.py @@ -0,0 +1,797 @@ +# Copyright (c) 1999 John Aycock +# Copyright (c) 2000-2002 by hartmut Goebel +# Copyright (c) 2005 by Dan Pascu +# +# See main module for license. +# + +__all__ = ['Token', 'Scanner', 'getscanner'] + +import types +import disas as dis +from collections import namedtuple +from array import array +from operator import itemgetter +from Scanner import Token, Code + +class Scanner: + def __init__(self, version): + self.version = version + self.resetTokenClass() + + dis.setVersion(version) + globals().update({'HAVE_ARGUMENT': dis.HAVE_ARGUMENT}) + globals().update({k.replace('+','_'):v for (k,v) in dis.opmap.items()}) + globals().update({'PJIF': dis.opmap['POP_JUMP_IF_FALSE']}) + globals().update({'PJIT': dis.opmap['POP_JUMP_IF_TRUE']}) + globals().update({'JA': dis.opmap['JUMP_ABSOLUTE']}) + globals().update({'JF': dis.opmap['JUMP_FORWARD']}) + + self.JUMP_OPs = map(lambda op: dis.opname[op], + dis.hasjrel + dis.hasjabs) + + def setShowAsm(self, showasm, out=None): + self.showasm = showasm + self.out = out + + def setTokenClass(self, tokenClass): + assert type(tokenClass) == types.ClassType + self.Token = tokenClass + + def resetTokenClass(self): + self.setTokenClass(Token) + + def disassemble(self, co, classname=None): + """ + Disassemble a code object, returning a list of 'Token'. + + The main part of this procedure is modelled after + dis.disassemble(). + """ + rv = [] + customize = {} + Token = self.Token # shortcut + self.code = code = array('B', co.co_code) + n = len(code) + self.prev = [0] + # mapping adresses of instru & arg + for i in self.op_range(0, n): + op = code[i] + self.prev.append(i) + if op >= HAVE_ARGUMENT: + self.prev.append(i) + self.prev.append(i) + + self.lines = [] + linetuple = namedtuple('linetuple', ['l_no', 'next']) + j = 0 + # linestarts contains bloc code adresse (addr,block) + linestarts = list(dis.findlinestarts(co)) + linestartoffsets = {a for (a, _) in linestarts} + (prev_start_byte, prev_line_no) = linestarts[0] + for (start_byte, line_no) in linestarts[1:]: + while j < start_byte: + self.lines.append(linetuple(prev_line_no, start_byte)) + j += 1 + last_op = code[self.prev[start_byte]] + (prev_start_byte, prev_line_no) = (start_byte, line_no) + while j < n: + self.lines.append(linetuple(prev_line_no, n)) + j+=1 + # self.lines contains (block,addrLastInstr) + cf = self.find_jump_targets(code) + # contains (code, [addrRefToCode]) + if classname: + classname = '_' + classname.lstrip('_') + '__' + def unmangle(name): + if name.startswith(classname) and name[-2:] != '__': + return name[len(classname) - 2:] + return name + + free = [ unmangle(name) for name in (co.co_cellvars + co.co_freevars) ] + names = [ unmangle(name) for name in co.co_names ] + varnames = [ unmangle(name) for name in co.co_varnames ] + else: + free = co.co_cellvars + co.co_freevars + names = co.co_names + varnames = co.co_varnames + + last_stmt = self.next_stmt[0] + i = self.next_stmt[last_stmt] + replace = {} + while i < n-1: + if self.lines[last_stmt].next > i: + if code[last_stmt] == PRINT_ITEM: + if code[i] == PRINT_ITEM: + replace[i] = 'PRINT_ITEM_CONT' + elif code[i] == PRINT_NEWLINE: + replace[i] = 'PRINT_NEWLINE_CONT' + last_stmt = i + i = self.next_stmt[i] + + imports = self.all_instr(0, n, (IMPORT_NAME, IMPORT_FROM, IMPORT_STAR)) + if len(imports) > 1: + last_import = imports[0] + for i in imports[1:]: + if self.lines[last_import].next > i: + if code[last_import] == IMPORT_NAME == code[i]: + replace[i] = 'IMPORT_NAME_CONT' + last_import = i + + extended_arg = 0 + for offset in self.op_range(0, n): + + if offset in cf: + k = 0 + for j in cf[offset]: + rv.append(Token('COME_FROM', None, repr(j), + offset="%s_%d" % (offset, k) )) + k += 1 + + op = code[offset] + opname = dis.opname[op] + oparg = None; pattr = None + if op >= HAVE_ARGUMENT: + oparg = code[offset+1] + code[offset+2] * 256 + extended_arg + extended_arg = 0 + if op == dis.EXTENDED_ARG: + extended_arg = oparg * 65536L + continue + if op in dis.hasconst: + const = co.co_consts[oparg] + if type(const) == types.CodeType: + oparg = const + if const.co_name == '': + assert opname == 'LOAD_CONST' + opname = 'LOAD_LAMBDA' + elif const.co_name == '': + opname = 'LOAD_GENEXPR' + elif const.co_name == '': + opname = 'LOAD_DICTCOMP' + elif const.co_name == '': + opname = 'LOAD_SETCOMP' + # verify uses 'pattr' for comparism, since 'attr' + # now holds Code(const) and thus can not be used + # for comparism (todo: think about changing this) + #pattr = 'code_object @ 0x%x %s->%s' %\ + # (id(const), const.co_filename, const.co_name) + pattr = '' + else: + pattr = const + elif op in dis.hasname: + pattr = names[oparg] + elif op in dis.hasjrel: + pattr = repr(offset + 3 + oparg) + elif op in dis.hasjabs: + pattr = repr(oparg) + elif op in dis.haslocal: + pattr = varnames[oparg] + elif op in dis.hascompare: + pattr = dis.cmp_op[oparg] + elif op in dis.hasfree: + pattr = free[oparg] + + if op in (BUILD_LIST, BUILD_TUPLE, BUILD_SET, BUILD_SLICE, + UNPACK_SEQUENCE, + MAKE_FUNCTION, CALL_FUNCTION, MAKE_CLOSURE, + CALL_FUNCTION_VAR, CALL_FUNCTION_KW, + CALL_FUNCTION_VAR_KW, DUP_TOPX, + ): + # CE - Hack for >= 2.5 + # Now all values loaded via LOAD_CLOSURE are packed into + # a tuple before calling MAKE_CLOSURE. + if op == BUILD_TUPLE and \ + code[offset-3] == LOAD_CLOSURE: + continue + else: + opname = '%s_%d' % (opname, oparg) + if op != BUILD_SLICE: + customize[opname] = oparg + elif op == JA: + target = self.get_target(offset) + if target < offset: + if offset in self.stmts and code[offset+3] not in (END_FINALLY, POP_BLOCK) \ + and offset not in self.not_continue: + opname = 'CONTINUE' + else: + opname = 'JUMP_BACK' + + elif op == LOAD_GLOBAL: + try: + if pattr == 'AssertionError' and rv and rv[-1] == 'POP_JUMP_IF_TRUE': + opname = 'LOAD_ASSERT' + except AttributeError: + pass + elif op == RETURN_VALUE: + if offset in self.return_end_ifs: + opname = 'RETURN_END_IF' + + if offset not in replace: + rv.append(Token(opname, oparg, pattr, offset, linestart = offset in linestartoffsets)) + else: + rv.append(Token(replace[offset], oparg, pattr, offset, linestart = offset in linestartoffsets)) + + if self.showasm: + out = self.out # shortcut + for t in rv: + print >>out, t + print >>out + return rv, customize + + def get_target(self, pos, op=None): + if op is None: + op = self.code[pos] + target = self.code[pos+1] + self.code[pos+2] * 256 + if op in dis.hasjrel: + target += pos + 3 + return target + + def first_instr(self, start, end, instr, target=None, exact=True): + """ + Find the first in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + return i + dest = self.get_target(i, op) + if dest == target: + return i + elif not exact: + _distance = abs(target - dest) + if _distance < distance: + distance = _distance + pos = i + return pos + + def last_instr(self, start, end, instr, target=None, exact=True): + """ + Find the last in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + + code = self.code + if not (start>=0 and end<=len(code)): + return None + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + pos = i + else: + dest = self.get_target(i, op) + if dest == target: + distance = 0 + pos = i + elif not exact: + _distance = abs(target - dest) + if _distance <= distance: + distance = _distance + pos = i + return pos + + def all_instr(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + return result + + def op_size(self, op): + if op < HAVE_ARGUMENT: + return 1 + else: + return 3 + + def op_range(self, start, end): + while start < end: + yield start + start += self.op_size(self.code[start]) + + def build_stmt_indices(self): + code = self.code + start = 0; + end = len(code) + + stmt_opcodes = { + SETUP_LOOP, BREAK_LOOP, CONTINUE_LOOP, + SETUP_FINALLY, END_FINALLY, SETUP_EXCEPT, SETUP_WITH, + POP_BLOCK, STORE_FAST, DELETE_FAST, STORE_DEREF, + STORE_GLOBAL, DELETE_GLOBAL, STORE_NAME, DELETE_NAME, + STORE_ATTR, DELETE_ATTR, STORE_SUBSCR, DELETE_SUBSCR, + RETURN_VALUE, RAISE_VARARGS, POP_TOP, + PRINT_EXPR, PRINT_ITEM, PRINT_NEWLINE, PRINT_ITEM_TO, PRINT_NEWLINE_TO, + STORE_SLICE_0, STORE_SLICE_1, STORE_SLICE_2, STORE_SLICE_3, + DELETE_SLICE_0, DELETE_SLICE_1, DELETE_SLICE_2, DELETE_SLICE_3, + JUMP_ABSOLUTE, EXEC_STMT, + } + + stmt_opcode_seqs = [(PJIF, JF), (PJIF, JA), (PJIT, JF), (PJIT, JA)] + + designator_ops = { + STORE_FAST, STORE_NAME, STORE_GLOBAL, STORE_DEREF, STORE_ATTR, + STORE_SLICE_0, STORE_SLICE_1, STORE_SLICE_2, STORE_SLICE_3, + STORE_SUBSCR, UNPACK_SEQUENCE, JA + } + + prelim = self.all_instr(start, end, stmt_opcodes) + + stmts = self.stmts = set(prelim) + pass_stmts = set() + for seq in stmt_opcode_seqs: + for i in self.op_range(start, end-(len(seq)+1)): + match = True + for elem in seq: + if elem != code[i]: + match = False + break + i += self.op_size(code[i]) + + if match: + i = self.prev[i] + stmts.add(i) + pass_stmts.add(i) + + if pass_stmts: + stmt_list = list(stmts) + stmt_list.sort() + else: + stmt_list = prelim + last_stmt = -1 + self.next_stmt = [] + slist = self.next_stmt = [] + i = 0 + for s in stmt_list: + if code[s] == JA and s not in pass_stmts: + target = self.get_target(s) + if target > s or self.lines[last_stmt].l_no == self.lines[s].l_no: + stmts.remove(s) + continue + j = self.prev[s] + while code[j] == JA: + j = self.prev[j] + if code[j] == LIST_APPEND: #list comprehension + stmts.remove(s) + continue + elif code[s] == POP_TOP and code[self.prev[s]] == ROT_TWO: + stmts.remove(s) + continue + elif code[s] in designator_ops: + j = self.prev[s] + while code[j] in designator_ops: + j = self.prev[j] + if code[j] == FOR_ITER: + stmts.remove(s) + continue + last_stmt = s + slist += [s] * (s-i) + i = s + slist += [len(code)] * (len(code)-len(slist)) + + def remove_mid_line_ifs(self, ifs): + filtered = [] + for i in ifs: + if self.lines[i].l_no == self.lines[i+3].l_no: + if self.code[self.prev[self.lines[i].next]] in (PJIT, PJIF): + continue + filtered.append(i) + return filtered + + + def rem_or(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + + pjits = self.all_instr(start, end, PJIT) + filtered = [] + for pjit in pjits: + tgt = self.get_target(pjit)-3 + for i in result: + if i <= pjit or i >= tgt: + filtered.append(i) + result = filtered + filtered = [] + return result + + def next_except_jump(self, start): + """ + Return the next jump that was generated by an except SomeException: + construct in a try...except...else clause or None if not found. + """ + + except_match = self.first_instr(start, self.lines[start].next, POP_JUMP_IF_FALSE) + if except_match: + jmp = self.prev[self.get_target(except_match)] + self.ignore_if.add(except_match) + return jmp + + count_END_FINALLY = 0 + count_SETUP_ = 0 + for i in self.op_range(start, len(self.code)): + op = self.code[i] + if op == END_FINALLY: + if count_END_FINALLY == count_SETUP_: + assert self.code[self.prev[i]] in (JA, JF, RETURN_VALUE) + return self.prev[i] + count_END_FINALLY += 1 + elif op in (SETUP_EXCEPT, SETUP_WITH, SETUP_FINALLY): + count_SETUP_ += 1 + + def restrict_to_parent(self, target, parent): + """Restrict pos to parent boundaries.""" + if not (parent['start'] < target < parent['end']): + target = parent['end'] + return target + + def detect_structure(self, pos, op=None): + """ + Detect type of block structures and their boundaries to fix optimizied jumps + in python2.3+ + """ + + # TODO: check the struct boundaries more precisely -Dan + + code = self.code + # Ev remove this test and make op a mandatory argument -Dan + if op is None: + op = code[pos] + + ## Detect parent structure + parent = self.structs[0] + start = parent['start'] + end = parent['end'] + for s in self.structs: + _start = s['start'] + _end = s['end'] + if (_start <= pos < _end) and (_start >= start and _end <= end): + start = _start + end = _end + parent = s + ## We need to know how many new structures were added in this run + origStructCount = len(self.structs) + + if op == SETUP_LOOP: + #import pdb; pdb.set_trace() + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + + if target != end: + self.fixed_jumps[pos] = end + + (line_no, next_line_byte) = self.lines[pos] + jump_back = self.last_instr(start, end, JA, + next_line_byte, False) + if not jump_back: # loop suite ends in return. wtf right? + jump_back = self.last_instr(start, end, RETURN_VALUE) + 1 + if not jump_back: + return + if code[self.prev[next_line_byte]] not in (PJIF, PJIT): + loop_type = 'for' + else: + loop_type = 'while' + self.ignore_if.add(self.prev[next_line_byte]) + target = next_line_byte + end = jump_back + 3 + else: + if self.get_target(jump_back) >= next_line_byte: + jump_back = self.last_instr(start, end, JA, + start, False) + if end > jump_back+4 and code[end] in (JF, JA): + if code[jump_back+4] in (JA, JF): + if self.get_target(jump_back+4) == self.get_target(end): + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + elif target < pos: + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + + target = self.get_target(jump_back, JA) + + if code[target] in (FOR_ITER, GET_ITER): + loop_type = 'for' + else: + loop_type = 'while' + test = self.prev[next_line_byte] + if test == pos: + loop_type = 'while 1' + else: + self.ignore_if.add(test) + test_target = self.get_target(test) + if test_target > (jump_back+3): + jump_back = test_target + + self.loops.append(target) + self.structs.append({'type': loop_type + '-loop', + 'start': target, + 'end': jump_back}) + if jump_back+3 != end: + self.structs.append({'type': loop_type + '-else', + 'start': jump_back+3, + 'end': end}) + elif op == SETUP_EXCEPT: + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + if target != end: + self.fixed_jumps[pos] = end + #print target, end, parent + ## Add the try block + self.structs.append({'type': 'try', + 'start': start, + 'end': end-4}) + ## Now isolate the except and else blocks + end_else = start_else = self.get_target(self.prev[end]) + + ## Add the except blocks + i = end + while self.code[i] != END_FINALLY: + jmp = self.next_except_jump(i) + if self.code[jmp] == RETURN_VALUE: + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp+1}) + i = jmp + 1 + else: + if self.get_target(jmp) != start_else: + end_else = self.get_target(jmp) + if self.code[jmp] == JF: + self.fixed_jumps[jmp] = -1 + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp}) + i = jmp + 3 + + ## Add the try-else block + if end_else != start_else: + r_end_else = self.restrict_to_parent(end_else, parent) + self.structs.append({'type': 'try-else', + 'start': i+1, + 'end': r_end_else}) + self.fixed_jumps[i] = r_end_else + else: + self.fixed_jumps[i] = i+1 + + + elif op in (PJIF, PJIT): + start = pos+3 + target = self.get_target(pos, op) + rtarget = self.restrict_to_parent(target, parent) + pre = self.prev + + if target != rtarget and parent['type'] == 'and/or': + self.fixed_jumps[pos] = rtarget + return + #does this jump to right after another cond jump? + # if so, it's part of a larger conditional + if (code[pre[target]] in (JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP, + PJIF, PJIT)) and (target > pos): + self.fixed_jumps[pos] = pre[target] + self.structs.append({'type': 'and/or', + 'start': start, + 'end': pre[target]}) + return + + # is this an if and + if op == PJIF: + match = self.rem_or(start, self.next_stmt[pos], PJIF, target) + match = self.remove_mid_line_ifs(match) + + if match: + if code[pre[rtarget]] in (JF, JA) \ + and pre[rtarget] not in self.stmts \ + and self.restrict_to_parent(self.get_target(pre[rtarget]), parent) == rtarget: + if code[pre[pre[rtarget]]] == JA \ + and self.remove_mid_line_ifs([pos]) \ + and target == self.get_target(pre[pre[rtarget]]) \ + and (pre[pre[rtarget]] not in self.stmts or self.get_target(pre[pre[rtarget]]) > pre[pre[rtarget]])\ + and 1 == len(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], (PJIF, PJIT), target))): + pass + elif code[pre[pre[rtarget]]] == RETURN_VALUE \ + and self.remove_mid_line_ifs([pos]) \ + and 1 == (len(set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT), target))) \ + | set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT, JA), pre[rtarget], True))))): + pass + else: + fix = None + jump_ifs = self.all_instr(start, self.next_stmt[pos], PJIF) + last_jump_good = True + for j in jump_ifs: + if target == self.get_target(j): + if self.lines[j].next == j+3 and last_jump_good: + fix = j + break + else: + last_jump_good = False + self.fixed_jumps[pos] = fix or match[-1] + return + else: + self.fixed_jumps[pos] = match[-1] + return + else: # op == PJIT + next = self.next_stmt[pos] + if pre[next] == pos: + pass + elif code[next] in (JF, JA) and target == self.get_target(next): + if code[pre[next]] == PJIF: + if code[next] == JF or target != rtarget or code[pre[pre[rtarget]]] not in (JA, RETURN_VALUE): + self.fixed_jumps[pos] = pre[next] + return + elif code[next] == JA and code[target] in (JA, JF) \ + and self.get_target(target) == self.get_target(next): + self.fixed_jumps[pos] = pre[next] + return + + #don't add a struct for a while test, it's already taken care of + if pos in self.ignore_if: + return + + if code[pre[rtarget]] == JA and pre[rtarget] in self.stmts \ + and pre[rtarget] != pos and pre[pre[rtarget]] != pos \ + and not (code[rtarget] == JA and code[rtarget+3] == POP_BLOCK and code[pre[pre[rtarget]]] != JA): + rtarget = pre[rtarget] + #does the if jump just beyond a jump op, then this is probably an if statement + if code[pre[rtarget]] in (JA, JF): + if_end = self.get_target(pre[rtarget]) + + #is this a loop not an if? + if (if_end < pre[rtarget]) and (code[pre[if_end]] == SETUP_LOOP): + if(if_end > start): + return + + end = self.restrict_to_parent(if_end, parent) + + self.structs.append({'type': 'if-then', + 'start': start, + 'end': pre[rtarget]}) + self.not_continue.add(pre[rtarget]) + + if rtarget < end: + self.structs.append({'type': 'if-else', + 'start': rtarget, + 'end': end}) + elif code[pre[rtarget]] == RETURN_VALUE: + self.structs.append({'type': 'if-then', + 'start': start, + 'end': rtarget}) + self.return_end_ifs.add(pre[rtarget]) + + elif op in (JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP): + target = self.get_target(pos, op) + if target > pos: + unop_target = self.last_instr(pos, target, JF, target) + if unop_target and code[unop_target+3] != ROT_TWO: + self.fixed_jumps[pos] = unop_target + else: + self.fixed_jumps[pos] = self.restrict_to_parent(target, parent) + + + + + def find_jump_targets(self, code): + """ + Detect all offsets in a byte code which are jump targets. + + Return the list of offsets. + + This procedure is modelled after dis.findlables(), but here + for each target the number of jumps are counted. + """ + + hasjrel = dis.hasjrel + hasjabs = dis.hasjabs + + n = len(code) + self.structs = [{'type': 'root', + 'start': 0, + 'end': n-1}] + self.loops = [] ## All loop entry points + self.fixed_jumps = {} ## Map fixed jumps to their real destination + self.ignore_if = set() + self.build_stmt_indices() + self.not_continue = set() + self.return_end_ifs = set() + + targets = {} + for i in self.op_range(0, n): + op = code[i] + + ## Determine structures and fix jumps for 2.3+ + self.detect_structure(i, op) + + if op >= HAVE_ARGUMENT: + label = self.fixed_jumps.get(i) + oparg = code[i+1] + code[i+2] * 256 + if label is None: + if op in hasjrel and op != FOR_ITER: + label = i + 3 + oparg + elif op in hasjabs: + if op in (JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP): + if (oparg > i): + label = oparg + + if label is not None and label != -1: + targets[label] = targets.get(label, []) + [i] + elif op == END_FINALLY and i in self.fixed_jumps: + label = self.fixed_jumps[i] + targets[label] = targets.get(label, []) + [i] + print self.structs + return targets diff --git a/build/lib.linux-i686-2.7/uncompyle2/Walker.py b/build/lib.linux-i686-2.7/uncompyle2/Walker.py new file mode 100755 index 00000000..98ec3d9a --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/Walker.py @@ -0,0 +1,1418 @@ +# Copyright (c) 1999 John Aycock +# Copyright (c) 2000-2002 by hartmut Goebel +# Copyright (c) 2005 by Dan Pascu +# +# See main module for license. +# +# +# Decompilation (walking AST) +# +# All table-driven. Step 1 determines a table (T) and a path to a +# table key (K) from the node type (N) (other nodes are shown as O): +# +# N N N&K +# / | ... \ / | ... \ / | ... \ +# O O O O O K O O O +# | +# K +# +# MAP_R0 (TABLE_R0) MAP_R (TABLE_R) MAP_DIRECT (TABLE_DIRECT) +# +# The default is a direct mapping. The key K is then extracted from the +# subtree and used to find a table entry T[K], if any. The result is a +# format string and arguments (a la printf()) for the formatting engine. +# Escapes in the format string are: +# +# %c evaluate N[A] recursively* +# %C evaluate N[A[0]]..N[A[1]-1] recursively, separate by A[2]* +# %, print ',' if last %C only printed one item (for tuples--unused) +# %| tab to current indentation level +# %+ increase current indentation level +# %- decrease current indentation level +# %{...} evaluate ... in context of N +# %% literal '%' +# +# * indicates an argument (A) required. +# +# The '%' may optionally be followed by a number (C) in square brackets, which +# makes the engine walk down to N[C] before evaluating the escape code. +# + +import sys, re, cStringIO +from types import ListType, TupleType, DictType, \ + EllipsisType, IntType, CodeType + +from spark import GenericASTTraversal +import Parser +from Parser import AST +from Scanner import Token, Code + +minint = -sys.maxint-1 + +# Some ASTs used for comparing code fragments (like 'return None' at +# the end of functions). + +RETURN_LOCALS = AST('return_stmt', + [ AST('expr', [ Token('LOAD_LOCALS') ]), + Token('RETURN_VALUE')]) + + +NONE = AST('expr', [ Token('LOAD_CONST', pattr=None) ] ) + +RETURN_NONE = AST('stmt', + [ AST('return_stmt', + [ NONE, Token('RETURN_VALUE')]) ]) + +PASS = AST('stmts', + [ AST('sstmt', + [ AST('stmt', + [ AST('passstmt', [])])])]) + +ASSIGN_DOC_STRING = lambda doc_string: \ + AST('stmt', + [ AST('assign', + [ AST('expr', [ Token('LOAD_CONST', pattr=doc_string) ]), + AST('designator', [ Token('STORE_NAME', pattr='__doc__')]) + ])]) + +BUILD_TUPLE_0 = AST('expr', + [ AST('build_list', + [ Token('BUILD_TUPLE_0') ])]) + +NAME_MODULE = AST('stmt', + [ AST('assign', + [ AST('expr', [Token('LOAD_NAME', pattr='__name__')]), + AST('designator', [ Token('STORE_NAME', pattr='__module__')]) + ])]) + +#TAB = '\t' # as God intended +TAB = ' ' *4 # is less spacy than "\t" +INDENT_PER_LEVEL = ' ' # additional intent per pretty-print level + +TABLE_R = { + 'POP_TOP': ( '%|%c\n', 0 ), + 'STORE_ATTR': ( '%c.%[1]{pattr}', 0), +# 'STORE_SUBSCR': ( '%c[%c]', 0, 1 ), + 'STORE_SLICE+0': ( '%c[:]', 0 ), + 'STORE_SLICE+1': ( '%c[%p:]', 0, (1,100) ), + 'STORE_SLICE+2': ( '%c[:%p]', 0, (1,100) ), + 'STORE_SLICE+3': ( '%c[%p:%p]', 0, (1,100), (2,100) ), + 'DELETE_SLICE+0': ( '%|del %c[:]\n', 0 ), + 'DELETE_SLICE+1': ( '%|del %c[%c:]\n', 0, 1 ), + 'DELETE_SLICE+2': ( '%|del %c[:%c]\n', 0, 1 ), + 'DELETE_SLICE+3': ( '%|del %c[%c:%c]\n', 0, 1, 2 ), + 'DELETE_ATTR': ( '%|del %c.%[-1]{pattr}\n', 0 ), +# 'EXEC_STMT': ( '%|exec %c in %[1]C\n', 0, (0,sys.maxint,', ') ), +} +TABLE_R0 = { +# 'BUILD_LIST': ( '[%C]', (0,-1,', ') ), +# 'BUILD_TUPLE': ( '(%C)', (0,-1,', ') ), +# 'CALL_FUNCTION': ( '%c(%C)', 0, (1,-1,', ') ), +} +TABLE_DIRECT = { + 'BINARY_ADD': ( '+' ,), + 'BINARY_SUBTRACT': ( '-' ,), + 'BINARY_MULTIPLY': ( '*' ,), + 'BINARY_DIVIDE': ( '/' ,), + 'BINARY_TRUE_DIVIDE': ( '/' ,), + 'BINARY_FLOOR_DIVIDE': ( '//' ,), + 'BINARY_MODULO': ( '%%',), + 'BINARY_POWER': ( '**',), + 'BINARY_LSHIFT': ( '<<',), + 'BINARY_RSHIFT': ( '>>',), + 'BINARY_AND': ( '&' ,), + 'BINARY_OR': ( '|' ,), + 'BINARY_XOR': ( '^' ,), + 'INPLACE_ADD': ( '+=' ,), + 'INPLACE_SUBTRACT': ( '-=' ,), + 'INPLACE_MULTIPLY': ( '*=' ,), + 'INPLACE_DIVIDE': ( '/=' ,), + 'INPLACE_TRUE_DIVIDE': ( '/=' ,), + 'INPLACE_FLOOR_DIVIDE': ( '//=' ,), + 'INPLACE_MODULO': ( '%%=',), + 'INPLACE_POWER': ( '**=',), + 'INPLACE_LSHIFT': ( '<<=',), + 'INPLACE_RSHIFT': ( '>>=',), + 'INPLACE_AND': ( '&=' ,), + 'INPLACE_OR': ( '|=' ,), + 'INPLACE_XOR': ( '^=' ,), + 'binary_expr': ( '%c %c %c', 0, -1, 1 ), + + 'UNARY_POSITIVE': ( '+',), + 'UNARY_NEGATIVE': ( '-',), + 'UNARY_INVERT': ( '~%c'), + 'unary_expr': ( '%c%c', 1, 0), + + 'unary_not': ( 'not %c', 0 ), + 'unary_convert': ( '`%c`', 0 ), + 'get_iter': ( 'iter(%c)', 0 ), + 'slice0': ( '%c[:]', 0 ), + 'slice1': ( '%c[%p:]', 0, (1,100) ), + 'slice2': ( '%c[:%p]', 0, (1,100) ), + 'slice3': ( '%c[%p:%p]', 0, (1,100), (2,100) ), + + 'IMPORT_FROM': ( '%{pattr}', ), + 'load_attr': ( '%c.%[1]{pattr}', 0), + 'LOAD_FAST': ( '%{pattr}', ), + 'LOAD_NAME': ( '%{pattr}', ), + 'LOAD_GLOBAL': ( '%{pattr}', ), + 'LOAD_DEREF': ( '%{pattr}', ), + 'LOAD_LOCALS': ( 'locals()', ), + 'LOAD_ASSERT': ( '%{pattr}', ), +# 'LOAD_CONST': ( '%{pattr}', ), # handled by n_LOAD_CONST + 'DELETE_FAST': ( '%|del %{pattr}\n', ), + 'DELETE_NAME': ( '%|del %{pattr}\n', ), + 'DELETE_GLOBAL': ( '%|del %{pattr}\n', ), + 'delete_subscr': ( '%|del %c[%c]\n', 0, 1,), + 'binary_subscr': ( '%c[%p]', 0, (1,100)), + 'binary_subscr2': ( '%c[%p]', 0, (1,100)), + 'store_subscr': ( '%c[%c]', 0, 1), + 'STORE_FAST': ( '%{pattr}', ), + 'STORE_NAME': ( '%{pattr}', ), + 'STORE_GLOBAL': ( '%{pattr}', ), + 'STORE_DEREF': ( '%{pattr}', ), + 'unpack': ( '%C%,', (1, sys.maxint, ', ') ), + 'unpack_w_parens': ( '(%C%,)', (1, sys.maxint, ', ') ), + 'unpack_list': ( '[%C]', (1, sys.maxint, ', ') ), + 'build_tuple2': ( '%P', (0,-1,', ', 100) ), + + #'list_compr': ( '[ %c ]', -2), # handled by n_list_compr + 'list_iter': ( '%c', 0), + 'list_for': ( ' for %c in %c%c', 2, 0, 3 ), + 'list_if': ( ' if %c%c', 0, 2 ), + 'list_if_not': ( ' if not %p%c', (0,22), 2 ), + 'lc_body': ( '', ), # ignore when recusing + + 'comp_iter': ( '%c', 0), + 'comp_for': ( ' for %c in %c%c', 2, 0, 3 ), + 'comp_if': ( ' if %c%c', 0, 2 ), + 'comp_ifnot': ( ' if not %p%c', (0,22), 2 ), + 'comp_body': ( '', ), # ignore when recusing + 'set_comp_body': ( '%c', 0 ), + 'gen_comp_body': ( '%c', 0 ), + 'dict_comp_body': ( '%c:%c', 1, 0 ), + + 'assign': ( '%|%c = %p\n', -1, (0,200) ), + 'augassign1': ( '%|%c %c %c\n', 0, 2, 1), + 'augassign2': ( '%|%c.%[2]{pattr} %c %c\n', 0, -3, -4), +# 'dup_topx': ( '%c', 0), + 'designList': ( '%c = %c', 0, -1 ), + 'and': ( '%c and %c', 0, 2 ), + 'and2': ( '%c', 3 ), + 'or': ( '%c or %c', 0, 2 ), + 'conditional': ( '%p if %p else %p', (2,27), (0,27), (4,27)), + 'conditionaland': ( '%p if %p and %p else %p', (4,27), (0,24), (2,24), (6,27)), + 'conditionalnot': ( '%p if not %p else %p', (2,27), (0,22), (4,27)), + 'conditional_lambda': ( '(%c if %c else %c)', 2, 0, 3), + 'conditional_lambda2': ( '(%c if %p and %p else %c)', 4, (0,24), (2,24), 5), + 'return_lambda': ('%c', 0), + 'compare': ( '%p %[-1]{pattr} %p', (0,19), (1,19) ), + 'cmp_list': ( '%p %p', (0,20), (1,19)), + 'cmp_list1': ( '%[3]{pattr} %p %p', (0,19), (-2,19)), + 'cmp_list2': ( '%[1]{pattr} %p', (0,19)), +# 'classdef': (), # handled by n_classdef() + 'funcdef': ( '\n\n%|def %c\n', -2), # -2 to handle closures + 'funcdefdeco': ( '\n\n%c', 0), + 'mkfuncdeco': ( '%|@%c\n%c', 0, 1), + 'mkfuncdeco0': ( '%|def %c\n', 0), + 'classdefdeco': ( '%c', 0), + 'classdefdeco1': ( '\n\n%|@%c%c', 0, 1), + 'kwarg': ( '%[0]{pattr}=%c', 1), + 'importlist2': ( '%C', (0, sys.maxint, ', ') ), + + 'assert': ( '%|assert %c\n' , 0 ), + 'assert2': ( '%|assert %c, %c\n' , 0, 3 ), + 'assert_expr_or': ( '%c or %c', 0, 2 ), + 'assert_expr_and': ( '%c and %c', 0, 2 ), + 'print_items_stmt': ( '%|print %c%c,\n', 0, 2), + 'print_items_nl_stmt': ( '%|print %c%c\n', 0, 2), + 'print_item': ( ', %c', 0), + 'print_nl': ( '%|print\n', ), + 'print_to': ( '%|print >> %c, %c,\n', 0, 1 ), + 'print_to_nl': ( '%|print >> %c, %c\n', 0, 1 ), + 'print_nl_to': ( '%|print >> %c\n', 0 ), + 'print_to_items': ( '%C', (0, 2, ', ') ), + + 'call_stmt': ( '%|%p\n', (0,200)), + 'break_stmt': ( '%|break\n', ), + 'continue_stmt': ( '%|continue\n', ), + 'jcontinue_stmt': ( '%|continue\n', ), + 'raise_stmt': ( '%|raise %[0]C\n', (0,sys.maxint,', ') ), +# 'yield': ( 'yield %c', 0), +# 'return_stmt': ( '%|return %c\n', 0), + + 'ifstmt': ( '%|if %c:\n%+%c%-', 0, 1 ), + 'iflaststmt': ( '%|if %c:\n%+%c%-', 0, 1 ), + 'iflaststmtl': ( '%|if %c:\n%+%c%-', 0, 1 ), + 'testtrue': ( 'not %p', (0,22) ), + + 'ifelsestmt': ( '%|if %c:\n%+%c%-%|else:\n%+%c%-', 0, 1, 3 ), + 'ifelsestmtc': ( '%|if %c:\n%+%c%-%|else:\n%+%c%-', 0, 1, 3 ), + 'ifelsestmtl': ( '%|if %c:\n%+%c%-%|else:\n%+%c%-', 0, 1, 3 ), + 'ifelifstmt': ( '%|if %c:\n%+%c%-%c', 0, 1, 3 ), + 'elifelifstmt': ( '%|elif %c:\n%+%c%-%c', 0, 1, 3 ), + 'elifstmt': ( '%|elif %c:\n%+%c%-', 0, 1 ), + 'elifelsestmt': ( '%|elif %c:\n%+%c%-%|else:\n%+%c%-', 0, 1, 3 ), + 'ifelsestmtr': ( '%|if %c:\n%+%c%-%|else:\n%+%c%-', 0, 1, 2 ), + 'elifelsestmtr': ( '%|elif %c:\n%+%c%-%|else:\n%+%c%-\n\n', 0, 1, 2 ), + + 'whilestmt': ( '%|while %c:\n%+%c%-\n\n', 1, 2 ), + 'while1stmt': ( '%|while 1:\n%+%c%-\n\n', 1 ), + 'whileelsestmt': ( '%|while %c:\n%+%c%-%|else:\n%+%c%-\n\n', 1, 2, -2 ), + 'whileelselaststmt': ( '%|while %c:\n%+%c%-%|else:\n%+%c%-', 1, 2, -2 ), + 'forstmt': ( '%|for %c in %c:\n%+%c%-\n\n', 3, 1, 4 ), + 'forelsestmt': ( + '%|for %c in %c:\n%+%c%-%|else:\n%+%c%-\n\n', 3, 1, 4, -2), + 'forelselaststmt': ( + '%|for %c in %c:\n%+%c%-%|else:\n%+%c%-', 3, 1, 4, -2), + 'forelselaststmtl': ( + '%|for %c in %c:\n%+%c%-%|else:\n%+%c%-\n\n', 3, 1, 4, -2), + 'trystmt': ( '%|try:\n%+%c%-%c\n\n', 1, 3 ), + 'tryelsestmt': ( '%|try:\n%+%c%-%c%|else:\n%+%c%-\n\n', 1, 3, 4 ), + 'tryelsestmtc': ( '%|try:\n%+%c%-%c%|else:\n%+%c%-', 1, 3, 4 ), + 'tryelsestmtl': ( '%|try:\n%+%c%-%c%|else:\n%+%c%-', 1, 3, 4 ), + 'tf_trystmt': ( '%c%-%c%+', 1, 3 ), + 'tf_tryelsestmt': ( '%c%-%c%|else:\n%+%c', 1, 3, 4 ), + 'except': ( '%|except:\n%+%c%-', 3 ), + 'except_cond1': ( '%|except %c:\n', 1 ), + 'except_cond2': ( '%|except %c as %c:\n', 1, 5 ), + 'except_suite': ( '%+%c%-%C', 0, (1, sys.maxint, '') ), + 'tryfinallystmt': ( '%|try:\n%+%c%-%|finally:\n%+%c%-\n\n', 1, 5 ), + 'withstmt': ( '%|with %c:\n%+%c%-', 0, 3), + 'withasstmt': ( '%|with %c as %c:\n%+%c%-', 0, 2, 3), + 'passstmt': ( '%|pass\n', ), + 'STORE_FAST': ( '%{pattr}', ), + 'kv': ( '%c: %c', 3, 1 ), + 'kv2': ( '%c: %c', 1, 2 ), + 'mapexpr': ( '{%[1]C}', (0,sys.maxint,', ') ), + + ## + ## Python 2.5 Additions + ## + + # Import style for 2.5 + 'importstmt': ( '%|import %c\n', 2), + 'importstar': ( '%|from %[2]{pattr} import *\n', ), + 'importfrom': ( '%|from %[2]{pattr} import %c\n', 3 ), + 'importmultiple': ( '%|import %c%c\n', 2, 3), + 'import_cont' : ( ', %c', 2), + + # CE - Fixes for tuples + 'assign2': ( '%|%c, %c = %c, %c\n', 3, 4, 0, 1 ), + 'assign3': ( '%|%c, %c, %c = %c, %c, %c\n', 5, 6, 7, 0, 1, 2 ), + +} + + +MAP_DIRECT = (TABLE_DIRECT, ) +MAP_R0 = (TABLE_R0, -1, 0) +MAP_R = (TABLE_R, -1) + +MAP = { + 'stmt': MAP_R, + 'call_function': MAP_R, + 'del_stmt': MAP_R, + 'designator': MAP_R, + 'exprlist': MAP_R0, +} + +PRECEDENCE = { + 'build_list': 0, + 'mapexpr': 0, + 'unary_convert': 0, + 'dictcomp': 0, + 'setcomp': 0, + 'list_compr': 0, + 'genexpr': 0, + + 'load_attr': 2, + 'binary_subscr': 2, + 'binary_subscr2': 2, + 'slice0': 2, + 'slice1': 2, + 'slice2': 2, + 'slice3': 2, + 'buildslice2': 2, + 'buildslice3': 2, + 'call_function': 2, + + 'BINARY_POWER': 4, + + 'unary_expr': 6, + + 'BINARY_MULTIPLY': 8, + 'BINARY_DIVIDE': 8, + 'BINARY_TRUE_DIVIDE': 8, + 'BINARY_FLOOR_DIVIDE': 8, + 'BINARY_MODULO': 8, + + 'BINARY_ADD': 10, + 'BINARY_SUBTRACT': 10, + + 'BINARY_LSHIFT': 12, + 'BINARY_RSHIFT': 12, + + 'BINARY_AND': 14, + + 'BINARY_XOR': 16, + + 'BINARY_OR': 18, + + 'cmp': 20, + + 'unary_not': 22, + + 'and': 24, + + 'or': 26, + + 'conditional': 28, + 'conditionaland': 28, + 'conditionalnot': 28, + + '_mklambda': 30, + 'yield': 101 +} + +ASSIGN_TUPLE_PARAM = lambda param_name: \ + AST('expr', [ Token('LOAD_FAST', pattr=param_name) ]) + +escape = re.compile(r''' + (?P [^%]* ) + % ( \[ (?P -? \d+ ) \] )? + ((?P [^{] ) | + ( [{] (?P [^}]* ) [}] )) + ''', re.VERBOSE) + +class ParserError(Parser.ParserError): + def __init__(self, error, tokens): + self.error = error # previous exception + self.tokens = tokens + + def __str__(self): + lines = ['--- This code section failed: ---'] + lines.extend( map(str, self.tokens) ) + lines.extend( ['', str(self.error)] ) + return '\n'.join(lines) + + +def find_globals(node, globs): + """Find globals in this statement.""" + for n in node: + if isinstance(n, AST): + globs = find_globals(n, globs) + elif n.type in ('STORE_GLOBAL', 'DELETE_GLOBAL'): + globs.add(n.pattr) + return globs + +def find_all_globals(node, globs): + """Find globals in this statement.""" + for n in node: + if isinstance(n, AST): + globs = find_all_globals(n, globs) + elif n.type in ('STORE_GLOBAL', 'DELETE_GLOBAL', 'LOAD_GLOBAL'): + globs.add(n.pattr) + return globs + +def find_none(node): + for n in node: + if isinstance(n, AST): + if not (n == 'return_stmt' or n == 'return_if_stmt'): + if find_none(n): + return True + elif n.type == 'LOAD_CONST' and n.pattr == None: + return True + return False + +class Walker(GenericASTTraversal, object): + stacked_params = ('f', 'indent', 'isLambda', '_globals') + + def __init__(self, out, scanner, showast=0): + GenericASTTraversal.__init__(self, ast=None) + self.scanner = scanner + params = { + 'f': out, + 'indent': '', + } + self.showast = showast + self.__params = params + self.__param_stack = [] + self.ERROR = None + self.prec = 100 + self.return_none = False + self.mod_globs = set() + self.currentclass = None + self.pending_newlines = 0 + + f = property(lambda s: s.__params['f'], + lambda s, x: s.__params.__setitem__('f', x), + lambda s: s.__params.__delitem__('f'), + None) + + indent = property(lambda s: s.__params['indent'], + lambda s, x: s.__params.__setitem__('indent', x), + lambda s: s.__params.__delitem__('indent'), + None) + + isLambda = property(lambda s: s.__params['isLambda'], + lambda s, x: s.__params.__setitem__('isLambda', x), + lambda s: s.__params.__delitem__('isLambda'), + None) + + _globals = property(lambda s: s.__params['_globals'], + lambda s, x: s.__params.__setitem__('_globals', x), + lambda s: s.__params.__delitem__('_globals'), + None) + + def indentMore(self, indent=TAB): + self.indent += indent + def indentLess(self, indent=TAB): + self.indent = self.indent[:-len(indent)] + + def traverse(self, node, indent=None, isLambda=0): + self.__param_stack.append(self.__params) + if indent is None: indent = self.indent + p = self.pending_newlines + self.pending_newlines = 0 + self.__params = { + '_globals': {}, + 'f': cStringIO.StringIO(), + 'indent': indent, + 'isLambda': isLambda, + } + self.preorder(node) + self.f.write('\n'*self.pending_newlines) + result = self.f.getvalue() + self.__params = self.__param_stack.pop() + self.pending_newlines = p + return result + + def write(self, *data): + if (len(data) == 0) or (len(data) == 1 and data[0] == ''): + return +# import pdb; pdb.set_trace() + out = ''.join((str(j) for j in data)) + n = 0 + for i in out: + if i == '\n': + n += 1 + if n == len(out): + self.pending_newlines = max(self.pending_newlines, n) + return + elif n: + self.pending_newlines = max(self.pending_newlines, n) + out = out[n:] + break + else: + break + + if self.pending_newlines > 0: + self.f.write('\n'*self.pending_newlines) + self.pending_newlines = 0 + + for i in out[::-1]: + if i == '\n': + self.pending_newlines += 1 + else: + break + + if self.pending_newlines: + out = out[:-self.pending_newlines] + self.f.write(out) + + def print_(self, *data): + if data and not(len(data) == 1 and data[0] ==''): + self.write(*data) + self.pending_newlines = max(self.pending_newlines, 1) + + def print_docstring(self, indent, docstring): + quote = '"""' + self.write(indent) + if type(docstring) == unicode: + self.write('u') + docstring = repr(docstring.expandtabs())[2:-1] + else: + docstring = repr(docstring.expandtabs())[1:-1] + + for (orig, replace) in (('\\\\', '\t'), + ('\\r\\n', '\n'), + ('\\n', '\n'), + ('\\r', '\n'), + ('\\"', '"'), + ("\\'", "'")): + docstring = docstring.replace(orig, replace) + + #Do a raw string if there are backslashes but no other escaped characters: + #also check some edge cases + if ('\t' in docstring + and '\\' not in docstring + and len(docstring) >= 2 + and docstring[-1] != '\t' + and (docstring[-1] != '"' + or docstring[-2] == '\t')): + self.write('r') #raw string + #restore backslashes unescaped since raw + docstring = docstring.replace('\t', '\\') + else: + #Escape '"' if it's the last character, so it doesn't ruin the ending triple quote + if len(docstring) and docstring[-1] == '"': + docstring = docstring[:-1] + '\\"' + #Escape triple quote anywhere + docstring = docstring.replace('"""', '\\"\\"\\"') + #Restore escaped backslashes + docstring = docstring.replace('\t', '\\\\') + lines = docstring.split('\n') + calculate_indent = sys.maxint + for line in lines[1:]: + stripped = line.lstrip() + if len(stripped) > 0: + calculate_indent = min(calculate_indent, len(line) - len(stripped)) + calculate_indent = min(calculate_indent, len(lines[-1]) - len(lines[-1].lstrip())) + # Remove indentation (first line is special): + trimmed = [lines[0]] + if calculate_indent < sys.maxint: + trimmed += [line[calculate_indent:] for line in lines[1:]] + + self.write(quote) + if len(trimmed) == 0: + self.print_(quote) + elif len(trimmed) == 1: + self.print_(trimmed[0], quote) + else: + self.print_(trimmed[0]) + for line in trimmed[1:-1]: + self.print_( indent, line ) + self.print_(indent, trimmed[-1],quote) + + + def n_return_stmt(self, node): + if self.__params['isLambda']: + self.preorder(node[0]) + self.prune() + else: + self.write(self.indent, 'return') + if self.return_none or node != AST('return_stmt', [NONE, Token('RETURN_VALUE')]): + self.write(' ') + self.preorder(node[0]) + self.print_() + self.prune() # stop recursing + + def n_return_if_stmt(self, node): + if self.__params['isLambda']: + self.preorder(node[0]) + self.prune() + else: + self.write(self.indent, 'return') + if self.return_none or node != AST('return_if_stmt', [NONE, Token('RETURN_END_IF')]): + self.write(' ') + self.preorder(node[0]) + self.print_() + self.prune() # stop recursing + + def n_yield(self, node): + self.write('yield') + if node != AST('yield', [NONE, Token('YIELD_VALUE')]): + self.write(' ') + self.preorder(node[0]) + self.prune() # stop recursing + + def n_buildslice3(self, node): + p = self.prec + self.prec = 100 + if node[0] != NONE: + self.preorder(node[0]) + self.write(':') + if node[1] != NONE: + self.preorder(node[1]) + self.write(':') + if node[2] != NONE: + self.preorder(node[2]) + self.prec = p + self.prune() # stop recursing + + def n_buildslice2(self, node): + p = self.prec + self.prec = 100 + if node[0] != NONE: + self.preorder(node[0]) + self.write(':') + if node[1] != NONE: + self.preorder(node[1]) + self.prec = p + self.prune() # stop recursing + +# def n_l_stmts(self, node): +# if node[0] == '_stmts': +# if len(node[0]) >= 2 and node[0][1] == 'stmt': +# if node[0][-1][0] == 'continue_stmt': +# del node[0][-1] +# self.default(node) + + def n_expr(self, node): + p = self.prec + if node[0].type.startswith('binary_expr'): + n = node[0][-1][0] + else: + n = node[0] + self.prec = PRECEDENCE.get(n,-2) + if n == 'LOAD_CONST' and repr(n.pattr)[0] == '-': + self.prec = 6 + if p < self.prec: + self.write('(') + self.preorder(node[0]) + self.write(')') + else: + self.preorder(node[0]) + self.prec = p + self.prune() + + def n_binary_expr(self, node): + self.preorder(node[0]) + self.write(' ') + self.preorder(node[-1]) + self.write(' ') + self.prec -= 1 + self.preorder(node[1]) + self.prec += 1 + self.prune() + + def n_LOAD_CONST(self, node): + data = node.pattr; datatype = type(data) + if datatype is IntType and data == minint: + # convert to hex, since decimal representation + # would result in 'LOAD_CONST; UNARY_NEGATIVE' + # change:hG/2002-02-07: this was done for all negative integers + # todo: check whether this is necessary in Python 2.1 + self.write( hex(data) ) + elif datatype is EllipsisType: + self.write('...') + elif data is None: + # LOAD_CONST 'None' only occurs, when None is + # implicit eg. in 'return' w/o params + # pass + self.write('None') + else: + self.write(repr(data)) + # LOAD_CONST is a terminal, so stop processing/recursing early + self.prune() + + + def n_delete_subscr(self, node): + if node[-2][0] == 'build_list' and node[-2][0][-1].type.startswith('BUILD_TUPLE'): + if node[-2][0][-1] != 'BUILD_TUPLE_0': + node[-2][0].type = 'build_tuple2' + self.default(node) +# maybe_tuple = node[-2][-1] +# if maybe_tuple.type.startswith('BUILD_TUPLE'): +# maybe_tuple.type = 'build_tuple2' +# self.default(node) + + n_store_subscr = n_binary_subscr = n_delete_subscr + +# 'tryfinallystmt': ( '%|try:\n%+%c%-%|finally:\n%+%c%-', 1, 5 ), + def n_tryfinallystmt(self, node): + if len(node[1][0]) == 1 and node[1][0][0] == 'stmt': + if node[1][0][0][0] == 'trystmt': + node[1][0][0][0].type = 'tf_trystmt' + if node[1][0][0][0] == 'tryelsestmt': + node[1][0][0][0].type = 'tf_tryelsestmt' + self.default(node) + + def n_exec_stmt(self, node): + """ + exec_stmt ::= expr exprlist DUP_TOP EXEC_STMT + exec_stmt ::= expr exprlist EXEC_STMT + """ + self.write(self.indent, 'exec ') + self.preorder(node[0]) + if node[1][0] != NONE: + sep = ' in ' + for subnode in node[1]: + self.write(sep); sep = ", " + self.preorder(subnode) + self.print_() + self.prune() # stop recursing + + def n_ifelsestmt(self, node, preprocess=0): + n = node[3][0] + if len(n) == 1 == len(n[0]) and n[0] == '_stmts': + n = n[0][0][0] + elif n[0].type in ('lastc_stmt', 'lastl_stmt'): + n = n[0][0] + else: + if not preprocess: + self.default(node) + return + + if n.type in ('ifstmt', 'iflaststmt', 'iflaststmtl'): + node.type = 'ifelifstmt' + n.type = 'elifstmt' + elif n.type in ('ifelsestmtr',): + node.type = 'ifelifstmt' + n.type = 'elifelsestmtr' + elif n.type in ('ifelsestmt', 'ifelsestmtc', 'ifelsestmtl'): + node.type = 'ifelifstmt' + self.n_ifelsestmt(n, preprocess=1) + if n == 'ifelifstmt': + n.type = 'elifelifstmt' + elif n.type in ('ifelsestmt', 'ifelsestmtc', 'ifelsestmtl'): + n.type = 'elifelsestmt' + if not preprocess: + self.default(node) + + n_ifelsestmtc = n_ifelsestmtl = n_ifelsestmt + + def n_ifelsestmtr(self, node): + if len(node[2]) != 2: + self.default(node) + + if not (node[2][0][0][0] == 'ifstmt' and node[2][0][0][0][1][0] == 'return_if_stmts') \ + and not (node[2][0][-1][0] == 'ifstmt' and node[2][0][-1][0][1][0] == 'return_if_stmts'): + self.default(node) + return + + self.write(self.indent, 'if ') + self.preorder(node[0]) + self.print_(':') + self.indentMore() + self.preorder(node[1]) + self.indentLess() + + if_ret_at_end = False + if len(node[2][0]) >= 3: + if node[2][0][-1][0] == 'ifstmt' and node[2][0][-1][0][1][0] == 'return_if_stmts': + if_ret_at_end = True + + past_else = False + prev_stmt_is_if_ret = True + for n in node[2][0]: + if (n[0] == 'ifstmt' and n[0][1][0] == 'return_if_stmts'): + if prev_stmt_is_if_ret: + n[0].type = 'elifstmt' + prev_stmt_is_if_ret = True + else: + prev_stmt_is_if_ret = False + if not past_else and not if_ret_at_end: + self.print_(self.indent, 'else:') + self.indentMore() + past_else = True + self.preorder(n) + if not past_else or if_ret_at_end: + self.print_(self.indent, 'else:') + self.indentMore() + self.preorder(node[2][1]) + self.indentLess() + self.prune() + + def n_elifelsestmtr(self, node): + if len(node[2]) != 2: + self.default(node) + + for n in node[2][0]: + if not (n[0] == 'ifstmt' and n[0][1][0] == 'return_if_stmts'): + self.default(node) + return + + self.write(self.indent, 'elif ') + self.preorder(node[0]) + self.print_(':') + self.indentMore() + self.preorder(node[1]) + self.indentLess() + + if_ret_at_end = False + if len(node[2][0]) >= 3: + if node[2][0][-1][0] == 'ifstmt' and node[2][0][-1][0][1][0] == 'return_if_stmts': + if_ret_at_end = True + + past_else = False + prev_stmt_is_if_ret = True + for n in node[2][0]: + n[0].type = 'elifstmt' + self.preorder(n) + self.print_(self.indent, 'else:') + self.indentMore() + self.preorder(node[2][1]) + self.indentLess() + self.prune() + + def n_import_as(self, node): + iname = node[0].pattr; + assert node[-1][-1].type.startswith('STORE_') + sname = node[-1][-1].pattr # assume one of STORE_.... here + if iname == sname or iname.startswith(sname + '.'): + self.write(iname) + else: + self.write(iname, ' as ', sname) + self.prune() # stop recursing + + n_import_as_cont = n_import_as + + def n_importfrom(self, node): + if node[0].pattr > 0: + node[2].pattr = '.'*node[0].pattr+node[2].pattr + self.default(node) + + n_importstar = n_importfrom + + def n_mkfunc(self, node): + self.write(node[-2].attr.co_name) # = code.co_name + self.indentMore() + self.make_function(node, isLambda=0) + if len(self.__param_stack) > 1: + self.write('\n\n') + else: + self.write('\n\n\n') + self.indentLess() + self.prune() # stop recursing + + def n_mklambda(self, node): + self.make_function(node, isLambda=1) + self.prune() # stop recursing + + def n_list_compr(self, node): + p = self.prec + self.prec = 27 + n = node[-1] + assert n == 'list_iter' + # find innerst node + while n == 'list_iter': + n = n[0] # recurse one step + if n == 'list_for': n = n[3] + elif n == 'list_if': n = n[2] + elif n == 'list_if_not': n= n[2] + assert n == 'lc_body' + self.write( '[ '); + self.preorder(n[0]) # lc_body + self.preorder(node[-1]) # for/if parts + self.write( ' ]') + self.prec = p + self.prune() # stop recursing + + def comprehension_walk(self, node, iter_index): + p = self.prec + self.prec = 27 + code = node[-5].attr + + assert type(code) == CodeType + code = Code(code, self.scanner, self.currentclass) + #assert isinstance(code, Code) + + ast = self.build_ast(code._tokens, code._customize) + ast = ast[0][0][0] + + n = ast[iter_index] + assert n == 'comp_iter' + # find innerst node + while n == 'comp_iter': + n = n[0] # recurse one step + if n == 'comp_for': n = n[3] + elif n == 'comp_if': n = n[2] + elif n == 'comp_ifnot': n = n[2] + assert n == 'comp_body', ast + + self.preorder(n[0]) + self.write(' for ') + self.preorder(ast[iter_index-1]) + self.write(' in ') + self.preorder(node[-3]) + self.preorder(ast[iter_index]) + self.prec = p + + def n_genexpr(self, node): + self.write('(') + self.comprehension_walk(node, 3) + self.write(')') + self.prune() + + + def n_setcomp(self, node): + self.write('{') + self.comprehension_walk(node, 4) + self.write('}') + self.prune() + + n_dictcomp = n_setcomp + + + def n_classdef(self, node): + # class definition ('class X(A,B,C):') + cclass = self.currentclass + self.currentclass = str(node[0].pattr) + + self.write('\n\n') + self.write(self.indent, 'class ', self.currentclass) + self.print_super_classes(node) + self.print_(':') + + # class body + self.indentMore() + self.build_class(node[2][-2].attr) + self.indentLess() + + self.currentclass = cclass + if len(self.__param_stack) > 1: + self.write('\n\n') + else: + self.write('\n\n\n') + + self.prune() + + + n_classdefdeco2 = n_classdef + + def print_super_classes(self, node): + node = node[1][0] + if not (node == 'build_list'): + return + + self.write('(') + line_separator = ', ' + sep = '' + for elem in node[:-1]: + value = self.traverse(elem) + self.write(sep, value) + sep = line_separator + + self.write(')') + + def n_mapexpr(self, node): + """ + prettyprint a mapexpr + 'mapexpr' is something like k = {'a': 1, 'b': 42 }" + """ + p = self.prec + self.prec = 100 + assert node[-1] == 'kvlist' + node = node[-1] # goto kvlist + + self.indentMore(INDENT_PER_LEVEL) + line_seperator = ',\n' + self.indent + sep = INDENT_PER_LEVEL[:-1] + self.write('{') + for kv in node: + assert kv in ('kv', 'kv2', 'kv3') + # kv ::= DUP_TOP expr ROT_TWO expr STORE_SUBSCR + # kv2 ::= DUP_TOP expr expr ROT_THREE STORE_SUBSCR + # kv3 ::= expr expr STORE_MAP + if kv == 'kv': + name = self.traverse(kv[-2], indent=''); + value = self.traverse(kv[1], indent=self.indent+(len(name)+2)*' ') + elif kv == 'kv2': + name = self.traverse(kv[1], indent=''); + value = self.traverse(kv[-3], indent=self.indent+(len(name)+2)*' ') + elif kv == 'kv3': + name = self.traverse(kv[-2], indent=''); + value = self.traverse(kv[0], indent=self.indent+(len(name)+2)*' ') + self.write(sep, name, ': ', value) + sep = line_seperator + self.write('}') + self.indentLess(INDENT_PER_LEVEL) + self.prec = p + self.prune() + + + def n_build_list(self, node): + """ + prettyprint a list or tuple + """ + p = self.prec + self.prec = 100 + lastnode = node.pop().type + if lastnode.startswith('BUILD_LIST'): + self.write('['); endchar = ']' + elif lastnode.startswith('BUILD_TUPLE'): + self.write('('); endchar = ')' + elif lastnode.startswith('BUILD_SET'): + self.write('{'); endchar = '}' + elif lastnode.startswith('ROT_TWO'): + self.write('('); endchar = ')' + else: + raise 'Internal Error: n_build_list expects list or tuple' + + self.indentMore(INDENT_PER_LEVEL) + if len(node) > 3: + line_separator = ',\n' + self.indent + else: + line_separator = ', ' + sep = INDENT_PER_LEVEL[:-1] + for elem in node: + if (elem == 'ROT_THREE'): + continue + + assert elem == 'expr' + value = self.traverse(elem) + self.write(sep, value) + sep = line_separator + if len(node) == 1 and lastnode.startswith('BUILD_TUPLE'): + self.write(',') + self.write(endchar) + self.indentLess(INDENT_PER_LEVEL) + self.prec = p + self.prune() + + def n_unpack(self, node): + for n in node[1:]: + if n[0].type == 'unpack': + n[0].type = 'unpack_w_parens' + self.default(node) + + n_unpack_w_parens = n_unpack + + def n_assign2(self, node): + for n in node[-2:]: + if n[0] == 'unpack': + n[0].type = 'unpack_w_parens' + self.default(node) + + def n_assign3(self, node): + for n in node[-3:]: + if n[0] == 'unpack': + n[0].type = 'unpack_w_parens' + self.default(node) + + def engine(self, entry, startnode): + #self.print_("-----") + #self.print_(str(startnode.__dict__)) + + fmt = entry[0] + ## no longer used, since BUILD_TUPLE_n is pretty printed: + ##lastC = 0 + arg = 1 + i = 0 + + m = escape.search(fmt) + while m: + i = m.end() + self.write(m.group('prefix')) + + typ = m.group('type') or '{' + node = startnode + try: + if m.group('child'): + node = node[int(m.group('child'))] + except: + print node.__dict__ + raise + + if typ == '%': self.write('%') + elif typ == '+': self.indentMore() + elif typ == '-': self.indentLess() + elif typ == '|': self.write(self.indent) + ## no longer used, since BUILD_TUPLE_n is pretty printed: + elif typ == ',': + if lastC == 1: + self.write(',') + elif typ == 'c': + self.preorder(node[entry[arg]]) + arg += 1 + elif typ == 'p': + p = self.prec + (index, self.prec) = entry[arg] + self.preorder(node[index]) + self.prec = p + arg += 1 + elif typ == 'C': + low, high, sep = entry[arg] + lastC = remaining = len(node[low:high]) + ## remaining = len(node[low:high]) + for subnode in node[low:high]: + self.preorder(subnode) + remaining -= 1 + if remaining > 0: + self.write(sep) + arg += 1 + elif typ == 'P': + p = self.prec + low, high, sep, self.prec = entry[arg] + lastC = remaining = len(node[low:high]) + ## remaining = len(node[low:high]) + for subnode in node[low:high]: + self.preorder(subnode) + remaining -= 1 + if remaining > 0: + self.write(sep) + self.prec = p + arg += 1 + elif typ == '{': + d = node.__dict__ + expr = m.group('expr') + try: + self.write(eval(expr, d, d)) + except: + print node + raise + m = escape.search(fmt, i) + self.write(fmt[i:]) + + def default(self, node): + mapping = MAP.get(node, MAP_DIRECT) + table = mapping[0] + key = node + + for i in mapping[1:]: + key = key[i] + + if table.has_key(key): + self.engine(table[key], node) + self.prune() + + def customize(self, customize): + """ + Special handling for opcodes that take a variable number + of arguments -- we add a new entry for each in TABLE_R. + """ + for k, v in customize.items(): + if TABLE_R.has_key(k): + continue + op = k[ :k.rfind('_') ] + if op == 'CALL_FUNCTION': TABLE_R[k] = ('%c(%P)', 0, (1,-1,', ',100)) + elif op in ('CALL_FUNCTION_VAR', + 'CALL_FUNCTION_VAR_KW', 'CALL_FUNCTION_KW'): + if v == 0: + str = '%c(%C' # '%C' is a dummy here ... + p2 = (0, 0, None) # .. because of this + else: + str = '%c(%C, ' + p2 = (1,-2, ', ') + if op == 'CALL_FUNCTION_VAR': + str += '*%c)' + entry = (str, 0, p2, -2) + elif op == 'CALL_FUNCTION_KW': + str += '**%c)' + entry = (str, 0, p2, -2) + else: + str += '*%c, **%c)' + if p2[2]: p2 = (1, -3, ', ') + entry = (str, 0, p2, -3, -2) + TABLE_R[k] = entry + ## handled by n_mapexpr: + ##if op == 'BUILD_SLICE': TABLE_R[k] = ('%C' , (0,-1,':')) + ## handled by n_build_list: + ##if op == 'BUILD_LIST': TABLE_R[k] = ('[%C]' , (0,-1,', ')) + ##elif op == 'BUILD_TUPLE': TABLE_R[k] = ('(%C%,)', (0,-1,', ')) + + def get_tuple_parameter(self, ast, name): + """ + If the name of the formal parameter starts with dot, + it's a tuple parameter, like this: + # def MyFunc(xx, (a,b,c), yy): + # print a, b*2, c*42 + In byte-code, the whole tuple is assigned to parameter '.1' and + then the tuple gets unpacked to 'a', 'b' and 'c'. + + Since identifiers starting with a dot are illegal in Python, + we can search for the byte-code equivalent to '(a,b,c) = .1' + """ + + assert ast == 'stmts' + for i in range(len(ast)): + # search for an assign-statement + assert ast[i][0] == 'stmt' + node = ast[i][0][0] + if node == 'assign' \ + and node[0] == ASSIGN_TUPLE_PARAM(name): + # okay, this assigns '.n' to something + del ast[i] + # walk lhs; this + # returns a tuple of identifiers as used + # within the function definition + assert node[1] == 'designator' + # if lhs is not a UNPACK_TUPLE (or equiv.), + # add parenteses to make this a tuple + #if node[1][0] not in ('unpack', 'unpack_list'): + return '(' + self.traverse(node[1]) + ')' + #return self.traverse(node[1]) + raise "Can't find tuple parameter" % name + + + def make_function(self, node, isLambda, nested=1): + """Dump function defintion, doc string, and function body.""" + + def build_param(ast, name, default): + """build parameters: + - handle defaults + - handle format tuple parameters + """ + # if formal parameter is a tuple, the paramater name + # starts with a dot (eg. '.1', '.2') + if name.startswith('.'): + # replace the name with the tuple-string + name = self.get_tuple_parameter(ast, name) + + if default: + if self.showast: + print '--', name + print default + print '--' + result = '%s = %s' % (name, self.traverse(default, indent='') ) + if result[-2:] == '= ': # default was 'LOAD_CONST None' + result += 'None' + return result + else: + return name + defparams = node[:node[-1].attr] # node[-1] == MAKE_xxx_n + code = node[-2].attr + + assert type(code) == CodeType + code = Code(code, self.scanner, self.currentclass) + #assert isinstance(code, Code) + + # add defaults values to parameter names + argc = code.co_argcount + paramnames = list(code.co_varnames[:argc]) + + # defaults are for last n parameters, thus reverse + paramnames.reverse(); defparams.reverse() + + try: + ast = self.build_ast(code._tokens, + code._customize, + isLambda = isLambda, + noneInNames = ('None' in code.co_names)) + except ParserError as p: + self.write( str(p)) + self.ERROR = p + return + + # build parameters + + ##This would be a nicer piece of code, but I can't get this to work + ## now, have to find a usable lambda constuct hG/2000-09-05 + ##params = map(lambda name, default: build_param(ast, name, default), + ## paramnames, defparams) + params = [] + for name, default in map(lambda a,b: (a,b), paramnames, defparams): + params.append( build_param(ast, name, default) ) + + params.reverse() # back to correct order + + if 4 & code.co_flags: # flag 2 -> variable number of args + params.append('*%s' % code.co_varnames[argc]) + argc += 1 + if 8 & code.co_flags: # flag 3 -> keyword args + params.append('**%s' % code.co_varnames[argc]) + argc += 1 + + # dump parameter list (with default values) + indent = self.indent + if isLambda: + self.write("lambda ", ", ".join(params), ": ") + else: + self.print_("(", ", ".join(params), "):") + #self.print_(indent, '#flags:\t', int(code.co_flags)) + + if len(code.co_consts)>0 and code.co_consts[0] != None and not isLambda: # ugly + # docstring exists, dump it + self.print_docstring(indent, code.co_consts[0]) + + + code._tokens = None # save memory + assert ast == 'stmts' + #if isLambda: + # convert 'return' statement to expression + #assert len(ast[0]) == 1 wrong, see 'lambda (r,b): r,b,g' + #assert ast[-1] == 'stmt' + #assert len(ast[-1]) == 1 +# assert ast[-1][0] == 'return_stmt' +# ast[-1][0].type = 'return_lambda' + #else: + # if ast[-1] == RETURN_NONE: + # Python adds a 'return None' to the + # end of any function; remove it + # ast.pop() # remove last node + + all_globals = find_all_globals(ast, set()) + for g in ((all_globals & self.mod_globs) | find_globals(ast, set())): + self.print_(self.indent, 'global ', g) + self.mod_globs -= all_globals + rn = ('None' in code.co_names) and not find_none(ast) + self.gen_source(ast, code._customize, isLambda=isLambda, returnNone=rn) + code._tokens = None; code._customize = None # save memory + + def build_class(self, code): + """Dump class definition, doc string and class body.""" + + assert type(code) == CodeType + code = Code(code, self.scanner, self.currentclass) + #assert isinstance(code, Code) + + indent = self.indent + #self.print_(indent, '#flags:\t', int(code.co_flags)) + ast = self.build_ast(code._tokens, code._customize) + code._tokens = None # save memory + assert ast == 'stmts' + + if ast[0][0] == NAME_MODULE: + del ast[0] + + # if docstring exists, dump it + if code.co_consts and code.co_consts[0] != None and ast[0][0] == ASSIGN_DOC_STRING(code.co_consts[0]): + self.print_docstring(indent, code.co_consts[0]) + self.print_() + del ast[0] + + + # the function defining a class normally returns locals(); we + # don't want this to show up in the source, thus remove the node + if ast[-1][0] == RETURN_LOCALS: + del ast[-1] # remove last node + #else: + # print ast[-1][-1] + + for g in find_globals(ast, {}).keys(): + self.print_(indent, 'global ', g) + + self.gen_source(ast, code._customize) + code._tokens = None; code._customize = None # save memory + + + def gen_source(self, ast, customize, isLambda=0, returnNone=False): + """convert AST to source code""" + + rn = self.return_none + self.return_none = returnNone + # if code would be empty, append 'pass' + if len(ast) == 0: + self.print_(self.indent, 'pass') + else: + self.customize(customize) + if isLambda: + self.write(self.traverse(ast, isLambda=isLambda)) + else: + self.print_(self.traverse(ast, isLambda=isLambda)) + self.return_none = rn + + def build_ast(self, tokens, customize, isLambda=0, noneInNames=False): + assert type(tokens) == ListType + #assert isinstance(tokens[0], Token) + + if isLambda: + tokens.append(Token('LAMBDA_MARKER')) + try: + ast = Parser.parse(tokens, customize) + except Parser.ParserError, e: + raise ParserError(e, tokens) + if self.showast: + self.print_(repr(ast)) + return ast + + if len(tokens) > 2 or len(tokens) == 2 and not noneInNames: + if tokens[-1] == Token('RETURN_VALUE'): + if tokens[-2] == Token('LOAD_CONST'): + del tokens[-2:] + else: + tokens.append(Token('RETURN_LAST')) + if len(tokens) == 0: + return PASS + + # Build AST from disassembly. + try: + ast = Parser.parse(tokens, customize) + except Parser.ParserError, e: + raise ParserError(e, tokens) + + if self.showast: + self.print_(repr(ast)) + + return ast diff --git a/build/lib.linux-i686-2.7/uncompyle2/__init__.py b/build/lib.linux-i686-2.7/uncompyle2/__init__.py new file mode 100755 index 00000000..6d94b492 --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/__init__.py @@ -0,0 +1,232 @@ +# Copyright (c) 1999 John Aycock +# Copyright (c) 2000 by hartmut Goebel +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# See the file 'CHANGES' for a list of changes +# +# NB. This is not a masterpiece of software, but became more like a hack. +# Probably a complete rewrite would be sensefull. hG/2000-12-27 +# + +import sys, types, os +import Walker, verify, magics + +sys.setrecursionlimit(5000) +__all__ = ['uncompyle_file', 'uncompyle_file', 'main'] + +def _load_file(filename): + """ + load a Python source file and compile it to byte-code + + _load_module(filename: string): code_object + + filename: name of file containing Python source code + (normally a .py) + code_object: code_object compiled from this source code + + This function does NOT write any file! + """ + fp = open(filename, 'rb') + source = fp.read()+'\n' + try: + co = compile(source, filename, 'exec') + except SyntaxError: + print >> sys.stderr, '>>Syntax error in', filename + raise + fp.close() + return co + +def _load_module(filename): + """ + load a module without importing it + _load_module(filename: string): code_object + + filename: name of file containing Python byte-code object + (normally a .pyc) + code_object: code_object from this file + """ + import magics, marshal + fp = open(filename, 'rb') + magic = fp.read(4) + try: + version = float(magics.versions[magic]) + except KeyError: + raise ImportError, "Unknown magic number %s in %s" % (ord(magic[0])+256*ord(magic[1]), filename) + if (version > 2.7) or (version < 2.5): + raise ImportError, "This is a Python %s file! Only Python 2.5 to 2.7 files are supported." % version + #print version + fp.read(4) # timestamp + co = marshal.load(fp) + fp.close() + return version, co + +def uncompyle(version, co, out=None, showasm=0, showast=0): + """ + diassembles a given code block 'co' + """ + assert type(co) == types.CodeType + + # store final output stream for case of error + __real_out = out or sys.stdout + if co.co_filename: + print >>__real_out, '#Embedded file name: %s' % co.co_filename + # diff scanner + if version == 2.7: + import Scanner27 as scan + elif version == 2.6: + import Scanner26 as scan + elif version == 2.5: + import Scanner25 as scan + + scanner = scan.Scanner(version) + scanner.setShowAsm(showasm, out) + tokens, customize = scanner.disassemble(co) + + #sys.exit(0) + # Build AST from disassembly. + walker = Walker.Walker(out, scanner, showast=showast) + try: + ast = walker.build_ast(tokens, customize) + except Walker.ParserError, e : # parser failed, dump disassembly + print >>__real_out, e + raise + + del tokens # save memory + + # convert leading '__doc__ = "..." into doc string + assert ast == 'stmts' + try: + if ast[0][0] == Walker.ASSIGN_DOC_STRING(co.co_consts[0]): + walker.print_docstring('', co.co_consts[0]) + del ast[0] + if ast[-1] == Walker.RETURN_NONE: + ast.pop() # remove last node + #todo: if empty, add 'pass' + except: + pass + walker.mod_globs = Walker.find_globals(ast, set()) + walker.gen_source(ast, customize) + for g in walker.mod_globs: + walker.write('global %s ## Warning: Unused global\n' % g) + if walker.ERROR: + raise walker.ERROR + +def uncompyle_file(filename, outstream=None, showasm=0, showast=0): + """ + decompile Python byte-code file (.pyc) + """ + version, co = _load_module(filename) + uncompyle(version, co, outstream, showasm, showast) + co = None + +#---- main ------- + +if sys.platform.startswith('linux') and os.uname()[2][:2] == '2.': + def __memUsage(): + mi = open('/proc/self/stat', 'r') + mu = mi.readline().split()[22] + mi.close() + return int(mu) / 1000000 +else: + def __memUsage(): + return '' + +def main(in_base, out_base, files, codes, outfile=None, + showasm=0, showast=0, do_verify=0): + """ + in_base base directory for input files + out_base base directory for output files (ignored when + files list of filenames to be uncompyled (relative to src_base) + outfile write output to this filename (overwrites out_base) + + For redirecting output to + - outfile= (out_base is ignored) + - files below out_base out_base=... + - stdout out_base=None, outfile=None + """ + def _get_outstream(outfile): + dir = os.path.dirname(outfile) + failed_file = outfile + '_failed' + if os.path.exists(failed_file): os.remove(failed_file) + try: + os.makedirs(dir) + except OSError: + pass + return open(outfile, 'w') + + of = outfile + + tot_files = okay_files = failed_files = verify_failed_files = 0 + + for code in codes: + version = sys.version[:3] # "2.5" + with open(code, "r") as f: + co = compile(f.read(), "", "exec") + uncompyle(sys.version[:3], co, sys.stdout, showasm=showasm, showast=showast) + + for file in files: + infile = os.path.join(in_base, file) + #print >>sys.stderr, infile + + if of: # outfile was given as parameter + outstream = _get_outstream(outfile) + elif out_base is None: + outstream = sys.stdout + else: + outfile = os.path.join(out_base, file) + '_dis' + outstream = _get_outstream(outfile) + #print >>sys.stderr, outfile + + # try to decomyple the input file + try: + uncompyle_file(infile, outstream, showasm, showast) + tot_files += 1 + except KeyboardInterrupt: + if outfile: + outstream.close() + os.remove(outfile) + raise + except: + failed_files += 1 + sys.stderr.write("### Can't uncompyle %s\n" % infile) + if outfile: + outstream.close() + os.rename(outfile, outfile + '_failed') + import traceback + traceback.print_exc() + #raise + else: # uncompyle successfull + if outfile: + outstream.close() + if do_verify: + try: + verify.compare_code_with_srcfile(infile, outfile) + print "+++ okay decompyling", infile, __memUsage() + okay_files += 1 + except verify.VerifyCmpError, e: + verify_failed_files += 1 + os.rename(outfile, outfile + '_unverified') + print >>sys.stderr, "### Error Verifiying", file + print >>sys.stderr, e + else: + okay_files += 1 + print "+++ okay decompyling", infile, __memUsage() + return (tot_files, okay_files, failed_files, verify_failed_files) diff --git a/build/lib.linux-i686-2.7/uncompyle2/disas.py b/build/lib.linux-i686-2.7/uncompyle2/disas.py new file mode 100755 index 00000000..e732f6d3 --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/disas.py @@ -0,0 +1,238 @@ +"""Disassembler of Python byte code into mnemonics.""" + +import sys +import types + +_have_code = (types.MethodType, types.FunctionType, types.CodeType, types.ClassType, type) + +def dis(x=None): + """Disassemble classes, methods, functions, or code. + + With no argument, disassemble the last traceback. + + """ + if x is None: + distb() + return + if isinstance(x, types.InstanceType): + x = x.__class__ + if hasattr(x, 'im_func'): + x = x.im_func + if hasattr(x, 'func_code'): + x = x.func_code + if hasattr(x, '__dict__'): + items = x.__dict__.items() + items.sort() + for name, x1 in items: + if isinstance(x1, _have_code): + print "Disassembly of %s:" % name + try: + dis(x1) + except TypeError, msg: + print "Sorry:", msg + print + elif hasattr(x, 'co_code'): + disassemble(x) + elif isinstance(x, str): + disassemble_string(x) + else: + raise TypeError, \ + "don't know how to disassemble %s objects" % \ + type(x).__name__ + +def distb(tb=None): + """Disassemble a traceback (default: last traceback).""" + if tb is None: + try: + tb = sys.last_traceback + except AttributeError: + raise RuntimeError, "no last traceback to disassemble" + while tb.tb_next: tb = tb.tb_next + disassemble(tb.tb_frame.f_code, tb.tb_lasti) + +def disassemble(co, lasti=-1): + """Disassemble a code object.""" + code = co.co_code + labels = findlabels(code) + linestarts = dict(findlinestarts(co)) + n = len(code) + i = 0 + extended_arg = 0 + free = None + while i < n: + c = code[i] + op = ord(c) + if i in linestarts: + if i > 0: + print + print "%3d" % linestarts[i], + else: + print ' ', + + if i == lasti: print '-->', + else: print ' ', + if i in labels: print '>>', + else: print ' ', + print repr(i).rjust(4), + print opname[op].ljust(20), + i = i+1 + if op >= HAVE_ARGUMENT: + oparg = ord(code[i]) + ord(code[i+1])*256 + extended_arg + extended_arg = 0 + i = i+2 + if op == EXTENDED_ARG: + extended_arg = oparg*65536L + print repr(oparg).rjust(5), + if op in hasconst: + print '(' + repr(co.co_consts[oparg]) + ')', + elif op in hasname: + print '(' + co.co_names[oparg] + ')', + elif op in hasjrel: + print '(to ' + repr(i + oparg) + ')', + elif op in haslocal: + print '(' + co.co_varnames[oparg] + ')', + elif op in hascompare: + print '(' + cmp_op[oparg] + ')', + elif op in hasfree: + if free is None: + free = co.co_cellvars + co.co_freevars + print '(' + free[oparg] + ')', + print + +def disassemble_string(code, lasti=-1, varnames=None, names=None, + constants=None): + labels = findlabels(code) + n = len(code) + i = 0 + while i < n: + c = code[i] + op = ord(c) + if i == lasti: print '-->', + else: print ' ', + if i in labels: print '>>', + else: print ' ', + print repr(i).rjust(4), + print opname[op].ljust(15), + i = i+1 + if op >= HAVE_ARGUMENT: + oparg = ord(code[i]) + ord(code[i+1])*256 + i = i+2 + print repr(oparg).rjust(5), + if op in hasconst: + if constants: + print '(' + repr(constants[oparg]) + ')', + else: + print '(%d)'%oparg, + elif op in hasname: + if names is not None: + print '(' + names[oparg] + ')', + else: + print '(%d)'%oparg, + elif op in hasjrel: + print '(to ' + repr(i + oparg) + ')', + elif op in haslocal: + if varnames: + print '(' + varnames[oparg] + ')', + else: + print '(%d)' % oparg, + elif op in hascompare: + print '(' + cmp_op[oparg] + ')', + print + +disco = disassemble # XXX For backwards compatibility + +def findlabels(code): + """Detect all offsets in a byte code which are jump targets. + + Return the list of offsets. + + """ + labels = [] + n = len(code) + i = 0 + while i < n: + c = code[i] + op = ord(c) + i = i+1 + if op >= HAVE_ARGUMENT: + oparg = ord(code[i]) + ord(code[i+1])*256 + i = i+2 + label = -1 + if op in hasjrel: + label = i+oparg + elif op in hasjabs: + label = oparg + if label >= 0: + if label not in labels: + labels.append(label) + return labels + +def findlinestarts(code): + """Find the offsets in a byte code which are start of lines in the source. + + Generate pairs (offset, lineno) as described in Python/compile.c. + + """ + byte_increments = [ord(c) for c in code.co_lnotab[0::2]] + line_increments = [ord(c) for c in code.co_lnotab[1::2]] + + lastlineno = None + lineno = code.co_firstlineno + addr = 0 + for byte_incr, line_incr in zip(byte_increments, line_increments): + if byte_incr: + if lineno != lastlineno: + yield (addr, lineno) + lastlineno = lineno + addr += byte_incr + lineno += line_incr + if lineno != lastlineno: + yield (addr, lineno) + +def setVersion(version): + if version == 2.7: + import uncompyle2.opcode.opcode_27 as opcodyn + elif version == 2.6: + import uncompyle2.opcode.opcode_26 as opcodyn + elif version == 2.5: + import uncompyle2.opcode.opcode_25 as opcodyn + + globals().update({'cmp_op': opcodyn.cmp_op}) + globals().update({'hasconst': opcodyn.hasconst}) + globals().update({'hasname': opcodyn.hasname}) + globals().update({'hasjrel': opcodyn.hasjrel}) + globals().update({'hasjabs': opcodyn.hasjabs}) + globals().update({'haslocal': opcodyn.haslocal}) + globals().update({'hascompare': opcodyn.hascompare}) + globals().update({'hasfree': opcodyn.hasfree}) + globals().update({'opname': opcodyn.opname}) + globals().update({'opmap': opcodyn.opmap}) + globals().update({'HAVE_ARGUMENT': opcodyn.HAVE_ARGUMENT}) + globals().update({'EXTENDED_ARG': opcodyn.EXTENDED_ARG}) + + +def _test(): + """Simple test program to disassemble a file.""" + if sys.argv[1:]: + if sys.argv[2:]: + sys.stderr.write("usage: python dis.py [-|file]\n") + sys.exit(2) + fn = sys.argv[1] + if not fn or fn == "-": + fn = None + else: + fn = None + if fn is None: + f = sys.stdin + else: + f = open(fn) + source = f.read() + if fn is not None: + f.close() + else: + fn = "" + code = compile(source, fn, "exec") + dis(code) + +if __name__ == "__main__": + _test() diff --git a/build/lib.linux-i686-2.7/uncompyle2/magics.py b/build/lib.linux-i686-2.7/uncompyle2/magics.py new file mode 100755 index 00000000..74177b7a --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/magics.py @@ -0,0 +1,66 @@ +import struct + +__all__ = ['magics', 'versions'] + +def __build_magic(magic): + return struct.pack('Hcc', magic, '\r', '\n') + +def __by_version(magics): + by_version = {} + for m, v in magics.items(): + by_version[v] = m + return by_version + +versions = { + # taken from from Python/import.c + # magic, version + __build_magic(20121): '1.5', #1.5, 1.5.1, 1.5.2 + __build_magic(50428): '1.6', #1.6 + __build_magic(50823): '2.0', #2.0, 2.0.1 + __build_magic(60202): '2.1', #2.1, 2.1.1, 2.1.2 + __build_magic(60717): '2.2', #2.2 + __build_magic(62011): '2.3', #2.3a0 + __build_magic(62021): '2.3', #2.3a0 + __build_magic(62041): '2.4', #2.4a0 + __build_magic(62051): '2.4', #2.4a3 + __build_magic(62061): '2.4', #2.4b1 + __build_magic(62071): '2.5', #2.5a0 + __build_magic(62081): '2.5', #2.5a0 (ast-branch) + __build_magic(62091): '2.5', #2.5a0 (with) + __build_magic(62092): '2.5', #2.5a0 (changed WITH_CLEANUP opcode) + __build_magic(62101): '2.5', #2.5b3 (fix wrong code: for x, in ...) + __build_magic(62111): '2.5', #2.5b3 (fix wrong code: x += yield) + __build_magic(62121): '2.5', #2.5c1 (fix wrong lnotab with for loops and + # storing constants that should have been removed + __build_magic(62131): '2.5', #2.5c2 (fix wrong code: for x, in ... in listcomp/genexp) + __build_magic(62151): '2.6', #2.6a0 (peephole optimizations & STORE_MAP) + __build_magic(62161): '2.6', #2.6a1 (WITH_CLEANUP optimization) + __build_magic(62171): '2.7', #2.7a0 (optimize list comprehensions/change LIST_APPEND) + __build_magic(62181): '2.7', #2.7a0 (optimize conditional branches: + # introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE) + __build_magic(62191): '2.7', #2.7a0 (introduce SETUP_WITH) + __build_magic(62201): '2.7', #2.7a0 (introduce BUILD_SET) + __build_magic(62211): '2.7' #2.7a0 (introduce MAP_ADD and SET_ADD) +} + +magics = __by_version(versions) + +def __show(text, magic): + print text, struct.unpack('BBBB', magic), \ + struct.unpack('HBB', magic) + +def test(): + import imp + magic_20 = by_version['2.0'] + current = imp.get_magic() + current_version = magics[current] + magic_current = by_version[ current_version ] + print type(magic_20), len(magic_20), repr(magic_20) + print + print 'This Python interpreter has version', current_version + __show('imp.get_magic():\t', current), + __show('magic[current_version]:\t', magic_current) + __show('magic_20:\t\t', magic_20) + +if __name__ == '__main__': + test() diff --git a/build/lib.linux-i686-2.7/uncompyle2/opcode/__init__.py b/build/lib.linux-i686-2.7/uncompyle2/opcode/__init__.py new file mode 100755 index 00000000..e69de29b diff --git a/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_23.py b/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_23.py new file mode 100755 index 00000000..cfde5f80 --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_23.py @@ -0,0 +1,188 @@ + +""" +opcode module - potentially shared between dis and other modules which +operate on bytecodes (e.g. peephole optimizers). +""" + +__all__ = ["cmp_op", "hasconst", "hasname", "hasjrel", "hasjabs", + "haslocal", "hascompare", "hasfree", "opname", "opmap", + "HAVE_ARGUMENT", "EXTENDED_ARG"] + +cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is', + 'is not', 'exception match', 'BAD') + +hasconst = [] +hasname = [] +hasjrel = [] +hasjabs = [] +haslocal = [] +hascompare = [] +hasfree = [] + +opmap = {} +opname = [''] * 256 +for op in range(256): opname[op] = '<' + `op` + '>' +del op + +def def_op(name, op): + opname[op] = name + opmap[name] = op + +def name_op(name, op): + def_op(name, op) + hasname.append(op) + +def jrel_op(name, op): + def_op(name, op) + hasjrel.append(op) + +def jabs_op(name, op): + def_op(name, op) + hasjabs.append(op) + +# Instruction opcodes for compiled code + +def_op('STOP_CODE', 0) +def_op('POP_TOP', 1) +def_op('ROT_TWO', 2) +def_op('ROT_THREE', 3) +def_op('DUP_TOP', 4) +def_op('ROT_FOUR', 5) + +def_op('UNARY_POSITIVE', 10) +def_op('UNARY_NEGATIVE', 11) +def_op('UNARY_NOT', 12) +def_op('UNARY_CONVERT', 13) + +def_op('UNARY_INVERT', 15) + +def_op('BINARY_POWER', 19) + +def_op('BINARY_MULTIPLY', 20) +def_op('BINARY_DIVIDE', 21) +def_op('BINARY_MODULO', 22) +def_op('BINARY_ADD', 23) +def_op('BINARY_SUBTRACT', 24) +def_op('BINARY_SUBSCR', 25) +def_op('BINARY_FLOOR_DIVIDE', 26) +def_op('BINARY_TRUE_DIVIDE', 27) +def_op('INPLACE_FLOOR_DIVIDE', 28) +def_op('INPLACE_TRUE_DIVIDE', 29) + +def_op('SLICE+0', 30) +def_op('SLICE+1', 31) +def_op('SLICE+2', 32) +def_op('SLICE+3', 33) + +def_op('STORE_SLICE+0', 40) +def_op('STORE_SLICE+1', 41) +def_op('STORE_SLICE+2', 42) +def_op('STORE_SLICE+3', 43) + +def_op('DELETE_SLICE+0', 50) +def_op('DELETE_SLICE+1', 51) +def_op('DELETE_SLICE+2', 52) +def_op('DELETE_SLICE+3', 53) + +def_op('INPLACE_ADD', 55) +def_op('INPLACE_SUBTRACT', 56) +def_op('INPLACE_MULTIPLY', 57) +def_op('INPLACE_DIVIDE', 58) +def_op('INPLACE_MODULO', 59) +def_op('STORE_SUBSCR', 60) +def_op('DELETE_SUBSCR', 61) + +def_op('BINARY_LSHIFT', 62) +def_op('BINARY_RSHIFT', 63) +def_op('BINARY_AND', 64) +def_op('BINARY_XOR', 65) +def_op('BINARY_OR', 66) +def_op('INPLACE_POWER', 67) +def_op('GET_ITER', 68) + +def_op('PRINT_EXPR', 70) +def_op('PRINT_ITEM', 71) +def_op('PRINT_NEWLINE', 72) +def_op('PRINT_ITEM_TO', 73) +def_op('PRINT_NEWLINE_TO', 74) +def_op('INPLACE_LSHIFT', 75) +def_op('INPLACE_RSHIFT', 76) +def_op('INPLACE_AND', 77) +def_op('INPLACE_XOR', 78) +def_op('INPLACE_OR', 79) +def_op('BREAK_LOOP', 80) + +def_op('LOAD_LOCALS', 82) +def_op('RETURN_VALUE', 83) +def_op('IMPORT_STAR', 84) +def_op('EXEC_STMT', 85) +def_op('YIELD_VALUE', 86) + +def_op('POP_BLOCK', 87) +def_op('END_FINALLY', 88) +def_op('BUILD_CLASS', 89) + +HAVE_ARGUMENT = 90 # Opcodes from here have an argument: + +name_op('STORE_NAME', 90) # Index in name list +name_op('DELETE_NAME', 91) # "" +def_op('UNPACK_SEQUENCE', 92) # Number of tuple items +jrel_op('FOR_ITER', 93) + +name_op('STORE_ATTR', 95) # Index in name list +name_op('DELETE_ATTR', 96) # "" +name_op('STORE_GLOBAL', 97) # "" +name_op('DELETE_GLOBAL', 98) # "" +def_op('DUP_TOPX', 99) # number of items to duplicate +def_op('LOAD_CONST', 100) # Index in const list +hasconst.append(100) +name_op('LOAD_NAME', 101) # Index in name list +def_op('BUILD_TUPLE', 102) # Number of tuple items +def_op('BUILD_LIST', 103) # Number of list items +def_op('BUILD_MAP', 104) # Always zero for now +name_op('LOAD_ATTR', 105) # Index in name list +def_op('COMPARE_OP', 106) # Comparison operator +hascompare.append(106) +name_op('IMPORT_NAME', 107) # Index in name list +name_op('IMPORT_FROM', 108) # Index in name list + +jrel_op('JUMP_FORWARD', 110) # Number of bytes to skip +jrel_op('JUMP_IF_FALSE', 111) # "" +jrel_op('JUMP_IF_TRUE', 112) # "" +jabs_op('JUMP_ABSOLUTE', 113) # Target byte offset from beginning of code + +name_op('LOAD_GLOBAL', 116) # Index in name list + +jabs_op('CONTINUE_LOOP', 119) # Target address +jrel_op('SETUP_LOOP', 120) # Distance to target address +jrel_op('SETUP_EXCEPT', 121) # "" +jrel_op('SETUP_FINALLY', 122) # "" + +def_op('LOAD_FAST', 124) # Local variable number +haslocal.append(124) +def_op('STORE_FAST', 125) # Local variable number +haslocal.append(125) +def_op('DELETE_FAST', 126) # Local variable number +haslocal.append(126) + +def_op('RAISE_VARARGS', 130) # Number of raise arguments (1, 2, or 3) +def_op('CALL_FUNCTION', 131) # #args + (#kwargs << 8) +def_op('MAKE_FUNCTION', 132) # Number of args with default values +def_op('BUILD_SLICE', 133) # Number of items + +def_op('MAKE_CLOSURE', 134) +def_op('LOAD_CLOSURE', 135) +hasfree.append(135) +def_op('LOAD_DEREF', 136) +hasfree.append(136) +def_op('STORE_DEREF', 137) +hasfree.append(137) + +def_op('CALL_FUNCTION_VAR', 140) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_KW', 141) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_VAR_KW', 142) # #args + (#kwargs << 8) + +def_op('EXTENDED_ARG', 143) +EXTENDED_ARG = 143 + +del def_op, name_op, jrel_op, jabs_op diff --git a/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_24.py b/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_24.py new file mode 100755 index 00000000..9517c431 --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_24.py @@ -0,0 +1,190 @@ + +""" +opcode module - potentially shared between dis and other modules which +operate on bytecodes (e.g. peephole optimizers). +""" + +__all__ = ["cmp_op", "hasconst", "hasname", "hasjrel", "hasjabs", + "haslocal", "hascompare", "hasfree", "opname", "opmap", + "HAVE_ARGUMENT", "EXTENDED_ARG"] + +cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is', + 'is not', 'exception match', 'BAD') + +hasconst = [] +hasname = [] +hasjrel = [] +hasjabs = [] +haslocal = [] +hascompare = [] +hasfree = [] + +opmap = {} +opname = [''] * 256 +for op in range(256): opname[op] = '<%r>' % (op,) +del op + +def def_op(name, op): + opname[op] = name + opmap[name] = op + +def name_op(name, op): + def_op(name, op) + hasname.append(op) + +def jrel_op(name, op): + def_op(name, op) + hasjrel.append(op) + +def jabs_op(name, op): + def_op(name, op) + hasjabs.append(op) + +# Instruction opcodes for compiled code + +def_op('STOP_CODE', 0) +def_op('POP_TOP', 1) +def_op('ROT_TWO', 2) +def_op('ROT_THREE', 3) +def_op('DUP_TOP', 4) +def_op('ROT_FOUR', 5) + +def_op('NOP', 9) +def_op('UNARY_POSITIVE', 10) +def_op('UNARY_NEGATIVE', 11) +def_op('UNARY_NOT', 12) +def_op('UNARY_CONVERT', 13) + +def_op('UNARY_INVERT', 15) + +def_op('LIST_APPEND', 18) +def_op('BINARY_POWER', 19) + +def_op('BINARY_MULTIPLY', 20) +def_op('BINARY_DIVIDE', 21) +def_op('BINARY_MODULO', 22) +def_op('BINARY_ADD', 23) +def_op('BINARY_SUBTRACT', 24) +def_op('BINARY_SUBSCR', 25) +def_op('BINARY_FLOOR_DIVIDE', 26) +def_op('BINARY_TRUE_DIVIDE', 27) +def_op('INPLACE_FLOOR_DIVIDE', 28) +def_op('INPLACE_TRUE_DIVIDE', 29) + +def_op('SLICE+0', 30) +def_op('SLICE+1', 31) +def_op('SLICE+2', 32) +def_op('SLICE+3', 33) + +def_op('STORE_SLICE+0', 40) +def_op('STORE_SLICE+1', 41) +def_op('STORE_SLICE+2', 42) +def_op('STORE_SLICE+3', 43) + +def_op('DELETE_SLICE+0', 50) +def_op('DELETE_SLICE+1', 51) +def_op('DELETE_SLICE+2', 52) +def_op('DELETE_SLICE+3', 53) + +def_op('INPLACE_ADD', 55) +def_op('INPLACE_SUBTRACT', 56) +def_op('INPLACE_MULTIPLY', 57) +def_op('INPLACE_DIVIDE', 58) +def_op('INPLACE_MODULO', 59) +def_op('STORE_SUBSCR', 60) +def_op('DELETE_SUBSCR', 61) + +def_op('BINARY_LSHIFT', 62) +def_op('BINARY_RSHIFT', 63) +def_op('BINARY_AND', 64) +def_op('BINARY_XOR', 65) +def_op('BINARY_OR', 66) +def_op('INPLACE_POWER', 67) +def_op('GET_ITER', 68) + +def_op('PRINT_EXPR', 70) +def_op('PRINT_ITEM', 71) +def_op('PRINT_NEWLINE', 72) +def_op('PRINT_ITEM_TO', 73) +def_op('PRINT_NEWLINE_TO', 74) +def_op('INPLACE_LSHIFT', 75) +def_op('INPLACE_RSHIFT', 76) +def_op('INPLACE_AND', 77) +def_op('INPLACE_XOR', 78) +def_op('INPLACE_OR', 79) +def_op('BREAK_LOOP', 80) + +def_op('LOAD_LOCALS', 82) +def_op('RETURN_VALUE', 83) +def_op('IMPORT_STAR', 84) +def_op('EXEC_STMT', 85) +def_op('YIELD_VALUE', 86) + +def_op('POP_BLOCK', 87) +def_op('END_FINALLY', 88) +def_op('BUILD_CLASS', 89) + +HAVE_ARGUMENT = 90 # Opcodes from here have an argument: + +name_op('STORE_NAME', 90) # Index in name list +name_op('DELETE_NAME', 91) # "" +def_op('UNPACK_SEQUENCE', 92) # Number of tuple items +jrel_op('FOR_ITER', 93) + +name_op('STORE_ATTR', 95) # Index in name list +name_op('DELETE_ATTR', 96) # "" +name_op('STORE_GLOBAL', 97) # "" +name_op('DELETE_GLOBAL', 98) # "" +def_op('DUP_TOPX', 99) # number of items to duplicate +def_op('LOAD_CONST', 100) # Index in const list +hasconst.append(100) +name_op('LOAD_NAME', 101) # Index in name list +def_op('BUILD_TUPLE', 102) # Number of tuple items +def_op('BUILD_LIST', 103) # Number of list items +def_op('BUILD_MAP', 104) # Always zero for now +name_op('LOAD_ATTR', 105) # Index in name list +def_op('COMPARE_OP', 106) # Comparison operator +hascompare.append(106) +name_op('IMPORT_NAME', 107) # Index in name list +name_op('IMPORT_FROM', 108) # Index in name list + +jrel_op('JUMP_FORWARD', 110) # Number of bytes to skip +jrel_op('JUMP_IF_FALSE', 111) # "" +jrel_op('JUMP_IF_TRUE', 112) # "" +jabs_op('JUMP_ABSOLUTE', 113) # Target byte offset from beginning of code + +name_op('LOAD_GLOBAL', 116) # Index in name list + +jabs_op('CONTINUE_LOOP', 119) # Target address +jrel_op('SETUP_LOOP', 120) # Distance to target address +jrel_op('SETUP_EXCEPT', 121) # "" +jrel_op('SETUP_FINALLY', 122) # "" + +def_op('LOAD_FAST', 124) # Local variable number +haslocal.append(124) +def_op('STORE_FAST', 125) # Local variable number +haslocal.append(125) +def_op('DELETE_FAST', 126) # Local variable number +haslocal.append(126) + +def_op('RAISE_VARARGS', 130) # Number of raise arguments (1, 2, or 3) +def_op('CALL_FUNCTION', 131) # #args + (#kwargs << 8) +def_op('MAKE_FUNCTION', 132) # Number of args with default values +def_op('BUILD_SLICE', 133) # Number of items + +def_op('MAKE_CLOSURE', 134) +def_op('LOAD_CLOSURE', 135) +hasfree.append(135) +def_op('LOAD_DEREF', 136) +hasfree.append(136) +def_op('STORE_DEREF', 137) +hasfree.append(137) + +def_op('CALL_FUNCTION_VAR', 140) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_KW', 141) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_VAR_KW', 142) # #args + (#kwargs << 8) + +def_op('EXTENDED_ARG', 143) +EXTENDED_ARG = 143 + +del def_op, name_op, jrel_op, jabs_op diff --git a/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_25.py b/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_25.py new file mode 100755 index 00000000..699ecd91 --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_25.py @@ -0,0 +1,185 @@ + +""" +opcode module - potentially shared between dis and other modules which +operate on bytecodes (e.g. peephole optimizers). +""" + +__all__ = ["cmp_op", "hasconst", "hasname", "hasjrel", "hasjabs", + "haslocal", "hascompare", "hasfree", "opname", "opmap", + "HAVE_ARGUMENT", "EXTENDED_ARG"] + +cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is', + 'is not', 'exception match', 'BAD') + +hasconst = [] +hasname = [] +hasjrel = [] +hasjabs = [] +haslocal = [] +hascompare = [] +hasfree = [] + +opmap = {} +opname = [''] * 256 +for op in range(256): opname[op] = '<%r>' % (op,) +del op + +def def_op(name, op): + opname[op] = name + opmap[name] = op + +def name_op(name, op): + def_op(name, op) + hasname.append(op) + +def jrel_op(name, op): + def_op(name, op) + hasjrel.append(op) + +def jabs_op(name, op): + def_op(name, op) + hasjabs.append(op) + +# Instruction opcodes for compiled code +# Blank lines correspond to available opcodes + +def_op('STOP_CODE', 0) # 0 +def_op('POP_TOP', 1) # 15 +def_op('ROT_TWO', 2) # 59 +def_op('ROT_THREE', 3) # 60 +def_op('DUP_TOP', 4) # 13 +def_op('ROT_FOUR', 5) # 49 + +def_op('NOP', 9) # 53 +def_op('UNARY_POSITIVE', 10) # 48 +def_op('UNARY_NEGATIVE', 11) # 54 +def_op('UNARY_NOT', 12) # 38 +def_op('UNARY_CONVERT', 13) # 25 + +def_op('UNARY_INVERT', 15) # 34 + +def_op('LIST_APPEND', 18) # 68 +def_op('BINARY_POWER', 19) # 28 +def_op('BINARY_MULTIPLY', 20) # 36 +def_op('BINARY_DIVIDE', 21) # 12 +def_op('BINARY_MODULO', 22) # 41 +def_op('BINARY_ADD', 23) # 52 +def_op('BINARY_SUBTRACT', 24) # 55 +def_op('BINARY_SUBSCR', 25) # 4 +def_op('BINARY_FLOOR_DIVIDE', 26) # 43 +def_op('BINARY_TRUE_DIVIDE', 27) # 5 +def_op('INPLACE_FLOOR_DIVIDE', 28) # 32 +def_op('INPLACE_TRUE_DIVIDE', 29) # 30 +def_op('SLICE+0', 30) # 16 +def_op('SLICE+1', 31) # 17 +def_op('SLICE+2', 32) # 18 +def_op('SLICE+3', 33) # 19 + +def_op('STORE_SLICE+0', 40) # 61 +def_op('STORE_SLICE+1', 41) # 62 +def_op('STORE_SLICE+2', 42) # 63 +def_op('STORE_SLICE+3', 43) # 64 + +def_op('DELETE_SLICE+0', 50) # 44 +def_op('DELETE_SLICE+1', 51) # 45 +def_op('DELETE_SLICE+2', 52) # 46 +def_op('DELETE_SLICE+3', 53) # 47 + +def_op('INPLACE_ADD', 55) # 6 +def_op('INPLACE_SUBTRACT', 56) # 29 +def_op('INPLACE_MULTIPLY', 57) # 8 +def_op('INPLACE_DIVIDE', 58) # 27 +def_op('INPLACE_MODULO', 59) # 3 +def_op('STORE_SUBSCR', 60) # 31 +def_op('DELETE_SUBSCR', 61) # 69 +def_op('BINARY_LSHIFT', 62) # 7 +def_op('BINARY_RSHIFT', 63) # 22 +def_op('BINARY_AND', 64) # 50 +def_op('BINARY_XOR', 65) # 21 +def_op('BINARY_OR', 66) # 2 +def_op('INPLACE_POWER', 67) # 57 +def_op('GET_ITER', 68) # 39 + +def_op('PRINT_EXPR', 70) # 20 +def_op('PRINT_ITEM', 71) # 9 +def_op('PRINT_NEWLINE', 72) # 14 +def_op('PRINT_ITEM_TO', 73) # 33 +def_op('PRINT_NEWLINE_TO', 74) # 35 +def_op('INPLACE_LSHIFT', 75) # 11 +def_op('INPLACE_RSHIFT', 76) # 58 +def_op('INPLACE_AND', 77) # 24 +def_op('INPLACE_XOR', 78) # 23 +def_op('INPLACE_OR', 79) # 10 +def_op('BREAK_LOOP', 80) # 40 +def_op('WITH_CLEANUP', 81) # 37 +def_op('LOAD_LOCALS', 82) # 51 +def_op('RETURN_VALUE', 83) # 66 +def_op('IMPORT_STAR', 84) # 56 +def_op('EXEC_STMT', 85) # 65 +def_op('YIELD_VALUE', 86) # 26 +def_op('POP_BLOCK', 87) # 1 +def_op('END_FINALLY', 88) # 67 +def_op('BUILD_CLASS', 89) # 42 + +HAVE_ARGUMENT = 90 # 70 # Opcodes from here have an argument: + +name_op('STORE_NAME', 90) # 95 # Index in name list +name_op('DELETE_NAME', 91) # 94 # "" +def_op('UNPACK_SEQUENCE', 92) # 93 # Number of tuple items +jrel_op('FOR_ITER', 93) # 81 + +name_op('STORE_ATTR', 95) # 84 # Index in name list +name_op('DELETE_ATTR', 96) # 87 # "" +name_op('STORE_GLOBAL', 97) # 105 # "" +name_op('DELETE_GLOBAL', 98) # 98 # "" +def_op('DUP_TOPX', 99) # 104 # number of items to duplicate +def_op('LOAD_CONST', 100) # 72 # Index in const list +hasconst.append(100) # 72 +name_op('LOAD_NAME', 101) # 79 # Index in name list +def_op('BUILD_TUPLE', 102) # 80 # Number of tuple items +def_op('BUILD_LIST', 103) # 107 # Number of list items +def_op('BUILD_MAP', 104) # 78 # Always zero for now +name_op('LOAD_ATTR', 105) # 86 # Index in name list +def_op('COMPARE_OP', 106) # 101 # Comparison operator +hascompare.append(106) # 101 +name_op('IMPORT_NAME', 107) # 88 # Index in name list +name_op('IMPORT_FROM', 108) # 89 # Index in name list + +jrel_op('JUMP_FORWARD', 110) # 73 # Number of bytes to skip +jabs_op('JUMP_IF_FALSE', 111) # 83 # "" +jabs_op('JUMP_IF_TRUE', 112) # 90 # "" +jabs_op('JUMP_ABSOLUTE', 113) # 103 # Target byte offset from beginning of code + +name_op('LOAD_GLOBAL', 116) # 70 # Index in name list + +jabs_op('CONTINUE_LOOP', 119) # 96 # Target address +jrel_op('SETUP_LOOP', 120) # 74 # Distance to target address +jrel_op('SETUP_EXCEPT', 121) # 75 # "" +jrel_op('SETUP_FINALLY', 122) # 106 # "" + +def_op('LOAD_FAST', 124) # 92 # Local variable number +haslocal.append(124) # 92 +def_op('STORE_FAST', 125) # 82 # Local variable number +haslocal.append(125) # 82 +def_op('DELETE_FAST', 126) # 71 # Local variable number +haslocal.append(126) # 71 + +def_op('RAISE_VARARGS', 130) # 91 # Number of raise arguments (1, 2, or 3) +def_op('CALL_FUNCTION', 131) # 102 # #args + (#kwargs << 8) +def_op('MAKE_FUNCTION', 132) # 76 # Number of args with default values +def_op('BUILD_SLICE', 133) # 77 # Number of items +def_op('MAKE_CLOSURE', 134) # 85 +def_op('LOAD_CLOSURE', 135) # 97 +hasfree.append(135) # 97 +def_op('LOAD_DEREF', 136) # 99 +hasfree.append(136) # 99 +def_op('STORE_DEREF', 137) # 100 +hasfree.append(137) # 100 + +def_op('CALL_FUNCTION_VAR', 140) # 111 # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_KW', 141) # 112 # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_VAR_KW', 142) # 113 # #args + (#kwargs << 8) +def_op('EXTENDED_ARG', 143) # 114 +EXTENDED_ARG = 143 # 114 + +del def_op, name_op, jrel_op, jabs_op diff --git a/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_26.py b/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_26.py new file mode 100755 index 00000000..99856f43 --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_26.py @@ -0,0 +1,186 @@ + +""" +opcode module - potentially shared between dis and other modules which +operate on bytecodes (e.g. peephole optimizers). +""" + +__all__ = ["cmp_op", "hasconst", "hasname", "hasjrel", "hasjabs", + "haslocal", "hascompare", "hasfree", "opname", "opmap", + "HAVE_ARGUMENT", "EXTENDED_ARG"] + +cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is', + 'is not', 'exception match', 'BAD') + +hasconst = [] +hasname = [] +hasjrel = [] +hasjabs = [] +haslocal = [] +hascompare = [] +hasfree = [] + +opmap = {} +opname = [''] * 256 +for op in range(256): opname[op] = '<%r>' % (op,) +del op + +def def_op(name, op): + opname[op] = name + opmap[name] = op + +def name_op(name, op): + def_op(name, op) + hasname.append(op) + +def jrel_op(name, op): + def_op(name, op) + hasjrel.append(op) + +def jabs_op(name, op): + def_op(name, op) + hasjabs.append(op) + +# Instruction opcodes for compiled code +# Blank lines correspond to available opcodes + +def_op('STOP_CODE', 0) +def_op('POP_TOP', 1) +def_op('ROT_TWO', 2) +def_op('ROT_THREE', 3) +def_op('DUP_TOP', 4) +def_op('ROT_FOUR', 5) + +def_op('NOP', 9) +def_op('UNARY_POSITIVE', 10) +def_op('UNARY_NEGATIVE', 11) +def_op('UNARY_NOT', 12) +def_op('UNARY_CONVERT', 13) + +def_op('UNARY_INVERT', 15) + +def_op('LIST_APPEND', 18) +def_op('BINARY_POWER', 19) +def_op('BINARY_MULTIPLY', 20) +def_op('BINARY_DIVIDE', 21) +def_op('BINARY_MODULO', 22) +def_op('BINARY_ADD', 23) +def_op('BINARY_SUBTRACT', 24) +def_op('BINARY_SUBSCR', 25) +def_op('BINARY_FLOOR_DIVIDE', 26) +def_op('BINARY_TRUE_DIVIDE', 27) +def_op('INPLACE_FLOOR_DIVIDE', 28) +def_op('INPLACE_TRUE_DIVIDE', 29) +def_op('SLICE+0', 30) +def_op('SLICE+1', 31) +def_op('SLICE+2', 32) +def_op('SLICE+3', 33) + +def_op('STORE_SLICE+0', 40) +def_op('STORE_SLICE+1', 41) +def_op('STORE_SLICE+2', 42) +def_op('STORE_SLICE+3', 43) + +def_op('DELETE_SLICE+0', 50) +def_op('DELETE_SLICE+1', 51) +def_op('DELETE_SLICE+2', 52) +def_op('DELETE_SLICE+3', 53) + +def_op('STORE_MAP', 54) +def_op('INPLACE_ADD', 55) +def_op('INPLACE_SUBTRACT', 56) +def_op('INPLACE_MULTIPLY', 57) +def_op('INPLACE_DIVIDE', 58) +def_op('INPLACE_MODULO', 59) +def_op('STORE_SUBSCR', 60) +def_op('DELETE_SUBSCR', 61) +def_op('BINARY_LSHIFT', 62) +def_op('BINARY_RSHIFT', 63) +def_op('BINARY_AND', 64) +def_op('BINARY_XOR', 65) +def_op('BINARY_OR', 66) +def_op('INPLACE_POWER', 67) +def_op('GET_ITER', 68) + +def_op('PRINT_EXPR', 70) +def_op('PRINT_ITEM', 71) +def_op('PRINT_NEWLINE', 72) +def_op('PRINT_ITEM_TO', 73) +def_op('PRINT_NEWLINE_TO', 74) +def_op('INPLACE_LSHIFT', 75) +def_op('INPLACE_RSHIFT', 76) +def_op('INPLACE_AND', 77) +def_op('INPLACE_XOR', 78) +def_op('INPLACE_OR', 79) +def_op('BREAK_LOOP', 80) +def_op('WITH_CLEANUP', 81) +def_op('LOAD_LOCALS', 82) +def_op('RETURN_VALUE', 83) +def_op('IMPORT_STAR', 84) +def_op('EXEC_STMT', 85) +def_op('YIELD_VALUE', 86) +def_op('POP_BLOCK', 87) +def_op('END_FINALLY', 88) +def_op('BUILD_CLASS', 89) + +HAVE_ARGUMENT = 90 # Opcodes from here have an argument: + +name_op('STORE_NAME', 90) # Index in name list +name_op('DELETE_NAME', 91) # "" +def_op('UNPACK_SEQUENCE', 92) # Number of tuple items +jrel_op('FOR_ITER', 93) + +name_op('STORE_ATTR', 95) # Index in name list +name_op('DELETE_ATTR', 96) # "" +name_op('STORE_GLOBAL', 97) # "" +name_op('DELETE_GLOBAL', 98) # "" +def_op('DUP_TOPX', 99) # number of items to duplicate +def_op('LOAD_CONST', 100) # Index in const list +hasconst.append(100) +name_op('LOAD_NAME', 101) # Index in name list +def_op('BUILD_TUPLE', 102) # Number of tuple items +def_op('BUILD_LIST', 103) # Number of list items +def_op('BUILD_MAP', 104) # Number of dict entries (upto 255) +name_op('LOAD_ATTR', 105) # Index in name list +def_op('COMPARE_OP', 106) # Comparison operator +hascompare.append(106) +name_op('IMPORT_NAME', 107) # Index in name list +name_op('IMPORT_FROM', 108) # Index in name list + +jrel_op('JUMP_FORWARD', 110) # Number of bytes to skip +jabs_op('JUMP_IF_FALSE', 111) # "" +jabs_op('JUMP_IF_TRUE', 112) # "" +jabs_op('JUMP_ABSOLUTE', 113) # Target byte offset from beginning of code + +name_op('LOAD_GLOBAL', 116) # Index in name list + +jabs_op('CONTINUE_LOOP', 119) # Target address +jrel_op('SETUP_LOOP', 120) # Distance to target address +jrel_op('SETUP_EXCEPT', 121) # "" +jrel_op('SETUP_FINALLY', 122) # "" + +def_op('LOAD_FAST', 124) # Local variable number +haslocal.append(124) +def_op('STORE_FAST', 125) # Local variable number +haslocal.append(125) +def_op('DELETE_FAST', 126) # Local variable number +haslocal.append(126) + +def_op('RAISE_VARARGS', 130) # Number of raise arguments (1, 2, or 3) +def_op('CALL_FUNCTION', 131) # #args + (#kwargs << 8) +def_op('MAKE_FUNCTION', 132) # Number of args with default values +def_op('BUILD_SLICE', 133) # Number of items +def_op('MAKE_CLOSURE', 134) +def_op('LOAD_CLOSURE', 135) +hasfree.append(135) +def_op('LOAD_DEREF', 136) +hasfree.append(136) +def_op('STORE_DEREF', 137) +hasfree.append(137) + +def_op('CALL_FUNCTION_VAR', 140) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_KW', 141) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_VAR_KW', 142) # #args + (#kwargs << 8) +def_op('EXTENDED_ARG', 143) +EXTENDED_ARG = 143 + +del def_op, name_op, jrel_op, jabs_op diff --git a/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_27.py b/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_27.py new file mode 100755 index 00000000..e403365b --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/opcode/opcode_27.py @@ -0,0 +1,192 @@ + +""" +opcode module - potentially shared between dis and other modules which +operate on bytecodes (e.g. peephole optimizers). +""" + +__all__ = ["cmp_op", "hasconst", "hasname", "hasjrel", "hasjabs", + "haslocal", "hascompare", "hasfree", "opname", "opmap", + "HAVE_ARGUMENT", "EXTENDED_ARG"] + +cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is', + 'is not', 'exception match', 'BAD') + +hasconst = [] +hasname = [] +hasjrel = [] +hasjabs = [] +haslocal = [] +hascompare = [] +hasfree = [] + +opmap = {} +opname = [''] * 256 +for op in range(256): opname[op] = '<%r>' % (op,) +del op + +def def_op(name, op): + opname[op] = name + opmap[name] = op + +def name_op(name, op): + def_op(name, op) + hasname.append(op) + +def jrel_op(name, op): + def_op(name, op) + hasjrel.append(op) + +def jabs_op(name, op): + def_op(name, op) + hasjabs.append(op) + +# Instruction opcodes for compiled code +# Blank lines correspond to available opcodes + +def_op('STOP_CODE', 0) +def_op('POP_TOP', 1) +def_op('ROT_TWO', 2) +def_op('ROT_THREE', 3) +def_op('DUP_TOP', 4) +def_op('ROT_FOUR', 5) + +def_op('NOP', 9) +def_op('UNARY_POSITIVE', 10) +def_op('UNARY_NEGATIVE', 11) +def_op('UNARY_NOT', 12) +def_op('UNARY_CONVERT', 13) + +def_op('UNARY_INVERT', 15) + +def_op('BINARY_POWER', 19) +def_op('BINARY_MULTIPLY', 20) +def_op('BINARY_DIVIDE', 21) +def_op('BINARY_MODULO', 22) +def_op('BINARY_ADD', 23) +def_op('BINARY_SUBTRACT', 24) +def_op('BINARY_SUBSCR', 25) +def_op('BINARY_FLOOR_DIVIDE', 26) +def_op('BINARY_TRUE_DIVIDE', 27) +def_op('INPLACE_FLOOR_DIVIDE', 28) +def_op('INPLACE_TRUE_DIVIDE', 29) +def_op('SLICE+0', 30) +def_op('SLICE+1', 31) +def_op('SLICE+2', 32) +def_op('SLICE+3', 33) + +def_op('STORE_SLICE+0', 40) +def_op('STORE_SLICE+1', 41) +def_op('STORE_SLICE+2', 42) +def_op('STORE_SLICE+3', 43) + +def_op('DELETE_SLICE+0', 50) +def_op('DELETE_SLICE+1', 51) +def_op('DELETE_SLICE+2', 52) +def_op('DELETE_SLICE+3', 53) + +def_op('STORE_MAP', 54) +def_op('INPLACE_ADD', 55) +def_op('INPLACE_SUBTRACT', 56) +def_op('INPLACE_MULTIPLY', 57) +def_op('INPLACE_DIVIDE', 58) +def_op('INPLACE_MODULO', 59) +def_op('STORE_SUBSCR', 60) +def_op('DELETE_SUBSCR', 61) +def_op('BINARY_LSHIFT', 62) +def_op('BINARY_RSHIFT', 63) +def_op('BINARY_AND', 64) +def_op('BINARY_XOR', 65) +def_op('BINARY_OR', 66) +def_op('INPLACE_POWER', 67) +def_op('GET_ITER', 68) + +def_op('PRINT_EXPR', 70) +def_op('PRINT_ITEM', 71) +def_op('PRINT_NEWLINE', 72) +def_op('PRINT_ITEM_TO', 73) +def_op('PRINT_NEWLINE_TO', 74) +def_op('INPLACE_LSHIFT', 75) +def_op('INPLACE_RSHIFT', 76) +def_op('INPLACE_AND', 77) +def_op('INPLACE_XOR', 78) +def_op('INPLACE_OR', 79) +def_op('BREAK_LOOP', 80) +def_op('WITH_CLEANUP', 81) +def_op('LOAD_LOCALS', 82) +def_op('RETURN_VALUE', 83) +def_op('IMPORT_STAR', 84) +def_op('EXEC_STMT', 85) +def_op('YIELD_VALUE', 86) +def_op('POP_BLOCK', 87) +def_op('END_FINALLY', 88) +def_op('BUILD_CLASS', 89) + +HAVE_ARGUMENT = 90 # Opcodes from here have an argument: + +name_op('STORE_NAME', 90) # Index in name list +name_op('DELETE_NAME', 91) # "" +def_op('UNPACK_SEQUENCE', 92) # Number of tuple items +jrel_op('FOR_ITER', 93) +def_op('LIST_APPEND', 94) +name_op('STORE_ATTR', 95) # Index in name list +name_op('DELETE_ATTR', 96) # "" +name_op('STORE_GLOBAL', 97) # "" +name_op('DELETE_GLOBAL', 98) # "" +def_op('DUP_TOPX', 99) # number of items to duplicate +def_op('LOAD_CONST', 100) # Index in const list +hasconst.append(100) +name_op('LOAD_NAME', 101) # Index in name list +def_op('BUILD_TUPLE', 102) # Number of tuple items +def_op('BUILD_LIST', 103) # Number of list items +def_op('BUILD_SET', 104) # Number of set items +def_op('BUILD_MAP', 105) # Number of dict entries (upto 255) +name_op('LOAD_ATTR', 106) # Index in name list +def_op('COMPARE_OP', 107) # Comparison operator +hascompare.append(107) +name_op('IMPORT_NAME', 108) # Index in name list +name_op('IMPORT_FROM', 109) # Index in name list +jrel_op('JUMP_FORWARD', 110) # Number of bytes to skip +jabs_op('JUMP_IF_FALSE_OR_POP', 111) # Target byte offset from beginning of code +jabs_op('JUMP_IF_TRUE_OR_POP', 112) # "" +jabs_op('JUMP_ABSOLUTE', 113) # "" +jabs_op('POP_JUMP_IF_FALSE', 114) # "" +jabs_op('POP_JUMP_IF_TRUE', 115) # "" + +name_op('LOAD_GLOBAL', 116) # Index in name list + +jabs_op('CONTINUE_LOOP', 119) # Target address +jrel_op('SETUP_LOOP', 120) # Distance to target address +jrel_op('SETUP_EXCEPT', 121) # "" +jrel_op('SETUP_FINALLY', 122) # "" + +def_op('LOAD_FAST', 124) # Local variable number +haslocal.append(124) +def_op('STORE_FAST', 125) # Local variable number +haslocal.append(125) +def_op('DELETE_FAST', 126) # Local variable number +haslocal.append(126) + +def_op('RAISE_VARARGS', 130) # Number of raise arguments (1, 2, or 3) +def_op('CALL_FUNCTION', 131) # #args + (#kwargs << 8) +def_op('MAKE_FUNCTION', 132) # Number of args with default values +def_op('BUILD_SLICE', 133) # Number of items +def_op('MAKE_CLOSURE', 134) +def_op('LOAD_CLOSURE', 135) +hasfree.append(135) +def_op('LOAD_DEREF', 136) +hasfree.append(136) +def_op('STORE_DEREF', 137) +hasfree.append(137) + +def_op('CALL_FUNCTION_VAR', 140) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_KW', 141) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_VAR_KW', 142) # #args + (#kwargs << 8) + +jrel_op('SETUP_WITH', 143) + +def_op('EXTENDED_ARG', 145) +EXTENDED_ARG = 145 +def_op('SET_ADD', 146) +def_op('MAP_ADD', 147) + +del def_op, name_op, jrel_op, jabs_op diff --git a/build/lib.linux-i686-2.7/uncompyle2/spark.py b/build/lib.linux-i686-2.7/uncompyle2/spark.py new file mode 100755 index 00000000..ac630f71 --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/spark.py @@ -0,0 +1,700 @@ +# Copyright (c) 1998-2002 John Aycock +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +__version__ = 'SPARK-0.7 (pre-alpha-7) uncompyle trim' + +def _namelist(instance): + namelist, namedict, classlist = [], {}, [instance.__class__] + for c in classlist: + for b in c.__bases__: + classlist.append(b) + for name in c.__dict__.keys(): + if not namedict.has_key(name): + namelist.append(name) + namedict[name] = 1 + return namelist + +# +# Extracted from GenericParser and made global so that [un]picking works. +# +class _State: + def __init__(self, stateno, items): + self.T, self.complete, self.items = [], [], items + self.stateno = stateno + +class GenericParser: + # + # An Earley parser, as per J. Earley, "An Efficient Context-Free + # Parsing Algorithm", CACM 13(2), pp. 94-102. Also J. C. Earley, + # "An Efficient Context-Free Parsing Algorithm", Ph.D. thesis, + # Carnegie-Mellon University, August 1968. New formulation of + # the parser according to J. Aycock, "Practical Earley Parsing + # and the SPARK Toolkit", Ph.D. thesis, University of Victoria, + # 2001, and J. Aycock and R. N. Horspool, "Practical Earley + # Parsing", unpublished paper, 2001. + # + + def __init__(self, start): + self.rules = {} + self.rule2func = {} + self.rule2name = {} + self.collectRules() + self.augment(start) + self.ruleschanged = 1 + + _NULLABLE = '\e_' + _START = 'START' + _BOF = '|-' + + # + # When pickling, take the time to generate the full state machine; + # some information is then extraneous, too. Unfortunately we + # can't save the rule2func map. + # + def __getstate__(self): + if self.ruleschanged: + # + # XXX - duplicated from parse() + # + self.computeNull() + self.newrules = {} + self.new2old = {} + self.makeNewRules() + self.ruleschanged = 0 + self.edges, self.cores = {}, {} + self.states = { 0: self.makeState0() } + self.makeState(0, self._BOF) + # + # XXX - should find a better way to do this.. + # + changes = 1 + while changes: + changes = 0 + for k, v in self.edges.items(): + if v is None: + state, sym = k + if self.states.has_key(state): + self.goto(state, sym) + changes = 1 + rv = self.__dict__.copy() + for s in self.states.values(): + del s.items + del rv['rule2func'] + del rv['nullable'] + del rv['cores'] + return rv + + def __setstate__(self, D): + self.rules = {} + self.rule2func = {} + self.rule2name = {} + self.collectRules() + start = D['rules'][self._START][0][1][1] # Blech. + self.augment(start) + D['rule2func'] = self.rule2func + D['makeSet'] = self.makeSet_fast + self.__dict__ = D + + # + # A hook for GenericASTBuilder and GenericASTMatcher. Mess + # thee not with this; nor shall thee toucheth the _preprocess + # argument to addRule. + # + def preprocess(self, rule, func): return rule, func + + def addRule(self, doc, func, _preprocess=1): + fn = func + rules = doc.split() + + index = [] + for i in xrange(len(rules)): + if rules[i] == '::=': + index.append(i-1) + index.append(len(rules)) + + for i in xrange(len(index)-1): + lhs = rules[index[i]] + rhs = rules[index[i]+2:index[i+1]] + rule = (lhs, tuple(rhs)) + + if _preprocess: + rule, fn = self.preprocess(rule, func) + + if self.rules.has_key(lhs): + self.rules[lhs].append(rule) + else: + self.rules[lhs] = [ rule ] + self.rule2func[rule] = fn + self.rule2name[rule] = func.__name__[2:] + self.ruleschanged = 1 + + def collectRules(self): + for name in _namelist(self): + if name[:2] == 'p_': + func = getattr(self, name) + doc = func.__doc__ + self.addRule(doc, func) + + def augment(self, start): + rule = '%s ::= %s %s' % (self._START, self._BOF, start) + self.addRule(rule, lambda args: args[1], 0) + + def computeNull(self): + self.nullable = {} + tbd = [] + + for rulelist in self.rules.values(): + lhs = rulelist[0][0] + self.nullable[lhs] = 0 + for rule in rulelist: + rhs = rule[1] + if len(rhs) == 0: + self.nullable[lhs] = 1 + continue + # + # We only need to consider rules which + # consist entirely of nonterminal symbols. + # This should be a savings on typical + # grammars. + # + for sym in rhs: + if not self.rules.has_key(sym): + break + else: + tbd.append(rule) + changes = 1 + while changes: + changes = 0 + for lhs, rhs in tbd: + if self.nullable[lhs]: + continue + for sym in rhs: + if not self.nullable[sym]: + break + else: + self.nullable[lhs] = 1 + changes = 1 + + def makeState0(self): + s0 = _State(0, []) + for rule in self.newrules[self._START]: + s0.items.append((rule, 0)) + return s0 + + def finalState(self, tokens): + # + # Yuck. + # + if len(self.newrules[self._START]) == 2 and len(tokens) == 0: + return 1 + start = self.rules[self._START][0][1][1] + return self.goto(1, start) + + def makeNewRules(self): + worklist = [] + for rulelist in self.rules.values(): + for rule in rulelist: + worklist.append((rule, 0, 1, rule)) + + for rule, i, candidate, oldrule in worklist: + lhs, rhs = rule + n = len(rhs) + while i < n: + sym = rhs[i] + if not self.rules.has_key(sym) or \ + not self.nullable[sym]: + candidate = 0 + i = i + 1 + continue + + newrhs = list(rhs) + newrhs[i] = self._NULLABLE+sym + newrule = (lhs, tuple(newrhs)) + worklist.append((newrule, i+1, + candidate, oldrule)) + candidate = 0 + i = i + 1 + else: + if candidate: + lhs = self._NULLABLE+lhs + rule = (lhs, rhs) + if self.newrules.has_key(lhs): + self.newrules[lhs].append(rule) + else: + self.newrules[lhs] = [ rule ] + self.new2old[rule] = oldrule + + def typestring(self, token): + return None + + def error(self, token): + print "Syntax error at or near `%s' token" % token + raise SystemExit + + def parse(self, tokens): + sets = [ [(1,0), (2,0)] ] + self.links = {} + + if self.ruleschanged: + self.computeNull() + self.newrules = {} + self.new2old = {} + self.makeNewRules() + self.ruleschanged = 0 + self.edges, self.cores = {}, {} + self.states = { 0: self.makeState0() } + self.makeState(0, self._BOF) + + for i in xrange(len(tokens)): + sets.append([]) + + if sets[i] == []: + break + self.makeSet(tokens[i], sets, i) + else: + sets.append([]) + self.makeSet(None, sets, len(tokens)) + + finalitem = (self.finalState(tokens), 0) + if finalitem not in sets[-2]: + if len(tokens) > 0: + self.error(tokens[i-1]) + else: + self.error(None) + + return self.buildTree(self._START, finalitem, + tokens, len(sets)-2) + + def isnullable(self, sym): + # + # For symbols in G_e only. If we weren't supporting 1.5, + # could just use sym.startswith(). + # + return self._NULLABLE == sym[0:len(self._NULLABLE)] + + def skip(self, (lhs, rhs), pos=0): + n = len(rhs) + while pos < n: + if not self.isnullable(rhs[pos]): + break + pos = pos + 1 + return pos + + def makeState(self, state, sym): + assert sym is not None + # + # Compute \epsilon-kernel state's core and see if + # it exists already. + # + kitems = [] + for rule, pos in self.states[state].items: + lhs, rhs = rule + if rhs[pos:pos+1] == (sym,): + kitems.append((rule, self.skip(rule, pos+1))) + + tcore = tuple(sorted(kitems)) + if self.cores.has_key(tcore): + return self.cores[tcore] + # + # Nope, doesn't exist. Compute it and the associated + # \epsilon-nonkernel state together; we'll need it right away. + # + k = self.cores[tcore] = len(self.states) + K, NK = _State(k, kitems), _State(k+1, []) + self.states[k] = K + predicted = {} + + edges = self.edges + rules = self.newrules + for X in K, NK: + worklist = X.items + for item in worklist: + rule, pos = item + lhs, rhs = rule + if pos == len(rhs): + X.complete.append(rule) + continue + + nextSym = rhs[pos] + key = (X.stateno, nextSym) + if not rules.has_key(nextSym): + if not edges.has_key(key): + edges[key] = None + X.T.append(nextSym) + else: + edges[key] = None + if not predicted.has_key(nextSym): + predicted[nextSym] = 1 + for prule in rules[nextSym]: + ppos = self.skip(prule) + new = (prule, ppos) + NK.items.append(new) + # + # Problem: we know K needs generating, but we + # don't yet know about NK. Can't commit anything + # regarding NK to self.edges until we're sure. Should + # we delay committing on both K and NK to avoid this + # hacky code? This creates other problems.. + # + if X is K: + edges = {} + + if NK.items == []: + return k + + # + # Check for \epsilon-nonkernel's core. Unfortunately we + # need to know the entire set of predicted nonterminals + # to do this without accidentally duplicating states. + # + tcore = tuple(sorted(predicted.keys())) + if self.cores.has_key(tcore): + self.edges[(k, None)] = self.cores[tcore] + return k + + nk = self.cores[tcore] = self.edges[(k, None)] = NK.stateno + self.edges.update(edges) + self.states[nk] = NK + return k + + def goto(self, state, sym): + key = (state, sym) + if not self.edges.has_key(key): + # + # No transitions from state on sym. + # + return None + + rv = self.edges[key] + if rv is None: + # + # Target state isn't generated yet. Remedy this. + # + rv = self.makeState(state, sym) + self.edges[key] = rv + return rv + + def gotoT(self, state, t): + return [self.goto(state, t)] + + def gotoST(self, state, st): + rv = [] + for t in self.states[state].T: + if st == t: + rv.append(self.goto(state, t)) + return rv + + def add(self, set, item, i=None, predecessor=None, causal=None): + if predecessor is None: + if item not in set: + set.append(item) + else: + key = (item, i) + if item not in set: + self.links[key] = [] + set.append(item) + self.links[key].append((predecessor, causal)) + + def makeSet(self, token, sets, i): + cur, next = sets[i], sets[i+1] + + ttype = token is not None and self.typestring(token) or None + if ttype is not None: + fn, arg = self.gotoT, ttype + else: + fn, arg = self.gotoST, token + + for item in cur: + ptr = (item, i) + state, parent = item + add = fn(state, arg) + for k in add: + if k is not None: + self.add(next, (k, parent), i+1, ptr) + nk = self.goto(k, None) + if nk is not None: + self.add(next, (nk, i+1)) + + if parent == i: + continue + + for rule in self.states[state].complete: + lhs, rhs = rule + for pitem in sets[parent]: + pstate, pparent = pitem + k = self.goto(pstate, lhs) + if k is not None: + why = (item, i, rule) + pptr = (pitem, parent) + self.add(cur, (k, pparent), + i, pptr, why) + nk = self.goto(k, None) + if nk is not None: + self.add(cur, (nk, i)) + + def makeSet_fast(self, token, sets, i): + # + # Call *only* when the entire state machine has been built! + # It relies on self.edges being filled in completely, and + # then duplicates and inlines code to boost speed at the + # cost of extreme ugliness. + # + cur, next = sets[i], sets[i+1] + ttype = token is not None and self.typestring(token) or None + + for item in cur: + ptr = (item, i) + state, parent = item + if ttype is not None: + k = self.edges.get((state, ttype), None) + if k is not None: + #self.add(next, (k, parent), i+1, ptr) + #INLINED --v + new = (k, parent) + key = (new, i+1) + if new not in next: + self.links[key] = [] + next.append(new) + self.links[key].append((ptr, None)) + #INLINED --^ + #nk = self.goto(k, None) + nk = self.edges.get((k, None), None) + if nk is not None: + #self.add(next, (nk, i+1)) + #INLINED --v + new = (nk, i+1) + if new not in next: + next.append(new) + #INLINED --^ + else: + add = self.gotoST(state, token) + for k in add: + if k is not None: + self.add(next, (k, parent), i+1, ptr) + #nk = self.goto(k, None) + nk = self.edges.get((k, None), None) + if nk is not None: + self.add(next, (nk, i+1)) + + if parent == i: + continue + + for rule in self.states[state].complete: + lhs, rhs = rule + for pitem in sets[parent]: + pstate, pparent = pitem + #k = self.goto(pstate, lhs) + k = self.edges.get((pstate, lhs), None) + if k is not None: + why = (item, i, rule) + pptr = (pitem, parent) + #self.add(cur, (k, pparent), + # i, pptr, why) + #INLINED --v + new = (k, pparent) + key = (new, i) + if new not in cur: + self.links[key] = [] + cur.append(new) + self.links[key].append((pptr, why)) + #INLINED --^ + #nk = self.goto(k, None) + nk = self.edges.get((k, None), None) + if nk is not None: + #self.add(cur, (nk, i)) + #INLINED --v + new = (nk, i) + if new not in cur: + cur.append(new) + #INLINED --^ + + def predecessor(self, key, causal): + for p, c in self.links[key]: + if c == causal: + return p + assert 0 + + def causal(self, key): + links = self.links[key] + if len(links) == 1: + return links[0][1] + choices = [] + rule2cause = {} + for p, c in links: + rule = c[2] + choices.append(rule) + rule2cause[rule] = c + return rule2cause[self.ambiguity(choices)] + + def deriveEpsilon(self, nt): + if len(self.newrules[nt]) > 1: + rule = self.ambiguity(self.newrules[nt]) + else: + rule = self.newrules[nt][0] + #print rule + + rhs = rule[1] + attr = [None] * len(rhs) + + for i in xrange(len(rhs)-1, -1, -1): + attr[i] = self.deriveEpsilon(rhs[i]) + return self.rule2func[self.new2old[rule]](attr) + + def buildTree(self, nt, item, tokens, k): + state, parent = item + + choices = [] + for rule in self.states[state].complete: + if rule[0] == nt: + choices.append(rule) + rule = choices[0] + if len(choices) > 1: + rule = self.ambiguity(choices) + #print rule + + rhs = rule[1] + attr = [None] * len(rhs) + + for i in xrange(len(rhs)-1, -1, -1): + sym = rhs[i] + if not self.newrules.has_key(sym): + if sym != self._BOF: + attr[i] = tokens[k-1] + key = (item, k) + item, k = self.predecessor(key, None) + #elif self.isnullable(sym): + elif self._NULLABLE == sym[0:len(self._NULLABLE)]: + attr[i] = self.deriveEpsilon(sym) + else: + key = (item, k) + why = self.causal(key) + attr[i] = self.buildTree(sym, why[0], + tokens, why[1]) + item, k = self.predecessor(key, why) + return self.rule2func[self.new2old[rule]](attr) + + def ambiguity(self, rules): + # + # XXX - problem here and in collectRules() if the same rule + # appears in >1 method. Also undefined results if rules + # causing the ambiguity appear in the same method. + # + + sortlist = [] + name2index = {} + for i in xrange(len(rules)): + lhs, rhs = rule = rules[i] + name = self.rule2name[self.new2old[rule]] + sortlist.append((len(rhs), name)) + name2index[name] = i + sortlist.sort() + list = map(lambda (a,b): b, sortlist) + return rules[name2index[self.resolve(list)]] + + def resolve(self, list): + # + # Resolve ambiguity in favor of the shortest RHS. + # Since we walk the tree from the top down, this + # should effectively resolve in favor of a "shift". + # + return list[0] + +# +# GenericASTBuilder automagically constructs a concrete/abstract syntax tree +# for a given input. The extra argument is a class (not an instance!) +# which supports the "__setslice__" and "__len__" methods. +# +# XXX - silently overrides any user code in methods. +# + +class GenericASTBuilder(GenericParser): + def __init__(self, AST, start): + GenericParser.__init__(self, start) + self.AST = AST + + def preprocess(self, rule, func): + rebind = lambda lhs, self=self: \ + lambda args, lhs=lhs, self=self: \ + self.buildASTNode(args, lhs) + lhs, rhs = rule + return rule, rebind(lhs) + + def buildASTNode(self, args, lhs): + children = [] + for arg in args: + if isinstance(arg, self.AST): + children.append(arg) + else: + children.append(arg) + return self.nonterminal(lhs, children) + + def nonterminal(self, type, args): + rv = self.AST(type) + rv[:len(args)] = args + return rv + +# +# GenericASTTraversal is a Visitor pattern according to Design Patterns. For +# each node it attempts to invoke the method n_, falling +# back onto the default() method if the n_* can't be found. The preorder +# traversal also looks for an exit hook named n__exit (no default +# routine is called if it's not found). To prematurely halt traversal +# of a subtree, call the prune() method -- this only makes sense for a +# preorder traversal. Node type is determined via the typestring() method. +# + +class GenericASTTraversalPruningException: + pass + +class GenericASTTraversal: + def __init__(self, ast): + self.ast = ast + + def typestring(self, node): + return node.type + + def prune(self): + raise GenericASTTraversalPruningException + + def preorder(self, node=None): + if node is None: + node = self.ast + + try: + name = 'n_' + self.typestring(node) + if hasattr(self, name): + func = getattr(self, name) + func(node) + else: + self.default(node) + except GenericASTTraversalPruningException: + return + + for kid in node: + self.preorder(kid) + + name = name + '_exit' + if hasattr(self, name): + func = getattr(self, name) + func(node) + + def default(self, node): + pass diff --git a/build/lib.linux-i686-2.7/uncompyle2/verify.py b/build/lib.linux-i686-2.7/uncompyle2/verify.py new file mode 100755 index 00000000..44bef997 --- /dev/null +++ b/build/lib.linux-i686-2.7/uncompyle2/verify.py @@ -0,0 +1,335 @@ +# +# (C) Copyright 2000-2002 by hartmut Goebel +# +# byte-code verifier for uncompyle +# + +import types +import operator +import dis +import uncompyle2, Scanner + +BIN_OP_FUNCS = { +'BINARY_POWER': operator.pow, +'BINARY_MULTIPLY': operator.mul, +'BINARY_DIVIDE': operator.div, +'BINARY_FLOOR_DIVIDE': operator.floordiv, +'BINARY_TRUE_DIVIDE': operator.truediv, +'BINARY_MODULO' : operator.mod, +'BINARY_ADD': operator.add, +'BINARY_SUBRACT': operator.sub, +'BINARY_LSHIFT': operator.lshift, +'BINARY_RSHIFT': operator.rshift, +'BINARY_AND': operator.and_, +'BINARY_XOR': operator.xor, +'BINARY_OR': operator.or_, +} + +JUMP_OPs = None + +#--- exceptions --- + +class VerifyCmpError(Exception): + pass + +class CmpErrorConsts(VerifyCmpError): + """Exception to be raised when consts differ.""" + def __init__(self, name, index): + self.name = name + self.index = index + + def __str__(self): + return 'Compare Error within Consts of %s at index %i' % \ + (repr(self.name), self.index) + +class CmpErrorConstsType(VerifyCmpError): + """Exception to be raised when consts differ.""" + def __init__(self, name, index): + self.name = name + self.index = index + + def __str__(self): + return 'Consts type differ in %s at index %i' % \ + (repr(self.name), self.index) + +class CmpErrorConstsLen(VerifyCmpError): + """Exception to be raised when length of co_consts differs.""" + def __init__(self, name, consts1, consts2): + self.name = name + self.consts = (consts1, consts2) + + def __str__(self): + return 'Consts length differs in %s:\n\n%i:\t%s\n\n%i:\t%s\n\n' % \ + (repr(self.name), + len(self.consts[0]), `self.consts[0]`, + len(self.consts[1]), `self.consts[1]`) + +class CmpErrorCode(VerifyCmpError): + """Exception to be raised when code differs.""" + def __init__(self, name, index, token1, token2, tokens1, tokens2): + self.name = name + self.index = index + self.token1 = token1 + self.token2 = token2 + self.tokens = [tokens1, tokens2] + + def __str__(self): + s = reduce(lambda s,t: "%s%-37s\t%-37s\n" % (s, t[0], t[1]), + map(lambda a,b: (a,b), + self.tokens[0], + self.tokens[1]), + 'Code differs in %s\n' % str(self.name)) + return ('Code differs in %s at offset %s [%s] != [%s]\n\n' % \ + (repr(self.name), self.index, + repr(self.token1), repr(self.token2))) + s + +class CmpErrorCodeLen(VerifyCmpError): + """Exception to be raised when code length differs.""" + def __init__(self, name, tokens1, tokens2): + self.name = name + self.tokens = [tokens1, tokens2] + + def __str__(self): + return reduce(lambda s,t: "%s%-37s\t%-37s\n" % (s, t[0], t[1]), + map(lambda a,b: (a,b), + self.tokens[0], + self.tokens[1]), + 'Code len differs in %s\n' % str(self.name)) + +class CmpErrorMember(VerifyCmpError): + """Exception to be raised when other members differ.""" + def __init__(self, name, member, data1, data2): + self.name = name + self.member = member + self.data = (data1, data2) + + def __str__(self): + return 'Member %s differs in %s:\n\t%s\n\t%s\n' % \ + (repr(self.member), repr(self.name), + repr(self.data[0]), repr(self.data[1])) + +#--- compare --- + +# these members are ignored +__IGNORE_CODE_MEMBERS__ = ['co_filename', 'co_firstlineno', 'co_lnotab', 'co_stacksize', 'co_names'] + +def cmp_code_objects(version, code_obj1, code_obj2, name=''): + """ + Compare two code-objects. + + This is the main part of this module. + """ + #print code_obj1, type(code_obj2) + assert type(code_obj1) == types.CodeType + assert type(code_obj2) == types.CodeType + #print dir(code_obj1) + if isinstance(code_obj1, object): + # new style classes (Python 2.2) + # assume _both_ code objects to be new stle classes + assert dir(code_obj1) == dir(code_obj2) + else: + # old style classes + assert dir(code_obj1) == code_obj1.__members__ + assert dir(code_obj2) == code_obj2.__members__ + assert code_obj1.__members__ == code_obj2.__members__ + + if name == '__main__': + name = code_obj1.co_name + else: + name = '%s.%s' % (name, code_obj1.co_name) + if name == '.?': name = '__main__' + + if isinstance(code_obj1, object) and cmp(code_obj1, code_obj2): + # use the new style code-classes' __cmp__ method, which + # should be faster and more sophisticated + # if this compare fails, we use the old routine to + # find out, what exactly is nor equal + # if this compare succeds, simply return + #return + pass + + if isinstance(code_obj1, object): + members = filter(lambda x: x.startswith('co_'), dir(code_obj1)) + else: + members = dir(code_obj1); + members.sort(); #members.reverse() + + tokens1 = None + for member in members: + if member in __IGNORE_CODE_MEMBERS__: + pass + elif member == 'co_code': + scanner = Scanner.getscanner(version) + scanner.setShowAsm( showasm=0 ) + global JUMP_OPs + JUMP_OPs = scanner.JUMP_OPs + ['JUMP_BACK'] + + # use changed Token class + # we (re)set this here to save exception handling, + # which would get 'unubersichtlich' + scanner.setTokenClass(Token) + try: + # disassemble both code-objects + tokens1,customize = scanner.disassemble(code_obj1) + del customize # save memory + tokens2,customize = scanner.disassemble(code_obj2) + del customize # save memory + finally: + scanner.resetTokenClass() # restore Token class + + targets1 = dis.findlabels(code_obj1.co_code) + tokens1 = [t for t in tokens1 if t.type != 'COME_FROM'] + tokens2 = [t for t in tokens2 if t.type != 'COME_FROM'] + + i1 = 0; i2 = 0 + offset_map = {}; check_jumps = {} + while i1 < len(tokens1): + if i2 >= len(tokens2): + if len(tokens1) == len(tokens2) + 2 \ + and tokens1[-1].type == 'RETURN_VALUE' \ + and tokens1[-2].type == 'LOAD_CONST' \ + and tokens1[-2].pattr == None \ + and tokens1[-3].type == 'RETURN_VALUE': + break + else: + raise CmpErrorCodeLen(name, tokens1, tokens2) + + offset_map[tokens1[i1].offset] = tokens2[i2].offset + + for idx1, idx2, offset2 in check_jumps.get(tokens1[i1].offset, []): + if offset2 != tokens2[i2].offset: + raise CmpErrorCode(name, tokens1[idx1].offset, tokens1[idx1], + tokens2[idx2], tokens1, tokens2) + + if tokens1[i1] != tokens2[i2]: + if tokens1[i1].type == 'LOAD_CONST' == tokens2[i2].type: + i = 1 + while tokens1[i1+i].type == 'LOAD_CONST': + i += 1 + if tokens1[i1+i].type.startswith(('BUILD_TUPLE', 'BUILD_LIST')) \ + and i == int(tokens1[i1+i].type.split('_')[-1]): + t = tuple([ elem.pattr for elem in tokens1[i1:i1+i] ]) + if t != tokens2[i2].pattr: + raise CmpErrorCode(name, tokens1[i1].offset, tokens1[i1], + tokens2[i2], tokens1, tokens2) + i1 += i + 1 + i2 += 1 + continue + elif i == 2 and tokens1[i1+i].type == 'ROT_TWO' and tokens2[i2+1].type == 'UNPACK_SEQUENCE_2': + i1 += 3 + i2 += 2 + continue + elif i == 2 and tokens1[i1+i].type in BIN_OP_FUNCS: + f = BIN_OP_FUNCS[tokens1[i1+i].type] + if f(tokens1[i1].pattr, tokens1[i1+1].pattr) == tokens2[i2].pattr: + i1 += 3 + i2 += 1 + continue + elif tokens1[i1].type == 'UNARY_NOT': + if tokens2[i2].type == 'POP_JUMP_IF_TRUE': + if tokens1[i1+1].type == 'POP_JUMP_IF_FALSE': + i1 += 2 + i2 += 1 + continue + elif tokens2[i2].type == 'POP_JUMP_IF_FALSE': + if tokens1[i1+1].type == 'POP_JUMP_IF_TRUE': + i1 += 2 + i2 += 1 + continue + elif tokens1[i1].type in ('JUMP_FORWARD', 'JUMP_BACK') \ + and tokens1[i1-1].type == 'RETURN_VALUE' \ + and tokens2[i2-1].type in ('RETURN_VALUE', 'RETURN_END_IF') \ + and int(tokens1[i1].offset) not in targets1: + i1 += 1 + continue + elif tokens1[i1].type == 'JUMP_FORWARD' and tokens2[i2].type == 'JUMP_BACK' \ + and tokens1[i1+1].type == 'JUMP_BACK' and tokens2[i2+1].type == 'JUMP_BACK' \ + and int(tokens1[i1].pattr) == int(tokens1[i1].offset) + 3: + if int(tokens1[i1].pattr) == int(tokens1[i1+1].offset): + i1 += 2 + i2 += 2 + continue + + raise CmpErrorCode(name, tokens1[i1].offset, tokens1[i1], + tokens2[i2], tokens1, tokens2) + elif tokens1[i1].type in JUMP_OPs and tokens1[i1].pattr != tokens2[i2].pattr: + dest1 = int(tokens1[i1].pattr) + dest2 = int(tokens2[i2].pattr) + if tokens1[i1].type == 'JUMP_BACK': + if offset_map[dest1] != dest2: + raise CmpErrorCode(name, tokens1[i1].offset, tokens1[i1], + tokens2[i2], tokens1, tokens2) + else: + #import pdb; pdb.set_trace() + if dest1 in check_jumps: + check_jumps[dest1].append((i1,i2,dest2)) + else: + check_jumps[dest1] = [(i1,i2,dest2)] + + i1 += 1 + i2 += 1 + del tokens1, tokens2 # save memory + elif member == 'co_consts': + # partial optimization can make the co_consts look different, + # so we'll just compare the code consts + codes1 = ( c for c in code_obj1.co_consts if type(c) == types.CodeType ) + codes2 = ( c for c in code_obj2.co_consts if type(c) == types.CodeType ) + + for c1, c2 in zip(codes1, codes2): + cmp_code_objects(version, c1, c2, name=name) + else: + # all other members must be equal + if getattr(code_obj1, member) != getattr(code_obj2, member): + raise CmpErrorMember(name, member, + getattr(code_obj1,member), + getattr(code_obj2,member)) + +class Token(Scanner.Token): + """Token class with changed semantics for 'cmp()'.""" + + def __cmp__(self, o): + t = self.type # shortcut + loads = ('LOAD_NAME', 'LOAD_GLOBAL', 'LOAD_CONST') + if t in loads and o.type in loads: + if self.pattr == 'None' and o.pattr == None: + return 0 + if t == 'BUILD_TUPLE_0' and o.type == 'LOAD_CONST' and o.pattr == (): + return 0 + if t == 'COME_FROM' == o.type: + return 0 + if t == 'PRINT_ITEM_CONT' and o.type == 'PRINT_ITEM': + return 0 + if t == 'RETURN_VALUE' and o.type == 'RETURN_END_IF': + return 0 + if t == 'JUMP_IF_FALSE_OR_POP' and o.type == 'POP_JUMP_IF_FALSE': + return 0 + if t in JUMP_OPs: + # ignore offset + return cmp(t, o.type) + return cmp(t, o.type) or cmp(self.pattr, o.pattr) + + def __repr__(self): + return '%s %s (%s)' % (str(self.type), str(self.attr), + repr(self.pattr)) + + def __str__(self): + return '%s\t%-17s %r' % (self.offset, self.type, self.pattr) + +def compare_code_with_srcfile(pyc_filename, src_filename): + """Compare a .pyc with a source code file.""" + version, code_obj1 = uncompyle2._load_module(pyc_filename) + code_obj2 = uncompyle2._load_file(src_filename) + cmp_code_objects(version, code_obj1, code_obj2) + +def compare_files(pyc_filename1, pyc_filename2): + """Compare two .pyc files.""" + version, code_obj1 = uncompyle2._load_module(pyc_filename1) + version, code_obj2 = uncompyle2._load_module(pyc_filename2) + cmp_code_objects(version, code_obj1, code_obj2) + +if __name__ == '__main__': + t1 = Token('LOAD_CONST', None, 'code_object _expandLang', 52) + t2 = Token('LOAD_CONST', -421, 'code_object _expandLang', 55) + print `t1` + print `t2` + print cmp(t1, t2), cmp(t1.type, t2.type), cmp(t1.attr, t2.attr) diff --git a/build/scripts-2.7/uncompyle2 b/build/scripts-2.7/uncompyle2 new file mode 100755 index 00000000..4cf77d06 --- /dev/null +++ b/build/scripts-2.7/uncompyle2 @@ -0,0 +1,187 @@ +#!/usr/bin/python2.7 +# Mode: -*- python -*- +# +# Copyright (c) 2000-2002 by hartmut Goebel +# +""" +Usage: uncompyle [OPTIONS]... [ FILE | DIR]... + +Examples: + uncompyle foo.pyc bar.pyc # uncompyle foo.pyc, bar.pyc to stdout + uncompyle -o . foo.pyc bar.pyc # uncompyle to ./foo.dis and ./bar.dis + uncompyle -o /tmp /usr/lib/python1.5 # uncompyle whole library + +Options: + -o output decompiled files to this path: + if multiple input files are decompiled, the common prefix + is stripped from these names and the remainder appended to + + uncompyle -o /tmp bla/fasel.pyc bla/foo.pyc + -> /tmp/fasel.dis, /tmp/foo.dis + uncompyle -o /tmp bla/fasel.pyc bar/foo.pyc + -> /tmp/bla/fasel.dis, /tmp/bar/foo.dis + uncompyle -o /tmp /usr/lib/python1.5 + -> /tmp/smtplib.dis ... /tmp/lib-tk/FixTk.dis + -c attempts a disassembly after compiling + -d do not print timestamps + -p use number of processes + -r recurse directories looking for .pyc and .pyo files + --verify compare generated source with input byte-code + (requires -o) + --help show this message + +Debugging Options: + --showasm -a include byte-code (disables --verify) + --showast -t include AST (abstract syntax tree) (disables --verify) + +Extensions of generated files: + '.dis' successfully decompiled (and verified if --verify) + '.dis_unverified' successfully decompile but --verify failed + '.nodis' uncompyle failed (contact author for enhancement) +""" + +Usage_short = \ +"decomyple [--help] [--verify] [--showasm] [--showast] [-o ] FILE|DIR..." + +import sys, os, getopt +import os.path +from uncompyle2 import main, verify +import time + +if sys.version[:3] != '2.7': + print >>sys.stderr, 'Error: uncompyle2 requires Python 2.7.' + sys.exit(-1) + +showasm = showast = do_verify = numproc = recurse_dirs = 0 +outfile = '-' +out_base = None +codes = [] +timestamp = True +timestampfmt = "# %Y.%m.%d %H:%M:%S %Z" + +try: + opts, files = getopt.getopt(sys.argv[1:], 'hatdro:c:p:', + ['help', 'verify', 'showast', 'showasm']) +except getopt.GetoptError, e: + print >>sys.stderr, '%s: %s' % (os.path.basename(sys.argv[0]), e) + sys.exit(-1) + +for opt, val in opts: + if opt in ('-h', '--help'): + print __doc__ + sys.exit(0) + elif opt == '--verify': + do_verify = 1 + elif opt in ('--showasm', '-a'): + showasm = 1 + do_verify = 0 + elif opt in ('--showast', '-t'): + showast = 1 + do_verify = 0 + elif opt == '-o': + outfile = val + elif opt == '-d': + timestamp = False + elif opt == '-c': + codes.append(val) + elif opt == '-p': + numproc = int(val) + elif opt == '-r': + recurse_dirs = 1 + else: + print opt + print Usage_short + sys.exit(1) + +# expand directory if specified +if recurse_dirs: + expanded_files = [] + for f in files: + if os.path.isdir(f): + for root, _, dir_files in os.walk(f): + for df in dir_files: + if df.endswith('.pyc') or df.endswith('.pyo'): + expanded_files.append(os.path.join(root, df)) + files = expanded_files + +# argl, commonprefix works on strings, not on path parts, +# thus we must handle the case with files in 'some/classes' +# and 'some/cmds' +src_base = os.path.commonprefix(files) +if src_base[-1:] != os.sep: + src_base = os.path.dirname(src_base) +if src_base: + sb_len = len( os.path.join(src_base, '') ) + files = map(lambda f: f[sb_len:], files) + del sb_len + +if outfile == '-': + outfile = None # use stdout +elif outfile and os.path.isdir(outfile): + out_base = outfile; outfile = None +elif outfile and len(files) > 1: + out_base = outfile; outfile = None + +if timestamp: + print time.strftime(timestampfmt) +if numproc <= 1: + try: + result = main(src_base, out_base, files, codes, outfile, showasm, showast, do_verify) + print '# decompiled %i files: %i okay, %i failed, %i verify failed' % result + except (KeyboardInterrupt): + pass + except verify.VerifyCmpError: + raise +else: + from multiprocessing import Process, Queue + from Queue import Empty + fqueue = Queue(len(files)+numproc) + for f in files: + fqueue.put(f) + for i in range(numproc): + fqueue.put(None) + + rqueue = Queue(numproc) + + def process_func(): + try: + (tot_files, okay_files, failed_files, verify_failed_files) = (0,0,0,0) + while 1: + f = fqueue.get() + if f == None: + break + (t, o, f, v) = \ + main(src_base, out_base, [f], codes, outfile, showasm, showast, do_verify) + tot_files += t + okay_files += o + failed_files += f + verify_failed_files += v + except (Empty, KeyboardInterrupt): + pass + rqueue.put((tot_files, okay_files, failed_files, verify_failed_files)) + rqueue.close() + + try: + procs = [Process(target=process_func) for i in range(numproc)] + for p in procs: + p.start() + for p in procs: + p.join() + try: + (tot_files, okay_files, failed_files, verify_failed_files) = (0,0,0,0) + while 1: + (t, o, f, v) = rqueue.get(False) + tot_files += t + okay_files += o + failed_files += f + verify_failed_files += v + except Empty: + pass + print '# decompiled %i files: %i okay, %i failed, %i verify failed' % \ + (tot_files, okay_files, failed_files, verify_failed_files) + except (KeyboardInterrupt, OSError): + pass + + +if timestamp: + print time.strftime(timestampfmt) diff --git a/compile_tests b/compile_tests new file mode 100755 index 00000000..9daa5130 --- /dev/null +++ b/compile_tests @@ -0,0 +1,8 @@ +#!/bin/sh + +for ver in 1.4 1.5 1.6 2 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7; do + which python$ver > /dev/null 2>&1 && \ + ( python$ver test/compile_tests + python$ver -O test/compile_tests + ) +done diff --git a/scripts/uncompyle2 b/scripts/uncompyle2 new file mode 100755 index 00000000..26067d23 --- /dev/null +++ b/scripts/uncompyle2 @@ -0,0 +1,187 @@ +#!/usr/bin/env python2.7 +# Mode: -*- python -*- +# +# Copyright (c) 2000-2002 by hartmut Goebel +# +""" +Usage: uncompyle [OPTIONS]... [ FILE | DIR]... + +Examples: + uncompyle foo.pyc bar.pyc # uncompyle foo.pyc, bar.pyc to stdout + uncompyle -o . foo.pyc bar.pyc # uncompyle to ./foo.dis and ./bar.dis + uncompyle -o /tmp /usr/lib/python1.5 # uncompyle whole library + +Options: + -o output decompiled files to this path: + if multiple input files are decompiled, the common prefix + is stripped from these names and the remainder appended to + + uncompyle -o /tmp bla/fasel.pyc bla/foo.pyc + -> /tmp/fasel.dis, /tmp/foo.dis + uncompyle -o /tmp bla/fasel.pyc bar/foo.pyc + -> /tmp/bla/fasel.dis, /tmp/bar/foo.dis + uncompyle -o /tmp /usr/lib/python1.5 + -> /tmp/smtplib.dis ... /tmp/lib-tk/FixTk.dis + -c attempts a disassembly after compiling + -d do not print timestamps + -p use number of processes + -r recurse directories looking for .pyc and .pyo files + --verify compare generated source with input byte-code + (requires -o) + --help show this message + +Debugging Options: + --showasm -a include byte-code (disables --verify) + --showast -t include AST (abstract syntax tree) (disables --verify) + +Extensions of generated files: + '.dis' successfully decompiled (and verified if --verify) + '.dis_unverified' successfully decompile but --verify failed + '.nodis' uncompyle failed (contact author for enhancement) +""" + +Usage_short = \ +"decomyple [--help] [--verify] [--showasm] [--showast] [-o ] FILE|DIR..." + +import sys, os, getopt +import os.path +from uncompyle2 import main, verify +import time + +if sys.version[:3] != '2.7': + print >>sys.stderr, 'Error: uncompyle2 requires Python 2.7.' + sys.exit(-1) + +showasm = showast = do_verify = numproc = recurse_dirs = 0 +outfile = '-' +out_base = None +codes = [] +timestamp = True +timestampfmt = "# %Y.%m.%d %H:%M:%S %Z" + +try: + opts, files = getopt.getopt(sys.argv[1:], 'hatdro:c:p:', + ['help', 'verify', 'showast', 'showasm']) +except getopt.GetoptError, e: + print >>sys.stderr, '%s: %s' % (os.path.basename(sys.argv[0]), e) + sys.exit(-1) + +for opt, val in opts: + if opt in ('-h', '--help'): + print __doc__ + sys.exit(0) + elif opt == '--verify': + do_verify = 1 + elif opt in ('--showasm', '-a'): + showasm = 1 + do_verify = 0 + elif opt in ('--showast', '-t'): + showast = 1 + do_verify = 0 + elif opt == '-o': + outfile = val + elif opt == '-d': + timestamp = False + elif opt == '-c': + codes.append(val) + elif opt == '-p': + numproc = int(val) + elif opt == '-r': + recurse_dirs = 1 + else: + print opt + print Usage_short + sys.exit(1) + +# expand directory if specified +if recurse_dirs: + expanded_files = [] + for f in files: + if os.path.isdir(f): + for root, _, dir_files in os.walk(f): + for df in dir_files: + if df.endswith('.pyc') or df.endswith('.pyo'): + expanded_files.append(os.path.join(root, df)) + files = expanded_files + +# argl, commonprefix works on strings, not on path parts, +# thus we must handle the case with files in 'some/classes' +# and 'some/cmds' +src_base = os.path.commonprefix(files) +if src_base[-1:] != os.sep: + src_base = os.path.dirname(src_base) +if src_base: + sb_len = len( os.path.join(src_base, '') ) + files = map(lambda f: f[sb_len:], files) + del sb_len + +if outfile == '-': + outfile = None # use stdout +elif outfile and os.path.isdir(outfile): + out_base = outfile; outfile = None +elif outfile and len(files) > 1: + out_base = outfile; outfile = None + +if timestamp: + print time.strftime(timestampfmt) +if numproc <= 1: + try: + result = main(src_base, out_base, files, codes, outfile, showasm, showast, do_verify) + print '# decompiled %i files: %i okay, %i failed, %i verify failed' % result + except (KeyboardInterrupt): + pass + except verify.VerifyCmpError: + raise +else: + from multiprocessing import Process, Queue + from Queue import Empty + fqueue = Queue(len(files)+numproc) + for f in files: + fqueue.put(f) + for i in range(numproc): + fqueue.put(None) + + rqueue = Queue(numproc) + + def process_func(): + try: + (tot_files, okay_files, failed_files, verify_failed_files) = (0,0,0,0) + while 1: + f = fqueue.get() + if f == None: + break + (t, o, f, v) = \ + main(src_base, out_base, [f], codes, outfile, showasm, showast, do_verify) + tot_files += t + okay_files += o + failed_files += f + verify_failed_files += v + except (Empty, KeyboardInterrupt): + pass + rqueue.put((tot_files, okay_files, failed_files, verify_failed_files)) + rqueue.close() + + try: + procs = [Process(target=process_func) for i in range(numproc)] + for p in procs: + p.start() + for p in procs: + p.join() + try: + (tot_files, okay_files, failed_files, verify_failed_files) = (0,0,0,0) + while 1: + (t, o, f, v) = rqueue.get(False) + tot_files += t + okay_files += o + failed_files += f + verify_failed_files += v + except Empty: + pass + print '# decompiled %i files: %i okay, %i failed, %i verify failed' % \ + (tot_files, okay_files, failed_files, verify_failed_files) + except (KeyboardInterrupt, OSError): + pass + + +if timestamp: + print time.strftime(timestampfmt) diff --git a/setup.cfg b/setup.cfg new file mode 100755 index 00000000..ef17758e --- /dev/null +++ b/setup.cfg @@ -0,0 +1,8 @@ +[bdist_rpm] +release = 1 +packager = Hartmut Goebel +doc_files = README +# CHANGES.txt +# USAGE.txt +# doc/ +# examples/ diff --git a/setup.py b/setup.py new file mode 100755 index 00000000..4f339716 --- /dev/null +++ b/setup.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +"""Setup script for the 'uncompyle' distribution.""" + +from distutils.core import setup, Extension + +setup (name = "uncompyle2", + version = "1.1", + description = "Python byte-code to source-code converter", + author = "Hartmut Goebel", + author_email = "hartmut@oberon.noris.de", + url = "http://github.com/sysfrog/uncompyle", + packages=['uncompyle2', 'uncompyle2.opcode'], + scripts=['scripts/uncompyle2'], + ) diff --git a/test/compile_tests b/test/compile_tests new file mode 100755 index 00000000..06184579 --- /dev/null +++ b/test/compile_tests @@ -0,0 +1,80 @@ +#!/usr/bin/env python2.5 +""" +compile_tests -- compile test patterns for the decompyle test suite + +This source is part of the decompyle test suite. + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" + +import py_compile, os, sys, getopt + +work_dir = os.path.dirname(sys.argv[0]) +src_dir = work_dir + +opts, args = getopt.getopt(sys.argv[1:], 's:w:') + +for opt, val in opts: + if opt == '-s': + src_dir = val + if opt == '-w': + work_dir = val + else: + raise "Unknown Option '%s'" % opt +if args: + raise 'This tool does not want any arguments' + +print "Using files in dir %s" % src_dir +print "Compiling into dir %s" % work_dir + +tests = {} + +tests['1.5'] = ["class", "del", "docstring", 'empty', "exec", + "exceptions", "expressions", "functions", "global", + "globals", "import", "integers", "lambda", "loops", + "misc", "nested_elif", "prettyprint", "print", + 'single_stmt', "slices", "tuple_params", 'tuples'] + +tests['1.6'] = ["applyEquiv", ] + tests['1.5'] + +tests['2.0'] = ["augmentedAssign", "extendedImport", "extendedPrint", + "import_as", "listComprehensions", 'print_to'] + \ + tests['1.6'] # [ "--extendedarg", ] + +tests['2.1'] = ['loops2', 'nested_scopes'] + tests['2.0'] + +tests['2.2'] = ['divide_future', 'divide_no_future', 'iterators', + 'yield'] + tests['2.1'] + +tests['2.3'] = tests['2.2'] +tests['2.5'] = tests['2.3'] +tests['2.6'] = tests['2.5'] +tests['2.7'] = ['mine'] + tests['2.6'] +total_tests = len(tests['2.7']) +#tests['2.2'].sort(); print tests['2.2'] + +extension = '.py' + (__debug__ and 'c' or 'o') + +def compile(file, target_dir): + sfile = os.path.join(src_dir, 'test_%s.py' % file) + cfile = os.path.join(target_dir, 'test_%s%s' % (file, extension) ) + py_compile.compile(sfile, cfile=cfile) + +def compile_for_version(version): + target_dir = os.path.join(work_dir, 'bytecode_' + version) + if not os.path.exists(target_dir): + os.mkdir(target_dir) + for file in tests[version]: + compile(file, target_dir) + +try: + version = '%i.%i' % sys.version_info[:2] +except AttributeError: + version = sys.version[:3] + +print 'Compiling test files for Python', version, +print '(%i/%i files)' % (len(tests[version]), total_tests) +compile_for_version(version) +print 'Done.' diff --git a/test/test_applyEquiv.py b/test/test_applyEquiv.py new file mode 100755 index 00000000..02fff197 --- /dev/null +++ b/test/test_applyEquiv.py @@ -0,0 +1,30 @@ +# applyEquiv.py -- source test pattern for equivalents of 'apply' +# +# This simple program is part of the decompyle test suite. +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +def kwfunc(**kwargs): + print kwargs.items() + +def argsfunc(*args): + print args + +def no_apply(*args, **kwargs): + print args + print kwargs.items() + argsfunc(34) + foo = argsfunc(*args) + argsfunc(*args) + argsfunc(34, *args) + kwfunc(**kwargs) + kwfunc(x=11, **kwargs) + no_apply(*args, **kwargs) + no_apply(34, *args, **kwargs) + no_apply(x=11, *args, **kwargs) + no_apply(34, x=11, *args, **kwargs) + no_apply(42, 34, x=11, *args, **kwargs) + +no_apply(1,2,4,8,a=2,b=3,c=5) diff --git a/test/test_augmentedAssign.py b/test/test_augmentedAssign.py new file mode 100755 index 00000000..7c5a3df9 --- /dev/null +++ b/test/test_augmentedAssign.py @@ -0,0 +1,55 @@ +""" +augmentedAssign.py -- source test pattern for augmented assigns + +This source is part of the decompyle test suite. + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" + +raise "This program can't be run" + +a = 1 +b = 2 +a += b; print a # a = a+b = 3 +a -= b; print a # a = a-b = 1 +a *= b; print a # a = a*b = 2 +a -= a; print a # a = a-a = 0 +a += 7*3; print a # == 21 + +l= [1,2,3] +l[1] *= 3; print l[1]; # 6 +l[1][2][3] = 7 +l[1][2][3] *= 3; +l[:] += [9]; print l +l[:2] += [9]; print l +l[1:] += [9]; print l +l[1:4] += [9]; print l +l += [42,43]; print l + +a.value = 1 +a.value += 1; +a.b.val = 1 +a.b.val += 1; + +l = [] +for i in range(3): + lj = [] + for j in range(3): + lk = [] + for k in range(3): + lk.append(0) + lj.append(lk) + l.append(lj) + +i = j = k = 1 +def f(): + global i + i += 1 + return i + +l[i][j][k] = 1 +i = 1 +l[f()][j][k] += 1 +print i, l diff --git a/test/test_class.py b/test/test_class.py new file mode 100755 index 00000000..e610eb69 --- /dev/null +++ b/test/test_class.py @@ -0,0 +1,43 @@ +""" +test_class.py -- source test pattern for class definitions + +This source is part of the decompyle test suite. + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" + +class A: + + class A1: + def __init__(self): + print 'A1.__init__' + + def foo(self): + print 'A1.foo' + + def __init__(self): + print 'A.__init__' + + def foo(self): + print 'A.foo' + + +class B: + def __init__(self): + print 'B.__init__' + + def bar(self): + print 'B.bar' + + +class C(A,B): + def foobar(self): + print 'C.foobar' + + +c = C() +c.foo() +c.bar() +c.foobar() diff --git a/test/test_del.py b/test/test_del.py new file mode 100755 index 00000000..26419f9b --- /dev/null +++ b/test/test_del.py @@ -0,0 +1,35 @@ +""" +test_del.py -- source test pattern for 'del' statements + +This source is part of the decompyle test suite. +Snippet taken from python libs's test_class.py + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" + +raise "This program can't be run" + +print 0 +a = b[5] +print 1 +del a +print 2 +del b[5] +print 3 + +del testme[1] +print 4 +del testme[:] +print '4a' +del testme[:42] +print '4b' +del testme[40:42] +print 5 +del testme[2:1024:10] +print '5a' +del testme[40,41,42] +print 6 +del testme[:42, ..., :24:, 24, 100] +print 7 diff --git a/test/test_divide_future.py b/test/test_divide_future.py new file mode 100755 index 00000000..b9059b98 --- /dev/null +++ b/test/test_divide_future.py @@ -0,0 +1,6 @@ +from __future__ import division + +print ' 1 // 2 =', 1 // 2 +print '1.0 // 2.0 =', 1.0 // 2.0 +print ' 1 / 2 =', 1 / 2 +print '1.0 / 2.0 =', 1.0 / 2.0 diff --git a/test/test_divide_no_future.py b/test/test_divide_no_future.py new file mode 100755 index 00000000..1be8e6f6 --- /dev/null +++ b/test/test_divide_no_future.py @@ -0,0 +1,6 @@ +#from __future__ import division + +print ' 1 // 2 =', 1 // 2 +print '1.0 // 2.0 =', 1.0 // 2.0 +print ' 1 / 2 =', 1 / 2 +print '1.0 / 2.0 =', 1.0 / 2.0 diff --git a/test/test_docstring.py b/test/test_docstring.py new file mode 100755 index 00000000..a27b141c --- /dev/null +++ b/test/test_docstring.py @@ -0,0 +1,41 @@ +# docstring.py -- source test pattern for doc strings +# +# This simple program is part of the decompyle test suite. +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +''' +This is a doc string +''' + +def Doc_Test(): + """This has to be present""" + +class XXX: + def __init__(self): + """__init__: This has to be present""" + self.a = 1 + + def XXX22(): + """XXX22: This has to be present""" + pass + + def XXX11(): + """XXX22: This has to be present""" + pass + + def XXX12(): + foo = """XXX22: This has to be present""" + pass + + def XXX13(): + pass + +def Y11(): + def Y22(): + def Y33(): + pass + +print __doc__ diff --git a/test/test_empty.py b/test/test_empty.py new file mode 100755 index 00000000..e69de29b diff --git a/test/test_exceptions.py b/test/test_exceptions.py new file mode 100755 index 00000000..e52df766 --- /dev/null +++ b/test/test_exceptions.py @@ -0,0 +1,107 @@ +import dis + +def x11(): + try: + a = 'try except' + except: + a = 2 + b = '--------' + + +def x12(): + try: + a = 'try except else(pass)' + except: + a = 2 + b = '--------' + + +def x13(): + try: + a = 'try except else(a=3)' + except: + a = 2 + else: + a = 3 + b = '--------' + + +def x21(): + try: + a = 'try KeyError' + except KeyError: + a = 8 + b = '--------' + + +def x22(): + try: + a = 'try (IdxErr, KeyError) else(pass)' + except (IndexError, KeyError): + a = 8 + b = '--------' + + +def x23(): + try: + a = 'try KeyError else(a=9)' + except KeyError: + a = 8 + else: + a = 9 + b = '--------' + + +def x31(): + try: + a = 'try KeyError IndexError' + except KeyError: + a = 8 + except IndexError: + a = 9 + b = '--------' + + +def x32(): + try: + a = 'try KeyError IndexError else(pass)' + except KeyError: + a = 8 + except IndexError: + a = 9 + b = '--------' + + +def x33(): + try: + a = 'try KeyError IndexError else(a=9)' + except KeyError: + a = 8 + except IndexError: + a = 9 + else: + a = 9 + b = '#################' + + +def x41(): + if (a == 1): + a = 1 + elif (b == 1): + b = 1 + else: + c = 1 + b = '#################' + + +def x42(): + if (a == 1): + a = 1 + elif (b == 1): + b = 1 + else: + c = 1 + xxx = 'mmm' + +if (__name__ == '__main__'): + dis.dis(xx) diff --git a/test/test_exec.py b/test/test_exec.py new file mode 100755 index 00000000..ed448155 --- /dev/null +++ b/test/test_exec.py @@ -0,0 +1,13 @@ +# exec.py -- source test pattern for exec statement +# +# This simple program is part of the decompyle test suite. +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +testcode = 'a = 12' + +exec testcode +exec testcode in globals() +exec testcode in globals(), locals() diff --git a/test/test_expressions.py b/test/test_expressions.py new file mode 100755 index 00000000..de11ae8a --- /dev/null +++ b/test/test_expressions.py @@ -0,0 +1,13 @@ +# expressions.py -- source test pattern for expressions +# +# This simple program is part of the decompyle test suite. +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +def _lsbStrToInt(str): + return ord(str[0]) + \ + (ord(str[1]) << 8) + \ + (ord(str[2]) << 16) + \ + (ord(str[3]) << 24) diff --git a/test/test_extendedImport.py b/test/test_extendedImport.py new file mode 100755 index 00000000..277d4c78 --- /dev/null +++ b/test/test_extendedImport.py @@ -0,0 +1,18 @@ +# extendedImport.py -- source test pattern for extended import statements +# +# This simple program is part of the decompyle test suite. +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +import os, sys as System, time +import sys + +from rfc822 import Message as Msg822 +from mimetools import Message as MimeMsg, decode, choose_boundary as MimeBoundary + +import test.test_StringIO as StringTest + +for k, v in globals().items(): + print `k`, v diff --git a/test/test_extendedPrint.py b/test/test_extendedPrint.py new file mode 100755 index 00000000..c0a64d3f --- /dev/null +++ b/test/test_extendedPrint.py @@ -0,0 +1,14 @@ +# extendedPrint.py -- source test pattern for extended print statements +# +# This simple program is part of the decompyle test suite. +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +import sys + +print >> sys.stdout, "Hello World" +print >> sys.stdout, 1,2,3 +print >> sys.stdout, 1,2,3, +print >> sys.stdout diff --git a/test/test_extendedarg.py b/test/test_extendedarg.py new file mode 100755 index 00000000..ee9562dc --- /dev/null +++ b/test/test_extendedarg.py @@ -0,0 +1,65547 @@ +# augmentedAssign.py -- source test pattern for augmented assigns +# +# This simple program is part of the decompyle test suite. +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +for i in range(1<<15+1): + print 'a%d = %d' % (i,i) + +a0 = 0 +a1 = 1 +a2 = 2 +a3 = 3 +a4 = 4 +a5 = 5 +a6 = 6 +a7 = 7 +a8 = 8 +a9 = 9 +a10 = 10 +a11 = 11 +a12 = 12 +a13 = 13 +a14 = 14 +a15 = 15 +a16 = 16 +a17 = 17 +a18 = 18 +a19 = 19 +a20 = 20 +a21 = 21 +a22 = 22 +a23 = 23 +a24 = 24 +a25 = 25 +a26 = 26 +a27 = 27 +a28 = 28 +a29 = 29 +a30 = 30 +a31 = 31 +a32 = 32 +a33 = 33 +a34 = 34 +a35 = 35 +a36 = 36 +a37 = 37 +a38 = 38 +a39 = 39 +a40 = 40 +a41 = 41 +a42 = 42 +a43 = 43 +a44 = 44 +a45 = 45 +a46 = 46 +a47 = 47 +a48 = 48 +a49 = 49 +a50 = 50 +a51 = 51 +a52 = 52 +a53 = 53 +a54 = 54 +a55 = 55 +a56 = 56 +a57 = 57 +a58 = 58 +a59 = 59 +a60 = 60 +a61 = 61 +a62 = 62 +a63 = 63 +a64 = 64 +a65 = 65 +a66 = 66 +a67 = 67 +a68 = 68 +a69 = 69 +a70 = 70 +a71 = 71 +a72 = 72 +a73 = 73 +a74 = 74 +a75 = 75 +a76 = 76 +a77 = 77 +a78 = 78 +a79 = 79 +a80 = 80 +a81 = 81 +a82 = 82 +a83 = 83 +a84 = 84 +a85 = 85 +a86 = 86 +a87 = 87 +a88 = 88 +a89 = 89 +a90 = 90 +a91 = 91 +a92 = 92 +a93 = 93 +a94 = 94 +a95 = 95 +a96 = 96 +a97 = 97 +a98 = 98 +a99 = 99 +a100 = 100 +a101 = 101 +a102 = 102 +a103 = 103 +a104 = 104 +a105 = 105 +a106 = 106 +a107 = 107 +a108 = 108 +a109 = 109 +a110 = 110 +a111 = 111 +a112 = 112 +a113 = 113 +a114 = 114 +a115 = 115 +a116 = 116 +a117 = 117 +a118 = 118 +a119 = 119 +a120 = 120 +a121 = 121 +a122 = 122 +a123 = 123 +a124 = 124 +a125 = 125 +a126 = 126 +a127 = 127 +a128 = 128 +a129 = 129 +a130 = 130 +a131 = 131 +a132 = 132 +a133 = 133 +a134 = 134 +a135 = 135 +a136 = 136 +a137 = 137 +a138 = 138 +a139 = 139 +a140 = 140 +a141 = 141 +a142 = 142 +a143 = 143 +a144 = 144 +a145 = 145 +a146 = 146 +a147 = 147 +a148 = 148 +a149 = 149 +a150 = 150 +a151 = 151 +a152 = 152 +a153 = 153 +a154 = 154 +a155 = 155 +a156 = 156 +a157 = 157 +a158 = 158 +a159 = 159 +a160 = 160 +a161 = 161 +a162 = 162 +a163 = 163 +a164 = 164 +a165 = 165 +a166 = 166 +a167 = 167 +a168 = 168 +a169 = 169 +a170 = 170 +a171 = 171 +a172 = 172 +a173 = 173 +a174 = 174 +a175 = 175 +a176 = 176 +a177 = 177 +a178 = 178 +a179 = 179 +a180 = 180 +a181 = 181 +a182 = 182 +a183 = 183 +a184 = 184 +a185 = 185 +a186 = 186 +a187 = 187 +a188 = 188 +a189 = 189 +a190 = 190 +a191 = 191 +a192 = 192 +a193 = 193 +a194 = 194 +a195 = 195 +a196 = 196 +a197 = 197 +a198 = 198 +a199 = 199 +a200 = 200 +a201 = 201 +a202 = 202 +a203 = 203 +a204 = 204 +a205 = 205 +a206 = 206 +a207 = 207 +a208 = 208 +a209 = 209 +a210 = 210 +a211 = 211 +a212 = 212 +a213 = 213 +a214 = 214 +a215 = 215 +a216 = 216 +a217 = 217 +a218 = 218 +a219 = 219 +a220 = 220 +a221 = 221 +a222 = 222 +a223 = 223 +a224 = 224 +a225 = 225 +a226 = 226 +a227 = 227 +a228 = 228 +a229 = 229 +a230 = 230 +a231 = 231 +a232 = 232 +a233 = 233 +a234 = 234 +a235 = 235 +a236 = 236 +a237 = 237 +a238 = 238 +a239 = 239 +a240 = 240 +a241 = 241 +a242 = 242 +a243 = 243 +a244 = 244 +a245 = 245 +a246 = 246 +a247 = 247 +a248 = 248 +a249 = 249 +a250 = 250 +a251 = 251 +a252 = 252 +a253 = 253 +a254 = 254 +a255 = 255 +a256 = 256 +a257 = 257 +a258 = 258 +a259 = 259 +a260 = 260 +a261 = 261 +a262 = 262 +a263 = 263 +a264 = 264 +a265 = 265 +a266 = 266 +a267 = 267 +a268 = 268 +a269 = 269 +a270 = 270 +a271 = 271 +a272 = 272 +a273 = 273 +a274 = 274 +a275 = 275 +a276 = 276 +a277 = 277 +a278 = 278 +a279 = 279 +a280 = 280 +a281 = 281 +a282 = 282 +a283 = 283 +a284 = 284 +a285 = 285 +a286 = 286 +a287 = 287 +a288 = 288 +a289 = 289 +a290 = 290 +a291 = 291 +a292 = 292 +a293 = 293 +a294 = 294 +a295 = 295 +a296 = 296 +a297 = 297 +a298 = 298 +a299 = 299 +a300 = 300 +a301 = 301 +a302 = 302 +a303 = 303 +a304 = 304 +a305 = 305 +a306 = 306 +a307 = 307 +a308 = 308 +a309 = 309 +a310 = 310 +a311 = 311 +a312 = 312 +a313 = 313 +a314 = 314 +a315 = 315 +a316 = 316 +a317 = 317 +a318 = 318 +a319 = 319 +a320 = 320 +a321 = 321 +a322 = 322 +a323 = 323 +a324 = 324 +a325 = 325 +a326 = 326 +a327 = 327 +a328 = 328 +a329 = 329 +a330 = 330 +a331 = 331 +a332 = 332 +a333 = 333 +a334 = 334 +a335 = 335 +a336 = 336 +a337 = 337 +a338 = 338 +a339 = 339 +a340 = 340 +a341 = 341 +a342 = 342 +a343 = 343 +a344 = 344 +a345 = 345 +a346 = 346 +a347 = 347 +a348 = 348 +a349 = 349 +a350 = 350 +a351 = 351 +a352 = 352 +a353 = 353 +a354 = 354 +a355 = 355 +a356 = 356 +a357 = 357 +a358 = 358 +a359 = 359 +a360 = 360 +a361 = 361 +a362 = 362 +a363 = 363 +a364 = 364 +a365 = 365 +a366 = 366 +a367 = 367 +a368 = 368 +a369 = 369 +a370 = 370 +a371 = 371 +a372 = 372 +a373 = 373 +a374 = 374 +a375 = 375 +a376 = 376 +a377 = 377 +a378 = 378 +a379 = 379 +a380 = 380 +a381 = 381 +a382 = 382 +a383 = 383 +a384 = 384 +a385 = 385 +a386 = 386 +a387 = 387 +a388 = 388 +a389 = 389 +a390 = 390 +a391 = 391 +a392 = 392 +a393 = 393 +a394 = 394 +a395 = 395 +a396 = 396 +a397 = 397 +a398 = 398 +a399 = 399 +a400 = 400 +a401 = 401 +a402 = 402 +a403 = 403 +a404 = 404 +a405 = 405 +a406 = 406 +a407 = 407 +a408 = 408 +a409 = 409 +a410 = 410 +a411 = 411 +a412 = 412 +a413 = 413 +a414 = 414 +a415 = 415 +a416 = 416 +a417 = 417 +a418 = 418 +a419 = 419 +a420 = 420 +a421 = 421 +a422 = 422 +a423 = 423 +a424 = 424 +a425 = 425 +a426 = 426 +a427 = 427 +a428 = 428 +a429 = 429 +a430 = 430 +a431 = 431 +a432 = 432 +a433 = 433 +a434 = 434 +a435 = 435 +a436 = 436 +a437 = 437 +a438 = 438 +a439 = 439 +a440 = 440 +a441 = 441 +a442 = 442 +a443 = 443 +a444 = 444 +a445 = 445 +a446 = 446 +a447 = 447 +a448 = 448 +a449 = 449 +a450 = 450 +a451 = 451 +a452 = 452 +a453 = 453 +a454 = 454 +a455 = 455 +a456 = 456 +a457 = 457 +a458 = 458 +a459 = 459 +a460 = 460 +a461 = 461 +a462 = 462 +a463 = 463 +a464 = 464 +a465 = 465 +a466 = 466 +a467 = 467 +a468 = 468 +a469 = 469 +a470 = 470 +a471 = 471 +a472 = 472 +a473 = 473 +a474 = 474 +a475 = 475 +a476 = 476 +a477 = 477 +a478 = 478 +a479 = 479 +a480 = 480 +a481 = 481 +a482 = 482 +a483 = 483 +a484 = 484 +a485 = 485 +a486 = 486 +a487 = 487 +a488 = 488 +a489 = 489 +a490 = 490 +a491 = 491 +a492 = 492 +a493 = 493 +a494 = 494 +a495 = 495 +a496 = 496 +a497 = 497 +a498 = 498 +a499 = 499 +a500 = 500 +a501 = 501 +a502 = 502 +a503 = 503 +a504 = 504 +a505 = 505 +a506 = 506 +a507 = 507 +a508 = 508 +a509 = 509 +a510 = 510 +a511 = 511 +a512 = 512 +a513 = 513 +a514 = 514 +a515 = 515 +a516 = 516 +a517 = 517 +a518 = 518 +a519 = 519 +a520 = 520 +a521 = 521 +a522 = 522 +a523 = 523 +a524 = 524 +a525 = 525 +a526 = 526 +a527 = 527 +a528 = 528 +a529 = 529 +a530 = 530 +a531 = 531 +a532 = 532 +a533 = 533 +a534 = 534 +a535 = 535 +a536 = 536 +a537 = 537 +a538 = 538 +a539 = 539 +a540 = 540 +a541 = 541 +a542 = 542 +a543 = 543 +a544 = 544 +a545 = 545 +a546 = 546 +a547 = 547 +a548 = 548 +a549 = 549 +a550 = 550 +a551 = 551 +a552 = 552 +a553 = 553 +a554 = 554 +a555 = 555 +a556 = 556 +a557 = 557 +a558 = 558 +a559 = 559 +a560 = 560 +a561 = 561 +a562 = 562 +a563 = 563 +a564 = 564 +a565 = 565 +a566 = 566 +a567 = 567 +a568 = 568 +a569 = 569 +a570 = 570 +a571 = 571 +a572 = 572 +a573 = 573 +a574 = 574 +a575 = 575 +a576 = 576 +a577 = 577 +a578 = 578 +a579 = 579 +a580 = 580 +a581 = 581 +a582 = 582 +a583 = 583 +a584 = 584 +a585 = 585 +a586 = 586 +a587 = 587 +a588 = 588 +a589 = 589 +a590 = 590 +a591 = 591 +a592 = 592 +a593 = 593 +a594 = 594 +a595 = 595 +a596 = 596 +a597 = 597 +a598 = 598 +a599 = 599 +a600 = 600 +a601 = 601 +a602 = 602 +a603 = 603 +a604 = 604 +a605 = 605 +a606 = 606 +a607 = 607 +a608 = 608 +a609 = 609 +a610 = 610 +a611 = 611 +a612 = 612 +a613 = 613 +a614 = 614 +a615 = 615 +a616 = 616 +a617 = 617 +a618 = 618 +a619 = 619 +a620 = 620 +a621 = 621 +a622 = 622 +a623 = 623 +a624 = 624 +a625 = 625 +a626 = 626 +a627 = 627 +a628 = 628 +a629 = 629 +a630 = 630 +a631 = 631 +a632 = 632 +a633 = 633 +a634 = 634 +a635 = 635 +a636 = 636 +a637 = 637 +a638 = 638 +a639 = 639 +a640 = 640 +a641 = 641 +a642 = 642 +a643 = 643 +a644 = 644 +a645 = 645 +a646 = 646 +a647 = 647 +a648 = 648 +a649 = 649 +a650 = 650 +a651 = 651 +a652 = 652 +a653 = 653 +a654 = 654 +a655 = 655 +a656 = 656 +a657 = 657 +a658 = 658 +a659 = 659 +a660 = 660 +a661 = 661 +a662 = 662 +a663 = 663 +a664 = 664 +a665 = 665 +a666 = 666 +a667 = 667 +a668 = 668 +a669 = 669 +a670 = 670 +a671 = 671 +a672 = 672 +a673 = 673 +a674 = 674 +a675 = 675 +a676 = 676 +a677 = 677 +a678 = 678 +a679 = 679 +a680 = 680 +a681 = 681 +a682 = 682 +a683 = 683 +a684 = 684 +a685 = 685 +a686 = 686 +a687 = 687 +a688 = 688 +a689 = 689 +a690 = 690 +a691 = 691 +a692 = 692 +a693 = 693 +a694 = 694 +a695 = 695 +a696 = 696 +a697 = 697 +a698 = 698 +a699 = 699 +a700 = 700 +a701 = 701 +a702 = 702 +a703 = 703 +a704 = 704 +a705 = 705 +a706 = 706 +a707 = 707 +a708 = 708 +a709 = 709 +a710 = 710 +a711 = 711 +a712 = 712 +a713 = 713 +a714 = 714 +a715 = 715 +a716 = 716 +a717 = 717 +a718 = 718 +a719 = 719 +a720 = 720 +a721 = 721 +a722 = 722 +a723 = 723 +a724 = 724 +a725 = 725 +a726 = 726 +a727 = 727 +a728 = 728 +a729 = 729 +a730 = 730 +a731 = 731 +a732 = 732 +a733 = 733 +a734 = 734 +a735 = 735 +a736 = 736 +a737 = 737 +a738 = 738 +a739 = 739 +a740 = 740 +a741 = 741 +a742 = 742 +a743 = 743 +a744 = 744 +a745 = 745 +a746 = 746 +a747 = 747 +a748 = 748 +a749 = 749 +a750 = 750 +a751 = 751 +a752 = 752 +a753 = 753 +a754 = 754 +a755 = 755 +a756 = 756 +a757 = 757 +a758 = 758 +a759 = 759 +a760 = 760 +a761 = 761 +a762 = 762 +a763 = 763 +a764 = 764 +a765 = 765 +a766 = 766 +a767 = 767 +a768 = 768 +a769 = 769 +a770 = 770 +a771 = 771 +a772 = 772 +a773 = 773 +a774 = 774 +a775 = 775 +a776 = 776 +a777 = 777 +a778 = 778 +a779 = 779 +a780 = 780 +a781 = 781 +a782 = 782 +a783 = 783 +a784 = 784 +a785 = 785 +a786 = 786 +a787 = 787 +a788 = 788 +a789 = 789 +a790 = 790 +a791 = 791 +a792 = 792 +a793 = 793 +a794 = 794 +a795 = 795 +a796 = 796 +a797 = 797 +a798 = 798 +a799 = 799 +a800 = 800 +a801 = 801 +a802 = 802 +a803 = 803 +a804 = 804 +a805 = 805 +a806 = 806 +a807 = 807 +a808 = 808 +a809 = 809 +a810 = 810 +a811 = 811 +a812 = 812 +a813 = 813 +a814 = 814 +a815 = 815 +a816 = 816 +a817 = 817 +a818 = 818 +a819 = 819 +a820 = 820 +a821 = 821 +a822 = 822 +a823 = 823 +a824 = 824 +a825 = 825 +a826 = 826 +a827 = 827 +a828 = 828 +a829 = 829 +a830 = 830 +a831 = 831 +a832 = 832 +a833 = 833 +a834 = 834 +a835 = 835 +a836 = 836 +a837 = 837 +a838 = 838 +a839 = 839 +a840 = 840 +a841 = 841 +a842 = 842 +a843 = 843 +a844 = 844 +a845 = 845 +a846 = 846 +a847 = 847 +a848 = 848 +a849 = 849 +a850 = 850 +a851 = 851 +a852 = 852 +a853 = 853 +a854 = 854 +a855 = 855 +a856 = 856 +a857 = 857 +a858 = 858 +a859 = 859 +a860 = 860 +a861 = 861 +a862 = 862 +a863 = 863 +a864 = 864 +a865 = 865 +a866 = 866 +a867 = 867 +a868 = 868 +a869 = 869 +a870 = 870 +a871 = 871 +a872 = 872 +a873 = 873 +a874 = 874 +a875 = 875 +a876 = 876 +a877 = 877 +a878 = 878 +a879 = 879 +a880 = 880 +a881 = 881 +a882 = 882 +a883 = 883 +a884 = 884 +a885 = 885 +a886 = 886 +a887 = 887 +a888 = 888 +a889 = 889 +a890 = 890 +a891 = 891 +a892 = 892 +a893 = 893 +a894 = 894 +a895 = 895 +a896 = 896 +a897 = 897 +a898 = 898 +a899 = 899 +a900 = 900 +a901 = 901 +a902 = 902 +a903 = 903 +a904 = 904 +a905 = 905 +a906 = 906 +a907 = 907 +a908 = 908 +a909 = 909 +a910 = 910 +a911 = 911 +a912 = 912 +a913 = 913 +a914 = 914 +a915 = 915 +a916 = 916 +a917 = 917 +a918 = 918 +a919 = 919 +a920 = 920 +a921 = 921 +a922 = 922 +a923 = 923 +a924 = 924 +a925 = 925 +a926 = 926 +a927 = 927 +a928 = 928 +a929 = 929 +a930 = 930 +a931 = 931 +a932 = 932 +a933 = 933 +a934 = 934 +a935 = 935 +a936 = 936 +a937 = 937 +a938 = 938 +a939 = 939 +a940 = 940 +a941 = 941 +a942 = 942 +a943 = 943 +a944 = 944 +a945 = 945 +a946 = 946 +a947 = 947 +a948 = 948 +a949 = 949 +a950 = 950 +a951 = 951 +a952 = 952 +a953 = 953 +a954 = 954 +a955 = 955 +a956 = 956 +a957 = 957 +a958 = 958 +a959 = 959 +a960 = 960 +a961 = 961 +a962 = 962 +a963 = 963 +a964 = 964 +a965 = 965 +a966 = 966 +a967 = 967 +a968 = 968 +a969 = 969 +a970 = 970 +a971 = 971 +a972 = 972 +a973 = 973 +a974 = 974 +a975 = 975 +a976 = 976 +a977 = 977 +a978 = 978 +a979 = 979 +a980 = 980 +a981 = 981 +a982 = 982 +a983 = 983 +a984 = 984 +a985 = 985 +a986 = 986 +a987 = 987 +a988 = 988 +a989 = 989 +a990 = 990 +a991 = 991 +a992 = 992 +a993 = 993 +a994 = 994 +a995 = 995 +a996 = 996 +a997 = 997 +a998 = 998 +a999 = 999 +a1000 = 1000 +a1001 = 1001 +a1002 = 1002 +a1003 = 1003 +a1004 = 1004 +a1005 = 1005 +a1006 = 1006 +a1007 = 1007 +a1008 = 1008 +a1009 = 1009 +a1010 = 1010 +a1011 = 1011 +a1012 = 1012 +a1013 = 1013 +a1014 = 1014 +a1015 = 1015 +a1016 = 1016 +a1017 = 1017 +a1018 = 1018 +a1019 = 1019 +a1020 = 1020 +a1021 = 1021 +a1022 = 1022 +a1023 = 1023 +a1024 = 1024 +a1025 = 1025 +a1026 = 1026 +a1027 = 1027 +a1028 = 1028 +a1029 = 1029 +a1030 = 1030 +a1031 = 1031 +a1032 = 1032 +a1033 = 1033 +a1034 = 1034 +a1035 = 1035 +a1036 = 1036 +a1037 = 1037 +a1038 = 1038 +a1039 = 1039 +a1040 = 1040 +a1041 = 1041 +a1042 = 1042 +a1043 = 1043 +a1044 = 1044 +a1045 = 1045 +a1046 = 1046 +a1047 = 1047 +a1048 = 1048 +a1049 = 1049 +a1050 = 1050 +a1051 = 1051 +a1052 = 1052 +a1053 = 1053 +a1054 = 1054 +a1055 = 1055 +a1056 = 1056 +a1057 = 1057 +a1058 = 1058 +a1059 = 1059 +a1060 = 1060 +a1061 = 1061 +a1062 = 1062 +a1063 = 1063 +a1064 = 1064 +a1065 = 1065 +a1066 = 1066 +a1067 = 1067 +a1068 = 1068 +a1069 = 1069 +a1070 = 1070 +a1071 = 1071 +a1072 = 1072 +a1073 = 1073 +a1074 = 1074 +a1075 = 1075 +a1076 = 1076 +a1077 = 1077 +a1078 = 1078 +a1079 = 1079 +a1080 = 1080 +a1081 = 1081 +a1082 = 1082 +a1083 = 1083 +a1084 = 1084 +a1085 = 1085 +a1086 = 1086 +a1087 = 1087 +a1088 = 1088 +a1089 = 1089 +a1090 = 1090 +a1091 = 1091 +a1092 = 1092 +a1093 = 1093 +a1094 = 1094 +a1095 = 1095 +a1096 = 1096 +a1097 = 1097 +a1098 = 1098 +a1099 = 1099 +a1100 = 1100 +a1101 = 1101 +a1102 = 1102 +a1103 = 1103 +a1104 = 1104 +a1105 = 1105 +a1106 = 1106 +a1107 = 1107 +a1108 = 1108 +a1109 = 1109 +a1110 = 1110 +a1111 = 1111 +a1112 = 1112 +a1113 = 1113 +a1114 = 1114 +a1115 = 1115 +a1116 = 1116 +a1117 = 1117 +a1118 = 1118 +a1119 = 1119 +a1120 = 1120 +a1121 = 1121 +a1122 = 1122 +a1123 = 1123 +a1124 = 1124 +a1125 = 1125 +a1126 = 1126 +a1127 = 1127 +a1128 = 1128 +a1129 = 1129 +a1130 = 1130 +a1131 = 1131 +a1132 = 1132 +a1133 = 1133 +a1134 = 1134 +a1135 = 1135 +a1136 = 1136 +a1137 = 1137 +a1138 = 1138 +a1139 = 1139 +a1140 = 1140 +a1141 = 1141 +a1142 = 1142 +a1143 = 1143 +a1144 = 1144 +a1145 = 1145 +a1146 = 1146 +a1147 = 1147 +a1148 = 1148 +a1149 = 1149 +a1150 = 1150 +a1151 = 1151 +a1152 = 1152 +a1153 = 1153 +a1154 = 1154 +a1155 = 1155 +a1156 = 1156 +a1157 = 1157 +a1158 = 1158 +a1159 = 1159 +a1160 = 1160 +a1161 = 1161 +a1162 = 1162 +a1163 = 1163 +a1164 = 1164 +a1165 = 1165 +a1166 = 1166 +a1167 = 1167 +a1168 = 1168 +a1169 = 1169 +a1170 = 1170 +a1171 = 1171 +a1172 = 1172 +a1173 = 1173 +a1174 = 1174 +a1175 = 1175 +a1176 = 1176 +a1177 = 1177 +a1178 = 1178 +a1179 = 1179 +a1180 = 1180 +a1181 = 1181 +a1182 = 1182 +a1183 = 1183 +a1184 = 1184 +a1185 = 1185 +a1186 = 1186 +a1187 = 1187 +a1188 = 1188 +a1189 = 1189 +a1190 = 1190 +a1191 = 1191 +a1192 = 1192 +a1193 = 1193 +a1194 = 1194 +a1195 = 1195 +a1196 = 1196 +a1197 = 1197 +a1198 = 1198 +a1199 = 1199 +a1200 = 1200 +a1201 = 1201 +a1202 = 1202 +a1203 = 1203 +a1204 = 1204 +a1205 = 1205 +a1206 = 1206 +a1207 = 1207 +a1208 = 1208 +a1209 = 1209 +a1210 = 1210 +a1211 = 1211 +a1212 = 1212 +a1213 = 1213 +a1214 = 1214 +a1215 = 1215 +a1216 = 1216 +a1217 = 1217 +a1218 = 1218 +a1219 = 1219 +a1220 = 1220 +a1221 = 1221 +a1222 = 1222 +a1223 = 1223 +a1224 = 1224 +a1225 = 1225 +a1226 = 1226 +a1227 = 1227 +a1228 = 1228 +a1229 = 1229 +a1230 = 1230 +a1231 = 1231 +a1232 = 1232 +a1233 = 1233 +a1234 = 1234 +a1235 = 1235 +a1236 = 1236 +a1237 = 1237 +a1238 = 1238 +a1239 = 1239 +a1240 = 1240 +a1241 = 1241 +a1242 = 1242 +a1243 = 1243 +a1244 = 1244 +a1245 = 1245 +a1246 = 1246 +a1247 = 1247 +a1248 = 1248 +a1249 = 1249 +a1250 = 1250 +a1251 = 1251 +a1252 = 1252 +a1253 = 1253 +a1254 = 1254 +a1255 = 1255 +a1256 = 1256 +a1257 = 1257 +a1258 = 1258 +a1259 = 1259 +a1260 = 1260 +a1261 = 1261 +a1262 = 1262 +a1263 = 1263 +a1264 = 1264 +a1265 = 1265 +a1266 = 1266 +a1267 = 1267 +a1268 = 1268 +a1269 = 1269 +a1270 = 1270 +a1271 = 1271 +a1272 = 1272 +a1273 = 1273 +a1274 = 1274 +a1275 = 1275 +a1276 = 1276 +a1277 = 1277 +a1278 = 1278 +a1279 = 1279 +a1280 = 1280 +a1281 = 1281 +a1282 = 1282 +a1283 = 1283 +a1284 = 1284 +a1285 = 1285 +a1286 = 1286 +a1287 = 1287 +a1288 = 1288 +a1289 = 1289 +a1290 = 1290 +a1291 = 1291 +a1292 = 1292 +a1293 = 1293 +a1294 = 1294 +a1295 = 1295 +a1296 = 1296 +a1297 = 1297 +a1298 = 1298 +a1299 = 1299 +a1300 = 1300 +a1301 = 1301 +a1302 = 1302 +a1303 = 1303 +a1304 = 1304 +a1305 = 1305 +a1306 = 1306 +a1307 = 1307 +a1308 = 1308 +a1309 = 1309 +a1310 = 1310 +a1311 = 1311 +a1312 = 1312 +a1313 = 1313 +a1314 = 1314 +a1315 = 1315 +a1316 = 1316 +a1317 = 1317 +a1318 = 1318 +a1319 = 1319 +a1320 = 1320 +a1321 = 1321 +a1322 = 1322 +a1323 = 1323 +a1324 = 1324 +a1325 = 1325 +a1326 = 1326 +a1327 = 1327 +a1328 = 1328 +a1329 = 1329 +a1330 = 1330 +a1331 = 1331 +a1332 = 1332 +a1333 = 1333 +a1334 = 1334 +a1335 = 1335 +a1336 = 1336 +a1337 = 1337 +a1338 = 1338 +a1339 = 1339 +a1340 = 1340 +a1341 = 1341 +a1342 = 1342 +a1343 = 1343 +a1344 = 1344 +a1345 = 1345 +a1346 = 1346 +a1347 = 1347 +a1348 = 1348 +a1349 = 1349 +a1350 = 1350 +a1351 = 1351 +a1352 = 1352 +a1353 = 1353 +a1354 = 1354 +a1355 = 1355 +a1356 = 1356 +a1357 = 1357 +a1358 = 1358 +a1359 = 1359 +a1360 = 1360 +a1361 = 1361 +a1362 = 1362 +a1363 = 1363 +a1364 = 1364 +a1365 = 1365 +a1366 = 1366 +a1367 = 1367 +a1368 = 1368 +a1369 = 1369 +a1370 = 1370 +a1371 = 1371 +a1372 = 1372 +a1373 = 1373 +a1374 = 1374 +a1375 = 1375 +a1376 = 1376 +a1377 = 1377 +a1378 = 1378 +a1379 = 1379 +a1380 = 1380 +a1381 = 1381 +a1382 = 1382 +a1383 = 1383 +a1384 = 1384 +a1385 = 1385 +a1386 = 1386 +a1387 = 1387 +a1388 = 1388 +a1389 = 1389 +a1390 = 1390 +a1391 = 1391 +a1392 = 1392 +a1393 = 1393 +a1394 = 1394 +a1395 = 1395 +a1396 = 1396 +a1397 = 1397 +a1398 = 1398 +a1399 = 1399 +a1400 = 1400 +a1401 = 1401 +a1402 = 1402 +a1403 = 1403 +a1404 = 1404 +a1405 = 1405 +a1406 = 1406 +a1407 = 1407 +a1408 = 1408 +a1409 = 1409 +a1410 = 1410 +a1411 = 1411 +a1412 = 1412 +a1413 = 1413 +a1414 = 1414 +a1415 = 1415 +a1416 = 1416 +a1417 = 1417 +a1418 = 1418 +a1419 = 1419 +a1420 = 1420 +a1421 = 1421 +a1422 = 1422 +a1423 = 1423 +a1424 = 1424 +a1425 = 1425 +a1426 = 1426 +a1427 = 1427 +a1428 = 1428 +a1429 = 1429 +a1430 = 1430 +a1431 = 1431 +a1432 = 1432 +a1433 = 1433 +a1434 = 1434 +a1435 = 1435 +a1436 = 1436 +a1437 = 1437 +a1438 = 1438 +a1439 = 1439 +a1440 = 1440 +a1441 = 1441 +a1442 = 1442 +a1443 = 1443 +a1444 = 1444 +a1445 = 1445 +a1446 = 1446 +a1447 = 1447 +a1448 = 1448 +a1449 = 1449 +a1450 = 1450 +a1451 = 1451 +a1452 = 1452 +a1453 = 1453 +a1454 = 1454 +a1455 = 1455 +a1456 = 1456 +a1457 = 1457 +a1458 = 1458 +a1459 = 1459 +a1460 = 1460 +a1461 = 1461 +a1462 = 1462 +a1463 = 1463 +a1464 = 1464 +a1465 = 1465 +a1466 = 1466 +a1467 = 1467 +a1468 = 1468 +a1469 = 1469 +a1470 = 1470 +a1471 = 1471 +a1472 = 1472 +a1473 = 1473 +a1474 = 1474 +a1475 = 1475 +a1476 = 1476 +a1477 = 1477 +a1478 = 1478 +a1479 = 1479 +a1480 = 1480 +a1481 = 1481 +a1482 = 1482 +a1483 = 1483 +a1484 = 1484 +a1485 = 1485 +a1486 = 1486 +a1487 = 1487 +a1488 = 1488 +a1489 = 1489 +a1490 = 1490 +a1491 = 1491 +a1492 = 1492 +a1493 = 1493 +a1494 = 1494 +a1495 = 1495 +a1496 = 1496 +a1497 = 1497 +a1498 = 1498 +a1499 = 1499 +a1500 = 1500 +a1501 = 1501 +a1502 = 1502 +a1503 = 1503 +a1504 = 1504 +a1505 = 1505 +a1506 = 1506 +a1507 = 1507 +a1508 = 1508 +a1509 = 1509 +a1510 = 1510 +a1511 = 1511 +a1512 = 1512 +a1513 = 1513 +a1514 = 1514 +a1515 = 1515 +a1516 = 1516 +a1517 = 1517 +a1518 = 1518 +a1519 = 1519 +a1520 = 1520 +a1521 = 1521 +a1522 = 1522 +a1523 = 1523 +a1524 = 1524 +a1525 = 1525 +a1526 = 1526 +a1527 = 1527 +a1528 = 1528 +a1529 = 1529 +a1530 = 1530 +a1531 = 1531 +a1532 = 1532 +a1533 = 1533 +a1534 = 1534 +a1535 = 1535 +a1536 = 1536 +a1537 = 1537 +a1538 = 1538 +a1539 = 1539 +a1540 = 1540 +a1541 = 1541 +a1542 = 1542 +a1543 = 1543 +a1544 = 1544 +a1545 = 1545 +a1546 = 1546 +a1547 = 1547 +a1548 = 1548 +a1549 = 1549 +a1550 = 1550 +a1551 = 1551 +a1552 = 1552 +a1553 = 1553 +a1554 = 1554 +a1555 = 1555 +a1556 = 1556 +a1557 = 1557 +a1558 = 1558 +a1559 = 1559 +a1560 = 1560 +a1561 = 1561 +a1562 = 1562 +a1563 = 1563 +a1564 = 1564 +a1565 = 1565 +a1566 = 1566 +a1567 = 1567 +a1568 = 1568 +a1569 = 1569 +a1570 = 1570 +a1571 = 1571 +a1572 = 1572 +a1573 = 1573 +a1574 = 1574 +a1575 = 1575 +a1576 = 1576 +a1577 = 1577 +a1578 = 1578 +a1579 = 1579 +a1580 = 1580 +a1581 = 1581 +a1582 = 1582 +a1583 = 1583 +a1584 = 1584 +a1585 = 1585 +a1586 = 1586 +a1587 = 1587 +a1588 = 1588 +a1589 = 1589 +a1590 = 1590 +a1591 = 1591 +a1592 = 1592 +a1593 = 1593 +a1594 = 1594 +a1595 = 1595 +a1596 = 1596 +a1597 = 1597 +a1598 = 1598 +a1599 = 1599 +a1600 = 1600 +a1601 = 1601 +a1602 = 1602 +a1603 = 1603 +a1604 = 1604 +a1605 = 1605 +a1606 = 1606 +a1607 = 1607 +a1608 = 1608 +a1609 = 1609 +a1610 = 1610 +a1611 = 1611 +a1612 = 1612 +a1613 = 1613 +a1614 = 1614 +a1615 = 1615 +a1616 = 1616 +a1617 = 1617 +a1618 = 1618 +a1619 = 1619 +a1620 = 1620 +a1621 = 1621 +a1622 = 1622 +a1623 = 1623 +a1624 = 1624 +a1625 = 1625 +a1626 = 1626 +a1627 = 1627 +a1628 = 1628 +a1629 = 1629 +a1630 = 1630 +a1631 = 1631 +a1632 = 1632 +a1633 = 1633 +a1634 = 1634 +a1635 = 1635 +a1636 = 1636 +a1637 = 1637 +a1638 = 1638 +a1639 = 1639 +a1640 = 1640 +a1641 = 1641 +a1642 = 1642 +a1643 = 1643 +a1644 = 1644 +a1645 = 1645 +a1646 = 1646 +a1647 = 1647 +a1648 = 1648 +a1649 = 1649 +a1650 = 1650 +a1651 = 1651 +a1652 = 1652 +a1653 = 1653 +a1654 = 1654 +a1655 = 1655 +a1656 = 1656 +a1657 = 1657 +a1658 = 1658 +a1659 = 1659 +a1660 = 1660 +a1661 = 1661 +a1662 = 1662 +a1663 = 1663 +a1664 = 1664 +a1665 = 1665 +a1666 = 1666 +a1667 = 1667 +a1668 = 1668 +a1669 = 1669 +a1670 = 1670 +a1671 = 1671 +a1672 = 1672 +a1673 = 1673 +a1674 = 1674 +a1675 = 1675 +a1676 = 1676 +a1677 = 1677 +a1678 = 1678 +a1679 = 1679 +a1680 = 1680 +a1681 = 1681 +a1682 = 1682 +a1683 = 1683 +a1684 = 1684 +a1685 = 1685 +a1686 = 1686 +a1687 = 1687 +a1688 = 1688 +a1689 = 1689 +a1690 = 1690 +a1691 = 1691 +a1692 = 1692 +a1693 = 1693 +a1694 = 1694 +a1695 = 1695 +a1696 = 1696 +a1697 = 1697 +a1698 = 1698 +a1699 = 1699 +a1700 = 1700 +a1701 = 1701 +a1702 = 1702 +a1703 = 1703 +a1704 = 1704 +a1705 = 1705 +a1706 = 1706 +a1707 = 1707 +a1708 = 1708 +a1709 = 1709 +a1710 = 1710 +a1711 = 1711 +a1712 = 1712 +a1713 = 1713 +a1714 = 1714 +a1715 = 1715 +a1716 = 1716 +a1717 = 1717 +a1718 = 1718 +a1719 = 1719 +a1720 = 1720 +a1721 = 1721 +a1722 = 1722 +a1723 = 1723 +a1724 = 1724 +a1725 = 1725 +a1726 = 1726 +a1727 = 1727 +a1728 = 1728 +a1729 = 1729 +a1730 = 1730 +a1731 = 1731 +a1732 = 1732 +a1733 = 1733 +a1734 = 1734 +a1735 = 1735 +a1736 = 1736 +a1737 = 1737 +a1738 = 1738 +a1739 = 1739 +a1740 = 1740 +a1741 = 1741 +a1742 = 1742 +a1743 = 1743 +a1744 = 1744 +a1745 = 1745 +a1746 = 1746 +a1747 = 1747 +a1748 = 1748 +a1749 = 1749 +a1750 = 1750 +a1751 = 1751 +a1752 = 1752 +a1753 = 1753 +a1754 = 1754 +a1755 = 1755 +a1756 = 1756 +a1757 = 1757 +a1758 = 1758 +a1759 = 1759 +a1760 = 1760 +a1761 = 1761 +a1762 = 1762 +a1763 = 1763 +a1764 = 1764 +a1765 = 1765 +a1766 = 1766 +a1767 = 1767 +a1768 = 1768 +a1769 = 1769 +a1770 = 1770 +a1771 = 1771 +a1772 = 1772 +a1773 = 1773 +a1774 = 1774 +a1775 = 1775 +a1776 = 1776 +a1777 = 1777 +a1778 = 1778 +a1779 = 1779 +a1780 = 1780 +a1781 = 1781 +a1782 = 1782 +a1783 = 1783 +a1784 = 1784 +a1785 = 1785 +a1786 = 1786 +a1787 = 1787 +a1788 = 1788 +a1789 = 1789 +a1790 = 1790 +a1791 = 1791 +a1792 = 1792 +a1793 = 1793 +a1794 = 1794 +a1795 = 1795 +a1796 = 1796 +a1797 = 1797 +a1798 = 1798 +a1799 = 1799 +a1800 = 1800 +a1801 = 1801 +a1802 = 1802 +a1803 = 1803 +a1804 = 1804 +a1805 = 1805 +a1806 = 1806 +a1807 = 1807 +a1808 = 1808 +a1809 = 1809 +a1810 = 1810 +a1811 = 1811 +a1812 = 1812 +a1813 = 1813 +a1814 = 1814 +a1815 = 1815 +a1816 = 1816 +a1817 = 1817 +a1818 = 1818 +a1819 = 1819 +a1820 = 1820 +a1821 = 1821 +a1822 = 1822 +a1823 = 1823 +a1824 = 1824 +a1825 = 1825 +a1826 = 1826 +a1827 = 1827 +a1828 = 1828 +a1829 = 1829 +a1830 = 1830 +a1831 = 1831 +a1832 = 1832 +a1833 = 1833 +a1834 = 1834 +a1835 = 1835 +a1836 = 1836 +a1837 = 1837 +a1838 = 1838 +a1839 = 1839 +a1840 = 1840 +a1841 = 1841 +a1842 = 1842 +a1843 = 1843 +a1844 = 1844 +a1845 = 1845 +a1846 = 1846 +a1847 = 1847 +a1848 = 1848 +a1849 = 1849 +a1850 = 1850 +a1851 = 1851 +a1852 = 1852 +a1853 = 1853 +a1854 = 1854 +a1855 = 1855 +a1856 = 1856 +a1857 = 1857 +a1858 = 1858 +a1859 = 1859 +a1860 = 1860 +a1861 = 1861 +a1862 = 1862 +a1863 = 1863 +a1864 = 1864 +a1865 = 1865 +a1866 = 1866 +a1867 = 1867 +a1868 = 1868 +a1869 = 1869 +a1870 = 1870 +a1871 = 1871 +a1872 = 1872 +a1873 = 1873 +a1874 = 1874 +a1875 = 1875 +a1876 = 1876 +a1877 = 1877 +a1878 = 1878 +a1879 = 1879 +a1880 = 1880 +a1881 = 1881 +a1882 = 1882 +a1883 = 1883 +a1884 = 1884 +a1885 = 1885 +a1886 = 1886 +a1887 = 1887 +a1888 = 1888 +a1889 = 1889 +a1890 = 1890 +a1891 = 1891 +a1892 = 1892 +a1893 = 1893 +a1894 = 1894 +a1895 = 1895 +a1896 = 1896 +a1897 = 1897 +a1898 = 1898 +a1899 = 1899 +a1900 = 1900 +a1901 = 1901 +a1902 = 1902 +a1903 = 1903 +a1904 = 1904 +a1905 = 1905 +a1906 = 1906 +a1907 = 1907 +a1908 = 1908 +a1909 = 1909 +a1910 = 1910 +a1911 = 1911 +a1912 = 1912 +a1913 = 1913 +a1914 = 1914 +a1915 = 1915 +a1916 = 1916 +a1917 = 1917 +a1918 = 1918 +a1919 = 1919 +a1920 = 1920 +a1921 = 1921 +a1922 = 1922 +a1923 = 1923 +a1924 = 1924 +a1925 = 1925 +a1926 = 1926 +a1927 = 1927 +a1928 = 1928 +a1929 = 1929 +a1930 = 1930 +a1931 = 1931 +a1932 = 1932 +a1933 = 1933 +a1934 = 1934 +a1935 = 1935 +a1936 = 1936 +a1937 = 1937 +a1938 = 1938 +a1939 = 1939 +a1940 = 1940 +a1941 = 1941 +a1942 = 1942 +a1943 = 1943 +a1944 = 1944 +a1945 = 1945 +a1946 = 1946 +a1947 = 1947 +a1948 = 1948 +a1949 = 1949 +a1950 = 1950 +a1951 = 1951 +a1952 = 1952 +a1953 = 1953 +a1954 = 1954 +a1955 = 1955 +a1956 = 1956 +a1957 = 1957 +a1958 = 1958 +a1959 = 1959 +a1960 = 1960 +a1961 = 1961 +a1962 = 1962 +a1963 = 1963 +a1964 = 1964 +a1965 = 1965 +a1966 = 1966 +a1967 = 1967 +a1968 = 1968 +a1969 = 1969 +a1970 = 1970 +a1971 = 1971 +a1972 = 1972 +a1973 = 1973 +a1974 = 1974 +a1975 = 1975 +a1976 = 1976 +a1977 = 1977 +a1978 = 1978 +a1979 = 1979 +a1980 = 1980 +a1981 = 1981 +a1982 = 1982 +a1983 = 1983 +a1984 = 1984 +a1985 = 1985 +a1986 = 1986 +a1987 = 1987 +a1988 = 1988 +a1989 = 1989 +a1990 = 1990 +a1991 = 1991 +a1992 = 1992 +a1993 = 1993 +a1994 = 1994 +a1995 = 1995 +a1996 = 1996 +a1997 = 1997 +a1998 = 1998 +a1999 = 1999 +a2000 = 2000 +a2001 = 2001 +a2002 = 2002 +a2003 = 2003 +a2004 = 2004 +a2005 = 2005 +a2006 = 2006 +a2007 = 2007 +a2008 = 2008 +a2009 = 2009 +a2010 = 2010 +a2011 = 2011 +a2012 = 2012 +a2013 = 2013 +a2014 = 2014 +a2015 = 2015 +a2016 = 2016 +a2017 = 2017 +a2018 = 2018 +a2019 = 2019 +a2020 = 2020 +a2021 = 2021 +a2022 = 2022 +a2023 = 2023 +a2024 = 2024 +a2025 = 2025 +a2026 = 2026 +a2027 = 2027 +a2028 = 2028 +a2029 = 2029 +a2030 = 2030 +a2031 = 2031 +a2032 = 2032 +a2033 = 2033 +a2034 = 2034 +a2035 = 2035 +a2036 = 2036 +a2037 = 2037 +a2038 = 2038 +a2039 = 2039 +a2040 = 2040 +a2041 = 2041 +a2042 = 2042 +a2043 = 2043 +a2044 = 2044 +a2045 = 2045 +a2046 = 2046 +a2047 = 2047 +a2048 = 2048 +a2049 = 2049 +a2050 = 2050 +a2051 = 2051 +a2052 = 2052 +a2053 = 2053 +a2054 = 2054 +a2055 = 2055 +a2056 = 2056 +a2057 = 2057 +a2058 = 2058 +a2059 = 2059 +a2060 = 2060 +a2061 = 2061 +a2062 = 2062 +a2063 = 2063 +a2064 = 2064 +a2065 = 2065 +a2066 = 2066 +a2067 = 2067 +a2068 = 2068 +a2069 = 2069 +a2070 = 2070 +a2071 = 2071 +a2072 = 2072 +a2073 = 2073 +a2074 = 2074 +a2075 = 2075 +a2076 = 2076 +a2077 = 2077 +a2078 = 2078 +a2079 = 2079 +a2080 = 2080 +a2081 = 2081 +a2082 = 2082 +a2083 = 2083 +a2084 = 2084 +a2085 = 2085 +a2086 = 2086 +a2087 = 2087 +a2088 = 2088 +a2089 = 2089 +a2090 = 2090 +a2091 = 2091 +a2092 = 2092 +a2093 = 2093 +a2094 = 2094 +a2095 = 2095 +a2096 = 2096 +a2097 = 2097 +a2098 = 2098 +a2099 = 2099 +a2100 = 2100 +a2101 = 2101 +a2102 = 2102 +a2103 = 2103 +a2104 = 2104 +a2105 = 2105 +a2106 = 2106 +a2107 = 2107 +a2108 = 2108 +a2109 = 2109 +a2110 = 2110 +a2111 = 2111 +a2112 = 2112 +a2113 = 2113 +a2114 = 2114 +a2115 = 2115 +a2116 = 2116 +a2117 = 2117 +a2118 = 2118 +a2119 = 2119 +a2120 = 2120 +a2121 = 2121 +a2122 = 2122 +a2123 = 2123 +a2124 = 2124 +a2125 = 2125 +a2126 = 2126 +a2127 = 2127 +a2128 = 2128 +a2129 = 2129 +a2130 = 2130 +a2131 = 2131 +a2132 = 2132 +a2133 = 2133 +a2134 = 2134 +a2135 = 2135 +a2136 = 2136 +a2137 = 2137 +a2138 = 2138 +a2139 = 2139 +a2140 = 2140 +a2141 = 2141 +a2142 = 2142 +a2143 = 2143 +a2144 = 2144 +a2145 = 2145 +a2146 = 2146 +a2147 = 2147 +a2148 = 2148 +a2149 = 2149 +a2150 = 2150 +a2151 = 2151 +a2152 = 2152 +a2153 = 2153 +a2154 = 2154 +a2155 = 2155 +a2156 = 2156 +a2157 = 2157 +a2158 = 2158 +a2159 = 2159 +a2160 = 2160 +a2161 = 2161 +a2162 = 2162 +a2163 = 2163 +a2164 = 2164 +a2165 = 2165 +a2166 = 2166 +a2167 = 2167 +a2168 = 2168 +a2169 = 2169 +a2170 = 2170 +a2171 = 2171 +a2172 = 2172 +a2173 = 2173 +a2174 = 2174 +a2175 = 2175 +a2176 = 2176 +a2177 = 2177 +a2178 = 2178 +a2179 = 2179 +a2180 = 2180 +a2181 = 2181 +a2182 = 2182 +a2183 = 2183 +a2184 = 2184 +a2185 = 2185 +a2186 = 2186 +a2187 = 2187 +a2188 = 2188 +a2189 = 2189 +a2190 = 2190 +a2191 = 2191 +a2192 = 2192 +a2193 = 2193 +a2194 = 2194 +a2195 = 2195 +a2196 = 2196 +a2197 = 2197 +a2198 = 2198 +a2199 = 2199 +a2200 = 2200 +a2201 = 2201 +a2202 = 2202 +a2203 = 2203 +a2204 = 2204 +a2205 = 2205 +a2206 = 2206 +a2207 = 2207 +a2208 = 2208 +a2209 = 2209 +a2210 = 2210 +a2211 = 2211 +a2212 = 2212 +a2213 = 2213 +a2214 = 2214 +a2215 = 2215 +a2216 = 2216 +a2217 = 2217 +a2218 = 2218 +a2219 = 2219 +a2220 = 2220 +a2221 = 2221 +a2222 = 2222 +a2223 = 2223 +a2224 = 2224 +a2225 = 2225 +a2226 = 2226 +a2227 = 2227 +a2228 = 2228 +a2229 = 2229 +a2230 = 2230 +a2231 = 2231 +a2232 = 2232 +a2233 = 2233 +a2234 = 2234 +a2235 = 2235 +a2236 = 2236 +a2237 = 2237 +a2238 = 2238 +a2239 = 2239 +a2240 = 2240 +a2241 = 2241 +a2242 = 2242 +a2243 = 2243 +a2244 = 2244 +a2245 = 2245 +a2246 = 2246 +a2247 = 2247 +a2248 = 2248 +a2249 = 2249 +a2250 = 2250 +a2251 = 2251 +a2252 = 2252 +a2253 = 2253 +a2254 = 2254 +a2255 = 2255 +a2256 = 2256 +a2257 = 2257 +a2258 = 2258 +a2259 = 2259 +a2260 = 2260 +a2261 = 2261 +a2262 = 2262 +a2263 = 2263 +a2264 = 2264 +a2265 = 2265 +a2266 = 2266 +a2267 = 2267 +a2268 = 2268 +a2269 = 2269 +a2270 = 2270 +a2271 = 2271 +a2272 = 2272 +a2273 = 2273 +a2274 = 2274 +a2275 = 2275 +a2276 = 2276 +a2277 = 2277 +a2278 = 2278 +a2279 = 2279 +a2280 = 2280 +a2281 = 2281 +a2282 = 2282 +a2283 = 2283 +a2284 = 2284 +a2285 = 2285 +a2286 = 2286 +a2287 = 2287 +a2288 = 2288 +a2289 = 2289 +a2290 = 2290 +a2291 = 2291 +a2292 = 2292 +a2293 = 2293 +a2294 = 2294 +a2295 = 2295 +a2296 = 2296 +a2297 = 2297 +a2298 = 2298 +a2299 = 2299 +a2300 = 2300 +a2301 = 2301 +a2302 = 2302 +a2303 = 2303 +a2304 = 2304 +a2305 = 2305 +a2306 = 2306 +a2307 = 2307 +a2308 = 2308 +a2309 = 2309 +a2310 = 2310 +a2311 = 2311 +a2312 = 2312 +a2313 = 2313 +a2314 = 2314 +a2315 = 2315 +a2316 = 2316 +a2317 = 2317 +a2318 = 2318 +a2319 = 2319 +a2320 = 2320 +a2321 = 2321 +a2322 = 2322 +a2323 = 2323 +a2324 = 2324 +a2325 = 2325 +a2326 = 2326 +a2327 = 2327 +a2328 = 2328 +a2329 = 2329 +a2330 = 2330 +a2331 = 2331 +a2332 = 2332 +a2333 = 2333 +a2334 = 2334 +a2335 = 2335 +a2336 = 2336 +a2337 = 2337 +a2338 = 2338 +a2339 = 2339 +a2340 = 2340 +a2341 = 2341 +a2342 = 2342 +a2343 = 2343 +a2344 = 2344 +a2345 = 2345 +a2346 = 2346 +a2347 = 2347 +a2348 = 2348 +a2349 = 2349 +a2350 = 2350 +a2351 = 2351 +a2352 = 2352 +a2353 = 2353 +a2354 = 2354 +a2355 = 2355 +a2356 = 2356 +a2357 = 2357 +a2358 = 2358 +a2359 = 2359 +a2360 = 2360 +a2361 = 2361 +a2362 = 2362 +a2363 = 2363 +a2364 = 2364 +a2365 = 2365 +a2366 = 2366 +a2367 = 2367 +a2368 = 2368 +a2369 = 2369 +a2370 = 2370 +a2371 = 2371 +a2372 = 2372 +a2373 = 2373 +a2374 = 2374 +a2375 = 2375 +a2376 = 2376 +a2377 = 2377 +a2378 = 2378 +a2379 = 2379 +a2380 = 2380 +a2381 = 2381 +a2382 = 2382 +a2383 = 2383 +a2384 = 2384 +a2385 = 2385 +a2386 = 2386 +a2387 = 2387 +a2388 = 2388 +a2389 = 2389 +a2390 = 2390 +a2391 = 2391 +a2392 = 2392 +a2393 = 2393 +a2394 = 2394 +a2395 = 2395 +a2396 = 2396 +a2397 = 2397 +a2398 = 2398 +a2399 = 2399 +a2400 = 2400 +a2401 = 2401 +a2402 = 2402 +a2403 = 2403 +a2404 = 2404 +a2405 = 2405 +a2406 = 2406 +a2407 = 2407 +a2408 = 2408 +a2409 = 2409 +a2410 = 2410 +a2411 = 2411 +a2412 = 2412 +a2413 = 2413 +a2414 = 2414 +a2415 = 2415 +a2416 = 2416 +a2417 = 2417 +a2418 = 2418 +a2419 = 2419 +a2420 = 2420 +a2421 = 2421 +a2422 = 2422 +a2423 = 2423 +a2424 = 2424 +a2425 = 2425 +a2426 = 2426 +a2427 = 2427 +a2428 = 2428 +a2429 = 2429 +a2430 = 2430 +a2431 = 2431 +a2432 = 2432 +a2433 = 2433 +a2434 = 2434 +a2435 = 2435 +a2436 = 2436 +a2437 = 2437 +a2438 = 2438 +a2439 = 2439 +a2440 = 2440 +a2441 = 2441 +a2442 = 2442 +a2443 = 2443 +a2444 = 2444 +a2445 = 2445 +a2446 = 2446 +a2447 = 2447 +a2448 = 2448 +a2449 = 2449 +a2450 = 2450 +a2451 = 2451 +a2452 = 2452 +a2453 = 2453 +a2454 = 2454 +a2455 = 2455 +a2456 = 2456 +a2457 = 2457 +a2458 = 2458 +a2459 = 2459 +a2460 = 2460 +a2461 = 2461 +a2462 = 2462 +a2463 = 2463 +a2464 = 2464 +a2465 = 2465 +a2466 = 2466 +a2467 = 2467 +a2468 = 2468 +a2469 = 2469 +a2470 = 2470 +a2471 = 2471 +a2472 = 2472 +a2473 = 2473 +a2474 = 2474 +a2475 = 2475 +a2476 = 2476 +a2477 = 2477 +a2478 = 2478 +a2479 = 2479 +a2480 = 2480 +a2481 = 2481 +a2482 = 2482 +a2483 = 2483 +a2484 = 2484 +a2485 = 2485 +a2486 = 2486 +a2487 = 2487 +a2488 = 2488 +a2489 = 2489 +a2490 = 2490 +a2491 = 2491 +a2492 = 2492 +a2493 = 2493 +a2494 = 2494 +a2495 = 2495 +a2496 = 2496 +a2497 = 2497 +a2498 = 2498 +a2499 = 2499 +a2500 = 2500 +a2501 = 2501 +a2502 = 2502 +a2503 = 2503 +a2504 = 2504 +a2505 = 2505 +a2506 = 2506 +a2507 = 2507 +a2508 = 2508 +a2509 = 2509 +a2510 = 2510 +a2511 = 2511 +a2512 = 2512 +a2513 = 2513 +a2514 = 2514 +a2515 = 2515 +a2516 = 2516 +a2517 = 2517 +a2518 = 2518 +a2519 = 2519 +a2520 = 2520 +a2521 = 2521 +a2522 = 2522 +a2523 = 2523 +a2524 = 2524 +a2525 = 2525 +a2526 = 2526 +a2527 = 2527 +a2528 = 2528 +a2529 = 2529 +a2530 = 2530 +a2531 = 2531 +a2532 = 2532 +a2533 = 2533 +a2534 = 2534 +a2535 = 2535 +a2536 = 2536 +a2537 = 2537 +a2538 = 2538 +a2539 = 2539 +a2540 = 2540 +a2541 = 2541 +a2542 = 2542 +a2543 = 2543 +a2544 = 2544 +a2545 = 2545 +a2546 = 2546 +a2547 = 2547 +a2548 = 2548 +a2549 = 2549 +a2550 = 2550 +a2551 = 2551 +a2552 = 2552 +a2553 = 2553 +a2554 = 2554 +a2555 = 2555 +a2556 = 2556 +a2557 = 2557 +a2558 = 2558 +a2559 = 2559 +a2560 = 2560 +a2561 = 2561 +a2562 = 2562 +a2563 = 2563 +a2564 = 2564 +a2565 = 2565 +a2566 = 2566 +a2567 = 2567 +a2568 = 2568 +a2569 = 2569 +a2570 = 2570 +a2571 = 2571 +a2572 = 2572 +a2573 = 2573 +a2574 = 2574 +a2575 = 2575 +a2576 = 2576 +a2577 = 2577 +a2578 = 2578 +a2579 = 2579 +a2580 = 2580 +a2581 = 2581 +a2582 = 2582 +a2583 = 2583 +a2584 = 2584 +a2585 = 2585 +a2586 = 2586 +a2587 = 2587 +a2588 = 2588 +a2589 = 2589 +a2590 = 2590 +a2591 = 2591 +a2592 = 2592 +a2593 = 2593 +a2594 = 2594 +a2595 = 2595 +a2596 = 2596 +a2597 = 2597 +a2598 = 2598 +a2599 = 2599 +a2600 = 2600 +a2601 = 2601 +a2602 = 2602 +a2603 = 2603 +a2604 = 2604 +a2605 = 2605 +a2606 = 2606 +a2607 = 2607 +a2608 = 2608 +a2609 = 2609 +a2610 = 2610 +a2611 = 2611 +a2612 = 2612 +a2613 = 2613 +a2614 = 2614 +a2615 = 2615 +a2616 = 2616 +a2617 = 2617 +a2618 = 2618 +a2619 = 2619 +a2620 = 2620 +a2621 = 2621 +a2622 = 2622 +a2623 = 2623 +a2624 = 2624 +a2625 = 2625 +a2626 = 2626 +a2627 = 2627 +a2628 = 2628 +a2629 = 2629 +a2630 = 2630 +a2631 = 2631 +a2632 = 2632 +a2633 = 2633 +a2634 = 2634 +a2635 = 2635 +a2636 = 2636 +a2637 = 2637 +a2638 = 2638 +a2639 = 2639 +a2640 = 2640 +a2641 = 2641 +a2642 = 2642 +a2643 = 2643 +a2644 = 2644 +a2645 = 2645 +a2646 = 2646 +a2647 = 2647 +a2648 = 2648 +a2649 = 2649 +a2650 = 2650 +a2651 = 2651 +a2652 = 2652 +a2653 = 2653 +a2654 = 2654 +a2655 = 2655 +a2656 = 2656 +a2657 = 2657 +a2658 = 2658 +a2659 = 2659 +a2660 = 2660 +a2661 = 2661 +a2662 = 2662 +a2663 = 2663 +a2664 = 2664 +a2665 = 2665 +a2666 = 2666 +a2667 = 2667 +a2668 = 2668 +a2669 = 2669 +a2670 = 2670 +a2671 = 2671 +a2672 = 2672 +a2673 = 2673 +a2674 = 2674 +a2675 = 2675 +a2676 = 2676 +a2677 = 2677 +a2678 = 2678 +a2679 = 2679 +a2680 = 2680 +a2681 = 2681 +a2682 = 2682 +a2683 = 2683 +a2684 = 2684 +a2685 = 2685 +a2686 = 2686 +a2687 = 2687 +a2688 = 2688 +a2689 = 2689 +a2690 = 2690 +a2691 = 2691 +a2692 = 2692 +a2693 = 2693 +a2694 = 2694 +a2695 = 2695 +a2696 = 2696 +a2697 = 2697 +a2698 = 2698 +a2699 = 2699 +a2700 = 2700 +a2701 = 2701 +a2702 = 2702 +a2703 = 2703 +a2704 = 2704 +a2705 = 2705 +a2706 = 2706 +a2707 = 2707 +a2708 = 2708 +a2709 = 2709 +a2710 = 2710 +a2711 = 2711 +a2712 = 2712 +a2713 = 2713 +a2714 = 2714 +a2715 = 2715 +a2716 = 2716 +a2717 = 2717 +a2718 = 2718 +a2719 = 2719 +a2720 = 2720 +a2721 = 2721 +a2722 = 2722 +a2723 = 2723 +a2724 = 2724 +a2725 = 2725 +a2726 = 2726 +a2727 = 2727 +a2728 = 2728 +a2729 = 2729 +a2730 = 2730 +a2731 = 2731 +a2732 = 2732 +a2733 = 2733 +a2734 = 2734 +a2735 = 2735 +a2736 = 2736 +a2737 = 2737 +a2738 = 2738 +a2739 = 2739 +a2740 = 2740 +a2741 = 2741 +a2742 = 2742 +a2743 = 2743 +a2744 = 2744 +a2745 = 2745 +a2746 = 2746 +a2747 = 2747 +a2748 = 2748 +a2749 = 2749 +a2750 = 2750 +a2751 = 2751 +a2752 = 2752 +a2753 = 2753 +a2754 = 2754 +a2755 = 2755 +a2756 = 2756 +a2757 = 2757 +a2758 = 2758 +a2759 = 2759 +a2760 = 2760 +a2761 = 2761 +a2762 = 2762 +a2763 = 2763 +a2764 = 2764 +a2765 = 2765 +a2766 = 2766 +a2767 = 2767 +a2768 = 2768 +a2769 = 2769 +a2770 = 2770 +a2771 = 2771 +a2772 = 2772 +a2773 = 2773 +a2774 = 2774 +a2775 = 2775 +a2776 = 2776 +a2777 = 2777 +a2778 = 2778 +a2779 = 2779 +a2780 = 2780 +a2781 = 2781 +a2782 = 2782 +a2783 = 2783 +a2784 = 2784 +a2785 = 2785 +a2786 = 2786 +a2787 = 2787 +a2788 = 2788 +a2789 = 2789 +a2790 = 2790 +a2791 = 2791 +a2792 = 2792 +a2793 = 2793 +a2794 = 2794 +a2795 = 2795 +a2796 = 2796 +a2797 = 2797 +a2798 = 2798 +a2799 = 2799 +a2800 = 2800 +a2801 = 2801 +a2802 = 2802 +a2803 = 2803 +a2804 = 2804 +a2805 = 2805 +a2806 = 2806 +a2807 = 2807 +a2808 = 2808 +a2809 = 2809 +a2810 = 2810 +a2811 = 2811 +a2812 = 2812 +a2813 = 2813 +a2814 = 2814 +a2815 = 2815 +a2816 = 2816 +a2817 = 2817 +a2818 = 2818 +a2819 = 2819 +a2820 = 2820 +a2821 = 2821 +a2822 = 2822 +a2823 = 2823 +a2824 = 2824 +a2825 = 2825 +a2826 = 2826 +a2827 = 2827 +a2828 = 2828 +a2829 = 2829 +a2830 = 2830 +a2831 = 2831 +a2832 = 2832 +a2833 = 2833 +a2834 = 2834 +a2835 = 2835 +a2836 = 2836 +a2837 = 2837 +a2838 = 2838 +a2839 = 2839 +a2840 = 2840 +a2841 = 2841 +a2842 = 2842 +a2843 = 2843 +a2844 = 2844 +a2845 = 2845 +a2846 = 2846 +a2847 = 2847 +a2848 = 2848 +a2849 = 2849 +a2850 = 2850 +a2851 = 2851 +a2852 = 2852 +a2853 = 2853 +a2854 = 2854 +a2855 = 2855 +a2856 = 2856 +a2857 = 2857 +a2858 = 2858 +a2859 = 2859 +a2860 = 2860 +a2861 = 2861 +a2862 = 2862 +a2863 = 2863 +a2864 = 2864 +a2865 = 2865 +a2866 = 2866 +a2867 = 2867 +a2868 = 2868 +a2869 = 2869 +a2870 = 2870 +a2871 = 2871 +a2872 = 2872 +a2873 = 2873 +a2874 = 2874 +a2875 = 2875 +a2876 = 2876 +a2877 = 2877 +a2878 = 2878 +a2879 = 2879 +a2880 = 2880 +a2881 = 2881 +a2882 = 2882 +a2883 = 2883 +a2884 = 2884 +a2885 = 2885 +a2886 = 2886 +a2887 = 2887 +a2888 = 2888 +a2889 = 2889 +a2890 = 2890 +a2891 = 2891 +a2892 = 2892 +a2893 = 2893 +a2894 = 2894 +a2895 = 2895 +a2896 = 2896 +a2897 = 2897 +a2898 = 2898 +a2899 = 2899 +a2900 = 2900 +a2901 = 2901 +a2902 = 2902 +a2903 = 2903 +a2904 = 2904 +a2905 = 2905 +a2906 = 2906 +a2907 = 2907 +a2908 = 2908 +a2909 = 2909 +a2910 = 2910 +a2911 = 2911 +a2912 = 2912 +a2913 = 2913 +a2914 = 2914 +a2915 = 2915 +a2916 = 2916 +a2917 = 2917 +a2918 = 2918 +a2919 = 2919 +a2920 = 2920 +a2921 = 2921 +a2922 = 2922 +a2923 = 2923 +a2924 = 2924 +a2925 = 2925 +a2926 = 2926 +a2927 = 2927 +a2928 = 2928 +a2929 = 2929 +a2930 = 2930 +a2931 = 2931 +a2932 = 2932 +a2933 = 2933 +a2934 = 2934 +a2935 = 2935 +a2936 = 2936 +a2937 = 2937 +a2938 = 2938 +a2939 = 2939 +a2940 = 2940 +a2941 = 2941 +a2942 = 2942 +a2943 = 2943 +a2944 = 2944 +a2945 = 2945 +a2946 = 2946 +a2947 = 2947 +a2948 = 2948 +a2949 = 2949 +a2950 = 2950 +a2951 = 2951 +a2952 = 2952 +a2953 = 2953 +a2954 = 2954 +a2955 = 2955 +a2956 = 2956 +a2957 = 2957 +a2958 = 2958 +a2959 = 2959 +a2960 = 2960 +a2961 = 2961 +a2962 = 2962 +a2963 = 2963 +a2964 = 2964 +a2965 = 2965 +a2966 = 2966 +a2967 = 2967 +a2968 = 2968 +a2969 = 2969 +a2970 = 2970 +a2971 = 2971 +a2972 = 2972 +a2973 = 2973 +a2974 = 2974 +a2975 = 2975 +a2976 = 2976 +a2977 = 2977 +a2978 = 2978 +a2979 = 2979 +a2980 = 2980 +a2981 = 2981 +a2982 = 2982 +a2983 = 2983 +a2984 = 2984 +a2985 = 2985 +a2986 = 2986 +a2987 = 2987 +a2988 = 2988 +a2989 = 2989 +a2990 = 2990 +a2991 = 2991 +a2992 = 2992 +a2993 = 2993 +a2994 = 2994 +a2995 = 2995 +a2996 = 2996 +a2997 = 2997 +a2998 = 2998 +a2999 = 2999 +a3000 = 3000 +a3001 = 3001 +a3002 = 3002 +a3003 = 3003 +a3004 = 3004 +a3005 = 3005 +a3006 = 3006 +a3007 = 3007 +a3008 = 3008 +a3009 = 3009 +a3010 = 3010 +a3011 = 3011 +a3012 = 3012 +a3013 = 3013 +a3014 = 3014 +a3015 = 3015 +a3016 = 3016 +a3017 = 3017 +a3018 = 3018 +a3019 = 3019 +a3020 = 3020 +a3021 = 3021 +a3022 = 3022 +a3023 = 3023 +a3024 = 3024 +a3025 = 3025 +a3026 = 3026 +a3027 = 3027 +a3028 = 3028 +a3029 = 3029 +a3030 = 3030 +a3031 = 3031 +a3032 = 3032 +a3033 = 3033 +a3034 = 3034 +a3035 = 3035 +a3036 = 3036 +a3037 = 3037 +a3038 = 3038 +a3039 = 3039 +a3040 = 3040 +a3041 = 3041 +a3042 = 3042 +a3043 = 3043 +a3044 = 3044 +a3045 = 3045 +a3046 = 3046 +a3047 = 3047 +a3048 = 3048 +a3049 = 3049 +a3050 = 3050 +a3051 = 3051 +a3052 = 3052 +a3053 = 3053 +a3054 = 3054 +a3055 = 3055 +a3056 = 3056 +a3057 = 3057 +a3058 = 3058 +a3059 = 3059 +a3060 = 3060 +a3061 = 3061 +a3062 = 3062 +a3063 = 3063 +a3064 = 3064 +a3065 = 3065 +a3066 = 3066 +a3067 = 3067 +a3068 = 3068 +a3069 = 3069 +a3070 = 3070 +a3071 = 3071 +a3072 = 3072 +a3073 = 3073 +a3074 = 3074 +a3075 = 3075 +a3076 = 3076 +a3077 = 3077 +a3078 = 3078 +a3079 = 3079 +a3080 = 3080 +a3081 = 3081 +a3082 = 3082 +a3083 = 3083 +a3084 = 3084 +a3085 = 3085 +a3086 = 3086 +a3087 = 3087 +a3088 = 3088 +a3089 = 3089 +a3090 = 3090 +a3091 = 3091 +a3092 = 3092 +a3093 = 3093 +a3094 = 3094 +a3095 = 3095 +a3096 = 3096 +a3097 = 3097 +a3098 = 3098 +a3099 = 3099 +a3100 = 3100 +a3101 = 3101 +a3102 = 3102 +a3103 = 3103 +a3104 = 3104 +a3105 = 3105 +a3106 = 3106 +a3107 = 3107 +a3108 = 3108 +a3109 = 3109 +a3110 = 3110 +a3111 = 3111 +a3112 = 3112 +a3113 = 3113 +a3114 = 3114 +a3115 = 3115 +a3116 = 3116 +a3117 = 3117 +a3118 = 3118 +a3119 = 3119 +a3120 = 3120 +a3121 = 3121 +a3122 = 3122 +a3123 = 3123 +a3124 = 3124 +a3125 = 3125 +a3126 = 3126 +a3127 = 3127 +a3128 = 3128 +a3129 = 3129 +a3130 = 3130 +a3131 = 3131 +a3132 = 3132 +a3133 = 3133 +a3134 = 3134 +a3135 = 3135 +a3136 = 3136 +a3137 = 3137 +a3138 = 3138 +a3139 = 3139 +a3140 = 3140 +a3141 = 3141 +a3142 = 3142 +a3143 = 3143 +a3144 = 3144 +a3145 = 3145 +a3146 = 3146 +a3147 = 3147 +a3148 = 3148 +a3149 = 3149 +a3150 = 3150 +a3151 = 3151 +a3152 = 3152 +a3153 = 3153 +a3154 = 3154 +a3155 = 3155 +a3156 = 3156 +a3157 = 3157 +a3158 = 3158 +a3159 = 3159 +a3160 = 3160 +a3161 = 3161 +a3162 = 3162 +a3163 = 3163 +a3164 = 3164 +a3165 = 3165 +a3166 = 3166 +a3167 = 3167 +a3168 = 3168 +a3169 = 3169 +a3170 = 3170 +a3171 = 3171 +a3172 = 3172 +a3173 = 3173 +a3174 = 3174 +a3175 = 3175 +a3176 = 3176 +a3177 = 3177 +a3178 = 3178 +a3179 = 3179 +a3180 = 3180 +a3181 = 3181 +a3182 = 3182 +a3183 = 3183 +a3184 = 3184 +a3185 = 3185 +a3186 = 3186 +a3187 = 3187 +a3188 = 3188 +a3189 = 3189 +a3190 = 3190 +a3191 = 3191 +a3192 = 3192 +a3193 = 3193 +a3194 = 3194 +a3195 = 3195 +a3196 = 3196 +a3197 = 3197 +a3198 = 3198 +a3199 = 3199 +a3200 = 3200 +a3201 = 3201 +a3202 = 3202 +a3203 = 3203 +a3204 = 3204 +a3205 = 3205 +a3206 = 3206 +a3207 = 3207 +a3208 = 3208 +a3209 = 3209 +a3210 = 3210 +a3211 = 3211 +a3212 = 3212 +a3213 = 3213 +a3214 = 3214 +a3215 = 3215 +a3216 = 3216 +a3217 = 3217 +a3218 = 3218 +a3219 = 3219 +a3220 = 3220 +a3221 = 3221 +a3222 = 3222 +a3223 = 3223 +a3224 = 3224 +a3225 = 3225 +a3226 = 3226 +a3227 = 3227 +a3228 = 3228 +a3229 = 3229 +a3230 = 3230 +a3231 = 3231 +a3232 = 3232 +a3233 = 3233 +a3234 = 3234 +a3235 = 3235 +a3236 = 3236 +a3237 = 3237 +a3238 = 3238 +a3239 = 3239 +a3240 = 3240 +a3241 = 3241 +a3242 = 3242 +a3243 = 3243 +a3244 = 3244 +a3245 = 3245 +a3246 = 3246 +a3247 = 3247 +a3248 = 3248 +a3249 = 3249 +a3250 = 3250 +a3251 = 3251 +a3252 = 3252 +a3253 = 3253 +a3254 = 3254 +a3255 = 3255 +a3256 = 3256 +a3257 = 3257 +a3258 = 3258 +a3259 = 3259 +a3260 = 3260 +a3261 = 3261 +a3262 = 3262 +a3263 = 3263 +a3264 = 3264 +a3265 = 3265 +a3266 = 3266 +a3267 = 3267 +a3268 = 3268 +a3269 = 3269 +a3270 = 3270 +a3271 = 3271 +a3272 = 3272 +a3273 = 3273 +a3274 = 3274 +a3275 = 3275 +a3276 = 3276 +a3277 = 3277 +a3278 = 3278 +a3279 = 3279 +a3280 = 3280 +a3281 = 3281 +a3282 = 3282 +a3283 = 3283 +a3284 = 3284 +a3285 = 3285 +a3286 = 3286 +a3287 = 3287 +a3288 = 3288 +a3289 = 3289 +a3290 = 3290 +a3291 = 3291 +a3292 = 3292 +a3293 = 3293 +a3294 = 3294 +a3295 = 3295 +a3296 = 3296 +a3297 = 3297 +a3298 = 3298 +a3299 = 3299 +a3300 = 3300 +a3301 = 3301 +a3302 = 3302 +a3303 = 3303 +a3304 = 3304 +a3305 = 3305 +a3306 = 3306 +a3307 = 3307 +a3308 = 3308 +a3309 = 3309 +a3310 = 3310 +a3311 = 3311 +a3312 = 3312 +a3313 = 3313 +a3314 = 3314 +a3315 = 3315 +a3316 = 3316 +a3317 = 3317 +a3318 = 3318 +a3319 = 3319 +a3320 = 3320 +a3321 = 3321 +a3322 = 3322 +a3323 = 3323 +a3324 = 3324 +a3325 = 3325 +a3326 = 3326 +a3327 = 3327 +a3328 = 3328 +a3329 = 3329 +a3330 = 3330 +a3331 = 3331 +a3332 = 3332 +a3333 = 3333 +a3334 = 3334 +a3335 = 3335 +a3336 = 3336 +a3337 = 3337 +a3338 = 3338 +a3339 = 3339 +a3340 = 3340 +a3341 = 3341 +a3342 = 3342 +a3343 = 3343 +a3344 = 3344 +a3345 = 3345 +a3346 = 3346 +a3347 = 3347 +a3348 = 3348 +a3349 = 3349 +a3350 = 3350 +a3351 = 3351 +a3352 = 3352 +a3353 = 3353 +a3354 = 3354 +a3355 = 3355 +a3356 = 3356 +a3357 = 3357 +a3358 = 3358 +a3359 = 3359 +a3360 = 3360 +a3361 = 3361 +a3362 = 3362 +a3363 = 3363 +a3364 = 3364 +a3365 = 3365 +a3366 = 3366 +a3367 = 3367 +a3368 = 3368 +a3369 = 3369 +a3370 = 3370 +a3371 = 3371 +a3372 = 3372 +a3373 = 3373 +a3374 = 3374 +a3375 = 3375 +a3376 = 3376 +a3377 = 3377 +a3378 = 3378 +a3379 = 3379 +a3380 = 3380 +a3381 = 3381 +a3382 = 3382 +a3383 = 3383 +a3384 = 3384 +a3385 = 3385 +a3386 = 3386 +a3387 = 3387 +a3388 = 3388 +a3389 = 3389 +a3390 = 3390 +a3391 = 3391 +a3392 = 3392 +a3393 = 3393 +a3394 = 3394 +a3395 = 3395 +a3396 = 3396 +a3397 = 3397 +a3398 = 3398 +a3399 = 3399 +a3400 = 3400 +a3401 = 3401 +a3402 = 3402 +a3403 = 3403 +a3404 = 3404 +a3405 = 3405 +a3406 = 3406 +a3407 = 3407 +a3408 = 3408 +a3409 = 3409 +a3410 = 3410 +a3411 = 3411 +a3412 = 3412 +a3413 = 3413 +a3414 = 3414 +a3415 = 3415 +a3416 = 3416 +a3417 = 3417 +a3418 = 3418 +a3419 = 3419 +a3420 = 3420 +a3421 = 3421 +a3422 = 3422 +a3423 = 3423 +a3424 = 3424 +a3425 = 3425 +a3426 = 3426 +a3427 = 3427 +a3428 = 3428 +a3429 = 3429 +a3430 = 3430 +a3431 = 3431 +a3432 = 3432 +a3433 = 3433 +a3434 = 3434 +a3435 = 3435 +a3436 = 3436 +a3437 = 3437 +a3438 = 3438 +a3439 = 3439 +a3440 = 3440 +a3441 = 3441 +a3442 = 3442 +a3443 = 3443 +a3444 = 3444 +a3445 = 3445 +a3446 = 3446 +a3447 = 3447 +a3448 = 3448 +a3449 = 3449 +a3450 = 3450 +a3451 = 3451 +a3452 = 3452 +a3453 = 3453 +a3454 = 3454 +a3455 = 3455 +a3456 = 3456 +a3457 = 3457 +a3458 = 3458 +a3459 = 3459 +a3460 = 3460 +a3461 = 3461 +a3462 = 3462 +a3463 = 3463 +a3464 = 3464 +a3465 = 3465 +a3466 = 3466 +a3467 = 3467 +a3468 = 3468 +a3469 = 3469 +a3470 = 3470 +a3471 = 3471 +a3472 = 3472 +a3473 = 3473 +a3474 = 3474 +a3475 = 3475 +a3476 = 3476 +a3477 = 3477 +a3478 = 3478 +a3479 = 3479 +a3480 = 3480 +a3481 = 3481 +a3482 = 3482 +a3483 = 3483 +a3484 = 3484 +a3485 = 3485 +a3486 = 3486 +a3487 = 3487 +a3488 = 3488 +a3489 = 3489 +a3490 = 3490 +a3491 = 3491 +a3492 = 3492 +a3493 = 3493 +a3494 = 3494 +a3495 = 3495 +a3496 = 3496 +a3497 = 3497 +a3498 = 3498 +a3499 = 3499 +a3500 = 3500 +a3501 = 3501 +a3502 = 3502 +a3503 = 3503 +a3504 = 3504 +a3505 = 3505 +a3506 = 3506 +a3507 = 3507 +a3508 = 3508 +a3509 = 3509 +a3510 = 3510 +a3511 = 3511 +a3512 = 3512 +a3513 = 3513 +a3514 = 3514 +a3515 = 3515 +a3516 = 3516 +a3517 = 3517 +a3518 = 3518 +a3519 = 3519 +a3520 = 3520 +a3521 = 3521 +a3522 = 3522 +a3523 = 3523 +a3524 = 3524 +a3525 = 3525 +a3526 = 3526 +a3527 = 3527 +a3528 = 3528 +a3529 = 3529 +a3530 = 3530 +a3531 = 3531 +a3532 = 3532 +a3533 = 3533 +a3534 = 3534 +a3535 = 3535 +a3536 = 3536 +a3537 = 3537 +a3538 = 3538 +a3539 = 3539 +a3540 = 3540 +a3541 = 3541 +a3542 = 3542 +a3543 = 3543 +a3544 = 3544 +a3545 = 3545 +a3546 = 3546 +a3547 = 3547 +a3548 = 3548 +a3549 = 3549 +a3550 = 3550 +a3551 = 3551 +a3552 = 3552 +a3553 = 3553 +a3554 = 3554 +a3555 = 3555 +a3556 = 3556 +a3557 = 3557 +a3558 = 3558 +a3559 = 3559 +a3560 = 3560 +a3561 = 3561 +a3562 = 3562 +a3563 = 3563 +a3564 = 3564 +a3565 = 3565 +a3566 = 3566 +a3567 = 3567 +a3568 = 3568 +a3569 = 3569 +a3570 = 3570 +a3571 = 3571 +a3572 = 3572 +a3573 = 3573 +a3574 = 3574 +a3575 = 3575 +a3576 = 3576 +a3577 = 3577 +a3578 = 3578 +a3579 = 3579 +a3580 = 3580 +a3581 = 3581 +a3582 = 3582 +a3583 = 3583 +a3584 = 3584 +a3585 = 3585 +a3586 = 3586 +a3587 = 3587 +a3588 = 3588 +a3589 = 3589 +a3590 = 3590 +a3591 = 3591 +a3592 = 3592 +a3593 = 3593 +a3594 = 3594 +a3595 = 3595 +a3596 = 3596 +a3597 = 3597 +a3598 = 3598 +a3599 = 3599 +a3600 = 3600 +a3601 = 3601 +a3602 = 3602 +a3603 = 3603 +a3604 = 3604 +a3605 = 3605 +a3606 = 3606 +a3607 = 3607 +a3608 = 3608 +a3609 = 3609 +a3610 = 3610 +a3611 = 3611 +a3612 = 3612 +a3613 = 3613 +a3614 = 3614 +a3615 = 3615 +a3616 = 3616 +a3617 = 3617 +a3618 = 3618 +a3619 = 3619 +a3620 = 3620 +a3621 = 3621 +a3622 = 3622 +a3623 = 3623 +a3624 = 3624 +a3625 = 3625 +a3626 = 3626 +a3627 = 3627 +a3628 = 3628 +a3629 = 3629 +a3630 = 3630 +a3631 = 3631 +a3632 = 3632 +a3633 = 3633 +a3634 = 3634 +a3635 = 3635 +a3636 = 3636 +a3637 = 3637 +a3638 = 3638 +a3639 = 3639 +a3640 = 3640 +a3641 = 3641 +a3642 = 3642 +a3643 = 3643 +a3644 = 3644 +a3645 = 3645 +a3646 = 3646 +a3647 = 3647 +a3648 = 3648 +a3649 = 3649 +a3650 = 3650 +a3651 = 3651 +a3652 = 3652 +a3653 = 3653 +a3654 = 3654 +a3655 = 3655 +a3656 = 3656 +a3657 = 3657 +a3658 = 3658 +a3659 = 3659 +a3660 = 3660 +a3661 = 3661 +a3662 = 3662 +a3663 = 3663 +a3664 = 3664 +a3665 = 3665 +a3666 = 3666 +a3667 = 3667 +a3668 = 3668 +a3669 = 3669 +a3670 = 3670 +a3671 = 3671 +a3672 = 3672 +a3673 = 3673 +a3674 = 3674 +a3675 = 3675 +a3676 = 3676 +a3677 = 3677 +a3678 = 3678 +a3679 = 3679 +a3680 = 3680 +a3681 = 3681 +a3682 = 3682 +a3683 = 3683 +a3684 = 3684 +a3685 = 3685 +a3686 = 3686 +a3687 = 3687 +a3688 = 3688 +a3689 = 3689 +a3690 = 3690 +a3691 = 3691 +a3692 = 3692 +a3693 = 3693 +a3694 = 3694 +a3695 = 3695 +a3696 = 3696 +a3697 = 3697 +a3698 = 3698 +a3699 = 3699 +a3700 = 3700 +a3701 = 3701 +a3702 = 3702 +a3703 = 3703 +a3704 = 3704 +a3705 = 3705 +a3706 = 3706 +a3707 = 3707 +a3708 = 3708 +a3709 = 3709 +a3710 = 3710 +a3711 = 3711 +a3712 = 3712 +a3713 = 3713 +a3714 = 3714 +a3715 = 3715 +a3716 = 3716 +a3717 = 3717 +a3718 = 3718 +a3719 = 3719 +a3720 = 3720 +a3721 = 3721 +a3722 = 3722 +a3723 = 3723 +a3724 = 3724 +a3725 = 3725 +a3726 = 3726 +a3727 = 3727 +a3728 = 3728 +a3729 = 3729 +a3730 = 3730 +a3731 = 3731 +a3732 = 3732 +a3733 = 3733 +a3734 = 3734 +a3735 = 3735 +a3736 = 3736 +a3737 = 3737 +a3738 = 3738 +a3739 = 3739 +a3740 = 3740 +a3741 = 3741 +a3742 = 3742 +a3743 = 3743 +a3744 = 3744 +a3745 = 3745 +a3746 = 3746 +a3747 = 3747 +a3748 = 3748 +a3749 = 3749 +a3750 = 3750 +a3751 = 3751 +a3752 = 3752 +a3753 = 3753 +a3754 = 3754 +a3755 = 3755 +a3756 = 3756 +a3757 = 3757 +a3758 = 3758 +a3759 = 3759 +a3760 = 3760 +a3761 = 3761 +a3762 = 3762 +a3763 = 3763 +a3764 = 3764 +a3765 = 3765 +a3766 = 3766 +a3767 = 3767 +a3768 = 3768 +a3769 = 3769 +a3770 = 3770 +a3771 = 3771 +a3772 = 3772 +a3773 = 3773 +a3774 = 3774 +a3775 = 3775 +a3776 = 3776 +a3777 = 3777 +a3778 = 3778 +a3779 = 3779 +a3780 = 3780 +a3781 = 3781 +a3782 = 3782 +a3783 = 3783 +a3784 = 3784 +a3785 = 3785 +a3786 = 3786 +a3787 = 3787 +a3788 = 3788 +a3789 = 3789 +a3790 = 3790 +a3791 = 3791 +a3792 = 3792 +a3793 = 3793 +a3794 = 3794 +a3795 = 3795 +a3796 = 3796 +a3797 = 3797 +a3798 = 3798 +a3799 = 3799 +a3800 = 3800 +a3801 = 3801 +a3802 = 3802 +a3803 = 3803 +a3804 = 3804 +a3805 = 3805 +a3806 = 3806 +a3807 = 3807 +a3808 = 3808 +a3809 = 3809 +a3810 = 3810 +a3811 = 3811 +a3812 = 3812 +a3813 = 3813 +a3814 = 3814 +a3815 = 3815 +a3816 = 3816 +a3817 = 3817 +a3818 = 3818 +a3819 = 3819 +a3820 = 3820 +a3821 = 3821 +a3822 = 3822 +a3823 = 3823 +a3824 = 3824 +a3825 = 3825 +a3826 = 3826 +a3827 = 3827 +a3828 = 3828 +a3829 = 3829 +a3830 = 3830 +a3831 = 3831 +a3832 = 3832 +a3833 = 3833 +a3834 = 3834 +a3835 = 3835 +a3836 = 3836 +a3837 = 3837 +a3838 = 3838 +a3839 = 3839 +a3840 = 3840 +a3841 = 3841 +a3842 = 3842 +a3843 = 3843 +a3844 = 3844 +a3845 = 3845 +a3846 = 3846 +a3847 = 3847 +a3848 = 3848 +a3849 = 3849 +a3850 = 3850 +a3851 = 3851 +a3852 = 3852 +a3853 = 3853 +a3854 = 3854 +a3855 = 3855 +a3856 = 3856 +a3857 = 3857 +a3858 = 3858 +a3859 = 3859 +a3860 = 3860 +a3861 = 3861 +a3862 = 3862 +a3863 = 3863 +a3864 = 3864 +a3865 = 3865 +a3866 = 3866 +a3867 = 3867 +a3868 = 3868 +a3869 = 3869 +a3870 = 3870 +a3871 = 3871 +a3872 = 3872 +a3873 = 3873 +a3874 = 3874 +a3875 = 3875 +a3876 = 3876 +a3877 = 3877 +a3878 = 3878 +a3879 = 3879 +a3880 = 3880 +a3881 = 3881 +a3882 = 3882 +a3883 = 3883 +a3884 = 3884 +a3885 = 3885 +a3886 = 3886 +a3887 = 3887 +a3888 = 3888 +a3889 = 3889 +a3890 = 3890 +a3891 = 3891 +a3892 = 3892 +a3893 = 3893 +a3894 = 3894 +a3895 = 3895 +a3896 = 3896 +a3897 = 3897 +a3898 = 3898 +a3899 = 3899 +a3900 = 3900 +a3901 = 3901 +a3902 = 3902 +a3903 = 3903 +a3904 = 3904 +a3905 = 3905 +a3906 = 3906 +a3907 = 3907 +a3908 = 3908 +a3909 = 3909 +a3910 = 3910 +a3911 = 3911 +a3912 = 3912 +a3913 = 3913 +a3914 = 3914 +a3915 = 3915 +a3916 = 3916 +a3917 = 3917 +a3918 = 3918 +a3919 = 3919 +a3920 = 3920 +a3921 = 3921 +a3922 = 3922 +a3923 = 3923 +a3924 = 3924 +a3925 = 3925 +a3926 = 3926 +a3927 = 3927 +a3928 = 3928 +a3929 = 3929 +a3930 = 3930 +a3931 = 3931 +a3932 = 3932 +a3933 = 3933 +a3934 = 3934 +a3935 = 3935 +a3936 = 3936 +a3937 = 3937 +a3938 = 3938 +a3939 = 3939 +a3940 = 3940 +a3941 = 3941 +a3942 = 3942 +a3943 = 3943 +a3944 = 3944 +a3945 = 3945 +a3946 = 3946 +a3947 = 3947 +a3948 = 3948 +a3949 = 3949 +a3950 = 3950 +a3951 = 3951 +a3952 = 3952 +a3953 = 3953 +a3954 = 3954 +a3955 = 3955 +a3956 = 3956 +a3957 = 3957 +a3958 = 3958 +a3959 = 3959 +a3960 = 3960 +a3961 = 3961 +a3962 = 3962 +a3963 = 3963 +a3964 = 3964 +a3965 = 3965 +a3966 = 3966 +a3967 = 3967 +a3968 = 3968 +a3969 = 3969 +a3970 = 3970 +a3971 = 3971 +a3972 = 3972 +a3973 = 3973 +a3974 = 3974 +a3975 = 3975 +a3976 = 3976 +a3977 = 3977 +a3978 = 3978 +a3979 = 3979 +a3980 = 3980 +a3981 = 3981 +a3982 = 3982 +a3983 = 3983 +a3984 = 3984 +a3985 = 3985 +a3986 = 3986 +a3987 = 3987 +a3988 = 3988 +a3989 = 3989 +a3990 = 3990 +a3991 = 3991 +a3992 = 3992 +a3993 = 3993 +a3994 = 3994 +a3995 = 3995 +a3996 = 3996 +a3997 = 3997 +a3998 = 3998 +a3999 = 3999 +a4000 = 4000 +a4001 = 4001 +a4002 = 4002 +a4003 = 4003 +a4004 = 4004 +a4005 = 4005 +a4006 = 4006 +a4007 = 4007 +a4008 = 4008 +a4009 = 4009 +a4010 = 4010 +a4011 = 4011 +a4012 = 4012 +a4013 = 4013 +a4014 = 4014 +a4015 = 4015 +a4016 = 4016 +a4017 = 4017 +a4018 = 4018 +a4019 = 4019 +a4020 = 4020 +a4021 = 4021 +a4022 = 4022 +a4023 = 4023 +a4024 = 4024 +a4025 = 4025 +a4026 = 4026 +a4027 = 4027 +a4028 = 4028 +a4029 = 4029 +a4030 = 4030 +a4031 = 4031 +a4032 = 4032 +a4033 = 4033 +a4034 = 4034 +a4035 = 4035 +a4036 = 4036 +a4037 = 4037 +a4038 = 4038 +a4039 = 4039 +a4040 = 4040 +a4041 = 4041 +a4042 = 4042 +a4043 = 4043 +a4044 = 4044 +a4045 = 4045 +a4046 = 4046 +a4047 = 4047 +a4048 = 4048 +a4049 = 4049 +a4050 = 4050 +a4051 = 4051 +a4052 = 4052 +a4053 = 4053 +a4054 = 4054 +a4055 = 4055 +a4056 = 4056 +a4057 = 4057 +a4058 = 4058 +a4059 = 4059 +a4060 = 4060 +a4061 = 4061 +a4062 = 4062 +a4063 = 4063 +a4064 = 4064 +a4065 = 4065 +a4066 = 4066 +a4067 = 4067 +a4068 = 4068 +a4069 = 4069 +a4070 = 4070 +a4071 = 4071 +a4072 = 4072 +a4073 = 4073 +a4074 = 4074 +a4075 = 4075 +a4076 = 4076 +a4077 = 4077 +a4078 = 4078 +a4079 = 4079 +a4080 = 4080 +a4081 = 4081 +a4082 = 4082 +a4083 = 4083 +a4084 = 4084 +a4085 = 4085 +a4086 = 4086 +a4087 = 4087 +a4088 = 4088 +a4089 = 4089 +a4090 = 4090 +a4091 = 4091 +a4092 = 4092 +a4093 = 4093 +a4094 = 4094 +a4095 = 4095 +a4096 = 4096 +a4097 = 4097 +a4098 = 4098 +a4099 = 4099 +a4100 = 4100 +a4101 = 4101 +a4102 = 4102 +a4103 = 4103 +a4104 = 4104 +a4105 = 4105 +a4106 = 4106 +a4107 = 4107 +a4108 = 4108 +a4109 = 4109 +a4110 = 4110 +a4111 = 4111 +a4112 = 4112 +a4113 = 4113 +a4114 = 4114 +a4115 = 4115 +a4116 = 4116 +a4117 = 4117 +a4118 = 4118 +a4119 = 4119 +a4120 = 4120 +a4121 = 4121 +a4122 = 4122 +a4123 = 4123 +a4124 = 4124 +a4125 = 4125 +a4126 = 4126 +a4127 = 4127 +a4128 = 4128 +a4129 = 4129 +a4130 = 4130 +a4131 = 4131 +a4132 = 4132 +a4133 = 4133 +a4134 = 4134 +a4135 = 4135 +a4136 = 4136 +a4137 = 4137 +a4138 = 4138 +a4139 = 4139 +a4140 = 4140 +a4141 = 4141 +a4142 = 4142 +a4143 = 4143 +a4144 = 4144 +a4145 = 4145 +a4146 = 4146 +a4147 = 4147 +a4148 = 4148 +a4149 = 4149 +a4150 = 4150 +a4151 = 4151 +a4152 = 4152 +a4153 = 4153 +a4154 = 4154 +a4155 = 4155 +a4156 = 4156 +a4157 = 4157 +a4158 = 4158 +a4159 = 4159 +a4160 = 4160 +a4161 = 4161 +a4162 = 4162 +a4163 = 4163 +a4164 = 4164 +a4165 = 4165 +a4166 = 4166 +a4167 = 4167 +a4168 = 4168 +a4169 = 4169 +a4170 = 4170 +a4171 = 4171 +a4172 = 4172 +a4173 = 4173 +a4174 = 4174 +a4175 = 4175 +a4176 = 4176 +a4177 = 4177 +a4178 = 4178 +a4179 = 4179 +a4180 = 4180 +a4181 = 4181 +a4182 = 4182 +a4183 = 4183 +a4184 = 4184 +a4185 = 4185 +a4186 = 4186 +a4187 = 4187 +a4188 = 4188 +a4189 = 4189 +a4190 = 4190 +a4191 = 4191 +a4192 = 4192 +a4193 = 4193 +a4194 = 4194 +a4195 = 4195 +a4196 = 4196 +a4197 = 4197 +a4198 = 4198 +a4199 = 4199 +a4200 = 4200 +a4201 = 4201 +a4202 = 4202 +a4203 = 4203 +a4204 = 4204 +a4205 = 4205 +a4206 = 4206 +a4207 = 4207 +a4208 = 4208 +a4209 = 4209 +a4210 = 4210 +a4211 = 4211 +a4212 = 4212 +a4213 = 4213 +a4214 = 4214 +a4215 = 4215 +a4216 = 4216 +a4217 = 4217 +a4218 = 4218 +a4219 = 4219 +a4220 = 4220 +a4221 = 4221 +a4222 = 4222 +a4223 = 4223 +a4224 = 4224 +a4225 = 4225 +a4226 = 4226 +a4227 = 4227 +a4228 = 4228 +a4229 = 4229 +a4230 = 4230 +a4231 = 4231 +a4232 = 4232 +a4233 = 4233 +a4234 = 4234 +a4235 = 4235 +a4236 = 4236 +a4237 = 4237 +a4238 = 4238 +a4239 = 4239 +a4240 = 4240 +a4241 = 4241 +a4242 = 4242 +a4243 = 4243 +a4244 = 4244 +a4245 = 4245 +a4246 = 4246 +a4247 = 4247 +a4248 = 4248 +a4249 = 4249 +a4250 = 4250 +a4251 = 4251 +a4252 = 4252 +a4253 = 4253 +a4254 = 4254 +a4255 = 4255 +a4256 = 4256 +a4257 = 4257 +a4258 = 4258 +a4259 = 4259 +a4260 = 4260 +a4261 = 4261 +a4262 = 4262 +a4263 = 4263 +a4264 = 4264 +a4265 = 4265 +a4266 = 4266 +a4267 = 4267 +a4268 = 4268 +a4269 = 4269 +a4270 = 4270 +a4271 = 4271 +a4272 = 4272 +a4273 = 4273 +a4274 = 4274 +a4275 = 4275 +a4276 = 4276 +a4277 = 4277 +a4278 = 4278 +a4279 = 4279 +a4280 = 4280 +a4281 = 4281 +a4282 = 4282 +a4283 = 4283 +a4284 = 4284 +a4285 = 4285 +a4286 = 4286 +a4287 = 4287 +a4288 = 4288 +a4289 = 4289 +a4290 = 4290 +a4291 = 4291 +a4292 = 4292 +a4293 = 4293 +a4294 = 4294 +a4295 = 4295 +a4296 = 4296 +a4297 = 4297 +a4298 = 4298 +a4299 = 4299 +a4300 = 4300 +a4301 = 4301 +a4302 = 4302 +a4303 = 4303 +a4304 = 4304 +a4305 = 4305 +a4306 = 4306 +a4307 = 4307 +a4308 = 4308 +a4309 = 4309 +a4310 = 4310 +a4311 = 4311 +a4312 = 4312 +a4313 = 4313 +a4314 = 4314 +a4315 = 4315 +a4316 = 4316 +a4317 = 4317 +a4318 = 4318 +a4319 = 4319 +a4320 = 4320 +a4321 = 4321 +a4322 = 4322 +a4323 = 4323 +a4324 = 4324 +a4325 = 4325 +a4326 = 4326 +a4327 = 4327 +a4328 = 4328 +a4329 = 4329 +a4330 = 4330 +a4331 = 4331 +a4332 = 4332 +a4333 = 4333 +a4334 = 4334 +a4335 = 4335 +a4336 = 4336 +a4337 = 4337 +a4338 = 4338 +a4339 = 4339 +a4340 = 4340 +a4341 = 4341 +a4342 = 4342 +a4343 = 4343 +a4344 = 4344 +a4345 = 4345 +a4346 = 4346 +a4347 = 4347 +a4348 = 4348 +a4349 = 4349 +a4350 = 4350 +a4351 = 4351 +a4352 = 4352 +a4353 = 4353 +a4354 = 4354 +a4355 = 4355 +a4356 = 4356 +a4357 = 4357 +a4358 = 4358 +a4359 = 4359 +a4360 = 4360 +a4361 = 4361 +a4362 = 4362 +a4363 = 4363 +a4364 = 4364 +a4365 = 4365 +a4366 = 4366 +a4367 = 4367 +a4368 = 4368 +a4369 = 4369 +a4370 = 4370 +a4371 = 4371 +a4372 = 4372 +a4373 = 4373 +a4374 = 4374 +a4375 = 4375 +a4376 = 4376 +a4377 = 4377 +a4378 = 4378 +a4379 = 4379 +a4380 = 4380 +a4381 = 4381 +a4382 = 4382 +a4383 = 4383 +a4384 = 4384 +a4385 = 4385 +a4386 = 4386 +a4387 = 4387 +a4388 = 4388 +a4389 = 4389 +a4390 = 4390 +a4391 = 4391 +a4392 = 4392 +a4393 = 4393 +a4394 = 4394 +a4395 = 4395 +a4396 = 4396 +a4397 = 4397 +a4398 = 4398 +a4399 = 4399 +a4400 = 4400 +a4401 = 4401 +a4402 = 4402 +a4403 = 4403 +a4404 = 4404 +a4405 = 4405 +a4406 = 4406 +a4407 = 4407 +a4408 = 4408 +a4409 = 4409 +a4410 = 4410 +a4411 = 4411 +a4412 = 4412 +a4413 = 4413 +a4414 = 4414 +a4415 = 4415 +a4416 = 4416 +a4417 = 4417 +a4418 = 4418 +a4419 = 4419 +a4420 = 4420 +a4421 = 4421 +a4422 = 4422 +a4423 = 4423 +a4424 = 4424 +a4425 = 4425 +a4426 = 4426 +a4427 = 4427 +a4428 = 4428 +a4429 = 4429 +a4430 = 4430 +a4431 = 4431 +a4432 = 4432 +a4433 = 4433 +a4434 = 4434 +a4435 = 4435 +a4436 = 4436 +a4437 = 4437 +a4438 = 4438 +a4439 = 4439 +a4440 = 4440 +a4441 = 4441 +a4442 = 4442 +a4443 = 4443 +a4444 = 4444 +a4445 = 4445 +a4446 = 4446 +a4447 = 4447 +a4448 = 4448 +a4449 = 4449 +a4450 = 4450 +a4451 = 4451 +a4452 = 4452 +a4453 = 4453 +a4454 = 4454 +a4455 = 4455 +a4456 = 4456 +a4457 = 4457 +a4458 = 4458 +a4459 = 4459 +a4460 = 4460 +a4461 = 4461 +a4462 = 4462 +a4463 = 4463 +a4464 = 4464 +a4465 = 4465 +a4466 = 4466 +a4467 = 4467 +a4468 = 4468 +a4469 = 4469 +a4470 = 4470 +a4471 = 4471 +a4472 = 4472 +a4473 = 4473 +a4474 = 4474 +a4475 = 4475 +a4476 = 4476 +a4477 = 4477 +a4478 = 4478 +a4479 = 4479 +a4480 = 4480 +a4481 = 4481 +a4482 = 4482 +a4483 = 4483 +a4484 = 4484 +a4485 = 4485 +a4486 = 4486 +a4487 = 4487 +a4488 = 4488 +a4489 = 4489 +a4490 = 4490 +a4491 = 4491 +a4492 = 4492 +a4493 = 4493 +a4494 = 4494 +a4495 = 4495 +a4496 = 4496 +a4497 = 4497 +a4498 = 4498 +a4499 = 4499 +a4500 = 4500 +a4501 = 4501 +a4502 = 4502 +a4503 = 4503 +a4504 = 4504 +a4505 = 4505 +a4506 = 4506 +a4507 = 4507 +a4508 = 4508 +a4509 = 4509 +a4510 = 4510 +a4511 = 4511 +a4512 = 4512 +a4513 = 4513 +a4514 = 4514 +a4515 = 4515 +a4516 = 4516 +a4517 = 4517 +a4518 = 4518 +a4519 = 4519 +a4520 = 4520 +a4521 = 4521 +a4522 = 4522 +a4523 = 4523 +a4524 = 4524 +a4525 = 4525 +a4526 = 4526 +a4527 = 4527 +a4528 = 4528 +a4529 = 4529 +a4530 = 4530 +a4531 = 4531 +a4532 = 4532 +a4533 = 4533 +a4534 = 4534 +a4535 = 4535 +a4536 = 4536 +a4537 = 4537 +a4538 = 4538 +a4539 = 4539 +a4540 = 4540 +a4541 = 4541 +a4542 = 4542 +a4543 = 4543 +a4544 = 4544 +a4545 = 4545 +a4546 = 4546 +a4547 = 4547 +a4548 = 4548 +a4549 = 4549 +a4550 = 4550 +a4551 = 4551 +a4552 = 4552 +a4553 = 4553 +a4554 = 4554 +a4555 = 4555 +a4556 = 4556 +a4557 = 4557 +a4558 = 4558 +a4559 = 4559 +a4560 = 4560 +a4561 = 4561 +a4562 = 4562 +a4563 = 4563 +a4564 = 4564 +a4565 = 4565 +a4566 = 4566 +a4567 = 4567 +a4568 = 4568 +a4569 = 4569 +a4570 = 4570 +a4571 = 4571 +a4572 = 4572 +a4573 = 4573 +a4574 = 4574 +a4575 = 4575 +a4576 = 4576 +a4577 = 4577 +a4578 = 4578 +a4579 = 4579 +a4580 = 4580 +a4581 = 4581 +a4582 = 4582 +a4583 = 4583 +a4584 = 4584 +a4585 = 4585 +a4586 = 4586 +a4587 = 4587 +a4588 = 4588 +a4589 = 4589 +a4590 = 4590 +a4591 = 4591 +a4592 = 4592 +a4593 = 4593 +a4594 = 4594 +a4595 = 4595 +a4596 = 4596 +a4597 = 4597 +a4598 = 4598 +a4599 = 4599 +a4600 = 4600 +a4601 = 4601 +a4602 = 4602 +a4603 = 4603 +a4604 = 4604 +a4605 = 4605 +a4606 = 4606 +a4607 = 4607 +a4608 = 4608 +a4609 = 4609 +a4610 = 4610 +a4611 = 4611 +a4612 = 4612 +a4613 = 4613 +a4614 = 4614 +a4615 = 4615 +a4616 = 4616 +a4617 = 4617 +a4618 = 4618 +a4619 = 4619 +a4620 = 4620 +a4621 = 4621 +a4622 = 4622 +a4623 = 4623 +a4624 = 4624 +a4625 = 4625 +a4626 = 4626 +a4627 = 4627 +a4628 = 4628 +a4629 = 4629 +a4630 = 4630 +a4631 = 4631 +a4632 = 4632 +a4633 = 4633 +a4634 = 4634 +a4635 = 4635 +a4636 = 4636 +a4637 = 4637 +a4638 = 4638 +a4639 = 4639 +a4640 = 4640 +a4641 = 4641 +a4642 = 4642 +a4643 = 4643 +a4644 = 4644 +a4645 = 4645 +a4646 = 4646 +a4647 = 4647 +a4648 = 4648 +a4649 = 4649 +a4650 = 4650 +a4651 = 4651 +a4652 = 4652 +a4653 = 4653 +a4654 = 4654 +a4655 = 4655 +a4656 = 4656 +a4657 = 4657 +a4658 = 4658 +a4659 = 4659 +a4660 = 4660 +a4661 = 4661 +a4662 = 4662 +a4663 = 4663 +a4664 = 4664 +a4665 = 4665 +a4666 = 4666 +a4667 = 4667 +a4668 = 4668 +a4669 = 4669 +a4670 = 4670 +a4671 = 4671 +a4672 = 4672 +a4673 = 4673 +a4674 = 4674 +a4675 = 4675 +a4676 = 4676 +a4677 = 4677 +a4678 = 4678 +a4679 = 4679 +a4680 = 4680 +a4681 = 4681 +a4682 = 4682 +a4683 = 4683 +a4684 = 4684 +a4685 = 4685 +a4686 = 4686 +a4687 = 4687 +a4688 = 4688 +a4689 = 4689 +a4690 = 4690 +a4691 = 4691 +a4692 = 4692 +a4693 = 4693 +a4694 = 4694 +a4695 = 4695 +a4696 = 4696 +a4697 = 4697 +a4698 = 4698 +a4699 = 4699 +a4700 = 4700 +a4701 = 4701 +a4702 = 4702 +a4703 = 4703 +a4704 = 4704 +a4705 = 4705 +a4706 = 4706 +a4707 = 4707 +a4708 = 4708 +a4709 = 4709 +a4710 = 4710 +a4711 = 4711 +a4712 = 4712 +a4713 = 4713 +a4714 = 4714 +a4715 = 4715 +a4716 = 4716 +a4717 = 4717 +a4718 = 4718 +a4719 = 4719 +a4720 = 4720 +a4721 = 4721 +a4722 = 4722 +a4723 = 4723 +a4724 = 4724 +a4725 = 4725 +a4726 = 4726 +a4727 = 4727 +a4728 = 4728 +a4729 = 4729 +a4730 = 4730 +a4731 = 4731 +a4732 = 4732 +a4733 = 4733 +a4734 = 4734 +a4735 = 4735 +a4736 = 4736 +a4737 = 4737 +a4738 = 4738 +a4739 = 4739 +a4740 = 4740 +a4741 = 4741 +a4742 = 4742 +a4743 = 4743 +a4744 = 4744 +a4745 = 4745 +a4746 = 4746 +a4747 = 4747 +a4748 = 4748 +a4749 = 4749 +a4750 = 4750 +a4751 = 4751 +a4752 = 4752 +a4753 = 4753 +a4754 = 4754 +a4755 = 4755 +a4756 = 4756 +a4757 = 4757 +a4758 = 4758 +a4759 = 4759 +a4760 = 4760 +a4761 = 4761 +a4762 = 4762 +a4763 = 4763 +a4764 = 4764 +a4765 = 4765 +a4766 = 4766 +a4767 = 4767 +a4768 = 4768 +a4769 = 4769 +a4770 = 4770 +a4771 = 4771 +a4772 = 4772 +a4773 = 4773 +a4774 = 4774 +a4775 = 4775 +a4776 = 4776 +a4777 = 4777 +a4778 = 4778 +a4779 = 4779 +a4780 = 4780 +a4781 = 4781 +a4782 = 4782 +a4783 = 4783 +a4784 = 4784 +a4785 = 4785 +a4786 = 4786 +a4787 = 4787 +a4788 = 4788 +a4789 = 4789 +a4790 = 4790 +a4791 = 4791 +a4792 = 4792 +a4793 = 4793 +a4794 = 4794 +a4795 = 4795 +a4796 = 4796 +a4797 = 4797 +a4798 = 4798 +a4799 = 4799 +a4800 = 4800 +a4801 = 4801 +a4802 = 4802 +a4803 = 4803 +a4804 = 4804 +a4805 = 4805 +a4806 = 4806 +a4807 = 4807 +a4808 = 4808 +a4809 = 4809 +a4810 = 4810 +a4811 = 4811 +a4812 = 4812 +a4813 = 4813 +a4814 = 4814 +a4815 = 4815 +a4816 = 4816 +a4817 = 4817 +a4818 = 4818 +a4819 = 4819 +a4820 = 4820 +a4821 = 4821 +a4822 = 4822 +a4823 = 4823 +a4824 = 4824 +a4825 = 4825 +a4826 = 4826 +a4827 = 4827 +a4828 = 4828 +a4829 = 4829 +a4830 = 4830 +a4831 = 4831 +a4832 = 4832 +a4833 = 4833 +a4834 = 4834 +a4835 = 4835 +a4836 = 4836 +a4837 = 4837 +a4838 = 4838 +a4839 = 4839 +a4840 = 4840 +a4841 = 4841 +a4842 = 4842 +a4843 = 4843 +a4844 = 4844 +a4845 = 4845 +a4846 = 4846 +a4847 = 4847 +a4848 = 4848 +a4849 = 4849 +a4850 = 4850 +a4851 = 4851 +a4852 = 4852 +a4853 = 4853 +a4854 = 4854 +a4855 = 4855 +a4856 = 4856 +a4857 = 4857 +a4858 = 4858 +a4859 = 4859 +a4860 = 4860 +a4861 = 4861 +a4862 = 4862 +a4863 = 4863 +a4864 = 4864 +a4865 = 4865 +a4866 = 4866 +a4867 = 4867 +a4868 = 4868 +a4869 = 4869 +a4870 = 4870 +a4871 = 4871 +a4872 = 4872 +a4873 = 4873 +a4874 = 4874 +a4875 = 4875 +a4876 = 4876 +a4877 = 4877 +a4878 = 4878 +a4879 = 4879 +a4880 = 4880 +a4881 = 4881 +a4882 = 4882 +a4883 = 4883 +a4884 = 4884 +a4885 = 4885 +a4886 = 4886 +a4887 = 4887 +a4888 = 4888 +a4889 = 4889 +a4890 = 4890 +a4891 = 4891 +a4892 = 4892 +a4893 = 4893 +a4894 = 4894 +a4895 = 4895 +a4896 = 4896 +a4897 = 4897 +a4898 = 4898 +a4899 = 4899 +a4900 = 4900 +a4901 = 4901 +a4902 = 4902 +a4903 = 4903 +a4904 = 4904 +a4905 = 4905 +a4906 = 4906 +a4907 = 4907 +a4908 = 4908 +a4909 = 4909 +a4910 = 4910 +a4911 = 4911 +a4912 = 4912 +a4913 = 4913 +a4914 = 4914 +a4915 = 4915 +a4916 = 4916 +a4917 = 4917 +a4918 = 4918 +a4919 = 4919 +a4920 = 4920 +a4921 = 4921 +a4922 = 4922 +a4923 = 4923 +a4924 = 4924 +a4925 = 4925 +a4926 = 4926 +a4927 = 4927 +a4928 = 4928 +a4929 = 4929 +a4930 = 4930 +a4931 = 4931 +a4932 = 4932 +a4933 = 4933 +a4934 = 4934 +a4935 = 4935 +a4936 = 4936 +a4937 = 4937 +a4938 = 4938 +a4939 = 4939 +a4940 = 4940 +a4941 = 4941 +a4942 = 4942 +a4943 = 4943 +a4944 = 4944 +a4945 = 4945 +a4946 = 4946 +a4947 = 4947 +a4948 = 4948 +a4949 = 4949 +a4950 = 4950 +a4951 = 4951 +a4952 = 4952 +a4953 = 4953 +a4954 = 4954 +a4955 = 4955 +a4956 = 4956 +a4957 = 4957 +a4958 = 4958 +a4959 = 4959 +a4960 = 4960 +a4961 = 4961 +a4962 = 4962 +a4963 = 4963 +a4964 = 4964 +a4965 = 4965 +a4966 = 4966 +a4967 = 4967 +a4968 = 4968 +a4969 = 4969 +a4970 = 4970 +a4971 = 4971 +a4972 = 4972 +a4973 = 4973 +a4974 = 4974 +a4975 = 4975 +a4976 = 4976 +a4977 = 4977 +a4978 = 4978 +a4979 = 4979 +a4980 = 4980 +a4981 = 4981 +a4982 = 4982 +a4983 = 4983 +a4984 = 4984 +a4985 = 4985 +a4986 = 4986 +a4987 = 4987 +a4988 = 4988 +a4989 = 4989 +a4990 = 4990 +a4991 = 4991 +a4992 = 4992 +a4993 = 4993 +a4994 = 4994 +a4995 = 4995 +a4996 = 4996 +a4997 = 4997 +a4998 = 4998 +a4999 = 4999 +a5000 = 5000 +a5001 = 5001 +a5002 = 5002 +a5003 = 5003 +a5004 = 5004 +a5005 = 5005 +a5006 = 5006 +a5007 = 5007 +a5008 = 5008 +a5009 = 5009 +a5010 = 5010 +a5011 = 5011 +a5012 = 5012 +a5013 = 5013 +a5014 = 5014 +a5015 = 5015 +a5016 = 5016 +a5017 = 5017 +a5018 = 5018 +a5019 = 5019 +a5020 = 5020 +a5021 = 5021 +a5022 = 5022 +a5023 = 5023 +a5024 = 5024 +a5025 = 5025 +a5026 = 5026 +a5027 = 5027 +a5028 = 5028 +a5029 = 5029 +a5030 = 5030 +a5031 = 5031 +a5032 = 5032 +a5033 = 5033 +a5034 = 5034 +a5035 = 5035 +a5036 = 5036 +a5037 = 5037 +a5038 = 5038 +a5039 = 5039 +a5040 = 5040 +a5041 = 5041 +a5042 = 5042 +a5043 = 5043 +a5044 = 5044 +a5045 = 5045 +a5046 = 5046 +a5047 = 5047 +a5048 = 5048 +a5049 = 5049 +a5050 = 5050 +a5051 = 5051 +a5052 = 5052 +a5053 = 5053 +a5054 = 5054 +a5055 = 5055 +a5056 = 5056 +a5057 = 5057 +a5058 = 5058 +a5059 = 5059 +a5060 = 5060 +a5061 = 5061 +a5062 = 5062 +a5063 = 5063 +a5064 = 5064 +a5065 = 5065 +a5066 = 5066 +a5067 = 5067 +a5068 = 5068 +a5069 = 5069 +a5070 = 5070 +a5071 = 5071 +a5072 = 5072 +a5073 = 5073 +a5074 = 5074 +a5075 = 5075 +a5076 = 5076 +a5077 = 5077 +a5078 = 5078 +a5079 = 5079 +a5080 = 5080 +a5081 = 5081 +a5082 = 5082 +a5083 = 5083 +a5084 = 5084 +a5085 = 5085 +a5086 = 5086 +a5087 = 5087 +a5088 = 5088 +a5089 = 5089 +a5090 = 5090 +a5091 = 5091 +a5092 = 5092 +a5093 = 5093 +a5094 = 5094 +a5095 = 5095 +a5096 = 5096 +a5097 = 5097 +a5098 = 5098 +a5099 = 5099 +a5100 = 5100 +a5101 = 5101 +a5102 = 5102 +a5103 = 5103 +a5104 = 5104 +a5105 = 5105 +a5106 = 5106 +a5107 = 5107 +a5108 = 5108 +a5109 = 5109 +a5110 = 5110 +a5111 = 5111 +a5112 = 5112 +a5113 = 5113 +a5114 = 5114 +a5115 = 5115 +a5116 = 5116 +a5117 = 5117 +a5118 = 5118 +a5119 = 5119 +a5120 = 5120 +a5121 = 5121 +a5122 = 5122 +a5123 = 5123 +a5124 = 5124 +a5125 = 5125 +a5126 = 5126 +a5127 = 5127 +a5128 = 5128 +a5129 = 5129 +a5130 = 5130 +a5131 = 5131 +a5132 = 5132 +a5133 = 5133 +a5134 = 5134 +a5135 = 5135 +a5136 = 5136 +a5137 = 5137 +a5138 = 5138 +a5139 = 5139 +a5140 = 5140 +a5141 = 5141 +a5142 = 5142 +a5143 = 5143 +a5144 = 5144 +a5145 = 5145 +a5146 = 5146 +a5147 = 5147 +a5148 = 5148 +a5149 = 5149 +a5150 = 5150 +a5151 = 5151 +a5152 = 5152 +a5153 = 5153 +a5154 = 5154 +a5155 = 5155 +a5156 = 5156 +a5157 = 5157 +a5158 = 5158 +a5159 = 5159 +a5160 = 5160 +a5161 = 5161 +a5162 = 5162 +a5163 = 5163 +a5164 = 5164 +a5165 = 5165 +a5166 = 5166 +a5167 = 5167 +a5168 = 5168 +a5169 = 5169 +a5170 = 5170 +a5171 = 5171 +a5172 = 5172 +a5173 = 5173 +a5174 = 5174 +a5175 = 5175 +a5176 = 5176 +a5177 = 5177 +a5178 = 5178 +a5179 = 5179 +a5180 = 5180 +a5181 = 5181 +a5182 = 5182 +a5183 = 5183 +a5184 = 5184 +a5185 = 5185 +a5186 = 5186 +a5187 = 5187 +a5188 = 5188 +a5189 = 5189 +a5190 = 5190 +a5191 = 5191 +a5192 = 5192 +a5193 = 5193 +a5194 = 5194 +a5195 = 5195 +a5196 = 5196 +a5197 = 5197 +a5198 = 5198 +a5199 = 5199 +a5200 = 5200 +a5201 = 5201 +a5202 = 5202 +a5203 = 5203 +a5204 = 5204 +a5205 = 5205 +a5206 = 5206 +a5207 = 5207 +a5208 = 5208 +a5209 = 5209 +a5210 = 5210 +a5211 = 5211 +a5212 = 5212 +a5213 = 5213 +a5214 = 5214 +a5215 = 5215 +a5216 = 5216 +a5217 = 5217 +a5218 = 5218 +a5219 = 5219 +a5220 = 5220 +a5221 = 5221 +a5222 = 5222 +a5223 = 5223 +a5224 = 5224 +a5225 = 5225 +a5226 = 5226 +a5227 = 5227 +a5228 = 5228 +a5229 = 5229 +a5230 = 5230 +a5231 = 5231 +a5232 = 5232 +a5233 = 5233 +a5234 = 5234 +a5235 = 5235 +a5236 = 5236 +a5237 = 5237 +a5238 = 5238 +a5239 = 5239 +a5240 = 5240 +a5241 = 5241 +a5242 = 5242 +a5243 = 5243 +a5244 = 5244 +a5245 = 5245 +a5246 = 5246 +a5247 = 5247 +a5248 = 5248 +a5249 = 5249 +a5250 = 5250 +a5251 = 5251 +a5252 = 5252 +a5253 = 5253 +a5254 = 5254 +a5255 = 5255 +a5256 = 5256 +a5257 = 5257 +a5258 = 5258 +a5259 = 5259 +a5260 = 5260 +a5261 = 5261 +a5262 = 5262 +a5263 = 5263 +a5264 = 5264 +a5265 = 5265 +a5266 = 5266 +a5267 = 5267 +a5268 = 5268 +a5269 = 5269 +a5270 = 5270 +a5271 = 5271 +a5272 = 5272 +a5273 = 5273 +a5274 = 5274 +a5275 = 5275 +a5276 = 5276 +a5277 = 5277 +a5278 = 5278 +a5279 = 5279 +a5280 = 5280 +a5281 = 5281 +a5282 = 5282 +a5283 = 5283 +a5284 = 5284 +a5285 = 5285 +a5286 = 5286 +a5287 = 5287 +a5288 = 5288 +a5289 = 5289 +a5290 = 5290 +a5291 = 5291 +a5292 = 5292 +a5293 = 5293 +a5294 = 5294 +a5295 = 5295 +a5296 = 5296 +a5297 = 5297 +a5298 = 5298 +a5299 = 5299 +a5300 = 5300 +a5301 = 5301 +a5302 = 5302 +a5303 = 5303 +a5304 = 5304 +a5305 = 5305 +a5306 = 5306 +a5307 = 5307 +a5308 = 5308 +a5309 = 5309 +a5310 = 5310 +a5311 = 5311 +a5312 = 5312 +a5313 = 5313 +a5314 = 5314 +a5315 = 5315 +a5316 = 5316 +a5317 = 5317 +a5318 = 5318 +a5319 = 5319 +a5320 = 5320 +a5321 = 5321 +a5322 = 5322 +a5323 = 5323 +a5324 = 5324 +a5325 = 5325 +a5326 = 5326 +a5327 = 5327 +a5328 = 5328 +a5329 = 5329 +a5330 = 5330 +a5331 = 5331 +a5332 = 5332 +a5333 = 5333 +a5334 = 5334 +a5335 = 5335 +a5336 = 5336 +a5337 = 5337 +a5338 = 5338 +a5339 = 5339 +a5340 = 5340 +a5341 = 5341 +a5342 = 5342 +a5343 = 5343 +a5344 = 5344 +a5345 = 5345 +a5346 = 5346 +a5347 = 5347 +a5348 = 5348 +a5349 = 5349 +a5350 = 5350 +a5351 = 5351 +a5352 = 5352 +a5353 = 5353 +a5354 = 5354 +a5355 = 5355 +a5356 = 5356 +a5357 = 5357 +a5358 = 5358 +a5359 = 5359 +a5360 = 5360 +a5361 = 5361 +a5362 = 5362 +a5363 = 5363 +a5364 = 5364 +a5365 = 5365 +a5366 = 5366 +a5367 = 5367 +a5368 = 5368 +a5369 = 5369 +a5370 = 5370 +a5371 = 5371 +a5372 = 5372 +a5373 = 5373 +a5374 = 5374 +a5375 = 5375 +a5376 = 5376 +a5377 = 5377 +a5378 = 5378 +a5379 = 5379 +a5380 = 5380 +a5381 = 5381 +a5382 = 5382 +a5383 = 5383 +a5384 = 5384 +a5385 = 5385 +a5386 = 5386 +a5387 = 5387 +a5388 = 5388 +a5389 = 5389 +a5390 = 5390 +a5391 = 5391 +a5392 = 5392 +a5393 = 5393 +a5394 = 5394 +a5395 = 5395 +a5396 = 5396 +a5397 = 5397 +a5398 = 5398 +a5399 = 5399 +a5400 = 5400 +a5401 = 5401 +a5402 = 5402 +a5403 = 5403 +a5404 = 5404 +a5405 = 5405 +a5406 = 5406 +a5407 = 5407 +a5408 = 5408 +a5409 = 5409 +a5410 = 5410 +a5411 = 5411 +a5412 = 5412 +a5413 = 5413 +a5414 = 5414 +a5415 = 5415 +a5416 = 5416 +a5417 = 5417 +a5418 = 5418 +a5419 = 5419 +a5420 = 5420 +a5421 = 5421 +a5422 = 5422 +a5423 = 5423 +a5424 = 5424 +a5425 = 5425 +a5426 = 5426 +a5427 = 5427 +a5428 = 5428 +a5429 = 5429 +a5430 = 5430 +a5431 = 5431 +a5432 = 5432 +a5433 = 5433 +a5434 = 5434 +a5435 = 5435 +a5436 = 5436 +a5437 = 5437 +a5438 = 5438 +a5439 = 5439 +a5440 = 5440 +a5441 = 5441 +a5442 = 5442 +a5443 = 5443 +a5444 = 5444 +a5445 = 5445 +a5446 = 5446 +a5447 = 5447 +a5448 = 5448 +a5449 = 5449 +a5450 = 5450 +a5451 = 5451 +a5452 = 5452 +a5453 = 5453 +a5454 = 5454 +a5455 = 5455 +a5456 = 5456 +a5457 = 5457 +a5458 = 5458 +a5459 = 5459 +a5460 = 5460 +a5461 = 5461 +a5462 = 5462 +a5463 = 5463 +a5464 = 5464 +a5465 = 5465 +a5466 = 5466 +a5467 = 5467 +a5468 = 5468 +a5469 = 5469 +a5470 = 5470 +a5471 = 5471 +a5472 = 5472 +a5473 = 5473 +a5474 = 5474 +a5475 = 5475 +a5476 = 5476 +a5477 = 5477 +a5478 = 5478 +a5479 = 5479 +a5480 = 5480 +a5481 = 5481 +a5482 = 5482 +a5483 = 5483 +a5484 = 5484 +a5485 = 5485 +a5486 = 5486 +a5487 = 5487 +a5488 = 5488 +a5489 = 5489 +a5490 = 5490 +a5491 = 5491 +a5492 = 5492 +a5493 = 5493 +a5494 = 5494 +a5495 = 5495 +a5496 = 5496 +a5497 = 5497 +a5498 = 5498 +a5499 = 5499 +a5500 = 5500 +a5501 = 5501 +a5502 = 5502 +a5503 = 5503 +a5504 = 5504 +a5505 = 5505 +a5506 = 5506 +a5507 = 5507 +a5508 = 5508 +a5509 = 5509 +a5510 = 5510 +a5511 = 5511 +a5512 = 5512 +a5513 = 5513 +a5514 = 5514 +a5515 = 5515 +a5516 = 5516 +a5517 = 5517 +a5518 = 5518 +a5519 = 5519 +a5520 = 5520 +a5521 = 5521 +a5522 = 5522 +a5523 = 5523 +a5524 = 5524 +a5525 = 5525 +a5526 = 5526 +a5527 = 5527 +a5528 = 5528 +a5529 = 5529 +a5530 = 5530 +a5531 = 5531 +a5532 = 5532 +a5533 = 5533 +a5534 = 5534 +a5535 = 5535 +a5536 = 5536 +a5537 = 5537 +a5538 = 5538 +a5539 = 5539 +a5540 = 5540 +a5541 = 5541 +a5542 = 5542 +a5543 = 5543 +a5544 = 5544 +a5545 = 5545 +a5546 = 5546 +a5547 = 5547 +a5548 = 5548 +a5549 = 5549 +a5550 = 5550 +a5551 = 5551 +a5552 = 5552 +a5553 = 5553 +a5554 = 5554 +a5555 = 5555 +a5556 = 5556 +a5557 = 5557 +a5558 = 5558 +a5559 = 5559 +a5560 = 5560 +a5561 = 5561 +a5562 = 5562 +a5563 = 5563 +a5564 = 5564 +a5565 = 5565 +a5566 = 5566 +a5567 = 5567 +a5568 = 5568 +a5569 = 5569 +a5570 = 5570 +a5571 = 5571 +a5572 = 5572 +a5573 = 5573 +a5574 = 5574 +a5575 = 5575 +a5576 = 5576 +a5577 = 5577 +a5578 = 5578 +a5579 = 5579 +a5580 = 5580 +a5581 = 5581 +a5582 = 5582 +a5583 = 5583 +a5584 = 5584 +a5585 = 5585 +a5586 = 5586 +a5587 = 5587 +a5588 = 5588 +a5589 = 5589 +a5590 = 5590 +a5591 = 5591 +a5592 = 5592 +a5593 = 5593 +a5594 = 5594 +a5595 = 5595 +a5596 = 5596 +a5597 = 5597 +a5598 = 5598 +a5599 = 5599 +a5600 = 5600 +a5601 = 5601 +a5602 = 5602 +a5603 = 5603 +a5604 = 5604 +a5605 = 5605 +a5606 = 5606 +a5607 = 5607 +a5608 = 5608 +a5609 = 5609 +a5610 = 5610 +a5611 = 5611 +a5612 = 5612 +a5613 = 5613 +a5614 = 5614 +a5615 = 5615 +a5616 = 5616 +a5617 = 5617 +a5618 = 5618 +a5619 = 5619 +a5620 = 5620 +a5621 = 5621 +a5622 = 5622 +a5623 = 5623 +a5624 = 5624 +a5625 = 5625 +a5626 = 5626 +a5627 = 5627 +a5628 = 5628 +a5629 = 5629 +a5630 = 5630 +a5631 = 5631 +a5632 = 5632 +a5633 = 5633 +a5634 = 5634 +a5635 = 5635 +a5636 = 5636 +a5637 = 5637 +a5638 = 5638 +a5639 = 5639 +a5640 = 5640 +a5641 = 5641 +a5642 = 5642 +a5643 = 5643 +a5644 = 5644 +a5645 = 5645 +a5646 = 5646 +a5647 = 5647 +a5648 = 5648 +a5649 = 5649 +a5650 = 5650 +a5651 = 5651 +a5652 = 5652 +a5653 = 5653 +a5654 = 5654 +a5655 = 5655 +a5656 = 5656 +a5657 = 5657 +a5658 = 5658 +a5659 = 5659 +a5660 = 5660 +a5661 = 5661 +a5662 = 5662 +a5663 = 5663 +a5664 = 5664 +a5665 = 5665 +a5666 = 5666 +a5667 = 5667 +a5668 = 5668 +a5669 = 5669 +a5670 = 5670 +a5671 = 5671 +a5672 = 5672 +a5673 = 5673 +a5674 = 5674 +a5675 = 5675 +a5676 = 5676 +a5677 = 5677 +a5678 = 5678 +a5679 = 5679 +a5680 = 5680 +a5681 = 5681 +a5682 = 5682 +a5683 = 5683 +a5684 = 5684 +a5685 = 5685 +a5686 = 5686 +a5687 = 5687 +a5688 = 5688 +a5689 = 5689 +a5690 = 5690 +a5691 = 5691 +a5692 = 5692 +a5693 = 5693 +a5694 = 5694 +a5695 = 5695 +a5696 = 5696 +a5697 = 5697 +a5698 = 5698 +a5699 = 5699 +a5700 = 5700 +a5701 = 5701 +a5702 = 5702 +a5703 = 5703 +a5704 = 5704 +a5705 = 5705 +a5706 = 5706 +a5707 = 5707 +a5708 = 5708 +a5709 = 5709 +a5710 = 5710 +a5711 = 5711 +a5712 = 5712 +a5713 = 5713 +a5714 = 5714 +a5715 = 5715 +a5716 = 5716 +a5717 = 5717 +a5718 = 5718 +a5719 = 5719 +a5720 = 5720 +a5721 = 5721 +a5722 = 5722 +a5723 = 5723 +a5724 = 5724 +a5725 = 5725 +a5726 = 5726 +a5727 = 5727 +a5728 = 5728 +a5729 = 5729 +a5730 = 5730 +a5731 = 5731 +a5732 = 5732 +a5733 = 5733 +a5734 = 5734 +a5735 = 5735 +a5736 = 5736 +a5737 = 5737 +a5738 = 5738 +a5739 = 5739 +a5740 = 5740 +a5741 = 5741 +a5742 = 5742 +a5743 = 5743 +a5744 = 5744 +a5745 = 5745 +a5746 = 5746 +a5747 = 5747 +a5748 = 5748 +a5749 = 5749 +a5750 = 5750 +a5751 = 5751 +a5752 = 5752 +a5753 = 5753 +a5754 = 5754 +a5755 = 5755 +a5756 = 5756 +a5757 = 5757 +a5758 = 5758 +a5759 = 5759 +a5760 = 5760 +a5761 = 5761 +a5762 = 5762 +a5763 = 5763 +a5764 = 5764 +a5765 = 5765 +a5766 = 5766 +a5767 = 5767 +a5768 = 5768 +a5769 = 5769 +a5770 = 5770 +a5771 = 5771 +a5772 = 5772 +a5773 = 5773 +a5774 = 5774 +a5775 = 5775 +a5776 = 5776 +a5777 = 5777 +a5778 = 5778 +a5779 = 5779 +a5780 = 5780 +a5781 = 5781 +a5782 = 5782 +a5783 = 5783 +a5784 = 5784 +a5785 = 5785 +a5786 = 5786 +a5787 = 5787 +a5788 = 5788 +a5789 = 5789 +a5790 = 5790 +a5791 = 5791 +a5792 = 5792 +a5793 = 5793 +a5794 = 5794 +a5795 = 5795 +a5796 = 5796 +a5797 = 5797 +a5798 = 5798 +a5799 = 5799 +a5800 = 5800 +a5801 = 5801 +a5802 = 5802 +a5803 = 5803 +a5804 = 5804 +a5805 = 5805 +a5806 = 5806 +a5807 = 5807 +a5808 = 5808 +a5809 = 5809 +a5810 = 5810 +a5811 = 5811 +a5812 = 5812 +a5813 = 5813 +a5814 = 5814 +a5815 = 5815 +a5816 = 5816 +a5817 = 5817 +a5818 = 5818 +a5819 = 5819 +a5820 = 5820 +a5821 = 5821 +a5822 = 5822 +a5823 = 5823 +a5824 = 5824 +a5825 = 5825 +a5826 = 5826 +a5827 = 5827 +a5828 = 5828 +a5829 = 5829 +a5830 = 5830 +a5831 = 5831 +a5832 = 5832 +a5833 = 5833 +a5834 = 5834 +a5835 = 5835 +a5836 = 5836 +a5837 = 5837 +a5838 = 5838 +a5839 = 5839 +a5840 = 5840 +a5841 = 5841 +a5842 = 5842 +a5843 = 5843 +a5844 = 5844 +a5845 = 5845 +a5846 = 5846 +a5847 = 5847 +a5848 = 5848 +a5849 = 5849 +a5850 = 5850 +a5851 = 5851 +a5852 = 5852 +a5853 = 5853 +a5854 = 5854 +a5855 = 5855 +a5856 = 5856 +a5857 = 5857 +a5858 = 5858 +a5859 = 5859 +a5860 = 5860 +a5861 = 5861 +a5862 = 5862 +a5863 = 5863 +a5864 = 5864 +a5865 = 5865 +a5866 = 5866 +a5867 = 5867 +a5868 = 5868 +a5869 = 5869 +a5870 = 5870 +a5871 = 5871 +a5872 = 5872 +a5873 = 5873 +a5874 = 5874 +a5875 = 5875 +a5876 = 5876 +a5877 = 5877 +a5878 = 5878 +a5879 = 5879 +a5880 = 5880 +a5881 = 5881 +a5882 = 5882 +a5883 = 5883 +a5884 = 5884 +a5885 = 5885 +a5886 = 5886 +a5887 = 5887 +a5888 = 5888 +a5889 = 5889 +a5890 = 5890 +a5891 = 5891 +a5892 = 5892 +a5893 = 5893 +a5894 = 5894 +a5895 = 5895 +a5896 = 5896 +a5897 = 5897 +a5898 = 5898 +a5899 = 5899 +a5900 = 5900 +a5901 = 5901 +a5902 = 5902 +a5903 = 5903 +a5904 = 5904 +a5905 = 5905 +a5906 = 5906 +a5907 = 5907 +a5908 = 5908 +a5909 = 5909 +a5910 = 5910 +a5911 = 5911 +a5912 = 5912 +a5913 = 5913 +a5914 = 5914 +a5915 = 5915 +a5916 = 5916 +a5917 = 5917 +a5918 = 5918 +a5919 = 5919 +a5920 = 5920 +a5921 = 5921 +a5922 = 5922 +a5923 = 5923 +a5924 = 5924 +a5925 = 5925 +a5926 = 5926 +a5927 = 5927 +a5928 = 5928 +a5929 = 5929 +a5930 = 5930 +a5931 = 5931 +a5932 = 5932 +a5933 = 5933 +a5934 = 5934 +a5935 = 5935 +a5936 = 5936 +a5937 = 5937 +a5938 = 5938 +a5939 = 5939 +a5940 = 5940 +a5941 = 5941 +a5942 = 5942 +a5943 = 5943 +a5944 = 5944 +a5945 = 5945 +a5946 = 5946 +a5947 = 5947 +a5948 = 5948 +a5949 = 5949 +a5950 = 5950 +a5951 = 5951 +a5952 = 5952 +a5953 = 5953 +a5954 = 5954 +a5955 = 5955 +a5956 = 5956 +a5957 = 5957 +a5958 = 5958 +a5959 = 5959 +a5960 = 5960 +a5961 = 5961 +a5962 = 5962 +a5963 = 5963 +a5964 = 5964 +a5965 = 5965 +a5966 = 5966 +a5967 = 5967 +a5968 = 5968 +a5969 = 5969 +a5970 = 5970 +a5971 = 5971 +a5972 = 5972 +a5973 = 5973 +a5974 = 5974 +a5975 = 5975 +a5976 = 5976 +a5977 = 5977 +a5978 = 5978 +a5979 = 5979 +a5980 = 5980 +a5981 = 5981 +a5982 = 5982 +a5983 = 5983 +a5984 = 5984 +a5985 = 5985 +a5986 = 5986 +a5987 = 5987 +a5988 = 5988 +a5989 = 5989 +a5990 = 5990 +a5991 = 5991 +a5992 = 5992 +a5993 = 5993 +a5994 = 5994 +a5995 = 5995 +a5996 = 5996 +a5997 = 5997 +a5998 = 5998 +a5999 = 5999 +a6000 = 6000 +a6001 = 6001 +a6002 = 6002 +a6003 = 6003 +a6004 = 6004 +a6005 = 6005 +a6006 = 6006 +a6007 = 6007 +a6008 = 6008 +a6009 = 6009 +a6010 = 6010 +a6011 = 6011 +a6012 = 6012 +a6013 = 6013 +a6014 = 6014 +a6015 = 6015 +a6016 = 6016 +a6017 = 6017 +a6018 = 6018 +a6019 = 6019 +a6020 = 6020 +a6021 = 6021 +a6022 = 6022 +a6023 = 6023 +a6024 = 6024 +a6025 = 6025 +a6026 = 6026 +a6027 = 6027 +a6028 = 6028 +a6029 = 6029 +a6030 = 6030 +a6031 = 6031 +a6032 = 6032 +a6033 = 6033 +a6034 = 6034 +a6035 = 6035 +a6036 = 6036 +a6037 = 6037 +a6038 = 6038 +a6039 = 6039 +a6040 = 6040 +a6041 = 6041 +a6042 = 6042 +a6043 = 6043 +a6044 = 6044 +a6045 = 6045 +a6046 = 6046 +a6047 = 6047 +a6048 = 6048 +a6049 = 6049 +a6050 = 6050 +a6051 = 6051 +a6052 = 6052 +a6053 = 6053 +a6054 = 6054 +a6055 = 6055 +a6056 = 6056 +a6057 = 6057 +a6058 = 6058 +a6059 = 6059 +a6060 = 6060 +a6061 = 6061 +a6062 = 6062 +a6063 = 6063 +a6064 = 6064 +a6065 = 6065 +a6066 = 6066 +a6067 = 6067 +a6068 = 6068 +a6069 = 6069 +a6070 = 6070 +a6071 = 6071 +a6072 = 6072 +a6073 = 6073 +a6074 = 6074 +a6075 = 6075 +a6076 = 6076 +a6077 = 6077 +a6078 = 6078 +a6079 = 6079 +a6080 = 6080 +a6081 = 6081 +a6082 = 6082 +a6083 = 6083 +a6084 = 6084 +a6085 = 6085 +a6086 = 6086 +a6087 = 6087 +a6088 = 6088 +a6089 = 6089 +a6090 = 6090 +a6091 = 6091 +a6092 = 6092 +a6093 = 6093 +a6094 = 6094 +a6095 = 6095 +a6096 = 6096 +a6097 = 6097 +a6098 = 6098 +a6099 = 6099 +a6100 = 6100 +a6101 = 6101 +a6102 = 6102 +a6103 = 6103 +a6104 = 6104 +a6105 = 6105 +a6106 = 6106 +a6107 = 6107 +a6108 = 6108 +a6109 = 6109 +a6110 = 6110 +a6111 = 6111 +a6112 = 6112 +a6113 = 6113 +a6114 = 6114 +a6115 = 6115 +a6116 = 6116 +a6117 = 6117 +a6118 = 6118 +a6119 = 6119 +a6120 = 6120 +a6121 = 6121 +a6122 = 6122 +a6123 = 6123 +a6124 = 6124 +a6125 = 6125 +a6126 = 6126 +a6127 = 6127 +a6128 = 6128 +a6129 = 6129 +a6130 = 6130 +a6131 = 6131 +a6132 = 6132 +a6133 = 6133 +a6134 = 6134 +a6135 = 6135 +a6136 = 6136 +a6137 = 6137 +a6138 = 6138 +a6139 = 6139 +a6140 = 6140 +a6141 = 6141 +a6142 = 6142 +a6143 = 6143 +a6144 = 6144 +a6145 = 6145 +a6146 = 6146 +a6147 = 6147 +a6148 = 6148 +a6149 = 6149 +a6150 = 6150 +a6151 = 6151 +a6152 = 6152 +a6153 = 6153 +a6154 = 6154 +a6155 = 6155 +a6156 = 6156 +a6157 = 6157 +a6158 = 6158 +a6159 = 6159 +a6160 = 6160 +a6161 = 6161 +a6162 = 6162 +a6163 = 6163 +a6164 = 6164 +a6165 = 6165 +a6166 = 6166 +a6167 = 6167 +a6168 = 6168 +a6169 = 6169 +a6170 = 6170 +a6171 = 6171 +a6172 = 6172 +a6173 = 6173 +a6174 = 6174 +a6175 = 6175 +a6176 = 6176 +a6177 = 6177 +a6178 = 6178 +a6179 = 6179 +a6180 = 6180 +a6181 = 6181 +a6182 = 6182 +a6183 = 6183 +a6184 = 6184 +a6185 = 6185 +a6186 = 6186 +a6187 = 6187 +a6188 = 6188 +a6189 = 6189 +a6190 = 6190 +a6191 = 6191 +a6192 = 6192 +a6193 = 6193 +a6194 = 6194 +a6195 = 6195 +a6196 = 6196 +a6197 = 6197 +a6198 = 6198 +a6199 = 6199 +a6200 = 6200 +a6201 = 6201 +a6202 = 6202 +a6203 = 6203 +a6204 = 6204 +a6205 = 6205 +a6206 = 6206 +a6207 = 6207 +a6208 = 6208 +a6209 = 6209 +a6210 = 6210 +a6211 = 6211 +a6212 = 6212 +a6213 = 6213 +a6214 = 6214 +a6215 = 6215 +a6216 = 6216 +a6217 = 6217 +a6218 = 6218 +a6219 = 6219 +a6220 = 6220 +a6221 = 6221 +a6222 = 6222 +a6223 = 6223 +a6224 = 6224 +a6225 = 6225 +a6226 = 6226 +a6227 = 6227 +a6228 = 6228 +a6229 = 6229 +a6230 = 6230 +a6231 = 6231 +a6232 = 6232 +a6233 = 6233 +a6234 = 6234 +a6235 = 6235 +a6236 = 6236 +a6237 = 6237 +a6238 = 6238 +a6239 = 6239 +a6240 = 6240 +a6241 = 6241 +a6242 = 6242 +a6243 = 6243 +a6244 = 6244 +a6245 = 6245 +a6246 = 6246 +a6247 = 6247 +a6248 = 6248 +a6249 = 6249 +a6250 = 6250 +a6251 = 6251 +a6252 = 6252 +a6253 = 6253 +a6254 = 6254 +a6255 = 6255 +a6256 = 6256 +a6257 = 6257 +a6258 = 6258 +a6259 = 6259 +a6260 = 6260 +a6261 = 6261 +a6262 = 6262 +a6263 = 6263 +a6264 = 6264 +a6265 = 6265 +a6266 = 6266 +a6267 = 6267 +a6268 = 6268 +a6269 = 6269 +a6270 = 6270 +a6271 = 6271 +a6272 = 6272 +a6273 = 6273 +a6274 = 6274 +a6275 = 6275 +a6276 = 6276 +a6277 = 6277 +a6278 = 6278 +a6279 = 6279 +a6280 = 6280 +a6281 = 6281 +a6282 = 6282 +a6283 = 6283 +a6284 = 6284 +a6285 = 6285 +a6286 = 6286 +a6287 = 6287 +a6288 = 6288 +a6289 = 6289 +a6290 = 6290 +a6291 = 6291 +a6292 = 6292 +a6293 = 6293 +a6294 = 6294 +a6295 = 6295 +a6296 = 6296 +a6297 = 6297 +a6298 = 6298 +a6299 = 6299 +a6300 = 6300 +a6301 = 6301 +a6302 = 6302 +a6303 = 6303 +a6304 = 6304 +a6305 = 6305 +a6306 = 6306 +a6307 = 6307 +a6308 = 6308 +a6309 = 6309 +a6310 = 6310 +a6311 = 6311 +a6312 = 6312 +a6313 = 6313 +a6314 = 6314 +a6315 = 6315 +a6316 = 6316 +a6317 = 6317 +a6318 = 6318 +a6319 = 6319 +a6320 = 6320 +a6321 = 6321 +a6322 = 6322 +a6323 = 6323 +a6324 = 6324 +a6325 = 6325 +a6326 = 6326 +a6327 = 6327 +a6328 = 6328 +a6329 = 6329 +a6330 = 6330 +a6331 = 6331 +a6332 = 6332 +a6333 = 6333 +a6334 = 6334 +a6335 = 6335 +a6336 = 6336 +a6337 = 6337 +a6338 = 6338 +a6339 = 6339 +a6340 = 6340 +a6341 = 6341 +a6342 = 6342 +a6343 = 6343 +a6344 = 6344 +a6345 = 6345 +a6346 = 6346 +a6347 = 6347 +a6348 = 6348 +a6349 = 6349 +a6350 = 6350 +a6351 = 6351 +a6352 = 6352 +a6353 = 6353 +a6354 = 6354 +a6355 = 6355 +a6356 = 6356 +a6357 = 6357 +a6358 = 6358 +a6359 = 6359 +a6360 = 6360 +a6361 = 6361 +a6362 = 6362 +a6363 = 6363 +a6364 = 6364 +a6365 = 6365 +a6366 = 6366 +a6367 = 6367 +a6368 = 6368 +a6369 = 6369 +a6370 = 6370 +a6371 = 6371 +a6372 = 6372 +a6373 = 6373 +a6374 = 6374 +a6375 = 6375 +a6376 = 6376 +a6377 = 6377 +a6378 = 6378 +a6379 = 6379 +a6380 = 6380 +a6381 = 6381 +a6382 = 6382 +a6383 = 6383 +a6384 = 6384 +a6385 = 6385 +a6386 = 6386 +a6387 = 6387 +a6388 = 6388 +a6389 = 6389 +a6390 = 6390 +a6391 = 6391 +a6392 = 6392 +a6393 = 6393 +a6394 = 6394 +a6395 = 6395 +a6396 = 6396 +a6397 = 6397 +a6398 = 6398 +a6399 = 6399 +a6400 = 6400 +a6401 = 6401 +a6402 = 6402 +a6403 = 6403 +a6404 = 6404 +a6405 = 6405 +a6406 = 6406 +a6407 = 6407 +a6408 = 6408 +a6409 = 6409 +a6410 = 6410 +a6411 = 6411 +a6412 = 6412 +a6413 = 6413 +a6414 = 6414 +a6415 = 6415 +a6416 = 6416 +a6417 = 6417 +a6418 = 6418 +a6419 = 6419 +a6420 = 6420 +a6421 = 6421 +a6422 = 6422 +a6423 = 6423 +a6424 = 6424 +a6425 = 6425 +a6426 = 6426 +a6427 = 6427 +a6428 = 6428 +a6429 = 6429 +a6430 = 6430 +a6431 = 6431 +a6432 = 6432 +a6433 = 6433 +a6434 = 6434 +a6435 = 6435 +a6436 = 6436 +a6437 = 6437 +a6438 = 6438 +a6439 = 6439 +a6440 = 6440 +a6441 = 6441 +a6442 = 6442 +a6443 = 6443 +a6444 = 6444 +a6445 = 6445 +a6446 = 6446 +a6447 = 6447 +a6448 = 6448 +a6449 = 6449 +a6450 = 6450 +a6451 = 6451 +a6452 = 6452 +a6453 = 6453 +a6454 = 6454 +a6455 = 6455 +a6456 = 6456 +a6457 = 6457 +a6458 = 6458 +a6459 = 6459 +a6460 = 6460 +a6461 = 6461 +a6462 = 6462 +a6463 = 6463 +a6464 = 6464 +a6465 = 6465 +a6466 = 6466 +a6467 = 6467 +a6468 = 6468 +a6469 = 6469 +a6470 = 6470 +a6471 = 6471 +a6472 = 6472 +a6473 = 6473 +a6474 = 6474 +a6475 = 6475 +a6476 = 6476 +a6477 = 6477 +a6478 = 6478 +a6479 = 6479 +a6480 = 6480 +a6481 = 6481 +a6482 = 6482 +a6483 = 6483 +a6484 = 6484 +a6485 = 6485 +a6486 = 6486 +a6487 = 6487 +a6488 = 6488 +a6489 = 6489 +a6490 = 6490 +a6491 = 6491 +a6492 = 6492 +a6493 = 6493 +a6494 = 6494 +a6495 = 6495 +a6496 = 6496 +a6497 = 6497 +a6498 = 6498 +a6499 = 6499 +a6500 = 6500 +a6501 = 6501 +a6502 = 6502 +a6503 = 6503 +a6504 = 6504 +a6505 = 6505 +a6506 = 6506 +a6507 = 6507 +a6508 = 6508 +a6509 = 6509 +a6510 = 6510 +a6511 = 6511 +a6512 = 6512 +a6513 = 6513 +a6514 = 6514 +a6515 = 6515 +a6516 = 6516 +a6517 = 6517 +a6518 = 6518 +a6519 = 6519 +a6520 = 6520 +a6521 = 6521 +a6522 = 6522 +a6523 = 6523 +a6524 = 6524 +a6525 = 6525 +a6526 = 6526 +a6527 = 6527 +a6528 = 6528 +a6529 = 6529 +a6530 = 6530 +a6531 = 6531 +a6532 = 6532 +a6533 = 6533 +a6534 = 6534 +a6535 = 6535 +a6536 = 6536 +a6537 = 6537 +a6538 = 6538 +a6539 = 6539 +a6540 = 6540 +a6541 = 6541 +a6542 = 6542 +a6543 = 6543 +a6544 = 6544 +a6545 = 6545 +a6546 = 6546 +a6547 = 6547 +a6548 = 6548 +a6549 = 6549 +a6550 = 6550 +a6551 = 6551 +a6552 = 6552 +a6553 = 6553 +a6554 = 6554 +a6555 = 6555 +a6556 = 6556 +a6557 = 6557 +a6558 = 6558 +a6559 = 6559 +a6560 = 6560 +a6561 = 6561 +a6562 = 6562 +a6563 = 6563 +a6564 = 6564 +a6565 = 6565 +a6566 = 6566 +a6567 = 6567 +a6568 = 6568 +a6569 = 6569 +a6570 = 6570 +a6571 = 6571 +a6572 = 6572 +a6573 = 6573 +a6574 = 6574 +a6575 = 6575 +a6576 = 6576 +a6577 = 6577 +a6578 = 6578 +a6579 = 6579 +a6580 = 6580 +a6581 = 6581 +a6582 = 6582 +a6583 = 6583 +a6584 = 6584 +a6585 = 6585 +a6586 = 6586 +a6587 = 6587 +a6588 = 6588 +a6589 = 6589 +a6590 = 6590 +a6591 = 6591 +a6592 = 6592 +a6593 = 6593 +a6594 = 6594 +a6595 = 6595 +a6596 = 6596 +a6597 = 6597 +a6598 = 6598 +a6599 = 6599 +a6600 = 6600 +a6601 = 6601 +a6602 = 6602 +a6603 = 6603 +a6604 = 6604 +a6605 = 6605 +a6606 = 6606 +a6607 = 6607 +a6608 = 6608 +a6609 = 6609 +a6610 = 6610 +a6611 = 6611 +a6612 = 6612 +a6613 = 6613 +a6614 = 6614 +a6615 = 6615 +a6616 = 6616 +a6617 = 6617 +a6618 = 6618 +a6619 = 6619 +a6620 = 6620 +a6621 = 6621 +a6622 = 6622 +a6623 = 6623 +a6624 = 6624 +a6625 = 6625 +a6626 = 6626 +a6627 = 6627 +a6628 = 6628 +a6629 = 6629 +a6630 = 6630 +a6631 = 6631 +a6632 = 6632 +a6633 = 6633 +a6634 = 6634 +a6635 = 6635 +a6636 = 6636 +a6637 = 6637 +a6638 = 6638 +a6639 = 6639 +a6640 = 6640 +a6641 = 6641 +a6642 = 6642 +a6643 = 6643 +a6644 = 6644 +a6645 = 6645 +a6646 = 6646 +a6647 = 6647 +a6648 = 6648 +a6649 = 6649 +a6650 = 6650 +a6651 = 6651 +a6652 = 6652 +a6653 = 6653 +a6654 = 6654 +a6655 = 6655 +a6656 = 6656 +a6657 = 6657 +a6658 = 6658 +a6659 = 6659 +a6660 = 6660 +a6661 = 6661 +a6662 = 6662 +a6663 = 6663 +a6664 = 6664 +a6665 = 6665 +a6666 = 6666 +a6667 = 6667 +a6668 = 6668 +a6669 = 6669 +a6670 = 6670 +a6671 = 6671 +a6672 = 6672 +a6673 = 6673 +a6674 = 6674 +a6675 = 6675 +a6676 = 6676 +a6677 = 6677 +a6678 = 6678 +a6679 = 6679 +a6680 = 6680 +a6681 = 6681 +a6682 = 6682 +a6683 = 6683 +a6684 = 6684 +a6685 = 6685 +a6686 = 6686 +a6687 = 6687 +a6688 = 6688 +a6689 = 6689 +a6690 = 6690 +a6691 = 6691 +a6692 = 6692 +a6693 = 6693 +a6694 = 6694 +a6695 = 6695 +a6696 = 6696 +a6697 = 6697 +a6698 = 6698 +a6699 = 6699 +a6700 = 6700 +a6701 = 6701 +a6702 = 6702 +a6703 = 6703 +a6704 = 6704 +a6705 = 6705 +a6706 = 6706 +a6707 = 6707 +a6708 = 6708 +a6709 = 6709 +a6710 = 6710 +a6711 = 6711 +a6712 = 6712 +a6713 = 6713 +a6714 = 6714 +a6715 = 6715 +a6716 = 6716 +a6717 = 6717 +a6718 = 6718 +a6719 = 6719 +a6720 = 6720 +a6721 = 6721 +a6722 = 6722 +a6723 = 6723 +a6724 = 6724 +a6725 = 6725 +a6726 = 6726 +a6727 = 6727 +a6728 = 6728 +a6729 = 6729 +a6730 = 6730 +a6731 = 6731 +a6732 = 6732 +a6733 = 6733 +a6734 = 6734 +a6735 = 6735 +a6736 = 6736 +a6737 = 6737 +a6738 = 6738 +a6739 = 6739 +a6740 = 6740 +a6741 = 6741 +a6742 = 6742 +a6743 = 6743 +a6744 = 6744 +a6745 = 6745 +a6746 = 6746 +a6747 = 6747 +a6748 = 6748 +a6749 = 6749 +a6750 = 6750 +a6751 = 6751 +a6752 = 6752 +a6753 = 6753 +a6754 = 6754 +a6755 = 6755 +a6756 = 6756 +a6757 = 6757 +a6758 = 6758 +a6759 = 6759 +a6760 = 6760 +a6761 = 6761 +a6762 = 6762 +a6763 = 6763 +a6764 = 6764 +a6765 = 6765 +a6766 = 6766 +a6767 = 6767 +a6768 = 6768 +a6769 = 6769 +a6770 = 6770 +a6771 = 6771 +a6772 = 6772 +a6773 = 6773 +a6774 = 6774 +a6775 = 6775 +a6776 = 6776 +a6777 = 6777 +a6778 = 6778 +a6779 = 6779 +a6780 = 6780 +a6781 = 6781 +a6782 = 6782 +a6783 = 6783 +a6784 = 6784 +a6785 = 6785 +a6786 = 6786 +a6787 = 6787 +a6788 = 6788 +a6789 = 6789 +a6790 = 6790 +a6791 = 6791 +a6792 = 6792 +a6793 = 6793 +a6794 = 6794 +a6795 = 6795 +a6796 = 6796 +a6797 = 6797 +a6798 = 6798 +a6799 = 6799 +a6800 = 6800 +a6801 = 6801 +a6802 = 6802 +a6803 = 6803 +a6804 = 6804 +a6805 = 6805 +a6806 = 6806 +a6807 = 6807 +a6808 = 6808 +a6809 = 6809 +a6810 = 6810 +a6811 = 6811 +a6812 = 6812 +a6813 = 6813 +a6814 = 6814 +a6815 = 6815 +a6816 = 6816 +a6817 = 6817 +a6818 = 6818 +a6819 = 6819 +a6820 = 6820 +a6821 = 6821 +a6822 = 6822 +a6823 = 6823 +a6824 = 6824 +a6825 = 6825 +a6826 = 6826 +a6827 = 6827 +a6828 = 6828 +a6829 = 6829 +a6830 = 6830 +a6831 = 6831 +a6832 = 6832 +a6833 = 6833 +a6834 = 6834 +a6835 = 6835 +a6836 = 6836 +a6837 = 6837 +a6838 = 6838 +a6839 = 6839 +a6840 = 6840 +a6841 = 6841 +a6842 = 6842 +a6843 = 6843 +a6844 = 6844 +a6845 = 6845 +a6846 = 6846 +a6847 = 6847 +a6848 = 6848 +a6849 = 6849 +a6850 = 6850 +a6851 = 6851 +a6852 = 6852 +a6853 = 6853 +a6854 = 6854 +a6855 = 6855 +a6856 = 6856 +a6857 = 6857 +a6858 = 6858 +a6859 = 6859 +a6860 = 6860 +a6861 = 6861 +a6862 = 6862 +a6863 = 6863 +a6864 = 6864 +a6865 = 6865 +a6866 = 6866 +a6867 = 6867 +a6868 = 6868 +a6869 = 6869 +a6870 = 6870 +a6871 = 6871 +a6872 = 6872 +a6873 = 6873 +a6874 = 6874 +a6875 = 6875 +a6876 = 6876 +a6877 = 6877 +a6878 = 6878 +a6879 = 6879 +a6880 = 6880 +a6881 = 6881 +a6882 = 6882 +a6883 = 6883 +a6884 = 6884 +a6885 = 6885 +a6886 = 6886 +a6887 = 6887 +a6888 = 6888 +a6889 = 6889 +a6890 = 6890 +a6891 = 6891 +a6892 = 6892 +a6893 = 6893 +a6894 = 6894 +a6895 = 6895 +a6896 = 6896 +a6897 = 6897 +a6898 = 6898 +a6899 = 6899 +a6900 = 6900 +a6901 = 6901 +a6902 = 6902 +a6903 = 6903 +a6904 = 6904 +a6905 = 6905 +a6906 = 6906 +a6907 = 6907 +a6908 = 6908 +a6909 = 6909 +a6910 = 6910 +a6911 = 6911 +a6912 = 6912 +a6913 = 6913 +a6914 = 6914 +a6915 = 6915 +a6916 = 6916 +a6917 = 6917 +a6918 = 6918 +a6919 = 6919 +a6920 = 6920 +a6921 = 6921 +a6922 = 6922 +a6923 = 6923 +a6924 = 6924 +a6925 = 6925 +a6926 = 6926 +a6927 = 6927 +a6928 = 6928 +a6929 = 6929 +a6930 = 6930 +a6931 = 6931 +a6932 = 6932 +a6933 = 6933 +a6934 = 6934 +a6935 = 6935 +a6936 = 6936 +a6937 = 6937 +a6938 = 6938 +a6939 = 6939 +a6940 = 6940 +a6941 = 6941 +a6942 = 6942 +a6943 = 6943 +a6944 = 6944 +a6945 = 6945 +a6946 = 6946 +a6947 = 6947 +a6948 = 6948 +a6949 = 6949 +a6950 = 6950 +a6951 = 6951 +a6952 = 6952 +a6953 = 6953 +a6954 = 6954 +a6955 = 6955 +a6956 = 6956 +a6957 = 6957 +a6958 = 6958 +a6959 = 6959 +a6960 = 6960 +a6961 = 6961 +a6962 = 6962 +a6963 = 6963 +a6964 = 6964 +a6965 = 6965 +a6966 = 6966 +a6967 = 6967 +a6968 = 6968 +a6969 = 6969 +a6970 = 6970 +a6971 = 6971 +a6972 = 6972 +a6973 = 6973 +a6974 = 6974 +a6975 = 6975 +a6976 = 6976 +a6977 = 6977 +a6978 = 6978 +a6979 = 6979 +a6980 = 6980 +a6981 = 6981 +a6982 = 6982 +a6983 = 6983 +a6984 = 6984 +a6985 = 6985 +a6986 = 6986 +a6987 = 6987 +a6988 = 6988 +a6989 = 6989 +a6990 = 6990 +a6991 = 6991 +a6992 = 6992 +a6993 = 6993 +a6994 = 6994 +a6995 = 6995 +a6996 = 6996 +a6997 = 6997 +a6998 = 6998 +a6999 = 6999 +a7000 = 7000 +a7001 = 7001 +a7002 = 7002 +a7003 = 7003 +a7004 = 7004 +a7005 = 7005 +a7006 = 7006 +a7007 = 7007 +a7008 = 7008 +a7009 = 7009 +a7010 = 7010 +a7011 = 7011 +a7012 = 7012 +a7013 = 7013 +a7014 = 7014 +a7015 = 7015 +a7016 = 7016 +a7017 = 7017 +a7018 = 7018 +a7019 = 7019 +a7020 = 7020 +a7021 = 7021 +a7022 = 7022 +a7023 = 7023 +a7024 = 7024 +a7025 = 7025 +a7026 = 7026 +a7027 = 7027 +a7028 = 7028 +a7029 = 7029 +a7030 = 7030 +a7031 = 7031 +a7032 = 7032 +a7033 = 7033 +a7034 = 7034 +a7035 = 7035 +a7036 = 7036 +a7037 = 7037 +a7038 = 7038 +a7039 = 7039 +a7040 = 7040 +a7041 = 7041 +a7042 = 7042 +a7043 = 7043 +a7044 = 7044 +a7045 = 7045 +a7046 = 7046 +a7047 = 7047 +a7048 = 7048 +a7049 = 7049 +a7050 = 7050 +a7051 = 7051 +a7052 = 7052 +a7053 = 7053 +a7054 = 7054 +a7055 = 7055 +a7056 = 7056 +a7057 = 7057 +a7058 = 7058 +a7059 = 7059 +a7060 = 7060 +a7061 = 7061 +a7062 = 7062 +a7063 = 7063 +a7064 = 7064 +a7065 = 7065 +a7066 = 7066 +a7067 = 7067 +a7068 = 7068 +a7069 = 7069 +a7070 = 7070 +a7071 = 7071 +a7072 = 7072 +a7073 = 7073 +a7074 = 7074 +a7075 = 7075 +a7076 = 7076 +a7077 = 7077 +a7078 = 7078 +a7079 = 7079 +a7080 = 7080 +a7081 = 7081 +a7082 = 7082 +a7083 = 7083 +a7084 = 7084 +a7085 = 7085 +a7086 = 7086 +a7087 = 7087 +a7088 = 7088 +a7089 = 7089 +a7090 = 7090 +a7091 = 7091 +a7092 = 7092 +a7093 = 7093 +a7094 = 7094 +a7095 = 7095 +a7096 = 7096 +a7097 = 7097 +a7098 = 7098 +a7099 = 7099 +a7100 = 7100 +a7101 = 7101 +a7102 = 7102 +a7103 = 7103 +a7104 = 7104 +a7105 = 7105 +a7106 = 7106 +a7107 = 7107 +a7108 = 7108 +a7109 = 7109 +a7110 = 7110 +a7111 = 7111 +a7112 = 7112 +a7113 = 7113 +a7114 = 7114 +a7115 = 7115 +a7116 = 7116 +a7117 = 7117 +a7118 = 7118 +a7119 = 7119 +a7120 = 7120 +a7121 = 7121 +a7122 = 7122 +a7123 = 7123 +a7124 = 7124 +a7125 = 7125 +a7126 = 7126 +a7127 = 7127 +a7128 = 7128 +a7129 = 7129 +a7130 = 7130 +a7131 = 7131 +a7132 = 7132 +a7133 = 7133 +a7134 = 7134 +a7135 = 7135 +a7136 = 7136 +a7137 = 7137 +a7138 = 7138 +a7139 = 7139 +a7140 = 7140 +a7141 = 7141 +a7142 = 7142 +a7143 = 7143 +a7144 = 7144 +a7145 = 7145 +a7146 = 7146 +a7147 = 7147 +a7148 = 7148 +a7149 = 7149 +a7150 = 7150 +a7151 = 7151 +a7152 = 7152 +a7153 = 7153 +a7154 = 7154 +a7155 = 7155 +a7156 = 7156 +a7157 = 7157 +a7158 = 7158 +a7159 = 7159 +a7160 = 7160 +a7161 = 7161 +a7162 = 7162 +a7163 = 7163 +a7164 = 7164 +a7165 = 7165 +a7166 = 7166 +a7167 = 7167 +a7168 = 7168 +a7169 = 7169 +a7170 = 7170 +a7171 = 7171 +a7172 = 7172 +a7173 = 7173 +a7174 = 7174 +a7175 = 7175 +a7176 = 7176 +a7177 = 7177 +a7178 = 7178 +a7179 = 7179 +a7180 = 7180 +a7181 = 7181 +a7182 = 7182 +a7183 = 7183 +a7184 = 7184 +a7185 = 7185 +a7186 = 7186 +a7187 = 7187 +a7188 = 7188 +a7189 = 7189 +a7190 = 7190 +a7191 = 7191 +a7192 = 7192 +a7193 = 7193 +a7194 = 7194 +a7195 = 7195 +a7196 = 7196 +a7197 = 7197 +a7198 = 7198 +a7199 = 7199 +a7200 = 7200 +a7201 = 7201 +a7202 = 7202 +a7203 = 7203 +a7204 = 7204 +a7205 = 7205 +a7206 = 7206 +a7207 = 7207 +a7208 = 7208 +a7209 = 7209 +a7210 = 7210 +a7211 = 7211 +a7212 = 7212 +a7213 = 7213 +a7214 = 7214 +a7215 = 7215 +a7216 = 7216 +a7217 = 7217 +a7218 = 7218 +a7219 = 7219 +a7220 = 7220 +a7221 = 7221 +a7222 = 7222 +a7223 = 7223 +a7224 = 7224 +a7225 = 7225 +a7226 = 7226 +a7227 = 7227 +a7228 = 7228 +a7229 = 7229 +a7230 = 7230 +a7231 = 7231 +a7232 = 7232 +a7233 = 7233 +a7234 = 7234 +a7235 = 7235 +a7236 = 7236 +a7237 = 7237 +a7238 = 7238 +a7239 = 7239 +a7240 = 7240 +a7241 = 7241 +a7242 = 7242 +a7243 = 7243 +a7244 = 7244 +a7245 = 7245 +a7246 = 7246 +a7247 = 7247 +a7248 = 7248 +a7249 = 7249 +a7250 = 7250 +a7251 = 7251 +a7252 = 7252 +a7253 = 7253 +a7254 = 7254 +a7255 = 7255 +a7256 = 7256 +a7257 = 7257 +a7258 = 7258 +a7259 = 7259 +a7260 = 7260 +a7261 = 7261 +a7262 = 7262 +a7263 = 7263 +a7264 = 7264 +a7265 = 7265 +a7266 = 7266 +a7267 = 7267 +a7268 = 7268 +a7269 = 7269 +a7270 = 7270 +a7271 = 7271 +a7272 = 7272 +a7273 = 7273 +a7274 = 7274 +a7275 = 7275 +a7276 = 7276 +a7277 = 7277 +a7278 = 7278 +a7279 = 7279 +a7280 = 7280 +a7281 = 7281 +a7282 = 7282 +a7283 = 7283 +a7284 = 7284 +a7285 = 7285 +a7286 = 7286 +a7287 = 7287 +a7288 = 7288 +a7289 = 7289 +a7290 = 7290 +a7291 = 7291 +a7292 = 7292 +a7293 = 7293 +a7294 = 7294 +a7295 = 7295 +a7296 = 7296 +a7297 = 7297 +a7298 = 7298 +a7299 = 7299 +a7300 = 7300 +a7301 = 7301 +a7302 = 7302 +a7303 = 7303 +a7304 = 7304 +a7305 = 7305 +a7306 = 7306 +a7307 = 7307 +a7308 = 7308 +a7309 = 7309 +a7310 = 7310 +a7311 = 7311 +a7312 = 7312 +a7313 = 7313 +a7314 = 7314 +a7315 = 7315 +a7316 = 7316 +a7317 = 7317 +a7318 = 7318 +a7319 = 7319 +a7320 = 7320 +a7321 = 7321 +a7322 = 7322 +a7323 = 7323 +a7324 = 7324 +a7325 = 7325 +a7326 = 7326 +a7327 = 7327 +a7328 = 7328 +a7329 = 7329 +a7330 = 7330 +a7331 = 7331 +a7332 = 7332 +a7333 = 7333 +a7334 = 7334 +a7335 = 7335 +a7336 = 7336 +a7337 = 7337 +a7338 = 7338 +a7339 = 7339 +a7340 = 7340 +a7341 = 7341 +a7342 = 7342 +a7343 = 7343 +a7344 = 7344 +a7345 = 7345 +a7346 = 7346 +a7347 = 7347 +a7348 = 7348 +a7349 = 7349 +a7350 = 7350 +a7351 = 7351 +a7352 = 7352 +a7353 = 7353 +a7354 = 7354 +a7355 = 7355 +a7356 = 7356 +a7357 = 7357 +a7358 = 7358 +a7359 = 7359 +a7360 = 7360 +a7361 = 7361 +a7362 = 7362 +a7363 = 7363 +a7364 = 7364 +a7365 = 7365 +a7366 = 7366 +a7367 = 7367 +a7368 = 7368 +a7369 = 7369 +a7370 = 7370 +a7371 = 7371 +a7372 = 7372 +a7373 = 7373 +a7374 = 7374 +a7375 = 7375 +a7376 = 7376 +a7377 = 7377 +a7378 = 7378 +a7379 = 7379 +a7380 = 7380 +a7381 = 7381 +a7382 = 7382 +a7383 = 7383 +a7384 = 7384 +a7385 = 7385 +a7386 = 7386 +a7387 = 7387 +a7388 = 7388 +a7389 = 7389 +a7390 = 7390 +a7391 = 7391 +a7392 = 7392 +a7393 = 7393 +a7394 = 7394 +a7395 = 7395 +a7396 = 7396 +a7397 = 7397 +a7398 = 7398 +a7399 = 7399 +a7400 = 7400 +a7401 = 7401 +a7402 = 7402 +a7403 = 7403 +a7404 = 7404 +a7405 = 7405 +a7406 = 7406 +a7407 = 7407 +a7408 = 7408 +a7409 = 7409 +a7410 = 7410 +a7411 = 7411 +a7412 = 7412 +a7413 = 7413 +a7414 = 7414 +a7415 = 7415 +a7416 = 7416 +a7417 = 7417 +a7418 = 7418 +a7419 = 7419 +a7420 = 7420 +a7421 = 7421 +a7422 = 7422 +a7423 = 7423 +a7424 = 7424 +a7425 = 7425 +a7426 = 7426 +a7427 = 7427 +a7428 = 7428 +a7429 = 7429 +a7430 = 7430 +a7431 = 7431 +a7432 = 7432 +a7433 = 7433 +a7434 = 7434 +a7435 = 7435 +a7436 = 7436 +a7437 = 7437 +a7438 = 7438 +a7439 = 7439 +a7440 = 7440 +a7441 = 7441 +a7442 = 7442 +a7443 = 7443 +a7444 = 7444 +a7445 = 7445 +a7446 = 7446 +a7447 = 7447 +a7448 = 7448 +a7449 = 7449 +a7450 = 7450 +a7451 = 7451 +a7452 = 7452 +a7453 = 7453 +a7454 = 7454 +a7455 = 7455 +a7456 = 7456 +a7457 = 7457 +a7458 = 7458 +a7459 = 7459 +a7460 = 7460 +a7461 = 7461 +a7462 = 7462 +a7463 = 7463 +a7464 = 7464 +a7465 = 7465 +a7466 = 7466 +a7467 = 7467 +a7468 = 7468 +a7469 = 7469 +a7470 = 7470 +a7471 = 7471 +a7472 = 7472 +a7473 = 7473 +a7474 = 7474 +a7475 = 7475 +a7476 = 7476 +a7477 = 7477 +a7478 = 7478 +a7479 = 7479 +a7480 = 7480 +a7481 = 7481 +a7482 = 7482 +a7483 = 7483 +a7484 = 7484 +a7485 = 7485 +a7486 = 7486 +a7487 = 7487 +a7488 = 7488 +a7489 = 7489 +a7490 = 7490 +a7491 = 7491 +a7492 = 7492 +a7493 = 7493 +a7494 = 7494 +a7495 = 7495 +a7496 = 7496 +a7497 = 7497 +a7498 = 7498 +a7499 = 7499 +a7500 = 7500 +a7501 = 7501 +a7502 = 7502 +a7503 = 7503 +a7504 = 7504 +a7505 = 7505 +a7506 = 7506 +a7507 = 7507 +a7508 = 7508 +a7509 = 7509 +a7510 = 7510 +a7511 = 7511 +a7512 = 7512 +a7513 = 7513 +a7514 = 7514 +a7515 = 7515 +a7516 = 7516 +a7517 = 7517 +a7518 = 7518 +a7519 = 7519 +a7520 = 7520 +a7521 = 7521 +a7522 = 7522 +a7523 = 7523 +a7524 = 7524 +a7525 = 7525 +a7526 = 7526 +a7527 = 7527 +a7528 = 7528 +a7529 = 7529 +a7530 = 7530 +a7531 = 7531 +a7532 = 7532 +a7533 = 7533 +a7534 = 7534 +a7535 = 7535 +a7536 = 7536 +a7537 = 7537 +a7538 = 7538 +a7539 = 7539 +a7540 = 7540 +a7541 = 7541 +a7542 = 7542 +a7543 = 7543 +a7544 = 7544 +a7545 = 7545 +a7546 = 7546 +a7547 = 7547 +a7548 = 7548 +a7549 = 7549 +a7550 = 7550 +a7551 = 7551 +a7552 = 7552 +a7553 = 7553 +a7554 = 7554 +a7555 = 7555 +a7556 = 7556 +a7557 = 7557 +a7558 = 7558 +a7559 = 7559 +a7560 = 7560 +a7561 = 7561 +a7562 = 7562 +a7563 = 7563 +a7564 = 7564 +a7565 = 7565 +a7566 = 7566 +a7567 = 7567 +a7568 = 7568 +a7569 = 7569 +a7570 = 7570 +a7571 = 7571 +a7572 = 7572 +a7573 = 7573 +a7574 = 7574 +a7575 = 7575 +a7576 = 7576 +a7577 = 7577 +a7578 = 7578 +a7579 = 7579 +a7580 = 7580 +a7581 = 7581 +a7582 = 7582 +a7583 = 7583 +a7584 = 7584 +a7585 = 7585 +a7586 = 7586 +a7587 = 7587 +a7588 = 7588 +a7589 = 7589 +a7590 = 7590 +a7591 = 7591 +a7592 = 7592 +a7593 = 7593 +a7594 = 7594 +a7595 = 7595 +a7596 = 7596 +a7597 = 7597 +a7598 = 7598 +a7599 = 7599 +a7600 = 7600 +a7601 = 7601 +a7602 = 7602 +a7603 = 7603 +a7604 = 7604 +a7605 = 7605 +a7606 = 7606 +a7607 = 7607 +a7608 = 7608 +a7609 = 7609 +a7610 = 7610 +a7611 = 7611 +a7612 = 7612 +a7613 = 7613 +a7614 = 7614 +a7615 = 7615 +a7616 = 7616 +a7617 = 7617 +a7618 = 7618 +a7619 = 7619 +a7620 = 7620 +a7621 = 7621 +a7622 = 7622 +a7623 = 7623 +a7624 = 7624 +a7625 = 7625 +a7626 = 7626 +a7627 = 7627 +a7628 = 7628 +a7629 = 7629 +a7630 = 7630 +a7631 = 7631 +a7632 = 7632 +a7633 = 7633 +a7634 = 7634 +a7635 = 7635 +a7636 = 7636 +a7637 = 7637 +a7638 = 7638 +a7639 = 7639 +a7640 = 7640 +a7641 = 7641 +a7642 = 7642 +a7643 = 7643 +a7644 = 7644 +a7645 = 7645 +a7646 = 7646 +a7647 = 7647 +a7648 = 7648 +a7649 = 7649 +a7650 = 7650 +a7651 = 7651 +a7652 = 7652 +a7653 = 7653 +a7654 = 7654 +a7655 = 7655 +a7656 = 7656 +a7657 = 7657 +a7658 = 7658 +a7659 = 7659 +a7660 = 7660 +a7661 = 7661 +a7662 = 7662 +a7663 = 7663 +a7664 = 7664 +a7665 = 7665 +a7666 = 7666 +a7667 = 7667 +a7668 = 7668 +a7669 = 7669 +a7670 = 7670 +a7671 = 7671 +a7672 = 7672 +a7673 = 7673 +a7674 = 7674 +a7675 = 7675 +a7676 = 7676 +a7677 = 7677 +a7678 = 7678 +a7679 = 7679 +a7680 = 7680 +a7681 = 7681 +a7682 = 7682 +a7683 = 7683 +a7684 = 7684 +a7685 = 7685 +a7686 = 7686 +a7687 = 7687 +a7688 = 7688 +a7689 = 7689 +a7690 = 7690 +a7691 = 7691 +a7692 = 7692 +a7693 = 7693 +a7694 = 7694 +a7695 = 7695 +a7696 = 7696 +a7697 = 7697 +a7698 = 7698 +a7699 = 7699 +a7700 = 7700 +a7701 = 7701 +a7702 = 7702 +a7703 = 7703 +a7704 = 7704 +a7705 = 7705 +a7706 = 7706 +a7707 = 7707 +a7708 = 7708 +a7709 = 7709 +a7710 = 7710 +a7711 = 7711 +a7712 = 7712 +a7713 = 7713 +a7714 = 7714 +a7715 = 7715 +a7716 = 7716 +a7717 = 7717 +a7718 = 7718 +a7719 = 7719 +a7720 = 7720 +a7721 = 7721 +a7722 = 7722 +a7723 = 7723 +a7724 = 7724 +a7725 = 7725 +a7726 = 7726 +a7727 = 7727 +a7728 = 7728 +a7729 = 7729 +a7730 = 7730 +a7731 = 7731 +a7732 = 7732 +a7733 = 7733 +a7734 = 7734 +a7735 = 7735 +a7736 = 7736 +a7737 = 7737 +a7738 = 7738 +a7739 = 7739 +a7740 = 7740 +a7741 = 7741 +a7742 = 7742 +a7743 = 7743 +a7744 = 7744 +a7745 = 7745 +a7746 = 7746 +a7747 = 7747 +a7748 = 7748 +a7749 = 7749 +a7750 = 7750 +a7751 = 7751 +a7752 = 7752 +a7753 = 7753 +a7754 = 7754 +a7755 = 7755 +a7756 = 7756 +a7757 = 7757 +a7758 = 7758 +a7759 = 7759 +a7760 = 7760 +a7761 = 7761 +a7762 = 7762 +a7763 = 7763 +a7764 = 7764 +a7765 = 7765 +a7766 = 7766 +a7767 = 7767 +a7768 = 7768 +a7769 = 7769 +a7770 = 7770 +a7771 = 7771 +a7772 = 7772 +a7773 = 7773 +a7774 = 7774 +a7775 = 7775 +a7776 = 7776 +a7777 = 7777 +a7778 = 7778 +a7779 = 7779 +a7780 = 7780 +a7781 = 7781 +a7782 = 7782 +a7783 = 7783 +a7784 = 7784 +a7785 = 7785 +a7786 = 7786 +a7787 = 7787 +a7788 = 7788 +a7789 = 7789 +a7790 = 7790 +a7791 = 7791 +a7792 = 7792 +a7793 = 7793 +a7794 = 7794 +a7795 = 7795 +a7796 = 7796 +a7797 = 7797 +a7798 = 7798 +a7799 = 7799 +a7800 = 7800 +a7801 = 7801 +a7802 = 7802 +a7803 = 7803 +a7804 = 7804 +a7805 = 7805 +a7806 = 7806 +a7807 = 7807 +a7808 = 7808 +a7809 = 7809 +a7810 = 7810 +a7811 = 7811 +a7812 = 7812 +a7813 = 7813 +a7814 = 7814 +a7815 = 7815 +a7816 = 7816 +a7817 = 7817 +a7818 = 7818 +a7819 = 7819 +a7820 = 7820 +a7821 = 7821 +a7822 = 7822 +a7823 = 7823 +a7824 = 7824 +a7825 = 7825 +a7826 = 7826 +a7827 = 7827 +a7828 = 7828 +a7829 = 7829 +a7830 = 7830 +a7831 = 7831 +a7832 = 7832 +a7833 = 7833 +a7834 = 7834 +a7835 = 7835 +a7836 = 7836 +a7837 = 7837 +a7838 = 7838 +a7839 = 7839 +a7840 = 7840 +a7841 = 7841 +a7842 = 7842 +a7843 = 7843 +a7844 = 7844 +a7845 = 7845 +a7846 = 7846 +a7847 = 7847 +a7848 = 7848 +a7849 = 7849 +a7850 = 7850 +a7851 = 7851 +a7852 = 7852 +a7853 = 7853 +a7854 = 7854 +a7855 = 7855 +a7856 = 7856 +a7857 = 7857 +a7858 = 7858 +a7859 = 7859 +a7860 = 7860 +a7861 = 7861 +a7862 = 7862 +a7863 = 7863 +a7864 = 7864 +a7865 = 7865 +a7866 = 7866 +a7867 = 7867 +a7868 = 7868 +a7869 = 7869 +a7870 = 7870 +a7871 = 7871 +a7872 = 7872 +a7873 = 7873 +a7874 = 7874 +a7875 = 7875 +a7876 = 7876 +a7877 = 7877 +a7878 = 7878 +a7879 = 7879 +a7880 = 7880 +a7881 = 7881 +a7882 = 7882 +a7883 = 7883 +a7884 = 7884 +a7885 = 7885 +a7886 = 7886 +a7887 = 7887 +a7888 = 7888 +a7889 = 7889 +a7890 = 7890 +a7891 = 7891 +a7892 = 7892 +a7893 = 7893 +a7894 = 7894 +a7895 = 7895 +a7896 = 7896 +a7897 = 7897 +a7898 = 7898 +a7899 = 7899 +a7900 = 7900 +a7901 = 7901 +a7902 = 7902 +a7903 = 7903 +a7904 = 7904 +a7905 = 7905 +a7906 = 7906 +a7907 = 7907 +a7908 = 7908 +a7909 = 7909 +a7910 = 7910 +a7911 = 7911 +a7912 = 7912 +a7913 = 7913 +a7914 = 7914 +a7915 = 7915 +a7916 = 7916 +a7917 = 7917 +a7918 = 7918 +a7919 = 7919 +a7920 = 7920 +a7921 = 7921 +a7922 = 7922 +a7923 = 7923 +a7924 = 7924 +a7925 = 7925 +a7926 = 7926 +a7927 = 7927 +a7928 = 7928 +a7929 = 7929 +a7930 = 7930 +a7931 = 7931 +a7932 = 7932 +a7933 = 7933 +a7934 = 7934 +a7935 = 7935 +a7936 = 7936 +a7937 = 7937 +a7938 = 7938 +a7939 = 7939 +a7940 = 7940 +a7941 = 7941 +a7942 = 7942 +a7943 = 7943 +a7944 = 7944 +a7945 = 7945 +a7946 = 7946 +a7947 = 7947 +a7948 = 7948 +a7949 = 7949 +a7950 = 7950 +a7951 = 7951 +a7952 = 7952 +a7953 = 7953 +a7954 = 7954 +a7955 = 7955 +a7956 = 7956 +a7957 = 7957 +a7958 = 7958 +a7959 = 7959 +a7960 = 7960 +a7961 = 7961 +a7962 = 7962 +a7963 = 7963 +a7964 = 7964 +a7965 = 7965 +a7966 = 7966 +a7967 = 7967 +a7968 = 7968 +a7969 = 7969 +a7970 = 7970 +a7971 = 7971 +a7972 = 7972 +a7973 = 7973 +a7974 = 7974 +a7975 = 7975 +a7976 = 7976 +a7977 = 7977 +a7978 = 7978 +a7979 = 7979 +a7980 = 7980 +a7981 = 7981 +a7982 = 7982 +a7983 = 7983 +a7984 = 7984 +a7985 = 7985 +a7986 = 7986 +a7987 = 7987 +a7988 = 7988 +a7989 = 7989 +a7990 = 7990 +a7991 = 7991 +a7992 = 7992 +a7993 = 7993 +a7994 = 7994 +a7995 = 7995 +a7996 = 7996 +a7997 = 7997 +a7998 = 7998 +a7999 = 7999 +a8000 = 8000 +a8001 = 8001 +a8002 = 8002 +a8003 = 8003 +a8004 = 8004 +a8005 = 8005 +a8006 = 8006 +a8007 = 8007 +a8008 = 8008 +a8009 = 8009 +a8010 = 8010 +a8011 = 8011 +a8012 = 8012 +a8013 = 8013 +a8014 = 8014 +a8015 = 8015 +a8016 = 8016 +a8017 = 8017 +a8018 = 8018 +a8019 = 8019 +a8020 = 8020 +a8021 = 8021 +a8022 = 8022 +a8023 = 8023 +a8024 = 8024 +a8025 = 8025 +a8026 = 8026 +a8027 = 8027 +a8028 = 8028 +a8029 = 8029 +a8030 = 8030 +a8031 = 8031 +a8032 = 8032 +a8033 = 8033 +a8034 = 8034 +a8035 = 8035 +a8036 = 8036 +a8037 = 8037 +a8038 = 8038 +a8039 = 8039 +a8040 = 8040 +a8041 = 8041 +a8042 = 8042 +a8043 = 8043 +a8044 = 8044 +a8045 = 8045 +a8046 = 8046 +a8047 = 8047 +a8048 = 8048 +a8049 = 8049 +a8050 = 8050 +a8051 = 8051 +a8052 = 8052 +a8053 = 8053 +a8054 = 8054 +a8055 = 8055 +a8056 = 8056 +a8057 = 8057 +a8058 = 8058 +a8059 = 8059 +a8060 = 8060 +a8061 = 8061 +a8062 = 8062 +a8063 = 8063 +a8064 = 8064 +a8065 = 8065 +a8066 = 8066 +a8067 = 8067 +a8068 = 8068 +a8069 = 8069 +a8070 = 8070 +a8071 = 8071 +a8072 = 8072 +a8073 = 8073 +a8074 = 8074 +a8075 = 8075 +a8076 = 8076 +a8077 = 8077 +a8078 = 8078 +a8079 = 8079 +a8080 = 8080 +a8081 = 8081 +a8082 = 8082 +a8083 = 8083 +a8084 = 8084 +a8085 = 8085 +a8086 = 8086 +a8087 = 8087 +a8088 = 8088 +a8089 = 8089 +a8090 = 8090 +a8091 = 8091 +a8092 = 8092 +a8093 = 8093 +a8094 = 8094 +a8095 = 8095 +a8096 = 8096 +a8097 = 8097 +a8098 = 8098 +a8099 = 8099 +a8100 = 8100 +a8101 = 8101 +a8102 = 8102 +a8103 = 8103 +a8104 = 8104 +a8105 = 8105 +a8106 = 8106 +a8107 = 8107 +a8108 = 8108 +a8109 = 8109 +a8110 = 8110 +a8111 = 8111 +a8112 = 8112 +a8113 = 8113 +a8114 = 8114 +a8115 = 8115 +a8116 = 8116 +a8117 = 8117 +a8118 = 8118 +a8119 = 8119 +a8120 = 8120 +a8121 = 8121 +a8122 = 8122 +a8123 = 8123 +a8124 = 8124 +a8125 = 8125 +a8126 = 8126 +a8127 = 8127 +a8128 = 8128 +a8129 = 8129 +a8130 = 8130 +a8131 = 8131 +a8132 = 8132 +a8133 = 8133 +a8134 = 8134 +a8135 = 8135 +a8136 = 8136 +a8137 = 8137 +a8138 = 8138 +a8139 = 8139 +a8140 = 8140 +a8141 = 8141 +a8142 = 8142 +a8143 = 8143 +a8144 = 8144 +a8145 = 8145 +a8146 = 8146 +a8147 = 8147 +a8148 = 8148 +a8149 = 8149 +a8150 = 8150 +a8151 = 8151 +a8152 = 8152 +a8153 = 8153 +a8154 = 8154 +a8155 = 8155 +a8156 = 8156 +a8157 = 8157 +a8158 = 8158 +a8159 = 8159 +a8160 = 8160 +a8161 = 8161 +a8162 = 8162 +a8163 = 8163 +a8164 = 8164 +a8165 = 8165 +a8166 = 8166 +a8167 = 8167 +a8168 = 8168 +a8169 = 8169 +a8170 = 8170 +a8171 = 8171 +a8172 = 8172 +a8173 = 8173 +a8174 = 8174 +a8175 = 8175 +a8176 = 8176 +a8177 = 8177 +a8178 = 8178 +a8179 = 8179 +a8180 = 8180 +a8181 = 8181 +a8182 = 8182 +a8183 = 8183 +a8184 = 8184 +a8185 = 8185 +a8186 = 8186 +a8187 = 8187 +a8188 = 8188 +a8189 = 8189 +a8190 = 8190 +a8191 = 8191 +a8192 = 8192 +a8193 = 8193 +a8194 = 8194 +a8195 = 8195 +a8196 = 8196 +a8197 = 8197 +a8198 = 8198 +a8199 = 8199 +a8200 = 8200 +a8201 = 8201 +a8202 = 8202 +a8203 = 8203 +a8204 = 8204 +a8205 = 8205 +a8206 = 8206 +a8207 = 8207 +a8208 = 8208 +a8209 = 8209 +a8210 = 8210 +a8211 = 8211 +a8212 = 8212 +a8213 = 8213 +a8214 = 8214 +a8215 = 8215 +a8216 = 8216 +a8217 = 8217 +a8218 = 8218 +a8219 = 8219 +a8220 = 8220 +a8221 = 8221 +a8222 = 8222 +a8223 = 8223 +a8224 = 8224 +a8225 = 8225 +a8226 = 8226 +a8227 = 8227 +a8228 = 8228 +a8229 = 8229 +a8230 = 8230 +a8231 = 8231 +a8232 = 8232 +a8233 = 8233 +a8234 = 8234 +a8235 = 8235 +a8236 = 8236 +a8237 = 8237 +a8238 = 8238 +a8239 = 8239 +a8240 = 8240 +a8241 = 8241 +a8242 = 8242 +a8243 = 8243 +a8244 = 8244 +a8245 = 8245 +a8246 = 8246 +a8247 = 8247 +a8248 = 8248 +a8249 = 8249 +a8250 = 8250 +a8251 = 8251 +a8252 = 8252 +a8253 = 8253 +a8254 = 8254 +a8255 = 8255 +a8256 = 8256 +a8257 = 8257 +a8258 = 8258 +a8259 = 8259 +a8260 = 8260 +a8261 = 8261 +a8262 = 8262 +a8263 = 8263 +a8264 = 8264 +a8265 = 8265 +a8266 = 8266 +a8267 = 8267 +a8268 = 8268 +a8269 = 8269 +a8270 = 8270 +a8271 = 8271 +a8272 = 8272 +a8273 = 8273 +a8274 = 8274 +a8275 = 8275 +a8276 = 8276 +a8277 = 8277 +a8278 = 8278 +a8279 = 8279 +a8280 = 8280 +a8281 = 8281 +a8282 = 8282 +a8283 = 8283 +a8284 = 8284 +a8285 = 8285 +a8286 = 8286 +a8287 = 8287 +a8288 = 8288 +a8289 = 8289 +a8290 = 8290 +a8291 = 8291 +a8292 = 8292 +a8293 = 8293 +a8294 = 8294 +a8295 = 8295 +a8296 = 8296 +a8297 = 8297 +a8298 = 8298 +a8299 = 8299 +a8300 = 8300 +a8301 = 8301 +a8302 = 8302 +a8303 = 8303 +a8304 = 8304 +a8305 = 8305 +a8306 = 8306 +a8307 = 8307 +a8308 = 8308 +a8309 = 8309 +a8310 = 8310 +a8311 = 8311 +a8312 = 8312 +a8313 = 8313 +a8314 = 8314 +a8315 = 8315 +a8316 = 8316 +a8317 = 8317 +a8318 = 8318 +a8319 = 8319 +a8320 = 8320 +a8321 = 8321 +a8322 = 8322 +a8323 = 8323 +a8324 = 8324 +a8325 = 8325 +a8326 = 8326 +a8327 = 8327 +a8328 = 8328 +a8329 = 8329 +a8330 = 8330 +a8331 = 8331 +a8332 = 8332 +a8333 = 8333 +a8334 = 8334 +a8335 = 8335 +a8336 = 8336 +a8337 = 8337 +a8338 = 8338 +a8339 = 8339 +a8340 = 8340 +a8341 = 8341 +a8342 = 8342 +a8343 = 8343 +a8344 = 8344 +a8345 = 8345 +a8346 = 8346 +a8347 = 8347 +a8348 = 8348 +a8349 = 8349 +a8350 = 8350 +a8351 = 8351 +a8352 = 8352 +a8353 = 8353 +a8354 = 8354 +a8355 = 8355 +a8356 = 8356 +a8357 = 8357 +a8358 = 8358 +a8359 = 8359 +a8360 = 8360 +a8361 = 8361 +a8362 = 8362 +a8363 = 8363 +a8364 = 8364 +a8365 = 8365 +a8366 = 8366 +a8367 = 8367 +a8368 = 8368 +a8369 = 8369 +a8370 = 8370 +a8371 = 8371 +a8372 = 8372 +a8373 = 8373 +a8374 = 8374 +a8375 = 8375 +a8376 = 8376 +a8377 = 8377 +a8378 = 8378 +a8379 = 8379 +a8380 = 8380 +a8381 = 8381 +a8382 = 8382 +a8383 = 8383 +a8384 = 8384 +a8385 = 8385 +a8386 = 8386 +a8387 = 8387 +a8388 = 8388 +a8389 = 8389 +a8390 = 8390 +a8391 = 8391 +a8392 = 8392 +a8393 = 8393 +a8394 = 8394 +a8395 = 8395 +a8396 = 8396 +a8397 = 8397 +a8398 = 8398 +a8399 = 8399 +a8400 = 8400 +a8401 = 8401 +a8402 = 8402 +a8403 = 8403 +a8404 = 8404 +a8405 = 8405 +a8406 = 8406 +a8407 = 8407 +a8408 = 8408 +a8409 = 8409 +a8410 = 8410 +a8411 = 8411 +a8412 = 8412 +a8413 = 8413 +a8414 = 8414 +a8415 = 8415 +a8416 = 8416 +a8417 = 8417 +a8418 = 8418 +a8419 = 8419 +a8420 = 8420 +a8421 = 8421 +a8422 = 8422 +a8423 = 8423 +a8424 = 8424 +a8425 = 8425 +a8426 = 8426 +a8427 = 8427 +a8428 = 8428 +a8429 = 8429 +a8430 = 8430 +a8431 = 8431 +a8432 = 8432 +a8433 = 8433 +a8434 = 8434 +a8435 = 8435 +a8436 = 8436 +a8437 = 8437 +a8438 = 8438 +a8439 = 8439 +a8440 = 8440 +a8441 = 8441 +a8442 = 8442 +a8443 = 8443 +a8444 = 8444 +a8445 = 8445 +a8446 = 8446 +a8447 = 8447 +a8448 = 8448 +a8449 = 8449 +a8450 = 8450 +a8451 = 8451 +a8452 = 8452 +a8453 = 8453 +a8454 = 8454 +a8455 = 8455 +a8456 = 8456 +a8457 = 8457 +a8458 = 8458 +a8459 = 8459 +a8460 = 8460 +a8461 = 8461 +a8462 = 8462 +a8463 = 8463 +a8464 = 8464 +a8465 = 8465 +a8466 = 8466 +a8467 = 8467 +a8468 = 8468 +a8469 = 8469 +a8470 = 8470 +a8471 = 8471 +a8472 = 8472 +a8473 = 8473 +a8474 = 8474 +a8475 = 8475 +a8476 = 8476 +a8477 = 8477 +a8478 = 8478 +a8479 = 8479 +a8480 = 8480 +a8481 = 8481 +a8482 = 8482 +a8483 = 8483 +a8484 = 8484 +a8485 = 8485 +a8486 = 8486 +a8487 = 8487 +a8488 = 8488 +a8489 = 8489 +a8490 = 8490 +a8491 = 8491 +a8492 = 8492 +a8493 = 8493 +a8494 = 8494 +a8495 = 8495 +a8496 = 8496 +a8497 = 8497 +a8498 = 8498 +a8499 = 8499 +a8500 = 8500 +a8501 = 8501 +a8502 = 8502 +a8503 = 8503 +a8504 = 8504 +a8505 = 8505 +a8506 = 8506 +a8507 = 8507 +a8508 = 8508 +a8509 = 8509 +a8510 = 8510 +a8511 = 8511 +a8512 = 8512 +a8513 = 8513 +a8514 = 8514 +a8515 = 8515 +a8516 = 8516 +a8517 = 8517 +a8518 = 8518 +a8519 = 8519 +a8520 = 8520 +a8521 = 8521 +a8522 = 8522 +a8523 = 8523 +a8524 = 8524 +a8525 = 8525 +a8526 = 8526 +a8527 = 8527 +a8528 = 8528 +a8529 = 8529 +a8530 = 8530 +a8531 = 8531 +a8532 = 8532 +a8533 = 8533 +a8534 = 8534 +a8535 = 8535 +a8536 = 8536 +a8537 = 8537 +a8538 = 8538 +a8539 = 8539 +a8540 = 8540 +a8541 = 8541 +a8542 = 8542 +a8543 = 8543 +a8544 = 8544 +a8545 = 8545 +a8546 = 8546 +a8547 = 8547 +a8548 = 8548 +a8549 = 8549 +a8550 = 8550 +a8551 = 8551 +a8552 = 8552 +a8553 = 8553 +a8554 = 8554 +a8555 = 8555 +a8556 = 8556 +a8557 = 8557 +a8558 = 8558 +a8559 = 8559 +a8560 = 8560 +a8561 = 8561 +a8562 = 8562 +a8563 = 8563 +a8564 = 8564 +a8565 = 8565 +a8566 = 8566 +a8567 = 8567 +a8568 = 8568 +a8569 = 8569 +a8570 = 8570 +a8571 = 8571 +a8572 = 8572 +a8573 = 8573 +a8574 = 8574 +a8575 = 8575 +a8576 = 8576 +a8577 = 8577 +a8578 = 8578 +a8579 = 8579 +a8580 = 8580 +a8581 = 8581 +a8582 = 8582 +a8583 = 8583 +a8584 = 8584 +a8585 = 8585 +a8586 = 8586 +a8587 = 8587 +a8588 = 8588 +a8589 = 8589 +a8590 = 8590 +a8591 = 8591 +a8592 = 8592 +a8593 = 8593 +a8594 = 8594 +a8595 = 8595 +a8596 = 8596 +a8597 = 8597 +a8598 = 8598 +a8599 = 8599 +a8600 = 8600 +a8601 = 8601 +a8602 = 8602 +a8603 = 8603 +a8604 = 8604 +a8605 = 8605 +a8606 = 8606 +a8607 = 8607 +a8608 = 8608 +a8609 = 8609 +a8610 = 8610 +a8611 = 8611 +a8612 = 8612 +a8613 = 8613 +a8614 = 8614 +a8615 = 8615 +a8616 = 8616 +a8617 = 8617 +a8618 = 8618 +a8619 = 8619 +a8620 = 8620 +a8621 = 8621 +a8622 = 8622 +a8623 = 8623 +a8624 = 8624 +a8625 = 8625 +a8626 = 8626 +a8627 = 8627 +a8628 = 8628 +a8629 = 8629 +a8630 = 8630 +a8631 = 8631 +a8632 = 8632 +a8633 = 8633 +a8634 = 8634 +a8635 = 8635 +a8636 = 8636 +a8637 = 8637 +a8638 = 8638 +a8639 = 8639 +a8640 = 8640 +a8641 = 8641 +a8642 = 8642 +a8643 = 8643 +a8644 = 8644 +a8645 = 8645 +a8646 = 8646 +a8647 = 8647 +a8648 = 8648 +a8649 = 8649 +a8650 = 8650 +a8651 = 8651 +a8652 = 8652 +a8653 = 8653 +a8654 = 8654 +a8655 = 8655 +a8656 = 8656 +a8657 = 8657 +a8658 = 8658 +a8659 = 8659 +a8660 = 8660 +a8661 = 8661 +a8662 = 8662 +a8663 = 8663 +a8664 = 8664 +a8665 = 8665 +a8666 = 8666 +a8667 = 8667 +a8668 = 8668 +a8669 = 8669 +a8670 = 8670 +a8671 = 8671 +a8672 = 8672 +a8673 = 8673 +a8674 = 8674 +a8675 = 8675 +a8676 = 8676 +a8677 = 8677 +a8678 = 8678 +a8679 = 8679 +a8680 = 8680 +a8681 = 8681 +a8682 = 8682 +a8683 = 8683 +a8684 = 8684 +a8685 = 8685 +a8686 = 8686 +a8687 = 8687 +a8688 = 8688 +a8689 = 8689 +a8690 = 8690 +a8691 = 8691 +a8692 = 8692 +a8693 = 8693 +a8694 = 8694 +a8695 = 8695 +a8696 = 8696 +a8697 = 8697 +a8698 = 8698 +a8699 = 8699 +a8700 = 8700 +a8701 = 8701 +a8702 = 8702 +a8703 = 8703 +a8704 = 8704 +a8705 = 8705 +a8706 = 8706 +a8707 = 8707 +a8708 = 8708 +a8709 = 8709 +a8710 = 8710 +a8711 = 8711 +a8712 = 8712 +a8713 = 8713 +a8714 = 8714 +a8715 = 8715 +a8716 = 8716 +a8717 = 8717 +a8718 = 8718 +a8719 = 8719 +a8720 = 8720 +a8721 = 8721 +a8722 = 8722 +a8723 = 8723 +a8724 = 8724 +a8725 = 8725 +a8726 = 8726 +a8727 = 8727 +a8728 = 8728 +a8729 = 8729 +a8730 = 8730 +a8731 = 8731 +a8732 = 8732 +a8733 = 8733 +a8734 = 8734 +a8735 = 8735 +a8736 = 8736 +a8737 = 8737 +a8738 = 8738 +a8739 = 8739 +a8740 = 8740 +a8741 = 8741 +a8742 = 8742 +a8743 = 8743 +a8744 = 8744 +a8745 = 8745 +a8746 = 8746 +a8747 = 8747 +a8748 = 8748 +a8749 = 8749 +a8750 = 8750 +a8751 = 8751 +a8752 = 8752 +a8753 = 8753 +a8754 = 8754 +a8755 = 8755 +a8756 = 8756 +a8757 = 8757 +a8758 = 8758 +a8759 = 8759 +a8760 = 8760 +a8761 = 8761 +a8762 = 8762 +a8763 = 8763 +a8764 = 8764 +a8765 = 8765 +a8766 = 8766 +a8767 = 8767 +a8768 = 8768 +a8769 = 8769 +a8770 = 8770 +a8771 = 8771 +a8772 = 8772 +a8773 = 8773 +a8774 = 8774 +a8775 = 8775 +a8776 = 8776 +a8777 = 8777 +a8778 = 8778 +a8779 = 8779 +a8780 = 8780 +a8781 = 8781 +a8782 = 8782 +a8783 = 8783 +a8784 = 8784 +a8785 = 8785 +a8786 = 8786 +a8787 = 8787 +a8788 = 8788 +a8789 = 8789 +a8790 = 8790 +a8791 = 8791 +a8792 = 8792 +a8793 = 8793 +a8794 = 8794 +a8795 = 8795 +a8796 = 8796 +a8797 = 8797 +a8798 = 8798 +a8799 = 8799 +a8800 = 8800 +a8801 = 8801 +a8802 = 8802 +a8803 = 8803 +a8804 = 8804 +a8805 = 8805 +a8806 = 8806 +a8807 = 8807 +a8808 = 8808 +a8809 = 8809 +a8810 = 8810 +a8811 = 8811 +a8812 = 8812 +a8813 = 8813 +a8814 = 8814 +a8815 = 8815 +a8816 = 8816 +a8817 = 8817 +a8818 = 8818 +a8819 = 8819 +a8820 = 8820 +a8821 = 8821 +a8822 = 8822 +a8823 = 8823 +a8824 = 8824 +a8825 = 8825 +a8826 = 8826 +a8827 = 8827 +a8828 = 8828 +a8829 = 8829 +a8830 = 8830 +a8831 = 8831 +a8832 = 8832 +a8833 = 8833 +a8834 = 8834 +a8835 = 8835 +a8836 = 8836 +a8837 = 8837 +a8838 = 8838 +a8839 = 8839 +a8840 = 8840 +a8841 = 8841 +a8842 = 8842 +a8843 = 8843 +a8844 = 8844 +a8845 = 8845 +a8846 = 8846 +a8847 = 8847 +a8848 = 8848 +a8849 = 8849 +a8850 = 8850 +a8851 = 8851 +a8852 = 8852 +a8853 = 8853 +a8854 = 8854 +a8855 = 8855 +a8856 = 8856 +a8857 = 8857 +a8858 = 8858 +a8859 = 8859 +a8860 = 8860 +a8861 = 8861 +a8862 = 8862 +a8863 = 8863 +a8864 = 8864 +a8865 = 8865 +a8866 = 8866 +a8867 = 8867 +a8868 = 8868 +a8869 = 8869 +a8870 = 8870 +a8871 = 8871 +a8872 = 8872 +a8873 = 8873 +a8874 = 8874 +a8875 = 8875 +a8876 = 8876 +a8877 = 8877 +a8878 = 8878 +a8879 = 8879 +a8880 = 8880 +a8881 = 8881 +a8882 = 8882 +a8883 = 8883 +a8884 = 8884 +a8885 = 8885 +a8886 = 8886 +a8887 = 8887 +a8888 = 8888 +a8889 = 8889 +a8890 = 8890 +a8891 = 8891 +a8892 = 8892 +a8893 = 8893 +a8894 = 8894 +a8895 = 8895 +a8896 = 8896 +a8897 = 8897 +a8898 = 8898 +a8899 = 8899 +a8900 = 8900 +a8901 = 8901 +a8902 = 8902 +a8903 = 8903 +a8904 = 8904 +a8905 = 8905 +a8906 = 8906 +a8907 = 8907 +a8908 = 8908 +a8909 = 8909 +a8910 = 8910 +a8911 = 8911 +a8912 = 8912 +a8913 = 8913 +a8914 = 8914 +a8915 = 8915 +a8916 = 8916 +a8917 = 8917 +a8918 = 8918 +a8919 = 8919 +a8920 = 8920 +a8921 = 8921 +a8922 = 8922 +a8923 = 8923 +a8924 = 8924 +a8925 = 8925 +a8926 = 8926 +a8927 = 8927 +a8928 = 8928 +a8929 = 8929 +a8930 = 8930 +a8931 = 8931 +a8932 = 8932 +a8933 = 8933 +a8934 = 8934 +a8935 = 8935 +a8936 = 8936 +a8937 = 8937 +a8938 = 8938 +a8939 = 8939 +a8940 = 8940 +a8941 = 8941 +a8942 = 8942 +a8943 = 8943 +a8944 = 8944 +a8945 = 8945 +a8946 = 8946 +a8947 = 8947 +a8948 = 8948 +a8949 = 8949 +a8950 = 8950 +a8951 = 8951 +a8952 = 8952 +a8953 = 8953 +a8954 = 8954 +a8955 = 8955 +a8956 = 8956 +a8957 = 8957 +a8958 = 8958 +a8959 = 8959 +a8960 = 8960 +a8961 = 8961 +a8962 = 8962 +a8963 = 8963 +a8964 = 8964 +a8965 = 8965 +a8966 = 8966 +a8967 = 8967 +a8968 = 8968 +a8969 = 8969 +a8970 = 8970 +a8971 = 8971 +a8972 = 8972 +a8973 = 8973 +a8974 = 8974 +a8975 = 8975 +a8976 = 8976 +a8977 = 8977 +a8978 = 8978 +a8979 = 8979 +a8980 = 8980 +a8981 = 8981 +a8982 = 8982 +a8983 = 8983 +a8984 = 8984 +a8985 = 8985 +a8986 = 8986 +a8987 = 8987 +a8988 = 8988 +a8989 = 8989 +a8990 = 8990 +a8991 = 8991 +a8992 = 8992 +a8993 = 8993 +a8994 = 8994 +a8995 = 8995 +a8996 = 8996 +a8997 = 8997 +a8998 = 8998 +a8999 = 8999 +a9000 = 9000 +a9001 = 9001 +a9002 = 9002 +a9003 = 9003 +a9004 = 9004 +a9005 = 9005 +a9006 = 9006 +a9007 = 9007 +a9008 = 9008 +a9009 = 9009 +a9010 = 9010 +a9011 = 9011 +a9012 = 9012 +a9013 = 9013 +a9014 = 9014 +a9015 = 9015 +a9016 = 9016 +a9017 = 9017 +a9018 = 9018 +a9019 = 9019 +a9020 = 9020 +a9021 = 9021 +a9022 = 9022 +a9023 = 9023 +a9024 = 9024 +a9025 = 9025 +a9026 = 9026 +a9027 = 9027 +a9028 = 9028 +a9029 = 9029 +a9030 = 9030 +a9031 = 9031 +a9032 = 9032 +a9033 = 9033 +a9034 = 9034 +a9035 = 9035 +a9036 = 9036 +a9037 = 9037 +a9038 = 9038 +a9039 = 9039 +a9040 = 9040 +a9041 = 9041 +a9042 = 9042 +a9043 = 9043 +a9044 = 9044 +a9045 = 9045 +a9046 = 9046 +a9047 = 9047 +a9048 = 9048 +a9049 = 9049 +a9050 = 9050 +a9051 = 9051 +a9052 = 9052 +a9053 = 9053 +a9054 = 9054 +a9055 = 9055 +a9056 = 9056 +a9057 = 9057 +a9058 = 9058 +a9059 = 9059 +a9060 = 9060 +a9061 = 9061 +a9062 = 9062 +a9063 = 9063 +a9064 = 9064 +a9065 = 9065 +a9066 = 9066 +a9067 = 9067 +a9068 = 9068 +a9069 = 9069 +a9070 = 9070 +a9071 = 9071 +a9072 = 9072 +a9073 = 9073 +a9074 = 9074 +a9075 = 9075 +a9076 = 9076 +a9077 = 9077 +a9078 = 9078 +a9079 = 9079 +a9080 = 9080 +a9081 = 9081 +a9082 = 9082 +a9083 = 9083 +a9084 = 9084 +a9085 = 9085 +a9086 = 9086 +a9087 = 9087 +a9088 = 9088 +a9089 = 9089 +a9090 = 9090 +a9091 = 9091 +a9092 = 9092 +a9093 = 9093 +a9094 = 9094 +a9095 = 9095 +a9096 = 9096 +a9097 = 9097 +a9098 = 9098 +a9099 = 9099 +a9100 = 9100 +a9101 = 9101 +a9102 = 9102 +a9103 = 9103 +a9104 = 9104 +a9105 = 9105 +a9106 = 9106 +a9107 = 9107 +a9108 = 9108 +a9109 = 9109 +a9110 = 9110 +a9111 = 9111 +a9112 = 9112 +a9113 = 9113 +a9114 = 9114 +a9115 = 9115 +a9116 = 9116 +a9117 = 9117 +a9118 = 9118 +a9119 = 9119 +a9120 = 9120 +a9121 = 9121 +a9122 = 9122 +a9123 = 9123 +a9124 = 9124 +a9125 = 9125 +a9126 = 9126 +a9127 = 9127 +a9128 = 9128 +a9129 = 9129 +a9130 = 9130 +a9131 = 9131 +a9132 = 9132 +a9133 = 9133 +a9134 = 9134 +a9135 = 9135 +a9136 = 9136 +a9137 = 9137 +a9138 = 9138 +a9139 = 9139 +a9140 = 9140 +a9141 = 9141 +a9142 = 9142 +a9143 = 9143 +a9144 = 9144 +a9145 = 9145 +a9146 = 9146 +a9147 = 9147 +a9148 = 9148 +a9149 = 9149 +a9150 = 9150 +a9151 = 9151 +a9152 = 9152 +a9153 = 9153 +a9154 = 9154 +a9155 = 9155 +a9156 = 9156 +a9157 = 9157 +a9158 = 9158 +a9159 = 9159 +a9160 = 9160 +a9161 = 9161 +a9162 = 9162 +a9163 = 9163 +a9164 = 9164 +a9165 = 9165 +a9166 = 9166 +a9167 = 9167 +a9168 = 9168 +a9169 = 9169 +a9170 = 9170 +a9171 = 9171 +a9172 = 9172 +a9173 = 9173 +a9174 = 9174 +a9175 = 9175 +a9176 = 9176 +a9177 = 9177 +a9178 = 9178 +a9179 = 9179 +a9180 = 9180 +a9181 = 9181 +a9182 = 9182 +a9183 = 9183 +a9184 = 9184 +a9185 = 9185 +a9186 = 9186 +a9187 = 9187 +a9188 = 9188 +a9189 = 9189 +a9190 = 9190 +a9191 = 9191 +a9192 = 9192 +a9193 = 9193 +a9194 = 9194 +a9195 = 9195 +a9196 = 9196 +a9197 = 9197 +a9198 = 9198 +a9199 = 9199 +a9200 = 9200 +a9201 = 9201 +a9202 = 9202 +a9203 = 9203 +a9204 = 9204 +a9205 = 9205 +a9206 = 9206 +a9207 = 9207 +a9208 = 9208 +a9209 = 9209 +a9210 = 9210 +a9211 = 9211 +a9212 = 9212 +a9213 = 9213 +a9214 = 9214 +a9215 = 9215 +a9216 = 9216 +a9217 = 9217 +a9218 = 9218 +a9219 = 9219 +a9220 = 9220 +a9221 = 9221 +a9222 = 9222 +a9223 = 9223 +a9224 = 9224 +a9225 = 9225 +a9226 = 9226 +a9227 = 9227 +a9228 = 9228 +a9229 = 9229 +a9230 = 9230 +a9231 = 9231 +a9232 = 9232 +a9233 = 9233 +a9234 = 9234 +a9235 = 9235 +a9236 = 9236 +a9237 = 9237 +a9238 = 9238 +a9239 = 9239 +a9240 = 9240 +a9241 = 9241 +a9242 = 9242 +a9243 = 9243 +a9244 = 9244 +a9245 = 9245 +a9246 = 9246 +a9247 = 9247 +a9248 = 9248 +a9249 = 9249 +a9250 = 9250 +a9251 = 9251 +a9252 = 9252 +a9253 = 9253 +a9254 = 9254 +a9255 = 9255 +a9256 = 9256 +a9257 = 9257 +a9258 = 9258 +a9259 = 9259 +a9260 = 9260 +a9261 = 9261 +a9262 = 9262 +a9263 = 9263 +a9264 = 9264 +a9265 = 9265 +a9266 = 9266 +a9267 = 9267 +a9268 = 9268 +a9269 = 9269 +a9270 = 9270 +a9271 = 9271 +a9272 = 9272 +a9273 = 9273 +a9274 = 9274 +a9275 = 9275 +a9276 = 9276 +a9277 = 9277 +a9278 = 9278 +a9279 = 9279 +a9280 = 9280 +a9281 = 9281 +a9282 = 9282 +a9283 = 9283 +a9284 = 9284 +a9285 = 9285 +a9286 = 9286 +a9287 = 9287 +a9288 = 9288 +a9289 = 9289 +a9290 = 9290 +a9291 = 9291 +a9292 = 9292 +a9293 = 9293 +a9294 = 9294 +a9295 = 9295 +a9296 = 9296 +a9297 = 9297 +a9298 = 9298 +a9299 = 9299 +a9300 = 9300 +a9301 = 9301 +a9302 = 9302 +a9303 = 9303 +a9304 = 9304 +a9305 = 9305 +a9306 = 9306 +a9307 = 9307 +a9308 = 9308 +a9309 = 9309 +a9310 = 9310 +a9311 = 9311 +a9312 = 9312 +a9313 = 9313 +a9314 = 9314 +a9315 = 9315 +a9316 = 9316 +a9317 = 9317 +a9318 = 9318 +a9319 = 9319 +a9320 = 9320 +a9321 = 9321 +a9322 = 9322 +a9323 = 9323 +a9324 = 9324 +a9325 = 9325 +a9326 = 9326 +a9327 = 9327 +a9328 = 9328 +a9329 = 9329 +a9330 = 9330 +a9331 = 9331 +a9332 = 9332 +a9333 = 9333 +a9334 = 9334 +a9335 = 9335 +a9336 = 9336 +a9337 = 9337 +a9338 = 9338 +a9339 = 9339 +a9340 = 9340 +a9341 = 9341 +a9342 = 9342 +a9343 = 9343 +a9344 = 9344 +a9345 = 9345 +a9346 = 9346 +a9347 = 9347 +a9348 = 9348 +a9349 = 9349 +a9350 = 9350 +a9351 = 9351 +a9352 = 9352 +a9353 = 9353 +a9354 = 9354 +a9355 = 9355 +a9356 = 9356 +a9357 = 9357 +a9358 = 9358 +a9359 = 9359 +a9360 = 9360 +a9361 = 9361 +a9362 = 9362 +a9363 = 9363 +a9364 = 9364 +a9365 = 9365 +a9366 = 9366 +a9367 = 9367 +a9368 = 9368 +a9369 = 9369 +a9370 = 9370 +a9371 = 9371 +a9372 = 9372 +a9373 = 9373 +a9374 = 9374 +a9375 = 9375 +a9376 = 9376 +a9377 = 9377 +a9378 = 9378 +a9379 = 9379 +a9380 = 9380 +a9381 = 9381 +a9382 = 9382 +a9383 = 9383 +a9384 = 9384 +a9385 = 9385 +a9386 = 9386 +a9387 = 9387 +a9388 = 9388 +a9389 = 9389 +a9390 = 9390 +a9391 = 9391 +a9392 = 9392 +a9393 = 9393 +a9394 = 9394 +a9395 = 9395 +a9396 = 9396 +a9397 = 9397 +a9398 = 9398 +a9399 = 9399 +a9400 = 9400 +a9401 = 9401 +a9402 = 9402 +a9403 = 9403 +a9404 = 9404 +a9405 = 9405 +a9406 = 9406 +a9407 = 9407 +a9408 = 9408 +a9409 = 9409 +a9410 = 9410 +a9411 = 9411 +a9412 = 9412 +a9413 = 9413 +a9414 = 9414 +a9415 = 9415 +a9416 = 9416 +a9417 = 9417 +a9418 = 9418 +a9419 = 9419 +a9420 = 9420 +a9421 = 9421 +a9422 = 9422 +a9423 = 9423 +a9424 = 9424 +a9425 = 9425 +a9426 = 9426 +a9427 = 9427 +a9428 = 9428 +a9429 = 9429 +a9430 = 9430 +a9431 = 9431 +a9432 = 9432 +a9433 = 9433 +a9434 = 9434 +a9435 = 9435 +a9436 = 9436 +a9437 = 9437 +a9438 = 9438 +a9439 = 9439 +a9440 = 9440 +a9441 = 9441 +a9442 = 9442 +a9443 = 9443 +a9444 = 9444 +a9445 = 9445 +a9446 = 9446 +a9447 = 9447 +a9448 = 9448 +a9449 = 9449 +a9450 = 9450 +a9451 = 9451 +a9452 = 9452 +a9453 = 9453 +a9454 = 9454 +a9455 = 9455 +a9456 = 9456 +a9457 = 9457 +a9458 = 9458 +a9459 = 9459 +a9460 = 9460 +a9461 = 9461 +a9462 = 9462 +a9463 = 9463 +a9464 = 9464 +a9465 = 9465 +a9466 = 9466 +a9467 = 9467 +a9468 = 9468 +a9469 = 9469 +a9470 = 9470 +a9471 = 9471 +a9472 = 9472 +a9473 = 9473 +a9474 = 9474 +a9475 = 9475 +a9476 = 9476 +a9477 = 9477 +a9478 = 9478 +a9479 = 9479 +a9480 = 9480 +a9481 = 9481 +a9482 = 9482 +a9483 = 9483 +a9484 = 9484 +a9485 = 9485 +a9486 = 9486 +a9487 = 9487 +a9488 = 9488 +a9489 = 9489 +a9490 = 9490 +a9491 = 9491 +a9492 = 9492 +a9493 = 9493 +a9494 = 9494 +a9495 = 9495 +a9496 = 9496 +a9497 = 9497 +a9498 = 9498 +a9499 = 9499 +a9500 = 9500 +a9501 = 9501 +a9502 = 9502 +a9503 = 9503 +a9504 = 9504 +a9505 = 9505 +a9506 = 9506 +a9507 = 9507 +a9508 = 9508 +a9509 = 9509 +a9510 = 9510 +a9511 = 9511 +a9512 = 9512 +a9513 = 9513 +a9514 = 9514 +a9515 = 9515 +a9516 = 9516 +a9517 = 9517 +a9518 = 9518 +a9519 = 9519 +a9520 = 9520 +a9521 = 9521 +a9522 = 9522 +a9523 = 9523 +a9524 = 9524 +a9525 = 9525 +a9526 = 9526 +a9527 = 9527 +a9528 = 9528 +a9529 = 9529 +a9530 = 9530 +a9531 = 9531 +a9532 = 9532 +a9533 = 9533 +a9534 = 9534 +a9535 = 9535 +a9536 = 9536 +a9537 = 9537 +a9538 = 9538 +a9539 = 9539 +a9540 = 9540 +a9541 = 9541 +a9542 = 9542 +a9543 = 9543 +a9544 = 9544 +a9545 = 9545 +a9546 = 9546 +a9547 = 9547 +a9548 = 9548 +a9549 = 9549 +a9550 = 9550 +a9551 = 9551 +a9552 = 9552 +a9553 = 9553 +a9554 = 9554 +a9555 = 9555 +a9556 = 9556 +a9557 = 9557 +a9558 = 9558 +a9559 = 9559 +a9560 = 9560 +a9561 = 9561 +a9562 = 9562 +a9563 = 9563 +a9564 = 9564 +a9565 = 9565 +a9566 = 9566 +a9567 = 9567 +a9568 = 9568 +a9569 = 9569 +a9570 = 9570 +a9571 = 9571 +a9572 = 9572 +a9573 = 9573 +a9574 = 9574 +a9575 = 9575 +a9576 = 9576 +a9577 = 9577 +a9578 = 9578 +a9579 = 9579 +a9580 = 9580 +a9581 = 9581 +a9582 = 9582 +a9583 = 9583 +a9584 = 9584 +a9585 = 9585 +a9586 = 9586 +a9587 = 9587 +a9588 = 9588 +a9589 = 9589 +a9590 = 9590 +a9591 = 9591 +a9592 = 9592 +a9593 = 9593 +a9594 = 9594 +a9595 = 9595 +a9596 = 9596 +a9597 = 9597 +a9598 = 9598 +a9599 = 9599 +a9600 = 9600 +a9601 = 9601 +a9602 = 9602 +a9603 = 9603 +a9604 = 9604 +a9605 = 9605 +a9606 = 9606 +a9607 = 9607 +a9608 = 9608 +a9609 = 9609 +a9610 = 9610 +a9611 = 9611 +a9612 = 9612 +a9613 = 9613 +a9614 = 9614 +a9615 = 9615 +a9616 = 9616 +a9617 = 9617 +a9618 = 9618 +a9619 = 9619 +a9620 = 9620 +a9621 = 9621 +a9622 = 9622 +a9623 = 9623 +a9624 = 9624 +a9625 = 9625 +a9626 = 9626 +a9627 = 9627 +a9628 = 9628 +a9629 = 9629 +a9630 = 9630 +a9631 = 9631 +a9632 = 9632 +a9633 = 9633 +a9634 = 9634 +a9635 = 9635 +a9636 = 9636 +a9637 = 9637 +a9638 = 9638 +a9639 = 9639 +a9640 = 9640 +a9641 = 9641 +a9642 = 9642 +a9643 = 9643 +a9644 = 9644 +a9645 = 9645 +a9646 = 9646 +a9647 = 9647 +a9648 = 9648 +a9649 = 9649 +a9650 = 9650 +a9651 = 9651 +a9652 = 9652 +a9653 = 9653 +a9654 = 9654 +a9655 = 9655 +a9656 = 9656 +a9657 = 9657 +a9658 = 9658 +a9659 = 9659 +a9660 = 9660 +a9661 = 9661 +a9662 = 9662 +a9663 = 9663 +a9664 = 9664 +a9665 = 9665 +a9666 = 9666 +a9667 = 9667 +a9668 = 9668 +a9669 = 9669 +a9670 = 9670 +a9671 = 9671 +a9672 = 9672 +a9673 = 9673 +a9674 = 9674 +a9675 = 9675 +a9676 = 9676 +a9677 = 9677 +a9678 = 9678 +a9679 = 9679 +a9680 = 9680 +a9681 = 9681 +a9682 = 9682 +a9683 = 9683 +a9684 = 9684 +a9685 = 9685 +a9686 = 9686 +a9687 = 9687 +a9688 = 9688 +a9689 = 9689 +a9690 = 9690 +a9691 = 9691 +a9692 = 9692 +a9693 = 9693 +a9694 = 9694 +a9695 = 9695 +a9696 = 9696 +a9697 = 9697 +a9698 = 9698 +a9699 = 9699 +a9700 = 9700 +a9701 = 9701 +a9702 = 9702 +a9703 = 9703 +a9704 = 9704 +a9705 = 9705 +a9706 = 9706 +a9707 = 9707 +a9708 = 9708 +a9709 = 9709 +a9710 = 9710 +a9711 = 9711 +a9712 = 9712 +a9713 = 9713 +a9714 = 9714 +a9715 = 9715 +a9716 = 9716 +a9717 = 9717 +a9718 = 9718 +a9719 = 9719 +a9720 = 9720 +a9721 = 9721 +a9722 = 9722 +a9723 = 9723 +a9724 = 9724 +a9725 = 9725 +a9726 = 9726 +a9727 = 9727 +a9728 = 9728 +a9729 = 9729 +a9730 = 9730 +a9731 = 9731 +a9732 = 9732 +a9733 = 9733 +a9734 = 9734 +a9735 = 9735 +a9736 = 9736 +a9737 = 9737 +a9738 = 9738 +a9739 = 9739 +a9740 = 9740 +a9741 = 9741 +a9742 = 9742 +a9743 = 9743 +a9744 = 9744 +a9745 = 9745 +a9746 = 9746 +a9747 = 9747 +a9748 = 9748 +a9749 = 9749 +a9750 = 9750 +a9751 = 9751 +a9752 = 9752 +a9753 = 9753 +a9754 = 9754 +a9755 = 9755 +a9756 = 9756 +a9757 = 9757 +a9758 = 9758 +a9759 = 9759 +a9760 = 9760 +a9761 = 9761 +a9762 = 9762 +a9763 = 9763 +a9764 = 9764 +a9765 = 9765 +a9766 = 9766 +a9767 = 9767 +a9768 = 9768 +a9769 = 9769 +a9770 = 9770 +a9771 = 9771 +a9772 = 9772 +a9773 = 9773 +a9774 = 9774 +a9775 = 9775 +a9776 = 9776 +a9777 = 9777 +a9778 = 9778 +a9779 = 9779 +a9780 = 9780 +a9781 = 9781 +a9782 = 9782 +a9783 = 9783 +a9784 = 9784 +a9785 = 9785 +a9786 = 9786 +a9787 = 9787 +a9788 = 9788 +a9789 = 9789 +a9790 = 9790 +a9791 = 9791 +a9792 = 9792 +a9793 = 9793 +a9794 = 9794 +a9795 = 9795 +a9796 = 9796 +a9797 = 9797 +a9798 = 9798 +a9799 = 9799 +a9800 = 9800 +a9801 = 9801 +a9802 = 9802 +a9803 = 9803 +a9804 = 9804 +a9805 = 9805 +a9806 = 9806 +a9807 = 9807 +a9808 = 9808 +a9809 = 9809 +a9810 = 9810 +a9811 = 9811 +a9812 = 9812 +a9813 = 9813 +a9814 = 9814 +a9815 = 9815 +a9816 = 9816 +a9817 = 9817 +a9818 = 9818 +a9819 = 9819 +a9820 = 9820 +a9821 = 9821 +a9822 = 9822 +a9823 = 9823 +a9824 = 9824 +a9825 = 9825 +a9826 = 9826 +a9827 = 9827 +a9828 = 9828 +a9829 = 9829 +a9830 = 9830 +a9831 = 9831 +a9832 = 9832 +a9833 = 9833 +a9834 = 9834 +a9835 = 9835 +a9836 = 9836 +a9837 = 9837 +a9838 = 9838 +a9839 = 9839 +a9840 = 9840 +a9841 = 9841 +a9842 = 9842 +a9843 = 9843 +a9844 = 9844 +a9845 = 9845 +a9846 = 9846 +a9847 = 9847 +a9848 = 9848 +a9849 = 9849 +a9850 = 9850 +a9851 = 9851 +a9852 = 9852 +a9853 = 9853 +a9854 = 9854 +a9855 = 9855 +a9856 = 9856 +a9857 = 9857 +a9858 = 9858 +a9859 = 9859 +a9860 = 9860 +a9861 = 9861 +a9862 = 9862 +a9863 = 9863 +a9864 = 9864 +a9865 = 9865 +a9866 = 9866 +a9867 = 9867 +a9868 = 9868 +a9869 = 9869 +a9870 = 9870 +a9871 = 9871 +a9872 = 9872 +a9873 = 9873 +a9874 = 9874 +a9875 = 9875 +a9876 = 9876 +a9877 = 9877 +a9878 = 9878 +a9879 = 9879 +a9880 = 9880 +a9881 = 9881 +a9882 = 9882 +a9883 = 9883 +a9884 = 9884 +a9885 = 9885 +a9886 = 9886 +a9887 = 9887 +a9888 = 9888 +a9889 = 9889 +a9890 = 9890 +a9891 = 9891 +a9892 = 9892 +a9893 = 9893 +a9894 = 9894 +a9895 = 9895 +a9896 = 9896 +a9897 = 9897 +a9898 = 9898 +a9899 = 9899 +a9900 = 9900 +a9901 = 9901 +a9902 = 9902 +a9903 = 9903 +a9904 = 9904 +a9905 = 9905 +a9906 = 9906 +a9907 = 9907 +a9908 = 9908 +a9909 = 9909 +a9910 = 9910 +a9911 = 9911 +a9912 = 9912 +a9913 = 9913 +a9914 = 9914 +a9915 = 9915 +a9916 = 9916 +a9917 = 9917 +a9918 = 9918 +a9919 = 9919 +a9920 = 9920 +a9921 = 9921 +a9922 = 9922 +a9923 = 9923 +a9924 = 9924 +a9925 = 9925 +a9926 = 9926 +a9927 = 9927 +a9928 = 9928 +a9929 = 9929 +a9930 = 9930 +a9931 = 9931 +a9932 = 9932 +a9933 = 9933 +a9934 = 9934 +a9935 = 9935 +a9936 = 9936 +a9937 = 9937 +a9938 = 9938 +a9939 = 9939 +a9940 = 9940 +a9941 = 9941 +a9942 = 9942 +a9943 = 9943 +a9944 = 9944 +a9945 = 9945 +a9946 = 9946 +a9947 = 9947 +a9948 = 9948 +a9949 = 9949 +a9950 = 9950 +a9951 = 9951 +a9952 = 9952 +a9953 = 9953 +a9954 = 9954 +a9955 = 9955 +a9956 = 9956 +a9957 = 9957 +a9958 = 9958 +a9959 = 9959 +a9960 = 9960 +a9961 = 9961 +a9962 = 9962 +a9963 = 9963 +a9964 = 9964 +a9965 = 9965 +a9966 = 9966 +a9967 = 9967 +a9968 = 9968 +a9969 = 9969 +a9970 = 9970 +a9971 = 9971 +a9972 = 9972 +a9973 = 9973 +a9974 = 9974 +a9975 = 9975 +a9976 = 9976 +a9977 = 9977 +a9978 = 9978 +a9979 = 9979 +a9980 = 9980 +a9981 = 9981 +a9982 = 9982 +a9983 = 9983 +a9984 = 9984 +a9985 = 9985 +a9986 = 9986 +a9987 = 9987 +a9988 = 9988 +a9989 = 9989 +a9990 = 9990 +a9991 = 9991 +a9992 = 9992 +a9993 = 9993 +a9994 = 9994 +a9995 = 9995 +a9996 = 9996 +a9997 = 9997 +a9998 = 9998 +a9999 = 9999 +a10000 = 10000 +a10001 = 10001 +a10002 = 10002 +a10003 = 10003 +a10004 = 10004 +a10005 = 10005 +a10006 = 10006 +a10007 = 10007 +a10008 = 10008 +a10009 = 10009 +a10010 = 10010 +a10011 = 10011 +a10012 = 10012 +a10013 = 10013 +a10014 = 10014 +a10015 = 10015 +a10016 = 10016 +a10017 = 10017 +a10018 = 10018 +a10019 = 10019 +a10020 = 10020 +a10021 = 10021 +a10022 = 10022 +a10023 = 10023 +a10024 = 10024 +a10025 = 10025 +a10026 = 10026 +a10027 = 10027 +a10028 = 10028 +a10029 = 10029 +a10030 = 10030 +a10031 = 10031 +a10032 = 10032 +a10033 = 10033 +a10034 = 10034 +a10035 = 10035 +a10036 = 10036 +a10037 = 10037 +a10038 = 10038 +a10039 = 10039 +a10040 = 10040 +a10041 = 10041 +a10042 = 10042 +a10043 = 10043 +a10044 = 10044 +a10045 = 10045 +a10046 = 10046 +a10047 = 10047 +a10048 = 10048 +a10049 = 10049 +a10050 = 10050 +a10051 = 10051 +a10052 = 10052 +a10053 = 10053 +a10054 = 10054 +a10055 = 10055 +a10056 = 10056 +a10057 = 10057 +a10058 = 10058 +a10059 = 10059 +a10060 = 10060 +a10061 = 10061 +a10062 = 10062 +a10063 = 10063 +a10064 = 10064 +a10065 = 10065 +a10066 = 10066 +a10067 = 10067 +a10068 = 10068 +a10069 = 10069 +a10070 = 10070 +a10071 = 10071 +a10072 = 10072 +a10073 = 10073 +a10074 = 10074 +a10075 = 10075 +a10076 = 10076 +a10077 = 10077 +a10078 = 10078 +a10079 = 10079 +a10080 = 10080 +a10081 = 10081 +a10082 = 10082 +a10083 = 10083 +a10084 = 10084 +a10085 = 10085 +a10086 = 10086 +a10087 = 10087 +a10088 = 10088 +a10089 = 10089 +a10090 = 10090 +a10091 = 10091 +a10092 = 10092 +a10093 = 10093 +a10094 = 10094 +a10095 = 10095 +a10096 = 10096 +a10097 = 10097 +a10098 = 10098 +a10099 = 10099 +a10100 = 10100 +a10101 = 10101 +a10102 = 10102 +a10103 = 10103 +a10104 = 10104 +a10105 = 10105 +a10106 = 10106 +a10107 = 10107 +a10108 = 10108 +a10109 = 10109 +a10110 = 10110 +a10111 = 10111 +a10112 = 10112 +a10113 = 10113 +a10114 = 10114 +a10115 = 10115 +a10116 = 10116 +a10117 = 10117 +a10118 = 10118 +a10119 = 10119 +a10120 = 10120 +a10121 = 10121 +a10122 = 10122 +a10123 = 10123 +a10124 = 10124 +a10125 = 10125 +a10126 = 10126 +a10127 = 10127 +a10128 = 10128 +a10129 = 10129 +a10130 = 10130 +a10131 = 10131 +a10132 = 10132 +a10133 = 10133 +a10134 = 10134 +a10135 = 10135 +a10136 = 10136 +a10137 = 10137 +a10138 = 10138 +a10139 = 10139 +a10140 = 10140 +a10141 = 10141 +a10142 = 10142 +a10143 = 10143 +a10144 = 10144 +a10145 = 10145 +a10146 = 10146 +a10147 = 10147 +a10148 = 10148 +a10149 = 10149 +a10150 = 10150 +a10151 = 10151 +a10152 = 10152 +a10153 = 10153 +a10154 = 10154 +a10155 = 10155 +a10156 = 10156 +a10157 = 10157 +a10158 = 10158 +a10159 = 10159 +a10160 = 10160 +a10161 = 10161 +a10162 = 10162 +a10163 = 10163 +a10164 = 10164 +a10165 = 10165 +a10166 = 10166 +a10167 = 10167 +a10168 = 10168 +a10169 = 10169 +a10170 = 10170 +a10171 = 10171 +a10172 = 10172 +a10173 = 10173 +a10174 = 10174 +a10175 = 10175 +a10176 = 10176 +a10177 = 10177 +a10178 = 10178 +a10179 = 10179 +a10180 = 10180 +a10181 = 10181 +a10182 = 10182 +a10183 = 10183 +a10184 = 10184 +a10185 = 10185 +a10186 = 10186 +a10187 = 10187 +a10188 = 10188 +a10189 = 10189 +a10190 = 10190 +a10191 = 10191 +a10192 = 10192 +a10193 = 10193 +a10194 = 10194 +a10195 = 10195 +a10196 = 10196 +a10197 = 10197 +a10198 = 10198 +a10199 = 10199 +a10200 = 10200 +a10201 = 10201 +a10202 = 10202 +a10203 = 10203 +a10204 = 10204 +a10205 = 10205 +a10206 = 10206 +a10207 = 10207 +a10208 = 10208 +a10209 = 10209 +a10210 = 10210 +a10211 = 10211 +a10212 = 10212 +a10213 = 10213 +a10214 = 10214 +a10215 = 10215 +a10216 = 10216 +a10217 = 10217 +a10218 = 10218 +a10219 = 10219 +a10220 = 10220 +a10221 = 10221 +a10222 = 10222 +a10223 = 10223 +a10224 = 10224 +a10225 = 10225 +a10226 = 10226 +a10227 = 10227 +a10228 = 10228 +a10229 = 10229 +a10230 = 10230 +a10231 = 10231 +a10232 = 10232 +a10233 = 10233 +a10234 = 10234 +a10235 = 10235 +a10236 = 10236 +a10237 = 10237 +a10238 = 10238 +a10239 = 10239 +a10240 = 10240 +a10241 = 10241 +a10242 = 10242 +a10243 = 10243 +a10244 = 10244 +a10245 = 10245 +a10246 = 10246 +a10247 = 10247 +a10248 = 10248 +a10249 = 10249 +a10250 = 10250 +a10251 = 10251 +a10252 = 10252 +a10253 = 10253 +a10254 = 10254 +a10255 = 10255 +a10256 = 10256 +a10257 = 10257 +a10258 = 10258 +a10259 = 10259 +a10260 = 10260 +a10261 = 10261 +a10262 = 10262 +a10263 = 10263 +a10264 = 10264 +a10265 = 10265 +a10266 = 10266 +a10267 = 10267 +a10268 = 10268 +a10269 = 10269 +a10270 = 10270 +a10271 = 10271 +a10272 = 10272 +a10273 = 10273 +a10274 = 10274 +a10275 = 10275 +a10276 = 10276 +a10277 = 10277 +a10278 = 10278 +a10279 = 10279 +a10280 = 10280 +a10281 = 10281 +a10282 = 10282 +a10283 = 10283 +a10284 = 10284 +a10285 = 10285 +a10286 = 10286 +a10287 = 10287 +a10288 = 10288 +a10289 = 10289 +a10290 = 10290 +a10291 = 10291 +a10292 = 10292 +a10293 = 10293 +a10294 = 10294 +a10295 = 10295 +a10296 = 10296 +a10297 = 10297 +a10298 = 10298 +a10299 = 10299 +a10300 = 10300 +a10301 = 10301 +a10302 = 10302 +a10303 = 10303 +a10304 = 10304 +a10305 = 10305 +a10306 = 10306 +a10307 = 10307 +a10308 = 10308 +a10309 = 10309 +a10310 = 10310 +a10311 = 10311 +a10312 = 10312 +a10313 = 10313 +a10314 = 10314 +a10315 = 10315 +a10316 = 10316 +a10317 = 10317 +a10318 = 10318 +a10319 = 10319 +a10320 = 10320 +a10321 = 10321 +a10322 = 10322 +a10323 = 10323 +a10324 = 10324 +a10325 = 10325 +a10326 = 10326 +a10327 = 10327 +a10328 = 10328 +a10329 = 10329 +a10330 = 10330 +a10331 = 10331 +a10332 = 10332 +a10333 = 10333 +a10334 = 10334 +a10335 = 10335 +a10336 = 10336 +a10337 = 10337 +a10338 = 10338 +a10339 = 10339 +a10340 = 10340 +a10341 = 10341 +a10342 = 10342 +a10343 = 10343 +a10344 = 10344 +a10345 = 10345 +a10346 = 10346 +a10347 = 10347 +a10348 = 10348 +a10349 = 10349 +a10350 = 10350 +a10351 = 10351 +a10352 = 10352 +a10353 = 10353 +a10354 = 10354 +a10355 = 10355 +a10356 = 10356 +a10357 = 10357 +a10358 = 10358 +a10359 = 10359 +a10360 = 10360 +a10361 = 10361 +a10362 = 10362 +a10363 = 10363 +a10364 = 10364 +a10365 = 10365 +a10366 = 10366 +a10367 = 10367 +a10368 = 10368 +a10369 = 10369 +a10370 = 10370 +a10371 = 10371 +a10372 = 10372 +a10373 = 10373 +a10374 = 10374 +a10375 = 10375 +a10376 = 10376 +a10377 = 10377 +a10378 = 10378 +a10379 = 10379 +a10380 = 10380 +a10381 = 10381 +a10382 = 10382 +a10383 = 10383 +a10384 = 10384 +a10385 = 10385 +a10386 = 10386 +a10387 = 10387 +a10388 = 10388 +a10389 = 10389 +a10390 = 10390 +a10391 = 10391 +a10392 = 10392 +a10393 = 10393 +a10394 = 10394 +a10395 = 10395 +a10396 = 10396 +a10397 = 10397 +a10398 = 10398 +a10399 = 10399 +a10400 = 10400 +a10401 = 10401 +a10402 = 10402 +a10403 = 10403 +a10404 = 10404 +a10405 = 10405 +a10406 = 10406 +a10407 = 10407 +a10408 = 10408 +a10409 = 10409 +a10410 = 10410 +a10411 = 10411 +a10412 = 10412 +a10413 = 10413 +a10414 = 10414 +a10415 = 10415 +a10416 = 10416 +a10417 = 10417 +a10418 = 10418 +a10419 = 10419 +a10420 = 10420 +a10421 = 10421 +a10422 = 10422 +a10423 = 10423 +a10424 = 10424 +a10425 = 10425 +a10426 = 10426 +a10427 = 10427 +a10428 = 10428 +a10429 = 10429 +a10430 = 10430 +a10431 = 10431 +a10432 = 10432 +a10433 = 10433 +a10434 = 10434 +a10435 = 10435 +a10436 = 10436 +a10437 = 10437 +a10438 = 10438 +a10439 = 10439 +a10440 = 10440 +a10441 = 10441 +a10442 = 10442 +a10443 = 10443 +a10444 = 10444 +a10445 = 10445 +a10446 = 10446 +a10447 = 10447 +a10448 = 10448 +a10449 = 10449 +a10450 = 10450 +a10451 = 10451 +a10452 = 10452 +a10453 = 10453 +a10454 = 10454 +a10455 = 10455 +a10456 = 10456 +a10457 = 10457 +a10458 = 10458 +a10459 = 10459 +a10460 = 10460 +a10461 = 10461 +a10462 = 10462 +a10463 = 10463 +a10464 = 10464 +a10465 = 10465 +a10466 = 10466 +a10467 = 10467 +a10468 = 10468 +a10469 = 10469 +a10470 = 10470 +a10471 = 10471 +a10472 = 10472 +a10473 = 10473 +a10474 = 10474 +a10475 = 10475 +a10476 = 10476 +a10477 = 10477 +a10478 = 10478 +a10479 = 10479 +a10480 = 10480 +a10481 = 10481 +a10482 = 10482 +a10483 = 10483 +a10484 = 10484 +a10485 = 10485 +a10486 = 10486 +a10487 = 10487 +a10488 = 10488 +a10489 = 10489 +a10490 = 10490 +a10491 = 10491 +a10492 = 10492 +a10493 = 10493 +a10494 = 10494 +a10495 = 10495 +a10496 = 10496 +a10497 = 10497 +a10498 = 10498 +a10499 = 10499 +a10500 = 10500 +a10501 = 10501 +a10502 = 10502 +a10503 = 10503 +a10504 = 10504 +a10505 = 10505 +a10506 = 10506 +a10507 = 10507 +a10508 = 10508 +a10509 = 10509 +a10510 = 10510 +a10511 = 10511 +a10512 = 10512 +a10513 = 10513 +a10514 = 10514 +a10515 = 10515 +a10516 = 10516 +a10517 = 10517 +a10518 = 10518 +a10519 = 10519 +a10520 = 10520 +a10521 = 10521 +a10522 = 10522 +a10523 = 10523 +a10524 = 10524 +a10525 = 10525 +a10526 = 10526 +a10527 = 10527 +a10528 = 10528 +a10529 = 10529 +a10530 = 10530 +a10531 = 10531 +a10532 = 10532 +a10533 = 10533 +a10534 = 10534 +a10535 = 10535 +a10536 = 10536 +a10537 = 10537 +a10538 = 10538 +a10539 = 10539 +a10540 = 10540 +a10541 = 10541 +a10542 = 10542 +a10543 = 10543 +a10544 = 10544 +a10545 = 10545 +a10546 = 10546 +a10547 = 10547 +a10548 = 10548 +a10549 = 10549 +a10550 = 10550 +a10551 = 10551 +a10552 = 10552 +a10553 = 10553 +a10554 = 10554 +a10555 = 10555 +a10556 = 10556 +a10557 = 10557 +a10558 = 10558 +a10559 = 10559 +a10560 = 10560 +a10561 = 10561 +a10562 = 10562 +a10563 = 10563 +a10564 = 10564 +a10565 = 10565 +a10566 = 10566 +a10567 = 10567 +a10568 = 10568 +a10569 = 10569 +a10570 = 10570 +a10571 = 10571 +a10572 = 10572 +a10573 = 10573 +a10574 = 10574 +a10575 = 10575 +a10576 = 10576 +a10577 = 10577 +a10578 = 10578 +a10579 = 10579 +a10580 = 10580 +a10581 = 10581 +a10582 = 10582 +a10583 = 10583 +a10584 = 10584 +a10585 = 10585 +a10586 = 10586 +a10587 = 10587 +a10588 = 10588 +a10589 = 10589 +a10590 = 10590 +a10591 = 10591 +a10592 = 10592 +a10593 = 10593 +a10594 = 10594 +a10595 = 10595 +a10596 = 10596 +a10597 = 10597 +a10598 = 10598 +a10599 = 10599 +a10600 = 10600 +a10601 = 10601 +a10602 = 10602 +a10603 = 10603 +a10604 = 10604 +a10605 = 10605 +a10606 = 10606 +a10607 = 10607 +a10608 = 10608 +a10609 = 10609 +a10610 = 10610 +a10611 = 10611 +a10612 = 10612 +a10613 = 10613 +a10614 = 10614 +a10615 = 10615 +a10616 = 10616 +a10617 = 10617 +a10618 = 10618 +a10619 = 10619 +a10620 = 10620 +a10621 = 10621 +a10622 = 10622 +a10623 = 10623 +a10624 = 10624 +a10625 = 10625 +a10626 = 10626 +a10627 = 10627 +a10628 = 10628 +a10629 = 10629 +a10630 = 10630 +a10631 = 10631 +a10632 = 10632 +a10633 = 10633 +a10634 = 10634 +a10635 = 10635 +a10636 = 10636 +a10637 = 10637 +a10638 = 10638 +a10639 = 10639 +a10640 = 10640 +a10641 = 10641 +a10642 = 10642 +a10643 = 10643 +a10644 = 10644 +a10645 = 10645 +a10646 = 10646 +a10647 = 10647 +a10648 = 10648 +a10649 = 10649 +a10650 = 10650 +a10651 = 10651 +a10652 = 10652 +a10653 = 10653 +a10654 = 10654 +a10655 = 10655 +a10656 = 10656 +a10657 = 10657 +a10658 = 10658 +a10659 = 10659 +a10660 = 10660 +a10661 = 10661 +a10662 = 10662 +a10663 = 10663 +a10664 = 10664 +a10665 = 10665 +a10666 = 10666 +a10667 = 10667 +a10668 = 10668 +a10669 = 10669 +a10670 = 10670 +a10671 = 10671 +a10672 = 10672 +a10673 = 10673 +a10674 = 10674 +a10675 = 10675 +a10676 = 10676 +a10677 = 10677 +a10678 = 10678 +a10679 = 10679 +a10680 = 10680 +a10681 = 10681 +a10682 = 10682 +a10683 = 10683 +a10684 = 10684 +a10685 = 10685 +a10686 = 10686 +a10687 = 10687 +a10688 = 10688 +a10689 = 10689 +a10690 = 10690 +a10691 = 10691 +a10692 = 10692 +a10693 = 10693 +a10694 = 10694 +a10695 = 10695 +a10696 = 10696 +a10697 = 10697 +a10698 = 10698 +a10699 = 10699 +a10700 = 10700 +a10701 = 10701 +a10702 = 10702 +a10703 = 10703 +a10704 = 10704 +a10705 = 10705 +a10706 = 10706 +a10707 = 10707 +a10708 = 10708 +a10709 = 10709 +a10710 = 10710 +a10711 = 10711 +a10712 = 10712 +a10713 = 10713 +a10714 = 10714 +a10715 = 10715 +a10716 = 10716 +a10717 = 10717 +a10718 = 10718 +a10719 = 10719 +a10720 = 10720 +a10721 = 10721 +a10722 = 10722 +a10723 = 10723 +a10724 = 10724 +a10725 = 10725 +a10726 = 10726 +a10727 = 10727 +a10728 = 10728 +a10729 = 10729 +a10730 = 10730 +a10731 = 10731 +a10732 = 10732 +a10733 = 10733 +a10734 = 10734 +a10735 = 10735 +a10736 = 10736 +a10737 = 10737 +a10738 = 10738 +a10739 = 10739 +a10740 = 10740 +a10741 = 10741 +a10742 = 10742 +a10743 = 10743 +a10744 = 10744 +a10745 = 10745 +a10746 = 10746 +a10747 = 10747 +a10748 = 10748 +a10749 = 10749 +a10750 = 10750 +a10751 = 10751 +a10752 = 10752 +a10753 = 10753 +a10754 = 10754 +a10755 = 10755 +a10756 = 10756 +a10757 = 10757 +a10758 = 10758 +a10759 = 10759 +a10760 = 10760 +a10761 = 10761 +a10762 = 10762 +a10763 = 10763 +a10764 = 10764 +a10765 = 10765 +a10766 = 10766 +a10767 = 10767 +a10768 = 10768 +a10769 = 10769 +a10770 = 10770 +a10771 = 10771 +a10772 = 10772 +a10773 = 10773 +a10774 = 10774 +a10775 = 10775 +a10776 = 10776 +a10777 = 10777 +a10778 = 10778 +a10779 = 10779 +a10780 = 10780 +a10781 = 10781 +a10782 = 10782 +a10783 = 10783 +a10784 = 10784 +a10785 = 10785 +a10786 = 10786 +a10787 = 10787 +a10788 = 10788 +a10789 = 10789 +a10790 = 10790 +a10791 = 10791 +a10792 = 10792 +a10793 = 10793 +a10794 = 10794 +a10795 = 10795 +a10796 = 10796 +a10797 = 10797 +a10798 = 10798 +a10799 = 10799 +a10800 = 10800 +a10801 = 10801 +a10802 = 10802 +a10803 = 10803 +a10804 = 10804 +a10805 = 10805 +a10806 = 10806 +a10807 = 10807 +a10808 = 10808 +a10809 = 10809 +a10810 = 10810 +a10811 = 10811 +a10812 = 10812 +a10813 = 10813 +a10814 = 10814 +a10815 = 10815 +a10816 = 10816 +a10817 = 10817 +a10818 = 10818 +a10819 = 10819 +a10820 = 10820 +a10821 = 10821 +a10822 = 10822 +a10823 = 10823 +a10824 = 10824 +a10825 = 10825 +a10826 = 10826 +a10827 = 10827 +a10828 = 10828 +a10829 = 10829 +a10830 = 10830 +a10831 = 10831 +a10832 = 10832 +a10833 = 10833 +a10834 = 10834 +a10835 = 10835 +a10836 = 10836 +a10837 = 10837 +a10838 = 10838 +a10839 = 10839 +a10840 = 10840 +a10841 = 10841 +a10842 = 10842 +a10843 = 10843 +a10844 = 10844 +a10845 = 10845 +a10846 = 10846 +a10847 = 10847 +a10848 = 10848 +a10849 = 10849 +a10850 = 10850 +a10851 = 10851 +a10852 = 10852 +a10853 = 10853 +a10854 = 10854 +a10855 = 10855 +a10856 = 10856 +a10857 = 10857 +a10858 = 10858 +a10859 = 10859 +a10860 = 10860 +a10861 = 10861 +a10862 = 10862 +a10863 = 10863 +a10864 = 10864 +a10865 = 10865 +a10866 = 10866 +a10867 = 10867 +a10868 = 10868 +a10869 = 10869 +a10870 = 10870 +a10871 = 10871 +a10872 = 10872 +a10873 = 10873 +a10874 = 10874 +a10875 = 10875 +a10876 = 10876 +a10877 = 10877 +a10878 = 10878 +a10879 = 10879 +a10880 = 10880 +a10881 = 10881 +a10882 = 10882 +a10883 = 10883 +a10884 = 10884 +a10885 = 10885 +a10886 = 10886 +a10887 = 10887 +a10888 = 10888 +a10889 = 10889 +a10890 = 10890 +a10891 = 10891 +a10892 = 10892 +a10893 = 10893 +a10894 = 10894 +a10895 = 10895 +a10896 = 10896 +a10897 = 10897 +a10898 = 10898 +a10899 = 10899 +a10900 = 10900 +a10901 = 10901 +a10902 = 10902 +a10903 = 10903 +a10904 = 10904 +a10905 = 10905 +a10906 = 10906 +a10907 = 10907 +a10908 = 10908 +a10909 = 10909 +a10910 = 10910 +a10911 = 10911 +a10912 = 10912 +a10913 = 10913 +a10914 = 10914 +a10915 = 10915 +a10916 = 10916 +a10917 = 10917 +a10918 = 10918 +a10919 = 10919 +a10920 = 10920 +a10921 = 10921 +a10922 = 10922 +a10923 = 10923 +a10924 = 10924 +a10925 = 10925 +a10926 = 10926 +a10927 = 10927 +a10928 = 10928 +a10929 = 10929 +a10930 = 10930 +a10931 = 10931 +a10932 = 10932 +a10933 = 10933 +a10934 = 10934 +a10935 = 10935 +a10936 = 10936 +a10937 = 10937 +a10938 = 10938 +a10939 = 10939 +a10940 = 10940 +a10941 = 10941 +a10942 = 10942 +a10943 = 10943 +a10944 = 10944 +a10945 = 10945 +a10946 = 10946 +a10947 = 10947 +a10948 = 10948 +a10949 = 10949 +a10950 = 10950 +a10951 = 10951 +a10952 = 10952 +a10953 = 10953 +a10954 = 10954 +a10955 = 10955 +a10956 = 10956 +a10957 = 10957 +a10958 = 10958 +a10959 = 10959 +a10960 = 10960 +a10961 = 10961 +a10962 = 10962 +a10963 = 10963 +a10964 = 10964 +a10965 = 10965 +a10966 = 10966 +a10967 = 10967 +a10968 = 10968 +a10969 = 10969 +a10970 = 10970 +a10971 = 10971 +a10972 = 10972 +a10973 = 10973 +a10974 = 10974 +a10975 = 10975 +a10976 = 10976 +a10977 = 10977 +a10978 = 10978 +a10979 = 10979 +a10980 = 10980 +a10981 = 10981 +a10982 = 10982 +a10983 = 10983 +a10984 = 10984 +a10985 = 10985 +a10986 = 10986 +a10987 = 10987 +a10988 = 10988 +a10989 = 10989 +a10990 = 10990 +a10991 = 10991 +a10992 = 10992 +a10993 = 10993 +a10994 = 10994 +a10995 = 10995 +a10996 = 10996 +a10997 = 10997 +a10998 = 10998 +a10999 = 10999 +a11000 = 11000 +a11001 = 11001 +a11002 = 11002 +a11003 = 11003 +a11004 = 11004 +a11005 = 11005 +a11006 = 11006 +a11007 = 11007 +a11008 = 11008 +a11009 = 11009 +a11010 = 11010 +a11011 = 11011 +a11012 = 11012 +a11013 = 11013 +a11014 = 11014 +a11015 = 11015 +a11016 = 11016 +a11017 = 11017 +a11018 = 11018 +a11019 = 11019 +a11020 = 11020 +a11021 = 11021 +a11022 = 11022 +a11023 = 11023 +a11024 = 11024 +a11025 = 11025 +a11026 = 11026 +a11027 = 11027 +a11028 = 11028 +a11029 = 11029 +a11030 = 11030 +a11031 = 11031 +a11032 = 11032 +a11033 = 11033 +a11034 = 11034 +a11035 = 11035 +a11036 = 11036 +a11037 = 11037 +a11038 = 11038 +a11039 = 11039 +a11040 = 11040 +a11041 = 11041 +a11042 = 11042 +a11043 = 11043 +a11044 = 11044 +a11045 = 11045 +a11046 = 11046 +a11047 = 11047 +a11048 = 11048 +a11049 = 11049 +a11050 = 11050 +a11051 = 11051 +a11052 = 11052 +a11053 = 11053 +a11054 = 11054 +a11055 = 11055 +a11056 = 11056 +a11057 = 11057 +a11058 = 11058 +a11059 = 11059 +a11060 = 11060 +a11061 = 11061 +a11062 = 11062 +a11063 = 11063 +a11064 = 11064 +a11065 = 11065 +a11066 = 11066 +a11067 = 11067 +a11068 = 11068 +a11069 = 11069 +a11070 = 11070 +a11071 = 11071 +a11072 = 11072 +a11073 = 11073 +a11074 = 11074 +a11075 = 11075 +a11076 = 11076 +a11077 = 11077 +a11078 = 11078 +a11079 = 11079 +a11080 = 11080 +a11081 = 11081 +a11082 = 11082 +a11083 = 11083 +a11084 = 11084 +a11085 = 11085 +a11086 = 11086 +a11087 = 11087 +a11088 = 11088 +a11089 = 11089 +a11090 = 11090 +a11091 = 11091 +a11092 = 11092 +a11093 = 11093 +a11094 = 11094 +a11095 = 11095 +a11096 = 11096 +a11097 = 11097 +a11098 = 11098 +a11099 = 11099 +a11100 = 11100 +a11101 = 11101 +a11102 = 11102 +a11103 = 11103 +a11104 = 11104 +a11105 = 11105 +a11106 = 11106 +a11107 = 11107 +a11108 = 11108 +a11109 = 11109 +a11110 = 11110 +a11111 = 11111 +a11112 = 11112 +a11113 = 11113 +a11114 = 11114 +a11115 = 11115 +a11116 = 11116 +a11117 = 11117 +a11118 = 11118 +a11119 = 11119 +a11120 = 11120 +a11121 = 11121 +a11122 = 11122 +a11123 = 11123 +a11124 = 11124 +a11125 = 11125 +a11126 = 11126 +a11127 = 11127 +a11128 = 11128 +a11129 = 11129 +a11130 = 11130 +a11131 = 11131 +a11132 = 11132 +a11133 = 11133 +a11134 = 11134 +a11135 = 11135 +a11136 = 11136 +a11137 = 11137 +a11138 = 11138 +a11139 = 11139 +a11140 = 11140 +a11141 = 11141 +a11142 = 11142 +a11143 = 11143 +a11144 = 11144 +a11145 = 11145 +a11146 = 11146 +a11147 = 11147 +a11148 = 11148 +a11149 = 11149 +a11150 = 11150 +a11151 = 11151 +a11152 = 11152 +a11153 = 11153 +a11154 = 11154 +a11155 = 11155 +a11156 = 11156 +a11157 = 11157 +a11158 = 11158 +a11159 = 11159 +a11160 = 11160 +a11161 = 11161 +a11162 = 11162 +a11163 = 11163 +a11164 = 11164 +a11165 = 11165 +a11166 = 11166 +a11167 = 11167 +a11168 = 11168 +a11169 = 11169 +a11170 = 11170 +a11171 = 11171 +a11172 = 11172 +a11173 = 11173 +a11174 = 11174 +a11175 = 11175 +a11176 = 11176 +a11177 = 11177 +a11178 = 11178 +a11179 = 11179 +a11180 = 11180 +a11181 = 11181 +a11182 = 11182 +a11183 = 11183 +a11184 = 11184 +a11185 = 11185 +a11186 = 11186 +a11187 = 11187 +a11188 = 11188 +a11189 = 11189 +a11190 = 11190 +a11191 = 11191 +a11192 = 11192 +a11193 = 11193 +a11194 = 11194 +a11195 = 11195 +a11196 = 11196 +a11197 = 11197 +a11198 = 11198 +a11199 = 11199 +a11200 = 11200 +a11201 = 11201 +a11202 = 11202 +a11203 = 11203 +a11204 = 11204 +a11205 = 11205 +a11206 = 11206 +a11207 = 11207 +a11208 = 11208 +a11209 = 11209 +a11210 = 11210 +a11211 = 11211 +a11212 = 11212 +a11213 = 11213 +a11214 = 11214 +a11215 = 11215 +a11216 = 11216 +a11217 = 11217 +a11218 = 11218 +a11219 = 11219 +a11220 = 11220 +a11221 = 11221 +a11222 = 11222 +a11223 = 11223 +a11224 = 11224 +a11225 = 11225 +a11226 = 11226 +a11227 = 11227 +a11228 = 11228 +a11229 = 11229 +a11230 = 11230 +a11231 = 11231 +a11232 = 11232 +a11233 = 11233 +a11234 = 11234 +a11235 = 11235 +a11236 = 11236 +a11237 = 11237 +a11238 = 11238 +a11239 = 11239 +a11240 = 11240 +a11241 = 11241 +a11242 = 11242 +a11243 = 11243 +a11244 = 11244 +a11245 = 11245 +a11246 = 11246 +a11247 = 11247 +a11248 = 11248 +a11249 = 11249 +a11250 = 11250 +a11251 = 11251 +a11252 = 11252 +a11253 = 11253 +a11254 = 11254 +a11255 = 11255 +a11256 = 11256 +a11257 = 11257 +a11258 = 11258 +a11259 = 11259 +a11260 = 11260 +a11261 = 11261 +a11262 = 11262 +a11263 = 11263 +a11264 = 11264 +a11265 = 11265 +a11266 = 11266 +a11267 = 11267 +a11268 = 11268 +a11269 = 11269 +a11270 = 11270 +a11271 = 11271 +a11272 = 11272 +a11273 = 11273 +a11274 = 11274 +a11275 = 11275 +a11276 = 11276 +a11277 = 11277 +a11278 = 11278 +a11279 = 11279 +a11280 = 11280 +a11281 = 11281 +a11282 = 11282 +a11283 = 11283 +a11284 = 11284 +a11285 = 11285 +a11286 = 11286 +a11287 = 11287 +a11288 = 11288 +a11289 = 11289 +a11290 = 11290 +a11291 = 11291 +a11292 = 11292 +a11293 = 11293 +a11294 = 11294 +a11295 = 11295 +a11296 = 11296 +a11297 = 11297 +a11298 = 11298 +a11299 = 11299 +a11300 = 11300 +a11301 = 11301 +a11302 = 11302 +a11303 = 11303 +a11304 = 11304 +a11305 = 11305 +a11306 = 11306 +a11307 = 11307 +a11308 = 11308 +a11309 = 11309 +a11310 = 11310 +a11311 = 11311 +a11312 = 11312 +a11313 = 11313 +a11314 = 11314 +a11315 = 11315 +a11316 = 11316 +a11317 = 11317 +a11318 = 11318 +a11319 = 11319 +a11320 = 11320 +a11321 = 11321 +a11322 = 11322 +a11323 = 11323 +a11324 = 11324 +a11325 = 11325 +a11326 = 11326 +a11327 = 11327 +a11328 = 11328 +a11329 = 11329 +a11330 = 11330 +a11331 = 11331 +a11332 = 11332 +a11333 = 11333 +a11334 = 11334 +a11335 = 11335 +a11336 = 11336 +a11337 = 11337 +a11338 = 11338 +a11339 = 11339 +a11340 = 11340 +a11341 = 11341 +a11342 = 11342 +a11343 = 11343 +a11344 = 11344 +a11345 = 11345 +a11346 = 11346 +a11347 = 11347 +a11348 = 11348 +a11349 = 11349 +a11350 = 11350 +a11351 = 11351 +a11352 = 11352 +a11353 = 11353 +a11354 = 11354 +a11355 = 11355 +a11356 = 11356 +a11357 = 11357 +a11358 = 11358 +a11359 = 11359 +a11360 = 11360 +a11361 = 11361 +a11362 = 11362 +a11363 = 11363 +a11364 = 11364 +a11365 = 11365 +a11366 = 11366 +a11367 = 11367 +a11368 = 11368 +a11369 = 11369 +a11370 = 11370 +a11371 = 11371 +a11372 = 11372 +a11373 = 11373 +a11374 = 11374 +a11375 = 11375 +a11376 = 11376 +a11377 = 11377 +a11378 = 11378 +a11379 = 11379 +a11380 = 11380 +a11381 = 11381 +a11382 = 11382 +a11383 = 11383 +a11384 = 11384 +a11385 = 11385 +a11386 = 11386 +a11387 = 11387 +a11388 = 11388 +a11389 = 11389 +a11390 = 11390 +a11391 = 11391 +a11392 = 11392 +a11393 = 11393 +a11394 = 11394 +a11395 = 11395 +a11396 = 11396 +a11397 = 11397 +a11398 = 11398 +a11399 = 11399 +a11400 = 11400 +a11401 = 11401 +a11402 = 11402 +a11403 = 11403 +a11404 = 11404 +a11405 = 11405 +a11406 = 11406 +a11407 = 11407 +a11408 = 11408 +a11409 = 11409 +a11410 = 11410 +a11411 = 11411 +a11412 = 11412 +a11413 = 11413 +a11414 = 11414 +a11415 = 11415 +a11416 = 11416 +a11417 = 11417 +a11418 = 11418 +a11419 = 11419 +a11420 = 11420 +a11421 = 11421 +a11422 = 11422 +a11423 = 11423 +a11424 = 11424 +a11425 = 11425 +a11426 = 11426 +a11427 = 11427 +a11428 = 11428 +a11429 = 11429 +a11430 = 11430 +a11431 = 11431 +a11432 = 11432 +a11433 = 11433 +a11434 = 11434 +a11435 = 11435 +a11436 = 11436 +a11437 = 11437 +a11438 = 11438 +a11439 = 11439 +a11440 = 11440 +a11441 = 11441 +a11442 = 11442 +a11443 = 11443 +a11444 = 11444 +a11445 = 11445 +a11446 = 11446 +a11447 = 11447 +a11448 = 11448 +a11449 = 11449 +a11450 = 11450 +a11451 = 11451 +a11452 = 11452 +a11453 = 11453 +a11454 = 11454 +a11455 = 11455 +a11456 = 11456 +a11457 = 11457 +a11458 = 11458 +a11459 = 11459 +a11460 = 11460 +a11461 = 11461 +a11462 = 11462 +a11463 = 11463 +a11464 = 11464 +a11465 = 11465 +a11466 = 11466 +a11467 = 11467 +a11468 = 11468 +a11469 = 11469 +a11470 = 11470 +a11471 = 11471 +a11472 = 11472 +a11473 = 11473 +a11474 = 11474 +a11475 = 11475 +a11476 = 11476 +a11477 = 11477 +a11478 = 11478 +a11479 = 11479 +a11480 = 11480 +a11481 = 11481 +a11482 = 11482 +a11483 = 11483 +a11484 = 11484 +a11485 = 11485 +a11486 = 11486 +a11487 = 11487 +a11488 = 11488 +a11489 = 11489 +a11490 = 11490 +a11491 = 11491 +a11492 = 11492 +a11493 = 11493 +a11494 = 11494 +a11495 = 11495 +a11496 = 11496 +a11497 = 11497 +a11498 = 11498 +a11499 = 11499 +a11500 = 11500 +a11501 = 11501 +a11502 = 11502 +a11503 = 11503 +a11504 = 11504 +a11505 = 11505 +a11506 = 11506 +a11507 = 11507 +a11508 = 11508 +a11509 = 11509 +a11510 = 11510 +a11511 = 11511 +a11512 = 11512 +a11513 = 11513 +a11514 = 11514 +a11515 = 11515 +a11516 = 11516 +a11517 = 11517 +a11518 = 11518 +a11519 = 11519 +a11520 = 11520 +a11521 = 11521 +a11522 = 11522 +a11523 = 11523 +a11524 = 11524 +a11525 = 11525 +a11526 = 11526 +a11527 = 11527 +a11528 = 11528 +a11529 = 11529 +a11530 = 11530 +a11531 = 11531 +a11532 = 11532 +a11533 = 11533 +a11534 = 11534 +a11535 = 11535 +a11536 = 11536 +a11537 = 11537 +a11538 = 11538 +a11539 = 11539 +a11540 = 11540 +a11541 = 11541 +a11542 = 11542 +a11543 = 11543 +a11544 = 11544 +a11545 = 11545 +a11546 = 11546 +a11547 = 11547 +a11548 = 11548 +a11549 = 11549 +a11550 = 11550 +a11551 = 11551 +a11552 = 11552 +a11553 = 11553 +a11554 = 11554 +a11555 = 11555 +a11556 = 11556 +a11557 = 11557 +a11558 = 11558 +a11559 = 11559 +a11560 = 11560 +a11561 = 11561 +a11562 = 11562 +a11563 = 11563 +a11564 = 11564 +a11565 = 11565 +a11566 = 11566 +a11567 = 11567 +a11568 = 11568 +a11569 = 11569 +a11570 = 11570 +a11571 = 11571 +a11572 = 11572 +a11573 = 11573 +a11574 = 11574 +a11575 = 11575 +a11576 = 11576 +a11577 = 11577 +a11578 = 11578 +a11579 = 11579 +a11580 = 11580 +a11581 = 11581 +a11582 = 11582 +a11583 = 11583 +a11584 = 11584 +a11585 = 11585 +a11586 = 11586 +a11587 = 11587 +a11588 = 11588 +a11589 = 11589 +a11590 = 11590 +a11591 = 11591 +a11592 = 11592 +a11593 = 11593 +a11594 = 11594 +a11595 = 11595 +a11596 = 11596 +a11597 = 11597 +a11598 = 11598 +a11599 = 11599 +a11600 = 11600 +a11601 = 11601 +a11602 = 11602 +a11603 = 11603 +a11604 = 11604 +a11605 = 11605 +a11606 = 11606 +a11607 = 11607 +a11608 = 11608 +a11609 = 11609 +a11610 = 11610 +a11611 = 11611 +a11612 = 11612 +a11613 = 11613 +a11614 = 11614 +a11615 = 11615 +a11616 = 11616 +a11617 = 11617 +a11618 = 11618 +a11619 = 11619 +a11620 = 11620 +a11621 = 11621 +a11622 = 11622 +a11623 = 11623 +a11624 = 11624 +a11625 = 11625 +a11626 = 11626 +a11627 = 11627 +a11628 = 11628 +a11629 = 11629 +a11630 = 11630 +a11631 = 11631 +a11632 = 11632 +a11633 = 11633 +a11634 = 11634 +a11635 = 11635 +a11636 = 11636 +a11637 = 11637 +a11638 = 11638 +a11639 = 11639 +a11640 = 11640 +a11641 = 11641 +a11642 = 11642 +a11643 = 11643 +a11644 = 11644 +a11645 = 11645 +a11646 = 11646 +a11647 = 11647 +a11648 = 11648 +a11649 = 11649 +a11650 = 11650 +a11651 = 11651 +a11652 = 11652 +a11653 = 11653 +a11654 = 11654 +a11655 = 11655 +a11656 = 11656 +a11657 = 11657 +a11658 = 11658 +a11659 = 11659 +a11660 = 11660 +a11661 = 11661 +a11662 = 11662 +a11663 = 11663 +a11664 = 11664 +a11665 = 11665 +a11666 = 11666 +a11667 = 11667 +a11668 = 11668 +a11669 = 11669 +a11670 = 11670 +a11671 = 11671 +a11672 = 11672 +a11673 = 11673 +a11674 = 11674 +a11675 = 11675 +a11676 = 11676 +a11677 = 11677 +a11678 = 11678 +a11679 = 11679 +a11680 = 11680 +a11681 = 11681 +a11682 = 11682 +a11683 = 11683 +a11684 = 11684 +a11685 = 11685 +a11686 = 11686 +a11687 = 11687 +a11688 = 11688 +a11689 = 11689 +a11690 = 11690 +a11691 = 11691 +a11692 = 11692 +a11693 = 11693 +a11694 = 11694 +a11695 = 11695 +a11696 = 11696 +a11697 = 11697 +a11698 = 11698 +a11699 = 11699 +a11700 = 11700 +a11701 = 11701 +a11702 = 11702 +a11703 = 11703 +a11704 = 11704 +a11705 = 11705 +a11706 = 11706 +a11707 = 11707 +a11708 = 11708 +a11709 = 11709 +a11710 = 11710 +a11711 = 11711 +a11712 = 11712 +a11713 = 11713 +a11714 = 11714 +a11715 = 11715 +a11716 = 11716 +a11717 = 11717 +a11718 = 11718 +a11719 = 11719 +a11720 = 11720 +a11721 = 11721 +a11722 = 11722 +a11723 = 11723 +a11724 = 11724 +a11725 = 11725 +a11726 = 11726 +a11727 = 11727 +a11728 = 11728 +a11729 = 11729 +a11730 = 11730 +a11731 = 11731 +a11732 = 11732 +a11733 = 11733 +a11734 = 11734 +a11735 = 11735 +a11736 = 11736 +a11737 = 11737 +a11738 = 11738 +a11739 = 11739 +a11740 = 11740 +a11741 = 11741 +a11742 = 11742 +a11743 = 11743 +a11744 = 11744 +a11745 = 11745 +a11746 = 11746 +a11747 = 11747 +a11748 = 11748 +a11749 = 11749 +a11750 = 11750 +a11751 = 11751 +a11752 = 11752 +a11753 = 11753 +a11754 = 11754 +a11755 = 11755 +a11756 = 11756 +a11757 = 11757 +a11758 = 11758 +a11759 = 11759 +a11760 = 11760 +a11761 = 11761 +a11762 = 11762 +a11763 = 11763 +a11764 = 11764 +a11765 = 11765 +a11766 = 11766 +a11767 = 11767 +a11768 = 11768 +a11769 = 11769 +a11770 = 11770 +a11771 = 11771 +a11772 = 11772 +a11773 = 11773 +a11774 = 11774 +a11775 = 11775 +a11776 = 11776 +a11777 = 11777 +a11778 = 11778 +a11779 = 11779 +a11780 = 11780 +a11781 = 11781 +a11782 = 11782 +a11783 = 11783 +a11784 = 11784 +a11785 = 11785 +a11786 = 11786 +a11787 = 11787 +a11788 = 11788 +a11789 = 11789 +a11790 = 11790 +a11791 = 11791 +a11792 = 11792 +a11793 = 11793 +a11794 = 11794 +a11795 = 11795 +a11796 = 11796 +a11797 = 11797 +a11798 = 11798 +a11799 = 11799 +a11800 = 11800 +a11801 = 11801 +a11802 = 11802 +a11803 = 11803 +a11804 = 11804 +a11805 = 11805 +a11806 = 11806 +a11807 = 11807 +a11808 = 11808 +a11809 = 11809 +a11810 = 11810 +a11811 = 11811 +a11812 = 11812 +a11813 = 11813 +a11814 = 11814 +a11815 = 11815 +a11816 = 11816 +a11817 = 11817 +a11818 = 11818 +a11819 = 11819 +a11820 = 11820 +a11821 = 11821 +a11822 = 11822 +a11823 = 11823 +a11824 = 11824 +a11825 = 11825 +a11826 = 11826 +a11827 = 11827 +a11828 = 11828 +a11829 = 11829 +a11830 = 11830 +a11831 = 11831 +a11832 = 11832 +a11833 = 11833 +a11834 = 11834 +a11835 = 11835 +a11836 = 11836 +a11837 = 11837 +a11838 = 11838 +a11839 = 11839 +a11840 = 11840 +a11841 = 11841 +a11842 = 11842 +a11843 = 11843 +a11844 = 11844 +a11845 = 11845 +a11846 = 11846 +a11847 = 11847 +a11848 = 11848 +a11849 = 11849 +a11850 = 11850 +a11851 = 11851 +a11852 = 11852 +a11853 = 11853 +a11854 = 11854 +a11855 = 11855 +a11856 = 11856 +a11857 = 11857 +a11858 = 11858 +a11859 = 11859 +a11860 = 11860 +a11861 = 11861 +a11862 = 11862 +a11863 = 11863 +a11864 = 11864 +a11865 = 11865 +a11866 = 11866 +a11867 = 11867 +a11868 = 11868 +a11869 = 11869 +a11870 = 11870 +a11871 = 11871 +a11872 = 11872 +a11873 = 11873 +a11874 = 11874 +a11875 = 11875 +a11876 = 11876 +a11877 = 11877 +a11878 = 11878 +a11879 = 11879 +a11880 = 11880 +a11881 = 11881 +a11882 = 11882 +a11883 = 11883 +a11884 = 11884 +a11885 = 11885 +a11886 = 11886 +a11887 = 11887 +a11888 = 11888 +a11889 = 11889 +a11890 = 11890 +a11891 = 11891 +a11892 = 11892 +a11893 = 11893 +a11894 = 11894 +a11895 = 11895 +a11896 = 11896 +a11897 = 11897 +a11898 = 11898 +a11899 = 11899 +a11900 = 11900 +a11901 = 11901 +a11902 = 11902 +a11903 = 11903 +a11904 = 11904 +a11905 = 11905 +a11906 = 11906 +a11907 = 11907 +a11908 = 11908 +a11909 = 11909 +a11910 = 11910 +a11911 = 11911 +a11912 = 11912 +a11913 = 11913 +a11914 = 11914 +a11915 = 11915 +a11916 = 11916 +a11917 = 11917 +a11918 = 11918 +a11919 = 11919 +a11920 = 11920 +a11921 = 11921 +a11922 = 11922 +a11923 = 11923 +a11924 = 11924 +a11925 = 11925 +a11926 = 11926 +a11927 = 11927 +a11928 = 11928 +a11929 = 11929 +a11930 = 11930 +a11931 = 11931 +a11932 = 11932 +a11933 = 11933 +a11934 = 11934 +a11935 = 11935 +a11936 = 11936 +a11937 = 11937 +a11938 = 11938 +a11939 = 11939 +a11940 = 11940 +a11941 = 11941 +a11942 = 11942 +a11943 = 11943 +a11944 = 11944 +a11945 = 11945 +a11946 = 11946 +a11947 = 11947 +a11948 = 11948 +a11949 = 11949 +a11950 = 11950 +a11951 = 11951 +a11952 = 11952 +a11953 = 11953 +a11954 = 11954 +a11955 = 11955 +a11956 = 11956 +a11957 = 11957 +a11958 = 11958 +a11959 = 11959 +a11960 = 11960 +a11961 = 11961 +a11962 = 11962 +a11963 = 11963 +a11964 = 11964 +a11965 = 11965 +a11966 = 11966 +a11967 = 11967 +a11968 = 11968 +a11969 = 11969 +a11970 = 11970 +a11971 = 11971 +a11972 = 11972 +a11973 = 11973 +a11974 = 11974 +a11975 = 11975 +a11976 = 11976 +a11977 = 11977 +a11978 = 11978 +a11979 = 11979 +a11980 = 11980 +a11981 = 11981 +a11982 = 11982 +a11983 = 11983 +a11984 = 11984 +a11985 = 11985 +a11986 = 11986 +a11987 = 11987 +a11988 = 11988 +a11989 = 11989 +a11990 = 11990 +a11991 = 11991 +a11992 = 11992 +a11993 = 11993 +a11994 = 11994 +a11995 = 11995 +a11996 = 11996 +a11997 = 11997 +a11998 = 11998 +a11999 = 11999 +a12000 = 12000 +a12001 = 12001 +a12002 = 12002 +a12003 = 12003 +a12004 = 12004 +a12005 = 12005 +a12006 = 12006 +a12007 = 12007 +a12008 = 12008 +a12009 = 12009 +a12010 = 12010 +a12011 = 12011 +a12012 = 12012 +a12013 = 12013 +a12014 = 12014 +a12015 = 12015 +a12016 = 12016 +a12017 = 12017 +a12018 = 12018 +a12019 = 12019 +a12020 = 12020 +a12021 = 12021 +a12022 = 12022 +a12023 = 12023 +a12024 = 12024 +a12025 = 12025 +a12026 = 12026 +a12027 = 12027 +a12028 = 12028 +a12029 = 12029 +a12030 = 12030 +a12031 = 12031 +a12032 = 12032 +a12033 = 12033 +a12034 = 12034 +a12035 = 12035 +a12036 = 12036 +a12037 = 12037 +a12038 = 12038 +a12039 = 12039 +a12040 = 12040 +a12041 = 12041 +a12042 = 12042 +a12043 = 12043 +a12044 = 12044 +a12045 = 12045 +a12046 = 12046 +a12047 = 12047 +a12048 = 12048 +a12049 = 12049 +a12050 = 12050 +a12051 = 12051 +a12052 = 12052 +a12053 = 12053 +a12054 = 12054 +a12055 = 12055 +a12056 = 12056 +a12057 = 12057 +a12058 = 12058 +a12059 = 12059 +a12060 = 12060 +a12061 = 12061 +a12062 = 12062 +a12063 = 12063 +a12064 = 12064 +a12065 = 12065 +a12066 = 12066 +a12067 = 12067 +a12068 = 12068 +a12069 = 12069 +a12070 = 12070 +a12071 = 12071 +a12072 = 12072 +a12073 = 12073 +a12074 = 12074 +a12075 = 12075 +a12076 = 12076 +a12077 = 12077 +a12078 = 12078 +a12079 = 12079 +a12080 = 12080 +a12081 = 12081 +a12082 = 12082 +a12083 = 12083 +a12084 = 12084 +a12085 = 12085 +a12086 = 12086 +a12087 = 12087 +a12088 = 12088 +a12089 = 12089 +a12090 = 12090 +a12091 = 12091 +a12092 = 12092 +a12093 = 12093 +a12094 = 12094 +a12095 = 12095 +a12096 = 12096 +a12097 = 12097 +a12098 = 12098 +a12099 = 12099 +a12100 = 12100 +a12101 = 12101 +a12102 = 12102 +a12103 = 12103 +a12104 = 12104 +a12105 = 12105 +a12106 = 12106 +a12107 = 12107 +a12108 = 12108 +a12109 = 12109 +a12110 = 12110 +a12111 = 12111 +a12112 = 12112 +a12113 = 12113 +a12114 = 12114 +a12115 = 12115 +a12116 = 12116 +a12117 = 12117 +a12118 = 12118 +a12119 = 12119 +a12120 = 12120 +a12121 = 12121 +a12122 = 12122 +a12123 = 12123 +a12124 = 12124 +a12125 = 12125 +a12126 = 12126 +a12127 = 12127 +a12128 = 12128 +a12129 = 12129 +a12130 = 12130 +a12131 = 12131 +a12132 = 12132 +a12133 = 12133 +a12134 = 12134 +a12135 = 12135 +a12136 = 12136 +a12137 = 12137 +a12138 = 12138 +a12139 = 12139 +a12140 = 12140 +a12141 = 12141 +a12142 = 12142 +a12143 = 12143 +a12144 = 12144 +a12145 = 12145 +a12146 = 12146 +a12147 = 12147 +a12148 = 12148 +a12149 = 12149 +a12150 = 12150 +a12151 = 12151 +a12152 = 12152 +a12153 = 12153 +a12154 = 12154 +a12155 = 12155 +a12156 = 12156 +a12157 = 12157 +a12158 = 12158 +a12159 = 12159 +a12160 = 12160 +a12161 = 12161 +a12162 = 12162 +a12163 = 12163 +a12164 = 12164 +a12165 = 12165 +a12166 = 12166 +a12167 = 12167 +a12168 = 12168 +a12169 = 12169 +a12170 = 12170 +a12171 = 12171 +a12172 = 12172 +a12173 = 12173 +a12174 = 12174 +a12175 = 12175 +a12176 = 12176 +a12177 = 12177 +a12178 = 12178 +a12179 = 12179 +a12180 = 12180 +a12181 = 12181 +a12182 = 12182 +a12183 = 12183 +a12184 = 12184 +a12185 = 12185 +a12186 = 12186 +a12187 = 12187 +a12188 = 12188 +a12189 = 12189 +a12190 = 12190 +a12191 = 12191 +a12192 = 12192 +a12193 = 12193 +a12194 = 12194 +a12195 = 12195 +a12196 = 12196 +a12197 = 12197 +a12198 = 12198 +a12199 = 12199 +a12200 = 12200 +a12201 = 12201 +a12202 = 12202 +a12203 = 12203 +a12204 = 12204 +a12205 = 12205 +a12206 = 12206 +a12207 = 12207 +a12208 = 12208 +a12209 = 12209 +a12210 = 12210 +a12211 = 12211 +a12212 = 12212 +a12213 = 12213 +a12214 = 12214 +a12215 = 12215 +a12216 = 12216 +a12217 = 12217 +a12218 = 12218 +a12219 = 12219 +a12220 = 12220 +a12221 = 12221 +a12222 = 12222 +a12223 = 12223 +a12224 = 12224 +a12225 = 12225 +a12226 = 12226 +a12227 = 12227 +a12228 = 12228 +a12229 = 12229 +a12230 = 12230 +a12231 = 12231 +a12232 = 12232 +a12233 = 12233 +a12234 = 12234 +a12235 = 12235 +a12236 = 12236 +a12237 = 12237 +a12238 = 12238 +a12239 = 12239 +a12240 = 12240 +a12241 = 12241 +a12242 = 12242 +a12243 = 12243 +a12244 = 12244 +a12245 = 12245 +a12246 = 12246 +a12247 = 12247 +a12248 = 12248 +a12249 = 12249 +a12250 = 12250 +a12251 = 12251 +a12252 = 12252 +a12253 = 12253 +a12254 = 12254 +a12255 = 12255 +a12256 = 12256 +a12257 = 12257 +a12258 = 12258 +a12259 = 12259 +a12260 = 12260 +a12261 = 12261 +a12262 = 12262 +a12263 = 12263 +a12264 = 12264 +a12265 = 12265 +a12266 = 12266 +a12267 = 12267 +a12268 = 12268 +a12269 = 12269 +a12270 = 12270 +a12271 = 12271 +a12272 = 12272 +a12273 = 12273 +a12274 = 12274 +a12275 = 12275 +a12276 = 12276 +a12277 = 12277 +a12278 = 12278 +a12279 = 12279 +a12280 = 12280 +a12281 = 12281 +a12282 = 12282 +a12283 = 12283 +a12284 = 12284 +a12285 = 12285 +a12286 = 12286 +a12287 = 12287 +a12288 = 12288 +a12289 = 12289 +a12290 = 12290 +a12291 = 12291 +a12292 = 12292 +a12293 = 12293 +a12294 = 12294 +a12295 = 12295 +a12296 = 12296 +a12297 = 12297 +a12298 = 12298 +a12299 = 12299 +a12300 = 12300 +a12301 = 12301 +a12302 = 12302 +a12303 = 12303 +a12304 = 12304 +a12305 = 12305 +a12306 = 12306 +a12307 = 12307 +a12308 = 12308 +a12309 = 12309 +a12310 = 12310 +a12311 = 12311 +a12312 = 12312 +a12313 = 12313 +a12314 = 12314 +a12315 = 12315 +a12316 = 12316 +a12317 = 12317 +a12318 = 12318 +a12319 = 12319 +a12320 = 12320 +a12321 = 12321 +a12322 = 12322 +a12323 = 12323 +a12324 = 12324 +a12325 = 12325 +a12326 = 12326 +a12327 = 12327 +a12328 = 12328 +a12329 = 12329 +a12330 = 12330 +a12331 = 12331 +a12332 = 12332 +a12333 = 12333 +a12334 = 12334 +a12335 = 12335 +a12336 = 12336 +a12337 = 12337 +a12338 = 12338 +a12339 = 12339 +a12340 = 12340 +a12341 = 12341 +a12342 = 12342 +a12343 = 12343 +a12344 = 12344 +a12345 = 12345 +a12346 = 12346 +a12347 = 12347 +a12348 = 12348 +a12349 = 12349 +a12350 = 12350 +a12351 = 12351 +a12352 = 12352 +a12353 = 12353 +a12354 = 12354 +a12355 = 12355 +a12356 = 12356 +a12357 = 12357 +a12358 = 12358 +a12359 = 12359 +a12360 = 12360 +a12361 = 12361 +a12362 = 12362 +a12363 = 12363 +a12364 = 12364 +a12365 = 12365 +a12366 = 12366 +a12367 = 12367 +a12368 = 12368 +a12369 = 12369 +a12370 = 12370 +a12371 = 12371 +a12372 = 12372 +a12373 = 12373 +a12374 = 12374 +a12375 = 12375 +a12376 = 12376 +a12377 = 12377 +a12378 = 12378 +a12379 = 12379 +a12380 = 12380 +a12381 = 12381 +a12382 = 12382 +a12383 = 12383 +a12384 = 12384 +a12385 = 12385 +a12386 = 12386 +a12387 = 12387 +a12388 = 12388 +a12389 = 12389 +a12390 = 12390 +a12391 = 12391 +a12392 = 12392 +a12393 = 12393 +a12394 = 12394 +a12395 = 12395 +a12396 = 12396 +a12397 = 12397 +a12398 = 12398 +a12399 = 12399 +a12400 = 12400 +a12401 = 12401 +a12402 = 12402 +a12403 = 12403 +a12404 = 12404 +a12405 = 12405 +a12406 = 12406 +a12407 = 12407 +a12408 = 12408 +a12409 = 12409 +a12410 = 12410 +a12411 = 12411 +a12412 = 12412 +a12413 = 12413 +a12414 = 12414 +a12415 = 12415 +a12416 = 12416 +a12417 = 12417 +a12418 = 12418 +a12419 = 12419 +a12420 = 12420 +a12421 = 12421 +a12422 = 12422 +a12423 = 12423 +a12424 = 12424 +a12425 = 12425 +a12426 = 12426 +a12427 = 12427 +a12428 = 12428 +a12429 = 12429 +a12430 = 12430 +a12431 = 12431 +a12432 = 12432 +a12433 = 12433 +a12434 = 12434 +a12435 = 12435 +a12436 = 12436 +a12437 = 12437 +a12438 = 12438 +a12439 = 12439 +a12440 = 12440 +a12441 = 12441 +a12442 = 12442 +a12443 = 12443 +a12444 = 12444 +a12445 = 12445 +a12446 = 12446 +a12447 = 12447 +a12448 = 12448 +a12449 = 12449 +a12450 = 12450 +a12451 = 12451 +a12452 = 12452 +a12453 = 12453 +a12454 = 12454 +a12455 = 12455 +a12456 = 12456 +a12457 = 12457 +a12458 = 12458 +a12459 = 12459 +a12460 = 12460 +a12461 = 12461 +a12462 = 12462 +a12463 = 12463 +a12464 = 12464 +a12465 = 12465 +a12466 = 12466 +a12467 = 12467 +a12468 = 12468 +a12469 = 12469 +a12470 = 12470 +a12471 = 12471 +a12472 = 12472 +a12473 = 12473 +a12474 = 12474 +a12475 = 12475 +a12476 = 12476 +a12477 = 12477 +a12478 = 12478 +a12479 = 12479 +a12480 = 12480 +a12481 = 12481 +a12482 = 12482 +a12483 = 12483 +a12484 = 12484 +a12485 = 12485 +a12486 = 12486 +a12487 = 12487 +a12488 = 12488 +a12489 = 12489 +a12490 = 12490 +a12491 = 12491 +a12492 = 12492 +a12493 = 12493 +a12494 = 12494 +a12495 = 12495 +a12496 = 12496 +a12497 = 12497 +a12498 = 12498 +a12499 = 12499 +a12500 = 12500 +a12501 = 12501 +a12502 = 12502 +a12503 = 12503 +a12504 = 12504 +a12505 = 12505 +a12506 = 12506 +a12507 = 12507 +a12508 = 12508 +a12509 = 12509 +a12510 = 12510 +a12511 = 12511 +a12512 = 12512 +a12513 = 12513 +a12514 = 12514 +a12515 = 12515 +a12516 = 12516 +a12517 = 12517 +a12518 = 12518 +a12519 = 12519 +a12520 = 12520 +a12521 = 12521 +a12522 = 12522 +a12523 = 12523 +a12524 = 12524 +a12525 = 12525 +a12526 = 12526 +a12527 = 12527 +a12528 = 12528 +a12529 = 12529 +a12530 = 12530 +a12531 = 12531 +a12532 = 12532 +a12533 = 12533 +a12534 = 12534 +a12535 = 12535 +a12536 = 12536 +a12537 = 12537 +a12538 = 12538 +a12539 = 12539 +a12540 = 12540 +a12541 = 12541 +a12542 = 12542 +a12543 = 12543 +a12544 = 12544 +a12545 = 12545 +a12546 = 12546 +a12547 = 12547 +a12548 = 12548 +a12549 = 12549 +a12550 = 12550 +a12551 = 12551 +a12552 = 12552 +a12553 = 12553 +a12554 = 12554 +a12555 = 12555 +a12556 = 12556 +a12557 = 12557 +a12558 = 12558 +a12559 = 12559 +a12560 = 12560 +a12561 = 12561 +a12562 = 12562 +a12563 = 12563 +a12564 = 12564 +a12565 = 12565 +a12566 = 12566 +a12567 = 12567 +a12568 = 12568 +a12569 = 12569 +a12570 = 12570 +a12571 = 12571 +a12572 = 12572 +a12573 = 12573 +a12574 = 12574 +a12575 = 12575 +a12576 = 12576 +a12577 = 12577 +a12578 = 12578 +a12579 = 12579 +a12580 = 12580 +a12581 = 12581 +a12582 = 12582 +a12583 = 12583 +a12584 = 12584 +a12585 = 12585 +a12586 = 12586 +a12587 = 12587 +a12588 = 12588 +a12589 = 12589 +a12590 = 12590 +a12591 = 12591 +a12592 = 12592 +a12593 = 12593 +a12594 = 12594 +a12595 = 12595 +a12596 = 12596 +a12597 = 12597 +a12598 = 12598 +a12599 = 12599 +a12600 = 12600 +a12601 = 12601 +a12602 = 12602 +a12603 = 12603 +a12604 = 12604 +a12605 = 12605 +a12606 = 12606 +a12607 = 12607 +a12608 = 12608 +a12609 = 12609 +a12610 = 12610 +a12611 = 12611 +a12612 = 12612 +a12613 = 12613 +a12614 = 12614 +a12615 = 12615 +a12616 = 12616 +a12617 = 12617 +a12618 = 12618 +a12619 = 12619 +a12620 = 12620 +a12621 = 12621 +a12622 = 12622 +a12623 = 12623 +a12624 = 12624 +a12625 = 12625 +a12626 = 12626 +a12627 = 12627 +a12628 = 12628 +a12629 = 12629 +a12630 = 12630 +a12631 = 12631 +a12632 = 12632 +a12633 = 12633 +a12634 = 12634 +a12635 = 12635 +a12636 = 12636 +a12637 = 12637 +a12638 = 12638 +a12639 = 12639 +a12640 = 12640 +a12641 = 12641 +a12642 = 12642 +a12643 = 12643 +a12644 = 12644 +a12645 = 12645 +a12646 = 12646 +a12647 = 12647 +a12648 = 12648 +a12649 = 12649 +a12650 = 12650 +a12651 = 12651 +a12652 = 12652 +a12653 = 12653 +a12654 = 12654 +a12655 = 12655 +a12656 = 12656 +a12657 = 12657 +a12658 = 12658 +a12659 = 12659 +a12660 = 12660 +a12661 = 12661 +a12662 = 12662 +a12663 = 12663 +a12664 = 12664 +a12665 = 12665 +a12666 = 12666 +a12667 = 12667 +a12668 = 12668 +a12669 = 12669 +a12670 = 12670 +a12671 = 12671 +a12672 = 12672 +a12673 = 12673 +a12674 = 12674 +a12675 = 12675 +a12676 = 12676 +a12677 = 12677 +a12678 = 12678 +a12679 = 12679 +a12680 = 12680 +a12681 = 12681 +a12682 = 12682 +a12683 = 12683 +a12684 = 12684 +a12685 = 12685 +a12686 = 12686 +a12687 = 12687 +a12688 = 12688 +a12689 = 12689 +a12690 = 12690 +a12691 = 12691 +a12692 = 12692 +a12693 = 12693 +a12694 = 12694 +a12695 = 12695 +a12696 = 12696 +a12697 = 12697 +a12698 = 12698 +a12699 = 12699 +a12700 = 12700 +a12701 = 12701 +a12702 = 12702 +a12703 = 12703 +a12704 = 12704 +a12705 = 12705 +a12706 = 12706 +a12707 = 12707 +a12708 = 12708 +a12709 = 12709 +a12710 = 12710 +a12711 = 12711 +a12712 = 12712 +a12713 = 12713 +a12714 = 12714 +a12715 = 12715 +a12716 = 12716 +a12717 = 12717 +a12718 = 12718 +a12719 = 12719 +a12720 = 12720 +a12721 = 12721 +a12722 = 12722 +a12723 = 12723 +a12724 = 12724 +a12725 = 12725 +a12726 = 12726 +a12727 = 12727 +a12728 = 12728 +a12729 = 12729 +a12730 = 12730 +a12731 = 12731 +a12732 = 12732 +a12733 = 12733 +a12734 = 12734 +a12735 = 12735 +a12736 = 12736 +a12737 = 12737 +a12738 = 12738 +a12739 = 12739 +a12740 = 12740 +a12741 = 12741 +a12742 = 12742 +a12743 = 12743 +a12744 = 12744 +a12745 = 12745 +a12746 = 12746 +a12747 = 12747 +a12748 = 12748 +a12749 = 12749 +a12750 = 12750 +a12751 = 12751 +a12752 = 12752 +a12753 = 12753 +a12754 = 12754 +a12755 = 12755 +a12756 = 12756 +a12757 = 12757 +a12758 = 12758 +a12759 = 12759 +a12760 = 12760 +a12761 = 12761 +a12762 = 12762 +a12763 = 12763 +a12764 = 12764 +a12765 = 12765 +a12766 = 12766 +a12767 = 12767 +a12768 = 12768 +a12769 = 12769 +a12770 = 12770 +a12771 = 12771 +a12772 = 12772 +a12773 = 12773 +a12774 = 12774 +a12775 = 12775 +a12776 = 12776 +a12777 = 12777 +a12778 = 12778 +a12779 = 12779 +a12780 = 12780 +a12781 = 12781 +a12782 = 12782 +a12783 = 12783 +a12784 = 12784 +a12785 = 12785 +a12786 = 12786 +a12787 = 12787 +a12788 = 12788 +a12789 = 12789 +a12790 = 12790 +a12791 = 12791 +a12792 = 12792 +a12793 = 12793 +a12794 = 12794 +a12795 = 12795 +a12796 = 12796 +a12797 = 12797 +a12798 = 12798 +a12799 = 12799 +a12800 = 12800 +a12801 = 12801 +a12802 = 12802 +a12803 = 12803 +a12804 = 12804 +a12805 = 12805 +a12806 = 12806 +a12807 = 12807 +a12808 = 12808 +a12809 = 12809 +a12810 = 12810 +a12811 = 12811 +a12812 = 12812 +a12813 = 12813 +a12814 = 12814 +a12815 = 12815 +a12816 = 12816 +a12817 = 12817 +a12818 = 12818 +a12819 = 12819 +a12820 = 12820 +a12821 = 12821 +a12822 = 12822 +a12823 = 12823 +a12824 = 12824 +a12825 = 12825 +a12826 = 12826 +a12827 = 12827 +a12828 = 12828 +a12829 = 12829 +a12830 = 12830 +a12831 = 12831 +a12832 = 12832 +a12833 = 12833 +a12834 = 12834 +a12835 = 12835 +a12836 = 12836 +a12837 = 12837 +a12838 = 12838 +a12839 = 12839 +a12840 = 12840 +a12841 = 12841 +a12842 = 12842 +a12843 = 12843 +a12844 = 12844 +a12845 = 12845 +a12846 = 12846 +a12847 = 12847 +a12848 = 12848 +a12849 = 12849 +a12850 = 12850 +a12851 = 12851 +a12852 = 12852 +a12853 = 12853 +a12854 = 12854 +a12855 = 12855 +a12856 = 12856 +a12857 = 12857 +a12858 = 12858 +a12859 = 12859 +a12860 = 12860 +a12861 = 12861 +a12862 = 12862 +a12863 = 12863 +a12864 = 12864 +a12865 = 12865 +a12866 = 12866 +a12867 = 12867 +a12868 = 12868 +a12869 = 12869 +a12870 = 12870 +a12871 = 12871 +a12872 = 12872 +a12873 = 12873 +a12874 = 12874 +a12875 = 12875 +a12876 = 12876 +a12877 = 12877 +a12878 = 12878 +a12879 = 12879 +a12880 = 12880 +a12881 = 12881 +a12882 = 12882 +a12883 = 12883 +a12884 = 12884 +a12885 = 12885 +a12886 = 12886 +a12887 = 12887 +a12888 = 12888 +a12889 = 12889 +a12890 = 12890 +a12891 = 12891 +a12892 = 12892 +a12893 = 12893 +a12894 = 12894 +a12895 = 12895 +a12896 = 12896 +a12897 = 12897 +a12898 = 12898 +a12899 = 12899 +a12900 = 12900 +a12901 = 12901 +a12902 = 12902 +a12903 = 12903 +a12904 = 12904 +a12905 = 12905 +a12906 = 12906 +a12907 = 12907 +a12908 = 12908 +a12909 = 12909 +a12910 = 12910 +a12911 = 12911 +a12912 = 12912 +a12913 = 12913 +a12914 = 12914 +a12915 = 12915 +a12916 = 12916 +a12917 = 12917 +a12918 = 12918 +a12919 = 12919 +a12920 = 12920 +a12921 = 12921 +a12922 = 12922 +a12923 = 12923 +a12924 = 12924 +a12925 = 12925 +a12926 = 12926 +a12927 = 12927 +a12928 = 12928 +a12929 = 12929 +a12930 = 12930 +a12931 = 12931 +a12932 = 12932 +a12933 = 12933 +a12934 = 12934 +a12935 = 12935 +a12936 = 12936 +a12937 = 12937 +a12938 = 12938 +a12939 = 12939 +a12940 = 12940 +a12941 = 12941 +a12942 = 12942 +a12943 = 12943 +a12944 = 12944 +a12945 = 12945 +a12946 = 12946 +a12947 = 12947 +a12948 = 12948 +a12949 = 12949 +a12950 = 12950 +a12951 = 12951 +a12952 = 12952 +a12953 = 12953 +a12954 = 12954 +a12955 = 12955 +a12956 = 12956 +a12957 = 12957 +a12958 = 12958 +a12959 = 12959 +a12960 = 12960 +a12961 = 12961 +a12962 = 12962 +a12963 = 12963 +a12964 = 12964 +a12965 = 12965 +a12966 = 12966 +a12967 = 12967 +a12968 = 12968 +a12969 = 12969 +a12970 = 12970 +a12971 = 12971 +a12972 = 12972 +a12973 = 12973 +a12974 = 12974 +a12975 = 12975 +a12976 = 12976 +a12977 = 12977 +a12978 = 12978 +a12979 = 12979 +a12980 = 12980 +a12981 = 12981 +a12982 = 12982 +a12983 = 12983 +a12984 = 12984 +a12985 = 12985 +a12986 = 12986 +a12987 = 12987 +a12988 = 12988 +a12989 = 12989 +a12990 = 12990 +a12991 = 12991 +a12992 = 12992 +a12993 = 12993 +a12994 = 12994 +a12995 = 12995 +a12996 = 12996 +a12997 = 12997 +a12998 = 12998 +a12999 = 12999 +a13000 = 13000 +a13001 = 13001 +a13002 = 13002 +a13003 = 13003 +a13004 = 13004 +a13005 = 13005 +a13006 = 13006 +a13007 = 13007 +a13008 = 13008 +a13009 = 13009 +a13010 = 13010 +a13011 = 13011 +a13012 = 13012 +a13013 = 13013 +a13014 = 13014 +a13015 = 13015 +a13016 = 13016 +a13017 = 13017 +a13018 = 13018 +a13019 = 13019 +a13020 = 13020 +a13021 = 13021 +a13022 = 13022 +a13023 = 13023 +a13024 = 13024 +a13025 = 13025 +a13026 = 13026 +a13027 = 13027 +a13028 = 13028 +a13029 = 13029 +a13030 = 13030 +a13031 = 13031 +a13032 = 13032 +a13033 = 13033 +a13034 = 13034 +a13035 = 13035 +a13036 = 13036 +a13037 = 13037 +a13038 = 13038 +a13039 = 13039 +a13040 = 13040 +a13041 = 13041 +a13042 = 13042 +a13043 = 13043 +a13044 = 13044 +a13045 = 13045 +a13046 = 13046 +a13047 = 13047 +a13048 = 13048 +a13049 = 13049 +a13050 = 13050 +a13051 = 13051 +a13052 = 13052 +a13053 = 13053 +a13054 = 13054 +a13055 = 13055 +a13056 = 13056 +a13057 = 13057 +a13058 = 13058 +a13059 = 13059 +a13060 = 13060 +a13061 = 13061 +a13062 = 13062 +a13063 = 13063 +a13064 = 13064 +a13065 = 13065 +a13066 = 13066 +a13067 = 13067 +a13068 = 13068 +a13069 = 13069 +a13070 = 13070 +a13071 = 13071 +a13072 = 13072 +a13073 = 13073 +a13074 = 13074 +a13075 = 13075 +a13076 = 13076 +a13077 = 13077 +a13078 = 13078 +a13079 = 13079 +a13080 = 13080 +a13081 = 13081 +a13082 = 13082 +a13083 = 13083 +a13084 = 13084 +a13085 = 13085 +a13086 = 13086 +a13087 = 13087 +a13088 = 13088 +a13089 = 13089 +a13090 = 13090 +a13091 = 13091 +a13092 = 13092 +a13093 = 13093 +a13094 = 13094 +a13095 = 13095 +a13096 = 13096 +a13097 = 13097 +a13098 = 13098 +a13099 = 13099 +a13100 = 13100 +a13101 = 13101 +a13102 = 13102 +a13103 = 13103 +a13104 = 13104 +a13105 = 13105 +a13106 = 13106 +a13107 = 13107 +a13108 = 13108 +a13109 = 13109 +a13110 = 13110 +a13111 = 13111 +a13112 = 13112 +a13113 = 13113 +a13114 = 13114 +a13115 = 13115 +a13116 = 13116 +a13117 = 13117 +a13118 = 13118 +a13119 = 13119 +a13120 = 13120 +a13121 = 13121 +a13122 = 13122 +a13123 = 13123 +a13124 = 13124 +a13125 = 13125 +a13126 = 13126 +a13127 = 13127 +a13128 = 13128 +a13129 = 13129 +a13130 = 13130 +a13131 = 13131 +a13132 = 13132 +a13133 = 13133 +a13134 = 13134 +a13135 = 13135 +a13136 = 13136 +a13137 = 13137 +a13138 = 13138 +a13139 = 13139 +a13140 = 13140 +a13141 = 13141 +a13142 = 13142 +a13143 = 13143 +a13144 = 13144 +a13145 = 13145 +a13146 = 13146 +a13147 = 13147 +a13148 = 13148 +a13149 = 13149 +a13150 = 13150 +a13151 = 13151 +a13152 = 13152 +a13153 = 13153 +a13154 = 13154 +a13155 = 13155 +a13156 = 13156 +a13157 = 13157 +a13158 = 13158 +a13159 = 13159 +a13160 = 13160 +a13161 = 13161 +a13162 = 13162 +a13163 = 13163 +a13164 = 13164 +a13165 = 13165 +a13166 = 13166 +a13167 = 13167 +a13168 = 13168 +a13169 = 13169 +a13170 = 13170 +a13171 = 13171 +a13172 = 13172 +a13173 = 13173 +a13174 = 13174 +a13175 = 13175 +a13176 = 13176 +a13177 = 13177 +a13178 = 13178 +a13179 = 13179 +a13180 = 13180 +a13181 = 13181 +a13182 = 13182 +a13183 = 13183 +a13184 = 13184 +a13185 = 13185 +a13186 = 13186 +a13187 = 13187 +a13188 = 13188 +a13189 = 13189 +a13190 = 13190 +a13191 = 13191 +a13192 = 13192 +a13193 = 13193 +a13194 = 13194 +a13195 = 13195 +a13196 = 13196 +a13197 = 13197 +a13198 = 13198 +a13199 = 13199 +a13200 = 13200 +a13201 = 13201 +a13202 = 13202 +a13203 = 13203 +a13204 = 13204 +a13205 = 13205 +a13206 = 13206 +a13207 = 13207 +a13208 = 13208 +a13209 = 13209 +a13210 = 13210 +a13211 = 13211 +a13212 = 13212 +a13213 = 13213 +a13214 = 13214 +a13215 = 13215 +a13216 = 13216 +a13217 = 13217 +a13218 = 13218 +a13219 = 13219 +a13220 = 13220 +a13221 = 13221 +a13222 = 13222 +a13223 = 13223 +a13224 = 13224 +a13225 = 13225 +a13226 = 13226 +a13227 = 13227 +a13228 = 13228 +a13229 = 13229 +a13230 = 13230 +a13231 = 13231 +a13232 = 13232 +a13233 = 13233 +a13234 = 13234 +a13235 = 13235 +a13236 = 13236 +a13237 = 13237 +a13238 = 13238 +a13239 = 13239 +a13240 = 13240 +a13241 = 13241 +a13242 = 13242 +a13243 = 13243 +a13244 = 13244 +a13245 = 13245 +a13246 = 13246 +a13247 = 13247 +a13248 = 13248 +a13249 = 13249 +a13250 = 13250 +a13251 = 13251 +a13252 = 13252 +a13253 = 13253 +a13254 = 13254 +a13255 = 13255 +a13256 = 13256 +a13257 = 13257 +a13258 = 13258 +a13259 = 13259 +a13260 = 13260 +a13261 = 13261 +a13262 = 13262 +a13263 = 13263 +a13264 = 13264 +a13265 = 13265 +a13266 = 13266 +a13267 = 13267 +a13268 = 13268 +a13269 = 13269 +a13270 = 13270 +a13271 = 13271 +a13272 = 13272 +a13273 = 13273 +a13274 = 13274 +a13275 = 13275 +a13276 = 13276 +a13277 = 13277 +a13278 = 13278 +a13279 = 13279 +a13280 = 13280 +a13281 = 13281 +a13282 = 13282 +a13283 = 13283 +a13284 = 13284 +a13285 = 13285 +a13286 = 13286 +a13287 = 13287 +a13288 = 13288 +a13289 = 13289 +a13290 = 13290 +a13291 = 13291 +a13292 = 13292 +a13293 = 13293 +a13294 = 13294 +a13295 = 13295 +a13296 = 13296 +a13297 = 13297 +a13298 = 13298 +a13299 = 13299 +a13300 = 13300 +a13301 = 13301 +a13302 = 13302 +a13303 = 13303 +a13304 = 13304 +a13305 = 13305 +a13306 = 13306 +a13307 = 13307 +a13308 = 13308 +a13309 = 13309 +a13310 = 13310 +a13311 = 13311 +a13312 = 13312 +a13313 = 13313 +a13314 = 13314 +a13315 = 13315 +a13316 = 13316 +a13317 = 13317 +a13318 = 13318 +a13319 = 13319 +a13320 = 13320 +a13321 = 13321 +a13322 = 13322 +a13323 = 13323 +a13324 = 13324 +a13325 = 13325 +a13326 = 13326 +a13327 = 13327 +a13328 = 13328 +a13329 = 13329 +a13330 = 13330 +a13331 = 13331 +a13332 = 13332 +a13333 = 13333 +a13334 = 13334 +a13335 = 13335 +a13336 = 13336 +a13337 = 13337 +a13338 = 13338 +a13339 = 13339 +a13340 = 13340 +a13341 = 13341 +a13342 = 13342 +a13343 = 13343 +a13344 = 13344 +a13345 = 13345 +a13346 = 13346 +a13347 = 13347 +a13348 = 13348 +a13349 = 13349 +a13350 = 13350 +a13351 = 13351 +a13352 = 13352 +a13353 = 13353 +a13354 = 13354 +a13355 = 13355 +a13356 = 13356 +a13357 = 13357 +a13358 = 13358 +a13359 = 13359 +a13360 = 13360 +a13361 = 13361 +a13362 = 13362 +a13363 = 13363 +a13364 = 13364 +a13365 = 13365 +a13366 = 13366 +a13367 = 13367 +a13368 = 13368 +a13369 = 13369 +a13370 = 13370 +a13371 = 13371 +a13372 = 13372 +a13373 = 13373 +a13374 = 13374 +a13375 = 13375 +a13376 = 13376 +a13377 = 13377 +a13378 = 13378 +a13379 = 13379 +a13380 = 13380 +a13381 = 13381 +a13382 = 13382 +a13383 = 13383 +a13384 = 13384 +a13385 = 13385 +a13386 = 13386 +a13387 = 13387 +a13388 = 13388 +a13389 = 13389 +a13390 = 13390 +a13391 = 13391 +a13392 = 13392 +a13393 = 13393 +a13394 = 13394 +a13395 = 13395 +a13396 = 13396 +a13397 = 13397 +a13398 = 13398 +a13399 = 13399 +a13400 = 13400 +a13401 = 13401 +a13402 = 13402 +a13403 = 13403 +a13404 = 13404 +a13405 = 13405 +a13406 = 13406 +a13407 = 13407 +a13408 = 13408 +a13409 = 13409 +a13410 = 13410 +a13411 = 13411 +a13412 = 13412 +a13413 = 13413 +a13414 = 13414 +a13415 = 13415 +a13416 = 13416 +a13417 = 13417 +a13418 = 13418 +a13419 = 13419 +a13420 = 13420 +a13421 = 13421 +a13422 = 13422 +a13423 = 13423 +a13424 = 13424 +a13425 = 13425 +a13426 = 13426 +a13427 = 13427 +a13428 = 13428 +a13429 = 13429 +a13430 = 13430 +a13431 = 13431 +a13432 = 13432 +a13433 = 13433 +a13434 = 13434 +a13435 = 13435 +a13436 = 13436 +a13437 = 13437 +a13438 = 13438 +a13439 = 13439 +a13440 = 13440 +a13441 = 13441 +a13442 = 13442 +a13443 = 13443 +a13444 = 13444 +a13445 = 13445 +a13446 = 13446 +a13447 = 13447 +a13448 = 13448 +a13449 = 13449 +a13450 = 13450 +a13451 = 13451 +a13452 = 13452 +a13453 = 13453 +a13454 = 13454 +a13455 = 13455 +a13456 = 13456 +a13457 = 13457 +a13458 = 13458 +a13459 = 13459 +a13460 = 13460 +a13461 = 13461 +a13462 = 13462 +a13463 = 13463 +a13464 = 13464 +a13465 = 13465 +a13466 = 13466 +a13467 = 13467 +a13468 = 13468 +a13469 = 13469 +a13470 = 13470 +a13471 = 13471 +a13472 = 13472 +a13473 = 13473 +a13474 = 13474 +a13475 = 13475 +a13476 = 13476 +a13477 = 13477 +a13478 = 13478 +a13479 = 13479 +a13480 = 13480 +a13481 = 13481 +a13482 = 13482 +a13483 = 13483 +a13484 = 13484 +a13485 = 13485 +a13486 = 13486 +a13487 = 13487 +a13488 = 13488 +a13489 = 13489 +a13490 = 13490 +a13491 = 13491 +a13492 = 13492 +a13493 = 13493 +a13494 = 13494 +a13495 = 13495 +a13496 = 13496 +a13497 = 13497 +a13498 = 13498 +a13499 = 13499 +a13500 = 13500 +a13501 = 13501 +a13502 = 13502 +a13503 = 13503 +a13504 = 13504 +a13505 = 13505 +a13506 = 13506 +a13507 = 13507 +a13508 = 13508 +a13509 = 13509 +a13510 = 13510 +a13511 = 13511 +a13512 = 13512 +a13513 = 13513 +a13514 = 13514 +a13515 = 13515 +a13516 = 13516 +a13517 = 13517 +a13518 = 13518 +a13519 = 13519 +a13520 = 13520 +a13521 = 13521 +a13522 = 13522 +a13523 = 13523 +a13524 = 13524 +a13525 = 13525 +a13526 = 13526 +a13527 = 13527 +a13528 = 13528 +a13529 = 13529 +a13530 = 13530 +a13531 = 13531 +a13532 = 13532 +a13533 = 13533 +a13534 = 13534 +a13535 = 13535 +a13536 = 13536 +a13537 = 13537 +a13538 = 13538 +a13539 = 13539 +a13540 = 13540 +a13541 = 13541 +a13542 = 13542 +a13543 = 13543 +a13544 = 13544 +a13545 = 13545 +a13546 = 13546 +a13547 = 13547 +a13548 = 13548 +a13549 = 13549 +a13550 = 13550 +a13551 = 13551 +a13552 = 13552 +a13553 = 13553 +a13554 = 13554 +a13555 = 13555 +a13556 = 13556 +a13557 = 13557 +a13558 = 13558 +a13559 = 13559 +a13560 = 13560 +a13561 = 13561 +a13562 = 13562 +a13563 = 13563 +a13564 = 13564 +a13565 = 13565 +a13566 = 13566 +a13567 = 13567 +a13568 = 13568 +a13569 = 13569 +a13570 = 13570 +a13571 = 13571 +a13572 = 13572 +a13573 = 13573 +a13574 = 13574 +a13575 = 13575 +a13576 = 13576 +a13577 = 13577 +a13578 = 13578 +a13579 = 13579 +a13580 = 13580 +a13581 = 13581 +a13582 = 13582 +a13583 = 13583 +a13584 = 13584 +a13585 = 13585 +a13586 = 13586 +a13587 = 13587 +a13588 = 13588 +a13589 = 13589 +a13590 = 13590 +a13591 = 13591 +a13592 = 13592 +a13593 = 13593 +a13594 = 13594 +a13595 = 13595 +a13596 = 13596 +a13597 = 13597 +a13598 = 13598 +a13599 = 13599 +a13600 = 13600 +a13601 = 13601 +a13602 = 13602 +a13603 = 13603 +a13604 = 13604 +a13605 = 13605 +a13606 = 13606 +a13607 = 13607 +a13608 = 13608 +a13609 = 13609 +a13610 = 13610 +a13611 = 13611 +a13612 = 13612 +a13613 = 13613 +a13614 = 13614 +a13615 = 13615 +a13616 = 13616 +a13617 = 13617 +a13618 = 13618 +a13619 = 13619 +a13620 = 13620 +a13621 = 13621 +a13622 = 13622 +a13623 = 13623 +a13624 = 13624 +a13625 = 13625 +a13626 = 13626 +a13627 = 13627 +a13628 = 13628 +a13629 = 13629 +a13630 = 13630 +a13631 = 13631 +a13632 = 13632 +a13633 = 13633 +a13634 = 13634 +a13635 = 13635 +a13636 = 13636 +a13637 = 13637 +a13638 = 13638 +a13639 = 13639 +a13640 = 13640 +a13641 = 13641 +a13642 = 13642 +a13643 = 13643 +a13644 = 13644 +a13645 = 13645 +a13646 = 13646 +a13647 = 13647 +a13648 = 13648 +a13649 = 13649 +a13650 = 13650 +a13651 = 13651 +a13652 = 13652 +a13653 = 13653 +a13654 = 13654 +a13655 = 13655 +a13656 = 13656 +a13657 = 13657 +a13658 = 13658 +a13659 = 13659 +a13660 = 13660 +a13661 = 13661 +a13662 = 13662 +a13663 = 13663 +a13664 = 13664 +a13665 = 13665 +a13666 = 13666 +a13667 = 13667 +a13668 = 13668 +a13669 = 13669 +a13670 = 13670 +a13671 = 13671 +a13672 = 13672 +a13673 = 13673 +a13674 = 13674 +a13675 = 13675 +a13676 = 13676 +a13677 = 13677 +a13678 = 13678 +a13679 = 13679 +a13680 = 13680 +a13681 = 13681 +a13682 = 13682 +a13683 = 13683 +a13684 = 13684 +a13685 = 13685 +a13686 = 13686 +a13687 = 13687 +a13688 = 13688 +a13689 = 13689 +a13690 = 13690 +a13691 = 13691 +a13692 = 13692 +a13693 = 13693 +a13694 = 13694 +a13695 = 13695 +a13696 = 13696 +a13697 = 13697 +a13698 = 13698 +a13699 = 13699 +a13700 = 13700 +a13701 = 13701 +a13702 = 13702 +a13703 = 13703 +a13704 = 13704 +a13705 = 13705 +a13706 = 13706 +a13707 = 13707 +a13708 = 13708 +a13709 = 13709 +a13710 = 13710 +a13711 = 13711 +a13712 = 13712 +a13713 = 13713 +a13714 = 13714 +a13715 = 13715 +a13716 = 13716 +a13717 = 13717 +a13718 = 13718 +a13719 = 13719 +a13720 = 13720 +a13721 = 13721 +a13722 = 13722 +a13723 = 13723 +a13724 = 13724 +a13725 = 13725 +a13726 = 13726 +a13727 = 13727 +a13728 = 13728 +a13729 = 13729 +a13730 = 13730 +a13731 = 13731 +a13732 = 13732 +a13733 = 13733 +a13734 = 13734 +a13735 = 13735 +a13736 = 13736 +a13737 = 13737 +a13738 = 13738 +a13739 = 13739 +a13740 = 13740 +a13741 = 13741 +a13742 = 13742 +a13743 = 13743 +a13744 = 13744 +a13745 = 13745 +a13746 = 13746 +a13747 = 13747 +a13748 = 13748 +a13749 = 13749 +a13750 = 13750 +a13751 = 13751 +a13752 = 13752 +a13753 = 13753 +a13754 = 13754 +a13755 = 13755 +a13756 = 13756 +a13757 = 13757 +a13758 = 13758 +a13759 = 13759 +a13760 = 13760 +a13761 = 13761 +a13762 = 13762 +a13763 = 13763 +a13764 = 13764 +a13765 = 13765 +a13766 = 13766 +a13767 = 13767 +a13768 = 13768 +a13769 = 13769 +a13770 = 13770 +a13771 = 13771 +a13772 = 13772 +a13773 = 13773 +a13774 = 13774 +a13775 = 13775 +a13776 = 13776 +a13777 = 13777 +a13778 = 13778 +a13779 = 13779 +a13780 = 13780 +a13781 = 13781 +a13782 = 13782 +a13783 = 13783 +a13784 = 13784 +a13785 = 13785 +a13786 = 13786 +a13787 = 13787 +a13788 = 13788 +a13789 = 13789 +a13790 = 13790 +a13791 = 13791 +a13792 = 13792 +a13793 = 13793 +a13794 = 13794 +a13795 = 13795 +a13796 = 13796 +a13797 = 13797 +a13798 = 13798 +a13799 = 13799 +a13800 = 13800 +a13801 = 13801 +a13802 = 13802 +a13803 = 13803 +a13804 = 13804 +a13805 = 13805 +a13806 = 13806 +a13807 = 13807 +a13808 = 13808 +a13809 = 13809 +a13810 = 13810 +a13811 = 13811 +a13812 = 13812 +a13813 = 13813 +a13814 = 13814 +a13815 = 13815 +a13816 = 13816 +a13817 = 13817 +a13818 = 13818 +a13819 = 13819 +a13820 = 13820 +a13821 = 13821 +a13822 = 13822 +a13823 = 13823 +a13824 = 13824 +a13825 = 13825 +a13826 = 13826 +a13827 = 13827 +a13828 = 13828 +a13829 = 13829 +a13830 = 13830 +a13831 = 13831 +a13832 = 13832 +a13833 = 13833 +a13834 = 13834 +a13835 = 13835 +a13836 = 13836 +a13837 = 13837 +a13838 = 13838 +a13839 = 13839 +a13840 = 13840 +a13841 = 13841 +a13842 = 13842 +a13843 = 13843 +a13844 = 13844 +a13845 = 13845 +a13846 = 13846 +a13847 = 13847 +a13848 = 13848 +a13849 = 13849 +a13850 = 13850 +a13851 = 13851 +a13852 = 13852 +a13853 = 13853 +a13854 = 13854 +a13855 = 13855 +a13856 = 13856 +a13857 = 13857 +a13858 = 13858 +a13859 = 13859 +a13860 = 13860 +a13861 = 13861 +a13862 = 13862 +a13863 = 13863 +a13864 = 13864 +a13865 = 13865 +a13866 = 13866 +a13867 = 13867 +a13868 = 13868 +a13869 = 13869 +a13870 = 13870 +a13871 = 13871 +a13872 = 13872 +a13873 = 13873 +a13874 = 13874 +a13875 = 13875 +a13876 = 13876 +a13877 = 13877 +a13878 = 13878 +a13879 = 13879 +a13880 = 13880 +a13881 = 13881 +a13882 = 13882 +a13883 = 13883 +a13884 = 13884 +a13885 = 13885 +a13886 = 13886 +a13887 = 13887 +a13888 = 13888 +a13889 = 13889 +a13890 = 13890 +a13891 = 13891 +a13892 = 13892 +a13893 = 13893 +a13894 = 13894 +a13895 = 13895 +a13896 = 13896 +a13897 = 13897 +a13898 = 13898 +a13899 = 13899 +a13900 = 13900 +a13901 = 13901 +a13902 = 13902 +a13903 = 13903 +a13904 = 13904 +a13905 = 13905 +a13906 = 13906 +a13907 = 13907 +a13908 = 13908 +a13909 = 13909 +a13910 = 13910 +a13911 = 13911 +a13912 = 13912 +a13913 = 13913 +a13914 = 13914 +a13915 = 13915 +a13916 = 13916 +a13917 = 13917 +a13918 = 13918 +a13919 = 13919 +a13920 = 13920 +a13921 = 13921 +a13922 = 13922 +a13923 = 13923 +a13924 = 13924 +a13925 = 13925 +a13926 = 13926 +a13927 = 13927 +a13928 = 13928 +a13929 = 13929 +a13930 = 13930 +a13931 = 13931 +a13932 = 13932 +a13933 = 13933 +a13934 = 13934 +a13935 = 13935 +a13936 = 13936 +a13937 = 13937 +a13938 = 13938 +a13939 = 13939 +a13940 = 13940 +a13941 = 13941 +a13942 = 13942 +a13943 = 13943 +a13944 = 13944 +a13945 = 13945 +a13946 = 13946 +a13947 = 13947 +a13948 = 13948 +a13949 = 13949 +a13950 = 13950 +a13951 = 13951 +a13952 = 13952 +a13953 = 13953 +a13954 = 13954 +a13955 = 13955 +a13956 = 13956 +a13957 = 13957 +a13958 = 13958 +a13959 = 13959 +a13960 = 13960 +a13961 = 13961 +a13962 = 13962 +a13963 = 13963 +a13964 = 13964 +a13965 = 13965 +a13966 = 13966 +a13967 = 13967 +a13968 = 13968 +a13969 = 13969 +a13970 = 13970 +a13971 = 13971 +a13972 = 13972 +a13973 = 13973 +a13974 = 13974 +a13975 = 13975 +a13976 = 13976 +a13977 = 13977 +a13978 = 13978 +a13979 = 13979 +a13980 = 13980 +a13981 = 13981 +a13982 = 13982 +a13983 = 13983 +a13984 = 13984 +a13985 = 13985 +a13986 = 13986 +a13987 = 13987 +a13988 = 13988 +a13989 = 13989 +a13990 = 13990 +a13991 = 13991 +a13992 = 13992 +a13993 = 13993 +a13994 = 13994 +a13995 = 13995 +a13996 = 13996 +a13997 = 13997 +a13998 = 13998 +a13999 = 13999 +a14000 = 14000 +a14001 = 14001 +a14002 = 14002 +a14003 = 14003 +a14004 = 14004 +a14005 = 14005 +a14006 = 14006 +a14007 = 14007 +a14008 = 14008 +a14009 = 14009 +a14010 = 14010 +a14011 = 14011 +a14012 = 14012 +a14013 = 14013 +a14014 = 14014 +a14015 = 14015 +a14016 = 14016 +a14017 = 14017 +a14018 = 14018 +a14019 = 14019 +a14020 = 14020 +a14021 = 14021 +a14022 = 14022 +a14023 = 14023 +a14024 = 14024 +a14025 = 14025 +a14026 = 14026 +a14027 = 14027 +a14028 = 14028 +a14029 = 14029 +a14030 = 14030 +a14031 = 14031 +a14032 = 14032 +a14033 = 14033 +a14034 = 14034 +a14035 = 14035 +a14036 = 14036 +a14037 = 14037 +a14038 = 14038 +a14039 = 14039 +a14040 = 14040 +a14041 = 14041 +a14042 = 14042 +a14043 = 14043 +a14044 = 14044 +a14045 = 14045 +a14046 = 14046 +a14047 = 14047 +a14048 = 14048 +a14049 = 14049 +a14050 = 14050 +a14051 = 14051 +a14052 = 14052 +a14053 = 14053 +a14054 = 14054 +a14055 = 14055 +a14056 = 14056 +a14057 = 14057 +a14058 = 14058 +a14059 = 14059 +a14060 = 14060 +a14061 = 14061 +a14062 = 14062 +a14063 = 14063 +a14064 = 14064 +a14065 = 14065 +a14066 = 14066 +a14067 = 14067 +a14068 = 14068 +a14069 = 14069 +a14070 = 14070 +a14071 = 14071 +a14072 = 14072 +a14073 = 14073 +a14074 = 14074 +a14075 = 14075 +a14076 = 14076 +a14077 = 14077 +a14078 = 14078 +a14079 = 14079 +a14080 = 14080 +a14081 = 14081 +a14082 = 14082 +a14083 = 14083 +a14084 = 14084 +a14085 = 14085 +a14086 = 14086 +a14087 = 14087 +a14088 = 14088 +a14089 = 14089 +a14090 = 14090 +a14091 = 14091 +a14092 = 14092 +a14093 = 14093 +a14094 = 14094 +a14095 = 14095 +a14096 = 14096 +a14097 = 14097 +a14098 = 14098 +a14099 = 14099 +a14100 = 14100 +a14101 = 14101 +a14102 = 14102 +a14103 = 14103 +a14104 = 14104 +a14105 = 14105 +a14106 = 14106 +a14107 = 14107 +a14108 = 14108 +a14109 = 14109 +a14110 = 14110 +a14111 = 14111 +a14112 = 14112 +a14113 = 14113 +a14114 = 14114 +a14115 = 14115 +a14116 = 14116 +a14117 = 14117 +a14118 = 14118 +a14119 = 14119 +a14120 = 14120 +a14121 = 14121 +a14122 = 14122 +a14123 = 14123 +a14124 = 14124 +a14125 = 14125 +a14126 = 14126 +a14127 = 14127 +a14128 = 14128 +a14129 = 14129 +a14130 = 14130 +a14131 = 14131 +a14132 = 14132 +a14133 = 14133 +a14134 = 14134 +a14135 = 14135 +a14136 = 14136 +a14137 = 14137 +a14138 = 14138 +a14139 = 14139 +a14140 = 14140 +a14141 = 14141 +a14142 = 14142 +a14143 = 14143 +a14144 = 14144 +a14145 = 14145 +a14146 = 14146 +a14147 = 14147 +a14148 = 14148 +a14149 = 14149 +a14150 = 14150 +a14151 = 14151 +a14152 = 14152 +a14153 = 14153 +a14154 = 14154 +a14155 = 14155 +a14156 = 14156 +a14157 = 14157 +a14158 = 14158 +a14159 = 14159 +a14160 = 14160 +a14161 = 14161 +a14162 = 14162 +a14163 = 14163 +a14164 = 14164 +a14165 = 14165 +a14166 = 14166 +a14167 = 14167 +a14168 = 14168 +a14169 = 14169 +a14170 = 14170 +a14171 = 14171 +a14172 = 14172 +a14173 = 14173 +a14174 = 14174 +a14175 = 14175 +a14176 = 14176 +a14177 = 14177 +a14178 = 14178 +a14179 = 14179 +a14180 = 14180 +a14181 = 14181 +a14182 = 14182 +a14183 = 14183 +a14184 = 14184 +a14185 = 14185 +a14186 = 14186 +a14187 = 14187 +a14188 = 14188 +a14189 = 14189 +a14190 = 14190 +a14191 = 14191 +a14192 = 14192 +a14193 = 14193 +a14194 = 14194 +a14195 = 14195 +a14196 = 14196 +a14197 = 14197 +a14198 = 14198 +a14199 = 14199 +a14200 = 14200 +a14201 = 14201 +a14202 = 14202 +a14203 = 14203 +a14204 = 14204 +a14205 = 14205 +a14206 = 14206 +a14207 = 14207 +a14208 = 14208 +a14209 = 14209 +a14210 = 14210 +a14211 = 14211 +a14212 = 14212 +a14213 = 14213 +a14214 = 14214 +a14215 = 14215 +a14216 = 14216 +a14217 = 14217 +a14218 = 14218 +a14219 = 14219 +a14220 = 14220 +a14221 = 14221 +a14222 = 14222 +a14223 = 14223 +a14224 = 14224 +a14225 = 14225 +a14226 = 14226 +a14227 = 14227 +a14228 = 14228 +a14229 = 14229 +a14230 = 14230 +a14231 = 14231 +a14232 = 14232 +a14233 = 14233 +a14234 = 14234 +a14235 = 14235 +a14236 = 14236 +a14237 = 14237 +a14238 = 14238 +a14239 = 14239 +a14240 = 14240 +a14241 = 14241 +a14242 = 14242 +a14243 = 14243 +a14244 = 14244 +a14245 = 14245 +a14246 = 14246 +a14247 = 14247 +a14248 = 14248 +a14249 = 14249 +a14250 = 14250 +a14251 = 14251 +a14252 = 14252 +a14253 = 14253 +a14254 = 14254 +a14255 = 14255 +a14256 = 14256 +a14257 = 14257 +a14258 = 14258 +a14259 = 14259 +a14260 = 14260 +a14261 = 14261 +a14262 = 14262 +a14263 = 14263 +a14264 = 14264 +a14265 = 14265 +a14266 = 14266 +a14267 = 14267 +a14268 = 14268 +a14269 = 14269 +a14270 = 14270 +a14271 = 14271 +a14272 = 14272 +a14273 = 14273 +a14274 = 14274 +a14275 = 14275 +a14276 = 14276 +a14277 = 14277 +a14278 = 14278 +a14279 = 14279 +a14280 = 14280 +a14281 = 14281 +a14282 = 14282 +a14283 = 14283 +a14284 = 14284 +a14285 = 14285 +a14286 = 14286 +a14287 = 14287 +a14288 = 14288 +a14289 = 14289 +a14290 = 14290 +a14291 = 14291 +a14292 = 14292 +a14293 = 14293 +a14294 = 14294 +a14295 = 14295 +a14296 = 14296 +a14297 = 14297 +a14298 = 14298 +a14299 = 14299 +a14300 = 14300 +a14301 = 14301 +a14302 = 14302 +a14303 = 14303 +a14304 = 14304 +a14305 = 14305 +a14306 = 14306 +a14307 = 14307 +a14308 = 14308 +a14309 = 14309 +a14310 = 14310 +a14311 = 14311 +a14312 = 14312 +a14313 = 14313 +a14314 = 14314 +a14315 = 14315 +a14316 = 14316 +a14317 = 14317 +a14318 = 14318 +a14319 = 14319 +a14320 = 14320 +a14321 = 14321 +a14322 = 14322 +a14323 = 14323 +a14324 = 14324 +a14325 = 14325 +a14326 = 14326 +a14327 = 14327 +a14328 = 14328 +a14329 = 14329 +a14330 = 14330 +a14331 = 14331 +a14332 = 14332 +a14333 = 14333 +a14334 = 14334 +a14335 = 14335 +a14336 = 14336 +a14337 = 14337 +a14338 = 14338 +a14339 = 14339 +a14340 = 14340 +a14341 = 14341 +a14342 = 14342 +a14343 = 14343 +a14344 = 14344 +a14345 = 14345 +a14346 = 14346 +a14347 = 14347 +a14348 = 14348 +a14349 = 14349 +a14350 = 14350 +a14351 = 14351 +a14352 = 14352 +a14353 = 14353 +a14354 = 14354 +a14355 = 14355 +a14356 = 14356 +a14357 = 14357 +a14358 = 14358 +a14359 = 14359 +a14360 = 14360 +a14361 = 14361 +a14362 = 14362 +a14363 = 14363 +a14364 = 14364 +a14365 = 14365 +a14366 = 14366 +a14367 = 14367 +a14368 = 14368 +a14369 = 14369 +a14370 = 14370 +a14371 = 14371 +a14372 = 14372 +a14373 = 14373 +a14374 = 14374 +a14375 = 14375 +a14376 = 14376 +a14377 = 14377 +a14378 = 14378 +a14379 = 14379 +a14380 = 14380 +a14381 = 14381 +a14382 = 14382 +a14383 = 14383 +a14384 = 14384 +a14385 = 14385 +a14386 = 14386 +a14387 = 14387 +a14388 = 14388 +a14389 = 14389 +a14390 = 14390 +a14391 = 14391 +a14392 = 14392 +a14393 = 14393 +a14394 = 14394 +a14395 = 14395 +a14396 = 14396 +a14397 = 14397 +a14398 = 14398 +a14399 = 14399 +a14400 = 14400 +a14401 = 14401 +a14402 = 14402 +a14403 = 14403 +a14404 = 14404 +a14405 = 14405 +a14406 = 14406 +a14407 = 14407 +a14408 = 14408 +a14409 = 14409 +a14410 = 14410 +a14411 = 14411 +a14412 = 14412 +a14413 = 14413 +a14414 = 14414 +a14415 = 14415 +a14416 = 14416 +a14417 = 14417 +a14418 = 14418 +a14419 = 14419 +a14420 = 14420 +a14421 = 14421 +a14422 = 14422 +a14423 = 14423 +a14424 = 14424 +a14425 = 14425 +a14426 = 14426 +a14427 = 14427 +a14428 = 14428 +a14429 = 14429 +a14430 = 14430 +a14431 = 14431 +a14432 = 14432 +a14433 = 14433 +a14434 = 14434 +a14435 = 14435 +a14436 = 14436 +a14437 = 14437 +a14438 = 14438 +a14439 = 14439 +a14440 = 14440 +a14441 = 14441 +a14442 = 14442 +a14443 = 14443 +a14444 = 14444 +a14445 = 14445 +a14446 = 14446 +a14447 = 14447 +a14448 = 14448 +a14449 = 14449 +a14450 = 14450 +a14451 = 14451 +a14452 = 14452 +a14453 = 14453 +a14454 = 14454 +a14455 = 14455 +a14456 = 14456 +a14457 = 14457 +a14458 = 14458 +a14459 = 14459 +a14460 = 14460 +a14461 = 14461 +a14462 = 14462 +a14463 = 14463 +a14464 = 14464 +a14465 = 14465 +a14466 = 14466 +a14467 = 14467 +a14468 = 14468 +a14469 = 14469 +a14470 = 14470 +a14471 = 14471 +a14472 = 14472 +a14473 = 14473 +a14474 = 14474 +a14475 = 14475 +a14476 = 14476 +a14477 = 14477 +a14478 = 14478 +a14479 = 14479 +a14480 = 14480 +a14481 = 14481 +a14482 = 14482 +a14483 = 14483 +a14484 = 14484 +a14485 = 14485 +a14486 = 14486 +a14487 = 14487 +a14488 = 14488 +a14489 = 14489 +a14490 = 14490 +a14491 = 14491 +a14492 = 14492 +a14493 = 14493 +a14494 = 14494 +a14495 = 14495 +a14496 = 14496 +a14497 = 14497 +a14498 = 14498 +a14499 = 14499 +a14500 = 14500 +a14501 = 14501 +a14502 = 14502 +a14503 = 14503 +a14504 = 14504 +a14505 = 14505 +a14506 = 14506 +a14507 = 14507 +a14508 = 14508 +a14509 = 14509 +a14510 = 14510 +a14511 = 14511 +a14512 = 14512 +a14513 = 14513 +a14514 = 14514 +a14515 = 14515 +a14516 = 14516 +a14517 = 14517 +a14518 = 14518 +a14519 = 14519 +a14520 = 14520 +a14521 = 14521 +a14522 = 14522 +a14523 = 14523 +a14524 = 14524 +a14525 = 14525 +a14526 = 14526 +a14527 = 14527 +a14528 = 14528 +a14529 = 14529 +a14530 = 14530 +a14531 = 14531 +a14532 = 14532 +a14533 = 14533 +a14534 = 14534 +a14535 = 14535 +a14536 = 14536 +a14537 = 14537 +a14538 = 14538 +a14539 = 14539 +a14540 = 14540 +a14541 = 14541 +a14542 = 14542 +a14543 = 14543 +a14544 = 14544 +a14545 = 14545 +a14546 = 14546 +a14547 = 14547 +a14548 = 14548 +a14549 = 14549 +a14550 = 14550 +a14551 = 14551 +a14552 = 14552 +a14553 = 14553 +a14554 = 14554 +a14555 = 14555 +a14556 = 14556 +a14557 = 14557 +a14558 = 14558 +a14559 = 14559 +a14560 = 14560 +a14561 = 14561 +a14562 = 14562 +a14563 = 14563 +a14564 = 14564 +a14565 = 14565 +a14566 = 14566 +a14567 = 14567 +a14568 = 14568 +a14569 = 14569 +a14570 = 14570 +a14571 = 14571 +a14572 = 14572 +a14573 = 14573 +a14574 = 14574 +a14575 = 14575 +a14576 = 14576 +a14577 = 14577 +a14578 = 14578 +a14579 = 14579 +a14580 = 14580 +a14581 = 14581 +a14582 = 14582 +a14583 = 14583 +a14584 = 14584 +a14585 = 14585 +a14586 = 14586 +a14587 = 14587 +a14588 = 14588 +a14589 = 14589 +a14590 = 14590 +a14591 = 14591 +a14592 = 14592 +a14593 = 14593 +a14594 = 14594 +a14595 = 14595 +a14596 = 14596 +a14597 = 14597 +a14598 = 14598 +a14599 = 14599 +a14600 = 14600 +a14601 = 14601 +a14602 = 14602 +a14603 = 14603 +a14604 = 14604 +a14605 = 14605 +a14606 = 14606 +a14607 = 14607 +a14608 = 14608 +a14609 = 14609 +a14610 = 14610 +a14611 = 14611 +a14612 = 14612 +a14613 = 14613 +a14614 = 14614 +a14615 = 14615 +a14616 = 14616 +a14617 = 14617 +a14618 = 14618 +a14619 = 14619 +a14620 = 14620 +a14621 = 14621 +a14622 = 14622 +a14623 = 14623 +a14624 = 14624 +a14625 = 14625 +a14626 = 14626 +a14627 = 14627 +a14628 = 14628 +a14629 = 14629 +a14630 = 14630 +a14631 = 14631 +a14632 = 14632 +a14633 = 14633 +a14634 = 14634 +a14635 = 14635 +a14636 = 14636 +a14637 = 14637 +a14638 = 14638 +a14639 = 14639 +a14640 = 14640 +a14641 = 14641 +a14642 = 14642 +a14643 = 14643 +a14644 = 14644 +a14645 = 14645 +a14646 = 14646 +a14647 = 14647 +a14648 = 14648 +a14649 = 14649 +a14650 = 14650 +a14651 = 14651 +a14652 = 14652 +a14653 = 14653 +a14654 = 14654 +a14655 = 14655 +a14656 = 14656 +a14657 = 14657 +a14658 = 14658 +a14659 = 14659 +a14660 = 14660 +a14661 = 14661 +a14662 = 14662 +a14663 = 14663 +a14664 = 14664 +a14665 = 14665 +a14666 = 14666 +a14667 = 14667 +a14668 = 14668 +a14669 = 14669 +a14670 = 14670 +a14671 = 14671 +a14672 = 14672 +a14673 = 14673 +a14674 = 14674 +a14675 = 14675 +a14676 = 14676 +a14677 = 14677 +a14678 = 14678 +a14679 = 14679 +a14680 = 14680 +a14681 = 14681 +a14682 = 14682 +a14683 = 14683 +a14684 = 14684 +a14685 = 14685 +a14686 = 14686 +a14687 = 14687 +a14688 = 14688 +a14689 = 14689 +a14690 = 14690 +a14691 = 14691 +a14692 = 14692 +a14693 = 14693 +a14694 = 14694 +a14695 = 14695 +a14696 = 14696 +a14697 = 14697 +a14698 = 14698 +a14699 = 14699 +a14700 = 14700 +a14701 = 14701 +a14702 = 14702 +a14703 = 14703 +a14704 = 14704 +a14705 = 14705 +a14706 = 14706 +a14707 = 14707 +a14708 = 14708 +a14709 = 14709 +a14710 = 14710 +a14711 = 14711 +a14712 = 14712 +a14713 = 14713 +a14714 = 14714 +a14715 = 14715 +a14716 = 14716 +a14717 = 14717 +a14718 = 14718 +a14719 = 14719 +a14720 = 14720 +a14721 = 14721 +a14722 = 14722 +a14723 = 14723 +a14724 = 14724 +a14725 = 14725 +a14726 = 14726 +a14727 = 14727 +a14728 = 14728 +a14729 = 14729 +a14730 = 14730 +a14731 = 14731 +a14732 = 14732 +a14733 = 14733 +a14734 = 14734 +a14735 = 14735 +a14736 = 14736 +a14737 = 14737 +a14738 = 14738 +a14739 = 14739 +a14740 = 14740 +a14741 = 14741 +a14742 = 14742 +a14743 = 14743 +a14744 = 14744 +a14745 = 14745 +a14746 = 14746 +a14747 = 14747 +a14748 = 14748 +a14749 = 14749 +a14750 = 14750 +a14751 = 14751 +a14752 = 14752 +a14753 = 14753 +a14754 = 14754 +a14755 = 14755 +a14756 = 14756 +a14757 = 14757 +a14758 = 14758 +a14759 = 14759 +a14760 = 14760 +a14761 = 14761 +a14762 = 14762 +a14763 = 14763 +a14764 = 14764 +a14765 = 14765 +a14766 = 14766 +a14767 = 14767 +a14768 = 14768 +a14769 = 14769 +a14770 = 14770 +a14771 = 14771 +a14772 = 14772 +a14773 = 14773 +a14774 = 14774 +a14775 = 14775 +a14776 = 14776 +a14777 = 14777 +a14778 = 14778 +a14779 = 14779 +a14780 = 14780 +a14781 = 14781 +a14782 = 14782 +a14783 = 14783 +a14784 = 14784 +a14785 = 14785 +a14786 = 14786 +a14787 = 14787 +a14788 = 14788 +a14789 = 14789 +a14790 = 14790 +a14791 = 14791 +a14792 = 14792 +a14793 = 14793 +a14794 = 14794 +a14795 = 14795 +a14796 = 14796 +a14797 = 14797 +a14798 = 14798 +a14799 = 14799 +a14800 = 14800 +a14801 = 14801 +a14802 = 14802 +a14803 = 14803 +a14804 = 14804 +a14805 = 14805 +a14806 = 14806 +a14807 = 14807 +a14808 = 14808 +a14809 = 14809 +a14810 = 14810 +a14811 = 14811 +a14812 = 14812 +a14813 = 14813 +a14814 = 14814 +a14815 = 14815 +a14816 = 14816 +a14817 = 14817 +a14818 = 14818 +a14819 = 14819 +a14820 = 14820 +a14821 = 14821 +a14822 = 14822 +a14823 = 14823 +a14824 = 14824 +a14825 = 14825 +a14826 = 14826 +a14827 = 14827 +a14828 = 14828 +a14829 = 14829 +a14830 = 14830 +a14831 = 14831 +a14832 = 14832 +a14833 = 14833 +a14834 = 14834 +a14835 = 14835 +a14836 = 14836 +a14837 = 14837 +a14838 = 14838 +a14839 = 14839 +a14840 = 14840 +a14841 = 14841 +a14842 = 14842 +a14843 = 14843 +a14844 = 14844 +a14845 = 14845 +a14846 = 14846 +a14847 = 14847 +a14848 = 14848 +a14849 = 14849 +a14850 = 14850 +a14851 = 14851 +a14852 = 14852 +a14853 = 14853 +a14854 = 14854 +a14855 = 14855 +a14856 = 14856 +a14857 = 14857 +a14858 = 14858 +a14859 = 14859 +a14860 = 14860 +a14861 = 14861 +a14862 = 14862 +a14863 = 14863 +a14864 = 14864 +a14865 = 14865 +a14866 = 14866 +a14867 = 14867 +a14868 = 14868 +a14869 = 14869 +a14870 = 14870 +a14871 = 14871 +a14872 = 14872 +a14873 = 14873 +a14874 = 14874 +a14875 = 14875 +a14876 = 14876 +a14877 = 14877 +a14878 = 14878 +a14879 = 14879 +a14880 = 14880 +a14881 = 14881 +a14882 = 14882 +a14883 = 14883 +a14884 = 14884 +a14885 = 14885 +a14886 = 14886 +a14887 = 14887 +a14888 = 14888 +a14889 = 14889 +a14890 = 14890 +a14891 = 14891 +a14892 = 14892 +a14893 = 14893 +a14894 = 14894 +a14895 = 14895 +a14896 = 14896 +a14897 = 14897 +a14898 = 14898 +a14899 = 14899 +a14900 = 14900 +a14901 = 14901 +a14902 = 14902 +a14903 = 14903 +a14904 = 14904 +a14905 = 14905 +a14906 = 14906 +a14907 = 14907 +a14908 = 14908 +a14909 = 14909 +a14910 = 14910 +a14911 = 14911 +a14912 = 14912 +a14913 = 14913 +a14914 = 14914 +a14915 = 14915 +a14916 = 14916 +a14917 = 14917 +a14918 = 14918 +a14919 = 14919 +a14920 = 14920 +a14921 = 14921 +a14922 = 14922 +a14923 = 14923 +a14924 = 14924 +a14925 = 14925 +a14926 = 14926 +a14927 = 14927 +a14928 = 14928 +a14929 = 14929 +a14930 = 14930 +a14931 = 14931 +a14932 = 14932 +a14933 = 14933 +a14934 = 14934 +a14935 = 14935 +a14936 = 14936 +a14937 = 14937 +a14938 = 14938 +a14939 = 14939 +a14940 = 14940 +a14941 = 14941 +a14942 = 14942 +a14943 = 14943 +a14944 = 14944 +a14945 = 14945 +a14946 = 14946 +a14947 = 14947 +a14948 = 14948 +a14949 = 14949 +a14950 = 14950 +a14951 = 14951 +a14952 = 14952 +a14953 = 14953 +a14954 = 14954 +a14955 = 14955 +a14956 = 14956 +a14957 = 14957 +a14958 = 14958 +a14959 = 14959 +a14960 = 14960 +a14961 = 14961 +a14962 = 14962 +a14963 = 14963 +a14964 = 14964 +a14965 = 14965 +a14966 = 14966 +a14967 = 14967 +a14968 = 14968 +a14969 = 14969 +a14970 = 14970 +a14971 = 14971 +a14972 = 14972 +a14973 = 14973 +a14974 = 14974 +a14975 = 14975 +a14976 = 14976 +a14977 = 14977 +a14978 = 14978 +a14979 = 14979 +a14980 = 14980 +a14981 = 14981 +a14982 = 14982 +a14983 = 14983 +a14984 = 14984 +a14985 = 14985 +a14986 = 14986 +a14987 = 14987 +a14988 = 14988 +a14989 = 14989 +a14990 = 14990 +a14991 = 14991 +a14992 = 14992 +a14993 = 14993 +a14994 = 14994 +a14995 = 14995 +a14996 = 14996 +a14997 = 14997 +a14998 = 14998 +a14999 = 14999 +a15000 = 15000 +a15001 = 15001 +a15002 = 15002 +a15003 = 15003 +a15004 = 15004 +a15005 = 15005 +a15006 = 15006 +a15007 = 15007 +a15008 = 15008 +a15009 = 15009 +a15010 = 15010 +a15011 = 15011 +a15012 = 15012 +a15013 = 15013 +a15014 = 15014 +a15015 = 15015 +a15016 = 15016 +a15017 = 15017 +a15018 = 15018 +a15019 = 15019 +a15020 = 15020 +a15021 = 15021 +a15022 = 15022 +a15023 = 15023 +a15024 = 15024 +a15025 = 15025 +a15026 = 15026 +a15027 = 15027 +a15028 = 15028 +a15029 = 15029 +a15030 = 15030 +a15031 = 15031 +a15032 = 15032 +a15033 = 15033 +a15034 = 15034 +a15035 = 15035 +a15036 = 15036 +a15037 = 15037 +a15038 = 15038 +a15039 = 15039 +a15040 = 15040 +a15041 = 15041 +a15042 = 15042 +a15043 = 15043 +a15044 = 15044 +a15045 = 15045 +a15046 = 15046 +a15047 = 15047 +a15048 = 15048 +a15049 = 15049 +a15050 = 15050 +a15051 = 15051 +a15052 = 15052 +a15053 = 15053 +a15054 = 15054 +a15055 = 15055 +a15056 = 15056 +a15057 = 15057 +a15058 = 15058 +a15059 = 15059 +a15060 = 15060 +a15061 = 15061 +a15062 = 15062 +a15063 = 15063 +a15064 = 15064 +a15065 = 15065 +a15066 = 15066 +a15067 = 15067 +a15068 = 15068 +a15069 = 15069 +a15070 = 15070 +a15071 = 15071 +a15072 = 15072 +a15073 = 15073 +a15074 = 15074 +a15075 = 15075 +a15076 = 15076 +a15077 = 15077 +a15078 = 15078 +a15079 = 15079 +a15080 = 15080 +a15081 = 15081 +a15082 = 15082 +a15083 = 15083 +a15084 = 15084 +a15085 = 15085 +a15086 = 15086 +a15087 = 15087 +a15088 = 15088 +a15089 = 15089 +a15090 = 15090 +a15091 = 15091 +a15092 = 15092 +a15093 = 15093 +a15094 = 15094 +a15095 = 15095 +a15096 = 15096 +a15097 = 15097 +a15098 = 15098 +a15099 = 15099 +a15100 = 15100 +a15101 = 15101 +a15102 = 15102 +a15103 = 15103 +a15104 = 15104 +a15105 = 15105 +a15106 = 15106 +a15107 = 15107 +a15108 = 15108 +a15109 = 15109 +a15110 = 15110 +a15111 = 15111 +a15112 = 15112 +a15113 = 15113 +a15114 = 15114 +a15115 = 15115 +a15116 = 15116 +a15117 = 15117 +a15118 = 15118 +a15119 = 15119 +a15120 = 15120 +a15121 = 15121 +a15122 = 15122 +a15123 = 15123 +a15124 = 15124 +a15125 = 15125 +a15126 = 15126 +a15127 = 15127 +a15128 = 15128 +a15129 = 15129 +a15130 = 15130 +a15131 = 15131 +a15132 = 15132 +a15133 = 15133 +a15134 = 15134 +a15135 = 15135 +a15136 = 15136 +a15137 = 15137 +a15138 = 15138 +a15139 = 15139 +a15140 = 15140 +a15141 = 15141 +a15142 = 15142 +a15143 = 15143 +a15144 = 15144 +a15145 = 15145 +a15146 = 15146 +a15147 = 15147 +a15148 = 15148 +a15149 = 15149 +a15150 = 15150 +a15151 = 15151 +a15152 = 15152 +a15153 = 15153 +a15154 = 15154 +a15155 = 15155 +a15156 = 15156 +a15157 = 15157 +a15158 = 15158 +a15159 = 15159 +a15160 = 15160 +a15161 = 15161 +a15162 = 15162 +a15163 = 15163 +a15164 = 15164 +a15165 = 15165 +a15166 = 15166 +a15167 = 15167 +a15168 = 15168 +a15169 = 15169 +a15170 = 15170 +a15171 = 15171 +a15172 = 15172 +a15173 = 15173 +a15174 = 15174 +a15175 = 15175 +a15176 = 15176 +a15177 = 15177 +a15178 = 15178 +a15179 = 15179 +a15180 = 15180 +a15181 = 15181 +a15182 = 15182 +a15183 = 15183 +a15184 = 15184 +a15185 = 15185 +a15186 = 15186 +a15187 = 15187 +a15188 = 15188 +a15189 = 15189 +a15190 = 15190 +a15191 = 15191 +a15192 = 15192 +a15193 = 15193 +a15194 = 15194 +a15195 = 15195 +a15196 = 15196 +a15197 = 15197 +a15198 = 15198 +a15199 = 15199 +a15200 = 15200 +a15201 = 15201 +a15202 = 15202 +a15203 = 15203 +a15204 = 15204 +a15205 = 15205 +a15206 = 15206 +a15207 = 15207 +a15208 = 15208 +a15209 = 15209 +a15210 = 15210 +a15211 = 15211 +a15212 = 15212 +a15213 = 15213 +a15214 = 15214 +a15215 = 15215 +a15216 = 15216 +a15217 = 15217 +a15218 = 15218 +a15219 = 15219 +a15220 = 15220 +a15221 = 15221 +a15222 = 15222 +a15223 = 15223 +a15224 = 15224 +a15225 = 15225 +a15226 = 15226 +a15227 = 15227 +a15228 = 15228 +a15229 = 15229 +a15230 = 15230 +a15231 = 15231 +a15232 = 15232 +a15233 = 15233 +a15234 = 15234 +a15235 = 15235 +a15236 = 15236 +a15237 = 15237 +a15238 = 15238 +a15239 = 15239 +a15240 = 15240 +a15241 = 15241 +a15242 = 15242 +a15243 = 15243 +a15244 = 15244 +a15245 = 15245 +a15246 = 15246 +a15247 = 15247 +a15248 = 15248 +a15249 = 15249 +a15250 = 15250 +a15251 = 15251 +a15252 = 15252 +a15253 = 15253 +a15254 = 15254 +a15255 = 15255 +a15256 = 15256 +a15257 = 15257 +a15258 = 15258 +a15259 = 15259 +a15260 = 15260 +a15261 = 15261 +a15262 = 15262 +a15263 = 15263 +a15264 = 15264 +a15265 = 15265 +a15266 = 15266 +a15267 = 15267 +a15268 = 15268 +a15269 = 15269 +a15270 = 15270 +a15271 = 15271 +a15272 = 15272 +a15273 = 15273 +a15274 = 15274 +a15275 = 15275 +a15276 = 15276 +a15277 = 15277 +a15278 = 15278 +a15279 = 15279 +a15280 = 15280 +a15281 = 15281 +a15282 = 15282 +a15283 = 15283 +a15284 = 15284 +a15285 = 15285 +a15286 = 15286 +a15287 = 15287 +a15288 = 15288 +a15289 = 15289 +a15290 = 15290 +a15291 = 15291 +a15292 = 15292 +a15293 = 15293 +a15294 = 15294 +a15295 = 15295 +a15296 = 15296 +a15297 = 15297 +a15298 = 15298 +a15299 = 15299 +a15300 = 15300 +a15301 = 15301 +a15302 = 15302 +a15303 = 15303 +a15304 = 15304 +a15305 = 15305 +a15306 = 15306 +a15307 = 15307 +a15308 = 15308 +a15309 = 15309 +a15310 = 15310 +a15311 = 15311 +a15312 = 15312 +a15313 = 15313 +a15314 = 15314 +a15315 = 15315 +a15316 = 15316 +a15317 = 15317 +a15318 = 15318 +a15319 = 15319 +a15320 = 15320 +a15321 = 15321 +a15322 = 15322 +a15323 = 15323 +a15324 = 15324 +a15325 = 15325 +a15326 = 15326 +a15327 = 15327 +a15328 = 15328 +a15329 = 15329 +a15330 = 15330 +a15331 = 15331 +a15332 = 15332 +a15333 = 15333 +a15334 = 15334 +a15335 = 15335 +a15336 = 15336 +a15337 = 15337 +a15338 = 15338 +a15339 = 15339 +a15340 = 15340 +a15341 = 15341 +a15342 = 15342 +a15343 = 15343 +a15344 = 15344 +a15345 = 15345 +a15346 = 15346 +a15347 = 15347 +a15348 = 15348 +a15349 = 15349 +a15350 = 15350 +a15351 = 15351 +a15352 = 15352 +a15353 = 15353 +a15354 = 15354 +a15355 = 15355 +a15356 = 15356 +a15357 = 15357 +a15358 = 15358 +a15359 = 15359 +a15360 = 15360 +a15361 = 15361 +a15362 = 15362 +a15363 = 15363 +a15364 = 15364 +a15365 = 15365 +a15366 = 15366 +a15367 = 15367 +a15368 = 15368 +a15369 = 15369 +a15370 = 15370 +a15371 = 15371 +a15372 = 15372 +a15373 = 15373 +a15374 = 15374 +a15375 = 15375 +a15376 = 15376 +a15377 = 15377 +a15378 = 15378 +a15379 = 15379 +a15380 = 15380 +a15381 = 15381 +a15382 = 15382 +a15383 = 15383 +a15384 = 15384 +a15385 = 15385 +a15386 = 15386 +a15387 = 15387 +a15388 = 15388 +a15389 = 15389 +a15390 = 15390 +a15391 = 15391 +a15392 = 15392 +a15393 = 15393 +a15394 = 15394 +a15395 = 15395 +a15396 = 15396 +a15397 = 15397 +a15398 = 15398 +a15399 = 15399 +a15400 = 15400 +a15401 = 15401 +a15402 = 15402 +a15403 = 15403 +a15404 = 15404 +a15405 = 15405 +a15406 = 15406 +a15407 = 15407 +a15408 = 15408 +a15409 = 15409 +a15410 = 15410 +a15411 = 15411 +a15412 = 15412 +a15413 = 15413 +a15414 = 15414 +a15415 = 15415 +a15416 = 15416 +a15417 = 15417 +a15418 = 15418 +a15419 = 15419 +a15420 = 15420 +a15421 = 15421 +a15422 = 15422 +a15423 = 15423 +a15424 = 15424 +a15425 = 15425 +a15426 = 15426 +a15427 = 15427 +a15428 = 15428 +a15429 = 15429 +a15430 = 15430 +a15431 = 15431 +a15432 = 15432 +a15433 = 15433 +a15434 = 15434 +a15435 = 15435 +a15436 = 15436 +a15437 = 15437 +a15438 = 15438 +a15439 = 15439 +a15440 = 15440 +a15441 = 15441 +a15442 = 15442 +a15443 = 15443 +a15444 = 15444 +a15445 = 15445 +a15446 = 15446 +a15447 = 15447 +a15448 = 15448 +a15449 = 15449 +a15450 = 15450 +a15451 = 15451 +a15452 = 15452 +a15453 = 15453 +a15454 = 15454 +a15455 = 15455 +a15456 = 15456 +a15457 = 15457 +a15458 = 15458 +a15459 = 15459 +a15460 = 15460 +a15461 = 15461 +a15462 = 15462 +a15463 = 15463 +a15464 = 15464 +a15465 = 15465 +a15466 = 15466 +a15467 = 15467 +a15468 = 15468 +a15469 = 15469 +a15470 = 15470 +a15471 = 15471 +a15472 = 15472 +a15473 = 15473 +a15474 = 15474 +a15475 = 15475 +a15476 = 15476 +a15477 = 15477 +a15478 = 15478 +a15479 = 15479 +a15480 = 15480 +a15481 = 15481 +a15482 = 15482 +a15483 = 15483 +a15484 = 15484 +a15485 = 15485 +a15486 = 15486 +a15487 = 15487 +a15488 = 15488 +a15489 = 15489 +a15490 = 15490 +a15491 = 15491 +a15492 = 15492 +a15493 = 15493 +a15494 = 15494 +a15495 = 15495 +a15496 = 15496 +a15497 = 15497 +a15498 = 15498 +a15499 = 15499 +a15500 = 15500 +a15501 = 15501 +a15502 = 15502 +a15503 = 15503 +a15504 = 15504 +a15505 = 15505 +a15506 = 15506 +a15507 = 15507 +a15508 = 15508 +a15509 = 15509 +a15510 = 15510 +a15511 = 15511 +a15512 = 15512 +a15513 = 15513 +a15514 = 15514 +a15515 = 15515 +a15516 = 15516 +a15517 = 15517 +a15518 = 15518 +a15519 = 15519 +a15520 = 15520 +a15521 = 15521 +a15522 = 15522 +a15523 = 15523 +a15524 = 15524 +a15525 = 15525 +a15526 = 15526 +a15527 = 15527 +a15528 = 15528 +a15529 = 15529 +a15530 = 15530 +a15531 = 15531 +a15532 = 15532 +a15533 = 15533 +a15534 = 15534 +a15535 = 15535 +a15536 = 15536 +a15537 = 15537 +a15538 = 15538 +a15539 = 15539 +a15540 = 15540 +a15541 = 15541 +a15542 = 15542 +a15543 = 15543 +a15544 = 15544 +a15545 = 15545 +a15546 = 15546 +a15547 = 15547 +a15548 = 15548 +a15549 = 15549 +a15550 = 15550 +a15551 = 15551 +a15552 = 15552 +a15553 = 15553 +a15554 = 15554 +a15555 = 15555 +a15556 = 15556 +a15557 = 15557 +a15558 = 15558 +a15559 = 15559 +a15560 = 15560 +a15561 = 15561 +a15562 = 15562 +a15563 = 15563 +a15564 = 15564 +a15565 = 15565 +a15566 = 15566 +a15567 = 15567 +a15568 = 15568 +a15569 = 15569 +a15570 = 15570 +a15571 = 15571 +a15572 = 15572 +a15573 = 15573 +a15574 = 15574 +a15575 = 15575 +a15576 = 15576 +a15577 = 15577 +a15578 = 15578 +a15579 = 15579 +a15580 = 15580 +a15581 = 15581 +a15582 = 15582 +a15583 = 15583 +a15584 = 15584 +a15585 = 15585 +a15586 = 15586 +a15587 = 15587 +a15588 = 15588 +a15589 = 15589 +a15590 = 15590 +a15591 = 15591 +a15592 = 15592 +a15593 = 15593 +a15594 = 15594 +a15595 = 15595 +a15596 = 15596 +a15597 = 15597 +a15598 = 15598 +a15599 = 15599 +a15600 = 15600 +a15601 = 15601 +a15602 = 15602 +a15603 = 15603 +a15604 = 15604 +a15605 = 15605 +a15606 = 15606 +a15607 = 15607 +a15608 = 15608 +a15609 = 15609 +a15610 = 15610 +a15611 = 15611 +a15612 = 15612 +a15613 = 15613 +a15614 = 15614 +a15615 = 15615 +a15616 = 15616 +a15617 = 15617 +a15618 = 15618 +a15619 = 15619 +a15620 = 15620 +a15621 = 15621 +a15622 = 15622 +a15623 = 15623 +a15624 = 15624 +a15625 = 15625 +a15626 = 15626 +a15627 = 15627 +a15628 = 15628 +a15629 = 15629 +a15630 = 15630 +a15631 = 15631 +a15632 = 15632 +a15633 = 15633 +a15634 = 15634 +a15635 = 15635 +a15636 = 15636 +a15637 = 15637 +a15638 = 15638 +a15639 = 15639 +a15640 = 15640 +a15641 = 15641 +a15642 = 15642 +a15643 = 15643 +a15644 = 15644 +a15645 = 15645 +a15646 = 15646 +a15647 = 15647 +a15648 = 15648 +a15649 = 15649 +a15650 = 15650 +a15651 = 15651 +a15652 = 15652 +a15653 = 15653 +a15654 = 15654 +a15655 = 15655 +a15656 = 15656 +a15657 = 15657 +a15658 = 15658 +a15659 = 15659 +a15660 = 15660 +a15661 = 15661 +a15662 = 15662 +a15663 = 15663 +a15664 = 15664 +a15665 = 15665 +a15666 = 15666 +a15667 = 15667 +a15668 = 15668 +a15669 = 15669 +a15670 = 15670 +a15671 = 15671 +a15672 = 15672 +a15673 = 15673 +a15674 = 15674 +a15675 = 15675 +a15676 = 15676 +a15677 = 15677 +a15678 = 15678 +a15679 = 15679 +a15680 = 15680 +a15681 = 15681 +a15682 = 15682 +a15683 = 15683 +a15684 = 15684 +a15685 = 15685 +a15686 = 15686 +a15687 = 15687 +a15688 = 15688 +a15689 = 15689 +a15690 = 15690 +a15691 = 15691 +a15692 = 15692 +a15693 = 15693 +a15694 = 15694 +a15695 = 15695 +a15696 = 15696 +a15697 = 15697 +a15698 = 15698 +a15699 = 15699 +a15700 = 15700 +a15701 = 15701 +a15702 = 15702 +a15703 = 15703 +a15704 = 15704 +a15705 = 15705 +a15706 = 15706 +a15707 = 15707 +a15708 = 15708 +a15709 = 15709 +a15710 = 15710 +a15711 = 15711 +a15712 = 15712 +a15713 = 15713 +a15714 = 15714 +a15715 = 15715 +a15716 = 15716 +a15717 = 15717 +a15718 = 15718 +a15719 = 15719 +a15720 = 15720 +a15721 = 15721 +a15722 = 15722 +a15723 = 15723 +a15724 = 15724 +a15725 = 15725 +a15726 = 15726 +a15727 = 15727 +a15728 = 15728 +a15729 = 15729 +a15730 = 15730 +a15731 = 15731 +a15732 = 15732 +a15733 = 15733 +a15734 = 15734 +a15735 = 15735 +a15736 = 15736 +a15737 = 15737 +a15738 = 15738 +a15739 = 15739 +a15740 = 15740 +a15741 = 15741 +a15742 = 15742 +a15743 = 15743 +a15744 = 15744 +a15745 = 15745 +a15746 = 15746 +a15747 = 15747 +a15748 = 15748 +a15749 = 15749 +a15750 = 15750 +a15751 = 15751 +a15752 = 15752 +a15753 = 15753 +a15754 = 15754 +a15755 = 15755 +a15756 = 15756 +a15757 = 15757 +a15758 = 15758 +a15759 = 15759 +a15760 = 15760 +a15761 = 15761 +a15762 = 15762 +a15763 = 15763 +a15764 = 15764 +a15765 = 15765 +a15766 = 15766 +a15767 = 15767 +a15768 = 15768 +a15769 = 15769 +a15770 = 15770 +a15771 = 15771 +a15772 = 15772 +a15773 = 15773 +a15774 = 15774 +a15775 = 15775 +a15776 = 15776 +a15777 = 15777 +a15778 = 15778 +a15779 = 15779 +a15780 = 15780 +a15781 = 15781 +a15782 = 15782 +a15783 = 15783 +a15784 = 15784 +a15785 = 15785 +a15786 = 15786 +a15787 = 15787 +a15788 = 15788 +a15789 = 15789 +a15790 = 15790 +a15791 = 15791 +a15792 = 15792 +a15793 = 15793 +a15794 = 15794 +a15795 = 15795 +a15796 = 15796 +a15797 = 15797 +a15798 = 15798 +a15799 = 15799 +a15800 = 15800 +a15801 = 15801 +a15802 = 15802 +a15803 = 15803 +a15804 = 15804 +a15805 = 15805 +a15806 = 15806 +a15807 = 15807 +a15808 = 15808 +a15809 = 15809 +a15810 = 15810 +a15811 = 15811 +a15812 = 15812 +a15813 = 15813 +a15814 = 15814 +a15815 = 15815 +a15816 = 15816 +a15817 = 15817 +a15818 = 15818 +a15819 = 15819 +a15820 = 15820 +a15821 = 15821 +a15822 = 15822 +a15823 = 15823 +a15824 = 15824 +a15825 = 15825 +a15826 = 15826 +a15827 = 15827 +a15828 = 15828 +a15829 = 15829 +a15830 = 15830 +a15831 = 15831 +a15832 = 15832 +a15833 = 15833 +a15834 = 15834 +a15835 = 15835 +a15836 = 15836 +a15837 = 15837 +a15838 = 15838 +a15839 = 15839 +a15840 = 15840 +a15841 = 15841 +a15842 = 15842 +a15843 = 15843 +a15844 = 15844 +a15845 = 15845 +a15846 = 15846 +a15847 = 15847 +a15848 = 15848 +a15849 = 15849 +a15850 = 15850 +a15851 = 15851 +a15852 = 15852 +a15853 = 15853 +a15854 = 15854 +a15855 = 15855 +a15856 = 15856 +a15857 = 15857 +a15858 = 15858 +a15859 = 15859 +a15860 = 15860 +a15861 = 15861 +a15862 = 15862 +a15863 = 15863 +a15864 = 15864 +a15865 = 15865 +a15866 = 15866 +a15867 = 15867 +a15868 = 15868 +a15869 = 15869 +a15870 = 15870 +a15871 = 15871 +a15872 = 15872 +a15873 = 15873 +a15874 = 15874 +a15875 = 15875 +a15876 = 15876 +a15877 = 15877 +a15878 = 15878 +a15879 = 15879 +a15880 = 15880 +a15881 = 15881 +a15882 = 15882 +a15883 = 15883 +a15884 = 15884 +a15885 = 15885 +a15886 = 15886 +a15887 = 15887 +a15888 = 15888 +a15889 = 15889 +a15890 = 15890 +a15891 = 15891 +a15892 = 15892 +a15893 = 15893 +a15894 = 15894 +a15895 = 15895 +a15896 = 15896 +a15897 = 15897 +a15898 = 15898 +a15899 = 15899 +a15900 = 15900 +a15901 = 15901 +a15902 = 15902 +a15903 = 15903 +a15904 = 15904 +a15905 = 15905 +a15906 = 15906 +a15907 = 15907 +a15908 = 15908 +a15909 = 15909 +a15910 = 15910 +a15911 = 15911 +a15912 = 15912 +a15913 = 15913 +a15914 = 15914 +a15915 = 15915 +a15916 = 15916 +a15917 = 15917 +a15918 = 15918 +a15919 = 15919 +a15920 = 15920 +a15921 = 15921 +a15922 = 15922 +a15923 = 15923 +a15924 = 15924 +a15925 = 15925 +a15926 = 15926 +a15927 = 15927 +a15928 = 15928 +a15929 = 15929 +a15930 = 15930 +a15931 = 15931 +a15932 = 15932 +a15933 = 15933 +a15934 = 15934 +a15935 = 15935 +a15936 = 15936 +a15937 = 15937 +a15938 = 15938 +a15939 = 15939 +a15940 = 15940 +a15941 = 15941 +a15942 = 15942 +a15943 = 15943 +a15944 = 15944 +a15945 = 15945 +a15946 = 15946 +a15947 = 15947 +a15948 = 15948 +a15949 = 15949 +a15950 = 15950 +a15951 = 15951 +a15952 = 15952 +a15953 = 15953 +a15954 = 15954 +a15955 = 15955 +a15956 = 15956 +a15957 = 15957 +a15958 = 15958 +a15959 = 15959 +a15960 = 15960 +a15961 = 15961 +a15962 = 15962 +a15963 = 15963 +a15964 = 15964 +a15965 = 15965 +a15966 = 15966 +a15967 = 15967 +a15968 = 15968 +a15969 = 15969 +a15970 = 15970 +a15971 = 15971 +a15972 = 15972 +a15973 = 15973 +a15974 = 15974 +a15975 = 15975 +a15976 = 15976 +a15977 = 15977 +a15978 = 15978 +a15979 = 15979 +a15980 = 15980 +a15981 = 15981 +a15982 = 15982 +a15983 = 15983 +a15984 = 15984 +a15985 = 15985 +a15986 = 15986 +a15987 = 15987 +a15988 = 15988 +a15989 = 15989 +a15990 = 15990 +a15991 = 15991 +a15992 = 15992 +a15993 = 15993 +a15994 = 15994 +a15995 = 15995 +a15996 = 15996 +a15997 = 15997 +a15998 = 15998 +a15999 = 15999 +a16000 = 16000 +a16001 = 16001 +a16002 = 16002 +a16003 = 16003 +a16004 = 16004 +a16005 = 16005 +a16006 = 16006 +a16007 = 16007 +a16008 = 16008 +a16009 = 16009 +a16010 = 16010 +a16011 = 16011 +a16012 = 16012 +a16013 = 16013 +a16014 = 16014 +a16015 = 16015 +a16016 = 16016 +a16017 = 16017 +a16018 = 16018 +a16019 = 16019 +a16020 = 16020 +a16021 = 16021 +a16022 = 16022 +a16023 = 16023 +a16024 = 16024 +a16025 = 16025 +a16026 = 16026 +a16027 = 16027 +a16028 = 16028 +a16029 = 16029 +a16030 = 16030 +a16031 = 16031 +a16032 = 16032 +a16033 = 16033 +a16034 = 16034 +a16035 = 16035 +a16036 = 16036 +a16037 = 16037 +a16038 = 16038 +a16039 = 16039 +a16040 = 16040 +a16041 = 16041 +a16042 = 16042 +a16043 = 16043 +a16044 = 16044 +a16045 = 16045 +a16046 = 16046 +a16047 = 16047 +a16048 = 16048 +a16049 = 16049 +a16050 = 16050 +a16051 = 16051 +a16052 = 16052 +a16053 = 16053 +a16054 = 16054 +a16055 = 16055 +a16056 = 16056 +a16057 = 16057 +a16058 = 16058 +a16059 = 16059 +a16060 = 16060 +a16061 = 16061 +a16062 = 16062 +a16063 = 16063 +a16064 = 16064 +a16065 = 16065 +a16066 = 16066 +a16067 = 16067 +a16068 = 16068 +a16069 = 16069 +a16070 = 16070 +a16071 = 16071 +a16072 = 16072 +a16073 = 16073 +a16074 = 16074 +a16075 = 16075 +a16076 = 16076 +a16077 = 16077 +a16078 = 16078 +a16079 = 16079 +a16080 = 16080 +a16081 = 16081 +a16082 = 16082 +a16083 = 16083 +a16084 = 16084 +a16085 = 16085 +a16086 = 16086 +a16087 = 16087 +a16088 = 16088 +a16089 = 16089 +a16090 = 16090 +a16091 = 16091 +a16092 = 16092 +a16093 = 16093 +a16094 = 16094 +a16095 = 16095 +a16096 = 16096 +a16097 = 16097 +a16098 = 16098 +a16099 = 16099 +a16100 = 16100 +a16101 = 16101 +a16102 = 16102 +a16103 = 16103 +a16104 = 16104 +a16105 = 16105 +a16106 = 16106 +a16107 = 16107 +a16108 = 16108 +a16109 = 16109 +a16110 = 16110 +a16111 = 16111 +a16112 = 16112 +a16113 = 16113 +a16114 = 16114 +a16115 = 16115 +a16116 = 16116 +a16117 = 16117 +a16118 = 16118 +a16119 = 16119 +a16120 = 16120 +a16121 = 16121 +a16122 = 16122 +a16123 = 16123 +a16124 = 16124 +a16125 = 16125 +a16126 = 16126 +a16127 = 16127 +a16128 = 16128 +a16129 = 16129 +a16130 = 16130 +a16131 = 16131 +a16132 = 16132 +a16133 = 16133 +a16134 = 16134 +a16135 = 16135 +a16136 = 16136 +a16137 = 16137 +a16138 = 16138 +a16139 = 16139 +a16140 = 16140 +a16141 = 16141 +a16142 = 16142 +a16143 = 16143 +a16144 = 16144 +a16145 = 16145 +a16146 = 16146 +a16147 = 16147 +a16148 = 16148 +a16149 = 16149 +a16150 = 16150 +a16151 = 16151 +a16152 = 16152 +a16153 = 16153 +a16154 = 16154 +a16155 = 16155 +a16156 = 16156 +a16157 = 16157 +a16158 = 16158 +a16159 = 16159 +a16160 = 16160 +a16161 = 16161 +a16162 = 16162 +a16163 = 16163 +a16164 = 16164 +a16165 = 16165 +a16166 = 16166 +a16167 = 16167 +a16168 = 16168 +a16169 = 16169 +a16170 = 16170 +a16171 = 16171 +a16172 = 16172 +a16173 = 16173 +a16174 = 16174 +a16175 = 16175 +a16176 = 16176 +a16177 = 16177 +a16178 = 16178 +a16179 = 16179 +a16180 = 16180 +a16181 = 16181 +a16182 = 16182 +a16183 = 16183 +a16184 = 16184 +a16185 = 16185 +a16186 = 16186 +a16187 = 16187 +a16188 = 16188 +a16189 = 16189 +a16190 = 16190 +a16191 = 16191 +a16192 = 16192 +a16193 = 16193 +a16194 = 16194 +a16195 = 16195 +a16196 = 16196 +a16197 = 16197 +a16198 = 16198 +a16199 = 16199 +a16200 = 16200 +a16201 = 16201 +a16202 = 16202 +a16203 = 16203 +a16204 = 16204 +a16205 = 16205 +a16206 = 16206 +a16207 = 16207 +a16208 = 16208 +a16209 = 16209 +a16210 = 16210 +a16211 = 16211 +a16212 = 16212 +a16213 = 16213 +a16214 = 16214 +a16215 = 16215 +a16216 = 16216 +a16217 = 16217 +a16218 = 16218 +a16219 = 16219 +a16220 = 16220 +a16221 = 16221 +a16222 = 16222 +a16223 = 16223 +a16224 = 16224 +a16225 = 16225 +a16226 = 16226 +a16227 = 16227 +a16228 = 16228 +a16229 = 16229 +a16230 = 16230 +a16231 = 16231 +a16232 = 16232 +a16233 = 16233 +a16234 = 16234 +a16235 = 16235 +a16236 = 16236 +a16237 = 16237 +a16238 = 16238 +a16239 = 16239 +a16240 = 16240 +a16241 = 16241 +a16242 = 16242 +a16243 = 16243 +a16244 = 16244 +a16245 = 16245 +a16246 = 16246 +a16247 = 16247 +a16248 = 16248 +a16249 = 16249 +a16250 = 16250 +a16251 = 16251 +a16252 = 16252 +a16253 = 16253 +a16254 = 16254 +a16255 = 16255 +a16256 = 16256 +a16257 = 16257 +a16258 = 16258 +a16259 = 16259 +a16260 = 16260 +a16261 = 16261 +a16262 = 16262 +a16263 = 16263 +a16264 = 16264 +a16265 = 16265 +a16266 = 16266 +a16267 = 16267 +a16268 = 16268 +a16269 = 16269 +a16270 = 16270 +a16271 = 16271 +a16272 = 16272 +a16273 = 16273 +a16274 = 16274 +a16275 = 16275 +a16276 = 16276 +a16277 = 16277 +a16278 = 16278 +a16279 = 16279 +a16280 = 16280 +a16281 = 16281 +a16282 = 16282 +a16283 = 16283 +a16284 = 16284 +a16285 = 16285 +a16286 = 16286 +a16287 = 16287 +a16288 = 16288 +a16289 = 16289 +a16290 = 16290 +a16291 = 16291 +a16292 = 16292 +a16293 = 16293 +a16294 = 16294 +a16295 = 16295 +a16296 = 16296 +a16297 = 16297 +a16298 = 16298 +a16299 = 16299 +a16300 = 16300 +a16301 = 16301 +a16302 = 16302 +a16303 = 16303 +a16304 = 16304 +a16305 = 16305 +a16306 = 16306 +a16307 = 16307 +a16308 = 16308 +a16309 = 16309 +a16310 = 16310 +a16311 = 16311 +a16312 = 16312 +a16313 = 16313 +a16314 = 16314 +a16315 = 16315 +a16316 = 16316 +a16317 = 16317 +a16318 = 16318 +a16319 = 16319 +a16320 = 16320 +a16321 = 16321 +a16322 = 16322 +a16323 = 16323 +a16324 = 16324 +a16325 = 16325 +a16326 = 16326 +a16327 = 16327 +a16328 = 16328 +a16329 = 16329 +a16330 = 16330 +a16331 = 16331 +a16332 = 16332 +a16333 = 16333 +a16334 = 16334 +a16335 = 16335 +a16336 = 16336 +a16337 = 16337 +a16338 = 16338 +a16339 = 16339 +a16340 = 16340 +a16341 = 16341 +a16342 = 16342 +a16343 = 16343 +a16344 = 16344 +a16345 = 16345 +a16346 = 16346 +a16347 = 16347 +a16348 = 16348 +a16349 = 16349 +a16350 = 16350 +a16351 = 16351 +a16352 = 16352 +a16353 = 16353 +a16354 = 16354 +a16355 = 16355 +a16356 = 16356 +a16357 = 16357 +a16358 = 16358 +a16359 = 16359 +a16360 = 16360 +a16361 = 16361 +a16362 = 16362 +a16363 = 16363 +a16364 = 16364 +a16365 = 16365 +a16366 = 16366 +a16367 = 16367 +a16368 = 16368 +a16369 = 16369 +a16370 = 16370 +a16371 = 16371 +a16372 = 16372 +a16373 = 16373 +a16374 = 16374 +a16375 = 16375 +a16376 = 16376 +a16377 = 16377 +a16378 = 16378 +a16379 = 16379 +a16380 = 16380 +a16381 = 16381 +a16382 = 16382 +a16383 = 16383 +a16384 = 16384 +a16385 = 16385 +a16386 = 16386 +a16387 = 16387 +a16388 = 16388 +a16389 = 16389 +a16390 = 16390 +a16391 = 16391 +a16392 = 16392 +a16393 = 16393 +a16394 = 16394 +a16395 = 16395 +a16396 = 16396 +a16397 = 16397 +a16398 = 16398 +a16399 = 16399 +a16400 = 16400 +a16401 = 16401 +a16402 = 16402 +a16403 = 16403 +a16404 = 16404 +a16405 = 16405 +a16406 = 16406 +a16407 = 16407 +a16408 = 16408 +a16409 = 16409 +a16410 = 16410 +a16411 = 16411 +a16412 = 16412 +a16413 = 16413 +a16414 = 16414 +a16415 = 16415 +a16416 = 16416 +a16417 = 16417 +a16418 = 16418 +a16419 = 16419 +a16420 = 16420 +a16421 = 16421 +a16422 = 16422 +a16423 = 16423 +a16424 = 16424 +a16425 = 16425 +a16426 = 16426 +a16427 = 16427 +a16428 = 16428 +a16429 = 16429 +a16430 = 16430 +a16431 = 16431 +a16432 = 16432 +a16433 = 16433 +a16434 = 16434 +a16435 = 16435 +a16436 = 16436 +a16437 = 16437 +a16438 = 16438 +a16439 = 16439 +a16440 = 16440 +a16441 = 16441 +a16442 = 16442 +a16443 = 16443 +a16444 = 16444 +a16445 = 16445 +a16446 = 16446 +a16447 = 16447 +a16448 = 16448 +a16449 = 16449 +a16450 = 16450 +a16451 = 16451 +a16452 = 16452 +a16453 = 16453 +a16454 = 16454 +a16455 = 16455 +a16456 = 16456 +a16457 = 16457 +a16458 = 16458 +a16459 = 16459 +a16460 = 16460 +a16461 = 16461 +a16462 = 16462 +a16463 = 16463 +a16464 = 16464 +a16465 = 16465 +a16466 = 16466 +a16467 = 16467 +a16468 = 16468 +a16469 = 16469 +a16470 = 16470 +a16471 = 16471 +a16472 = 16472 +a16473 = 16473 +a16474 = 16474 +a16475 = 16475 +a16476 = 16476 +a16477 = 16477 +a16478 = 16478 +a16479 = 16479 +a16480 = 16480 +a16481 = 16481 +a16482 = 16482 +a16483 = 16483 +a16484 = 16484 +a16485 = 16485 +a16486 = 16486 +a16487 = 16487 +a16488 = 16488 +a16489 = 16489 +a16490 = 16490 +a16491 = 16491 +a16492 = 16492 +a16493 = 16493 +a16494 = 16494 +a16495 = 16495 +a16496 = 16496 +a16497 = 16497 +a16498 = 16498 +a16499 = 16499 +a16500 = 16500 +a16501 = 16501 +a16502 = 16502 +a16503 = 16503 +a16504 = 16504 +a16505 = 16505 +a16506 = 16506 +a16507 = 16507 +a16508 = 16508 +a16509 = 16509 +a16510 = 16510 +a16511 = 16511 +a16512 = 16512 +a16513 = 16513 +a16514 = 16514 +a16515 = 16515 +a16516 = 16516 +a16517 = 16517 +a16518 = 16518 +a16519 = 16519 +a16520 = 16520 +a16521 = 16521 +a16522 = 16522 +a16523 = 16523 +a16524 = 16524 +a16525 = 16525 +a16526 = 16526 +a16527 = 16527 +a16528 = 16528 +a16529 = 16529 +a16530 = 16530 +a16531 = 16531 +a16532 = 16532 +a16533 = 16533 +a16534 = 16534 +a16535 = 16535 +a16536 = 16536 +a16537 = 16537 +a16538 = 16538 +a16539 = 16539 +a16540 = 16540 +a16541 = 16541 +a16542 = 16542 +a16543 = 16543 +a16544 = 16544 +a16545 = 16545 +a16546 = 16546 +a16547 = 16547 +a16548 = 16548 +a16549 = 16549 +a16550 = 16550 +a16551 = 16551 +a16552 = 16552 +a16553 = 16553 +a16554 = 16554 +a16555 = 16555 +a16556 = 16556 +a16557 = 16557 +a16558 = 16558 +a16559 = 16559 +a16560 = 16560 +a16561 = 16561 +a16562 = 16562 +a16563 = 16563 +a16564 = 16564 +a16565 = 16565 +a16566 = 16566 +a16567 = 16567 +a16568 = 16568 +a16569 = 16569 +a16570 = 16570 +a16571 = 16571 +a16572 = 16572 +a16573 = 16573 +a16574 = 16574 +a16575 = 16575 +a16576 = 16576 +a16577 = 16577 +a16578 = 16578 +a16579 = 16579 +a16580 = 16580 +a16581 = 16581 +a16582 = 16582 +a16583 = 16583 +a16584 = 16584 +a16585 = 16585 +a16586 = 16586 +a16587 = 16587 +a16588 = 16588 +a16589 = 16589 +a16590 = 16590 +a16591 = 16591 +a16592 = 16592 +a16593 = 16593 +a16594 = 16594 +a16595 = 16595 +a16596 = 16596 +a16597 = 16597 +a16598 = 16598 +a16599 = 16599 +a16600 = 16600 +a16601 = 16601 +a16602 = 16602 +a16603 = 16603 +a16604 = 16604 +a16605 = 16605 +a16606 = 16606 +a16607 = 16607 +a16608 = 16608 +a16609 = 16609 +a16610 = 16610 +a16611 = 16611 +a16612 = 16612 +a16613 = 16613 +a16614 = 16614 +a16615 = 16615 +a16616 = 16616 +a16617 = 16617 +a16618 = 16618 +a16619 = 16619 +a16620 = 16620 +a16621 = 16621 +a16622 = 16622 +a16623 = 16623 +a16624 = 16624 +a16625 = 16625 +a16626 = 16626 +a16627 = 16627 +a16628 = 16628 +a16629 = 16629 +a16630 = 16630 +a16631 = 16631 +a16632 = 16632 +a16633 = 16633 +a16634 = 16634 +a16635 = 16635 +a16636 = 16636 +a16637 = 16637 +a16638 = 16638 +a16639 = 16639 +a16640 = 16640 +a16641 = 16641 +a16642 = 16642 +a16643 = 16643 +a16644 = 16644 +a16645 = 16645 +a16646 = 16646 +a16647 = 16647 +a16648 = 16648 +a16649 = 16649 +a16650 = 16650 +a16651 = 16651 +a16652 = 16652 +a16653 = 16653 +a16654 = 16654 +a16655 = 16655 +a16656 = 16656 +a16657 = 16657 +a16658 = 16658 +a16659 = 16659 +a16660 = 16660 +a16661 = 16661 +a16662 = 16662 +a16663 = 16663 +a16664 = 16664 +a16665 = 16665 +a16666 = 16666 +a16667 = 16667 +a16668 = 16668 +a16669 = 16669 +a16670 = 16670 +a16671 = 16671 +a16672 = 16672 +a16673 = 16673 +a16674 = 16674 +a16675 = 16675 +a16676 = 16676 +a16677 = 16677 +a16678 = 16678 +a16679 = 16679 +a16680 = 16680 +a16681 = 16681 +a16682 = 16682 +a16683 = 16683 +a16684 = 16684 +a16685 = 16685 +a16686 = 16686 +a16687 = 16687 +a16688 = 16688 +a16689 = 16689 +a16690 = 16690 +a16691 = 16691 +a16692 = 16692 +a16693 = 16693 +a16694 = 16694 +a16695 = 16695 +a16696 = 16696 +a16697 = 16697 +a16698 = 16698 +a16699 = 16699 +a16700 = 16700 +a16701 = 16701 +a16702 = 16702 +a16703 = 16703 +a16704 = 16704 +a16705 = 16705 +a16706 = 16706 +a16707 = 16707 +a16708 = 16708 +a16709 = 16709 +a16710 = 16710 +a16711 = 16711 +a16712 = 16712 +a16713 = 16713 +a16714 = 16714 +a16715 = 16715 +a16716 = 16716 +a16717 = 16717 +a16718 = 16718 +a16719 = 16719 +a16720 = 16720 +a16721 = 16721 +a16722 = 16722 +a16723 = 16723 +a16724 = 16724 +a16725 = 16725 +a16726 = 16726 +a16727 = 16727 +a16728 = 16728 +a16729 = 16729 +a16730 = 16730 +a16731 = 16731 +a16732 = 16732 +a16733 = 16733 +a16734 = 16734 +a16735 = 16735 +a16736 = 16736 +a16737 = 16737 +a16738 = 16738 +a16739 = 16739 +a16740 = 16740 +a16741 = 16741 +a16742 = 16742 +a16743 = 16743 +a16744 = 16744 +a16745 = 16745 +a16746 = 16746 +a16747 = 16747 +a16748 = 16748 +a16749 = 16749 +a16750 = 16750 +a16751 = 16751 +a16752 = 16752 +a16753 = 16753 +a16754 = 16754 +a16755 = 16755 +a16756 = 16756 +a16757 = 16757 +a16758 = 16758 +a16759 = 16759 +a16760 = 16760 +a16761 = 16761 +a16762 = 16762 +a16763 = 16763 +a16764 = 16764 +a16765 = 16765 +a16766 = 16766 +a16767 = 16767 +a16768 = 16768 +a16769 = 16769 +a16770 = 16770 +a16771 = 16771 +a16772 = 16772 +a16773 = 16773 +a16774 = 16774 +a16775 = 16775 +a16776 = 16776 +a16777 = 16777 +a16778 = 16778 +a16779 = 16779 +a16780 = 16780 +a16781 = 16781 +a16782 = 16782 +a16783 = 16783 +a16784 = 16784 +a16785 = 16785 +a16786 = 16786 +a16787 = 16787 +a16788 = 16788 +a16789 = 16789 +a16790 = 16790 +a16791 = 16791 +a16792 = 16792 +a16793 = 16793 +a16794 = 16794 +a16795 = 16795 +a16796 = 16796 +a16797 = 16797 +a16798 = 16798 +a16799 = 16799 +a16800 = 16800 +a16801 = 16801 +a16802 = 16802 +a16803 = 16803 +a16804 = 16804 +a16805 = 16805 +a16806 = 16806 +a16807 = 16807 +a16808 = 16808 +a16809 = 16809 +a16810 = 16810 +a16811 = 16811 +a16812 = 16812 +a16813 = 16813 +a16814 = 16814 +a16815 = 16815 +a16816 = 16816 +a16817 = 16817 +a16818 = 16818 +a16819 = 16819 +a16820 = 16820 +a16821 = 16821 +a16822 = 16822 +a16823 = 16823 +a16824 = 16824 +a16825 = 16825 +a16826 = 16826 +a16827 = 16827 +a16828 = 16828 +a16829 = 16829 +a16830 = 16830 +a16831 = 16831 +a16832 = 16832 +a16833 = 16833 +a16834 = 16834 +a16835 = 16835 +a16836 = 16836 +a16837 = 16837 +a16838 = 16838 +a16839 = 16839 +a16840 = 16840 +a16841 = 16841 +a16842 = 16842 +a16843 = 16843 +a16844 = 16844 +a16845 = 16845 +a16846 = 16846 +a16847 = 16847 +a16848 = 16848 +a16849 = 16849 +a16850 = 16850 +a16851 = 16851 +a16852 = 16852 +a16853 = 16853 +a16854 = 16854 +a16855 = 16855 +a16856 = 16856 +a16857 = 16857 +a16858 = 16858 +a16859 = 16859 +a16860 = 16860 +a16861 = 16861 +a16862 = 16862 +a16863 = 16863 +a16864 = 16864 +a16865 = 16865 +a16866 = 16866 +a16867 = 16867 +a16868 = 16868 +a16869 = 16869 +a16870 = 16870 +a16871 = 16871 +a16872 = 16872 +a16873 = 16873 +a16874 = 16874 +a16875 = 16875 +a16876 = 16876 +a16877 = 16877 +a16878 = 16878 +a16879 = 16879 +a16880 = 16880 +a16881 = 16881 +a16882 = 16882 +a16883 = 16883 +a16884 = 16884 +a16885 = 16885 +a16886 = 16886 +a16887 = 16887 +a16888 = 16888 +a16889 = 16889 +a16890 = 16890 +a16891 = 16891 +a16892 = 16892 +a16893 = 16893 +a16894 = 16894 +a16895 = 16895 +a16896 = 16896 +a16897 = 16897 +a16898 = 16898 +a16899 = 16899 +a16900 = 16900 +a16901 = 16901 +a16902 = 16902 +a16903 = 16903 +a16904 = 16904 +a16905 = 16905 +a16906 = 16906 +a16907 = 16907 +a16908 = 16908 +a16909 = 16909 +a16910 = 16910 +a16911 = 16911 +a16912 = 16912 +a16913 = 16913 +a16914 = 16914 +a16915 = 16915 +a16916 = 16916 +a16917 = 16917 +a16918 = 16918 +a16919 = 16919 +a16920 = 16920 +a16921 = 16921 +a16922 = 16922 +a16923 = 16923 +a16924 = 16924 +a16925 = 16925 +a16926 = 16926 +a16927 = 16927 +a16928 = 16928 +a16929 = 16929 +a16930 = 16930 +a16931 = 16931 +a16932 = 16932 +a16933 = 16933 +a16934 = 16934 +a16935 = 16935 +a16936 = 16936 +a16937 = 16937 +a16938 = 16938 +a16939 = 16939 +a16940 = 16940 +a16941 = 16941 +a16942 = 16942 +a16943 = 16943 +a16944 = 16944 +a16945 = 16945 +a16946 = 16946 +a16947 = 16947 +a16948 = 16948 +a16949 = 16949 +a16950 = 16950 +a16951 = 16951 +a16952 = 16952 +a16953 = 16953 +a16954 = 16954 +a16955 = 16955 +a16956 = 16956 +a16957 = 16957 +a16958 = 16958 +a16959 = 16959 +a16960 = 16960 +a16961 = 16961 +a16962 = 16962 +a16963 = 16963 +a16964 = 16964 +a16965 = 16965 +a16966 = 16966 +a16967 = 16967 +a16968 = 16968 +a16969 = 16969 +a16970 = 16970 +a16971 = 16971 +a16972 = 16972 +a16973 = 16973 +a16974 = 16974 +a16975 = 16975 +a16976 = 16976 +a16977 = 16977 +a16978 = 16978 +a16979 = 16979 +a16980 = 16980 +a16981 = 16981 +a16982 = 16982 +a16983 = 16983 +a16984 = 16984 +a16985 = 16985 +a16986 = 16986 +a16987 = 16987 +a16988 = 16988 +a16989 = 16989 +a16990 = 16990 +a16991 = 16991 +a16992 = 16992 +a16993 = 16993 +a16994 = 16994 +a16995 = 16995 +a16996 = 16996 +a16997 = 16997 +a16998 = 16998 +a16999 = 16999 +a17000 = 17000 +a17001 = 17001 +a17002 = 17002 +a17003 = 17003 +a17004 = 17004 +a17005 = 17005 +a17006 = 17006 +a17007 = 17007 +a17008 = 17008 +a17009 = 17009 +a17010 = 17010 +a17011 = 17011 +a17012 = 17012 +a17013 = 17013 +a17014 = 17014 +a17015 = 17015 +a17016 = 17016 +a17017 = 17017 +a17018 = 17018 +a17019 = 17019 +a17020 = 17020 +a17021 = 17021 +a17022 = 17022 +a17023 = 17023 +a17024 = 17024 +a17025 = 17025 +a17026 = 17026 +a17027 = 17027 +a17028 = 17028 +a17029 = 17029 +a17030 = 17030 +a17031 = 17031 +a17032 = 17032 +a17033 = 17033 +a17034 = 17034 +a17035 = 17035 +a17036 = 17036 +a17037 = 17037 +a17038 = 17038 +a17039 = 17039 +a17040 = 17040 +a17041 = 17041 +a17042 = 17042 +a17043 = 17043 +a17044 = 17044 +a17045 = 17045 +a17046 = 17046 +a17047 = 17047 +a17048 = 17048 +a17049 = 17049 +a17050 = 17050 +a17051 = 17051 +a17052 = 17052 +a17053 = 17053 +a17054 = 17054 +a17055 = 17055 +a17056 = 17056 +a17057 = 17057 +a17058 = 17058 +a17059 = 17059 +a17060 = 17060 +a17061 = 17061 +a17062 = 17062 +a17063 = 17063 +a17064 = 17064 +a17065 = 17065 +a17066 = 17066 +a17067 = 17067 +a17068 = 17068 +a17069 = 17069 +a17070 = 17070 +a17071 = 17071 +a17072 = 17072 +a17073 = 17073 +a17074 = 17074 +a17075 = 17075 +a17076 = 17076 +a17077 = 17077 +a17078 = 17078 +a17079 = 17079 +a17080 = 17080 +a17081 = 17081 +a17082 = 17082 +a17083 = 17083 +a17084 = 17084 +a17085 = 17085 +a17086 = 17086 +a17087 = 17087 +a17088 = 17088 +a17089 = 17089 +a17090 = 17090 +a17091 = 17091 +a17092 = 17092 +a17093 = 17093 +a17094 = 17094 +a17095 = 17095 +a17096 = 17096 +a17097 = 17097 +a17098 = 17098 +a17099 = 17099 +a17100 = 17100 +a17101 = 17101 +a17102 = 17102 +a17103 = 17103 +a17104 = 17104 +a17105 = 17105 +a17106 = 17106 +a17107 = 17107 +a17108 = 17108 +a17109 = 17109 +a17110 = 17110 +a17111 = 17111 +a17112 = 17112 +a17113 = 17113 +a17114 = 17114 +a17115 = 17115 +a17116 = 17116 +a17117 = 17117 +a17118 = 17118 +a17119 = 17119 +a17120 = 17120 +a17121 = 17121 +a17122 = 17122 +a17123 = 17123 +a17124 = 17124 +a17125 = 17125 +a17126 = 17126 +a17127 = 17127 +a17128 = 17128 +a17129 = 17129 +a17130 = 17130 +a17131 = 17131 +a17132 = 17132 +a17133 = 17133 +a17134 = 17134 +a17135 = 17135 +a17136 = 17136 +a17137 = 17137 +a17138 = 17138 +a17139 = 17139 +a17140 = 17140 +a17141 = 17141 +a17142 = 17142 +a17143 = 17143 +a17144 = 17144 +a17145 = 17145 +a17146 = 17146 +a17147 = 17147 +a17148 = 17148 +a17149 = 17149 +a17150 = 17150 +a17151 = 17151 +a17152 = 17152 +a17153 = 17153 +a17154 = 17154 +a17155 = 17155 +a17156 = 17156 +a17157 = 17157 +a17158 = 17158 +a17159 = 17159 +a17160 = 17160 +a17161 = 17161 +a17162 = 17162 +a17163 = 17163 +a17164 = 17164 +a17165 = 17165 +a17166 = 17166 +a17167 = 17167 +a17168 = 17168 +a17169 = 17169 +a17170 = 17170 +a17171 = 17171 +a17172 = 17172 +a17173 = 17173 +a17174 = 17174 +a17175 = 17175 +a17176 = 17176 +a17177 = 17177 +a17178 = 17178 +a17179 = 17179 +a17180 = 17180 +a17181 = 17181 +a17182 = 17182 +a17183 = 17183 +a17184 = 17184 +a17185 = 17185 +a17186 = 17186 +a17187 = 17187 +a17188 = 17188 +a17189 = 17189 +a17190 = 17190 +a17191 = 17191 +a17192 = 17192 +a17193 = 17193 +a17194 = 17194 +a17195 = 17195 +a17196 = 17196 +a17197 = 17197 +a17198 = 17198 +a17199 = 17199 +a17200 = 17200 +a17201 = 17201 +a17202 = 17202 +a17203 = 17203 +a17204 = 17204 +a17205 = 17205 +a17206 = 17206 +a17207 = 17207 +a17208 = 17208 +a17209 = 17209 +a17210 = 17210 +a17211 = 17211 +a17212 = 17212 +a17213 = 17213 +a17214 = 17214 +a17215 = 17215 +a17216 = 17216 +a17217 = 17217 +a17218 = 17218 +a17219 = 17219 +a17220 = 17220 +a17221 = 17221 +a17222 = 17222 +a17223 = 17223 +a17224 = 17224 +a17225 = 17225 +a17226 = 17226 +a17227 = 17227 +a17228 = 17228 +a17229 = 17229 +a17230 = 17230 +a17231 = 17231 +a17232 = 17232 +a17233 = 17233 +a17234 = 17234 +a17235 = 17235 +a17236 = 17236 +a17237 = 17237 +a17238 = 17238 +a17239 = 17239 +a17240 = 17240 +a17241 = 17241 +a17242 = 17242 +a17243 = 17243 +a17244 = 17244 +a17245 = 17245 +a17246 = 17246 +a17247 = 17247 +a17248 = 17248 +a17249 = 17249 +a17250 = 17250 +a17251 = 17251 +a17252 = 17252 +a17253 = 17253 +a17254 = 17254 +a17255 = 17255 +a17256 = 17256 +a17257 = 17257 +a17258 = 17258 +a17259 = 17259 +a17260 = 17260 +a17261 = 17261 +a17262 = 17262 +a17263 = 17263 +a17264 = 17264 +a17265 = 17265 +a17266 = 17266 +a17267 = 17267 +a17268 = 17268 +a17269 = 17269 +a17270 = 17270 +a17271 = 17271 +a17272 = 17272 +a17273 = 17273 +a17274 = 17274 +a17275 = 17275 +a17276 = 17276 +a17277 = 17277 +a17278 = 17278 +a17279 = 17279 +a17280 = 17280 +a17281 = 17281 +a17282 = 17282 +a17283 = 17283 +a17284 = 17284 +a17285 = 17285 +a17286 = 17286 +a17287 = 17287 +a17288 = 17288 +a17289 = 17289 +a17290 = 17290 +a17291 = 17291 +a17292 = 17292 +a17293 = 17293 +a17294 = 17294 +a17295 = 17295 +a17296 = 17296 +a17297 = 17297 +a17298 = 17298 +a17299 = 17299 +a17300 = 17300 +a17301 = 17301 +a17302 = 17302 +a17303 = 17303 +a17304 = 17304 +a17305 = 17305 +a17306 = 17306 +a17307 = 17307 +a17308 = 17308 +a17309 = 17309 +a17310 = 17310 +a17311 = 17311 +a17312 = 17312 +a17313 = 17313 +a17314 = 17314 +a17315 = 17315 +a17316 = 17316 +a17317 = 17317 +a17318 = 17318 +a17319 = 17319 +a17320 = 17320 +a17321 = 17321 +a17322 = 17322 +a17323 = 17323 +a17324 = 17324 +a17325 = 17325 +a17326 = 17326 +a17327 = 17327 +a17328 = 17328 +a17329 = 17329 +a17330 = 17330 +a17331 = 17331 +a17332 = 17332 +a17333 = 17333 +a17334 = 17334 +a17335 = 17335 +a17336 = 17336 +a17337 = 17337 +a17338 = 17338 +a17339 = 17339 +a17340 = 17340 +a17341 = 17341 +a17342 = 17342 +a17343 = 17343 +a17344 = 17344 +a17345 = 17345 +a17346 = 17346 +a17347 = 17347 +a17348 = 17348 +a17349 = 17349 +a17350 = 17350 +a17351 = 17351 +a17352 = 17352 +a17353 = 17353 +a17354 = 17354 +a17355 = 17355 +a17356 = 17356 +a17357 = 17357 +a17358 = 17358 +a17359 = 17359 +a17360 = 17360 +a17361 = 17361 +a17362 = 17362 +a17363 = 17363 +a17364 = 17364 +a17365 = 17365 +a17366 = 17366 +a17367 = 17367 +a17368 = 17368 +a17369 = 17369 +a17370 = 17370 +a17371 = 17371 +a17372 = 17372 +a17373 = 17373 +a17374 = 17374 +a17375 = 17375 +a17376 = 17376 +a17377 = 17377 +a17378 = 17378 +a17379 = 17379 +a17380 = 17380 +a17381 = 17381 +a17382 = 17382 +a17383 = 17383 +a17384 = 17384 +a17385 = 17385 +a17386 = 17386 +a17387 = 17387 +a17388 = 17388 +a17389 = 17389 +a17390 = 17390 +a17391 = 17391 +a17392 = 17392 +a17393 = 17393 +a17394 = 17394 +a17395 = 17395 +a17396 = 17396 +a17397 = 17397 +a17398 = 17398 +a17399 = 17399 +a17400 = 17400 +a17401 = 17401 +a17402 = 17402 +a17403 = 17403 +a17404 = 17404 +a17405 = 17405 +a17406 = 17406 +a17407 = 17407 +a17408 = 17408 +a17409 = 17409 +a17410 = 17410 +a17411 = 17411 +a17412 = 17412 +a17413 = 17413 +a17414 = 17414 +a17415 = 17415 +a17416 = 17416 +a17417 = 17417 +a17418 = 17418 +a17419 = 17419 +a17420 = 17420 +a17421 = 17421 +a17422 = 17422 +a17423 = 17423 +a17424 = 17424 +a17425 = 17425 +a17426 = 17426 +a17427 = 17427 +a17428 = 17428 +a17429 = 17429 +a17430 = 17430 +a17431 = 17431 +a17432 = 17432 +a17433 = 17433 +a17434 = 17434 +a17435 = 17435 +a17436 = 17436 +a17437 = 17437 +a17438 = 17438 +a17439 = 17439 +a17440 = 17440 +a17441 = 17441 +a17442 = 17442 +a17443 = 17443 +a17444 = 17444 +a17445 = 17445 +a17446 = 17446 +a17447 = 17447 +a17448 = 17448 +a17449 = 17449 +a17450 = 17450 +a17451 = 17451 +a17452 = 17452 +a17453 = 17453 +a17454 = 17454 +a17455 = 17455 +a17456 = 17456 +a17457 = 17457 +a17458 = 17458 +a17459 = 17459 +a17460 = 17460 +a17461 = 17461 +a17462 = 17462 +a17463 = 17463 +a17464 = 17464 +a17465 = 17465 +a17466 = 17466 +a17467 = 17467 +a17468 = 17468 +a17469 = 17469 +a17470 = 17470 +a17471 = 17471 +a17472 = 17472 +a17473 = 17473 +a17474 = 17474 +a17475 = 17475 +a17476 = 17476 +a17477 = 17477 +a17478 = 17478 +a17479 = 17479 +a17480 = 17480 +a17481 = 17481 +a17482 = 17482 +a17483 = 17483 +a17484 = 17484 +a17485 = 17485 +a17486 = 17486 +a17487 = 17487 +a17488 = 17488 +a17489 = 17489 +a17490 = 17490 +a17491 = 17491 +a17492 = 17492 +a17493 = 17493 +a17494 = 17494 +a17495 = 17495 +a17496 = 17496 +a17497 = 17497 +a17498 = 17498 +a17499 = 17499 +a17500 = 17500 +a17501 = 17501 +a17502 = 17502 +a17503 = 17503 +a17504 = 17504 +a17505 = 17505 +a17506 = 17506 +a17507 = 17507 +a17508 = 17508 +a17509 = 17509 +a17510 = 17510 +a17511 = 17511 +a17512 = 17512 +a17513 = 17513 +a17514 = 17514 +a17515 = 17515 +a17516 = 17516 +a17517 = 17517 +a17518 = 17518 +a17519 = 17519 +a17520 = 17520 +a17521 = 17521 +a17522 = 17522 +a17523 = 17523 +a17524 = 17524 +a17525 = 17525 +a17526 = 17526 +a17527 = 17527 +a17528 = 17528 +a17529 = 17529 +a17530 = 17530 +a17531 = 17531 +a17532 = 17532 +a17533 = 17533 +a17534 = 17534 +a17535 = 17535 +a17536 = 17536 +a17537 = 17537 +a17538 = 17538 +a17539 = 17539 +a17540 = 17540 +a17541 = 17541 +a17542 = 17542 +a17543 = 17543 +a17544 = 17544 +a17545 = 17545 +a17546 = 17546 +a17547 = 17547 +a17548 = 17548 +a17549 = 17549 +a17550 = 17550 +a17551 = 17551 +a17552 = 17552 +a17553 = 17553 +a17554 = 17554 +a17555 = 17555 +a17556 = 17556 +a17557 = 17557 +a17558 = 17558 +a17559 = 17559 +a17560 = 17560 +a17561 = 17561 +a17562 = 17562 +a17563 = 17563 +a17564 = 17564 +a17565 = 17565 +a17566 = 17566 +a17567 = 17567 +a17568 = 17568 +a17569 = 17569 +a17570 = 17570 +a17571 = 17571 +a17572 = 17572 +a17573 = 17573 +a17574 = 17574 +a17575 = 17575 +a17576 = 17576 +a17577 = 17577 +a17578 = 17578 +a17579 = 17579 +a17580 = 17580 +a17581 = 17581 +a17582 = 17582 +a17583 = 17583 +a17584 = 17584 +a17585 = 17585 +a17586 = 17586 +a17587 = 17587 +a17588 = 17588 +a17589 = 17589 +a17590 = 17590 +a17591 = 17591 +a17592 = 17592 +a17593 = 17593 +a17594 = 17594 +a17595 = 17595 +a17596 = 17596 +a17597 = 17597 +a17598 = 17598 +a17599 = 17599 +a17600 = 17600 +a17601 = 17601 +a17602 = 17602 +a17603 = 17603 +a17604 = 17604 +a17605 = 17605 +a17606 = 17606 +a17607 = 17607 +a17608 = 17608 +a17609 = 17609 +a17610 = 17610 +a17611 = 17611 +a17612 = 17612 +a17613 = 17613 +a17614 = 17614 +a17615 = 17615 +a17616 = 17616 +a17617 = 17617 +a17618 = 17618 +a17619 = 17619 +a17620 = 17620 +a17621 = 17621 +a17622 = 17622 +a17623 = 17623 +a17624 = 17624 +a17625 = 17625 +a17626 = 17626 +a17627 = 17627 +a17628 = 17628 +a17629 = 17629 +a17630 = 17630 +a17631 = 17631 +a17632 = 17632 +a17633 = 17633 +a17634 = 17634 +a17635 = 17635 +a17636 = 17636 +a17637 = 17637 +a17638 = 17638 +a17639 = 17639 +a17640 = 17640 +a17641 = 17641 +a17642 = 17642 +a17643 = 17643 +a17644 = 17644 +a17645 = 17645 +a17646 = 17646 +a17647 = 17647 +a17648 = 17648 +a17649 = 17649 +a17650 = 17650 +a17651 = 17651 +a17652 = 17652 +a17653 = 17653 +a17654 = 17654 +a17655 = 17655 +a17656 = 17656 +a17657 = 17657 +a17658 = 17658 +a17659 = 17659 +a17660 = 17660 +a17661 = 17661 +a17662 = 17662 +a17663 = 17663 +a17664 = 17664 +a17665 = 17665 +a17666 = 17666 +a17667 = 17667 +a17668 = 17668 +a17669 = 17669 +a17670 = 17670 +a17671 = 17671 +a17672 = 17672 +a17673 = 17673 +a17674 = 17674 +a17675 = 17675 +a17676 = 17676 +a17677 = 17677 +a17678 = 17678 +a17679 = 17679 +a17680 = 17680 +a17681 = 17681 +a17682 = 17682 +a17683 = 17683 +a17684 = 17684 +a17685 = 17685 +a17686 = 17686 +a17687 = 17687 +a17688 = 17688 +a17689 = 17689 +a17690 = 17690 +a17691 = 17691 +a17692 = 17692 +a17693 = 17693 +a17694 = 17694 +a17695 = 17695 +a17696 = 17696 +a17697 = 17697 +a17698 = 17698 +a17699 = 17699 +a17700 = 17700 +a17701 = 17701 +a17702 = 17702 +a17703 = 17703 +a17704 = 17704 +a17705 = 17705 +a17706 = 17706 +a17707 = 17707 +a17708 = 17708 +a17709 = 17709 +a17710 = 17710 +a17711 = 17711 +a17712 = 17712 +a17713 = 17713 +a17714 = 17714 +a17715 = 17715 +a17716 = 17716 +a17717 = 17717 +a17718 = 17718 +a17719 = 17719 +a17720 = 17720 +a17721 = 17721 +a17722 = 17722 +a17723 = 17723 +a17724 = 17724 +a17725 = 17725 +a17726 = 17726 +a17727 = 17727 +a17728 = 17728 +a17729 = 17729 +a17730 = 17730 +a17731 = 17731 +a17732 = 17732 +a17733 = 17733 +a17734 = 17734 +a17735 = 17735 +a17736 = 17736 +a17737 = 17737 +a17738 = 17738 +a17739 = 17739 +a17740 = 17740 +a17741 = 17741 +a17742 = 17742 +a17743 = 17743 +a17744 = 17744 +a17745 = 17745 +a17746 = 17746 +a17747 = 17747 +a17748 = 17748 +a17749 = 17749 +a17750 = 17750 +a17751 = 17751 +a17752 = 17752 +a17753 = 17753 +a17754 = 17754 +a17755 = 17755 +a17756 = 17756 +a17757 = 17757 +a17758 = 17758 +a17759 = 17759 +a17760 = 17760 +a17761 = 17761 +a17762 = 17762 +a17763 = 17763 +a17764 = 17764 +a17765 = 17765 +a17766 = 17766 +a17767 = 17767 +a17768 = 17768 +a17769 = 17769 +a17770 = 17770 +a17771 = 17771 +a17772 = 17772 +a17773 = 17773 +a17774 = 17774 +a17775 = 17775 +a17776 = 17776 +a17777 = 17777 +a17778 = 17778 +a17779 = 17779 +a17780 = 17780 +a17781 = 17781 +a17782 = 17782 +a17783 = 17783 +a17784 = 17784 +a17785 = 17785 +a17786 = 17786 +a17787 = 17787 +a17788 = 17788 +a17789 = 17789 +a17790 = 17790 +a17791 = 17791 +a17792 = 17792 +a17793 = 17793 +a17794 = 17794 +a17795 = 17795 +a17796 = 17796 +a17797 = 17797 +a17798 = 17798 +a17799 = 17799 +a17800 = 17800 +a17801 = 17801 +a17802 = 17802 +a17803 = 17803 +a17804 = 17804 +a17805 = 17805 +a17806 = 17806 +a17807 = 17807 +a17808 = 17808 +a17809 = 17809 +a17810 = 17810 +a17811 = 17811 +a17812 = 17812 +a17813 = 17813 +a17814 = 17814 +a17815 = 17815 +a17816 = 17816 +a17817 = 17817 +a17818 = 17818 +a17819 = 17819 +a17820 = 17820 +a17821 = 17821 +a17822 = 17822 +a17823 = 17823 +a17824 = 17824 +a17825 = 17825 +a17826 = 17826 +a17827 = 17827 +a17828 = 17828 +a17829 = 17829 +a17830 = 17830 +a17831 = 17831 +a17832 = 17832 +a17833 = 17833 +a17834 = 17834 +a17835 = 17835 +a17836 = 17836 +a17837 = 17837 +a17838 = 17838 +a17839 = 17839 +a17840 = 17840 +a17841 = 17841 +a17842 = 17842 +a17843 = 17843 +a17844 = 17844 +a17845 = 17845 +a17846 = 17846 +a17847 = 17847 +a17848 = 17848 +a17849 = 17849 +a17850 = 17850 +a17851 = 17851 +a17852 = 17852 +a17853 = 17853 +a17854 = 17854 +a17855 = 17855 +a17856 = 17856 +a17857 = 17857 +a17858 = 17858 +a17859 = 17859 +a17860 = 17860 +a17861 = 17861 +a17862 = 17862 +a17863 = 17863 +a17864 = 17864 +a17865 = 17865 +a17866 = 17866 +a17867 = 17867 +a17868 = 17868 +a17869 = 17869 +a17870 = 17870 +a17871 = 17871 +a17872 = 17872 +a17873 = 17873 +a17874 = 17874 +a17875 = 17875 +a17876 = 17876 +a17877 = 17877 +a17878 = 17878 +a17879 = 17879 +a17880 = 17880 +a17881 = 17881 +a17882 = 17882 +a17883 = 17883 +a17884 = 17884 +a17885 = 17885 +a17886 = 17886 +a17887 = 17887 +a17888 = 17888 +a17889 = 17889 +a17890 = 17890 +a17891 = 17891 +a17892 = 17892 +a17893 = 17893 +a17894 = 17894 +a17895 = 17895 +a17896 = 17896 +a17897 = 17897 +a17898 = 17898 +a17899 = 17899 +a17900 = 17900 +a17901 = 17901 +a17902 = 17902 +a17903 = 17903 +a17904 = 17904 +a17905 = 17905 +a17906 = 17906 +a17907 = 17907 +a17908 = 17908 +a17909 = 17909 +a17910 = 17910 +a17911 = 17911 +a17912 = 17912 +a17913 = 17913 +a17914 = 17914 +a17915 = 17915 +a17916 = 17916 +a17917 = 17917 +a17918 = 17918 +a17919 = 17919 +a17920 = 17920 +a17921 = 17921 +a17922 = 17922 +a17923 = 17923 +a17924 = 17924 +a17925 = 17925 +a17926 = 17926 +a17927 = 17927 +a17928 = 17928 +a17929 = 17929 +a17930 = 17930 +a17931 = 17931 +a17932 = 17932 +a17933 = 17933 +a17934 = 17934 +a17935 = 17935 +a17936 = 17936 +a17937 = 17937 +a17938 = 17938 +a17939 = 17939 +a17940 = 17940 +a17941 = 17941 +a17942 = 17942 +a17943 = 17943 +a17944 = 17944 +a17945 = 17945 +a17946 = 17946 +a17947 = 17947 +a17948 = 17948 +a17949 = 17949 +a17950 = 17950 +a17951 = 17951 +a17952 = 17952 +a17953 = 17953 +a17954 = 17954 +a17955 = 17955 +a17956 = 17956 +a17957 = 17957 +a17958 = 17958 +a17959 = 17959 +a17960 = 17960 +a17961 = 17961 +a17962 = 17962 +a17963 = 17963 +a17964 = 17964 +a17965 = 17965 +a17966 = 17966 +a17967 = 17967 +a17968 = 17968 +a17969 = 17969 +a17970 = 17970 +a17971 = 17971 +a17972 = 17972 +a17973 = 17973 +a17974 = 17974 +a17975 = 17975 +a17976 = 17976 +a17977 = 17977 +a17978 = 17978 +a17979 = 17979 +a17980 = 17980 +a17981 = 17981 +a17982 = 17982 +a17983 = 17983 +a17984 = 17984 +a17985 = 17985 +a17986 = 17986 +a17987 = 17987 +a17988 = 17988 +a17989 = 17989 +a17990 = 17990 +a17991 = 17991 +a17992 = 17992 +a17993 = 17993 +a17994 = 17994 +a17995 = 17995 +a17996 = 17996 +a17997 = 17997 +a17998 = 17998 +a17999 = 17999 +a18000 = 18000 +a18001 = 18001 +a18002 = 18002 +a18003 = 18003 +a18004 = 18004 +a18005 = 18005 +a18006 = 18006 +a18007 = 18007 +a18008 = 18008 +a18009 = 18009 +a18010 = 18010 +a18011 = 18011 +a18012 = 18012 +a18013 = 18013 +a18014 = 18014 +a18015 = 18015 +a18016 = 18016 +a18017 = 18017 +a18018 = 18018 +a18019 = 18019 +a18020 = 18020 +a18021 = 18021 +a18022 = 18022 +a18023 = 18023 +a18024 = 18024 +a18025 = 18025 +a18026 = 18026 +a18027 = 18027 +a18028 = 18028 +a18029 = 18029 +a18030 = 18030 +a18031 = 18031 +a18032 = 18032 +a18033 = 18033 +a18034 = 18034 +a18035 = 18035 +a18036 = 18036 +a18037 = 18037 +a18038 = 18038 +a18039 = 18039 +a18040 = 18040 +a18041 = 18041 +a18042 = 18042 +a18043 = 18043 +a18044 = 18044 +a18045 = 18045 +a18046 = 18046 +a18047 = 18047 +a18048 = 18048 +a18049 = 18049 +a18050 = 18050 +a18051 = 18051 +a18052 = 18052 +a18053 = 18053 +a18054 = 18054 +a18055 = 18055 +a18056 = 18056 +a18057 = 18057 +a18058 = 18058 +a18059 = 18059 +a18060 = 18060 +a18061 = 18061 +a18062 = 18062 +a18063 = 18063 +a18064 = 18064 +a18065 = 18065 +a18066 = 18066 +a18067 = 18067 +a18068 = 18068 +a18069 = 18069 +a18070 = 18070 +a18071 = 18071 +a18072 = 18072 +a18073 = 18073 +a18074 = 18074 +a18075 = 18075 +a18076 = 18076 +a18077 = 18077 +a18078 = 18078 +a18079 = 18079 +a18080 = 18080 +a18081 = 18081 +a18082 = 18082 +a18083 = 18083 +a18084 = 18084 +a18085 = 18085 +a18086 = 18086 +a18087 = 18087 +a18088 = 18088 +a18089 = 18089 +a18090 = 18090 +a18091 = 18091 +a18092 = 18092 +a18093 = 18093 +a18094 = 18094 +a18095 = 18095 +a18096 = 18096 +a18097 = 18097 +a18098 = 18098 +a18099 = 18099 +a18100 = 18100 +a18101 = 18101 +a18102 = 18102 +a18103 = 18103 +a18104 = 18104 +a18105 = 18105 +a18106 = 18106 +a18107 = 18107 +a18108 = 18108 +a18109 = 18109 +a18110 = 18110 +a18111 = 18111 +a18112 = 18112 +a18113 = 18113 +a18114 = 18114 +a18115 = 18115 +a18116 = 18116 +a18117 = 18117 +a18118 = 18118 +a18119 = 18119 +a18120 = 18120 +a18121 = 18121 +a18122 = 18122 +a18123 = 18123 +a18124 = 18124 +a18125 = 18125 +a18126 = 18126 +a18127 = 18127 +a18128 = 18128 +a18129 = 18129 +a18130 = 18130 +a18131 = 18131 +a18132 = 18132 +a18133 = 18133 +a18134 = 18134 +a18135 = 18135 +a18136 = 18136 +a18137 = 18137 +a18138 = 18138 +a18139 = 18139 +a18140 = 18140 +a18141 = 18141 +a18142 = 18142 +a18143 = 18143 +a18144 = 18144 +a18145 = 18145 +a18146 = 18146 +a18147 = 18147 +a18148 = 18148 +a18149 = 18149 +a18150 = 18150 +a18151 = 18151 +a18152 = 18152 +a18153 = 18153 +a18154 = 18154 +a18155 = 18155 +a18156 = 18156 +a18157 = 18157 +a18158 = 18158 +a18159 = 18159 +a18160 = 18160 +a18161 = 18161 +a18162 = 18162 +a18163 = 18163 +a18164 = 18164 +a18165 = 18165 +a18166 = 18166 +a18167 = 18167 +a18168 = 18168 +a18169 = 18169 +a18170 = 18170 +a18171 = 18171 +a18172 = 18172 +a18173 = 18173 +a18174 = 18174 +a18175 = 18175 +a18176 = 18176 +a18177 = 18177 +a18178 = 18178 +a18179 = 18179 +a18180 = 18180 +a18181 = 18181 +a18182 = 18182 +a18183 = 18183 +a18184 = 18184 +a18185 = 18185 +a18186 = 18186 +a18187 = 18187 +a18188 = 18188 +a18189 = 18189 +a18190 = 18190 +a18191 = 18191 +a18192 = 18192 +a18193 = 18193 +a18194 = 18194 +a18195 = 18195 +a18196 = 18196 +a18197 = 18197 +a18198 = 18198 +a18199 = 18199 +a18200 = 18200 +a18201 = 18201 +a18202 = 18202 +a18203 = 18203 +a18204 = 18204 +a18205 = 18205 +a18206 = 18206 +a18207 = 18207 +a18208 = 18208 +a18209 = 18209 +a18210 = 18210 +a18211 = 18211 +a18212 = 18212 +a18213 = 18213 +a18214 = 18214 +a18215 = 18215 +a18216 = 18216 +a18217 = 18217 +a18218 = 18218 +a18219 = 18219 +a18220 = 18220 +a18221 = 18221 +a18222 = 18222 +a18223 = 18223 +a18224 = 18224 +a18225 = 18225 +a18226 = 18226 +a18227 = 18227 +a18228 = 18228 +a18229 = 18229 +a18230 = 18230 +a18231 = 18231 +a18232 = 18232 +a18233 = 18233 +a18234 = 18234 +a18235 = 18235 +a18236 = 18236 +a18237 = 18237 +a18238 = 18238 +a18239 = 18239 +a18240 = 18240 +a18241 = 18241 +a18242 = 18242 +a18243 = 18243 +a18244 = 18244 +a18245 = 18245 +a18246 = 18246 +a18247 = 18247 +a18248 = 18248 +a18249 = 18249 +a18250 = 18250 +a18251 = 18251 +a18252 = 18252 +a18253 = 18253 +a18254 = 18254 +a18255 = 18255 +a18256 = 18256 +a18257 = 18257 +a18258 = 18258 +a18259 = 18259 +a18260 = 18260 +a18261 = 18261 +a18262 = 18262 +a18263 = 18263 +a18264 = 18264 +a18265 = 18265 +a18266 = 18266 +a18267 = 18267 +a18268 = 18268 +a18269 = 18269 +a18270 = 18270 +a18271 = 18271 +a18272 = 18272 +a18273 = 18273 +a18274 = 18274 +a18275 = 18275 +a18276 = 18276 +a18277 = 18277 +a18278 = 18278 +a18279 = 18279 +a18280 = 18280 +a18281 = 18281 +a18282 = 18282 +a18283 = 18283 +a18284 = 18284 +a18285 = 18285 +a18286 = 18286 +a18287 = 18287 +a18288 = 18288 +a18289 = 18289 +a18290 = 18290 +a18291 = 18291 +a18292 = 18292 +a18293 = 18293 +a18294 = 18294 +a18295 = 18295 +a18296 = 18296 +a18297 = 18297 +a18298 = 18298 +a18299 = 18299 +a18300 = 18300 +a18301 = 18301 +a18302 = 18302 +a18303 = 18303 +a18304 = 18304 +a18305 = 18305 +a18306 = 18306 +a18307 = 18307 +a18308 = 18308 +a18309 = 18309 +a18310 = 18310 +a18311 = 18311 +a18312 = 18312 +a18313 = 18313 +a18314 = 18314 +a18315 = 18315 +a18316 = 18316 +a18317 = 18317 +a18318 = 18318 +a18319 = 18319 +a18320 = 18320 +a18321 = 18321 +a18322 = 18322 +a18323 = 18323 +a18324 = 18324 +a18325 = 18325 +a18326 = 18326 +a18327 = 18327 +a18328 = 18328 +a18329 = 18329 +a18330 = 18330 +a18331 = 18331 +a18332 = 18332 +a18333 = 18333 +a18334 = 18334 +a18335 = 18335 +a18336 = 18336 +a18337 = 18337 +a18338 = 18338 +a18339 = 18339 +a18340 = 18340 +a18341 = 18341 +a18342 = 18342 +a18343 = 18343 +a18344 = 18344 +a18345 = 18345 +a18346 = 18346 +a18347 = 18347 +a18348 = 18348 +a18349 = 18349 +a18350 = 18350 +a18351 = 18351 +a18352 = 18352 +a18353 = 18353 +a18354 = 18354 +a18355 = 18355 +a18356 = 18356 +a18357 = 18357 +a18358 = 18358 +a18359 = 18359 +a18360 = 18360 +a18361 = 18361 +a18362 = 18362 +a18363 = 18363 +a18364 = 18364 +a18365 = 18365 +a18366 = 18366 +a18367 = 18367 +a18368 = 18368 +a18369 = 18369 +a18370 = 18370 +a18371 = 18371 +a18372 = 18372 +a18373 = 18373 +a18374 = 18374 +a18375 = 18375 +a18376 = 18376 +a18377 = 18377 +a18378 = 18378 +a18379 = 18379 +a18380 = 18380 +a18381 = 18381 +a18382 = 18382 +a18383 = 18383 +a18384 = 18384 +a18385 = 18385 +a18386 = 18386 +a18387 = 18387 +a18388 = 18388 +a18389 = 18389 +a18390 = 18390 +a18391 = 18391 +a18392 = 18392 +a18393 = 18393 +a18394 = 18394 +a18395 = 18395 +a18396 = 18396 +a18397 = 18397 +a18398 = 18398 +a18399 = 18399 +a18400 = 18400 +a18401 = 18401 +a18402 = 18402 +a18403 = 18403 +a18404 = 18404 +a18405 = 18405 +a18406 = 18406 +a18407 = 18407 +a18408 = 18408 +a18409 = 18409 +a18410 = 18410 +a18411 = 18411 +a18412 = 18412 +a18413 = 18413 +a18414 = 18414 +a18415 = 18415 +a18416 = 18416 +a18417 = 18417 +a18418 = 18418 +a18419 = 18419 +a18420 = 18420 +a18421 = 18421 +a18422 = 18422 +a18423 = 18423 +a18424 = 18424 +a18425 = 18425 +a18426 = 18426 +a18427 = 18427 +a18428 = 18428 +a18429 = 18429 +a18430 = 18430 +a18431 = 18431 +a18432 = 18432 +a18433 = 18433 +a18434 = 18434 +a18435 = 18435 +a18436 = 18436 +a18437 = 18437 +a18438 = 18438 +a18439 = 18439 +a18440 = 18440 +a18441 = 18441 +a18442 = 18442 +a18443 = 18443 +a18444 = 18444 +a18445 = 18445 +a18446 = 18446 +a18447 = 18447 +a18448 = 18448 +a18449 = 18449 +a18450 = 18450 +a18451 = 18451 +a18452 = 18452 +a18453 = 18453 +a18454 = 18454 +a18455 = 18455 +a18456 = 18456 +a18457 = 18457 +a18458 = 18458 +a18459 = 18459 +a18460 = 18460 +a18461 = 18461 +a18462 = 18462 +a18463 = 18463 +a18464 = 18464 +a18465 = 18465 +a18466 = 18466 +a18467 = 18467 +a18468 = 18468 +a18469 = 18469 +a18470 = 18470 +a18471 = 18471 +a18472 = 18472 +a18473 = 18473 +a18474 = 18474 +a18475 = 18475 +a18476 = 18476 +a18477 = 18477 +a18478 = 18478 +a18479 = 18479 +a18480 = 18480 +a18481 = 18481 +a18482 = 18482 +a18483 = 18483 +a18484 = 18484 +a18485 = 18485 +a18486 = 18486 +a18487 = 18487 +a18488 = 18488 +a18489 = 18489 +a18490 = 18490 +a18491 = 18491 +a18492 = 18492 +a18493 = 18493 +a18494 = 18494 +a18495 = 18495 +a18496 = 18496 +a18497 = 18497 +a18498 = 18498 +a18499 = 18499 +a18500 = 18500 +a18501 = 18501 +a18502 = 18502 +a18503 = 18503 +a18504 = 18504 +a18505 = 18505 +a18506 = 18506 +a18507 = 18507 +a18508 = 18508 +a18509 = 18509 +a18510 = 18510 +a18511 = 18511 +a18512 = 18512 +a18513 = 18513 +a18514 = 18514 +a18515 = 18515 +a18516 = 18516 +a18517 = 18517 +a18518 = 18518 +a18519 = 18519 +a18520 = 18520 +a18521 = 18521 +a18522 = 18522 +a18523 = 18523 +a18524 = 18524 +a18525 = 18525 +a18526 = 18526 +a18527 = 18527 +a18528 = 18528 +a18529 = 18529 +a18530 = 18530 +a18531 = 18531 +a18532 = 18532 +a18533 = 18533 +a18534 = 18534 +a18535 = 18535 +a18536 = 18536 +a18537 = 18537 +a18538 = 18538 +a18539 = 18539 +a18540 = 18540 +a18541 = 18541 +a18542 = 18542 +a18543 = 18543 +a18544 = 18544 +a18545 = 18545 +a18546 = 18546 +a18547 = 18547 +a18548 = 18548 +a18549 = 18549 +a18550 = 18550 +a18551 = 18551 +a18552 = 18552 +a18553 = 18553 +a18554 = 18554 +a18555 = 18555 +a18556 = 18556 +a18557 = 18557 +a18558 = 18558 +a18559 = 18559 +a18560 = 18560 +a18561 = 18561 +a18562 = 18562 +a18563 = 18563 +a18564 = 18564 +a18565 = 18565 +a18566 = 18566 +a18567 = 18567 +a18568 = 18568 +a18569 = 18569 +a18570 = 18570 +a18571 = 18571 +a18572 = 18572 +a18573 = 18573 +a18574 = 18574 +a18575 = 18575 +a18576 = 18576 +a18577 = 18577 +a18578 = 18578 +a18579 = 18579 +a18580 = 18580 +a18581 = 18581 +a18582 = 18582 +a18583 = 18583 +a18584 = 18584 +a18585 = 18585 +a18586 = 18586 +a18587 = 18587 +a18588 = 18588 +a18589 = 18589 +a18590 = 18590 +a18591 = 18591 +a18592 = 18592 +a18593 = 18593 +a18594 = 18594 +a18595 = 18595 +a18596 = 18596 +a18597 = 18597 +a18598 = 18598 +a18599 = 18599 +a18600 = 18600 +a18601 = 18601 +a18602 = 18602 +a18603 = 18603 +a18604 = 18604 +a18605 = 18605 +a18606 = 18606 +a18607 = 18607 +a18608 = 18608 +a18609 = 18609 +a18610 = 18610 +a18611 = 18611 +a18612 = 18612 +a18613 = 18613 +a18614 = 18614 +a18615 = 18615 +a18616 = 18616 +a18617 = 18617 +a18618 = 18618 +a18619 = 18619 +a18620 = 18620 +a18621 = 18621 +a18622 = 18622 +a18623 = 18623 +a18624 = 18624 +a18625 = 18625 +a18626 = 18626 +a18627 = 18627 +a18628 = 18628 +a18629 = 18629 +a18630 = 18630 +a18631 = 18631 +a18632 = 18632 +a18633 = 18633 +a18634 = 18634 +a18635 = 18635 +a18636 = 18636 +a18637 = 18637 +a18638 = 18638 +a18639 = 18639 +a18640 = 18640 +a18641 = 18641 +a18642 = 18642 +a18643 = 18643 +a18644 = 18644 +a18645 = 18645 +a18646 = 18646 +a18647 = 18647 +a18648 = 18648 +a18649 = 18649 +a18650 = 18650 +a18651 = 18651 +a18652 = 18652 +a18653 = 18653 +a18654 = 18654 +a18655 = 18655 +a18656 = 18656 +a18657 = 18657 +a18658 = 18658 +a18659 = 18659 +a18660 = 18660 +a18661 = 18661 +a18662 = 18662 +a18663 = 18663 +a18664 = 18664 +a18665 = 18665 +a18666 = 18666 +a18667 = 18667 +a18668 = 18668 +a18669 = 18669 +a18670 = 18670 +a18671 = 18671 +a18672 = 18672 +a18673 = 18673 +a18674 = 18674 +a18675 = 18675 +a18676 = 18676 +a18677 = 18677 +a18678 = 18678 +a18679 = 18679 +a18680 = 18680 +a18681 = 18681 +a18682 = 18682 +a18683 = 18683 +a18684 = 18684 +a18685 = 18685 +a18686 = 18686 +a18687 = 18687 +a18688 = 18688 +a18689 = 18689 +a18690 = 18690 +a18691 = 18691 +a18692 = 18692 +a18693 = 18693 +a18694 = 18694 +a18695 = 18695 +a18696 = 18696 +a18697 = 18697 +a18698 = 18698 +a18699 = 18699 +a18700 = 18700 +a18701 = 18701 +a18702 = 18702 +a18703 = 18703 +a18704 = 18704 +a18705 = 18705 +a18706 = 18706 +a18707 = 18707 +a18708 = 18708 +a18709 = 18709 +a18710 = 18710 +a18711 = 18711 +a18712 = 18712 +a18713 = 18713 +a18714 = 18714 +a18715 = 18715 +a18716 = 18716 +a18717 = 18717 +a18718 = 18718 +a18719 = 18719 +a18720 = 18720 +a18721 = 18721 +a18722 = 18722 +a18723 = 18723 +a18724 = 18724 +a18725 = 18725 +a18726 = 18726 +a18727 = 18727 +a18728 = 18728 +a18729 = 18729 +a18730 = 18730 +a18731 = 18731 +a18732 = 18732 +a18733 = 18733 +a18734 = 18734 +a18735 = 18735 +a18736 = 18736 +a18737 = 18737 +a18738 = 18738 +a18739 = 18739 +a18740 = 18740 +a18741 = 18741 +a18742 = 18742 +a18743 = 18743 +a18744 = 18744 +a18745 = 18745 +a18746 = 18746 +a18747 = 18747 +a18748 = 18748 +a18749 = 18749 +a18750 = 18750 +a18751 = 18751 +a18752 = 18752 +a18753 = 18753 +a18754 = 18754 +a18755 = 18755 +a18756 = 18756 +a18757 = 18757 +a18758 = 18758 +a18759 = 18759 +a18760 = 18760 +a18761 = 18761 +a18762 = 18762 +a18763 = 18763 +a18764 = 18764 +a18765 = 18765 +a18766 = 18766 +a18767 = 18767 +a18768 = 18768 +a18769 = 18769 +a18770 = 18770 +a18771 = 18771 +a18772 = 18772 +a18773 = 18773 +a18774 = 18774 +a18775 = 18775 +a18776 = 18776 +a18777 = 18777 +a18778 = 18778 +a18779 = 18779 +a18780 = 18780 +a18781 = 18781 +a18782 = 18782 +a18783 = 18783 +a18784 = 18784 +a18785 = 18785 +a18786 = 18786 +a18787 = 18787 +a18788 = 18788 +a18789 = 18789 +a18790 = 18790 +a18791 = 18791 +a18792 = 18792 +a18793 = 18793 +a18794 = 18794 +a18795 = 18795 +a18796 = 18796 +a18797 = 18797 +a18798 = 18798 +a18799 = 18799 +a18800 = 18800 +a18801 = 18801 +a18802 = 18802 +a18803 = 18803 +a18804 = 18804 +a18805 = 18805 +a18806 = 18806 +a18807 = 18807 +a18808 = 18808 +a18809 = 18809 +a18810 = 18810 +a18811 = 18811 +a18812 = 18812 +a18813 = 18813 +a18814 = 18814 +a18815 = 18815 +a18816 = 18816 +a18817 = 18817 +a18818 = 18818 +a18819 = 18819 +a18820 = 18820 +a18821 = 18821 +a18822 = 18822 +a18823 = 18823 +a18824 = 18824 +a18825 = 18825 +a18826 = 18826 +a18827 = 18827 +a18828 = 18828 +a18829 = 18829 +a18830 = 18830 +a18831 = 18831 +a18832 = 18832 +a18833 = 18833 +a18834 = 18834 +a18835 = 18835 +a18836 = 18836 +a18837 = 18837 +a18838 = 18838 +a18839 = 18839 +a18840 = 18840 +a18841 = 18841 +a18842 = 18842 +a18843 = 18843 +a18844 = 18844 +a18845 = 18845 +a18846 = 18846 +a18847 = 18847 +a18848 = 18848 +a18849 = 18849 +a18850 = 18850 +a18851 = 18851 +a18852 = 18852 +a18853 = 18853 +a18854 = 18854 +a18855 = 18855 +a18856 = 18856 +a18857 = 18857 +a18858 = 18858 +a18859 = 18859 +a18860 = 18860 +a18861 = 18861 +a18862 = 18862 +a18863 = 18863 +a18864 = 18864 +a18865 = 18865 +a18866 = 18866 +a18867 = 18867 +a18868 = 18868 +a18869 = 18869 +a18870 = 18870 +a18871 = 18871 +a18872 = 18872 +a18873 = 18873 +a18874 = 18874 +a18875 = 18875 +a18876 = 18876 +a18877 = 18877 +a18878 = 18878 +a18879 = 18879 +a18880 = 18880 +a18881 = 18881 +a18882 = 18882 +a18883 = 18883 +a18884 = 18884 +a18885 = 18885 +a18886 = 18886 +a18887 = 18887 +a18888 = 18888 +a18889 = 18889 +a18890 = 18890 +a18891 = 18891 +a18892 = 18892 +a18893 = 18893 +a18894 = 18894 +a18895 = 18895 +a18896 = 18896 +a18897 = 18897 +a18898 = 18898 +a18899 = 18899 +a18900 = 18900 +a18901 = 18901 +a18902 = 18902 +a18903 = 18903 +a18904 = 18904 +a18905 = 18905 +a18906 = 18906 +a18907 = 18907 +a18908 = 18908 +a18909 = 18909 +a18910 = 18910 +a18911 = 18911 +a18912 = 18912 +a18913 = 18913 +a18914 = 18914 +a18915 = 18915 +a18916 = 18916 +a18917 = 18917 +a18918 = 18918 +a18919 = 18919 +a18920 = 18920 +a18921 = 18921 +a18922 = 18922 +a18923 = 18923 +a18924 = 18924 +a18925 = 18925 +a18926 = 18926 +a18927 = 18927 +a18928 = 18928 +a18929 = 18929 +a18930 = 18930 +a18931 = 18931 +a18932 = 18932 +a18933 = 18933 +a18934 = 18934 +a18935 = 18935 +a18936 = 18936 +a18937 = 18937 +a18938 = 18938 +a18939 = 18939 +a18940 = 18940 +a18941 = 18941 +a18942 = 18942 +a18943 = 18943 +a18944 = 18944 +a18945 = 18945 +a18946 = 18946 +a18947 = 18947 +a18948 = 18948 +a18949 = 18949 +a18950 = 18950 +a18951 = 18951 +a18952 = 18952 +a18953 = 18953 +a18954 = 18954 +a18955 = 18955 +a18956 = 18956 +a18957 = 18957 +a18958 = 18958 +a18959 = 18959 +a18960 = 18960 +a18961 = 18961 +a18962 = 18962 +a18963 = 18963 +a18964 = 18964 +a18965 = 18965 +a18966 = 18966 +a18967 = 18967 +a18968 = 18968 +a18969 = 18969 +a18970 = 18970 +a18971 = 18971 +a18972 = 18972 +a18973 = 18973 +a18974 = 18974 +a18975 = 18975 +a18976 = 18976 +a18977 = 18977 +a18978 = 18978 +a18979 = 18979 +a18980 = 18980 +a18981 = 18981 +a18982 = 18982 +a18983 = 18983 +a18984 = 18984 +a18985 = 18985 +a18986 = 18986 +a18987 = 18987 +a18988 = 18988 +a18989 = 18989 +a18990 = 18990 +a18991 = 18991 +a18992 = 18992 +a18993 = 18993 +a18994 = 18994 +a18995 = 18995 +a18996 = 18996 +a18997 = 18997 +a18998 = 18998 +a18999 = 18999 +a19000 = 19000 +a19001 = 19001 +a19002 = 19002 +a19003 = 19003 +a19004 = 19004 +a19005 = 19005 +a19006 = 19006 +a19007 = 19007 +a19008 = 19008 +a19009 = 19009 +a19010 = 19010 +a19011 = 19011 +a19012 = 19012 +a19013 = 19013 +a19014 = 19014 +a19015 = 19015 +a19016 = 19016 +a19017 = 19017 +a19018 = 19018 +a19019 = 19019 +a19020 = 19020 +a19021 = 19021 +a19022 = 19022 +a19023 = 19023 +a19024 = 19024 +a19025 = 19025 +a19026 = 19026 +a19027 = 19027 +a19028 = 19028 +a19029 = 19029 +a19030 = 19030 +a19031 = 19031 +a19032 = 19032 +a19033 = 19033 +a19034 = 19034 +a19035 = 19035 +a19036 = 19036 +a19037 = 19037 +a19038 = 19038 +a19039 = 19039 +a19040 = 19040 +a19041 = 19041 +a19042 = 19042 +a19043 = 19043 +a19044 = 19044 +a19045 = 19045 +a19046 = 19046 +a19047 = 19047 +a19048 = 19048 +a19049 = 19049 +a19050 = 19050 +a19051 = 19051 +a19052 = 19052 +a19053 = 19053 +a19054 = 19054 +a19055 = 19055 +a19056 = 19056 +a19057 = 19057 +a19058 = 19058 +a19059 = 19059 +a19060 = 19060 +a19061 = 19061 +a19062 = 19062 +a19063 = 19063 +a19064 = 19064 +a19065 = 19065 +a19066 = 19066 +a19067 = 19067 +a19068 = 19068 +a19069 = 19069 +a19070 = 19070 +a19071 = 19071 +a19072 = 19072 +a19073 = 19073 +a19074 = 19074 +a19075 = 19075 +a19076 = 19076 +a19077 = 19077 +a19078 = 19078 +a19079 = 19079 +a19080 = 19080 +a19081 = 19081 +a19082 = 19082 +a19083 = 19083 +a19084 = 19084 +a19085 = 19085 +a19086 = 19086 +a19087 = 19087 +a19088 = 19088 +a19089 = 19089 +a19090 = 19090 +a19091 = 19091 +a19092 = 19092 +a19093 = 19093 +a19094 = 19094 +a19095 = 19095 +a19096 = 19096 +a19097 = 19097 +a19098 = 19098 +a19099 = 19099 +a19100 = 19100 +a19101 = 19101 +a19102 = 19102 +a19103 = 19103 +a19104 = 19104 +a19105 = 19105 +a19106 = 19106 +a19107 = 19107 +a19108 = 19108 +a19109 = 19109 +a19110 = 19110 +a19111 = 19111 +a19112 = 19112 +a19113 = 19113 +a19114 = 19114 +a19115 = 19115 +a19116 = 19116 +a19117 = 19117 +a19118 = 19118 +a19119 = 19119 +a19120 = 19120 +a19121 = 19121 +a19122 = 19122 +a19123 = 19123 +a19124 = 19124 +a19125 = 19125 +a19126 = 19126 +a19127 = 19127 +a19128 = 19128 +a19129 = 19129 +a19130 = 19130 +a19131 = 19131 +a19132 = 19132 +a19133 = 19133 +a19134 = 19134 +a19135 = 19135 +a19136 = 19136 +a19137 = 19137 +a19138 = 19138 +a19139 = 19139 +a19140 = 19140 +a19141 = 19141 +a19142 = 19142 +a19143 = 19143 +a19144 = 19144 +a19145 = 19145 +a19146 = 19146 +a19147 = 19147 +a19148 = 19148 +a19149 = 19149 +a19150 = 19150 +a19151 = 19151 +a19152 = 19152 +a19153 = 19153 +a19154 = 19154 +a19155 = 19155 +a19156 = 19156 +a19157 = 19157 +a19158 = 19158 +a19159 = 19159 +a19160 = 19160 +a19161 = 19161 +a19162 = 19162 +a19163 = 19163 +a19164 = 19164 +a19165 = 19165 +a19166 = 19166 +a19167 = 19167 +a19168 = 19168 +a19169 = 19169 +a19170 = 19170 +a19171 = 19171 +a19172 = 19172 +a19173 = 19173 +a19174 = 19174 +a19175 = 19175 +a19176 = 19176 +a19177 = 19177 +a19178 = 19178 +a19179 = 19179 +a19180 = 19180 +a19181 = 19181 +a19182 = 19182 +a19183 = 19183 +a19184 = 19184 +a19185 = 19185 +a19186 = 19186 +a19187 = 19187 +a19188 = 19188 +a19189 = 19189 +a19190 = 19190 +a19191 = 19191 +a19192 = 19192 +a19193 = 19193 +a19194 = 19194 +a19195 = 19195 +a19196 = 19196 +a19197 = 19197 +a19198 = 19198 +a19199 = 19199 +a19200 = 19200 +a19201 = 19201 +a19202 = 19202 +a19203 = 19203 +a19204 = 19204 +a19205 = 19205 +a19206 = 19206 +a19207 = 19207 +a19208 = 19208 +a19209 = 19209 +a19210 = 19210 +a19211 = 19211 +a19212 = 19212 +a19213 = 19213 +a19214 = 19214 +a19215 = 19215 +a19216 = 19216 +a19217 = 19217 +a19218 = 19218 +a19219 = 19219 +a19220 = 19220 +a19221 = 19221 +a19222 = 19222 +a19223 = 19223 +a19224 = 19224 +a19225 = 19225 +a19226 = 19226 +a19227 = 19227 +a19228 = 19228 +a19229 = 19229 +a19230 = 19230 +a19231 = 19231 +a19232 = 19232 +a19233 = 19233 +a19234 = 19234 +a19235 = 19235 +a19236 = 19236 +a19237 = 19237 +a19238 = 19238 +a19239 = 19239 +a19240 = 19240 +a19241 = 19241 +a19242 = 19242 +a19243 = 19243 +a19244 = 19244 +a19245 = 19245 +a19246 = 19246 +a19247 = 19247 +a19248 = 19248 +a19249 = 19249 +a19250 = 19250 +a19251 = 19251 +a19252 = 19252 +a19253 = 19253 +a19254 = 19254 +a19255 = 19255 +a19256 = 19256 +a19257 = 19257 +a19258 = 19258 +a19259 = 19259 +a19260 = 19260 +a19261 = 19261 +a19262 = 19262 +a19263 = 19263 +a19264 = 19264 +a19265 = 19265 +a19266 = 19266 +a19267 = 19267 +a19268 = 19268 +a19269 = 19269 +a19270 = 19270 +a19271 = 19271 +a19272 = 19272 +a19273 = 19273 +a19274 = 19274 +a19275 = 19275 +a19276 = 19276 +a19277 = 19277 +a19278 = 19278 +a19279 = 19279 +a19280 = 19280 +a19281 = 19281 +a19282 = 19282 +a19283 = 19283 +a19284 = 19284 +a19285 = 19285 +a19286 = 19286 +a19287 = 19287 +a19288 = 19288 +a19289 = 19289 +a19290 = 19290 +a19291 = 19291 +a19292 = 19292 +a19293 = 19293 +a19294 = 19294 +a19295 = 19295 +a19296 = 19296 +a19297 = 19297 +a19298 = 19298 +a19299 = 19299 +a19300 = 19300 +a19301 = 19301 +a19302 = 19302 +a19303 = 19303 +a19304 = 19304 +a19305 = 19305 +a19306 = 19306 +a19307 = 19307 +a19308 = 19308 +a19309 = 19309 +a19310 = 19310 +a19311 = 19311 +a19312 = 19312 +a19313 = 19313 +a19314 = 19314 +a19315 = 19315 +a19316 = 19316 +a19317 = 19317 +a19318 = 19318 +a19319 = 19319 +a19320 = 19320 +a19321 = 19321 +a19322 = 19322 +a19323 = 19323 +a19324 = 19324 +a19325 = 19325 +a19326 = 19326 +a19327 = 19327 +a19328 = 19328 +a19329 = 19329 +a19330 = 19330 +a19331 = 19331 +a19332 = 19332 +a19333 = 19333 +a19334 = 19334 +a19335 = 19335 +a19336 = 19336 +a19337 = 19337 +a19338 = 19338 +a19339 = 19339 +a19340 = 19340 +a19341 = 19341 +a19342 = 19342 +a19343 = 19343 +a19344 = 19344 +a19345 = 19345 +a19346 = 19346 +a19347 = 19347 +a19348 = 19348 +a19349 = 19349 +a19350 = 19350 +a19351 = 19351 +a19352 = 19352 +a19353 = 19353 +a19354 = 19354 +a19355 = 19355 +a19356 = 19356 +a19357 = 19357 +a19358 = 19358 +a19359 = 19359 +a19360 = 19360 +a19361 = 19361 +a19362 = 19362 +a19363 = 19363 +a19364 = 19364 +a19365 = 19365 +a19366 = 19366 +a19367 = 19367 +a19368 = 19368 +a19369 = 19369 +a19370 = 19370 +a19371 = 19371 +a19372 = 19372 +a19373 = 19373 +a19374 = 19374 +a19375 = 19375 +a19376 = 19376 +a19377 = 19377 +a19378 = 19378 +a19379 = 19379 +a19380 = 19380 +a19381 = 19381 +a19382 = 19382 +a19383 = 19383 +a19384 = 19384 +a19385 = 19385 +a19386 = 19386 +a19387 = 19387 +a19388 = 19388 +a19389 = 19389 +a19390 = 19390 +a19391 = 19391 +a19392 = 19392 +a19393 = 19393 +a19394 = 19394 +a19395 = 19395 +a19396 = 19396 +a19397 = 19397 +a19398 = 19398 +a19399 = 19399 +a19400 = 19400 +a19401 = 19401 +a19402 = 19402 +a19403 = 19403 +a19404 = 19404 +a19405 = 19405 +a19406 = 19406 +a19407 = 19407 +a19408 = 19408 +a19409 = 19409 +a19410 = 19410 +a19411 = 19411 +a19412 = 19412 +a19413 = 19413 +a19414 = 19414 +a19415 = 19415 +a19416 = 19416 +a19417 = 19417 +a19418 = 19418 +a19419 = 19419 +a19420 = 19420 +a19421 = 19421 +a19422 = 19422 +a19423 = 19423 +a19424 = 19424 +a19425 = 19425 +a19426 = 19426 +a19427 = 19427 +a19428 = 19428 +a19429 = 19429 +a19430 = 19430 +a19431 = 19431 +a19432 = 19432 +a19433 = 19433 +a19434 = 19434 +a19435 = 19435 +a19436 = 19436 +a19437 = 19437 +a19438 = 19438 +a19439 = 19439 +a19440 = 19440 +a19441 = 19441 +a19442 = 19442 +a19443 = 19443 +a19444 = 19444 +a19445 = 19445 +a19446 = 19446 +a19447 = 19447 +a19448 = 19448 +a19449 = 19449 +a19450 = 19450 +a19451 = 19451 +a19452 = 19452 +a19453 = 19453 +a19454 = 19454 +a19455 = 19455 +a19456 = 19456 +a19457 = 19457 +a19458 = 19458 +a19459 = 19459 +a19460 = 19460 +a19461 = 19461 +a19462 = 19462 +a19463 = 19463 +a19464 = 19464 +a19465 = 19465 +a19466 = 19466 +a19467 = 19467 +a19468 = 19468 +a19469 = 19469 +a19470 = 19470 +a19471 = 19471 +a19472 = 19472 +a19473 = 19473 +a19474 = 19474 +a19475 = 19475 +a19476 = 19476 +a19477 = 19477 +a19478 = 19478 +a19479 = 19479 +a19480 = 19480 +a19481 = 19481 +a19482 = 19482 +a19483 = 19483 +a19484 = 19484 +a19485 = 19485 +a19486 = 19486 +a19487 = 19487 +a19488 = 19488 +a19489 = 19489 +a19490 = 19490 +a19491 = 19491 +a19492 = 19492 +a19493 = 19493 +a19494 = 19494 +a19495 = 19495 +a19496 = 19496 +a19497 = 19497 +a19498 = 19498 +a19499 = 19499 +a19500 = 19500 +a19501 = 19501 +a19502 = 19502 +a19503 = 19503 +a19504 = 19504 +a19505 = 19505 +a19506 = 19506 +a19507 = 19507 +a19508 = 19508 +a19509 = 19509 +a19510 = 19510 +a19511 = 19511 +a19512 = 19512 +a19513 = 19513 +a19514 = 19514 +a19515 = 19515 +a19516 = 19516 +a19517 = 19517 +a19518 = 19518 +a19519 = 19519 +a19520 = 19520 +a19521 = 19521 +a19522 = 19522 +a19523 = 19523 +a19524 = 19524 +a19525 = 19525 +a19526 = 19526 +a19527 = 19527 +a19528 = 19528 +a19529 = 19529 +a19530 = 19530 +a19531 = 19531 +a19532 = 19532 +a19533 = 19533 +a19534 = 19534 +a19535 = 19535 +a19536 = 19536 +a19537 = 19537 +a19538 = 19538 +a19539 = 19539 +a19540 = 19540 +a19541 = 19541 +a19542 = 19542 +a19543 = 19543 +a19544 = 19544 +a19545 = 19545 +a19546 = 19546 +a19547 = 19547 +a19548 = 19548 +a19549 = 19549 +a19550 = 19550 +a19551 = 19551 +a19552 = 19552 +a19553 = 19553 +a19554 = 19554 +a19555 = 19555 +a19556 = 19556 +a19557 = 19557 +a19558 = 19558 +a19559 = 19559 +a19560 = 19560 +a19561 = 19561 +a19562 = 19562 +a19563 = 19563 +a19564 = 19564 +a19565 = 19565 +a19566 = 19566 +a19567 = 19567 +a19568 = 19568 +a19569 = 19569 +a19570 = 19570 +a19571 = 19571 +a19572 = 19572 +a19573 = 19573 +a19574 = 19574 +a19575 = 19575 +a19576 = 19576 +a19577 = 19577 +a19578 = 19578 +a19579 = 19579 +a19580 = 19580 +a19581 = 19581 +a19582 = 19582 +a19583 = 19583 +a19584 = 19584 +a19585 = 19585 +a19586 = 19586 +a19587 = 19587 +a19588 = 19588 +a19589 = 19589 +a19590 = 19590 +a19591 = 19591 +a19592 = 19592 +a19593 = 19593 +a19594 = 19594 +a19595 = 19595 +a19596 = 19596 +a19597 = 19597 +a19598 = 19598 +a19599 = 19599 +a19600 = 19600 +a19601 = 19601 +a19602 = 19602 +a19603 = 19603 +a19604 = 19604 +a19605 = 19605 +a19606 = 19606 +a19607 = 19607 +a19608 = 19608 +a19609 = 19609 +a19610 = 19610 +a19611 = 19611 +a19612 = 19612 +a19613 = 19613 +a19614 = 19614 +a19615 = 19615 +a19616 = 19616 +a19617 = 19617 +a19618 = 19618 +a19619 = 19619 +a19620 = 19620 +a19621 = 19621 +a19622 = 19622 +a19623 = 19623 +a19624 = 19624 +a19625 = 19625 +a19626 = 19626 +a19627 = 19627 +a19628 = 19628 +a19629 = 19629 +a19630 = 19630 +a19631 = 19631 +a19632 = 19632 +a19633 = 19633 +a19634 = 19634 +a19635 = 19635 +a19636 = 19636 +a19637 = 19637 +a19638 = 19638 +a19639 = 19639 +a19640 = 19640 +a19641 = 19641 +a19642 = 19642 +a19643 = 19643 +a19644 = 19644 +a19645 = 19645 +a19646 = 19646 +a19647 = 19647 +a19648 = 19648 +a19649 = 19649 +a19650 = 19650 +a19651 = 19651 +a19652 = 19652 +a19653 = 19653 +a19654 = 19654 +a19655 = 19655 +a19656 = 19656 +a19657 = 19657 +a19658 = 19658 +a19659 = 19659 +a19660 = 19660 +a19661 = 19661 +a19662 = 19662 +a19663 = 19663 +a19664 = 19664 +a19665 = 19665 +a19666 = 19666 +a19667 = 19667 +a19668 = 19668 +a19669 = 19669 +a19670 = 19670 +a19671 = 19671 +a19672 = 19672 +a19673 = 19673 +a19674 = 19674 +a19675 = 19675 +a19676 = 19676 +a19677 = 19677 +a19678 = 19678 +a19679 = 19679 +a19680 = 19680 +a19681 = 19681 +a19682 = 19682 +a19683 = 19683 +a19684 = 19684 +a19685 = 19685 +a19686 = 19686 +a19687 = 19687 +a19688 = 19688 +a19689 = 19689 +a19690 = 19690 +a19691 = 19691 +a19692 = 19692 +a19693 = 19693 +a19694 = 19694 +a19695 = 19695 +a19696 = 19696 +a19697 = 19697 +a19698 = 19698 +a19699 = 19699 +a19700 = 19700 +a19701 = 19701 +a19702 = 19702 +a19703 = 19703 +a19704 = 19704 +a19705 = 19705 +a19706 = 19706 +a19707 = 19707 +a19708 = 19708 +a19709 = 19709 +a19710 = 19710 +a19711 = 19711 +a19712 = 19712 +a19713 = 19713 +a19714 = 19714 +a19715 = 19715 +a19716 = 19716 +a19717 = 19717 +a19718 = 19718 +a19719 = 19719 +a19720 = 19720 +a19721 = 19721 +a19722 = 19722 +a19723 = 19723 +a19724 = 19724 +a19725 = 19725 +a19726 = 19726 +a19727 = 19727 +a19728 = 19728 +a19729 = 19729 +a19730 = 19730 +a19731 = 19731 +a19732 = 19732 +a19733 = 19733 +a19734 = 19734 +a19735 = 19735 +a19736 = 19736 +a19737 = 19737 +a19738 = 19738 +a19739 = 19739 +a19740 = 19740 +a19741 = 19741 +a19742 = 19742 +a19743 = 19743 +a19744 = 19744 +a19745 = 19745 +a19746 = 19746 +a19747 = 19747 +a19748 = 19748 +a19749 = 19749 +a19750 = 19750 +a19751 = 19751 +a19752 = 19752 +a19753 = 19753 +a19754 = 19754 +a19755 = 19755 +a19756 = 19756 +a19757 = 19757 +a19758 = 19758 +a19759 = 19759 +a19760 = 19760 +a19761 = 19761 +a19762 = 19762 +a19763 = 19763 +a19764 = 19764 +a19765 = 19765 +a19766 = 19766 +a19767 = 19767 +a19768 = 19768 +a19769 = 19769 +a19770 = 19770 +a19771 = 19771 +a19772 = 19772 +a19773 = 19773 +a19774 = 19774 +a19775 = 19775 +a19776 = 19776 +a19777 = 19777 +a19778 = 19778 +a19779 = 19779 +a19780 = 19780 +a19781 = 19781 +a19782 = 19782 +a19783 = 19783 +a19784 = 19784 +a19785 = 19785 +a19786 = 19786 +a19787 = 19787 +a19788 = 19788 +a19789 = 19789 +a19790 = 19790 +a19791 = 19791 +a19792 = 19792 +a19793 = 19793 +a19794 = 19794 +a19795 = 19795 +a19796 = 19796 +a19797 = 19797 +a19798 = 19798 +a19799 = 19799 +a19800 = 19800 +a19801 = 19801 +a19802 = 19802 +a19803 = 19803 +a19804 = 19804 +a19805 = 19805 +a19806 = 19806 +a19807 = 19807 +a19808 = 19808 +a19809 = 19809 +a19810 = 19810 +a19811 = 19811 +a19812 = 19812 +a19813 = 19813 +a19814 = 19814 +a19815 = 19815 +a19816 = 19816 +a19817 = 19817 +a19818 = 19818 +a19819 = 19819 +a19820 = 19820 +a19821 = 19821 +a19822 = 19822 +a19823 = 19823 +a19824 = 19824 +a19825 = 19825 +a19826 = 19826 +a19827 = 19827 +a19828 = 19828 +a19829 = 19829 +a19830 = 19830 +a19831 = 19831 +a19832 = 19832 +a19833 = 19833 +a19834 = 19834 +a19835 = 19835 +a19836 = 19836 +a19837 = 19837 +a19838 = 19838 +a19839 = 19839 +a19840 = 19840 +a19841 = 19841 +a19842 = 19842 +a19843 = 19843 +a19844 = 19844 +a19845 = 19845 +a19846 = 19846 +a19847 = 19847 +a19848 = 19848 +a19849 = 19849 +a19850 = 19850 +a19851 = 19851 +a19852 = 19852 +a19853 = 19853 +a19854 = 19854 +a19855 = 19855 +a19856 = 19856 +a19857 = 19857 +a19858 = 19858 +a19859 = 19859 +a19860 = 19860 +a19861 = 19861 +a19862 = 19862 +a19863 = 19863 +a19864 = 19864 +a19865 = 19865 +a19866 = 19866 +a19867 = 19867 +a19868 = 19868 +a19869 = 19869 +a19870 = 19870 +a19871 = 19871 +a19872 = 19872 +a19873 = 19873 +a19874 = 19874 +a19875 = 19875 +a19876 = 19876 +a19877 = 19877 +a19878 = 19878 +a19879 = 19879 +a19880 = 19880 +a19881 = 19881 +a19882 = 19882 +a19883 = 19883 +a19884 = 19884 +a19885 = 19885 +a19886 = 19886 +a19887 = 19887 +a19888 = 19888 +a19889 = 19889 +a19890 = 19890 +a19891 = 19891 +a19892 = 19892 +a19893 = 19893 +a19894 = 19894 +a19895 = 19895 +a19896 = 19896 +a19897 = 19897 +a19898 = 19898 +a19899 = 19899 +a19900 = 19900 +a19901 = 19901 +a19902 = 19902 +a19903 = 19903 +a19904 = 19904 +a19905 = 19905 +a19906 = 19906 +a19907 = 19907 +a19908 = 19908 +a19909 = 19909 +a19910 = 19910 +a19911 = 19911 +a19912 = 19912 +a19913 = 19913 +a19914 = 19914 +a19915 = 19915 +a19916 = 19916 +a19917 = 19917 +a19918 = 19918 +a19919 = 19919 +a19920 = 19920 +a19921 = 19921 +a19922 = 19922 +a19923 = 19923 +a19924 = 19924 +a19925 = 19925 +a19926 = 19926 +a19927 = 19927 +a19928 = 19928 +a19929 = 19929 +a19930 = 19930 +a19931 = 19931 +a19932 = 19932 +a19933 = 19933 +a19934 = 19934 +a19935 = 19935 +a19936 = 19936 +a19937 = 19937 +a19938 = 19938 +a19939 = 19939 +a19940 = 19940 +a19941 = 19941 +a19942 = 19942 +a19943 = 19943 +a19944 = 19944 +a19945 = 19945 +a19946 = 19946 +a19947 = 19947 +a19948 = 19948 +a19949 = 19949 +a19950 = 19950 +a19951 = 19951 +a19952 = 19952 +a19953 = 19953 +a19954 = 19954 +a19955 = 19955 +a19956 = 19956 +a19957 = 19957 +a19958 = 19958 +a19959 = 19959 +a19960 = 19960 +a19961 = 19961 +a19962 = 19962 +a19963 = 19963 +a19964 = 19964 +a19965 = 19965 +a19966 = 19966 +a19967 = 19967 +a19968 = 19968 +a19969 = 19969 +a19970 = 19970 +a19971 = 19971 +a19972 = 19972 +a19973 = 19973 +a19974 = 19974 +a19975 = 19975 +a19976 = 19976 +a19977 = 19977 +a19978 = 19978 +a19979 = 19979 +a19980 = 19980 +a19981 = 19981 +a19982 = 19982 +a19983 = 19983 +a19984 = 19984 +a19985 = 19985 +a19986 = 19986 +a19987 = 19987 +a19988 = 19988 +a19989 = 19989 +a19990 = 19990 +a19991 = 19991 +a19992 = 19992 +a19993 = 19993 +a19994 = 19994 +a19995 = 19995 +a19996 = 19996 +a19997 = 19997 +a19998 = 19998 +a19999 = 19999 +a20000 = 20000 +a20001 = 20001 +a20002 = 20002 +a20003 = 20003 +a20004 = 20004 +a20005 = 20005 +a20006 = 20006 +a20007 = 20007 +a20008 = 20008 +a20009 = 20009 +a20010 = 20010 +a20011 = 20011 +a20012 = 20012 +a20013 = 20013 +a20014 = 20014 +a20015 = 20015 +a20016 = 20016 +a20017 = 20017 +a20018 = 20018 +a20019 = 20019 +a20020 = 20020 +a20021 = 20021 +a20022 = 20022 +a20023 = 20023 +a20024 = 20024 +a20025 = 20025 +a20026 = 20026 +a20027 = 20027 +a20028 = 20028 +a20029 = 20029 +a20030 = 20030 +a20031 = 20031 +a20032 = 20032 +a20033 = 20033 +a20034 = 20034 +a20035 = 20035 +a20036 = 20036 +a20037 = 20037 +a20038 = 20038 +a20039 = 20039 +a20040 = 20040 +a20041 = 20041 +a20042 = 20042 +a20043 = 20043 +a20044 = 20044 +a20045 = 20045 +a20046 = 20046 +a20047 = 20047 +a20048 = 20048 +a20049 = 20049 +a20050 = 20050 +a20051 = 20051 +a20052 = 20052 +a20053 = 20053 +a20054 = 20054 +a20055 = 20055 +a20056 = 20056 +a20057 = 20057 +a20058 = 20058 +a20059 = 20059 +a20060 = 20060 +a20061 = 20061 +a20062 = 20062 +a20063 = 20063 +a20064 = 20064 +a20065 = 20065 +a20066 = 20066 +a20067 = 20067 +a20068 = 20068 +a20069 = 20069 +a20070 = 20070 +a20071 = 20071 +a20072 = 20072 +a20073 = 20073 +a20074 = 20074 +a20075 = 20075 +a20076 = 20076 +a20077 = 20077 +a20078 = 20078 +a20079 = 20079 +a20080 = 20080 +a20081 = 20081 +a20082 = 20082 +a20083 = 20083 +a20084 = 20084 +a20085 = 20085 +a20086 = 20086 +a20087 = 20087 +a20088 = 20088 +a20089 = 20089 +a20090 = 20090 +a20091 = 20091 +a20092 = 20092 +a20093 = 20093 +a20094 = 20094 +a20095 = 20095 +a20096 = 20096 +a20097 = 20097 +a20098 = 20098 +a20099 = 20099 +a20100 = 20100 +a20101 = 20101 +a20102 = 20102 +a20103 = 20103 +a20104 = 20104 +a20105 = 20105 +a20106 = 20106 +a20107 = 20107 +a20108 = 20108 +a20109 = 20109 +a20110 = 20110 +a20111 = 20111 +a20112 = 20112 +a20113 = 20113 +a20114 = 20114 +a20115 = 20115 +a20116 = 20116 +a20117 = 20117 +a20118 = 20118 +a20119 = 20119 +a20120 = 20120 +a20121 = 20121 +a20122 = 20122 +a20123 = 20123 +a20124 = 20124 +a20125 = 20125 +a20126 = 20126 +a20127 = 20127 +a20128 = 20128 +a20129 = 20129 +a20130 = 20130 +a20131 = 20131 +a20132 = 20132 +a20133 = 20133 +a20134 = 20134 +a20135 = 20135 +a20136 = 20136 +a20137 = 20137 +a20138 = 20138 +a20139 = 20139 +a20140 = 20140 +a20141 = 20141 +a20142 = 20142 +a20143 = 20143 +a20144 = 20144 +a20145 = 20145 +a20146 = 20146 +a20147 = 20147 +a20148 = 20148 +a20149 = 20149 +a20150 = 20150 +a20151 = 20151 +a20152 = 20152 +a20153 = 20153 +a20154 = 20154 +a20155 = 20155 +a20156 = 20156 +a20157 = 20157 +a20158 = 20158 +a20159 = 20159 +a20160 = 20160 +a20161 = 20161 +a20162 = 20162 +a20163 = 20163 +a20164 = 20164 +a20165 = 20165 +a20166 = 20166 +a20167 = 20167 +a20168 = 20168 +a20169 = 20169 +a20170 = 20170 +a20171 = 20171 +a20172 = 20172 +a20173 = 20173 +a20174 = 20174 +a20175 = 20175 +a20176 = 20176 +a20177 = 20177 +a20178 = 20178 +a20179 = 20179 +a20180 = 20180 +a20181 = 20181 +a20182 = 20182 +a20183 = 20183 +a20184 = 20184 +a20185 = 20185 +a20186 = 20186 +a20187 = 20187 +a20188 = 20188 +a20189 = 20189 +a20190 = 20190 +a20191 = 20191 +a20192 = 20192 +a20193 = 20193 +a20194 = 20194 +a20195 = 20195 +a20196 = 20196 +a20197 = 20197 +a20198 = 20198 +a20199 = 20199 +a20200 = 20200 +a20201 = 20201 +a20202 = 20202 +a20203 = 20203 +a20204 = 20204 +a20205 = 20205 +a20206 = 20206 +a20207 = 20207 +a20208 = 20208 +a20209 = 20209 +a20210 = 20210 +a20211 = 20211 +a20212 = 20212 +a20213 = 20213 +a20214 = 20214 +a20215 = 20215 +a20216 = 20216 +a20217 = 20217 +a20218 = 20218 +a20219 = 20219 +a20220 = 20220 +a20221 = 20221 +a20222 = 20222 +a20223 = 20223 +a20224 = 20224 +a20225 = 20225 +a20226 = 20226 +a20227 = 20227 +a20228 = 20228 +a20229 = 20229 +a20230 = 20230 +a20231 = 20231 +a20232 = 20232 +a20233 = 20233 +a20234 = 20234 +a20235 = 20235 +a20236 = 20236 +a20237 = 20237 +a20238 = 20238 +a20239 = 20239 +a20240 = 20240 +a20241 = 20241 +a20242 = 20242 +a20243 = 20243 +a20244 = 20244 +a20245 = 20245 +a20246 = 20246 +a20247 = 20247 +a20248 = 20248 +a20249 = 20249 +a20250 = 20250 +a20251 = 20251 +a20252 = 20252 +a20253 = 20253 +a20254 = 20254 +a20255 = 20255 +a20256 = 20256 +a20257 = 20257 +a20258 = 20258 +a20259 = 20259 +a20260 = 20260 +a20261 = 20261 +a20262 = 20262 +a20263 = 20263 +a20264 = 20264 +a20265 = 20265 +a20266 = 20266 +a20267 = 20267 +a20268 = 20268 +a20269 = 20269 +a20270 = 20270 +a20271 = 20271 +a20272 = 20272 +a20273 = 20273 +a20274 = 20274 +a20275 = 20275 +a20276 = 20276 +a20277 = 20277 +a20278 = 20278 +a20279 = 20279 +a20280 = 20280 +a20281 = 20281 +a20282 = 20282 +a20283 = 20283 +a20284 = 20284 +a20285 = 20285 +a20286 = 20286 +a20287 = 20287 +a20288 = 20288 +a20289 = 20289 +a20290 = 20290 +a20291 = 20291 +a20292 = 20292 +a20293 = 20293 +a20294 = 20294 +a20295 = 20295 +a20296 = 20296 +a20297 = 20297 +a20298 = 20298 +a20299 = 20299 +a20300 = 20300 +a20301 = 20301 +a20302 = 20302 +a20303 = 20303 +a20304 = 20304 +a20305 = 20305 +a20306 = 20306 +a20307 = 20307 +a20308 = 20308 +a20309 = 20309 +a20310 = 20310 +a20311 = 20311 +a20312 = 20312 +a20313 = 20313 +a20314 = 20314 +a20315 = 20315 +a20316 = 20316 +a20317 = 20317 +a20318 = 20318 +a20319 = 20319 +a20320 = 20320 +a20321 = 20321 +a20322 = 20322 +a20323 = 20323 +a20324 = 20324 +a20325 = 20325 +a20326 = 20326 +a20327 = 20327 +a20328 = 20328 +a20329 = 20329 +a20330 = 20330 +a20331 = 20331 +a20332 = 20332 +a20333 = 20333 +a20334 = 20334 +a20335 = 20335 +a20336 = 20336 +a20337 = 20337 +a20338 = 20338 +a20339 = 20339 +a20340 = 20340 +a20341 = 20341 +a20342 = 20342 +a20343 = 20343 +a20344 = 20344 +a20345 = 20345 +a20346 = 20346 +a20347 = 20347 +a20348 = 20348 +a20349 = 20349 +a20350 = 20350 +a20351 = 20351 +a20352 = 20352 +a20353 = 20353 +a20354 = 20354 +a20355 = 20355 +a20356 = 20356 +a20357 = 20357 +a20358 = 20358 +a20359 = 20359 +a20360 = 20360 +a20361 = 20361 +a20362 = 20362 +a20363 = 20363 +a20364 = 20364 +a20365 = 20365 +a20366 = 20366 +a20367 = 20367 +a20368 = 20368 +a20369 = 20369 +a20370 = 20370 +a20371 = 20371 +a20372 = 20372 +a20373 = 20373 +a20374 = 20374 +a20375 = 20375 +a20376 = 20376 +a20377 = 20377 +a20378 = 20378 +a20379 = 20379 +a20380 = 20380 +a20381 = 20381 +a20382 = 20382 +a20383 = 20383 +a20384 = 20384 +a20385 = 20385 +a20386 = 20386 +a20387 = 20387 +a20388 = 20388 +a20389 = 20389 +a20390 = 20390 +a20391 = 20391 +a20392 = 20392 +a20393 = 20393 +a20394 = 20394 +a20395 = 20395 +a20396 = 20396 +a20397 = 20397 +a20398 = 20398 +a20399 = 20399 +a20400 = 20400 +a20401 = 20401 +a20402 = 20402 +a20403 = 20403 +a20404 = 20404 +a20405 = 20405 +a20406 = 20406 +a20407 = 20407 +a20408 = 20408 +a20409 = 20409 +a20410 = 20410 +a20411 = 20411 +a20412 = 20412 +a20413 = 20413 +a20414 = 20414 +a20415 = 20415 +a20416 = 20416 +a20417 = 20417 +a20418 = 20418 +a20419 = 20419 +a20420 = 20420 +a20421 = 20421 +a20422 = 20422 +a20423 = 20423 +a20424 = 20424 +a20425 = 20425 +a20426 = 20426 +a20427 = 20427 +a20428 = 20428 +a20429 = 20429 +a20430 = 20430 +a20431 = 20431 +a20432 = 20432 +a20433 = 20433 +a20434 = 20434 +a20435 = 20435 +a20436 = 20436 +a20437 = 20437 +a20438 = 20438 +a20439 = 20439 +a20440 = 20440 +a20441 = 20441 +a20442 = 20442 +a20443 = 20443 +a20444 = 20444 +a20445 = 20445 +a20446 = 20446 +a20447 = 20447 +a20448 = 20448 +a20449 = 20449 +a20450 = 20450 +a20451 = 20451 +a20452 = 20452 +a20453 = 20453 +a20454 = 20454 +a20455 = 20455 +a20456 = 20456 +a20457 = 20457 +a20458 = 20458 +a20459 = 20459 +a20460 = 20460 +a20461 = 20461 +a20462 = 20462 +a20463 = 20463 +a20464 = 20464 +a20465 = 20465 +a20466 = 20466 +a20467 = 20467 +a20468 = 20468 +a20469 = 20469 +a20470 = 20470 +a20471 = 20471 +a20472 = 20472 +a20473 = 20473 +a20474 = 20474 +a20475 = 20475 +a20476 = 20476 +a20477 = 20477 +a20478 = 20478 +a20479 = 20479 +a20480 = 20480 +a20481 = 20481 +a20482 = 20482 +a20483 = 20483 +a20484 = 20484 +a20485 = 20485 +a20486 = 20486 +a20487 = 20487 +a20488 = 20488 +a20489 = 20489 +a20490 = 20490 +a20491 = 20491 +a20492 = 20492 +a20493 = 20493 +a20494 = 20494 +a20495 = 20495 +a20496 = 20496 +a20497 = 20497 +a20498 = 20498 +a20499 = 20499 +a20500 = 20500 +a20501 = 20501 +a20502 = 20502 +a20503 = 20503 +a20504 = 20504 +a20505 = 20505 +a20506 = 20506 +a20507 = 20507 +a20508 = 20508 +a20509 = 20509 +a20510 = 20510 +a20511 = 20511 +a20512 = 20512 +a20513 = 20513 +a20514 = 20514 +a20515 = 20515 +a20516 = 20516 +a20517 = 20517 +a20518 = 20518 +a20519 = 20519 +a20520 = 20520 +a20521 = 20521 +a20522 = 20522 +a20523 = 20523 +a20524 = 20524 +a20525 = 20525 +a20526 = 20526 +a20527 = 20527 +a20528 = 20528 +a20529 = 20529 +a20530 = 20530 +a20531 = 20531 +a20532 = 20532 +a20533 = 20533 +a20534 = 20534 +a20535 = 20535 +a20536 = 20536 +a20537 = 20537 +a20538 = 20538 +a20539 = 20539 +a20540 = 20540 +a20541 = 20541 +a20542 = 20542 +a20543 = 20543 +a20544 = 20544 +a20545 = 20545 +a20546 = 20546 +a20547 = 20547 +a20548 = 20548 +a20549 = 20549 +a20550 = 20550 +a20551 = 20551 +a20552 = 20552 +a20553 = 20553 +a20554 = 20554 +a20555 = 20555 +a20556 = 20556 +a20557 = 20557 +a20558 = 20558 +a20559 = 20559 +a20560 = 20560 +a20561 = 20561 +a20562 = 20562 +a20563 = 20563 +a20564 = 20564 +a20565 = 20565 +a20566 = 20566 +a20567 = 20567 +a20568 = 20568 +a20569 = 20569 +a20570 = 20570 +a20571 = 20571 +a20572 = 20572 +a20573 = 20573 +a20574 = 20574 +a20575 = 20575 +a20576 = 20576 +a20577 = 20577 +a20578 = 20578 +a20579 = 20579 +a20580 = 20580 +a20581 = 20581 +a20582 = 20582 +a20583 = 20583 +a20584 = 20584 +a20585 = 20585 +a20586 = 20586 +a20587 = 20587 +a20588 = 20588 +a20589 = 20589 +a20590 = 20590 +a20591 = 20591 +a20592 = 20592 +a20593 = 20593 +a20594 = 20594 +a20595 = 20595 +a20596 = 20596 +a20597 = 20597 +a20598 = 20598 +a20599 = 20599 +a20600 = 20600 +a20601 = 20601 +a20602 = 20602 +a20603 = 20603 +a20604 = 20604 +a20605 = 20605 +a20606 = 20606 +a20607 = 20607 +a20608 = 20608 +a20609 = 20609 +a20610 = 20610 +a20611 = 20611 +a20612 = 20612 +a20613 = 20613 +a20614 = 20614 +a20615 = 20615 +a20616 = 20616 +a20617 = 20617 +a20618 = 20618 +a20619 = 20619 +a20620 = 20620 +a20621 = 20621 +a20622 = 20622 +a20623 = 20623 +a20624 = 20624 +a20625 = 20625 +a20626 = 20626 +a20627 = 20627 +a20628 = 20628 +a20629 = 20629 +a20630 = 20630 +a20631 = 20631 +a20632 = 20632 +a20633 = 20633 +a20634 = 20634 +a20635 = 20635 +a20636 = 20636 +a20637 = 20637 +a20638 = 20638 +a20639 = 20639 +a20640 = 20640 +a20641 = 20641 +a20642 = 20642 +a20643 = 20643 +a20644 = 20644 +a20645 = 20645 +a20646 = 20646 +a20647 = 20647 +a20648 = 20648 +a20649 = 20649 +a20650 = 20650 +a20651 = 20651 +a20652 = 20652 +a20653 = 20653 +a20654 = 20654 +a20655 = 20655 +a20656 = 20656 +a20657 = 20657 +a20658 = 20658 +a20659 = 20659 +a20660 = 20660 +a20661 = 20661 +a20662 = 20662 +a20663 = 20663 +a20664 = 20664 +a20665 = 20665 +a20666 = 20666 +a20667 = 20667 +a20668 = 20668 +a20669 = 20669 +a20670 = 20670 +a20671 = 20671 +a20672 = 20672 +a20673 = 20673 +a20674 = 20674 +a20675 = 20675 +a20676 = 20676 +a20677 = 20677 +a20678 = 20678 +a20679 = 20679 +a20680 = 20680 +a20681 = 20681 +a20682 = 20682 +a20683 = 20683 +a20684 = 20684 +a20685 = 20685 +a20686 = 20686 +a20687 = 20687 +a20688 = 20688 +a20689 = 20689 +a20690 = 20690 +a20691 = 20691 +a20692 = 20692 +a20693 = 20693 +a20694 = 20694 +a20695 = 20695 +a20696 = 20696 +a20697 = 20697 +a20698 = 20698 +a20699 = 20699 +a20700 = 20700 +a20701 = 20701 +a20702 = 20702 +a20703 = 20703 +a20704 = 20704 +a20705 = 20705 +a20706 = 20706 +a20707 = 20707 +a20708 = 20708 +a20709 = 20709 +a20710 = 20710 +a20711 = 20711 +a20712 = 20712 +a20713 = 20713 +a20714 = 20714 +a20715 = 20715 +a20716 = 20716 +a20717 = 20717 +a20718 = 20718 +a20719 = 20719 +a20720 = 20720 +a20721 = 20721 +a20722 = 20722 +a20723 = 20723 +a20724 = 20724 +a20725 = 20725 +a20726 = 20726 +a20727 = 20727 +a20728 = 20728 +a20729 = 20729 +a20730 = 20730 +a20731 = 20731 +a20732 = 20732 +a20733 = 20733 +a20734 = 20734 +a20735 = 20735 +a20736 = 20736 +a20737 = 20737 +a20738 = 20738 +a20739 = 20739 +a20740 = 20740 +a20741 = 20741 +a20742 = 20742 +a20743 = 20743 +a20744 = 20744 +a20745 = 20745 +a20746 = 20746 +a20747 = 20747 +a20748 = 20748 +a20749 = 20749 +a20750 = 20750 +a20751 = 20751 +a20752 = 20752 +a20753 = 20753 +a20754 = 20754 +a20755 = 20755 +a20756 = 20756 +a20757 = 20757 +a20758 = 20758 +a20759 = 20759 +a20760 = 20760 +a20761 = 20761 +a20762 = 20762 +a20763 = 20763 +a20764 = 20764 +a20765 = 20765 +a20766 = 20766 +a20767 = 20767 +a20768 = 20768 +a20769 = 20769 +a20770 = 20770 +a20771 = 20771 +a20772 = 20772 +a20773 = 20773 +a20774 = 20774 +a20775 = 20775 +a20776 = 20776 +a20777 = 20777 +a20778 = 20778 +a20779 = 20779 +a20780 = 20780 +a20781 = 20781 +a20782 = 20782 +a20783 = 20783 +a20784 = 20784 +a20785 = 20785 +a20786 = 20786 +a20787 = 20787 +a20788 = 20788 +a20789 = 20789 +a20790 = 20790 +a20791 = 20791 +a20792 = 20792 +a20793 = 20793 +a20794 = 20794 +a20795 = 20795 +a20796 = 20796 +a20797 = 20797 +a20798 = 20798 +a20799 = 20799 +a20800 = 20800 +a20801 = 20801 +a20802 = 20802 +a20803 = 20803 +a20804 = 20804 +a20805 = 20805 +a20806 = 20806 +a20807 = 20807 +a20808 = 20808 +a20809 = 20809 +a20810 = 20810 +a20811 = 20811 +a20812 = 20812 +a20813 = 20813 +a20814 = 20814 +a20815 = 20815 +a20816 = 20816 +a20817 = 20817 +a20818 = 20818 +a20819 = 20819 +a20820 = 20820 +a20821 = 20821 +a20822 = 20822 +a20823 = 20823 +a20824 = 20824 +a20825 = 20825 +a20826 = 20826 +a20827 = 20827 +a20828 = 20828 +a20829 = 20829 +a20830 = 20830 +a20831 = 20831 +a20832 = 20832 +a20833 = 20833 +a20834 = 20834 +a20835 = 20835 +a20836 = 20836 +a20837 = 20837 +a20838 = 20838 +a20839 = 20839 +a20840 = 20840 +a20841 = 20841 +a20842 = 20842 +a20843 = 20843 +a20844 = 20844 +a20845 = 20845 +a20846 = 20846 +a20847 = 20847 +a20848 = 20848 +a20849 = 20849 +a20850 = 20850 +a20851 = 20851 +a20852 = 20852 +a20853 = 20853 +a20854 = 20854 +a20855 = 20855 +a20856 = 20856 +a20857 = 20857 +a20858 = 20858 +a20859 = 20859 +a20860 = 20860 +a20861 = 20861 +a20862 = 20862 +a20863 = 20863 +a20864 = 20864 +a20865 = 20865 +a20866 = 20866 +a20867 = 20867 +a20868 = 20868 +a20869 = 20869 +a20870 = 20870 +a20871 = 20871 +a20872 = 20872 +a20873 = 20873 +a20874 = 20874 +a20875 = 20875 +a20876 = 20876 +a20877 = 20877 +a20878 = 20878 +a20879 = 20879 +a20880 = 20880 +a20881 = 20881 +a20882 = 20882 +a20883 = 20883 +a20884 = 20884 +a20885 = 20885 +a20886 = 20886 +a20887 = 20887 +a20888 = 20888 +a20889 = 20889 +a20890 = 20890 +a20891 = 20891 +a20892 = 20892 +a20893 = 20893 +a20894 = 20894 +a20895 = 20895 +a20896 = 20896 +a20897 = 20897 +a20898 = 20898 +a20899 = 20899 +a20900 = 20900 +a20901 = 20901 +a20902 = 20902 +a20903 = 20903 +a20904 = 20904 +a20905 = 20905 +a20906 = 20906 +a20907 = 20907 +a20908 = 20908 +a20909 = 20909 +a20910 = 20910 +a20911 = 20911 +a20912 = 20912 +a20913 = 20913 +a20914 = 20914 +a20915 = 20915 +a20916 = 20916 +a20917 = 20917 +a20918 = 20918 +a20919 = 20919 +a20920 = 20920 +a20921 = 20921 +a20922 = 20922 +a20923 = 20923 +a20924 = 20924 +a20925 = 20925 +a20926 = 20926 +a20927 = 20927 +a20928 = 20928 +a20929 = 20929 +a20930 = 20930 +a20931 = 20931 +a20932 = 20932 +a20933 = 20933 +a20934 = 20934 +a20935 = 20935 +a20936 = 20936 +a20937 = 20937 +a20938 = 20938 +a20939 = 20939 +a20940 = 20940 +a20941 = 20941 +a20942 = 20942 +a20943 = 20943 +a20944 = 20944 +a20945 = 20945 +a20946 = 20946 +a20947 = 20947 +a20948 = 20948 +a20949 = 20949 +a20950 = 20950 +a20951 = 20951 +a20952 = 20952 +a20953 = 20953 +a20954 = 20954 +a20955 = 20955 +a20956 = 20956 +a20957 = 20957 +a20958 = 20958 +a20959 = 20959 +a20960 = 20960 +a20961 = 20961 +a20962 = 20962 +a20963 = 20963 +a20964 = 20964 +a20965 = 20965 +a20966 = 20966 +a20967 = 20967 +a20968 = 20968 +a20969 = 20969 +a20970 = 20970 +a20971 = 20971 +a20972 = 20972 +a20973 = 20973 +a20974 = 20974 +a20975 = 20975 +a20976 = 20976 +a20977 = 20977 +a20978 = 20978 +a20979 = 20979 +a20980 = 20980 +a20981 = 20981 +a20982 = 20982 +a20983 = 20983 +a20984 = 20984 +a20985 = 20985 +a20986 = 20986 +a20987 = 20987 +a20988 = 20988 +a20989 = 20989 +a20990 = 20990 +a20991 = 20991 +a20992 = 20992 +a20993 = 20993 +a20994 = 20994 +a20995 = 20995 +a20996 = 20996 +a20997 = 20997 +a20998 = 20998 +a20999 = 20999 +a21000 = 21000 +a21001 = 21001 +a21002 = 21002 +a21003 = 21003 +a21004 = 21004 +a21005 = 21005 +a21006 = 21006 +a21007 = 21007 +a21008 = 21008 +a21009 = 21009 +a21010 = 21010 +a21011 = 21011 +a21012 = 21012 +a21013 = 21013 +a21014 = 21014 +a21015 = 21015 +a21016 = 21016 +a21017 = 21017 +a21018 = 21018 +a21019 = 21019 +a21020 = 21020 +a21021 = 21021 +a21022 = 21022 +a21023 = 21023 +a21024 = 21024 +a21025 = 21025 +a21026 = 21026 +a21027 = 21027 +a21028 = 21028 +a21029 = 21029 +a21030 = 21030 +a21031 = 21031 +a21032 = 21032 +a21033 = 21033 +a21034 = 21034 +a21035 = 21035 +a21036 = 21036 +a21037 = 21037 +a21038 = 21038 +a21039 = 21039 +a21040 = 21040 +a21041 = 21041 +a21042 = 21042 +a21043 = 21043 +a21044 = 21044 +a21045 = 21045 +a21046 = 21046 +a21047 = 21047 +a21048 = 21048 +a21049 = 21049 +a21050 = 21050 +a21051 = 21051 +a21052 = 21052 +a21053 = 21053 +a21054 = 21054 +a21055 = 21055 +a21056 = 21056 +a21057 = 21057 +a21058 = 21058 +a21059 = 21059 +a21060 = 21060 +a21061 = 21061 +a21062 = 21062 +a21063 = 21063 +a21064 = 21064 +a21065 = 21065 +a21066 = 21066 +a21067 = 21067 +a21068 = 21068 +a21069 = 21069 +a21070 = 21070 +a21071 = 21071 +a21072 = 21072 +a21073 = 21073 +a21074 = 21074 +a21075 = 21075 +a21076 = 21076 +a21077 = 21077 +a21078 = 21078 +a21079 = 21079 +a21080 = 21080 +a21081 = 21081 +a21082 = 21082 +a21083 = 21083 +a21084 = 21084 +a21085 = 21085 +a21086 = 21086 +a21087 = 21087 +a21088 = 21088 +a21089 = 21089 +a21090 = 21090 +a21091 = 21091 +a21092 = 21092 +a21093 = 21093 +a21094 = 21094 +a21095 = 21095 +a21096 = 21096 +a21097 = 21097 +a21098 = 21098 +a21099 = 21099 +a21100 = 21100 +a21101 = 21101 +a21102 = 21102 +a21103 = 21103 +a21104 = 21104 +a21105 = 21105 +a21106 = 21106 +a21107 = 21107 +a21108 = 21108 +a21109 = 21109 +a21110 = 21110 +a21111 = 21111 +a21112 = 21112 +a21113 = 21113 +a21114 = 21114 +a21115 = 21115 +a21116 = 21116 +a21117 = 21117 +a21118 = 21118 +a21119 = 21119 +a21120 = 21120 +a21121 = 21121 +a21122 = 21122 +a21123 = 21123 +a21124 = 21124 +a21125 = 21125 +a21126 = 21126 +a21127 = 21127 +a21128 = 21128 +a21129 = 21129 +a21130 = 21130 +a21131 = 21131 +a21132 = 21132 +a21133 = 21133 +a21134 = 21134 +a21135 = 21135 +a21136 = 21136 +a21137 = 21137 +a21138 = 21138 +a21139 = 21139 +a21140 = 21140 +a21141 = 21141 +a21142 = 21142 +a21143 = 21143 +a21144 = 21144 +a21145 = 21145 +a21146 = 21146 +a21147 = 21147 +a21148 = 21148 +a21149 = 21149 +a21150 = 21150 +a21151 = 21151 +a21152 = 21152 +a21153 = 21153 +a21154 = 21154 +a21155 = 21155 +a21156 = 21156 +a21157 = 21157 +a21158 = 21158 +a21159 = 21159 +a21160 = 21160 +a21161 = 21161 +a21162 = 21162 +a21163 = 21163 +a21164 = 21164 +a21165 = 21165 +a21166 = 21166 +a21167 = 21167 +a21168 = 21168 +a21169 = 21169 +a21170 = 21170 +a21171 = 21171 +a21172 = 21172 +a21173 = 21173 +a21174 = 21174 +a21175 = 21175 +a21176 = 21176 +a21177 = 21177 +a21178 = 21178 +a21179 = 21179 +a21180 = 21180 +a21181 = 21181 +a21182 = 21182 +a21183 = 21183 +a21184 = 21184 +a21185 = 21185 +a21186 = 21186 +a21187 = 21187 +a21188 = 21188 +a21189 = 21189 +a21190 = 21190 +a21191 = 21191 +a21192 = 21192 +a21193 = 21193 +a21194 = 21194 +a21195 = 21195 +a21196 = 21196 +a21197 = 21197 +a21198 = 21198 +a21199 = 21199 +a21200 = 21200 +a21201 = 21201 +a21202 = 21202 +a21203 = 21203 +a21204 = 21204 +a21205 = 21205 +a21206 = 21206 +a21207 = 21207 +a21208 = 21208 +a21209 = 21209 +a21210 = 21210 +a21211 = 21211 +a21212 = 21212 +a21213 = 21213 +a21214 = 21214 +a21215 = 21215 +a21216 = 21216 +a21217 = 21217 +a21218 = 21218 +a21219 = 21219 +a21220 = 21220 +a21221 = 21221 +a21222 = 21222 +a21223 = 21223 +a21224 = 21224 +a21225 = 21225 +a21226 = 21226 +a21227 = 21227 +a21228 = 21228 +a21229 = 21229 +a21230 = 21230 +a21231 = 21231 +a21232 = 21232 +a21233 = 21233 +a21234 = 21234 +a21235 = 21235 +a21236 = 21236 +a21237 = 21237 +a21238 = 21238 +a21239 = 21239 +a21240 = 21240 +a21241 = 21241 +a21242 = 21242 +a21243 = 21243 +a21244 = 21244 +a21245 = 21245 +a21246 = 21246 +a21247 = 21247 +a21248 = 21248 +a21249 = 21249 +a21250 = 21250 +a21251 = 21251 +a21252 = 21252 +a21253 = 21253 +a21254 = 21254 +a21255 = 21255 +a21256 = 21256 +a21257 = 21257 +a21258 = 21258 +a21259 = 21259 +a21260 = 21260 +a21261 = 21261 +a21262 = 21262 +a21263 = 21263 +a21264 = 21264 +a21265 = 21265 +a21266 = 21266 +a21267 = 21267 +a21268 = 21268 +a21269 = 21269 +a21270 = 21270 +a21271 = 21271 +a21272 = 21272 +a21273 = 21273 +a21274 = 21274 +a21275 = 21275 +a21276 = 21276 +a21277 = 21277 +a21278 = 21278 +a21279 = 21279 +a21280 = 21280 +a21281 = 21281 +a21282 = 21282 +a21283 = 21283 +a21284 = 21284 +a21285 = 21285 +a21286 = 21286 +a21287 = 21287 +a21288 = 21288 +a21289 = 21289 +a21290 = 21290 +a21291 = 21291 +a21292 = 21292 +a21293 = 21293 +a21294 = 21294 +a21295 = 21295 +a21296 = 21296 +a21297 = 21297 +a21298 = 21298 +a21299 = 21299 +a21300 = 21300 +a21301 = 21301 +a21302 = 21302 +a21303 = 21303 +a21304 = 21304 +a21305 = 21305 +a21306 = 21306 +a21307 = 21307 +a21308 = 21308 +a21309 = 21309 +a21310 = 21310 +a21311 = 21311 +a21312 = 21312 +a21313 = 21313 +a21314 = 21314 +a21315 = 21315 +a21316 = 21316 +a21317 = 21317 +a21318 = 21318 +a21319 = 21319 +a21320 = 21320 +a21321 = 21321 +a21322 = 21322 +a21323 = 21323 +a21324 = 21324 +a21325 = 21325 +a21326 = 21326 +a21327 = 21327 +a21328 = 21328 +a21329 = 21329 +a21330 = 21330 +a21331 = 21331 +a21332 = 21332 +a21333 = 21333 +a21334 = 21334 +a21335 = 21335 +a21336 = 21336 +a21337 = 21337 +a21338 = 21338 +a21339 = 21339 +a21340 = 21340 +a21341 = 21341 +a21342 = 21342 +a21343 = 21343 +a21344 = 21344 +a21345 = 21345 +a21346 = 21346 +a21347 = 21347 +a21348 = 21348 +a21349 = 21349 +a21350 = 21350 +a21351 = 21351 +a21352 = 21352 +a21353 = 21353 +a21354 = 21354 +a21355 = 21355 +a21356 = 21356 +a21357 = 21357 +a21358 = 21358 +a21359 = 21359 +a21360 = 21360 +a21361 = 21361 +a21362 = 21362 +a21363 = 21363 +a21364 = 21364 +a21365 = 21365 +a21366 = 21366 +a21367 = 21367 +a21368 = 21368 +a21369 = 21369 +a21370 = 21370 +a21371 = 21371 +a21372 = 21372 +a21373 = 21373 +a21374 = 21374 +a21375 = 21375 +a21376 = 21376 +a21377 = 21377 +a21378 = 21378 +a21379 = 21379 +a21380 = 21380 +a21381 = 21381 +a21382 = 21382 +a21383 = 21383 +a21384 = 21384 +a21385 = 21385 +a21386 = 21386 +a21387 = 21387 +a21388 = 21388 +a21389 = 21389 +a21390 = 21390 +a21391 = 21391 +a21392 = 21392 +a21393 = 21393 +a21394 = 21394 +a21395 = 21395 +a21396 = 21396 +a21397 = 21397 +a21398 = 21398 +a21399 = 21399 +a21400 = 21400 +a21401 = 21401 +a21402 = 21402 +a21403 = 21403 +a21404 = 21404 +a21405 = 21405 +a21406 = 21406 +a21407 = 21407 +a21408 = 21408 +a21409 = 21409 +a21410 = 21410 +a21411 = 21411 +a21412 = 21412 +a21413 = 21413 +a21414 = 21414 +a21415 = 21415 +a21416 = 21416 +a21417 = 21417 +a21418 = 21418 +a21419 = 21419 +a21420 = 21420 +a21421 = 21421 +a21422 = 21422 +a21423 = 21423 +a21424 = 21424 +a21425 = 21425 +a21426 = 21426 +a21427 = 21427 +a21428 = 21428 +a21429 = 21429 +a21430 = 21430 +a21431 = 21431 +a21432 = 21432 +a21433 = 21433 +a21434 = 21434 +a21435 = 21435 +a21436 = 21436 +a21437 = 21437 +a21438 = 21438 +a21439 = 21439 +a21440 = 21440 +a21441 = 21441 +a21442 = 21442 +a21443 = 21443 +a21444 = 21444 +a21445 = 21445 +a21446 = 21446 +a21447 = 21447 +a21448 = 21448 +a21449 = 21449 +a21450 = 21450 +a21451 = 21451 +a21452 = 21452 +a21453 = 21453 +a21454 = 21454 +a21455 = 21455 +a21456 = 21456 +a21457 = 21457 +a21458 = 21458 +a21459 = 21459 +a21460 = 21460 +a21461 = 21461 +a21462 = 21462 +a21463 = 21463 +a21464 = 21464 +a21465 = 21465 +a21466 = 21466 +a21467 = 21467 +a21468 = 21468 +a21469 = 21469 +a21470 = 21470 +a21471 = 21471 +a21472 = 21472 +a21473 = 21473 +a21474 = 21474 +a21475 = 21475 +a21476 = 21476 +a21477 = 21477 +a21478 = 21478 +a21479 = 21479 +a21480 = 21480 +a21481 = 21481 +a21482 = 21482 +a21483 = 21483 +a21484 = 21484 +a21485 = 21485 +a21486 = 21486 +a21487 = 21487 +a21488 = 21488 +a21489 = 21489 +a21490 = 21490 +a21491 = 21491 +a21492 = 21492 +a21493 = 21493 +a21494 = 21494 +a21495 = 21495 +a21496 = 21496 +a21497 = 21497 +a21498 = 21498 +a21499 = 21499 +a21500 = 21500 +a21501 = 21501 +a21502 = 21502 +a21503 = 21503 +a21504 = 21504 +a21505 = 21505 +a21506 = 21506 +a21507 = 21507 +a21508 = 21508 +a21509 = 21509 +a21510 = 21510 +a21511 = 21511 +a21512 = 21512 +a21513 = 21513 +a21514 = 21514 +a21515 = 21515 +a21516 = 21516 +a21517 = 21517 +a21518 = 21518 +a21519 = 21519 +a21520 = 21520 +a21521 = 21521 +a21522 = 21522 +a21523 = 21523 +a21524 = 21524 +a21525 = 21525 +a21526 = 21526 +a21527 = 21527 +a21528 = 21528 +a21529 = 21529 +a21530 = 21530 +a21531 = 21531 +a21532 = 21532 +a21533 = 21533 +a21534 = 21534 +a21535 = 21535 +a21536 = 21536 +a21537 = 21537 +a21538 = 21538 +a21539 = 21539 +a21540 = 21540 +a21541 = 21541 +a21542 = 21542 +a21543 = 21543 +a21544 = 21544 +a21545 = 21545 +a21546 = 21546 +a21547 = 21547 +a21548 = 21548 +a21549 = 21549 +a21550 = 21550 +a21551 = 21551 +a21552 = 21552 +a21553 = 21553 +a21554 = 21554 +a21555 = 21555 +a21556 = 21556 +a21557 = 21557 +a21558 = 21558 +a21559 = 21559 +a21560 = 21560 +a21561 = 21561 +a21562 = 21562 +a21563 = 21563 +a21564 = 21564 +a21565 = 21565 +a21566 = 21566 +a21567 = 21567 +a21568 = 21568 +a21569 = 21569 +a21570 = 21570 +a21571 = 21571 +a21572 = 21572 +a21573 = 21573 +a21574 = 21574 +a21575 = 21575 +a21576 = 21576 +a21577 = 21577 +a21578 = 21578 +a21579 = 21579 +a21580 = 21580 +a21581 = 21581 +a21582 = 21582 +a21583 = 21583 +a21584 = 21584 +a21585 = 21585 +a21586 = 21586 +a21587 = 21587 +a21588 = 21588 +a21589 = 21589 +a21590 = 21590 +a21591 = 21591 +a21592 = 21592 +a21593 = 21593 +a21594 = 21594 +a21595 = 21595 +a21596 = 21596 +a21597 = 21597 +a21598 = 21598 +a21599 = 21599 +a21600 = 21600 +a21601 = 21601 +a21602 = 21602 +a21603 = 21603 +a21604 = 21604 +a21605 = 21605 +a21606 = 21606 +a21607 = 21607 +a21608 = 21608 +a21609 = 21609 +a21610 = 21610 +a21611 = 21611 +a21612 = 21612 +a21613 = 21613 +a21614 = 21614 +a21615 = 21615 +a21616 = 21616 +a21617 = 21617 +a21618 = 21618 +a21619 = 21619 +a21620 = 21620 +a21621 = 21621 +a21622 = 21622 +a21623 = 21623 +a21624 = 21624 +a21625 = 21625 +a21626 = 21626 +a21627 = 21627 +a21628 = 21628 +a21629 = 21629 +a21630 = 21630 +a21631 = 21631 +a21632 = 21632 +a21633 = 21633 +a21634 = 21634 +a21635 = 21635 +a21636 = 21636 +a21637 = 21637 +a21638 = 21638 +a21639 = 21639 +a21640 = 21640 +a21641 = 21641 +a21642 = 21642 +a21643 = 21643 +a21644 = 21644 +a21645 = 21645 +a21646 = 21646 +a21647 = 21647 +a21648 = 21648 +a21649 = 21649 +a21650 = 21650 +a21651 = 21651 +a21652 = 21652 +a21653 = 21653 +a21654 = 21654 +a21655 = 21655 +a21656 = 21656 +a21657 = 21657 +a21658 = 21658 +a21659 = 21659 +a21660 = 21660 +a21661 = 21661 +a21662 = 21662 +a21663 = 21663 +a21664 = 21664 +a21665 = 21665 +a21666 = 21666 +a21667 = 21667 +a21668 = 21668 +a21669 = 21669 +a21670 = 21670 +a21671 = 21671 +a21672 = 21672 +a21673 = 21673 +a21674 = 21674 +a21675 = 21675 +a21676 = 21676 +a21677 = 21677 +a21678 = 21678 +a21679 = 21679 +a21680 = 21680 +a21681 = 21681 +a21682 = 21682 +a21683 = 21683 +a21684 = 21684 +a21685 = 21685 +a21686 = 21686 +a21687 = 21687 +a21688 = 21688 +a21689 = 21689 +a21690 = 21690 +a21691 = 21691 +a21692 = 21692 +a21693 = 21693 +a21694 = 21694 +a21695 = 21695 +a21696 = 21696 +a21697 = 21697 +a21698 = 21698 +a21699 = 21699 +a21700 = 21700 +a21701 = 21701 +a21702 = 21702 +a21703 = 21703 +a21704 = 21704 +a21705 = 21705 +a21706 = 21706 +a21707 = 21707 +a21708 = 21708 +a21709 = 21709 +a21710 = 21710 +a21711 = 21711 +a21712 = 21712 +a21713 = 21713 +a21714 = 21714 +a21715 = 21715 +a21716 = 21716 +a21717 = 21717 +a21718 = 21718 +a21719 = 21719 +a21720 = 21720 +a21721 = 21721 +a21722 = 21722 +a21723 = 21723 +a21724 = 21724 +a21725 = 21725 +a21726 = 21726 +a21727 = 21727 +a21728 = 21728 +a21729 = 21729 +a21730 = 21730 +a21731 = 21731 +a21732 = 21732 +a21733 = 21733 +a21734 = 21734 +a21735 = 21735 +a21736 = 21736 +a21737 = 21737 +a21738 = 21738 +a21739 = 21739 +a21740 = 21740 +a21741 = 21741 +a21742 = 21742 +a21743 = 21743 +a21744 = 21744 +a21745 = 21745 +a21746 = 21746 +a21747 = 21747 +a21748 = 21748 +a21749 = 21749 +a21750 = 21750 +a21751 = 21751 +a21752 = 21752 +a21753 = 21753 +a21754 = 21754 +a21755 = 21755 +a21756 = 21756 +a21757 = 21757 +a21758 = 21758 +a21759 = 21759 +a21760 = 21760 +a21761 = 21761 +a21762 = 21762 +a21763 = 21763 +a21764 = 21764 +a21765 = 21765 +a21766 = 21766 +a21767 = 21767 +a21768 = 21768 +a21769 = 21769 +a21770 = 21770 +a21771 = 21771 +a21772 = 21772 +a21773 = 21773 +a21774 = 21774 +a21775 = 21775 +a21776 = 21776 +a21777 = 21777 +a21778 = 21778 +a21779 = 21779 +a21780 = 21780 +a21781 = 21781 +a21782 = 21782 +a21783 = 21783 +a21784 = 21784 +a21785 = 21785 +a21786 = 21786 +a21787 = 21787 +a21788 = 21788 +a21789 = 21789 +a21790 = 21790 +a21791 = 21791 +a21792 = 21792 +a21793 = 21793 +a21794 = 21794 +a21795 = 21795 +a21796 = 21796 +a21797 = 21797 +a21798 = 21798 +a21799 = 21799 +a21800 = 21800 +a21801 = 21801 +a21802 = 21802 +a21803 = 21803 +a21804 = 21804 +a21805 = 21805 +a21806 = 21806 +a21807 = 21807 +a21808 = 21808 +a21809 = 21809 +a21810 = 21810 +a21811 = 21811 +a21812 = 21812 +a21813 = 21813 +a21814 = 21814 +a21815 = 21815 +a21816 = 21816 +a21817 = 21817 +a21818 = 21818 +a21819 = 21819 +a21820 = 21820 +a21821 = 21821 +a21822 = 21822 +a21823 = 21823 +a21824 = 21824 +a21825 = 21825 +a21826 = 21826 +a21827 = 21827 +a21828 = 21828 +a21829 = 21829 +a21830 = 21830 +a21831 = 21831 +a21832 = 21832 +a21833 = 21833 +a21834 = 21834 +a21835 = 21835 +a21836 = 21836 +a21837 = 21837 +a21838 = 21838 +a21839 = 21839 +a21840 = 21840 +a21841 = 21841 +a21842 = 21842 +a21843 = 21843 +a21844 = 21844 +a21845 = 21845 +a21846 = 21846 +a21847 = 21847 +a21848 = 21848 +a21849 = 21849 +a21850 = 21850 +a21851 = 21851 +a21852 = 21852 +a21853 = 21853 +a21854 = 21854 +a21855 = 21855 +a21856 = 21856 +a21857 = 21857 +a21858 = 21858 +a21859 = 21859 +a21860 = 21860 +a21861 = 21861 +a21862 = 21862 +a21863 = 21863 +a21864 = 21864 +a21865 = 21865 +a21866 = 21866 +a21867 = 21867 +a21868 = 21868 +a21869 = 21869 +a21870 = 21870 +a21871 = 21871 +a21872 = 21872 +a21873 = 21873 +a21874 = 21874 +a21875 = 21875 +a21876 = 21876 +a21877 = 21877 +a21878 = 21878 +a21879 = 21879 +a21880 = 21880 +a21881 = 21881 +a21882 = 21882 +a21883 = 21883 +a21884 = 21884 +a21885 = 21885 +a21886 = 21886 +a21887 = 21887 +a21888 = 21888 +a21889 = 21889 +a21890 = 21890 +a21891 = 21891 +a21892 = 21892 +a21893 = 21893 +a21894 = 21894 +a21895 = 21895 +a21896 = 21896 +a21897 = 21897 +a21898 = 21898 +a21899 = 21899 +a21900 = 21900 +a21901 = 21901 +a21902 = 21902 +a21903 = 21903 +a21904 = 21904 +a21905 = 21905 +a21906 = 21906 +a21907 = 21907 +a21908 = 21908 +a21909 = 21909 +a21910 = 21910 +a21911 = 21911 +a21912 = 21912 +a21913 = 21913 +a21914 = 21914 +a21915 = 21915 +a21916 = 21916 +a21917 = 21917 +a21918 = 21918 +a21919 = 21919 +a21920 = 21920 +a21921 = 21921 +a21922 = 21922 +a21923 = 21923 +a21924 = 21924 +a21925 = 21925 +a21926 = 21926 +a21927 = 21927 +a21928 = 21928 +a21929 = 21929 +a21930 = 21930 +a21931 = 21931 +a21932 = 21932 +a21933 = 21933 +a21934 = 21934 +a21935 = 21935 +a21936 = 21936 +a21937 = 21937 +a21938 = 21938 +a21939 = 21939 +a21940 = 21940 +a21941 = 21941 +a21942 = 21942 +a21943 = 21943 +a21944 = 21944 +a21945 = 21945 +a21946 = 21946 +a21947 = 21947 +a21948 = 21948 +a21949 = 21949 +a21950 = 21950 +a21951 = 21951 +a21952 = 21952 +a21953 = 21953 +a21954 = 21954 +a21955 = 21955 +a21956 = 21956 +a21957 = 21957 +a21958 = 21958 +a21959 = 21959 +a21960 = 21960 +a21961 = 21961 +a21962 = 21962 +a21963 = 21963 +a21964 = 21964 +a21965 = 21965 +a21966 = 21966 +a21967 = 21967 +a21968 = 21968 +a21969 = 21969 +a21970 = 21970 +a21971 = 21971 +a21972 = 21972 +a21973 = 21973 +a21974 = 21974 +a21975 = 21975 +a21976 = 21976 +a21977 = 21977 +a21978 = 21978 +a21979 = 21979 +a21980 = 21980 +a21981 = 21981 +a21982 = 21982 +a21983 = 21983 +a21984 = 21984 +a21985 = 21985 +a21986 = 21986 +a21987 = 21987 +a21988 = 21988 +a21989 = 21989 +a21990 = 21990 +a21991 = 21991 +a21992 = 21992 +a21993 = 21993 +a21994 = 21994 +a21995 = 21995 +a21996 = 21996 +a21997 = 21997 +a21998 = 21998 +a21999 = 21999 +a22000 = 22000 +a22001 = 22001 +a22002 = 22002 +a22003 = 22003 +a22004 = 22004 +a22005 = 22005 +a22006 = 22006 +a22007 = 22007 +a22008 = 22008 +a22009 = 22009 +a22010 = 22010 +a22011 = 22011 +a22012 = 22012 +a22013 = 22013 +a22014 = 22014 +a22015 = 22015 +a22016 = 22016 +a22017 = 22017 +a22018 = 22018 +a22019 = 22019 +a22020 = 22020 +a22021 = 22021 +a22022 = 22022 +a22023 = 22023 +a22024 = 22024 +a22025 = 22025 +a22026 = 22026 +a22027 = 22027 +a22028 = 22028 +a22029 = 22029 +a22030 = 22030 +a22031 = 22031 +a22032 = 22032 +a22033 = 22033 +a22034 = 22034 +a22035 = 22035 +a22036 = 22036 +a22037 = 22037 +a22038 = 22038 +a22039 = 22039 +a22040 = 22040 +a22041 = 22041 +a22042 = 22042 +a22043 = 22043 +a22044 = 22044 +a22045 = 22045 +a22046 = 22046 +a22047 = 22047 +a22048 = 22048 +a22049 = 22049 +a22050 = 22050 +a22051 = 22051 +a22052 = 22052 +a22053 = 22053 +a22054 = 22054 +a22055 = 22055 +a22056 = 22056 +a22057 = 22057 +a22058 = 22058 +a22059 = 22059 +a22060 = 22060 +a22061 = 22061 +a22062 = 22062 +a22063 = 22063 +a22064 = 22064 +a22065 = 22065 +a22066 = 22066 +a22067 = 22067 +a22068 = 22068 +a22069 = 22069 +a22070 = 22070 +a22071 = 22071 +a22072 = 22072 +a22073 = 22073 +a22074 = 22074 +a22075 = 22075 +a22076 = 22076 +a22077 = 22077 +a22078 = 22078 +a22079 = 22079 +a22080 = 22080 +a22081 = 22081 +a22082 = 22082 +a22083 = 22083 +a22084 = 22084 +a22085 = 22085 +a22086 = 22086 +a22087 = 22087 +a22088 = 22088 +a22089 = 22089 +a22090 = 22090 +a22091 = 22091 +a22092 = 22092 +a22093 = 22093 +a22094 = 22094 +a22095 = 22095 +a22096 = 22096 +a22097 = 22097 +a22098 = 22098 +a22099 = 22099 +a22100 = 22100 +a22101 = 22101 +a22102 = 22102 +a22103 = 22103 +a22104 = 22104 +a22105 = 22105 +a22106 = 22106 +a22107 = 22107 +a22108 = 22108 +a22109 = 22109 +a22110 = 22110 +a22111 = 22111 +a22112 = 22112 +a22113 = 22113 +a22114 = 22114 +a22115 = 22115 +a22116 = 22116 +a22117 = 22117 +a22118 = 22118 +a22119 = 22119 +a22120 = 22120 +a22121 = 22121 +a22122 = 22122 +a22123 = 22123 +a22124 = 22124 +a22125 = 22125 +a22126 = 22126 +a22127 = 22127 +a22128 = 22128 +a22129 = 22129 +a22130 = 22130 +a22131 = 22131 +a22132 = 22132 +a22133 = 22133 +a22134 = 22134 +a22135 = 22135 +a22136 = 22136 +a22137 = 22137 +a22138 = 22138 +a22139 = 22139 +a22140 = 22140 +a22141 = 22141 +a22142 = 22142 +a22143 = 22143 +a22144 = 22144 +a22145 = 22145 +a22146 = 22146 +a22147 = 22147 +a22148 = 22148 +a22149 = 22149 +a22150 = 22150 +a22151 = 22151 +a22152 = 22152 +a22153 = 22153 +a22154 = 22154 +a22155 = 22155 +a22156 = 22156 +a22157 = 22157 +a22158 = 22158 +a22159 = 22159 +a22160 = 22160 +a22161 = 22161 +a22162 = 22162 +a22163 = 22163 +a22164 = 22164 +a22165 = 22165 +a22166 = 22166 +a22167 = 22167 +a22168 = 22168 +a22169 = 22169 +a22170 = 22170 +a22171 = 22171 +a22172 = 22172 +a22173 = 22173 +a22174 = 22174 +a22175 = 22175 +a22176 = 22176 +a22177 = 22177 +a22178 = 22178 +a22179 = 22179 +a22180 = 22180 +a22181 = 22181 +a22182 = 22182 +a22183 = 22183 +a22184 = 22184 +a22185 = 22185 +a22186 = 22186 +a22187 = 22187 +a22188 = 22188 +a22189 = 22189 +a22190 = 22190 +a22191 = 22191 +a22192 = 22192 +a22193 = 22193 +a22194 = 22194 +a22195 = 22195 +a22196 = 22196 +a22197 = 22197 +a22198 = 22198 +a22199 = 22199 +a22200 = 22200 +a22201 = 22201 +a22202 = 22202 +a22203 = 22203 +a22204 = 22204 +a22205 = 22205 +a22206 = 22206 +a22207 = 22207 +a22208 = 22208 +a22209 = 22209 +a22210 = 22210 +a22211 = 22211 +a22212 = 22212 +a22213 = 22213 +a22214 = 22214 +a22215 = 22215 +a22216 = 22216 +a22217 = 22217 +a22218 = 22218 +a22219 = 22219 +a22220 = 22220 +a22221 = 22221 +a22222 = 22222 +a22223 = 22223 +a22224 = 22224 +a22225 = 22225 +a22226 = 22226 +a22227 = 22227 +a22228 = 22228 +a22229 = 22229 +a22230 = 22230 +a22231 = 22231 +a22232 = 22232 +a22233 = 22233 +a22234 = 22234 +a22235 = 22235 +a22236 = 22236 +a22237 = 22237 +a22238 = 22238 +a22239 = 22239 +a22240 = 22240 +a22241 = 22241 +a22242 = 22242 +a22243 = 22243 +a22244 = 22244 +a22245 = 22245 +a22246 = 22246 +a22247 = 22247 +a22248 = 22248 +a22249 = 22249 +a22250 = 22250 +a22251 = 22251 +a22252 = 22252 +a22253 = 22253 +a22254 = 22254 +a22255 = 22255 +a22256 = 22256 +a22257 = 22257 +a22258 = 22258 +a22259 = 22259 +a22260 = 22260 +a22261 = 22261 +a22262 = 22262 +a22263 = 22263 +a22264 = 22264 +a22265 = 22265 +a22266 = 22266 +a22267 = 22267 +a22268 = 22268 +a22269 = 22269 +a22270 = 22270 +a22271 = 22271 +a22272 = 22272 +a22273 = 22273 +a22274 = 22274 +a22275 = 22275 +a22276 = 22276 +a22277 = 22277 +a22278 = 22278 +a22279 = 22279 +a22280 = 22280 +a22281 = 22281 +a22282 = 22282 +a22283 = 22283 +a22284 = 22284 +a22285 = 22285 +a22286 = 22286 +a22287 = 22287 +a22288 = 22288 +a22289 = 22289 +a22290 = 22290 +a22291 = 22291 +a22292 = 22292 +a22293 = 22293 +a22294 = 22294 +a22295 = 22295 +a22296 = 22296 +a22297 = 22297 +a22298 = 22298 +a22299 = 22299 +a22300 = 22300 +a22301 = 22301 +a22302 = 22302 +a22303 = 22303 +a22304 = 22304 +a22305 = 22305 +a22306 = 22306 +a22307 = 22307 +a22308 = 22308 +a22309 = 22309 +a22310 = 22310 +a22311 = 22311 +a22312 = 22312 +a22313 = 22313 +a22314 = 22314 +a22315 = 22315 +a22316 = 22316 +a22317 = 22317 +a22318 = 22318 +a22319 = 22319 +a22320 = 22320 +a22321 = 22321 +a22322 = 22322 +a22323 = 22323 +a22324 = 22324 +a22325 = 22325 +a22326 = 22326 +a22327 = 22327 +a22328 = 22328 +a22329 = 22329 +a22330 = 22330 +a22331 = 22331 +a22332 = 22332 +a22333 = 22333 +a22334 = 22334 +a22335 = 22335 +a22336 = 22336 +a22337 = 22337 +a22338 = 22338 +a22339 = 22339 +a22340 = 22340 +a22341 = 22341 +a22342 = 22342 +a22343 = 22343 +a22344 = 22344 +a22345 = 22345 +a22346 = 22346 +a22347 = 22347 +a22348 = 22348 +a22349 = 22349 +a22350 = 22350 +a22351 = 22351 +a22352 = 22352 +a22353 = 22353 +a22354 = 22354 +a22355 = 22355 +a22356 = 22356 +a22357 = 22357 +a22358 = 22358 +a22359 = 22359 +a22360 = 22360 +a22361 = 22361 +a22362 = 22362 +a22363 = 22363 +a22364 = 22364 +a22365 = 22365 +a22366 = 22366 +a22367 = 22367 +a22368 = 22368 +a22369 = 22369 +a22370 = 22370 +a22371 = 22371 +a22372 = 22372 +a22373 = 22373 +a22374 = 22374 +a22375 = 22375 +a22376 = 22376 +a22377 = 22377 +a22378 = 22378 +a22379 = 22379 +a22380 = 22380 +a22381 = 22381 +a22382 = 22382 +a22383 = 22383 +a22384 = 22384 +a22385 = 22385 +a22386 = 22386 +a22387 = 22387 +a22388 = 22388 +a22389 = 22389 +a22390 = 22390 +a22391 = 22391 +a22392 = 22392 +a22393 = 22393 +a22394 = 22394 +a22395 = 22395 +a22396 = 22396 +a22397 = 22397 +a22398 = 22398 +a22399 = 22399 +a22400 = 22400 +a22401 = 22401 +a22402 = 22402 +a22403 = 22403 +a22404 = 22404 +a22405 = 22405 +a22406 = 22406 +a22407 = 22407 +a22408 = 22408 +a22409 = 22409 +a22410 = 22410 +a22411 = 22411 +a22412 = 22412 +a22413 = 22413 +a22414 = 22414 +a22415 = 22415 +a22416 = 22416 +a22417 = 22417 +a22418 = 22418 +a22419 = 22419 +a22420 = 22420 +a22421 = 22421 +a22422 = 22422 +a22423 = 22423 +a22424 = 22424 +a22425 = 22425 +a22426 = 22426 +a22427 = 22427 +a22428 = 22428 +a22429 = 22429 +a22430 = 22430 +a22431 = 22431 +a22432 = 22432 +a22433 = 22433 +a22434 = 22434 +a22435 = 22435 +a22436 = 22436 +a22437 = 22437 +a22438 = 22438 +a22439 = 22439 +a22440 = 22440 +a22441 = 22441 +a22442 = 22442 +a22443 = 22443 +a22444 = 22444 +a22445 = 22445 +a22446 = 22446 +a22447 = 22447 +a22448 = 22448 +a22449 = 22449 +a22450 = 22450 +a22451 = 22451 +a22452 = 22452 +a22453 = 22453 +a22454 = 22454 +a22455 = 22455 +a22456 = 22456 +a22457 = 22457 +a22458 = 22458 +a22459 = 22459 +a22460 = 22460 +a22461 = 22461 +a22462 = 22462 +a22463 = 22463 +a22464 = 22464 +a22465 = 22465 +a22466 = 22466 +a22467 = 22467 +a22468 = 22468 +a22469 = 22469 +a22470 = 22470 +a22471 = 22471 +a22472 = 22472 +a22473 = 22473 +a22474 = 22474 +a22475 = 22475 +a22476 = 22476 +a22477 = 22477 +a22478 = 22478 +a22479 = 22479 +a22480 = 22480 +a22481 = 22481 +a22482 = 22482 +a22483 = 22483 +a22484 = 22484 +a22485 = 22485 +a22486 = 22486 +a22487 = 22487 +a22488 = 22488 +a22489 = 22489 +a22490 = 22490 +a22491 = 22491 +a22492 = 22492 +a22493 = 22493 +a22494 = 22494 +a22495 = 22495 +a22496 = 22496 +a22497 = 22497 +a22498 = 22498 +a22499 = 22499 +a22500 = 22500 +a22501 = 22501 +a22502 = 22502 +a22503 = 22503 +a22504 = 22504 +a22505 = 22505 +a22506 = 22506 +a22507 = 22507 +a22508 = 22508 +a22509 = 22509 +a22510 = 22510 +a22511 = 22511 +a22512 = 22512 +a22513 = 22513 +a22514 = 22514 +a22515 = 22515 +a22516 = 22516 +a22517 = 22517 +a22518 = 22518 +a22519 = 22519 +a22520 = 22520 +a22521 = 22521 +a22522 = 22522 +a22523 = 22523 +a22524 = 22524 +a22525 = 22525 +a22526 = 22526 +a22527 = 22527 +a22528 = 22528 +a22529 = 22529 +a22530 = 22530 +a22531 = 22531 +a22532 = 22532 +a22533 = 22533 +a22534 = 22534 +a22535 = 22535 +a22536 = 22536 +a22537 = 22537 +a22538 = 22538 +a22539 = 22539 +a22540 = 22540 +a22541 = 22541 +a22542 = 22542 +a22543 = 22543 +a22544 = 22544 +a22545 = 22545 +a22546 = 22546 +a22547 = 22547 +a22548 = 22548 +a22549 = 22549 +a22550 = 22550 +a22551 = 22551 +a22552 = 22552 +a22553 = 22553 +a22554 = 22554 +a22555 = 22555 +a22556 = 22556 +a22557 = 22557 +a22558 = 22558 +a22559 = 22559 +a22560 = 22560 +a22561 = 22561 +a22562 = 22562 +a22563 = 22563 +a22564 = 22564 +a22565 = 22565 +a22566 = 22566 +a22567 = 22567 +a22568 = 22568 +a22569 = 22569 +a22570 = 22570 +a22571 = 22571 +a22572 = 22572 +a22573 = 22573 +a22574 = 22574 +a22575 = 22575 +a22576 = 22576 +a22577 = 22577 +a22578 = 22578 +a22579 = 22579 +a22580 = 22580 +a22581 = 22581 +a22582 = 22582 +a22583 = 22583 +a22584 = 22584 +a22585 = 22585 +a22586 = 22586 +a22587 = 22587 +a22588 = 22588 +a22589 = 22589 +a22590 = 22590 +a22591 = 22591 +a22592 = 22592 +a22593 = 22593 +a22594 = 22594 +a22595 = 22595 +a22596 = 22596 +a22597 = 22597 +a22598 = 22598 +a22599 = 22599 +a22600 = 22600 +a22601 = 22601 +a22602 = 22602 +a22603 = 22603 +a22604 = 22604 +a22605 = 22605 +a22606 = 22606 +a22607 = 22607 +a22608 = 22608 +a22609 = 22609 +a22610 = 22610 +a22611 = 22611 +a22612 = 22612 +a22613 = 22613 +a22614 = 22614 +a22615 = 22615 +a22616 = 22616 +a22617 = 22617 +a22618 = 22618 +a22619 = 22619 +a22620 = 22620 +a22621 = 22621 +a22622 = 22622 +a22623 = 22623 +a22624 = 22624 +a22625 = 22625 +a22626 = 22626 +a22627 = 22627 +a22628 = 22628 +a22629 = 22629 +a22630 = 22630 +a22631 = 22631 +a22632 = 22632 +a22633 = 22633 +a22634 = 22634 +a22635 = 22635 +a22636 = 22636 +a22637 = 22637 +a22638 = 22638 +a22639 = 22639 +a22640 = 22640 +a22641 = 22641 +a22642 = 22642 +a22643 = 22643 +a22644 = 22644 +a22645 = 22645 +a22646 = 22646 +a22647 = 22647 +a22648 = 22648 +a22649 = 22649 +a22650 = 22650 +a22651 = 22651 +a22652 = 22652 +a22653 = 22653 +a22654 = 22654 +a22655 = 22655 +a22656 = 22656 +a22657 = 22657 +a22658 = 22658 +a22659 = 22659 +a22660 = 22660 +a22661 = 22661 +a22662 = 22662 +a22663 = 22663 +a22664 = 22664 +a22665 = 22665 +a22666 = 22666 +a22667 = 22667 +a22668 = 22668 +a22669 = 22669 +a22670 = 22670 +a22671 = 22671 +a22672 = 22672 +a22673 = 22673 +a22674 = 22674 +a22675 = 22675 +a22676 = 22676 +a22677 = 22677 +a22678 = 22678 +a22679 = 22679 +a22680 = 22680 +a22681 = 22681 +a22682 = 22682 +a22683 = 22683 +a22684 = 22684 +a22685 = 22685 +a22686 = 22686 +a22687 = 22687 +a22688 = 22688 +a22689 = 22689 +a22690 = 22690 +a22691 = 22691 +a22692 = 22692 +a22693 = 22693 +a22694 = 22694 +a22695 = 22695 +a22696 = 22696 +a22697 = 22697 +a22698 = 22698 +a22699 = 22699 +a22700 = 22700 +a22701 = 22701 +a22702 = 22702 +a22703 = 22703 +a22704 = 22704 +a22705 = 22705 +a22706 = 22706 +a22707 = 22707 +a22708 = 22708 +a22709 = 22709 +a22710 = 22710 +a22711 = 22711 +a22712 = 22712 +a22713 = 22713 +a22714 = 22714 +a22715 = 22715 +a22716 = 22716 +a22717 = 22717 +a22718 = 22718 +a22719 = 22719 +a22720 = 22720 +a22721 = 22721 +a22722 = 22722 +a22723 = 22723 +a22724 = 22724 +a22725 = 22725 +a22726 = 22726 +a22727 = 22727 +a22728 = 22728 +a22729 = 22729 +a22730 = 22730 +a22731 = 22731 +a22732 = 22732 +a22733 = 22733 +a22734 = 22734 +a22735 = 22735 +a22736 = 22736 +a22737 = 22737 +a22738 = 22738 +a22739 = 22739 +a22740 = 22740 +a22741 = 22741 +a22742 = 22742 +a22743 = 22743 +a22744 = 22744 +a22745 = 22745 +a22746 = 22746 +a22747 = 22747 +a22748 = 22748 +a22749 = 22749 +a22750 = 22750 +a22751 = 22751 +a22752 = 22752 +a22753 = 22753 +a22754 = 22754 +a22755 = 22755 +a22756 = 22756 +a22757 = 22757 +a22758 = 22758 +a22759 = 22759 +a22760 = 22760 +a22761 = 22761 +a22762 = 22762 +a22763 = 22763 +a22764 = 22764 +a22765 = 22765 +a22766 = 22766 +a22767 = 22767 +a22768 = 22768 +a22769 = 22769 +a22770 = 22770 +a22771 = 22771 +a22772 = 22772 +a22773 = 22773 +a22774 = 22774 +a22775 = 22775 +a22776 = 22776 +a22777 = 22777 +a22778 = 22778 +a22779 = 22779 +a22780 = 22780 +a22781 = 22781 +a22782 = 22782 +a22783 = 22783 +a22784 = 22784 +a22785 = 22785 +a22786 = 22786 +a22787 = 22787 +a22788 = 22788 +a22789 = 22789 +a22790 = 22790 +a22791 = 22791 +a22792 = 22792 +a22793 = 22793 +a22794 = 22794 +a22795 = 22795 +a22796 = 22796 +a22797 = 22797 +a22798 = 22798 +a22799 = 22799 +a22800 = 22800 +a22801 = 22801 +a22802 = 22802 +a22803 = 22803 +a22804 = 22804 +a22805 = 22805 +a22806 = 22806 +a22807 = 22807 +a22808 = 22808 +a22809 = 22809 +a22810 = 22810 +a22811 = 22811 +a22812 = 22812 +a22813 = 22813 +a22814 = 22814 +a22815 = 22815 +a22816 = 22816 +a22817 = 22817 +a22818 = 22818 +a22819 = 22819 +a22820 = 22820 +a22821 = 22821 +a22822 = 22822 +a22823 = 22823 +a22824 = 22824 +a22825 = 22825 +a22826 = 22826 +a22827 = 22827 +a22828 = 22828 +a22829 = 22829 +a22830 = 22830 +a22831 = 22831 +a22832 = 22832 +a22833 = 22833 +a22834 = 22834 +a22835 = 22835 +a22836 = 22836 +a22837 = 22837 +a22838 = 22838 +a22839 = 22839 +a22840 = 22840 +a22841 = 22841 +a22842 = 22842 +a22843 = 22843 +a22844 = 22844 +a22845 = 22845 +a22846 = 22846 +a22847 = 22847 +a22848 = 22848 +a22849 = 22849 +a22850 = 22850 +a22851 = 22851 +a22852 = 22852 +a22853 = 22853 +a22854 = 22854 +a22855 = 22855 +a22856 = 22856 +a22857 = 22857 +a22858 = 22858 +a22859 = 22859 +a22860 = 22860 +a22861 = 22861 +a22862 = 22862 +a22863 = 22863 +a22864 = 22864 +a22865 = 22865 +a22866 = 22866 +a22867 = 22867 +a22868 = 22868 +a22869 = 22869 +a22870 = 22870 +a22871 = 22871 +a22872 = 22872 +a22873 = 22873 +a22874 = 22874 +a22875 = 22875 +a22876 = 22876 +a22877 = 22877 +a22878 = 22878 +a22879 = 22879 +a22880 = 22880 +a22881 = 22881 +a22882 = 22882 +a22883 = 22883 +a22884 = 22884 +a22885 = 22885 +a22886 = 22886 +a22887 = 22887 +a22888 = 22888 +a22889 = 22889 +a22890 = 22890 +a22891 = 22891 +a22892 = 22892 +a22893 = 22893 +a22894 = 22894 +a22895 = 22895 +a22896 = 22896 +a22897 = 22897 +a22898 = 22898 +a22899 = 22899 +a22900 = 22900 +a22901 = 22901 +a22902 = 22902 +a22903 = 22903 +a22904 = 22904 +a22905 = 22905 +a22906 = 22906 +a22907 = 22907 +a22908 = 22908 +a22909 = 22909 +a22910 = 22910 +a22911 = 22911 +a22912 = 22912 +a22913 = 22913 +a22914 = 22914 +a22915 = 22915 +a22916 = 22916 +a22917 = 22917 +a22918 = 22918 +a22919 = 22919 +a22920 = 22920 +a22921 = 22921 +a22922 = 22922 +a22923 = 22923 +a22924 = 22924 +a22925 = 22925 +a22926 = 22926 +a22927 = 22927 +a22928 = 22928 +a22929 = 22929 +a22930 = 22930 +a22931 = 22931 +a22932 = 22932 +a22933 = 22933 +a22934 = 22934 +a22935 = 22935 +a22936 = 22936 +a22937 = 22937 +a22938 = 22938 +a22939 = 22939 +a22940 = 22940 +a22941 = 22941 +a22942 = 22942 +a22943 = 22943 +a22944 = 22944 +a22945 = 22945 +a22946 = 22946 +a22947 = 22947 +a22948 = 22948 +a22949 = 22949 +a22950 = 22950 +a22951 = 22951 +a22952 = 22952 +a22953 = 22953 +a22954 = 22954 +a22955 = 22955 +a22956 = 22956 +a22957 = 22957 +a22958 = 22958 +a22959 = 22959 +a22960 = 22960 +a22961 = 22961 +a22962 = 22962 +a22963 = 22963 +a22964 = 22964 +a22965 = 22965 +a22966 = 22966 +a22967 = 22967 +a22968 = 22968 +a22969 = 22969 +a22970 = 22970 +a22971 = 22971 +a22972 = 22972 +a22973 = 22973 +a22974 = 22974 +a22975 = 22975 +a22976 = 22976 +a22977 = 22977 +a22978 = 22978 +a22979 = 22979 +a22980 = 22980 +a22981 = 22981 +a22982 = 22982 +a22983 = 22983 +a22984 = 22984 +a22985 = 22985 +a22986 = 22986 +a22987 = 22987 +a22988 = 22988 +a22989 = 22989 +a22990 = 22990 +a22991 = 22991 +a22992 = 22992 +a22993 = 22993 +a22994 = 22994 +a22995 = 22995 +a22996 = 22996 +a22997 = 22997 +a22998 = 22998 +a22999 = 22999 +a23000 = 23000 +a23001 = 23001 +a23002 = 23002 +a23003 = 23003 +a23004 = 23004 +a23005 = 23005 +a23006 = 23006 +a23007 = 23007 +a23008 = 23008 +a23009 = 23009 +a23010 = 23010 +a23011 = 23011 +a23012 = 23012 +a23013 = 23013 +a23014 = 23014 +a23015 = 23015 +a23016 = 23016 +a23017 = 23017 +a23018 = 23018 +a23019 = 23019 +a23020 = 23020 +a23021 = 23021 +a23022 = 23022 +a23023 = 23023 +a23024 = 23024 +a23025 = 23025 +a23026 = 23026 +a23027 = 23027 +a23028 = 23028 +a23029 = 23029 +a23030 = 23030 +a23031 = 23031 +a23032 = 23032 +a23033 = 23033 +a23034 = 23034 +a23035 = 23035 +a23036 = 23036 +a23037 = 23037 +a23038 = 23038 +a23039 = 23039 +a23040 = 23040 +a23041 = 23041 +a23042 = 23042 +a23043 = 23043 +a23044 = 23044 +a23045 = 23045 +a23046 = 23046 +a23047 = 23047 +a23048 = 23048 +a23049 = 23049 +a23050 = 23050 +a23051 = 23051 +a23052 = 23052 +a23053 = 23053 +a23054 = 23054 +a23055 = 23055 +a23056 = 23056 +a23057 = 23057 +a23058 = 23058 +a23059 = 23059 +a23060 = 23060 +a23061 = 23061 +a23062 = 23062 +a23063 = 23063 +a23064 = 23064 +a23065 = 23065 +a23066 = 23066 +a23067 = 23067 +a23068 = 23068 +a23069 = 23069 +a23070 = 23070 +a23071 = 23071 +a23072 = 23072 +a23073 = 23073 +a23074 = 23074 +a23075 = 23075 +a23076 = 23076 +a23077 = 23077 +a23078 = 23078 +a23079 = 23079 +a23080 = 23080 +a23081 = 23081 +a23082 = 23082 +a23083 = 23083 +a23084 = 23084 +a23085 = 23085 +a23086 = 23086 +a23087 = 23087 +a23088 = 23088 +a23089 = 23089 +a23090 = 23090 +a23091 = 23091 +a23092 = 23092 +a23093 = 23093 +a23094 = 23094 +a23095 = 23095 +a23096 = 23096 +a23097 = 23097 +a23098 = 23098 +a23099 = 23099 +a23100 = 23100 +a23101 = 23101 +a23102 = 23102 +a23103 = 23103 +a23104 = 23104 +a23105 = 23105 +a23106 = 23106 +a23107 = 23107 +a23108 = 23108 +a23109 = 23109 +a23110 = 23110 +a23111 = 23111 +a23112 = 23112 +a23113 = 23113 +a23114 = 23114 +a23115 = 23115 +a23116 = 23116 +a23117 = 23117 +a23118 = 23118 +a23119 = 23119 +a23120 = 23120 +a23121 = 23121 +a23122 = 23122 +a23123 = 23123 +a23124 = 23124 +a23125 = 23125 +a23126 = 23126 +a23127 = 23127 +a23128 = 23128 +a23129 = 23129 +a23130 = 23130 +a23131 = 23131 +a23132 = 23132 +a23133 = 23133 +a23134 = 23134 +a23135 = 23135 +a23136 = 23136 +a23137 = 23137 +a23138 = 23138 +a23139 = 23139 +a23140 = 23140 +a23141 = 23141 +a23142 = 23142 +a23143 = 23143 +a23144 = 23144 +a23145 = 23145 +a23146 = 23146 +a23147 = 23147 +a23148 = 23148 +a23149 = 23149 +a23150 = 23150 +a23151 = 23151 +a23152 = 23152 +a23153 = 23153 +a23154 = 23154 +a23155 = 23155 +a23156 = 23156 +a23157 = 23157 +a23158 = 23158 +a23159 = 23159 +a23160 = 23160 +a23161 = 23161 +a23162 = 23162 +a23163 = 23163 +a23164 = 23164 +a23165 = 23165 +a23166 = 23166 +a23167 = 23167 +a23168 = 23168 +a23169 = 23169 +a23170 = 23170 +a23171 = 23171 +a23172 = 23172 +a23173 = 23173 +a23174 = 23174 +a23175 = 23175 +a23176 = 23176 +a23177 = 23177 +a23178 = 23178 +a23179 = 23179 +a23180 = 23180 +a23181 = 23181 +a23182 = 23182 +a23183 = 23183 +a23184 = 23184 +a23185 = 23185 +a23186 = 23186 +a23187 = 23187 +a23188 = 23188 +a23189 = 23189 +a23190 = 23190 +a23191 = 23191 +a23192 = 23192 +a23193 = 23193 +a23194 = 23194 +a23195 = 23195 +a23196 = 23196 +a23197 = 23197 +a23198 = 23198 +a23199 = 23199 +a23200 = 23200 +a23201 = 23201 +a23202 = 23202 +a23203 = 23203 +a23204 = 23204 +a23205 = 23205 +a23206 = 23206 +a23207 = 23207 +a23208 = 23208 +a23209 = 23209 +a23210 = 23210 +a23211 = 23211 +a23212 = 23212 +a23213 = 23213 +a23214 = 23214 +a23215 = 23215 +a23216 = 23216 +a23217 = 23217 +a23218 = 23218 +a23219 = 23219 +a23220 = 23220 +a23221 = 23221 +a23222 = 23222 +a23223 = 23223 +a23224 = 23224 +a23225 = 23225 +a23226 = 23226 +a23227 = 23227 +a23228 = 23228 +a23229 = 23229 +a23230 = 23230 +a23231 = 23231 +a23232 = 23232 +a23233 = 23233 +a23234 = 23234 +a23235 = 23235 +a23236 = 23236 +a23237 = 23237 +a23238 = 23238 +a23239 = 23239 +a23240 = 23240 +a23241 = 23241 +a23242 = 23242 +a23243 = 23243 +a23244 = 23244 +a23245 = 23245 +a23246 = 23246 +a23247 = 23247 +a23248 = 23248 +a23249 = 23249 +a23250 = 23250 +a23251 = 23251 +a23252 = 23252 +a23253 = 23253 +a23254 = 23254 +a23255 = 23255 +a23256 = 23256 +a23257 = 23257 +a23258 = 23258 +a23259 = 23259 +a23260 = 23260 +a23261 = 23261 +a23262 = 23262 +a23263 = 23263 +a23264 = 23264 +a23265 = 23265 +a23266 = 23266 +a23267 = 23267 +a23268 = 23268 +a23269 = 23269 +a23270 = 23270 +a23271 = 23271 +a23272 = 23272 +a23273 = 23273 +a23274 = 23274 +a23275 = 23275 +a23276 = 23276 +a23277 = 23277 +a23278 = 23278 +a23279 = 23279 +a23280 = 23280 +a23281 = 23281 +a23282 = 23282 +a23283 = 23283 +a23284 = 23284 +a23285 = 23285 +a23286 = 23286 +a23287 = 23287 +a23288 = 23288 +a23289 = 23289 +a23290 = 23290 +a23291 = 23291 +a23292 = 23292 +a23293 = 23293 +a23294 = 23294 +a23295 = 23295 +a23296 = 23296 +a23297 = 23297 +a23298 = 23298 +a23299 = 23299 +a23300 = 23300 +a23301 = 23301 +a23302 = 23302 +a23303 = 23303 +a23304 = 23304 +a23305 = 23305 +a23306 = 23306 +a23307 = 23307 +a23308 = 23308 +a23309 = 23309 +a23310 = 23310 +a23311 = 23311 +a23312 = 23312 +a23313 = 23313 +a23314 = 23314 +a23315 = 23315 +a23316 = 23316 +a23317 = 23317 +a23318 = 23318 +a23319 = 23319 +a23320 = 23320 +a23321 = 23321 +a23322 = 23322 +a23323 = 23323 +a23324 = 23324 +a23325 = 23325 +a23326 = 23326 +a23327 = 23327 +a23328 = 23328 +a23329 = 23329 +a23330 = 23330 +a23331 = 23331 +a23332 = 23332 +a23333 = 23333 +a23334 = 23334 +a23335 = 23335 +a23336 = 23336 +a23337 = 23337 +a23338 = 23338 +a23339 = 23339 +a23340 = 23340 +a23341 = 23341 +a23342 = 23342 +a23343 = 23343 +a23344 = 23344 +a23345 = 23345 +a23346 = 23346 +a23347 = 23347 +a23348 = 23348 +a23349 = 23349 +a23350 = 23350 +a23351 = 23351 +a23352 = 23352 +a23353 = 23353 +a23354 = 23354 +a23355 = 23355 +a23356 = 23356 +a23357 = 23357 +a23358 = 23358 +a23359 = 23359 +a23360 = 23360 +a23361 = 23361 +a23362 = 23362 +a23363 = 23363 +a23364 = 23364 +a23365 = 23365 +a23366 = 23366 +a23367 = 23367 +a23368 = 23368 +a23369 = 23369 +a23370 = 23370 +a23371 = 23371 +a23372 = 23372 +a23373 = 23373 +a23374 = 23374 +a23375 = 23375 +a23376 = 23376 +a23377 = 23377 +a23378 = 23378 +a23379 = 23379 +a23380 = 23380 +a23381 = 23381 +a23382 = 23382 +a23383 = 23383 +a23384 = 23384 +a23385 = 23385 +a23386 = 23386 +a23387 = 23387 +a23388 = 23388 +a23389 = 23389 +a23390 = 23390 +a23391 = 23391 +a23392 = 23392 +a23393 = 23393 +a23394 = 23394 +a23395 = 23395 +a23396 = 23396 +a23397 = 23397 +a23398 = 23398 +a23399 = 23399 +a23400 = 23400 +a23401 = 23401 +a23402 = 23402 +a23403 = 23403 +a23404 = 23404 +a23405 = 23405 +a23406 = 23406 +a23407 = 23407 +a23408 = 23408 +a23409 = 23409 +a23410 = 23410 +a23411 = 23411 +a23412 = 23412 +a23413 = 23413 +a23414 = 23414 +a23415 = 23415 +a23416 = 23416 +a23417 = 23417 +a23418 = 23418 +a23419 = 23419 +a23420 = 23420 +a23421 = 23421 +a23422 = 23422 +a23423 = 23423 +a23424 = 23424 +a23425 = 23425 +a23426 = 23426 +a23427 = 23427 +a23428 = 23428 +a23429 = 23429 +a23430 = 23430 +a23431 = 23431 +a23432 = 23432 +a23433 = 23433 +a23434 = 23434 +a23435 = 23435 +a23436 = 23436 +a23437 = 23437 +a23438 = 23438 +a23439 = 23439 +a23440 = 23440 +a23441 = 23441 +a23442 = 23442 +a23443 = 23443 +a23444 = 23444 +a23445 = 23445 +a23446 = 23446 +a23447 = 23447 +a23448 = 23448 +a23449 = 23449 +a23450 = 23450 +a23451 = 23451 +a23452 = 23452 +a23453 = 23453 +a23454 = 23454 +a23455 = 23455 +a23456 = 23456 +a23457 = 23457 +a23458 = 23458 +a23459 = 23459 +a23460 = 23460 +a23461 = 23461 +a23462 = 23462 +a23463 = 23463 +a23464 = 23464 +a23465 = 23465 +a23466 = 23466 +a23467 = 23467 +a23468 = 23468 +a23469 = 23469 +a23470 = 23470 +a23471 = 23471 +a23472 = 23472 +a23473 = 23473 +a23474 = 23474 +a23475 = 23475 +a23476 = 23476 +a23477 = 23477 +a23478 = 23478 +a23479 = 23479 +a23480 = 23480 +a23481 = 23481 +a23482 = 23482 +a23483 = 23483 +a23484 = 23484 +a23485 = 23485 +a23486 = 23486 +a23487 = 23487 +a23488 = 23488 +a23489 = 23489 +a23490 = 23490 +a23491 = 23491 +a23492 = 23492 +a23493 = 23493 +a23494 = 23494 +a23495 = 23495 +a23496 = 23496 +a23497 = 23497 +a23498 = 23498 +a23499 = 23499 +a23500 = 23500 +a23501 = 23501 +a23502 = 23502 +a23503 = 23503 +a23504 = 23504 +a23505 = 23505 +a23506 = 23506 +a23507 = 23507 +a23508 = 23508 +a23509 = 23509 +a23510 = 23510 +a23511 = 23511 +a23512 = 23512 +a23513 = 23513 +a23514 = 23514 +a23515 = 23515 +a23516 = 23516 +a23517 = 23517 +a23518 = 23518 +a23519 = 23519 +a23520 = 23520 +a23521 = 23521 +a23522 = 23522 +a23523 = 23523 +a23524 = 23524 +a23525 = 23525 +a23526 = 23526 +a23527 = 23527 +a23528 = 23528 +a23529 = 23529 +a23530 = 23530 +a23531 = 23531 +a23532 = 23532 +a23533 = 23533 +a23534 = 23534 +a23535 = 23535 +a23536 = 23536 +a23537 = 23537 +a23538 = 23538 +a23539 = 23539 +a23540 = 23540 +a23541 = 23541 +a23542 = 23542 +a23543 = 23543 +a23544 = 23544 +a23545 = 23545 +a23546 = 23546 +a23547 = 23547 +a23548 = 23548 +a23549 = 23549 +a23550 = 23550 +a23551 = 23551 +a23552 = 23552 +a23553 = 23553 +a23554 = 23554 +a23555 = 23555 +a23556 = 23556 +a23557 = 23557 +a23558 = 23558 +a23559 = 23559 +a23560 = 23560 +a23561 = 23561 +a23562 = 23562 +a23563 = 23563 +a23564 = 23564 +a23565 = 23565 +a23566 = 23566 +a23567 = 23567 +a23568 = 23568 +a23569 = 23569 +a23570 = 23570 +a23571 = 23571 +a23572 = 23572 +a23573 = 23573 +a23574 = 23574 +a23575 = 23575 +a23576 = 23576 +a23577 = 23577 +a23578 = 23578 +a23579 = 23579 +a23580 = 23580 +a23581 = 23581 +a23582 = 23582 +a23583 = 23583 +a23584 = 23584 +a23585 = 23585 +a23586 = 23586 +a23587 = 23587 +a23588 = 23588 +a23589 = 23589 +a23590 = 23590 +a23591 = 23591 +a23592 = 23592 +a23593 = 23593 +a23594 = 23594 +a23595 = 23595 +a23596 = 23596 +a23597 = 23597 +a23598 = 23598 +a23599 = 23599 +a23600 = 23600 +a23601 = 23601 +a23602 = 23602 +a23603 = 23603 +a23604 = 23604 +a23605 = 23605 +a23606 = 23606 +a23607 = 23607 +a23608 = 23608 +a23609 = 23609 +a23610 = 23610 +a23611 = 23611 +a23612 = 23612 +a23613 = 23613 +a23614 = 23614 +a23615 = 23615 +a23616 = 23616 +a23617 = 23617 +a23618 = 23618 +a23619 = 23619 +a23620 = 23620 +a23621 = 23621 +a23622 = 23622 +a23623 = 23623 +a23624 = 23624 +a23625 = 23625 +a23626 = 23626 +a23627 = 23627 +a23628 = 23628 +a23629 = 23629 +a23630 = 23630 +a23631 = 23631 +a23632 = 23632 +a23633 = 23633 +a23634 = 23634 +a23635 = 23635 +a23636 = 23636 +a23637 = 23637 +a23638 = 23638 +a23639 = 23639 +a23640 = 23640 +a23641 = 23641 +a23642 = 23642 +a23643 = 23643 +a23644 = 23644 +a23645 = 23645 +a23646 = 23646 +a23647 = 23647 +a23648 = 23648 +a23649 = 23649 +a23650 = 23650 +a23651 = 23651 +a23652 = 23652 +a23653 = 23653 +a23654 = 23654 +a23655 = 23655 +a23656 = 23656 +a23657 = 23657 +a23658 = 23658 +a23659 = 23659 +a23660 = 23660 +a23661 = 23661 +a23662 = 23662 +a23663 = 23663 +a23664 = 23664 +a23665 = 23665 +a23666 = 23666 +a23667 = 23667 +a23668 = 23668 +a23669 = 23669 +a23670 = 23670 +a23671 = 23671 +a23672 = 23672 +a23673 = 23673 +a23674 = 23674 +a23675 = 23675 +a23676 = 23676 +a23677 = 23677 +a23678 = 23678 +a23679 = 23679 +a23680 = 23680 +a23681 = 23681 +a23682 = 23682 +a23683 = 23683 +a23684 = 23684 +a23685 = 23685 +a23686 = 23686 +a23687 = 23687 +a23688 = 23688 +a23689 = 23689 +a23690 = 23690 +a23691 = 23691 +a23692 = 23692 +a23693 = 23693 +a23694 = 23694 +a23695 = 23695 +a23696 = 23696 +a23697 = 23697 +a23698 = 23698 +a23699 = 23699 +a23700 = 23700 +a23701 = 23701 +a23702 = 23702 +a23703 = 23703 +a23704 = 23704 +a23705 = 23705 +a23706 = 23706 +a23707 = 23707 +a23708 = 23708 +a23709 = 23709 +a23710 = 23710 +a23711 = 23711 +a23712 = 23712 +a23713 = 23713 +a23714 = 23714 +a23715 = 23715 +a23716 = 23716 +a23717 = 23717 +a23718 = 23718 +a23719 = 23719 +a23720 = 23720 +a23721 = 23721 +a23722 = 23722 +a23723 = 23723 +a23724 = 23724 +a23725 = 23725 +a23726 = 23726 +a23727 = 23727 +a23728 = 23728 +a23729 = 23729 +a23730 = 23730 +a23731 = 23731 +a23732 = 23732 +a23733 = 23733 +a23734 = 23734 +a23735 = 23735 +a23736 = 23736 +a23737 = 23737 +a23738 = 23738 +a23739 = 23739 +a23740 = 23740 +a23741 = 23741 +a23742 = 23742 +a23743 = 23743 +a23744 = 23744 +a23745 = 23745 +a23746 = 23746 +a23747 = 23747 +a23748 = 23748 +a23749 = 23749 +a23750 = 23750 +a23751 = 23751 +a23752 = 23752 +a23753 = 23753 +a23754 = 23754 +a23755 = 23755 +a23756 = 23756 +a23757 = 23757 +a23758 = 23758 +a23759 = 23759 +a23760 = 23760 +a23761 = 23761 +a23762 = 23762 +a23763 = 23763 +a23764 = 23764 +a23765 = 23765 +a23766 = 23766 +a23767 = 23767 +a23768 = 23768 +a23769 = 23769 +a23770 = 23770 +a23771 = 23771 +a23772 = 23772 +a23773 = 23773 +a23774 = 23774 +a23775 = 23775 +a23776 = 23776 +a23777 = 23777 +a23778 = 23778 +a23779 = 23779 +a23780 = 23780 +a23781 = 23781 +a23782 = 23782 +a23783 = 23783 +a23784 = 23784 +a23785 = 23785 +a23786 = 23786 +a23787 = 23787 +a23788 = 23788 +a23789 = 23789 +a23790 = 23790 +a23791 = 23791 +a23792 = 23792 +a23793 = 23793 +a23794 = 23794 +a23795 = 23795 +a23796 = 23796 +a23797 = 23797 +a23798 = 23798 +a23799 = 23799 +a23800 = 23800 +a23801 = 23801 +a23802 = 23802 +a23803 = 23803 +a23804 = 23804 +a23805 = 23805 +a23806 = 23806 +a23807 = 23807 +a23808 = 23808 +a23809 = 23809 +a23810 = 23810 +a23811 = 23811 +a23812 = 23812 +a23813 = 23813 +a23814 = 23814 +a23815 = 23815 +a23816 = 23816 +a23817 = 23817 +a23818 = 23818 +a23819 = 23819 +a23820 = 23820 +a23821 = 23821 +a23822 = 23822 +a23823 = 23823 +a23824 = 23824 +a23825 = 23825 +a23826 = 23826 +a23827 = 23827 +a23828 = 23828 +a23829 = 23829 +a23830 = 23830 +a23831 = 23831 +a23832 = 23832 +a23833 = 23833 +a23834 = 23834 +a23835 = 23835 +a23836 = 23836 +a23837 = 23837 +a23838 = 23838 +a23839 = 23839 +a23840 = 23840 +a23841 = 23841 +a23842 = 23842 +a23843 = 23843 +a23844 = 23844 +a23845 = 23845 +a23846 = 23846 +a23847 = 23847 +a23848 = 23848 +a23849 = 23849 +a23850 = 23850 +a23851 = 23851 +a23852 = 23852 +a23853 = 23853 +a23854 = 23854 +a23855 = 23855 +a23856 = 23856 +a23857 = 23857 +a23858 = 23858 +a23859 = 23859 +a23860 = 23860 +a23861 = 23861 +a23862 = 23862 +a23863 = 23863 +a23864 = 23864 +a23865 = 23865 +a23866 = 23866 +a23867 = 23867 +a23868 = 23868 +a23869 = 23869 +a23870 = 23870 +a23871 = 23871 +a23872 = 23872 +a23873 = 23873 +a23874 = 23874 +a23875 = 23875 +a23876 = 23876 +a23877 = 23877 +a23878 = 23878 +a23879 = 23879 +a23880 = 23880 +a23881 = 23881 +a23882 = 23882 +a23883 = 23883 +a23884 = 23884 +a23885 = 23885 +a23886 = 23886 +a23887 = 23887 +a23888 = 23888 +a23889 = 23889 +a23890 = 23890 +a23891 = 23891 +a23892 = 23892 +a23893 = 23893 +a23894 = 23894 +a23895 = 23895 +a23896 = 23896 +a23897 = 23897 +a23898 = 23898 +a23899 = 23899 +a23900 = 23900 +a23901 = 23901 +a23902 = 23902 +a23903 = 23903 +a23904 = 23904 +a23905 = 23905 +a23906 = 23906 +a23907 = 23907 +a23908 = 23908 +a23909 = 23909 +a23910 = 23910 +a23911 = 23911 +a23912 = 23912 +a23913 = 23913 +a23914 = 23914 +a23915 = 23915 +a23916 = 23916 +a23917 = 23917 +a23918 = 23918 +a23919 = 23919 +a23920 = 23920 +a23921 = 23921 +a23922 = 23922 +a23923 = 23923 +a23924 = 23924 +a23925 = 23925 +a23926 = 23926 +a23927 = 23927 +a23928 = 23928 +a23929 = 23929 +a23930 = 23930 +a23931 = 23931 +a23932 = 23932 +a23933 = 23933 +a23934 = 23934 +a23935 = 23935 +a23936 = 23936 +a23937 = 23937 +a23938 = 23938 +a23939 = 23939 +a23940 = 23940 +a23941 = 23941 +a23942 = 23942 +a23943 = 23943 +a23944 = 23944 +a23945 = 23945 +a23946 = 23946 +a23947 = 23947 +a23948 = 23948 +a23949 = 23949 +a23950 = 23950 +a23951 = 23951 +a23952 = 23952 +a23953 = 23953 +a23954 = 23954 +a23955 = 23955 +a23956 = 23956 +a23957 = 23957 +a23958 = 23958 +a23959 = 23959 +a23960 = 23960 +a23961 = 23961 +a23962 = 23962 +a23963 = 23963 +a23964 = 23964 +a23965 = 23965 +a23966 = 23966 +a23967 = 23967 +a23968 = 23968 +a23969 = 23969 +a23970 = 23970 +a23971 = 23971 +a23972 = 23972 +a23973 = 23973 +a23974 = 23974 +a23975 = 23975 +a23976 = 23976 +a23977 = 23977 +a23978 = 23978 +a23979 = 23979 +a23980 = 23980 +a23981 = 23981 +a23982 = 23982 +a23983 = 23983 +a23984 = 23984 +a23985 = 23985 +a23986 = 23986 +a23987 = 23987 +a23988 = 23988 +a23989 = 23989 +a23990 = 23990 +a23991 = 23991 +a23992 = 23992 +a23993 = 23993 +a23994 = 23994 +a23995 = 23995 +a23996 = 23996 +a23997 = 23997 +a23998 = 23998 +a23999 = 23999 +a24000 = 24000 +a24001 = 24001 +a24002 = 24002 +a24003 = 24003 +a24004 = 24004 +a24005 = 24005 +a24006 = 24006 +a24007 = 24007 +a24008 = 24008 +a24009 = 24009 +a24010 = 24010 +a24011 = 24011 +a24012 = 24012 +a24013 = 24013 +a24014 = 24014 +a24015 = 24015 +a24016 = 24016 +a24017 = 24017 +a24018 = 24018 +a24019 = 24019 +a24020 = 24020 +a24021 = 24021 +a24022 = 24022 +a24023 = 24023 +a24024 = 24024 +a24025 = 24025 +a24026 = 24026 +a24027 = 24027 +a24028 = 24028 +a24029 = 24029 +a24030 = 24030 +a24031 = 24031 +a24032 = 24032 +a24033 = 24033 +a24034 = 24034 +a24035 = 24035 +a24036 = 24036 +a24037 = 24037 +a24038 = 24038 +a24039 = 24039 +a24040 = 24040 +a24041 = 24041 +a24042 = 24042 +a24043 = 24043 +a24044 = 24044 +a24045 = 24045 +a24046 = 24046 +a24047 = 24047 +a24048 = 24048 +a24049 = 24049 +a24050 = 24050 +a24051 = 24051 +a24052 = 24052 +a24053 = 24053 +a24054 = 24054 +a24055 = 24055 +a24056 = 24056 +a24057 = 24057 +a24058 = 24058 +a24059 = 24059 +a24060 = 24060 +a24061 = 24061 +a24062 = 24062 +a24063 = 24063 +a24064 = 24064 +a24065 = 24065 +a24066 = 24066 +a24067 = 24067 +a24068 = 24068 +a24069 = 24069 +a24070 = 24070 +a24071 = 24071 +a24072 = 24072 +a24073 = 24073 +a24074 = 24074 +a24075 = 24075 +a24076 = 24076 +a24077 = 24077 +a24078 = 24078 +a24079 = 24079 +a24080 = 24080 +a24081 = 24081 +a24082 = 24082 +a24083 = 24083 +a24084 = 24084 +a24085 = 24085 +a24086 = 24086 +a24087 = 24087 +a24088 = 24088 +a24089 = 24089 +a24090 = 24090 +a24091 = 24091 +a24092 = 24092 +a24093 = 24093 +a24094 = 24094 +a24095 = 24095 +a24096 = 24096 +a24097 = 24097 +a24098 = 24098 +a24099 = 24099 +a24100 = 24100 +a24101 = 24101 +a24102 = 24102 +a24103 = 24103 +a24104 = 24104 +a24105 = 24105 +a24106 = 24106 +a24107 = 24107 +a24108 = 24108 +a24109 = 24109 +a24110 = 24110 +a24111 = 24111 +a24112 = 24112 +a24113 = 24113 +a24114 = 24114 +a24115 = 24115 +a24116 = 24116 +a24117 = 24117 +a24118 = 24118 +a24119 = 24119 +a24120 = 24120 +a24121 = 24121 +a24122 = 24122 +a24123 = 24123 +a24124 = 24124 +a24125 = 24125 +a24126 = 24126 +a24127 = 24127 +a24128 = 24128 +a24129 = 24129 +a24130 = 24130 +a24131 = 24131 +a24132 = 24132 +a24133 = 24133 +a24134 = 24134 +a24135 = 24135 +a24136 = 24136 +a24137 = 24137 +a24138 = 24138 +a24139 = 24139 +a24140 = 24140 +a24141 = 24141 +a24142 = 24142 +a24143 = 24143 +a24144 = 24144 +a24145 = 24145 +a24146 = 24146 +a24147 = 24147 +a24148 = 24148 +a24149 = 24149 +a24150 = 24150 +a24151 = 24151 +a24152 = 24152 +a24153 = 24153 +a24154 = 24154 +a24155 = 24155 +a24156 = 24156 +a24157 = 24157 +a24158 = 24158 +a24159 = 24159 +a24160 = 24160 +a24161 = 24161 +a24162 = 24162 +a24163 = 24163 +a24164 = 24164 +a24165 = 24165 +a24166 = 24166 +a24167 = 24167 +a24168 = 24168 +a24169 = 24169 +a24170 = 24170 +a24171 = 24171 +a24172 = 24172 +a24173 = 24173 +a24174 = 24174 +a24175 = 24175 +a24176 = 24176 +a24177 = 24177 +a24178 = 24178 +a24179 = 24179 +a24180 = 24180 +a24181 = 24181 +a24182 = 24182 +a24183 = 24183 +a24184 = 24184 +a24185 = 24185 +a24186 = 24186 +a24187 = 24187 +a24188 = 24188 +a24189 = 24189 +a24190 = 24190 +a24191 = 24191 +a24192 = 24192 +a24193 = 24193 +a24194 = 24194 +a24195 = 24195 +a24196 = 24196 +a24197 = 24197 +a24198 = 24198 +a24199 = 24199 +a24200 = 24200 +a24201 = 24201 +a24202 = 24202 +a24203 = 24203 +a24204 = 24204 +a24205 = 24205 +a24206 = 24206 +a24207 = 24207 +a24208 = 24208 +a24209 = 24209 +a24210 = 24210 +a24211 = 24211 +a24212 = 24212 +a24213 = 24213 +a24214 = 24214 +a24215 = 24215 +a24216 = 24216 +a24217 = 24217 +a24218 = 24218 +a24219 = 24219 +a24220 = 24220 +a24221 = 24221 +a24222 = 24222 +a24223 = 24223 +a24224 = 24224 +a24225 = 24225 +a24226 = 24226 +a24227 = 24227 +a24228 = 24228 +a24229 = 24229 +a24230 = 24230 +a24231 = 24231 +a24232 = 24232 +a24233 = 24233 +a24234 = 24234 +a24235 = 24235 +a24236 = 24236 +a24237 = 24237 +a24238 = 24238 +a24239 = 24239 +a24240 = 24240 +a24241 = 24241 +a24242 = 24242 +a24243 = 24243 +a24244 = 24244 +a24245 = 24245 +a24246 = 24246 +a24247 = 24247 +a24248 = 24248 +a24249 = 24249 +a24250 = 24250 +a24251 = 24251 +a24252 = 24252 +a24253 = 24253 +a24254 = 24254 +a24255 = 24255 +a24256 = 24256 +a24257 = 24257 +a24258 = 24258 +a24259 = 24259 +a24260 = 24260 +a24261 = 24261 +a24262 = 24262 +a24263 = 24263 +a24264 = 24264 +a24265 = 24265 +a24266 = 24266 +a24267 = 24267 +a24268 = 24268 +a24269 = 24269 +a24270 = 24270 +a24271 = 24271 +a24272 = 24272 +a24273 = 24273 +a24274 = 24274 +a24275 = 24275 +a24276 = 24276 +a24277 = 24277 +a24278 = 24278 +a24279 = 24279 +a24280 = 24280 +a24281 = 24281 +a24282 = 24282 +a24283 = 24283 +a24284 = 24284 +a24285 = 24285 +a24286 = 24286 +a24287 = 24287 +a24288 = 24288 +a24289 = 24289 +a24290 = 24290 +a24291 = 24291 +a24292 = 24292 +a24293 = 24293 +a24294 = 24294 +a24295 = 24295 +a24296 = 24296 +a24297 = 24297 +a24298 = 24298 +a24299 = 24299 +a24300 = 24300 +a24301 = 24301 +a24302 = 24302 +a24303 = 24303 +a24304 = 24304 +a24305 = 24305 +a24306 = 24306 +a24307 = 24307 +a24308 = 24308 +a24309 = 24309 +a24310 = 24310 +a24311 = 24311 +a24312 = 24312 +a24313 = 24313 +a24314 = 24314 +a24315 = 24315 +a24316 = 24316 +a24317 = 24317 +a24318 = 24318 +a24319 = 24319 +a24320 = 24320 +a24321 = 24321 +a24322 = 24322 +a24323 = 24323 +a24324 = 24324 +a24325 = 24325 +a24326 = 24326 +a24327 = 24327 +a24328 = 24328 +a24329 = 24329 +a24330 = 24330 +a24331 = 24331 +a24332 = 24332 +a24333 = 24333 +a24334 = 24334 +a24335 = 24335 +a24336 = 24336 +a24337 = 24337 +a24338 = 24338 +a24339 = 24339 +a24340 = 24340 +a24341 = 24341 +a24342 = 24342 +a24343 = 24343 +a24344 = 24344 +a24345 = 24345 +a24346 = 24346 +a24347 = 24347 +a24348 = 24348 +a24349 = 24349 +a24350 = 24350 +a24351 = 24351 +a24352 = 24352 +a24353 = 24353 +a24354 = 24354 +a24355 = 24355 +a24356 = 24356 +a24357 = 24357 +a24358 = 24358 +a24359 = 24359 +a24360 = 24360 +a24361 = 24361 +a24362 = 24362 +a24363 = 24363 +a24364 = 24364 +a24365 = 24365 +a24366 = 24366 +a24367 = 24367 +a24368 = 24368 +a24369 = 24369 +a24370 = 24370 +a24371 = 24371 +a24372 = 24372 +a24373 = 24373 +a24374 = 24374 +a24375 = 24375 +a24376 = 24376 +a24377 = 24377 +a24378 = 24378 +a24379 = 24379 +a24380 = 24380 +a24381 = 24381 +a24382 = 24382 +a24383 = 24383 +a24384 = 24384 +a24385 = 24385 +a24386 = 24386 +a24387 = 24387 +a24388 = 24388 +a24389 = 24389 +a24390 = 24390 +a24391 = 24391 +a24392 = 24392 +a24393 = 24393 +a24394 = 24394 +a24395 = 24395 +a24396 = 24396 +a24397 = 24397 +a24398 = 24398 +a24399 = 24399 +a24400 = 24400 +a24401 = 24401 +a24402 = 24402 +a24403 = 24403 +a24404 = 24404 +a24405 = 24405 +a24406 = 24406 +a24407 = 24407 +a24408 = 24408 +a24409 = 24409 +a24410 = 24410 +a24411 = 24411 +a24412 = 24412 +a24413 = 24413 +a24414 = 24414 +a24415 = 24415 +a24416 = 24416 +a24417 = 24417 +a24418 = 24418 +a24419 = 24419 +a24420 = 24420 +a24421 = 24421 +a24422 = 24422 +a24423 = 24423 +a24424 = 24424 +a24425 = 24425 +a24426 = 24426 +a24427 = 24427 +a24428 = 24428 +a24429 = 24429 +a24430 = 24430 +a24431 = 24431 +a24432 = 24432 +a24433 = 24433 +a24434 = 24434 +a24435 = 24435 +a24436 = 24436 +a24437 = 24437 +a24438 = 24438 +a24439 = 24439 +a24440 = 24440 +a24441 = 24441 +a24442 = 24442 +a24443 = 24443 +a24444 = 24444 +a24445 = 24445 +a24446 = 24446 +a24447 = 24447 +a24448 = 24448 +a24449 = 24449 +a24450 = 24450 +a24451 = 24451 +a24452 = 24452 +a24453 = 24453 +a24454 = 24454 +a24455 = 24455 +a24456 = 24456 +a24457 = 24457 +a24458 = 24458 +a24459 = 24459 +a24460 = 24460 +a24461 = 24461 +a24462 = 24462 +a24463 = 24463 +a24464 = 24464 +a24465 = 24465 +a24466 = 24466 +a24467 = 24467 +a24468 = 24468 +a24469 = 24469 +a24470 = 24470 +a24471 = 24471 +a24472 = 24472 +a24473 = 24473 +a24474 = 24474 +a24475 = 24475 +a24476 = 24476 +a24477 = 24477 +a24478 = 24478 +a24479 = 24479 +a24480 = 24480 +a24481 = 24481 +a24482 = 24482 +a24483 = 24483 +a24484 = 24484 +a24485 = 24485 +a24486 = 24486 +a24487 = 24487 +a24488 = 24488 +a24489 = 24489 +a24490 = 24490 +a24491 = 24491 +a24492 = 24492 +a24493 = 24493 +a24494 = 24494 +a24495 = 24495 +a24496 = 24496 +a24497 = 24497 +a24498 = 24498 +a24499 = 24499 +a24500 = 24500 +a24501 = 24501 +a24502 = 24502 +a24503 = 24503 +a24504 = 24504 +a24505 = 24505 +a24506 = 24506 +a24507 = 24507 +a24508 = 24508 +a24509 = 24509 +a24510 = 24510 +a24511 = 24511 +a24512 = 24512 +a24513 = 24513 +a24514 = 24514 +a24515 = 24515 +a24516 = 24516 +a24517 = 24517 +a24518 = 24518 +a24519 = 24519 +a24520 = 24520 +a24521 = 24521 +a24522 = 24522 +a24523 = 24523 +a24524 = 24524 +a24525 = 24525 +a24526 = 24526 +a24527 = 24527 +a24528 = 24528 +a24529 = 24529 +a24530 = 24530 +a24531 = 24531 +a24532 = 24532 +a24533 = 24533 +a24534 = 24534 +a24535 = 24535 +a24536 = 24536 +a24537 = 24537 +a24538 = 24538 +a24539 = 24539 +a24540 = 24540 +a24541 = 24541 +a24542 = 24542 +a24543 = 24543 +a24544 = 24544 +a24545 = 24545 +a24546 = 24546 +a24547 = 24547 +a24548 = 24548 +a24549 = 24549 +a24550 = 24550 +a24551 = 24551 +a24552 = 24552 +a24553 = 24553 +a24554 = 24554 +a24555 = 24555 +a24556 = 24556 +a24557 = 24557 +a24558 = 24558 +a24559 = 24559 +a24560 = 24560 +a24561 = 24561 +a24562 = 24562 +a24563 = 24563 +a24564 = 24564 +a24565 = 24565 +a24566 = 24566 +a24567 = 24567 +a24568 = 24568 +a24569 = 24569 +a24570 = 24570 +a24571 = 24571 +a24572 = 24572 +a24573 = 24573 +a24574 = 24574 +a24575 = 24575 +a24576 = 24576 +a24577 = 24577 +a24578 = 24578 +a24579 = 24579 +a24580 = 24580 +a24581 = 24581 +a24582 = 24582 +a24583 = 24583 +a24584 = 24584 +a24585 = 24585 +a24586 = 24586 +a24587 = 24587 +a24588 = 24588 +a24589 = 24589 +a24590 = 24590 +a24591 = 24591 +a24592 = 24592 +a24593 = 24593 +a24594 = 24594 +a24595 = 24595 +a24596 = 24596 +a24597 = 24597 +a24598 = 24598 +a24599 = 24599 +a24600 = 24600 +a24601 = 24601 +a24602 = 24602 +a24603 = 24603 +a24604 = 24604 +a24605 = 24605 +a24606 = 24606 +a24607 = 24607 +a24608 = 24608 +a24609 = 24609 +a24610 = 24610 +a24611 = 24611 +a24612 = 24612 +a24613 = 24613 +a24614 = 24614 +a24615 = 24615 +a24616 = 24616 +a24617 = 24617 +a24618 = 24618 +a24619 = 24619 +a24620 = 24620 +a24621 = 24621 +a24622 = 24622 +a24623 = 24623 +a24624 = 24624 +a24625 = 24625 +a24626 = 24626 +a24627 = 24627 +a24628 = 24628 +a24629 = 24629 +a24630 = 24630 +a24631 = 24631 +a24632 = 24632 +a24633 = 24633 +a24634 = 24634 +a24635 = 24635 +a24636 = 24636 +a24637 = 24637 +a24638 = 24638 +a24639 = 24639 +a24640 = 24640 +a24641 = 24641 +a24642 = 24642 +a24643 = 24643 +a24644 = 24644 +a24645 = 24645 +a24646 = 24646 +a24647 = 24647 +a24648 = 24648 +a24649 = 24649 +a24650 = 24650 +a24651 = 24651 +a24652 = 24652 +a24653 = 24653 +a24654 = 24654 +a24655 = 24655 +a24656 = 24656 +a24657 = 24657 +a24658 = 24658 +a24659 = 24659 +a24660 = 24660 +a24661 = 24661 +a24662 = 24662 +a24663 = 24663 +a24664 = 24664 +a24665 = 24665 +a24666 = 24666 +a24667 = 24667 +a24668 = 24668 +a24669 = 24669 +a24670 = 24670 +a24671 = 24671 +a24672 = 24672 +a24673 = 24673 +a24674 = 24674 +a24675 = 24675 +a24676 = 24676 +a24677 = 24677 +a24678 = 24678 +a24679 = 24679 +a24680 = 24680 +a24681 = 24681 +a24682 = 24682 +a24683 = 24683 +a24684 = 24684 +a24685 = 24685 +a24686 = 24686 +a24687 = 24687 +a24688 = 24688 +a24689 = 24689 +a24690 = 24690 +a24691 = 24691 +a24692 = 24692 +a24693 = 24693 +a24694 = 24694 +a24695 = 24695 +a24696 = 24696 +a24697 = 24697 +a24698 = 24698 +a24699 = 24699 +a24700 = 24700 +a24701 = 24701 +a24702 = 24702 +a24703 = 24703 +a24704 = 24704 +a24705 = 24705 +a24706 = 24706 +a24707 = 24707 +a24708 = 24708 +a24709 = 24709 +a24710 = 24710 +a24711 = 24711 +a24712 = 24712 +a24713 = 24713 +a24714 = 24714 +a24715 = 24715 +a24716 = 24716 +a24717 = 24717 +a24718 = 24718 +a24719 = 24719 +a24720 = 24720 +a24721 = 24721 +a24722 = 24722 +a24723 = 24723 +a24724 = 24724 +a24725 = 24725 +a24726 = 24726 +a24727 = 24727 +a24728 = 24728 +a24729 = 24729 +a24730 = 24730 +a24731 = 24731 +a24732 = 24732 +a24733 = 24733 +a24734 = 24734 +a24735 = 24735 +a24736 = 24736 +a24737 = 24737 +a24738 = 24738 +a24739 = 24739 +a24740 = 24740 +a24741 = 24741 +a24742 = 24742 +a24743 = 24743 +a24744 = 24744 +a24745 = 24745 +a24746 = 24746 +a24747 = 24747 +a24748 = 24748 +a24749 = 24749 +a24750 = 24750 +a24751 = 24751 +a24752 = 24752 +a24753 = 24753 +a24754 = 24754 +a24755 = 24755 +a24756 = 24756 +a24757 = 24757 +a24758 = 24758 +a24759 = 24759 +a24760 = 24760 +a24761 = 24761 +a24762 = 24762 +a24763 = 24763 +a24764 = 24764 +a24765 = 24765 +a24766 = 24766 +a24767 = 24767 +a24768 = 24768 +a24769 = 24769 +a24770 = 24770 +a24771 = 24771 +a24772 = 24772 +a24773 = 24773 +a24774 = 24774 +a24775 = 24775 +a24776 = 24776 +a24777 = 24777 +a24778 = 24778 +a24779 = 24779 +a24780 = 24780 +a24781 = 24781 +a24782 = 24782 +a24783 = 24783 +a24784 = 24784 +a24785 = 24785 +a24786 = 24786 +a24787 = 24787 +a24788 = 24788 +a24789 = 24789 +a24790 = 24790 +a24791 = 24791 +a24792 = 24792 +a24793 = 24793 +a24794 = 24794 +a24795 = 24795 +a24796 = 24796 +a24797 = 24797 +a24798 = 24798 +a24799 = 24799 +a24800 = 24800 +a24801 = 24801 +a24802 = 24802 +a24803 = 24803 +a24804 = 24804 +a24805 = 24805 +a24806 = 24806 +a24807 = 24807 +a24808 = 24808 +a24809 = 24809 +a24810 = 24810 +a24811 = 24811 +a24812 = 24812 +a24813 = 24813 +a24814 = 24814 +a24815 = 24815 +a24816 = 24816 +a24817 = 24817 +a24818 = 24818 +a24819 = 24819 +a24820 = 24820 +a24821 = 24821 +a24822 = 24822 +a24823 = 24823 +a24824 = 24824 +a24825 = 24825 +a24826 = 24826 +a24827 = 24827 +a24828 = 24828 +a24829 = 24829 +a24830 = 24830 +a24831 = 24831 +a24832 = 24832 +a24833 = 24833 +a24834 = 24834 +a24835 = 24835 +a24836 = 24836 +a24837 = 24837 +a24838 = 24838 +a24839 = 24839 +a24840 = 24840 +a24841 = 24841 +a24842 = 24842 +a24843 = 24843 +a24844 = 24844 +a24845 = 24845 +a24846 = 24846 +a24847 = 24847 +a24848 = 24848 +a24849 = 24849 +a24850 = 24850 +a24851 = 24851 +a24852 = 24852 +a24853 = 24853 +a24854 = 24854 +a24855 = 24855 +a24856 = 24856 +a24857 = 24857 +a24858 = 24858 +a24859 = 24859 +a24860 = 24860 +a24861 = 24861 +a24862 = 24862 +a24863 = 24863 +a24864 = 24864 +a24865 = 24865 +a24866 = 24866 +a24867 = 24867 +a24868 = 24868 +a24869 = 24869 +a24870 = 24870 +a24871 = 24871 +a24872 = 24872 +a24873 = 24873 +a24874 = 24874 +a24875 = 24875 +a24876 = 24876 +a24877 = 24877 +a24878 = 24878 +a24879 = 24879 +a24880 = 24880 +a24881 = 24881 +a24882 = 24882 +a24883 = 24883 +a24884 = 24884 +a24885 = 24885 +a24886 = 24886 +a24887 = 24887 +a24888 = 24888 +a24889 = 24889 +a24890 = 24890 +a24891 = 24891 +a24892 = 24892 +a24893 = 24893 +a24894 = 24894 +a24895 = 24895 +a24896 = 24896 +a24897 = 24897 +a24898 = 24898 +a24899 = 24899 +a24900 = 24900 +a24901 = 24901 +a24902 = 24902 +a24903 = 24903 +a24904 = 24904 +a24905 = 24905 +a24906 = 24906 +a24907 = 24907 +a24908 = 24908 +a24909 = 24909 +a24910 = 24910 +a24911 = 24911 +a24912 = 24912 +a24913 = 24913 +a24914 = 24914 +a24915 = 24915 +a24916 = 24916 +a24917 = 24917 +a24918 = 24918 +a24919 = 24919 +a24920 = 24920 +a24921 = 24921 +a24922 = 24922 +a24923 = 24923 +a24924 = 24924 +a24925 = 24925 +a24926 = 24926 +a24927 = 24927 +a24928 = 24928 +a24929 = 24929 +a24930 = 24930 +a24931 = 24931 +a24932 = 24932 +a24933 = 24933 +a24934 = 24934 +a24935 = 24935 +a24936 = 24936 +a24937 = 24937 +a24938 = 24938 +a24939 = 24939 +a24940 = 24940 +a24941 = 24941 +a24942 = 24942 +a24943 = 24943 +a24944 = 24944 +a24945 = 24945 +a24946 = 24946 +a24947 = 24947 +a24948 = 24948 +a24949 = 24949 +a24950 = 24950 +a24951 = 24951 +a24952 = 24952 +a24953 = 24953 +a24954 = 24954 +a24955 = 24955 +a24956 = 24956 +a24957 = 24957 +a24958 = 24958 +a24959 = 24959 +a24960 = 24960 +a24961 = 24961 +a24962 = 24962 +a24963 = 24963 +a24964 = 24964 +a24965 = 24965 +a24966 = 24966 +a24967 = 24967 +a24968 = 24968 +a24969 = 24969 +a24970 = 24970 +a24971 = 24971 +a24972 = 24972 +a24973 = 24973 +a24974 = 24974 +a24975 = 24975 +a24976 = 24976 +a24977 = 24977 +a24978 = 24978 +a24979 = 24979 +a24980 = 24980 +a24981 = 24981 +a24982 = 24982 +a24983 = 24983 +a24984 = 24984 +a24985 = 24985 +a24986 = 24986 +a24987 = 24987 +a24988 = 24988 +a24989 = 24989 +a24990 = 24990 +a24991 = 24991 +a24992 = 24992 +a24993 = 24993 +a24994 = 24994 +a24995 = 24995 +a24996 = 24996 +a24997 = 24997 +a24998 = 24998 +a24999 = 24999 +a25000 = 25000 +a25001 = 25001 +a25002 = 25002 +a25003 = 25003 +a25004 = 25004 +a25005 = 25005 +a25006 = 25006 +a25007 = 25007 +a25008 = 25008 +a25009 = 25009 +a25010 = 25010 +a25011 = 25011 +a25012 = 25012 +a25013 = 25013 +a25014 = 25014 +a25015 = 25015 +a25016 = 25016 +a25017 = 25017 +a25018 = 25018 +a25019 = 25019 +a25020 = 25020 +a25021 = 25021 +a25022 = 25022 +a25023 = 25023 +a25024 = 25024 +a25025 = 25025 +a25026 = 25026 +a25027 = 25027 +a25028 = 25028 +a25029 = 25029 +a25030 = 25030 +a25031 = 25031 +a25032 = 25032 +a25033 = 25033 +a25034 = 25034 +a25035 = 25035 +a25036 = 25036 +a25037 = 25037 +a25038 = 25038 +a25039 = 25039 +a25040 = 25040 +a25041 = 25041 +a25042 = 25042 +a25043 = 25043 +a25044 = 25044 +a25045 = 25045 +a25046 = 25046 +a25047 = 25047 +a25048 = 25048 +a25049 = 25049 +a25050 = 25050 +a25051 = 25051 +a25052 = 25052 +a25053 = 25053 +a25054 = 25054 +a25055 = 25055 +a25056 = 25056 +a25057 = 25057 +a25058 = 25058 +a25059 = 25059 +a25060 = 25060 +a25061 = 25061 +a25062 = 25062 +a25063 = 25063 +a25064 = 25064 +a25065 = 25065 +a25066 = 25066 +a25067 = 25067 +a25068 = 25068 +a25069 = 25069 +a25070 = 25070 +a25071 = 25071 +a25072 = 25072 +a25073 = 25073 +a25074 = 25074 +a25075 = 25075 +a25076 = 25076 +a25077 = 25077 +a25078 = 25078 +a25079 = 25079 +a25080 = 25080 +a25081 = 25081 +a25082 = 25082 +a25083 = 25083 +a25084 = 25084 +a25085 = 25085 +a25086 = 25086 +a25087 = 25087 +a25088 = 25088 +a25089 = 25089 +a25090 = 25090 +a25091 = 25091 +a25092 = 25092 +a25093 = 25093 +a25094 = 25094 +a25095 = 25095 +a25096 = 25096 +a25097 = 25097 +a25098 = 25098 +a25099 = 25099 +a25100 = 25100 +a25101 = 25101 +a25102 = 25102 +a25103 = 25103 +a25104 = 25104 +a25105 = 25105 +a25106 = 25106 +a25107 = 25107 +a25108 = 25108 +a25109 = 25109 +a25110 = 25110 +a25111 = 25111 +a25112 = 25112 +a25113 = 25113 +a25114 = 25114 +a25115 = 25115 +a25116 = 25116 +a25117 = 25117 +a25118 = 25118 +a25119 = 25119 +a25120 = 25120 +a25121 = 25121 +a25122 = 25122 +a25123 = 25123 +a25124 = 25124 +a25125 = 25125 +a25126 = 25126 +a25127 = 25127 +a25128 = 25128 +a25129 = 25129 +a25130 = 25130 +a25131 = 25131 +a25132 = 25132 +a25133 = 25133 +a25134 = 25134 +a25135 = 25135 +a25136 = 25136 +a25137 = 25137 +a25138 = 25138 +a25139 = 25139 +a25140 = 25140 +a25141 = 25141 +a25142 = 25142 +a25143 = 25143 +a25144 = 25144 +a25145 = 25145 +a25146 = 25146 +a25147 = 25147 +a25148 = 25148 +a25149 = 25149 +a25150 = 25150 +a25151 = 25151 +a25152 = 25152 +a25153 = 25153 +a25154 = 25154 +a25155 = 25155 +a25156 = 25156 +a25157 = 25157 +a25158 = 25158 +a25159 = 25159 +a25160 = 25160 +a25161 = 25161 +a25162 = 25162 +a25163 = 25163 +a25164 = 25164 +a25165 = 25165 +a25166 = 25166 +a25167 = 25167 +a25168 = 25168 +a25169 = 25169 +a25170 = 25170 +a25171 = 25171 +a25172 = 25172 +a25173 = 25173 +a25174 = 25174 +a25175 = 25175 +a25176 = 25176 +a25177 = 25177 +a25178 = 25178 +a25179 = 25179 +a25180 = 25180 +a25181 = 25181 +a25182 = 25182 +a25183 = 25183 +a25184 = 25184 +a25185 = 25185 +a25186 = 25186 +a25187 = 25187 +a25188 = 25188 +a25189 = 25189 +a25190 = 25190 +a25191 = 25191 +a25192 = 25192 +a25193 = 25193 +a25194 = 25194 +a25195 = 25195 +a25196 = 25196 +a25197 = 25197 +a25198 = 25198 +a25199 = 25199 +a25200 = 25200 +a25201 = 25201 +a25202 = 25202 +a25203 = 25203 +a25204 = 25204 +a25205 = 25205 +a25206 = 25206 +a25207 = 25207 +a25208 = 25208 +a25209 = 25209 +a25210 = 25210 +a25211 = 25211 +a25212 = 25212 +a25213 = 25213 +a25214 = 25214 +a25215 = 25215 +a25216 = 25216 +a25217 = 25217 +a25218 = 25218 +a25219 = 25219 +a25220 = 25220 +a25221 = 25221 +a25222 = 25222 +a25223 = 25223 +a25224 = 25224 +a25225 = 25225 +a25226 = 25226 +a25227 = 25227 +a25228 = 25228 +a25229 = 25229 +a25230 = 25230 +a25231 = 25231 +a25232 = 25232 +a25233 = 25233 +a25234 = 25234 +a25235 = 25235 +a25236 = 25236 +a25237 = 25237 +a25238 = 25238 +a25239 = 25239 +a25240 = 25240 +a25241 = 25241 +a25242 = 25242 +a25243 = 25243 +a25244 = 25244 +a25245 = 25245 +a25246 = 25246 +a25247 = 25247 +a25248 = 25248 +a25249 = 25249 +a25250 = 25250 +a25251 = 25251 +a25252 = 25252 +a25253 = 25253 +a25254 = 25254 +a25255 = 25255 +a25256 = 25256 +a25257 = 25257 +a25258 = 25258 +a25259 = 25259 +a25260 = 25260 +a25261 = 25261 +a25262 = 25262 +a25263 = 25263 +a25264 = 25264 +a25265 = 25265 +a25266 = 25266 +a25267 = 25267 +a25268 = 25268 +a25269 = 25269 +a25270 = 25270 +a25271 = 25271 +a25272 = 25272 +a25273 = 25273 +a25274 = 25274 +a25275 = 25275 +a25276 = 25276 +a25277 = 25277 +a25278 = 25278 +a25279 = 25279 +a25280 = 25280 +a25281 = 25281 +a25282 = 25282 +a25283 = 25283 +a25284 = 25284 +a25285 = 25285 +a25286 = 25286 +a25287 = 25287 +a25288 = 25288 +a25289 = 25289 +a25290 = 25290 +a25291 = 25291 +a25292 = 25292 +a25293 = 25293 +a25294 = 25294 +a25295 = 25295 +a25296 = 25296 +a25297 = 25297 +a25298 = 25298 +a25299 = 25299 +a25300 = 25300 +a25301 = 25301 +a25302 = 25302 +a25303 = 25303 +a25304 = 25304 +a25305 = 25305 +a25306 = 25306 +a25307 = 25307 +a25308 = 25308 +a25309 = 25309 +a25310 = 25310 +a25311 = 25311 +a25312 = 25312 +a25313 = 25313 +a25314 = 25314 +a25315 = 25315 +a25316 = 25316 +a25317 = 25317 +a25318 = 25318 +a25319 = 25319 +a25320 = 25320 +a25321 = 25321 +a25322 = 25322 +a25323 = 25323 +a25324 = 25324 +a25325 = 25325 +a25326 = 25326 +a25327 = 25327 +a25328 = 25328 +a25329 = 25329 +a25330 = 25330 +a25331 = 25331 +a25332 = 25332 +a25333 = 25333 +a25334 = 25334 +a25335 = 25335 +a25336 = 25336 +a25337 = 25337 +a25338 = 25338 +a25339 = 25339 +a25340 = 25340 +a25341 = 25341 +a25342 = 25342 +a25343 = 25343 +a25344 = 25344 +a25345 = 25345 +a25346 = 25346 +a25347 = 25347 +a25348 = 25348 +a25349 = 25349 +a25350 = 25350 +a25351 = 25351 +a25352 = 25352 +a25353 = 25353 +a25354 = 25354 +a25355 = 25355 +a25356 = 25356 +a25357 = 25357 +a25358 = 25358 +a25359 = 25359 +a25360 = 25360 +a25361 = 25361 +a25362 = 25362 +a25363 = 25363 +a25364 = 25364 +a25365 = 25365 +a25366 = 25366 +a25367 = 25367 +a25368 = 25368 +a25369 = 25369 +a25370 = 25370 +a25371 = 25371 +a25372 = 25372 +a25373 = 25373 +a25374 = 25374 +a25375 = 25375 +a25376 = 25376 +a25377 = 25377 +a25378 = 25378 +a25379 = 25379 +a25380 = 25380 +a25381 = 25381 +a25382 = 25382 +a25383 = 25383 +a25384 = 25384 +a25385 = 25385 +a25386 = 25386 +a25387 = 25387 +a25388 = 25388 +a25389 = 25389 +a25390 = 25390 +a25391 = 25391 +a25392 = 25392 +a25393 = 25393 +a25394 = 25394 +a25395 = 25395 +a25396 = 25396 +a25397 = 25397 +a25398 = 25398 +a25399 = 25399 +a25400 = 25400 +a25401 = 25401 +a25402 = 25402 +a25403 = 25403 +a25404 = 25404 +a25405 = 25405 +a25406 = 25406 +a25407 = 25407 +a25408 = 25408 +a25409 = 25409 +a25410 = 25410 +a25411 = 25411 +a25412 = 25412 +a25413 = 25413 +a25414 = 25414 +a25415 = 25415 +a25416 = 25416 +a25417 = 25417 +a25418 = 25418 +a25419 = 25419 +a25420 = 25420 +a25421 = 25421 +a25422 = 25422 +a25423 = 25423 +a25424 = 25424 +a25425 = 25425 +a25426 = 25426 +a25427 = 25427 +a25428 = 25428 +a25429 = 25429 +a25430 = 25430 +a25431 = 25431 +a25432 = 25432 +a25433 = 25433 +a25434 = 25434 +a25435 = 25435 +a25436 = 25436 +a25437 = 25437 +a25438 = 25438 +a25439 = 25439 +a25440 = 25440 +a25441 = 25441 +a25442 = 25442 +a25443 = 25443 +a25444 = 25444 +a25445 = 25445 +a25446 = 25446 +a25447 = 25447 +a25448 = 25448 +a25449 = 25449 +a25450 = 25450 +a25451 = 25451 +a25452 = 25452 +a25453 = 25453 +a25454 = 25454 +a25455 = 25455 +a25456 = 25456 +a25457 = 25457 +a25458 = 25458 +a25459 = 25459 +a25460 = 25460 +a25461 = 25461 +a25462 = 25462 +a25463 = 25463 +a25464 = 25464 +a25465 = 25465 +a25466 = 25466 +a25467 = 25467 +a25468 = 25468 +a25469 = 25469 +a25470 = 25470 +a25471 = 25471 +a25472 = 25472 +a25473 = 25473 +a25474 = 25474 +a25475 = 25475 +a25476 = 25476 +a25477 = 25477 +a25478 = 25478 +a25479 = 25479 +a25480 = 25480 +a25481 = 25481 +a25482 = 25482 +a25483 = 25483 +a25484 = 25484 +a25485 = 25485 +a25486 = 25486 +a25487 = 25487 +a25488 = 25488 +a25489 = 25489 +a25490 = 25490 +a25491 = 25491 +a25492 = 25492 +a25493 = 25493 +a25494 = 25494 +a25495 = 25495 +a25496 = 25496 +a25497 = 25497 +a25498 = 25498 +a25499 = 25499 +a25500 = 25500 +a25501 = 25501 +a25502 = 25502 +a25503 = 25503 +a25504 = 25504 +a25505 = 25505 +a25506 = 25506 +a25507 = 25507 +a25508 = 25508 +a25509 = 25509 +a25510 = 25510 +a25511 = 25511 +a25512 = 25512 +a25513 = 25513 +a25514 = 25514 +a25515 = 25515 +a25516 = 25516 +a25517 = 25517 +a25518 = 25518 +a25519 = 25519 +a25520 = 25520 +a25521 = 25521 +a25522 = 25522 +a25523 = 25523 +a25524 = 25524 +a25525 = 25525 +a25526 = 25526 +a25527 = 25527 +a25528 = 25528 +a25529 = 25529 +a25530 = 25530 +a25531 = 25531 +a25532 = 25532 +a25533 = 25533 +a25534 = 25534 +a25535 = 25535 +a25536 = 25536 +a25537 = 25537 +a25538 = 25538 +a25539 = 25539 +a25540 = 25540 +a25541 = 25541 +a25542 = 25542 +a25543 = 25543 +a25544 = 25544 +a25545 = 25545 +a25546 = 25546 +a25547 = 25547 +a25548 = 25548 +a25549 = 25549 +a25550 = 25550 +a25551 = 25551 +a25552 = 25552 +a25553 = 25553 +a25554 = 25554 +a25555 = 25555 +a25556 = 25556 +a25557 = 25557 +a25558 = 25558 +a25559 = 25559 +a25560 = 25560 +a25561 = 25561 +a25562 = 25562 +a25563 = 25563 +a25564 = 25564 +a25565 = 25565 +a25566 = 25566 +a25567 = 25567 +a25568 = 25568 +a25569 = 25569 +a25570 = 25570 +a25571 = 25571 +a25572 = 25572 +a25573 = 25573 +a25574 = 25574 +a25575 = 25575 +a25576 = 25576 +a25577 = 25577 +a25578 = 25578 +a25579 = 25579 +a25580 = 25580 +a25581 = 25581 +a25582 = 25582 +a25583 = 25583 +a25584 = 25584 +a25585 = 25585 +a25586 = 25586 +a25587 = 25587 +a25588 = 25588 +a25589 = 25589 +a25590 = 25590 +a25591 = 25591 +a25592 = 25592 +a25593 = 25593 +a25594 = 25594 +a25595 = 25595 +a25596 = 25596 +a25597 = 25597 +a25598 = 25598 +a25599 = 25599 +a25600 = 25600 +a25601 = 25601 +a25602 = 25602 +a25603 = 25603 +a25604 = 25604 +a25605 = 25605 +a25606 = 25606 +a25607 = 25607 +a25608 = 25608 +a25609 = 25609 +a25610 = 25610 +a25611 = 25611 +a25612 = 25612 +a25613 = 25613 +a25614 = 25614 +a25615 = 25615 +a25616 = 25616 +a25617 = 25617 +a25618 = 25618 +a25619 = 25619 +a25620 = 25620 +a25621 = 25621 +a25622 = 25622 +a25623 = 25623 +a25624 = 25624 +a25625 = 25625 +a25626 = 25626 +a25627 = 25627 +a25628 = 25628 +a25629 = 25629 +a25630 = 25630 +a25631 = 25631 +a25632 = 25632 +a25633 = 25633 +a25634 = 25634 +a25635 = 25635 +a25636 = 25636 +a25637 = 25637 +a25638 = 25638 +a25639 = 25639 +a25640 = 25640 +a25641 = 25641 +a25642 = 25642 +a25643 = 25643 +a25644 = 25644 +a25645 = 25645 +a25646 = 25646 +a25647 = 25647 +a25648 = 25648 +a25649 = 25649 +a25650 = 25650 +a25651 = 25651 +a25652 = 25652 +a25653 = 25653 +a25654 = 25654 +a25655 = 25655 +a25656 = 25656 +a25657 = 25657 +a25658 = 25658 +a25659 = 25659 +a25660 = 25660 +a25661 = 25661 +a25662 = 25662 +a25663 = 25663 +a25664 = 25664 +a25665 = 25665 +a25666 = 25666 +a25667 = 25667 +a25668 = 25668 +a25669 = 25669 +a25670 = 25670 +a25671 = 25671 +a25672 = 25672 +a25673 = 25673 +a25674 = 25674 +a25675 = 25675 +a25676 = 25676 +a25677 = 25677 +a25678 = 25678 +a25679 = 25679 +a25680 = 25680 +a25681 = 25681 +a25682 = 25682 +a25683 = 25683 +a25684 = 25684 +a25685 = 25685 +a25686 = 25686 +a25687 = 25687 +a25688 = 25688 +a25689 = 25689 +a25690 = 25690 +a25691 = 25691 +a25692 = 25692 +a25693 = 25693 +a25694 = 25694 +a25695 = 25695 +a25696 = 25696 +a25697 = 25697 +a25698 = 25698 +a25699 = 25699 +a25700 = 25700 +a25701 = 25701 +a25702 = 25702 +a25703 = 25703 +a25704 = 25704 +a25705 = 25705 +a25706 = 25706 +a25707 = 25707 +a25708 = 25708 +a25709 = 25709 +a25710 = 25710 +a25711 = 25711 +a25712 = 25712 +a25713 = 25713 +a25714 = 25714 +a25715 = 25715 +a25716 = 25716 +a25717 = 25717 +a25718 = 25718 +a25719 = 25719 +a25720 = 25720 +a25721 = 25721 +a25722 = 25722 +a25723 = 25723 +a25724 = 25724 +a25725 = 25725 +a25726 = 25726 +a25727 = 25727 +a25728 = 25728 +a25729 = 25729 +a25730 = 25730 +a25731 = 25731 +a25732 = 25732 +a25733 = 25733 +a25734 = 25734 +a25735 = 25735 +a25736 = 25736 +a25737 = 25737 +a25738 = 25738 +a25739 = 25739 +a25740 = 25740 +a25741 = 25741 +a25742 = 25742 +a25743 = 25743 +a25744 = 25744 +a25745 = 25745 +a25746 = 25746 +a25747 = 25747 +a25748 = 25748 +a25749 = 25749 +a25750 = 25750 +a25751 = 25751 +a25752 = 25752 +a25753 = 25753 +a25754 = 25754 +a25755 = 25755 +a25756 = 25756 +a25757 = 25757 +a25758 = 25758 +a25759 = 25759 +a25760 = 25760 +a25761 = 25761 +a25762 = 25762 +a25763 = 25763 +a25764 = 25764 +a25765 = 25765 +a25766 = 25766 +a25767 = 25767 +a25768 = 25768 +a25769 = 25769 +a25770 = 25770 +a25771 = 25771 +a25772 = 25772 +a25773 = 25773 +a25774 = 25774 +a25775 = 25775 +a25776 = 25776 +a25777 = 25777 +a25778 = 25778 +a25779 = 25779 +a25780 = 25780 +a25781 = 25781 +a25782 = 25782 +a25783 = 25783 +a25784 = 25784 +a25785 = 25785 +a25786 = 25786 +a25787 = 25787 +a25788 = 25788 +a25789 = 25789 +a25790 = 25790 +a25791 = 25791 +a25792 = 25792 +a25793 = 25793 +a25794 = 25794 +a25795 = 25795 +a25796 = 25796 +a25797 = 25797 +a25798 = 25798 +a25799 = 25799 +a25800 = 25800 +a25801 = 25801 +a25802 = 25802 +a25803 = 25803 +a25804 = 25804 +a25805 = 25805 +a25806 = 25806 +a25807 = 25807 +a25808 = 25808 +a25809 = 25809 +a25810 = 25810 +a25811 = 25811 +a25812 = 25812 +a25813 = 25813 +a25814 = 25814 +a25815 = 25815 +a25816 = 25816 +a25817 = 25817 +a25818 = 25818 +a25819 = 25819 +a25820 = 25820 +a25821 = 25821 +a25822 = 25822 +a25823 = 25823 +a25824 = 25824 +a25825 = 25825 +a25826 = 25826 +a25827 = 25827 +a25828 = 25828 +a25829 = 25829 +a25830 = 25830 +a25831 = 25831 +a25832 = 25832 +a25833 = 25833 +a25834 = 25834 +a25835 = 25835 +a25836 = 25836 +a25837 = 25837 +a25838 = 25838 +a25839 = 25839 +a25840 = 25840 +a25841 = 25841 +a25842 = 25842 +a25843 = 25843 +a25844 = 25844 +a25845 = 25845 +a25846 = 25846 +a25847 = 25847 +a25848 = 25848 +a25849 = 25849 +a25850 = 25850 +a25851 = 25851 +a25852 = 25852 +a25853 = 25853 +a25854 = 25854 +a25855 = 25855 +a25856 = 25856 +a25857 = 25857 +a25858 = 25858 +a25859 = 25859 +a25860 = 25860 +a25861 = 25861 +a25862 = 25862 +a25863 = 25863 +a25864 = 25864 +a25865 = 25865 +a25866 = 25866 +a25867 = 25867 +a25868 = 25868 +a25869 = 25869 +a25870 = 25870 +a25871 = 25871 +a25872 = 25872 +a25873 = 25873 +a25874 = 25874 +a25875 = 25875 +a25876 = 25876 +a25877 = 25877 +a25878 = 25878 +a25879 = 25879 +a25880 = 25880 +a25881 = 25881 +a25882 = 25882 +a25883 = 25883 +a25884 = 25884 +a25885 = 25885 +a25886 = 25886 +a25887 = 25887 +a25888 = 25888 +a25889 = 25889 +a25890 = 25890 +a25891 = 25891 +a25892 = 25892 +a25893 = 25893 +a25894 = 25894 +a25895 = 25895 +a25896 = 25896 +a25897 = 25897 +a25898 = 25898 +a25899 = 25899 +a25900 = 25900 +a25901 = 25901 +a25902 = 25902 +a25903 = 25903 +a25904 = 25904 +a25905 = 25905 +a25906 = 25906 +a25907 = 25907 +a25908 = 25908 +a25909 = 25909 +a25910 = 25910 +a25911 = 25911 +a25912 = 25912 +a25913 = 25913 +a25914 = 25914 +a25915 = 25915 +a25916 = 25916 +a25917 = 25917 +a25918 = 25918 +a25919 = 25919 +a25920 = 25920 +a25921 = 25921 +a25922 = 25922 +a25923 = 25923 +a25924 = 25924 +a25925 = 25925 +a25926 = 25926 +a25927 = 25927 +a25928 = 25928 +a25929 = 25929 +a25930 = 25930 +a25931 = 25931 +a25932 = 25932 +a25933 = 25933 +a25934 = 25934 +a25935 = 25935 +a25936 = 25936 +a25937 = 25937 +a25938 = 25938 +a25939 = 25939 +a25940 = 25940 +a25941 = 25941 +a25942 = 25942 +a25943 = 25943 +a25944 = 25944 +a25945 = 25945 +a25946 = 25946 +a25947 = 25947 +a25948 = 25948 +a25949 = 25949 +a25950 = 25950 +a25951 = 25951 +a25952 = 25952 +a25953 = 25953 +a25954 = 25954 +a25955 = 25955 +a25956 = 25956 +a25957 = 25957 +a25958 = 25958 +a25959 = 25959 +a25960 = 25960 +a25961 = 25961 +a25962 = 25962 +a25963 = 25963 +a25964 = 25964 +a25965 = 25965 +a25966 = 25966 +a25967 = 25967 +a25968 = 25968 +a25969 = 25969 +a25970 = 25970 +a25971 = 25971 +a25972 = 25972 +a25973 = 25973 +a25974 = 25974 +a25975 = 25975 +a25976 = 25976 +a25977 = 25977 +a25978 = 25978 +a25979 = 25979 +a25980 = 25980 +a25981 = 25981 +a25982 = 25982 +a25983 = 25983 +a25984 = 25984 +a25985 = 25985 +a25986 = 25986 +a25987 = 25987 +a25988 = 25988 +a25989 = 25989 +a25990 = 25990 +a25991 = 25991 +a25992 = 25992 +a25993 = 25993 +a25994 = 25994 +a25995 = 25995 +a25996 = 25996 +a25997 = 25997 +a25998 = 25998 +a25999 = 25999 +a26000 = 26000 +a26001 = 26001 +a26002 = 26002 +a26003 = 26003 +a26004 = 26004 +a26005 = 26005 +a26006 = 26006 +a26007 = 26007 +a26008 = 26008 +a26009 = 26009 +a26010 = 26010 +a26011 = 26011 +a26012 = 26012 +a26013 = 26013 +a26014 = 26014 +a26015 = 26015 +a26016 = 26016 +a26017 = 26017 +a26018 = 26018 +a26019 = 26019 +a26020 = 26020 +a26021 = 26021 +a26022 = 26022 +a26023 = 26023 +a26024 = 26024 +a26025 = 26025 +a26026 = 26026 +a26027 = 26027 +a26028 = 26028 +a26029 = 26029 +a26030 = 26030 +a26031 = 26031 +a26032 = 26032 +a26033 = 26033 +a26034 = 26034 +a26035 = 26035 +a26036 = 26036 +a26037 = 26037 +a26038 = 26038 +a26039 = 26039 +a26040 = 26040 +a26041 = 26041 +a26042 = 26042 +a26043 = 26043 +a26044 = 26044 +a26045 = 26045 +a26046 = 26046 +a26047 = 26047 +a26048 = 26048 +a26049 = 26049 +a26050 = 26050 +a26051 = 26051 +a26052 = 26052 +a26053 = 26053 +a26054 = 26054 +a26055 = 26055 +a26056 = 26056 +a26057 = 26057 +a26058 = 26058 +a26059 = 26059 +a26060 = 26060 +a26061 = 26061 +a26062 = 26062 +a26063 = 26063 +a26064 = 26064 +a26065 = 26065 +a26066 = 26066 +a26067 = 26067 +a26068 = 26068 +a26069 = 26069 +a26070 = 26070 +a26071 = 26071 +a26072 = 26072 +a26073 = 26073 +a26074 = 26074 +a26075 = 26075 +a26076 = 26076 +a26077 = 26077 +a26078 = 26078 +a26079 = 26079 +a26080 = 26080 +a26081 = 26081 +a26082 = 26082 +a26083 = 26083 +a26084 = 26084 +a26085 = 26085 +a26086 = 26086 +a26087 = 26087 +a26088 = 26088 +a26089 = 26089 +a26090 = 26090 +a26091 = 26091 +a26092 = 26092 +a26093 = 26093 +a26094 = 26094 +a26095 = 26095 +a26096 = 26096 +a26097 = 26097 +a26098 = 26098 +a26099 = 26099 +a26100 = 26100 +a26101 = 26101 +a26102 = 26102 +a26103 = 26103 +a26104 = 26104 +a26105 = 26105 +a26106 = 26106 +a26107 = 26107 +a26108 = 26108 +a26109 = 26109 +a26110 = 26110 +a26111 = 26111 +a26112 = 26112 +a26113 = 26113 +a26114 = 26114 +a26115 = 26115 +a26116 = 26116 +a26117 = 26117 +a26118 = 26118 +a26119 = 26119 +a26120 = 26120 +a26121 = 26121 +a26122 = 26122 +a26123 = 26123 +a26124 = 26124 +a26125 = 26125 +a26126 = 26126 +a26127 = 26127 +a26128 = 26128 +a26129 = 26129 +a26130 = 26130 +a26131 = 26131 +a26132 = 26132 +a26133 = 26133 +a26134 = 26134 +a26135 = 26135 +a26136 = 26136 +a26137 = 26137 +a26138 = 26138 +a26139 = 26139 +a26140 = 26140 +a26141 = 26141 +a26142 = 26142 +a26143 = 26143 +a26144 = 26144 +a26145 = 26145 +a26146 = 26146 +a26147 = 26147 +a26148 = 26148 +a26149 = 26149 +a26150 = 26150 +a26151 = 26151 +a26152 = 26152 +a26153 = 26153 +a26154 = 26154 +a26155 = 26155 +a26156 = 26156 +a26157 = 26157 +a26158 = 26158 +a26159 = 26159 +a26160 = 26160 +a26161 = 26161 +a26162 = 26162 +a26163 = 26163 +a26164 = 26164 +a26165 = 26165 +a26166 = 26166 +a26167 = 26167 +a26168 = 26168 +a26169 = 26169 +a26170 = 26170 +a26171 = 26171 +a26172 = 26172 +a26173 = 26173 +a26174 = 26174 +a26175 = 26175 +a26176 = 26176 +a26177 = 26177 +a26178 = 26178 +a26179 = 26179 +a26180 = 26180 +a26181 = 26181 +a26182 = 26182 +a26183 = 26183 +a26184 = 26184 +a26185 = 26185 +a26186 = 26186 +a26187 = 26187 +a26188 = 26188 +a26189 = 26189 +a26190 = 26190 +a26191 = 26191 +a26192 = 26192 +a26193 = 26193 +a26194 = 26194 +a26195 = 26195 +a26196 = 26196 +a26197 = 26197 +a26198 = 26198 +a26199 = 26199 +a26200 = 26200 +a26201 = 26201 +a26202 = 26202 +a26203 = 26203 +a26204 = 26204 +a26205 = 26205 +a26206 = 26206 +a26207 = 26207 +a26208 = 26208 +a26209 = 26209 +a26210 = 26210 +a26211 = 26211 +a26212 = 26212 +a26213 = 26213 +a26214 = 26214 +a26215 = 26215 +a26216 = 26216 +a26217 = 26217 +a26218 = 26218 +a26219 = 26219 +a26220 = 26220 +a26221 = 26221 +a26222 = 26222 +a26223 = 26223 +a26224 = 26224 +a26225 = 26225 +a26226 = 26226 +a26227 = 26227 +a26228 = 26228 +a26229 = 26229 +a26230 = 26230 +a26231 = 26231 +a26232 = 26232 +a26233 = 26233 +a26234 = 26234 +a26235 = 26235 +a26236 = 26236 +a26237 = 26237 +a26238 = 26238 +a26239 = 26239 +a26240 = 26240 +a26241 = 26241 +a26242 = 26242 +a26243 = 26243 +a26244 = 26244 +a26245 = 26245 +a26246 = 26246 +a26247 = 26247 +a26248 = 26248 +a26249 = 26249 +a26250 = 26250 +a26251 = 26251 +a26252 = 26252 +a26253 = 26253 +a26254 = 26254 +a26255 = 26255 +a26256 = 26256 +a26257 = 26257 +a26258 = 26258 +a26259 = 26259 +a26260 = 26260 +a26261 = 26261 +a26262 = 26262 +a26263 = 26263 +a26264 = 26264 +a26265 = 26265 +a26266 = 26266 +a26267 = 26267 +a26268 = 26268 +a26269 = 26269 +a26270 = 26270 +a26271 = 26271 +a26272 = 26272 +a26273 = 26273 +a26274 = 26274 +a26275 = 26275 +a26276 = 26276 +a26277 = 26277 +a26278 = 26278 +a26279 = 26279 +a26280 = 26280 +a26281 = 26281 +a26282 = 26282 +a26283 = 26283 +a26284 = 26284 +a26285 = 26285 +a26286 = 26286 +a26287 = 26287 +a26288 = 26288 +a26289 = 26289 +a26290 = 26290 +a26291 = 26291 +a26292 = 26292 +a26293 = 26293 +a26294 = 26294 +a26295 = 26295 +a26296 = 26296 +a26297 = 26297 +a26298 = 26298 +a26299 = 26299 +a26300 = 26300 +a26301 = 26301 +a26302 = 26302 +a26303 = 26303 +a26304 = 26304 +a26305 = 26305 +a26306 = 26306 +a26307 = 26307 +a26308 = 26308 +a26309 = 26309 +a26310 = 26310 +a26311 = 26311 +a26312 = 26312 +a26313 = 26313 +a26314 = 26314 +a26315 = 26315 +a26316 = 26316 +a26317 = 26317 +a26318 = 26318 +a26319 = 26319 +a26320 = 26320 +a26321 = 26321 +a26322 = 26322 +a26323 = 26323 +a26324 = 26324 +a26325 = 26325 +a26326 = 26326 +a26327 = 26327 +a26328 = 26328 +a26329 = 26329 +a26330 = 26330 +a26331 = 26331 +a26332 = 26332 +a26333 = 26333 +a26334 = 26334 +a26335 = 26335 +a26336 = 26336 +a26337 = 26337 +a26338 = 26338 +a26339 = 26339 +a26340 = 26340 +a26341 = 26341 +a26342 = 26342 +a26343 = 26343 +a26344 = 26344 +a26345 = 26345 +a26346 = 26346 +a26347 = 26347 +a26348 = 26348 +a26349 = 26349 +a26350 = 26350 +a26351 = 26351 +a26352 = 26352 +a26353 = 26353 +a26354 = 26354 +a26355 = 26355 +a26356 = 26356 +a26357 = 26357 +a26358 = 26358 +a26359 = 26359 +a26360 = 26360 +a26361 = 26361 +a26362 = 26362 +a26363 = 26363 +a26364 = 26364 +a26365 = 26365 +a26366 = 26366 +a26367 = 26367 +a26368 = 26368 +a26369 = 26369 +a26370 = 26370 +a26371 = 26371 +a26372 = 26372 +a26373 = 26373 +a26374 = 26374 +a26375 = 26375 +a26376 = 26376 +a26377 = 26377 +a26378 = 26378 +a26379 = 26379 +a26380 = 26380 +a26381 = 26381 +a26382 = 26382 +a26383 = 26383 +a26384 = 26384 +a26385 = 26385 +a26386 = 26386 +a26387 = 26387 +a26388 = 26388 +a26389 = 26389 +a26390 = 26390 +a26391 = 26391 +a26392 = 26392 +a26393 = 26393 +a26394 = 26394 +a26395 = 26395 +a26396 = 26396 +a26397 = 26397 +a26398 = 26398 +a26399 = 26399 +a26400 = 26400 +a26401 = 26401 +a26402 = 26402 +a26403 = 26403 +a26404 = 26404 +a26405 = 26405 +a26406 = 26406 +a26407 = 26407 +a26408 = 26408 +a26409 = 26409 +a26410 = 26410 +a26411 = 26411 +a26412 = 26412 +a26413 = 26413 +a26414 = 26414 +a26415 = 26415 +a26416 = 26416 +a26417 = 26417 +a26418 = 26418 +a26419 = 26419 +a26420 = 26420 +a26421 = 26421 +a26422 = 26422 +a26423 = 26423 +a26424 = 26424 +a26425 = 26425 +a26426 = 26426 +a26427 = 26427 +a26428 = 26428 +a26429 = 26429 +a26430 = 26430 +a26431 = 26431 +a26432 = 26432 +a26433 = 26433 +a26434 = 26434 +a26435 = 26435 +a26436 = 26436 +a26437 = 26437 +a26438 = 26438 +a26439 = 26439 +a26440 = 26440 +a26441 = 26441 +a26442 = 26442 +a26443 = 26443 +a26444 = 26444 +a26445 = 26445 +a26446 = 26446 +a26447 = 26447 +a26448 = 26448 +a26449 = 26449 +a26450 = 26450 +a26451 = 26451 +a26452 = 26452 +a26453 = 26453 +a26454 = 26454 +a26455 = 26455 +a26456 = 26456 +a26457 = 26457 +a26458 = 26458 +a26459 = 26459 +a26460 = 26460 +a26461 = 26461 +a26462 = 26462 +a26463 = 26463 +a26464 = 26464 +a26465 = 26465 +a26466 = 26466 +a26467 = 26467 +a26468 = 26468 +a26469 = 26469 +a26470 = 26470 +a26471 = 26471 +a26472 = 26472 +a26473 = 26473 +a26474 = 26474 +a26475 = 26475 +a26476 = 26476 +a26477 = 26477 +a26478 = 26478 +a26479 = 26479 +a26480 = 26480 +a26481 = 26481 +a26482 = 26482 +a26483 = 26483 +a26484 = 26484 +a26485 = 26485 +a26486 = 26486 +a26487 = 26487 +a26488 = 26488 +a26489 = 26489 +a26490 = 26490 +a26491 = 26491 +a26492 = 26492 +a26493 = 26493 +a26494 = 26494 +a26495 = 26495 +a26496 = 26496 +a26497 = 26497 +a26498 = 26498 +a26499 = 26499 +a26500 = 26500 +a26501 = 26501 +a26502 = 26502 +a26503 = 26503 +a26504 = 26504 +a26505 = 26505 +a26506 = 26506 +a26507 = 26507 +a26508 = 26508 +a26509 = 26509 +a26510 = 26510 +a26511 = 26511 +a26512 = 26512 +a26513 = 26513 +a26514 = 26514 +a26515 = 26515 +a26516 = 26516 +a26517 = 26517 +a26518 = 26518 +a26519 = 26519 +a26520 = 26520 +a26521 = 26521 +a26522 = 26522 +a26523 = 26523 +a26524 = 26524 +a26525 = 26525 +a26526 = 26526 +a26527 = 26527 +a26528 = 26528 +a26529 = 26529 +a26530 = 26530 +a26531 = 26531 +a26532 = 26532 +a26533 = 26533 +a26534 = 26534 +a26535 = 26535 +a26536 = 26536 +a26537 = 26537 +a26538 = 26538 +a26539 = 26539 +a26540 = 26540 +a26541 = 26541 +a26542 = 26542 +a26543 = 26543 +a26544 = 26544 +a26545 = 26545 +a26546 = 26546 +a26547 = 26547 +a26548 = 26548 +a26549 = 26549 +a26550 = 26550 +a26551 = 26551 +a26552 = 26552 +a26553 = 26553 +a26554 = 26554 +a26555 = 26555 +a26556 = 26556 +a26557 = 26557 +a26558 = 26558 +a26559 = 26559 +a26560 = 26560 +a26561 = 26561 +a26562 = 26562 +a26563 = 26563 +a26564 = 26564 +a26565 = 26565 +a26566 = 26566 +a26567 = 26567 +a26568 = 26568 +a26569 = 26569 +a26570 = 26570 +a26571 = 26571 +a26572 = 26572 +a26573 = 26573 +a26574 = 26574 +a26575 = 26575 +a26576 = 26576 +a26577 = 26577 +a26578 = 26578 +a26579 = 26579 +a26580 = 26580 +a26581 = 26581 +a26582 = 26582 +a26583 = 26583 +a26584 = 26584 +a26585 = 26585 +a26586 = 26586 +a26587 = 26587 +a26588 = 26588 +a26589 = 26589 +a26590 = 26590 +a26591 = 26591 +a26592 = 26592 +a26593 = 26593 +a26594 = 26594 +a26595 = 26595 +a26596 = 26596 +a26597 = 26597 +a26598 = 26598 +a26599 = 26599 +a26600 = 26600 +a26601 = 26601 +a26602 = 26602 +a26603 = 26603 +a26604 = 26604 +a26605 = 26605 +a26606 = 26606 +a26607 = 26607 +a26608 = 26608 +a26609 = 26609 +a26610 = 26610 +a26611 = 26611 +a26612 = 26612 +a26613 = 26613 +a26614 = 26614 +a26615 = 26615 +a26616 = 26616 +a26617 = 26617 +a26618 = 26618 +a26619 = 26619 +a26620 = 26620 +a26621 = 26621 +a26622 = 26622 +a26623 = 26623 +a26624 = 26624 +a26625 = 26625 +a26626 = 26626 +a26627 = 26627 +a26628 = 26628 +a26629 = 26629 +a26630 = 26630 +a26631 = 26631 +a26632 = 26632 +a26633 = 26633 +a26634 = 26634 +a26635 = 26635 +a26636 = 26636 +a26637 = 26637 +a26638 = 26638 +a26639 = 26639 +a26640 = 26640 +a26641 = 26641 +a26642 = 26642 +a26643 = 26643 +a26644 = 26644 +a26645 = 26645 +a26646 = 26646 +a26647 = 26647 +a26648 = 26648 +a26649 = 26649 +a26650 = 26650 +a26651 = 26651 +a26652 = 26652 +a26653 = 26653 +a26654 = 26654 +a26655 = 26655 +a26656 = 26656 +a26657 = 26657 +a26658 = 26658 +a26659 = 26659 +a26660 = 26660 +a26661 = 26661 +a26662 = 26662 +a26663 = 26663 +a26664 = 26664 +a26665 = 26665 +a26666 = 26666 +a26667 = 26667 +a26668 = 26668 +a26669 = 26669 +a26670 = 26670 +a26671 = 26671 +a26672 = 26672 +a26673 = 26673 +a26674 = 26674 +a26675 = 26675 +a26676 = 26676 +a26677 = 26677 +a26678 = 26678 +a26679 = 26679 +a26680 = 26680 +a26681 = 26681 +a26682 = 26682 +a26683 = 26683 +a26684 = 26684 +a26685 = 26685 +a26686 = 26686 +a26687 = 26687 +a26688 = 26688 +a26689 = 26689 +a26690 = 26690 +a26691 = 26691 +a26692 = 26692 +a26693 = 26693 +a26694 = 26694 +a26695 = 26695 +a26696 = 26696 +a26697 = 26697 +a26698 = 26698 +a26699 = 26699 +a26700 = 26700 +a26701 = 26701 +a26702 = 26702 +a26703 = 26703 +a26704 = 26704 +a26705 = 26705 +a26706 = 26706 +a26707 = 26707 +a26708 = 26708 +a26709 = 26709 +a26710 = 26710 +a26711 = 26711 +a26712 = 26712 +a26713 = 26713 +a26714 = 26714 +a26715 = 26715 +a26716 = 26716 +a26717 = 26717 +a26718 = 26718 +a26719 = 26719 +a26720 = 26720 +a26721 = 26721 +a26722 = 26722 +a26723 = 26723 +a26724 = 26724 +a26725 = 26725 +a26726 = 26726 +a26727 = 26727 +a26728 = 26728 +a26729 = 26729 +a26730 = 26730 +a26731 = 26731 +a26732 = 26732 +a26733 = 26733 +a26734 = 26734 +a26735 = 26735 +a26736 = 26736 +a26737 = 26737 +a26738 = 26738 +a26739 = 26739 +a26740 = 26740 +a26741 = 26741 +a26742 = 26742 +a26743 = 26743 +a26744 = 26744 +a26745 = 26745 +a26746 = 26746 +a26747 = 26747 +a26748 = 26748 +a26749 = 26749 +a26750 = 26750 +a26751 = 26751 +a26752 = 26752 +a26753 = 26753 +a26754 = 26754 +a26755 = 26755 +a26756 = 26756 +a26757 = 26757 +a26758 = 26758 +a26759 = 26759 +a26760 = 26760 +a26761 = 26761 +a26762 = 26762 +a26763 = 26763 +a26764 = 26764 +a26765 = 26765 +a26766 = 26766 +a26767 = 26767 +a26768 = 26768 +a26769 = 26769 +a26770 = 26770 +a26771 = 26771 +a26772 = 26772 +a26773 = 26773 +a26774 = 26774 +a26775 = 26775 +a26776 = 26776 +a26777 = 26777 +a26778 = 26778 +a26779 = 26779 +a26780 = 26780 +a26781 = 26781 +a26782 = 26782 +a26783 = 26783 +a26784 = 26784 +a26785 = 26785 +a26786 = 26786 +a26787 = 26787 +a26788 = 26788 +a26789 = 26789 +a26790 = 26790 +a26791 = 26791 +a26792 = 26792 +a26793 = 26793 +a26794 = 26794 +a26795 = 26795 +a26796 = 26796 +a26797 = 26797 +a26798 = 26798 +a26799 = 26799 +a26800 = 26800 +a26801 = 26801 +a26802 = 26802 +a26803 = 26803 +a26804 = 26804 +a26805 = 26805 +a26806 = 26806 +a26807 = 26807 +a26808 = 26808 +a26809 = 26809 +a26810 = 26810 +a26811 = 26811 +a26812 = 26812 +a26813 = 26813 +a26814 = 26814 +a26815 = 26815 +a26816 = 26816 +a26817 = 26817 +a26818 = 26818 +a26819 = 26819 +a26820 = 26820 +a26821 = 26821 +a26822 = 26822 +a26823 = 26823 +a26824 = 26824 +a26825 = 26825 +a26826 = 26826 +a26827 = 26827 +a26828 = 26828 +a26829 = 26829 +a26830 = 26830 +a26831 = 26831 +a26832 = 26832 +a26833 = 26833 +a26834 = 26834 +a26835 = 26835 +a26836 = 26836 +a26837 = 26837 +a26838 = 26838 +a26839 = 26839 +a26840 = 26840 +a26841 = 26841 +a26842 = 26842 +a26843 = 26843 +a26844 = 26844 +a26845 = 26845 +a26846 = 26846 +a26847 = 26847 +a26848 = 26848 +a26849 = 26849 +a26850 = 26850 +a26851 = 26851 +a26852 = 26852 +a26853 = 26853 +a26854 = 26854 +a26855 = 26855 +a26856 = 26856 +a26857 = 26857 +a26858 = 26858 +a26859 = 26859 +a26860 = 26860 +a26861 = 26861 +a26862 = 26862 +a26863 = 26863 +a26864 = 26864 +a26865 = 26865 +a26866 = 26866 +a26867 = 26867 +a26868 = 26868 +a26869 = 26869 +a26870 = 26870 +a26871 = 26871 +a26872 = 26872 +a26873 = 26873 +a26874 = 26874 +a26875 = 26875 +a26876 = 26876 +a26877 = 26877 +a26878 = 26878 +a26879 = 26879 +a26880 = 26880 +a26881 = 26881 +a26882 = 26882 +a26883 = 26883 +a26884 = 26884 +a26885 = 26885 +a26886 = 26886 +a26887 = 26887 +a26888 = 26888 +a26889 = 26889 +a26890 = 26890 +a26891 = 26891 +a26892 = 26892 +a26893 = 26893 +a26894 = 26894 +a26895 = 26895 +a26896 = 26896 +a26897 = 26897 +a26898 = 26898 +a26899 = 26899 +a26900 = 26900 +a26901 = 26901 +a26902 = 26902 +a26903 = 26903 +a26904 = 26904 +a26905 = 26905 +a26906 = 26906 +a26907 = 26907 +a26908 = 26908 +a26909 = 26909 +a26910 = 26910 +a26911 = 26911 +a26912 = 26912 +a26913 = 26913 +a26914 = 26914 +a26915 = 26915 +a26916 = 26916 +a26917 = 26917 +a26918 = 26918 +a26919 = 26919 +a26920 = 26920 +a26921 = 26921 +a26922 = 26922 +a26923 = 26923 +a26924 = 26924 +a26925 = 26925 +a26926 = 26926 +a26927 = 26927 +a26928 = 26928 +a26929 = 26929 +a26930 = 26930 +a26931 = 26931 +a26932 = 26932 +a26933 = 26933 +a26934 = 26934 +a26935 = 26935 +a26936 = 26936 +a26937 = 26937 +a26938 = 26938 +a26939 = 26939 +a26940 = 26940 +a26941 = 26941 +a26942 = 26942 +a26943 = 26943 +a26944 = 26944 +a26945 = 26945 +a26946 = 26946 +a26947 = 26947 +a26948 = 26948 +a26949 = 26949 +a26950 = 26950 +a26951 = 26951 +a26952 = 26952 +a26953 = 26953 +a26954 = 26954 +a26955 = 26955 +a26956 = 26956 +a26957 = 26957 +a26958 = 26958 +a26959 = 26959 +a26960 = 26960 +a26961 = 26961 +a26962 = 26962 +a26963 = 26963 +a26964 = 26964 +a26965 = 26965 +a26966 = 26966 +a26967 = 26967 +a26968 = 26968 +a26969 = 26969 +a26970 = 26970 +a26971 = 26971 +a26972 = 26972 +a26973 = 26973 +a26974 = 26974 +a26975 = 26975 +a26976 = 26976 +a26977 = 26977 +a26978 = 26978 +a26979 = 26979 +a26980 = 26980 +a26981 = 26981 +a26982 = 26982 +a26983 = 26983 +a26984 = 26984 +a26985 = 26985 +a26986 = 26986 +a26987 = 26987 +a26988 = 26988 +a26989 = 26989 +a26990 = 26990 +a26991 = 26991 +a26992 = 26992 +a26993 = 26993 +a26994 = 26994 +a26995 = 26995 +a26996 = 26996 +a26997 = 26997 +a26998 = 26998 +a26999 = 26999 +a27000 = 27000 +a27001 = 27001 +a27002 = 27002 +a27003 = 27003 +a27004 = 27004 +a27005 = 27005 +a27006 = 27006 +a27007 = 27007 +a27008 = 27008 +a27009 = 27009 +a27010 = 27010 +a27011 = 27011 +a27012 = 27012 +a27013 = 27013 +a27014 = 27014 +a27015 = 27015 +a27016 = 27016 +a27017 = 27017 +a27018 = 27018 +a27019 = 27019 +a27020 = 27020 +a27021 = 27021 +a27022 = 27022 +a27023 = 27023 +a27024 = 27024 +a27025 = 27025 +a27026 = 27026 +a27027 = 27027 +a27028 = 27028 +a27029 = 27029 +a27030 = 27030 +a27031 = 27031 +a27032 = 27032 +a27033 = 27033 +a27034 = 27034 +a27035 = 27035 +a27036 = 27036 +a27037 = 27037 +a27038 = 27038 +a27039 = 27039 +a27040 = 27040 +a27041 = 27041 +a27042 = 27042 +a27043 = 27043 +a27044 = 27044 +a27045 = 27045 +a27046 = 27046 +a27047 = 27047 +a27048 = 27048 +a27049 = 27049 +a27050 = 27050 +a27051 = 27051 +a27052 = 27052 +a27053 = 27053 +a27054 = 27054 +a27055 = 27055 +a27056 = 27056 +a27057 = 27057 +a27058 = 27058 +a27059 = 27059 +a27060 = 27060 +a27061 = 27061 +a27062 = 27062 +a27063 = 27063 +a27064 = 27064 +a27065 = 27065 +a27066 = 27066 +a27067 = 27067 +a27068 = 27068 +a27069 = 27069 +a27070 = 27070 +a27071 = 27071 +a27072 = 27072 +a27073 = 27073 +a27074 = 27074 +a27075 = 27075 +a27076 = 27076 +a27077 = 27077 +a27078 = 27078 +a27079 = 27079 +a27080 = 27080 +a27081 = 27081 +a27082 = 27082 +a27083 = 27083 +a27084 = 27084 +a27085 = 27085 +a27086 = 27086 +a27087 = 27087 +a27088 = 27088 +a27089 = 27089 +a27090 = 27090 +a27091 = 27091 +a27092 = 27092 +a27093 = 27093 +a27094 = 27094 +a27095 = 27095 +a27096 = 27096 +a27097 = 27097 +a27098 = 27098 +a27099 = 27099 +a27100 = 27100 +a27101 = 27101 +a27102 = 27102 +a27103 = 27103 +a27104 = 27104 +a27105 = 27105 +a27106 = 27106 +a27107 = 27107 +a27108 = 27108 +a27109 = 27109 +a27110 = 27110 +a27111 = 27111 +a27112 = 27112 +a27113 = 27113 +a27114 = 27114 +a27115 = 27115 +a27116 = 27116 +a27117 = 27117 +a27118 = 27118 +a27119 = 27119 +a27120 = 27120 +a27121 = 27121 +a27122 = 27122 +a27123 = 27123 +a27124 = 27124 +a27125 = 27125 +a27126 = 27126 +a27127 = 27127 +a27128 = 27128 +a27129 = 27129 +a27130 = 27130 +a27131 = 27131 +a27132 = 27132 +a27133 = 27133 +a27134 = 27134 +a27135 = 27135 +a27136 = 27136 +a27137 = 27137 +a27138 = 27138 +a27139 = 27139 +a27140 = 27140 +a27141 = 27141 +a27142 = 27142 +a27143 = 27143 +a27144 = 27144 +a27145 = 27145 +a27146 = 27146 +a27147 = 27147 +a27148 = 27148 +a27149 = 27149 +a27150 = 27150 +a27151 = 27151 +a27152 = 27152 +a27153 = 27153 +a27154 = 27154 +a27155 = 27155 +a27156 = 27156 +a27157 = 27157 +a27158 = 27158 +a27159 = 27159 +a27160 = 27160 +a27161 = 27161 +a27162 = 27162 +a27163 = 27163 +a27164 = 27164 +a27165 = 27165 +a27166 = 27166 +a27167 = 27167 +a27168 = 27168 +a27169 = 27169 +a27170 = 27170 +a27171 = 27171 +a27172 = 27172 +a27173 = 27173 +a27174 = 27174 +a27175 = 27175 +a27176 = 27176 +a27177 = 27177 +a27178 = 27178 +a27179 = 27179 +a27180 = 27180 +a27181 = 27181 +a27182 = 27182 +a27183 = 27183 +a27184 = 27184 +a27185 = 27185 +a27186 = 27186 +a27187 = 27187 +a27188 = 27188 +a27189 = 27189 +a27190 = 27190 +a27191 = 27191 +a27192 = 27192 +a27193 = 27193 +a27194 = 27194 +a27195 = 27195 +a27196 = 27196 +a27197 = 27197 +a27198 = 27198 +a27199 = 27199 +a27200 = 27200 +a27201 = 27201 +a27202 = 27202 +a27203 = 27203 +a27204 = 27204 +a27205 = 27205 +a27206 = 27206 +a27207 = 27207 +a27208 = 27208 +a27209 = 27209 +a27210 = 27210 +a27211 = 27211 +a27212 = 27212 +a27213 = 27213 +a27214 = 27214 +a27215 = 27215 +a27216 = 27216 +a27217 = 27217 +a27218 = 27218 +a27219 = 27219 +a27220 = 27220 +a27221 = 27221 +a27222 = 27222 +a27223 = 27223 +a27224 = 27224 +a27225 = 27225 +a27226 = 27226 +a27227 = 27227 +a27228 = 27228 +a27229 = 27229 +a27230 = 27230 +a27231 = 27231 +a27232 = 27232 +a27233 = 27233 +a27234 = 27234 +a27235 = 27235 +a27236 = 27236 +a27237 = 27237 +a27238 = 27238 +a27239 = 27239 +a27240 = 27240 +a27241 = 27241 +a27242 = 27242 +a27243 = 27243 +a27244 = 27244 +a27245 = 27245 +a27246 = 27246 +a27247 = 27247 +a27248 = 27248 +a27249 = 27249 +a27250 = 27250 +a27251 = 27251 +a27252 = 27252 +a27253 = 27253 +a27254 = 27254 +a27255 = 27255 +a27256 = 27256 +a27257 = 27257 +a27258 = 27258 +a27259 = 27259 +a27260 = 27260 +a27261 = 27261 +a27262 = 27262 +a27263 = 27263 +a27264 = 27264 +a27265 = 27265 +a27266 = 27266 +a27267 = 27267 +a27268 = 27268 +a27269 = 27269 +a27270 = 27270 +a27271 = 27271 +a27272 = 27272 +a27273 = 27273 +a27274 = 27274 +a27275 = 27275 +a27276 = 27276 +a27277 = 27277 +a27278 = 27278 +a27279 = 27279 +a27280 = 27280 +a27281 = 27281 +a27282 = 27282 +a27283 = 27283 +a27284 = 27284 +a27285 = 27285 +a27286 = 27286 +a27287 = 27287 +a27288 = 27288 +a27289 = 27289 +a27290 = 27290 +a27291 = 27291 +a27292 = 27292 +a27293 = 27293 +a27294 = 27294 +a27295 = 27295 +a27296 = 27296 +a27297 = 27297 +a27298 = 27298 +a27299 = 27299 +a27300 = 27300 +a27301 = 27301 +a27302 = 27302 +a27303 = 27303 +a27304 = 27304 +a27305 = 27305 +a27306 = 27306 +a27307 = 27307 +a27308 = 27308 +a27309 = 27309 +a27310 = 27310 +a27311 = 27311 +a27312 = 27312 +a27313 = 27313 +a27314 = 27314 +a27315 = 27315 +a27316 = 27316 +a27317 = 27317 +a27318 = 27318 +a27319 = 27319 +a27320 = 27320 +a27321 = 27321 +a27322 = 27322 +a27323 = 27323 +a27324 = 27324 +a27325 = 27325 +a27326 = 27326 +a27327 = 27327 +a27328 = 27328 +a27329 = 27329 +a27330 = 27330 +a27331 = 27331 +a27332 = 27332 +a27333 = 27333 +a27334 = 27334 +a27335 = 27335 +a27336 = 27336 +a27337 = 27337 +a27338 = 27338 +a27339 = 27339 +a27340 = 27340 +a27341 = 27341 +a27342 = 27342 +a27343 = 27343 +a27344 = 27344 +a27345 = 27345 +a27346 = 27346 +a27347 = 27347 +a27348 = 27348 +a27349 = 27349 +a27350 = 27350 +a27351 = 27351 +a27352 = 27352 +a27353 = 27353 +a27354 = 27354 +a27355 = 27355 +a27356 = 27356 +a27357 = 27357 +a27358 = 27358 +a27359 = 27359 +a27360 = 27360 +a27361 = 27361 +a27362 = 27362 +a27363 = 27363 +a27364 = 27364 +a27365 = 27365 +a27366 = 27366 +a27367 = 27367 +a27368 = 27368 +a27369 = 27369 +a27370 = 27370 +a27371 = 27371 +a27372 = 27372 +a27373 = 27373 +a27374 = 27374 +a27375 = 27375 +a27376 = 27376 +a27377 = 27377 +a27378 = 27378 +a27379 = 27379 +a27380 = 27380 +a27381 = 27381 +a27382 = 27382 +a27383 = 27383 +a27384 = 27384 +a27385 = 27385 +a27386 = 27386 +a27387 = 27387 +a27388 = 27388 +a27389 = 27389 +a27390 = 27390 +a27391 = 27391 +a27392 = 27392 +a27393 = 27393 +a27394 = 27394 +a27395 = 27395 +a27396 = 27396 +a27397 = 27397 +a27398 = 27398 +a27399 = 27399 +a27400 = 27400 +a27401 = 27401 +a27402 = 27402 +a27403 = 27403 +a27404 = 27404 +a27405 = 27405 +a27406 = 27406 +a27407 = 27407 +a27408 = 27408 +a27409 = 27409 +a27410 = 27410 +a27411 = 27411 +a27412 = 27412 +a27413 = 27413 +a27414 = 27414 +a27415 = 27415 +a27416 = 27416 +a27417 = 27417 +a27418 = 27418 +a27419 = 27419 +a27420 = 27420 +a27421 = 27421 +a27422 = 27422 +a27423 = 27423 +a27424 = 27424 +a27425 = 27425 +a27426 = 27426 +a27427 = 27427 +a27428 = 27428 +a27429 = 27429 +a27430 = 27430 +a27431 = 27431 +a27432 = 27432 +a27433 = 27433 +a27434 = 27434 +a27435 = 27435 +a27436 = 27436 +a27437 = 27437 +a27438 = 27438 +a27439 = 27439 +a27440 = 27440 +a27441 = 27441 +a27442 = 27442 +a27443 = 27443 +a27444 = 27444 +a27445 = 27445 +a27446 = 27446 +a27447 = 27447 +a27448 = 27448 +a27449 = 27449 +a27450 = 27450 +a27451 = 27451 +a27452 = 27452 +a27453 = 27453 +a27454 = 27454 +a27455 = 27455 +a27456 = 27456 +a27457 = 27457 +a27458 = 27458 +a27459 = 27459 +a27460 = 27460 +a27461 = 27461 +a27462 = 27462 +a27463 = 27463 +a27464 = 27464 +a27465 = 27465 +a27466 = 27466 +a27467 = 27467 +a27468 = 27468 +a27469 = 27469 +a27470 = 27470 +a27471 = 27471 +a27472 = 27472 +a27473 = 27473 +a27474 = 27474 +a27475 = 27475 +a27476 = 27476 +a27477 = 27477 +a27478 = 27478 +a27479 = 27479 +a27480 = 27480 +a27481 = 27481 +a27482 = 27482 +a27483 = 27483 +a27484 = 27484 +a27485 = 27485 +a27486 = 27486 +a27487 = 27487 +a27488 = 27488 +a27489 = 27489 +a27490 = 27490 +a27491 = 27491 +a27492 = 27492 +a27493 = 27493 +a27494 = 27494 +a27495 = 27495 +a27496 = 27496 +a27497 = 27497 +a27498 = 27498 +a27499 = 27499 +a27500 = 27500 +a27501 = 27501 +a27502 = 27502 +a27503 = 27503 +a27504 = 27504 +a27505 = 27505 +a27506 = 27506 +a27507 = 27507 +a27508 = 27508 +a27509 = 27509 +a27510 = 27510 +a27511 = 27511 +a27512 = 27512 +a27513 = 27513 +a27514 = 27514 +a27515 = 27515 +a27516 = 27516 +a27517 = 27517 +a27518 = 27518 +a27519 = 27519 +a27520 = 27520 +a27521 = 27521 +a27522 = 27522 +a27523 = 27523 +a27524 = 27524 +a27525 = 27525 +a27526 = 27526 +a27527 = 27527 +a27528 = 27528 +a27529 = 27529 +a27530 = 27530 +a27531 = 27531 +a27532 = 27532 +a27533 = 27533 +a27534 = 27534 +a27535 = 27535 +a27536 = 27536 +a27537 = 27537 +a27538 = 27538 +a27539 = 27539 +a27540 = 27540 +a27541 = 27541 +a27542 = 27542 +a27543 = 27543 +a27544 = 27544 +a27545 = 27545 +a27546 = 27546 +a27547 = 27547 +a27548 = 27548 +a27549 = 27549 +a27550 = 27550 +a27551 = 27551 +a27552 = 27552 +a27553 = 27553 +a27554 = 27554 +a27555 = 27555 +a27556 = 27556 +a27557 = 27557 +a27558 = 27558 +a27559 = 27559 +a27560 = 27560 +a27561 = 27561 +a27562 = 27562 +a27563 = 27563 +a27564 = 27564 +a27565 = 27565 +a27566 = 27566 +a27567 = 27567 +a27568 = 27568 +a27569 = 27569 +a27570 = 27570 +a27571 = 27571 +a27572 = 27572 +a27573 = 27573 +a27574 = 27574 +a27575 = 27575 +a27576 = 27576 +a27577 = 27577 +a27578 = 27578 +a27579 = 27579 +a27580 = 27580 +a27581 = 27581 +a27582 = 27582 +a27583 = 27583 +a27584 = 27584 +a27585 = 27585 +a27586 = 27586 +a27587 = 27587 +a27588 = 27588 +a27589 = 27589 +a27590 = 27590 +a27591 = 27591 +a27592 = 27592 +a27593 = 27593 +a27594 = 27594 +a27595 = 27595 +a27596 = 27596 +a27597 = 27597 +a27598 = 27598 +a27599 = 27599 +a27600 = 27600 +a27601 = 27601 +a27602 = 27602 +a27603 = 27603 +a27604 = 27604 +a27605 = 27605 +a27606 = 27606 +a27607 = 27607 +a27608 = 27608 +a27609 = 27609 +a27610 = 27610 +a27611 = 27611 +a27612 = 27612 +a27613 = 27613 +a27614 = 27614 +a27615 = 27615 +a27616 = 27616 +a27617 = 27617 +a27618 = 27618 +a27619 = 27619 +a27620 = 27620 +a27621 = 27621 +a27622 = 27622 +a27623 = 27623 +a27624 = 27624 +a27625 = 27625 +a27626 = 27626 +a27627 = 27627 +a27628 = 27628 +a27629 = 27629 +a27630 = 27630 +a27631 = 27631 +a27632 = 27632 +a27633 = 27633 +a27634 = 27634 +a27635 = 27635 +a27636 = 27636 +a27637 = 27637 +a27638 = 27638 +a27639 = 27639 +a27640 = 27640 +a27641 = 27641 +a27642 = 27642 +a27643 = 27643 +a27644 = 27644 +a27645 = 27645 +a27646 = 27646 +a27647 = 27647 +a27648 = 27648 +a27649 = 27649 +a27650 = 27650 +a27651 = 27651 +a27652 = 27652 +a27653 = 27653 +a27654 = 27654 +a27655 = 27655 +a27656 = 27656 +a27657 = 27657 +a27658 = 27658 +a27659 = 27659 +a27660 = 27660 +a27661 = 27661 +a27662 = 27662 +a27663 = 27663 +a27664 = 27664 +a27665 = 27665 +a27666 = 27666 +a27667 = 27667 +a27668 = 27668 +a27669 = 27669 +a27670 = 27670 +a27671 = 27671 +a27672 = 27672 +a27673 = 27673 +a27674 = 27674 +a27675 = 27675 +a27676 = 27676 +a27677 = 27677 +a27678 = 27678 +a27679 = 27679 +a27680 = 27680 +a27681 = 27681 +a27682 = 27682 +a27683 = 27683 +a27684 = 27684 +a27685 = 27685 +a27686 = 27686 +a27687 = 27687 +a27688 = 27688 +a27689 = 27689 +a27690 = 27690 +a27691 = 27691 +a27692 = 27692 +a27693 = 27693 +a27694 = 27694 +a27695 = 27695 +a27696 = 27696 +a27697 = 27697 +a27698 = 27698 +a27699 = 27699 +a27700 = 27700 +a27701 = 27701 +a27702 = 27702 +a27703 = 27703 +a27704 = 27704 +a27705 = 27705 +a27706 = 27706 +a27707 = 27707 +a27708 = 27708 +a27709 = 27709 +a27710 = 27710 +a27711 = 27711 +a27712 = 27712 +a27713 = 27713 +a27714 = 27714 +a27715 = 27715 +a27716 = 27716 +a27717 = 27717 +a27718 = 27718 +a27719 = 27719 +a27720 = 27720 +a27721 = 27721 +a27722 = 27722 +a27723 = 27723 +a27724 = 27724 +a27725 = 27725 +a27726 = 27726 +a27727 = 27727 +a27728 = 27728 +a27729 = 27729 +a27730 = 27730 +a27731 = 27731 +a27732 = 27732 +a27733 = 27733 +a27734 = 27734 +a27735 = 27735 +a27736 = 27736 +a27737 = 27737 +a27738 = 27738 +a27739 = 27739 +a27740 = 27740 +a27741 = 27741 +a27742 = 27742 +a27743 = 27743 +a27744 = 27744 +a27745 = 27745 +a27746 = 27746 +a27747 = 27747 +a27748 = 27748 +a27749 = 27749 +a27750 = 27750 +a27751 = 27751 +a27752 = 27752 +a27753 = 27753 +a27754 = 27754 +a27755 = 27755 +a27756 = 27756 +a27757 = 27757 +a27758 = 27758 +a27759 = 27759 +a27760 = 27760 +a27761 = 27761 +a27762 = 27762 +a27763 = 27763 +a27764 = 27764 +a27765 = 27765 +a27766 = 27766 +a27767 = 27767 +a27768 = 27768 +a27769 = 27769 +a27770 = 27770 +a27771 = 27771 +a27772 = 27772 +a27773 = 27773 +a27774 = 27774 +a27775 = 27775 +a27776 = 27776 +a27777 = 27777 +a27778 = 27778 +a27779 = 27779 +a27780 = 27780 +a27781 = 27781 +a27782 = 27782 +a27783 = 27783 +a27784 = 27784 +a27785 = 27785 +a27786 = 27786 +a27787 = 27787 +a27788 = 27788 +a27789 = 27789 +a27790 = 27790 +a27791 = 27791 +a27792 = 27792 +a27793 = 27793 +a27794 = 27794 +a27795 = 27795 +a27796 = 27796 +a27797 = 27797 +a27798 = 27798 +a27799 = 27799 +a27800 = 27800 +a27801 = 27801 +a27802 = 27802 +a27803 = 27803 +a27804 = 27804 +a27805 = 27805 +a27806 = 27806 +a27807 = 27807 +a27808 = 27808 +a27809 = 27809 +a27810 = 27810 +a27811 = 27811 +a27812 = 27812 +a27813 = 27813 +a27814 = 27814 +a27815 = 27815 +a27816 = 27816 +a27817 = 27817 +a27818 = 27818 +a27819 = 27819 +a27820 = 27820 +a27821 = 27821 +a27822 = 27822 +a27823 = 27823 +a27824 = 27824 +a27825 = 27825 +a27826 = 27826 +a27827 = 27827 +a27828 = 27828 +a27829 = 27829 +a27830 = 27830 +a27831 = 27831 +a27832 = 27832 +a27833 = 27833 +a27834 = 27834 +a27835 = 27835 +a27836 = 27836 +a27837 = 27837 +a27838 = 27838 +a27839 = 27839 +a27840 = 27840 +a27841 = 27841 +a27842 = 27842 +a27843 = 27843 +a27844 = 27844 +a27845 = 27845 +a27846 = 27846 +a27847 = 27847 +a27848 = 27848 +a27849 = 27849 +a27850 = 27850 +a27851 = 27851 +a27852 = 27852 +a27853 = 27853 +a27854 = 27854 +a27855 = 27855 +a27856 = 27856 +a27857 = 27857 +a27858 = 27858 +a27859 = 27859 +a27860 = 27860 +a27861 = 27861 +a27862 = 27862 +a27863 = 27863 +a27864 = 27864 +a27865 = 27865 +a27866 = 27866 +a27867 = 27867 +a27868 = 27868 +a27869 = 27869 +a27870 = 27870 +a27871 = 27871 +a27872 = 27872 +a27873 = 27873 +a27874 = 27874 +a27875 = 27875 +a27876 = 27876 +a27877 = 27877 +a27878 = 27878 +a27879 = 27879 +a27880 = 27880 +a27881 = 27881 +a27882 = 27882 +a27883 = 27883 +a27884 = 27884 +a27885 = 27885 +a27886 = 27886 +a27887 = 27887 +a27888 = 27888 +a27889 = 27889 +a27890 = 27890 +a27891 = 27891 +a27892 = 27892 +a27893 = 27893 +a27894 = 27894 +a27895 = 27895 +a27896 = 27896 +a27897 = 27897 +a27898 = 27898 +a27899 = 27899 +a27900 = 27900 +a27901 = 27901 +a27902 = 27902 +a27903 = 27903 +a27904 = 27904 +a27905 = 27905 +a27906 = 27906 +a27907 = 27907 +a27908 = 27908 +a27909 = 27909 +a27910 = 27910 +a27911 = 27911 +a27912 = 27912 +a27913 = 27913 +a27914 = 27914 +a27915 = 27915 +a27916 = 27916 +a27917 = 27917 +a27918 = 27918 +a27919 = 27919 +a27920 = 27920 +a27921 = 27921 +a27922 = 27922 +a27923 = 27923 +a27924 = 27924 +a27925 = 27925 +a27926 = 27926 +a27927 = 27927 +a27928 = 27928 +a27929 = 27929 +a27930 = 27930 +a27931 = 27931 +a27932 = 27932 +a27933 = 27933 +a27934 = 27934 +a27935 = 27935 +a27936 = 27936 +a27937 = 27937 +a27938 = 27938 +a27939 = 27939 +a27940 = 27940 +a27941 = 27941 +a27942 = 27942 +a27943 = 27943 +a27944 = 27944 +a27945 = 27945 +a27946 = 27946 +a27947 = 27947 +a27948 = 27948 +a27949 = 27949 +a27950 = 27950 +a27951 = 27951 +a27952 = 27952 +a27953 = 27953 +a27954 = 27954 +a27955 = 27955 +a27956 = 27956 +a27957 = 27957 +a27958 = 27958 +a27959 = 27959 +a27960 = 27960 +a27961 = 27961 +a27962 = 27962 +a27963 = 27963 +a27964 = 27964 +a27965 = 27965 +a27966 = 27966 +a27967 = 27967 +a27968 = 27968 +a27969 = 27969 +a27970 = 27970 +a27971 = 27971 +a27972 = 27972 +a27973 = 27973 +a27974 = 27974 +a27975 = 27975 +a27976 = 27976 +a27977 = 27977 +a27978 = 27978 +a27979 = 27979 +a27980 = 27980 +a27981 = 27981 +a27982 = 27982 +a27983 = 27983 +a27984 = 27984 +a27985 = 27985 +a27986 = 27986 +a27987 = 27987 +a27988 = 27988 +a27989 = 27989 +a27990 = 27990 +a27991 = 27991 +a27992 = 27992 +a27993 = 27993 +a27994 = 27994 +a27995 = 27995 +a27996 = 27996 +a27997 = 27997 +a27998 = 27998 +a27999 = 27999 +a28000 = 28000 +a28001 = 28001 +a28002 = 28002 +a28003 = 28003 +a28004 = 28004 +a28005 = 28005 +a28006 = 28006 +a28007 = 28007 +a28008 = 28008 +a28009 = 28009 +a28010 = 28010 +a28011 = 28011 +a28012 = 28012 +a28013 = 28013 +a28014 = 28014 +a28015 = 28015 +a28016 = 28016 +a28017 = 28017 +a28018 = 28018 +a28019 = 28019 +a28020 = 28020 +a28021 = 28021 +a28022 = 28022 +a28023 = 28023 +a28024 = 28024 +a28025 = 28025 +a28026 = 28026 +a28027 = 28027 +a28028 = 28028 +a28029 = 28029 +a28030 = 28030 +a28031 = 28031 +a28032 = 28032 +a28033 = 28033 +a28034 = 28034 +a28035 = 28035 +a28036 = 28036 +a28037 = 28037 +a28038 = 28038 +a28039 = 28039 +a28040 = 28040 +a28041 = 28041 +a28042 = 28042 +a28043 = 28043 +a28044 = 28044 +a28045 = 28045 +a28046 = 28046 +a28047 = 28047 +a28048 = 28048 +a28049 = 28049 +a28050 = 28050 +a28051 = 28051 +a28052 = 28052 +a28053 = 28053 +a28054 = 28054 +a28055 = 28055 +a28056 = 28056 +a28057 = 28057 +a28058 = 28058 +a28059 = 28059 +a28060 = 28060 +a28061 = 28061 +a28062 = 28062 +a28063 = 28063 +a28064 = 28064 +a28065 = 28065 +a28066 = 28066 +a28067 = 28067 +a28068 = 28068 +a28069 = 28069 +a28070 = 28070 +a28071 = 28071 +a28072 = 28072 +a28073 = 28073 +a28074 = 28074 +a28075 = 28075 +a28076 = 28076 +a28077 = 28077 +a28078 = 28078 +a28079 = 28079 +a28080 = 28080 +a28081 = 28081 +a28082 = 28082 +a28083 = 28083 +a28084 = 28084 +a28085 = 28085 +a28086 = 28086 +a28087 = 28087 +a28088 = 28088 +a28089 = 28089 +a28090 = 28090 +a28091 = 28091 +a28092 = 28092 +a28093 = 28093 +a28094 = 28094 +a28095 = 28095 +a28096 = 28096 +a28097 = 28097 +a28098 = 28098 +a28099 = 28099 +a28100 = 28100 +a28101 = 28101 +a28102 = 28102 +a28103 = 28103 +a28104 = 28104 +a28105 = 28105 +a28106 = 28106 +a28107 = 28107 +a28108 = 28108 +a28109 = 28109 +a28110 = 28110 +a28111 = 28111 +a28112 = 28112 +a28113 = 28113 +a28114 = 28114 +a28115 = 28115 +a28116 = 28116 +a28117 = 28117 +a28118 = 28118 +a28119 = 28119 +a28120 = 28120 +a28121 = 28121 +a28122 = 28122 +a28123 = 28123 +a28124 = 28124 +a28125 = 28125 +a28126 = 28126 +a28127 = 28127 +a28128 = 28128 +a28129 = 28129 +a28130 = 28130 +a28131 = 28131 +a28132 = 28132 +a28133 = 28133 +a28134 = 28134 +a28135 = 28135 +a28136 = 28136 +a28137 = 28137 +a28138 = 28138 +a28139 = 28139 +a28140 = 28140 +a28141 = 28141 +a28142 = 28142 +a28143 = 28143 +a28144 = 28144 +a28145 = 28145 +a28146 = 28146 +a28147 = 28147 +a28148 = 28148 +a28149 = 28149 +a28150 = 28150 +a28151 = 28151 +a28152 = 28152 +a28153 = 28153 +a28154 = 28154 +a28155 = 28155 +a28156 = 28156 +a28157 = 28157 +a28158 = 28158 +a28159 = 28159 +a28160 = 28160 +a28161 = 28161 +a28162 = 28162 +a28163 = 28163 +a28164 = 28164 +a28165 = 28165 +a28166 = 28166 +a28167 = 28167 +a28168 = 28168 +a28169 = 28169 +a28170 = 28170 +a28171 = 28171 +a28172 = 28172 +a28173 = 28173 +a28174 = 28174 +a28175 = 28175 +a28176 = 28176 +a28177 = 28177 +a28178 = 28178 +a28179 = 28179 +a28180 = 28180 +a28181 = 28181 +a28182 = 28182 +a28183 = 28183 +a28184 = 28184 +a28185 = 28185 +a28186 = 28186 +a28187 = 28187 +a28188 = 28188 +a28189 = 28189 +a28190 = 28190 +a28191 = 28191 +a28192 = 28192 +a28193 = 28193 +a28194 = 28194 +a28195 = 28195 +a28196 = 28196 +a28197 = 28197 +a28198 = 28198 +a28199 = 28199 +a28200 = 28200 +a28201 = 28201 +a28202 = 28202 +a28203 = 28203 +a28204 = 28204 +a28205 = 28205 +a28206 = 28206 +a28207 = 28207 +a28208 = 28208 +a28209 = 28209 +a28210 = 28210 +a28211 = 28211 +a28212 = 28212 +a28213 = 28213 +a28214 = 28214 +a28215 = 28215 +a28216 = 28216 +a28217 = 28217 +a28218 = 28218 +a28219 = 28219 +a28220 = 28220 +a28221 = 28221 +a28222 = 28222 +a28223 = 28223 +a28224 = 28224 +a28225 = 28225 +a28226 = 28226 +a28227 = 28227 +a28228 = 28228 +a28229 = 28229 +a28230 = 28230 +a28231 = 28231 +a28232 = 28232 +a28233 = 28233 +a28234 = 28234 +a28235 = 28235 +a28236 = 28236 +a28237 = 28237 +a28238 = 28238 +a28239 = 28239 +a28240 = 28240 +a28241 = 28241 +a28242 = 28242 +a28243 = 28243 +a28244 = 28244 +a28245 = 28245 +a28246 = 28246 +a28247 = 28247 +a28248 = 28248 +a28249 = 28249 +a28250 = 28250 +a28251 = 28251 +a28252 = 28252 +a28253 = 28253 +a28254 = 28254 +a28255 = 28255 +a28256 = 28256 +a28257 = 28257 +a28258 = 28258 +a28259 = 28259 +a28260 = 28260 +a28261 = 28261 +a28262 = 28262 +a28263 = 28263 +a28264 = 28264 +a28265 = 28265 +a28266 = 28266 +a28267 = 28267 +a28268 = 28268 +a28269 = 28269 +a28270 = 28270 +a28271 = 28271 +a28272 = 28272 +a28273 = 28273 +a28274 = 28274 +a28275 = 28275 +a28276 = 28276 +a28277 = 28277 +a28278 = 28278 +a28279 = 28279 +a28280 = 28280 +a28281 = 28281 +a28282 = 28282 +a28283 = 28283 +a28284 = 28284 +a28285 = 28285 +a28286 = 28286 +a28287 = 28287 +a28288 = 28288 +a28289 = 28289 +a28290 = 28290 +a28291 = 28291 +a28292 = 28292 +a28293 = 28293 +a28294 = 28294 +a28295 = 28295 +a28296 = 28296 +a28297 = 28297 +a28298 = 28298 +a28299 = 28299 +a28300 = 28300 +a28301 = 28301 +a28302 = 28302 +a28303 = 28303 +a28304 = 28304 +a28305 = 28305 +a28306 = 28306 +a28307 = 28307 +a28308 = 28308 +a28309 = 28309 +a28310 = 28310 +a28311 = 28311 +a28312 = 28312 +a28313 = 28313 +a28314 = 28314 +a28315 = 28315 +a28316 = 28316 +a28317 = 28317 +a28318 = 28318 +a28319 = 28319 +a28320 = 28320 +a28321 = 28321 +a28322 = 28322 +a28323 = 28323 +a28324 = 28324 +a28325 = 28325 +a28326 = 28326 +a28327 = 28327 +a28328 = 28328 +a28329 = 28329 +a28330 = 28330 +a28331 = 28331 +a28332 = 28332 +a28333 = 28333 +a28334 = 28334 +a28335 = 28335 +a28336 = 28336 +a28337 = 28337 +a28338 = 28338 +a28339 = 28339 +a28340 = 28340 +a28341 = 28341 +a28342 = 28342 +a28343 = 28343 +a28344 = 28344 +a28345 = 28345 +a28346 = 28346 +a28347 = 28347 +a28348 = 28348 +a28349 = 28349 +a28350 = 28350 +a28351 = 28351 +a28352 = 28352 +a28353 = 28353 +a28354 = 28354 +a28355 = 28355 +a28356 = 28356 +a28357 = 28357 +a28358 = 28358 +a28359 = 28359 +a28360 = 28360 +a28361 = 28361 +a28362 = 28362 +a28363 = 28363 +a28364 = 28364 +a28365 = 28365 +a28366 = 28366 +a28367 = 28367 +a28368 = 28368 +a28369 = 28369 +a28370 = 28370 +a28371 = 28371 +a28372 = 28372 +a28373 = 28373 +a28374 = 28374 +a28375 = 28375 +a28376 = 28376 +a28377 = 28377 +a28378 = 28378 +a28379 = 28379 +a28380 = 28380 +a28381 = 28381 +a28382 = 28382 +a28383 = 28383 +a28384 = 28384 +a28385 = 28385 +a28386 = 28386 +a28387 = 28387 +a28388 = 28388 +a28389 = 28389 +a28390 = 28390 +a28391 = 28391 +a28392 = 28392 +a28393 = 28393 +a28394 = 28394 +a28395 = 28395 +a28396 = 28396 +a28397 = 28397 +a28398 = 28398 +a28399 = 28399 +a28400 = 28400 +a28401 = 28401 +a28402 = 28402 +a28403 = 28403 +a28404 = 28404 +a28405 = 28405 +a28406 = 28406 +a28407 = 28407 +a28408 = 28408 +a28409 = 28409 +a28410 = 28410 +a28411 = 28411 +a28412 = 28412 +a28413 = 28413 +a28414 = 28414 +a28415 = 28415 +a28416 = 28416 +a28417 = 28417 +a28418 = 28418 +a28419 = 28419 +a28420 = 28420 +a28421 = 28421 +a28422 = 28422 +a28423 = 28423 +a28424 = 28424 +a28425 = 28425 +a28426 = 28426 +a28427 = 28427 +a28428 = 28428 +a28429 = 28429 +a28430 = 28430 +a28431 = 28431 +a28432 = 28432 +a28433 = 28433 +a28434 = 28434 +a28435 = 28435 +a28436 = 28436 +a28437 = 28437 +a28438 = 28438 +a28439 = 28439 +a28440 = 28440 +a28441 = 28441 +a28442 = 28442 +a28443 = 28443 +a28444 = 28444 +a28445 = 28445 +a28446 = 28446 +a28447 = 28447 +a28448 = 28448 +a28449 = 28449 +a28450 = 28450 +a28451 = 28451 +a28452 = 28452 +a28453 = 28453 +a28454 = 28454 +a28455 = 28455 +a28456 = 28456 +a28457 = 28457 +a28458 = 28458 +a28459 = 28459 +a28460 = 28460 +a28461 = 28461 +a28462 = 28462 +a28463 = 28463 +a28464 = 28464 +a28465 = 28465 +a28466 = 28466 +a28467 = 28467 +a28468 = 28468 +a28469 = 28469 +a28470 = 28470 +a28471 = 28471 +a28472 = 28472 +a28473 = 28473 +a28474 = 28474 +a28475 = 28475 +a28476 = 28476 +a28477 = 28477 +a28478 = 28478 +a28479 = 28479 +a28480 = 28480 +a28481 = 28481 +a28482 = 28482 +a28483 = 28483 +a28484 = 28484 +a28485 = 28485 +a28486 = 28486 +a28487 = 28487 +a28488 = 28488 +a28489 = 28489 +a28490 = 28490 +a28491 = 28491 +a28492 = 28492 +a28493 = 28493 +a28494 = 28494 +a28495 = 28495 +a28496 = 28496 +a28497 = 28497 +a28498 = 28498 +a28499 = 28499 +a28500 = 28500 +a28501 = 28501 +a28502 = 28502 +a28503 = 28503 +a28504 = 28504 +a28505 = 28505 +a28506 = 28506 +a28507 = 28507 +a28508 = 28508 +a28509 = 28509 +a28510 = 28510 +a28511 = 28511 +a28512 = 28512 +a28513 = 28513 +a28514 = 28514 +a28515 = 28515 +a28516 = 28516 +a28517 = 28517 +a28518 = 28518 +a28519 = 28519 +a28520 = 28520 +a28521 = 28521 +a28522 = 28522 +a28523 = 28523 +a28524 = 28524 +a28525 = 28525 +a28526 = 28526 +a28527 = 28527 +a28528 = 28528 +a28529 = 28529 +a28530 = 28530 +a28531 = 28531 +a28532 = 28532 +a28533 = 28533 +a28534 = 28534 +a28535 = 28535 +a28536 = 28536 +a28537 = 28537 +a28538 = 28538 +a28539 = 28539 +a28540 = 28540 +a28541 = 28541 +a28542 = 28542 +a28543 = 28543 +a28544 = 28544 +a28545 = 28545 +a28546 = 28546 +a28547 = 28547 +a28548 = 28548 +a28549 = 28549 +a28550 = 28550 +a28551 = 28551 +a28552 = 28552 +a28553 = 28553 +a28554 = 28554 +a28555 = 28555 +a28556 = 28556 +a28557 = 28557 +a28558 = 28558 +a28559 = 28559 +a28560 = 28560 +a28561 = 28561 +a28562 = 28562 +a28563 = 28563 +a28564 = 28564 +a28565 = 28565 +a28566 = 28566 +a28567 = 28567 +a28568 = 28568 +a28569 = 28569 +a28570 = 28570 +a28571 = 28571 +a28572 = 28572 +a28573 = 28573 +a28574 = 28574 +a28575 = 28575 +a28576 = 28576 +a28577 = 28577 +a28578 = 28578 +a28579 = 28579 +a28580 = 28580 +a28581 = 28581 +a28582 = 28582 +a28583 = 28583 +a28584 = 28584 +a28585 = 28585 +a28586 = 28586 +a28587 = 28587 +a28588 = 28588 +a28589 = 28589 +a28590 = 28590 +a28591 = 28591 +a28592 = 28592 +a28593 = 28593 +a28594 = 28594 +a28595 = 28595 +a28596 = 28596 +a28597 = 28597 +a28598 = 28598 +a28599 = 28599 +a28600 = 28600 +a28601 = 28601 +a28602 = 28602 +a28603 = 28603 +a28604 = 28604 +a28605 = 28605 +a28606 = 28606 +a28607 = 28607 +a28608 = 28608 +a28609 = 28609 +a28610 = 28610 +a28611 = 28611 +a28612 = 28612 +a28613 = 28613 +a28614 = 28614 +a28615 = 28615 +a28616 = 28616 +a28617 = 28617 +a28618 = 28618 +a28619 = 28619 +a28620 = 28620 +a28621 = 28621 +a28622 = 28622 +a28623 = 28623 +a28624 = 28624 +a28625 = 28625 +a28626 = 28626 +a28627 = 28627 +a28628 = 28628 +a28629 = 28629 +a28630 = 28630 +a28631 = 28631 +a28632 = 28632 +a28633 = 28633 +a28634 = 28634 +a28635 = 28635 +a28636 = 28636 +a28637 = 28637 +a28638 = 28638 +a28639 = 28639 +a28640 = 28640 +a28641 = 28641 +a28642 = 28642 +a28643 = 28643 +a28644 = 28644 +a28645 = 28645 +a28646 = 28646 +a28647 = 28647 +a28648 = 28648 +a28649 = 28649 +a28650 = 28650 +a28651 = 28651 +a28652 = 28652 +a28653 = 28653 +a28654 = 28654 +a28655 = 28655 +a28656 = 28656 +a28657 = 28657 +a28658 = 28658 +a28659 = 28659 +a28660 = 28660 +a28661 = 28661 +a28662 = 28662 +a28663 = 28663 +a28664 = 28664 +a28665 = 28665 +a28666 = 28666 +a28667 = 28667 +a28668 = 28668 +a28669 = 28669 +a28670 = 28670 +a28671 = 28671 +a28672 = 28672 +a28673 = 28673 +a28674 = 28674 +a28675 = 28675 +a28676 = 28676 +a28677 = 28677 +a28678 = 28678 +a28679 = 28679 +a28680 = 28680 +a28681 = 28681 +a28682 = 28682 +a28683 = 28683 +a28684 = 28684 +a28685 = 28685 +a28686 = 28686 +a28687 = 28687 +a28688 = 28688 +a28689 = 28689 +a28690 = 28690 +a28691 = 28691 +a28692 = 28692 +a28693 = 28693 +a28694 = 28694 +a28695 = 28695 +a28696 = 28696 +a28697 = 28697 +a28698 = 28698 +a28699 = 28699 +a28700 = 28700 +a28701 = 28701 +a28702 = 28702 +a28703 = 28703 +a28704 = 28704 +a28705 = 28705 +a28706 = 28706 +a28707 = 28707 +a28708 = 28708 +a28709 = 28709 +a28710 = 28710 +a28711 = 28711 +a28712 = 28712 +a28713 = 28713 +a28714 = 28714 +a28715 = 28715 +a28716 = 28716 +a28717 = 28717 +a28718 = 28718 +a28719 = 28719 +a28720 = 28720 +a28721 = 28721 +a28722 = 28722 +a28723 = 28723 +a28724 = 28724 +a28725 = 28725 +a28726 = 28726 +a28727 = 28727 +a28728 = 28728 +a28729 = 28729 +a28730 = 28730 +a28731 = 28731 +a28732 = 28732 +a28733 = 28733 +a28734 = 28734 +a28735 = 28735 +a28736 = 28736 +a28737 = 28737 +a28738 = 28738 +a28739 = 28739 +a28740 = 28740 +a28741 = 28741 +a28742 = 28742 +a28743 = 28743 +a28744 = 28744 +a28745 = 28745 +a28746 = 28746 +a28747 = 28747 +a28748 = 28748 +a28749 = 28749 +a28750 = 28750 +a28751 = 28751 +a28752 = 28752 +a28753 = 28753 +a28754 = 28754 +a28755 = 28755 +a28756 = 28756 +a28757 = 28757 +a28758 = 28758 +a28759 = 28759 +a28760 = 28760 +a28761 = 28761 +a28762 = 28762 +a28763 = 28763 +a28764 = 28764 +a28765 = 28765 +a28766 = 28766 +a28767 = 28767 +a28768 = 28768 +a28769 = 28769 +a28770 = 28770 +a28771 = 28771 +a28772 = 28772 +a28773 = 28773 +a28774 = 28774 +a28775 = 28775 +a28776 = 28776 +a28777 = 28777 +a28778 = 28778 +a28779 = 28779 +a28780 = 28780 +a28781 = 28781 +a28782 = 28782 +a28783 = 28783 +a28784 = 28784 +a28785 = 28785 +a28786 = 28786 +a28787 = 28787 +a28788 = 28788 +a28789 = 28789 +a28790 = 28790 +a28791 = 28791 +a28792 = 28792 +a28793 = 28793 +a28794 = 28794 +a28795 = 28795 +a28796 = 28796 +a28797 = 28797 +a28798 = 28798 +a28799 = 28799 +a28800 = 28800 +a28801 = 28801 +a28802 = 28802 +a28803 = 28803 +a28804 = 28804 +a28805 = 28805 +a28806 = 28806 +a28807 = 28807 +a28808 = 28808 +a28809 = 28809 +a28810 = 28810 +a28811 = 28811 +a28812 = 28812 +a28813 = 28813 +a28814 = 28814 +a28815 = 28815 +a28816 = 28816 +a28817 = 28817 +a28818 = 28818 +a28819 = 28819 +a28820 = 28820 +a28821 = 28821 +a28822 = 28822 +a28823 = 28823 +a28824 = 28824 +a28825 = 28825 +a28826 = 28826 +a28827 = 28827 +a28828 = 28828 +a28829 = 28829 +a28830 = 28830 +a28831 = 28831 +a28832 = 28832 +a28833 = 28833 +a28834 = 28834 +a28835 = 28835 +a28836 = 28836 +a28837 = 28837 +a28838 = 28838 +a28839 = 28839 +a28840 = 28840 +a28841 = 28841 +a28842 = 28842 +a28843 = 28843 +a28844 = 28844 +a28845 = 28845 +a28846 = 28846 +a28847 = 28847 +a28848 = 28848 +a28849 = 28849 +a28850 = 28850 +a28851 = 28851 +a28852 = 28852 +a28853 = 28853 +a28854 = 28854 +a28855 = 28855 +a28856 = 28856 +a28857 = 28857 +a28858 = 28858 +a28859 = 28859 +a28860 = 28860 +a28861 = 28861 +a28862 = 28862 +a28863 = 28863 +a28864 = 28864 +a28865 = 28865 +a28866 = 28866 +a28867 = 28867 +a28868 = 28868 +a28869 = 28869 +a28870 = 28870 +a28871 = 28871 +a28872 = 28872 +a28873 = 28873 +a28874 = 28874 +a28875 = 28875 +a28876 = 28876 +a28877 = 28877 +a28878 = 28878 +a28879 = 28879 +a28880 = 28880 +a28881 = 28881 +a28882 = 28882 +a28883 = 28883 +a28884 = 28884 +a28885 = 28885 +a28886 = 28886 +a28887 = 28887 +a28888 = 28888 +a28889 = 28889 +a28890 = 28890 +a28891 = 28891 +a28892 = 28892 +a28893 = 28893 +a28894 = 28894 +a28895 = 28895 +a28896 = 28896 +a28897 = 28897 +a28898 = 28898 +a28899 = 28899 +a28900 = 28900 +a28901 = 28901 +a28902 = 28902 +a28903 = 28903 +a28904 = 28904 +a28905 = 28905 +a28906 = 28906 +a28907 = 28907 +a28908 = 28908 +a28909 = 28909 +a28910 = 28910 +a28911 = 28911 +a28912 = 28912 +a28913 = 28913 +a28914 = 28914 +a28915 = 28915 +a28916 = 28916 +a28917 = 28917 +a28918 = 28918 +a28919 = 28919 +a28920 = 28920 +a28921 = 28921 +a28922 = 28922 +a28923 = 28923 +a28924 = 28924 +a28925 = 28925 +a28926 = 28926 +a28927 = 28927 +a28928 = 28928 +a28929 = 28929 +a28930 = 28930 +a28931 = 28931 +a28932 = 28932 +a28933 = 28933 +a28934 = 28934 +a28935 = 28935 +a28936 = 28936 +a28937 = 28937 +a28938 = 28938 +a28939 = 28939 +a28940 = 28940 +a28941 = 28941 +a28942 = 28942 +a28943 = 28943 +a28944 = 28944 +a28945 = 28945 +a28946 = 28946 +a28947 = 28947 +a28948 = 28948 +a28949 = 28949 +a28950 = 28950 +a28951 = 28951 +a28952 = 28952 +a28953 = 28953 +a28954 = 28954 +a28955 = 28955 +a28956 = 28956 +a28957 = 28957 +a28958 = 28958 +a28959 = 28959 +a28960 = 28960 +a28961 = 28961 +a28962 = 28962 +a28963 = 28963 +a28964 = 28964 +a28965 = 28965 +a28966 = 28966 +a28967 = 28967 +a28968 = 28968 +a28969 = 28969 +a28970 = 28970 +a28971 = 28971 +a28972 = 28972 +a28973 = 28973 +a28974 = 28974 +a28975 = 28975 +a28976 = 28976 +a28977 = 28977 +a28978 = 28978 +a28979 = 28979 +a28980 = 28980 +a28981 = 28981 +a28982 = 28982 +a28983 = 28983 +a28984 = 28984 +a28985 = 28985 +a28986 = 28986 +a28987 = 28987 +a28988 = 28988 +a28989 = 28989 +a28990 = 28990 +a28991 = 28991 +a28992 = 28992 +a28993 = 28993 +a28994 = 28994 +a28995 = 28995 +a28996 = 28996 +a28997 = 28997 +a28998 = 28998 +a28999 = 28999 +a29000 = 29000 +a29001 = 29001 +a29002 = 29002 +a29003 = 29003 +a29004 = 29004 +a29005 = 29005 +a29006 = 29006 +a29007 = 29007 +a29008 = 29008 +a29009 = 29009 +a29010 = 29010 +a29011 = 29011 +a29012 = 29012 +a29013 = 29013 +a29014 = 29014 +a29015 = 29015 +a29016 = 29016 +a29017 = 29017 +a29018 = 29018 +a29019 = 29019 +a29020 = 29020 +a29021 = 29021 +a29022 = 29022 +a29023 = 29023 +a29024 = 29024 +a29025 = 29025 +a29026 = 29026 +a29027 = 29027 +a29028 = 29028 +a29029 = 29029 +a29030 = 29030 +a29031 = 29031 +a29032 = 29032 +a29033 = 29033 +a29034 = 29034 +a29035 = 29035 +a29036 = 29036 +a29037 = 29037 +a29038 = 29038 +a29039 = 29039 +a29040 = 29040 +a29041 = 29041 +a29042 = 29042 +a29043 = 29043 +a29044 = 29044 +a29045 = 29045 +a29046 = 29046 +a29047 = 29047 +a29048 = 29048 +a29049 = 29049 +a29050 = 29050 +a29051 = 29051 +a29052 = 29052 +a29053 = 29053 +a29054 = 29054 +a29055 = 29055 +a29056 = 29056 +a29057 = 29057 +a29058 = 29058 +a29059 = 29059 +a29060 = 29060 +a29061 = 29061 +a29062 = 29062 +a29063 = 29063 +a29064 = 29064 +a29065 = 29065 +a29066 = 29066 +a29067 = 29067 +a29068 = 29068 +a29069 = 29069 +a29070 = 29070 +a29071 = 29071 +a29072 = 29072 +a29073 = 29073 +a29074 = 29074 +a29075 = 29075 +a29076 = 29076 +a29077 = 29077 +a29078 = 29078 +a29079 = 29079 +a29080 = 29080 +a29081 = 29081 +a29082 = 29082 +a29083 = 29083 +a29084 = 29084 +a29085 = 29085 +a29086 = 29086 +a29087 = 29087 +a29088 = 29088 +a29089 = 29089 +a29090 = 29090 +a29091 = 29091 +a29092 = 29092 +a29093 = 29093 +a29094 = 29094 +a29095 = 29095 +a29096 = 29096 +a29097 = 29097 +a29098 = 29098 +a29099 = 29099 +a29100 = 29100 +a29101 = 29101 +a29102 = 29102 +a29103 = 29103 +a29104 = 29104 +a29105 = 29105 +a29106 = 29106 +a29107 = 29107 +a29108 = 29108 +a29109 = 29109 +a29110 = 29110 +a29111 = 29111 +a29112 = 29112 +a29113 = 29113 +a29114 = 29114 +a29115 = 29115 +a29116 = 29116 +a29117 = 29117 +a29118 = 29118 +a29119 = 29119 +a29120 = 29120 +a29121 = 29121 +a29122 = 29122 +a29123 = 29123 +a29124 = 29124 +a29125 = 29125 +a29126 = 29126 +a29127 = 29127 +a29128 = 29128 +a29129 = 29129 +a29130 = 29130 +a29131 = 29131 +a29132 = 29132 +a29133 = 29133 +a29134 = 29134 +a29135 = 29135 +a29136 = 29136 +a29137 = 29137 +a29138 = 29138 +a29139 = 29139 +a29140 = 29140 +a29141 = 29141 +a29142 = 29142 +a29143 = 29143 +a29144 = 29144 +a29145 = 29145 +a29146 = 29146 +a29147 = 29147 +a29148 = 29148 +a29149 = 29149 +a29150 = 29150 +a29151 = 29151 +a29152 = 29152 +a29153 = 29153 +a29154 = 29154 +a29155 = 29155 +a29156 = 29156 +a29157 = 29157 +a29158 = 29158 +a29159 = 29159 +a29160 = 29160 +a29161 = 29161 +a29162 = 29162 +a29163 = 29163 +a29164 = 29164 +a29165 = 29165 +a29166 = 29166 +a29167 = 29167 +a29168 = 29168 +a29169 = 29169 +a29170 = 29170 +a29171 = 29171 +a29172 = 29172 +a29173 = 29173 +a29174 = 29174 +a29175 = 29175 +a29176 = 29176 +a29177 = 29177 +a29178 = 29178 +a29179 = 29179 +a29180 = 29180 +a29181 = 29181 +a29182 = 29182 +a29183 = 29183 +a29184 = 29184 +a29185 = 29185 +a29186 = 29186 +a29187 = 29187 +a29188 = 29188 +a29189 = 29189 +a29190 = 29190 +a29191 = 29191 +a29192 = 29192 +a29193 = 29193 +a29194 = 29194 +a29195 = 29195 +a29196 = 29196 +a29197 = 29197 +a29198 = 29198 +a29199 = 29199 +a29200 = 29200 +a29201 = 29201 +a29202 = 29202 +a29203 = 29203 +a29204 = 29204 +a29205 = 29205 +a29206 = 29206 +a29207 = 29207 +a29208 = 29208 +a29209 = 29209 +a29210 = 29210 +a29211 = 29211 +a29212 = 29212 +a29213 = 29213 +a29214 = 29214 +a29215 = 29215 +a29216 = 29216 +a29217 = 29217 +a29218 = 29218 +a29219 = 29219 +a29220 = 29220 +a29221 = 29221 +a29222 = 29222 +a29223 = 29223 +a29224 = 29224 +a29225 = 29225 +a29226 = 29226 +a29227 = 29227 +a29228 = 29228 +a29229 = 29229 +a29230 = 29230 +a29231 = 29231 +a29232 = 29232 +a29233 = 29233 +a29234 = 29234 +a29235 = 29235 +a29236 = 29236 +a29237 = 29237 +a29238 = 29238 +a29239 = 29239 +a29240 = 29240 +a29241 = 29241 +a29242 = 29242 +a29243 = 29243 +a29244 = 29244 +a29245 = 29245 +a29246 = 29246 +a29247 = 29247 +a29248 = 29248 +a29249 = 29249 +a29250 = 29250 +a29251 = 29251 +a29252 = 29252 +a29253 = 29253 +a29254 = 29254 +a29255 = 29255 +a29256 = 29256 +a29257 = 29257 +a29258 = 29258 +a29259 = 29259 +a29260 = 29260 +a29261 = 29261 +a29262 = 29262 +a29263 = 29263 +a29264 = 29264 +a29265 = 29265 +a29266 = 29266 +a29267 = 29267 +a29268 = 29268 +a29269 = 29269 +a29270 = 29270 +a29271 = 29271 +a29272 = 29272 +a29273 = 29273 +a29274 = 29274 +a29275 = 29275 +a29276 = 29276 +a29277 = 29277 +a29278 = 29278 +a29279 = 29279 +a29280 = 29280 +a29281 = 29281 +a29282 = 29282 +a29283 = 29283 +a29284 = 29284 +a29285 = 29285 +a29286 = 29286 +a29287 = 29287 +a29288 = 29288 +a29289 = 29289 +a29290 = 29290 +a29291 = 29291 +a29292 = 29292 +a29293 = 29293 +a29294 = 29294 +a29295 = 29295 +a29296 = 29296 +a29297 = 29297 +a29298 = 29298 +a29299 = 29299 +a29300 = 29300 +a29301 = 29301 +a29302 = 29302 +a29303 = 29303 +a29304 = 29304 +a29305 = 29305 +a29306 = 29306 +a29307 = 29307 +a29308 = 29308 +a29309 = 29309 +a29310 = 29310 +a29311 = 29311 +a29312 = 29312 +a29313 = 29313 +a29314 = 29314 +a29315 = 29315 +a29316 = 29316 +a29317 = 29317 +a29318 = 29318 +a29319 = 29319 +a29320 = 29320 +a29321 = 29321 +a29322 = 29322 +a29323 = 29323 +a29324 = 29324 +a29325 = 29325 +a29326 = 29326 +a29327 = 29327 +a29328 = 29328 +a29329 = 29329 +a29330 = 29330 +a29331 = 29331 +a29332 = 29332 +a29333 = 29333 +a29334 = 29334 +a29335 = 29335 +a29336 = 29336 +a29337 = 29337 +a29338 = 29338 +a29339 = 29339 +a29340 = 29340 +a29341 = 29341 +a29342 = 29342 +a29343 = 29343 +a29344 = 29344 +a29345 = 29345 +a29346 = 29346 +a29347 = 29347 +a29348 = 29348 +a29349 = 29349 +a29350 = 29350 +a29351 = 29351 +a29352 = 29352 +a29353 = 29353 +a29354 = 29354 +a29355 = 29355 +a29356 = 29356 +a29357 = 29357 +a29358 = 29358 +a29359 = 29359 +a29360 = 29360 +a29361 = 29361 +a29362 = 29362 +a29363 = 29363 +a29364 = 29364 +a29365 = 29365 +a29366 = 29366 +a29367 = 29367 +a29368 = 29368 +a29369 = 29369 +a29370 = 29370 +a29371 = 29371 +a29372 = 29372 +a29373 = 29373 +a29374 = 29374 +a29375 = 29375 +a29376 = 29376 +a29377 = 29377 +a29378 = 29378 +a29379 = 29379 +a29380 = 29380 +a29381 = 29381 +a29382 = 29382 +a29383 = 29383 +a29384 = 29384 +a29385 = 29385 +a29386 = 29386 +a29387 = 29387 +a29388 = 29388 +a29389 = 29389 +a29390 = 29390 +a29391 = 29391 +a29392 = 29392 +a29393 = 29393 +a29394 = 29394 +a29395 = 29395 +a29396 = 29396 +a29397 = 29397 +a29398 = 29398 +a29399 = 29399 +a29400 = 29400 +a29401 = 29401 +a29402 = 29402 +a29403 = 29403 +a29404 = 29404 +a29405 = 29405 +a29406 = 29406 +a29407 = 29407 +a29408 = 29408 +a29409 = 29409 +a29410 = 29410 +a29411 = 29411 +a29412 = 29412 +a29413 = 29413 +a29414 = 29414 +a29415 = 29415 +a29416 = 29416 +a29417 = 29417 +a29418 = 29418 +a29419 = 29419 +a29420 = 29420 +a29421 = 29421 +a29422 = 29422 +a29423 = 29423 +a29424 = 29424 +a29425 = 29425 +a29426 = 29426 +a29427 = 29427 +a29428 = 29428 +a29429 = 29429 +a29430 = 29430 +a29431 = 29431 +a29432 = 29432 +a29433 = 29433 +a29434 = 29434 +a29435 = 29435 +a29436 = 29436 +a29437 = 29437 +a29438 = 29438 +a29439 = 29439 +a29440 = 29440 +a29441 = 29441 +a29442 = 29442 +a29443 = 29443 +a29444 = 29444 +a29445 = 29445 +a29446 = 29446 +a29447 = 29447 +a29448 = 29448 +a29449 = 29449 +a29450 = 29450 +a29451 = 29451 +a29452 = 29452 +a29453 = 29453 +a29454 = 29454 +a29455 = 29455 +a29456 = 29456 +a29457 = 29457 +a29458 = 29458 +a29459 = 29459 +a29460 = 29460 +a29461 = 29461 +a29462 = 29462 +a29463 = 29463 +a29464 = 29464 +a29465 = 29465 +a29466 = 29466 +a29467 = 29467 +a29468 = 29468 +a29469 = 29469 +a29470 = 29470 +a29471 = 29471 +a29472 = 29472 +a29473 = 29473 +a29474 = 29474 +a29475 = 29475 +a29476 = 29476 +a29477 = 29477 +a29478 = 29478 +a29479 = 29479 +a29480 = 29480 +a29481 = 29481 +a29482 = 29482 +a29483 = 29483 +a29484 = 29484 +a29485 = 29485 +a29486 = 29486 +a29487 = 29487 +a29488 = 29488 +a29489 = 29489 +a29490 = 29490 +a29491 = 29491 +a29492 = 29492 +a29493 = 29493 +a29494 = 29494 +a29495 = 29495 +a29496 = 29496 +a29497 = 29497 +a29498 = 29498 +a29499 = 29499 +a29500 = 29500 +a29501 = 29501 +a29502 = 29502 +a29503 = 29503 +a29504 = 29504 +a29505 = 29505 +a29506 = 29506 +a29507 = 29507 +a29508 = 29508 +a29509 = 29509 +a29510 = 29510 +a29511 = 29511 +a29512 = 29512 +a29513 = 29513 +a29514 = 29514 +a29515 = 29515 +a29516 = 29516 +a29517 = 29517 +a29518 = 29518 +a29519 = 29519 +a29520 = 29520 +a29521 = 29521 +a29522 = 29522 +a29523 = 29523 +a29524 = 29524 +a29525 = 29525 +a29526 = 29526 +a29527 = 29527 +a29528 = 29528 +a29529 = 29529 +a29530 = 29530 +a29531 = 29531 +a29532 = 29532 +a29533 = 29533 +a29534 = 29534 +a29535 = 29535 +a29536 = 29536 +a29537 = 29537 +a29538 = 29538 +a29539 = 29539 +a29540 = 29540 +a29541 = 29541 +a29542 = 29542 +a29543 = 29543 +a29544 = 29544 +a29545 = 29545 +a29546 = 29546 +a29547 = 29547 +a29548 = 29548 +a29549 = 29549 +a29550 = 29550 +a29551 = 29551 +a29552 = 29552 +a29553 = 29553 +a29554 = 29554 +a29555 = 29555 +a29556 = 29556 +a29557 = 29557 +a29558 = 29558 +a29559 = 29559 +a29560 = 29560 +a29561 = 29561 +a29562 = 29562 +a29563 = 29563 +a29564 = 29564 +a29565 = 29565 +a29566 = 29566 +a29567 = 29567 +a29568 = 29568 +a29569 = 29569 +a29570 = 29570 +a29571 = 29571 +a29572 = 29572 +a29573 = 29573 +a29574 = 29574 +a29575 = 29575 +a29576 = 29576 +a29577 = 29577 +a29578 = 29578 +a29579 = 29579 +a29580 = 29580 +a29581 = 29581 +a29582 = 29582 +a29583 = 29583 +a29584 = 29584 +a29585 = 29585 +a29586 = 29586 +a29587 = 29587 +a29588 = 29588 +a29589 = 29589 +a29590 = 29590 +a29591 = 29591 +a29592 = 29592 +a29593 = 29593 +a29594 = 29594 +a29595 = 29595 +a29596 = 29596 +a29597 = 29597 +a29598 = 29598 +a29599 = 29599 +a29600 = 29600 +a29601 = 29601 +a29602 = 29602 +a29603 = 29603 +a29604 = 29604 +a29605 = 29605 +a29606 = 29606 +a29607 = 29607 +a29608 = 29608 +a29609 = 29609 +a29610 = 29610 +a29611 = 29611 +a29612 = 29612 +a29613 = 29613 +a29614 = 29614 +a29615 = 29615 +a29616 = 29616 +a29617 = 29617 +a29618 = 29618 +a29619 = 29619 +a29620 = 29620 +a29621 = 29621 +a29622 = 29622 +a29623 = 29623 +a29624 = 29624 +a29625 = 29625 +a29626 = 29626 +a29627 = 29627 +a29628 = 29628 +a29629 = 29629 +a29630 = 29630 +a29631 = 29631 +a29632 = 29632 +a29633 = 29633 +a29634 = 29634 +a29635 = 29635 +a29636 = 29636 +a29637 = 29637 +a29638 = 29638 +a29639 = 29639 +a29640 = 29640 +a29641 = 29641 +a29642 = 29642 +a29643 = 29643 +a29644 = 29644 +a29645 = 29645 +a29646 = 29646 +a29647 = 29647 +a29648 = 29648 +a29649 = 29649 +a29650 = 29650 +a29651 = 29651 +a29652 = 29652 +a29653 = 29653 +a29654 = 29654 +a29655 = 29655 +a29656 = 29656 +a29657 = 29657 +a29658 = 29658 +a29659 = 29659 +a29660 = 29660 +a29661 = 29661 +a29662 = 29662 +a29663 = 29663 +a29664 = 29664 +a29665 = 29665 +a29666 = 29666 +a29667 = 29667 +a29668 = 29668 +a29669 = 29669 +a29670 = 29670 +a29671 = 29671 +a29672 = 29672 +a29673 = 29673 +a29674 = 29674 +a29675 = 29675 +a29676 = 29676 +a29677 = 29677 +a29678 = 29678 +a29679 = 29679 +a29680 = 29680 +a29681 = 29681 +a29682 = 29682 +a29683 = 29683 +a29684 = 29684 +a29685 = 29685 +a29686 = 29686 +a29687 = 29687 +a29688 = 29688 +a29689 = 29689 +a29690 = 29690 +a29691 = 29691 +a29692 = 29692 +a29693 = 29693 +a29694 = 29694 +a29695 = 29695 +a29696 = 29696 +a29697 = 29697 +a29698 = 29698 +a29699 = 29699 +a29700 = 29700 +a29701 = 29701 +a29702 = 29702 +a29703 = 29703 +a29704 = 29704 +a29705 = 29705 +a29706 = 29706 +a29707 = 29707 +a29708 = 29708 +a29709 = 29709 +a29710 = 29710 +a29711 = 29711 +a29712 = 29712 +a29713 = 29713 +a29714 = 29714 +a29715 = 29715 +a29716 = 29716 +a29717 = 29717 +a29718 = 29718 +a29719 = 29719 +a29720 = 29720 +a29721 = 29721 +a29722 = 29722 +a29723 = 29723 +a29724 = 29724 +a29725 = 29725 +a29726 = 29726 +a29727 = 29727 +a29728 = 29728 +a29729 = 29729 +a29730 = 29730 +a29731 = 29731 +a29732 = 29732 +a29733 = 29733 +a29734 = 29734 +a29735 = 29735 +a29736 = 29736 +a29737 = 29737 +a29738 = 29738 +a29739 = 29739 +a29740 = 29740 +a29741 = 29741 +a29742 = 29742 +a29743 = 29743 +a29744 = 29744 +a29745 = 29745 +a29746 = 29746 +a29747 = 29747 +a29748 = 29748 +a29749 = 29749 +a29750 = 29750 +a29751 = 29751 +a29752 = 29752 +a29753 = 29753 +a29754 = 29754 +a29755 = 29755 +a29756 = 29756 +a29757 = 29757 +a29758 = 29758 +a29759 = 29759 +a29760 = 29760 +a29761 = 29761 +a29762 = 29762 +a29763 = 29763 +a29764 = 29764 +a29765 = 29765 +a29766 = 29766 +a29767 = 29767 +a29768 = 29768 +a29769 = 29769 +a29770 = 29770 +a29771 = 29771 +a29772 = 29772 +a29773 = 29773 +a29774 = 29774 +a29775 = 29775 +a29776 = 29776 +a29777 = 29777 +a29778 = 29778 +a29779 = 29779 +a29780 = 29780 +a29781 = 29781 +a29782 = 29782 +a29783 = 29783 +a29784 = 29784 +a29785 = 29785 +a29786 = 29786 +a29787 = 29787 +a29788 = 29788 +a29789 = 29789 +a29790 = 29790 +a29791 = 29791 +a29792 = 29792 +a29793 = 29793 +a29794 = 29794 +a29795 = 29795 +a29796 = 29796 +a29797 = 29797 +a29798 = 29798 +a29799 = 29799 +a29800 = 29800 +a29801 = 29801 +a29802 = 29802 +a29803 = 29803 +a29804 = 29804 +a29805 = 29805 +a29806 = 29806 +a29807 = 29807 +a29808 = 29808 +a29809 = 29809 +a29810 = 29810 +a29811 = 29811 +a29812 = 29812 +a29813 = 29813 +a29814 = 29814 +a29815 = 29815 +a29816 = 29816 +a29817 = 29817 +a29818 = 29818 +a29819 = 29819 +a29820 = 29820 +a29821 = 29821 +a29822 = 29822 +a29823 = 29823 +a29824 = 29824 +a29825 = 29825 +a29826 = 29826 +a29827 = 29827 +a29828 = 29828 +a29829 = 29829 +a29830 = 29830 +a29831 = 29831 +a29832 = 29832 +a29833 = 29833 +a29834 = 29834 +a29835 = 29835 +a29836 = 29836 +a29837 = 29837 +a29838 = 29838 +a29839 = 29839 +a29840 = 29840 +a29841 = 29841 +a29842 = 29842 +a29843 = 29843 +a29844 = 29844 +a29845 = 29845 +a29846 = 29846 +a29847 = 29847 +a29848 = 29848 +a29849 = 29849 +a29850 = 29850 +a29851 = 29851 +a29852 = 29852 +a29853 = 29853 +a29854 = 29854 +a29855 = 29855 +a29856 = 29856 +a29857 = 29857 +a29858 = 29858 +a29859 = 29859 +a29860 = 29860 +a29861 = 29861 +a29862 = 29862 +a29863 = 29863 +a29864 = 29864 +a29865 = 29865 +a29866 = 29866 +a29867 = 29867 +a29868 = 29868 +a29869 = 29869 +a29870 = 29870 +a29871 = 29871 +a29872 = 29872 +a29873 = 29873 +a29874 = 29874 +a29875 = 29875 +a29876 = 29876 +a29877 = 29877 +a29878 = 29878 +a29879 = 29879 +a29880 = 29880 +a29881 = 29881 +a29882 = 29882 +a29883 = 29883 +a29884 = 29884 +a29885 = 29885 +a29886 = 29886 +a29887 = 29887 +a29888 = 29888 +a29889 = 29889 +a29890 = 29890 +a29891 = 29891 +a29892 = 29892 +a29893 = 29893 +a29894 = 29894 +a29895 = 29895 +a29896 = 29896 +a29897 = 29897 +a29898 = 29898 +a29899 = 29899 +a29900 = 29900 +a29901 = 29901 +a29902 = 29902 +a29903 = 29903 +a29904 = 29904 +a29905 = 29905 +a29906 = 29906 +a29907 = 29907 +a29908 = 29908 +a29909 = 29909 +a29910 = 29910 +a29911 = 29911 +a29912 = 29912 +a29913 = 29913 +a29914 = 29914 +a29915 = 29915 +a29916 = 29916 +a29917 = 29917 +a29918 = 29918 +a29919 = 29919 +a29920 = 29920 +a29921 = 29921 +a29922 = 29922 +a29923 = 29923 +a29924 = 29924 +a29925 = 29925 +a29926 = 29926 +a29927 = 29927 +a29928 = 29928 +a29929 = 29929 +a29930 = 29930 +a29931 = 29931 +a29932 = 29932 +a29933 = 29933 +a29934 = 29934 +a29935 = 29935 +a29936 = 29936 +a29937 = 29937 +a29938 = 29938 +a29939 = 29939 +a29940 = 29940 +a29941 = 29941 +a29942 = 29942 +a29943 = 29943 +a29944 = 29944 +a29945 = 29945 +a29946 = 29946 +a29947 = 29947 +a29948 = 29948 +a29949 = 29949 +a29950 = 29950 +a29951 = 29951 +a29952 = 29952 +a29953 = 29953 +a29954 = 29954 +a29955 = 29955 +a29956 = 29956 +a29957 = 29957 +a29958 = 29958 +a29959 = 29959 +a29960 = 29960 +a29961 = 29961 +a29962 = 29962 +a29963 = 29963 +a29964 = 29964 +a29965 = 29965 +a29966 = 29966 +a29967 = 29967 +a29968 = 29968 +a29969 = 29969 +a29970 = 29970 +a29971 = 29971 +a29972 = 29972 +a29973 = 29973 +a29974 = 29974 +a29975 = 29975 +a29976 = 29976 +a29977 = 29977 +a29978 = 29978 +a29979 = 29979 +a29980 = 29980 +a29981 = 29981 +a29982 = 29982 +a29983 = 29983 +a29984 = 29984 +a29985 = 29985 +a29986 = 29986 +a29987 = 29987 +a29988 = 29988 +a29989 = 29989 +a29990 = 29990 +a29991 = 29991 +a29992 = 29992 +a29993 = 29993 +a29994 = 29994 +a29995 = 29995 +a29996 = 29996 +a29997 = 29997 +a29998 = 29998 +a29999 = 29999 +a30000 = 30000 +a30001 = 30001 +a30002 = 30002 +a30003 = 30003 +a30004 = 30004 +a30005 = 30005 +a30006 = 30006 +a30007 = 30007 +a30008 = 30008 +a30009 = 30009 +a30010 = 30010 +a30011 = 30011 +a30012 = 30012 +a30013 = 30013 +a30014 = 30014 +a30015 = 30015 +a30016 = 30016 +a30017 = 30017 +a30018 = 30018 +a30019 = 30019 +a30020 = 30020 +a30021 = 30021 +a30022 = 30022 +a30023 = 30023 +a30024 = 30024 +a30025 = 30025 +a30026 = 30026 +a30027 = 30027 +a30028 = 30028 +a30029 = 30029 +a30030 = 30030 +a30031 = 30031 +a30032 = 30032 +a30033 = 30033 +a30034 = 30034 +a30035 = 30035 +a30036 = 30036 +a30037 = 30037 +a30038 = 30038 +a30039 = 30039 +a30040 = 30040 +a30041 = 30041 +a30042 = 30042 +a30043 = 30043 +a30044 = 30044 +a30045 = 30045 +a30046 = 30046 +a30047 = 30047 +a30048 = 30048 +a30049 = 30049 +a30050 = 30050 +a30051 = 30051 +a30052 = 30052 +a30053 = 30053 +a30054 = 30054 +a30055 = 30055 +a30056 = 30056 +a30057 = 30057 +a30058 = 30058 +a30059 = 30059 +a30060 = 30060 +a30061 = 30061 +a30062 = 30062 +a30063 = 30063 +a30064 = 30064 +a30065 = 30065 +a30066 = 30066 +a30067 = 30067 +a30068 = 30068 +a30069 = 30069 +a30070 = 30070 +a30071 = 30071 +a30072 = 30072 +a30073 = 30073 +a30074 = 30074 +a30075 = 30075 +a30076 = 30076 +a30077 = 30077 +a30078 = 30078 +a30079 = 30079 +a30080 = 30080 +a30081 = 30081 +a30082 = 30082 +a30083 = 30083 +a30084 = 30084 +a30085 = 30085 +a30086 = 30086 +a30087 = 30087 +a30088 = 30088 +a30089 = 30089 +a30090 = 30090 +a30091 = 30091 +a30092 = 30092 +a30093 = 30093 +a30094 = 30094 +a30095 = 30095 +a30096 = 30096 +a30097 = 30097 +a30098 = 30098 +a30099 = 30099 +a30100 = 30100 +a30101 = 30101 +a30102 = 30102 +a30103 = 30103 +a30104 = 30104 +a30105 = 30105 +a30106 = 30106 +a30107 = 30107 +a30108 = 30108 +a30109 = 30109 +a30110 = 30110 +a30111 = 30111 +a30112 = 30112 +a30113 = 30113 +a30114 = 30114 +a30115 = 30115 +a30116 = 30116 +a30117 = 30117 +a30118 = 30118 +a30119 = 30119 +a30120 = 30120 +a30121 = 30121 +a30122 = 30122 +a30123 = 30123 +a30124 = 30124 +a30125 = 30125 +a30126 = 30126 +a30127 = 30127 +a30128 = 30128 +a30129 = 30129 +a30130 = 30130 +a30131 = 30131 +a30132 = 30132 +a30133 = 30133 +a30134 = 30134 +a30135 = 30135 +a30136 = 30136 +a30137 = 30137 +a30138 = 30138 +a30139 = 30139 +a30140 = 30140 +a30141 = 30141 +a30142 = 30142 +a30143 = 30143 +a30144 = 30144 +a30145 = 30145 +a30146 = 30146 +a30147 = 30147 +a30148 = 30148 +a30149 = 30149 +a30150 = 30150 +a30151 = 30151 +a30152 = 30152 +a30153 = 30153 +a30154 = 30154 +a30155 = 30155 +a30156 = 30156 +a30157 = 30157 +a30158 = 30158 +a30159 = 30159 +a30160 = 30160 +a30161 = 30161 +a30162 = 30162 +a30163 = 30163 +a30164 = 30164 +a30165 = 30165 +a30166 = 30166 +a30167 = 30167 +a30168 = 30168 +a30169 = 30169 +a30170 = 30170 +a30171 = 30171 +a30172 = 30172 +a30173 = 30173 +a30174 = 30174 +a30175 = 30175 +a30176 = 30176 +a30177 = 30177 +a30178 = 30178 +a30179 = 30179 +a30180 = 30180 +a30181 = 30181 +a30182 = 30182 +a30183 = 30183 +a30184 = 30184 +a30185 = 30185 +a30186 = 30186 +a30187 = 30187 +a30188 = 30188 +a30189 = 30189 +a30190 = 30190 +a30191 = 30191 +a30192 = 30192 +a30193 = 30193 +a30194 = 30194 +a30195 = 30195 +a30196 = 30196 +a30197 = 30197 +a30198 = 30198 +a30199 = 30199 +a30200 = 30200 +a30201 = 30201 +a30202 = 30202 +a30203 = 30203 +a30204 = 30204 +a30205 = 30205 +a30206 = 30206 +a30207 = 30207 +a30208 = 30208 +a30209 = 30209 +a30210 = 30210 +a30211 = 30211 +a30212 = 30212 +a30213 = 30213 +a30214 = 30214 +a30215 = 30215 +a30216 = 30216 +a30217 = 30217 +a30218 = 30218 +a30219 = 30219 +a30220 = 30220 +a30221 = 30221 +a30222 = 30222 +a30223 = 30223 +a30224 = 30224 +a30225 = 30225 +a30226 = 30226 +a30227 = 30227 +a30228 = 30228 +a30229 = 30229 +a30230 = 30230 +a30231 = 30231 +a30232 = 30232 +a30233 = 30233 +a30234 = 30234 +a30235 = 30235 +a30236 = 30236 +a30237 = 30237 +a30238 = 30238 +a30239 = 30239 +a30240 = 30240 +a30241 = 30241 +a30242 = 30242 +a30243 = 30243 +a30244 = 30244 +a30245 = 30245 +a30246 = 30246 +a30247 = 30247 +a30248 = 30248 +a30249 = 30249 +a30250 = 30250 +a30251 = 30251 +a30252 = 30252 +a30253 = 30253 +a30254 = 30254 +a30255 = 30255 +a30256 = 30256 +a30257 = 30257 +a30258 = 30258 +a30259 = 30259 +a30260 = 30260 +a30261 = 30261 +a30262 = 30262 +a30263 = 30263 +a30264 = 30264 +a30265 = 30265 +a30266 = 30266 +a30267 = 30267 +a30268 = 30268 +a30269 = 30269 +a30270 = 30270 +a30271 = 30271 +a30272 = 30272 +a30273 = 30273 +a30274 = 30274 +a30275 = 30275 +a30276 = 30276 +a30277 = 30277 +a30278 = 30278 +a30279 = 30279 +a30280 = 30280 +a30281 = 30281 +a30282 = 30282 +a30283 = 30283 +a30284 = 30284 +a30285 = 30285 +a30286 = 30286 +a30287 = 30287 +a30288 = 30288 +a30289 = 30289 +a30290 = 30290 +a30291 = 30291 +a30292 = 30292 +a30293 = 30293 +a30294 = 30294 +a30295 = 30295 +a30296 = 30296 +a30297 = 30297 +a30298 = 30298 +a30299 = 30299 +a30300 = 30300 +a30301 = 30301 +a30302 = 30302 +a30303 = 30303 +a30304 = 30304 +a30305 = 30305 +a30306 = 30306 +a30307 = 30307 +a30308 = 30308 +a30309 = 30309 +a30310 = 30310 +a30311 = 30311 +a30312 = 30312 +a30313 = 30313 +a30314 = 30314 +a30315 = 30315 +a30316 = 30316 +a30317 = 30317 +a30318 = 30318 +a30319 = 30319 +a30320 = 30320 +a30321 = 30321 +a30322 = 30322 +a30323 = 30323 +a30324 = 30324 +a30325 = 30325 +a30326 = 30326 +a30327 = 30327 +a30328 = 30328 +a30329 = 30329 +a30330 = 30330 +a30331 = 30331 +a30332 = 30332 +a30333 = 30333 +a30334 = 30334 +a30335 = 30335 +a30336 = 30336 +a30337 = 30337 +a30338 = 30338 +a30339 = 30339 +a30340 = 30340 +a30341 = 30341 +a30342 = 30342 +a30343 = 30343 +a30344 = 30344 +a30345 = 30345 +a30346 = 30346 +a30347 = 30347 +a30348 = 30348 +a30349 = 30349 +a30350 = 30350 +a30351 = 30351 +a30352 = 30352 +a30353 = 30353 +a30354 = 30354 +a30355 = 30355 +a30356 = 30356 +a30357 = 30357 +a30358 = 30358 +a30359 = 30359 +a30360 = 30360 +a30361 = 30361 +a30362 = 30362 +a30363 = 30363 +a30364 = 30364 +a30365 = 30365 +a30366 = 30366 +a30367 = 30367 +a30368 = 30368 +a30369 = 30369 +a30370 = 30370 +a30371 = 30371 +a30372 = 30372 +a30373 = 30373 +a30374 = 30374 +a30375 = 30375 +a30376 = 30376 +a30377 = 30377 +a30378 = 30378 +a30379 = 30379 +a30380 = 30380 +a30381 = 30381 +a30382 = 30382 +a30383 = 30383 +a30384 = 30384 +a30385 = 30385 +a30386 = 30386 +a30387 = 30387 +a30388 = 30388 +a30389 = 30389 +a30390 = 30390 +a30391 = 30391 +a30392 = 30392 +a30393 = 30393 +a30394 = 30394 +a30395 = 30395 +a30396 = 30396 +a30397 = 30397 +a30398 = 30398 +a30399 = 30399 +a30400 = 30400 +a30401 = 30401 +a30402 = 30402 +a30403 = 30403 +a30404 = 30404 +a30405 = 30405 +a30406 = 30406 +a30407 = 30407 +a30408 = 30408 +a30409 = 30409 +a30410 = 30410 +a30411 = 30411 +a30412 = 30412 +a30413 = 30413 +a30414 = 30414 +a30415 = 30415 +a30416 = 30416 +a30417 = 30417 +a30418 = 30418 +a30419 = 30419 +a30420 = 30420 +a30421 = 30421 +a30422 = 30422 +a30423 = 30423 +a30424 = 30424 +a30425 = 30425 +a30426 = 30426 +a30427 = 30427 +a30428 = 30428 +a30429 = 30429 +a30430 = 30430 +a30431 = 30431 +a30432 = 30432 +a30433 = 30433 +a30434 = 30434 +a30435 = 30435 +a30436 = 30436 +a30437 = 30437 +a30438 = 30438 +a30439 = 30439 +a30440 = 30440 +a30441 = 30441 +a30442 = 30442 +a30443 = 30443 +a30444 = 30444 +a30445 = 30445 +a30446 = 30446 +a30447 = 30447 +a30448 = 30448 +a30449 = 30449 +a30450 = 30450 +a30451 = 30451 +a30452 = 30452 +a30453 = 30453 +a30454 = 30454 +a30455 = 30455 +a30456 = 30456 +a30457 = 30457 +a30458 = 30458 +a30459 = 30459 +a30460 = 30460 +a30461 = 30461 +a30462 = 30462 +a30463 = 30463 +a30464 = 30464 +a30465 = 30465 +a30466 = 30466 +a30467 = 30467 +a30468 = 30468 +a30469 = 30469 +a30470 = 30470 +a30471 = 30471 +a30472 = 30472 +a30473 = 30473 +a30474 = 30474 +a30475 = 30475 +a30476 = 30476 +a30477 = 30477 +a30478 = 30478 +a30479 = 30479 +a30480 = 30480 +a30481 = 30481 +a30482 = 30482 +a30483 = 30483 +a30484 = 30484 +a30485 = 30485 +a30486 = 30486 +a30487 = 30487 +a30488 = 30488 +a30489 = 30489 +a30490 = 30490 +a30491 = 30491 +a30492 = 30492 +a30493 = 30493 +a30494 = 30494 +a30495 = 30495 +a30496 = 30496 +a30497 = 30497 +a30498 = 30498 +a30499 = 30499 +a30500 = 30500 +a30501 = 30501 +a30502 = 30502 +a30503 = 30503 +a30504 = 30504 +a30505 = 30505 +a30506 = 30506 +a30507 = 30507 +a30508 = 30508 +a30509 = 30509 +a30510 = 30510 +a30511 = 30511 +a30512 = 30512 +a30513 = 30513 +a30514 = 30514 +a30515 = 30515 +a30516 = 30516 +a30517 = 30517 +a30518 = 30518 +a30519 = 30519 +a30520 = 30520 +a30521 = 30521 +a30522 = 30522 +a30523 = 30523 +a30524 = 30524 +a30525 = 30525 +a30526 = 30526 +a30527 = 30527 +a30528 = 30528 +a30529 = 30529 +a30530 = 30530 +a30531 = 30531 +a30532 = 30532 +a30533 = 30533 +a30534 = 30534 +a30535 = 30535 +a30536 = 30536 +a30537 = 30537 +a30538 = 30538 +a30539 = 30539 +a30540 = 30540 +a30541 = 30541 +a30542 = 30542 +a30543 = 30543 +a30544 = 30544 +a30545 = 30545 +a30546 = 30546 +a30547 = 30547 +a30548 = 30548 +a30549 = 30549 +a30550 = 30550 +a30551 = 30551 +a30552 = 30552 +a30553 = 30553 +a30554 = 30554 +a30555 = 30555 +a30556 = 30556 +a30557 = 30557 +a30558 = 30558 +a30559 = 30559 +a30560 = 30560 +a30561 = 30561 +a30562 = 30562 +a30563 = 30563 +a30564 = 30564 +a30565 = 30565 +a30566 = 30566 +a30567 = 30567 +a30568 = 30568 +a30569 = 30569 +a30570 = 30570 +a30571 = 30571 +a30572 = 30572 +a30573 = 30573 +a30574 = 30574 +a30575 = 30575 +a30576 = 30576 +a30577 = 30577 +a30578 = 30578 +a30579 = 30579 +a30580 = 30580 +a30581 = 30581 +a30582 = 30582 +a30583 = 30583 +a30584 = 30584 +a30585 = 30585 +a30586 = 30586 +a30587 = 30587 +a30588 = 30588 +a30589 = 30589 +a30590 = 30590 +a30591 = 30591 +a30592 = 30592 +a30593 = 30593 +a30594 = 30594 +a30595 = 30595 +a30596 = 30596 +a30597 = 30597 +a30598 = 30598 +a30599 = 30599 +a30600 = 30600 +a30601 = 30601 +a30602 = 30602 +a30603 = 30603 +a30604 = 30604 +a30605 = 30605 +a30606 = 30606 +a30607 = 30607 +a30608 = 30608 +a30609 = 30609 +a30610 = 30610 +a30611 = 30611 +a30612 = 30612 +a30613 = 30613 +a30614 = 30614 +a30615 = 30615 +a30616 = 30616 +a30617 = 30617 +a30618 = 30618 +a30619 = 30619 +a30620 = 30620 +a30621 = 30621 +a30622 = 30622 +a30623 = 30623 +a30624 = 30624 +a30625 = 30625 +a30626 = 30626 +a30627 = 30627 +a30628 = 30628 +a30629 = 30629 +a30630 = 30630 +a30631 = 30631 +a30632 = 30632 +a30633 = 30633 +a30634 = 30634 +a30635 = 30635 +a30636 = 30636 +a30637 = 30637 +a30638 = 30638 +a30639 = 30639 +a30640 = 30640 +a30641 = 30641 +a30642 = 30642 +a30643 = 30643 +a30644 = 30644 +a30645 = 30645 +a30646 = 30646 +a30647 = 30647 +a30648 = 30648 +a30649 = 30649 +a30650 = 30650 +a30651 = 30651 +a30652 = 30652 +a30653 = 30653 +a30654 = 30654 +a30655 = 30655 +a30656 = 30656 +a30657 = 30657 +a30658 = 30658 +a30659 = 30659 +a30660 = 30660 +a30661 = 30661 +a30662 = 30662 +a30663 = 30663 +a30664 = 30664 +a30665 = 30665 +a30666 = 30666 +a30667 = 30667 +a30668 = 30668 +a30669 = 30669 +a30670 = 30670 +a30671 = 30671 +a30672 = 30672 +a30673 = 30673 +a30674 = 30674 +a30675 = 30675 +a30676 = 30676 +a30677 = 30677 +a30678 = 30678 +a30679 = 30679 +a30680 = 30680 +a30681 = 30681 +a30682 = 30682 +a30683 = 30683 +a30684 = 30684 +a30685 = 30685 +a30686 = 30686 +a30687 = 30687 +a30688 = 30688 +a30689 = 30689 +a30690 = 30690 +a30691 = 30691 +a30692 = 30692 +a30693 = 30693 +a30694 = 30694 +a30695 = 30695 +a30696 = 30696 +a30697 = 30697 +a30698 = 30698 +a30699 = 30699 +a30700 = 30700 +a30701 = 30701 +a30702 = 30702 +a30703 = 30703 +a30704 = 30704 +a30705 = 30705 +a30706 = 30706 +a30707 = 30707 +a30708 = 30708 +a30709 = 30709 +a30710 = 30710 +a30711 = 30711 +a30712 = 30712 +a30713 = 30713 +a30714 = 30714 +a30715 = 30715 +a30716 = 30716 +a30717 = 30717 +a30718 = 30718 +a30719 = 30719 +a30720 = 30720 +a30721 = 30721 +a30722 = 30722 +a30723 = 30723 +a30724 = 30724 +a30725 = 30725 +a30726 = 30726 +a30727 = 30727 +a30728 = 30728 +a30729 = 30729 +a30730 = 30730 +a30731 = 30731 +a30732 = 30732 +a30733 = 30733 +a30734 = 30734 +a30735 = 30735 +a30736 = 30736 +a30737 = 30737 +a30738 = 30738 +a30739 = 30739 +a30740 = 30740 +a30741 = 30741 +a30742 = 30742 +a30743 = 30743 +a30744 = 30744 +a30745 = 30745 +a30746 = 30746 +a30747 = 30747 +a30748 = 30748 +a30749 = 30749 +a30750 = 30750 +a30751 = 30751 +a30752 = 30752 +a30753 = 30753 +a30754 = 30754 +a30755 = 30755 +a30756 = 30756 +a30757 = 30757 +a30758 = 30758 +a30759 = 30759 +a30760 = 30760 +a30761 = 30761 +a30762 = 30762 +a30763 = 30763 +a30764 = 30764 +a30765 = 30765 +a30766 = 30766 +a30767 = 30767 +a30768 = 30768 +a30769 = 30769 +a30770 = 30770 +a30771 = 30771 +a30772 = 30772 +a30773 = 30773 +a30774 = 30774 +a30775 = 30775 +a30776 = 30776 +a30777 = 30777 +a30778 = 30778 +a30779 = 30779 +a30780 = 30780 +a30781 = 30781 +a30782 = 30782 +a30783 = 30783 +a30784 = 30784 +a30785 = 30785 +a30786 = 30786 +a30787 = 30787 +a30788 = 30788 +a30789 = 30789 +a30790 = 30790 +a30791 = 30791 +a30792 = 30792 +a30793 = 30793 +a30794 = 30794 +a30795 = 30795 +a30796 = 30796 +a30797 = 30797 +a30798 = 30798 +a30799 = 30799 +a30800 = 30800 +a30801 = 30801 +a30802 = 30802 +a30803 = 30803 +a30804 = 30804 +a30805 = 30805 +a30806 = 30806 +a30807 = 30807 +a30808 = 30808 +a30809 = 30809 +a30810 = 30810 +a30811 = 30811 +a30812 = 30812 +a30813 = 30813 +a30814 = 30814 +a30815 = 30815 +a30816 = 30816 +a30817 = 30817 +a30818 = 30818 +a30819 = 30819 +a30820 = 30820 +a30821 = 30821 +a30822 = 30822 +a30823 = 30823 +a30824 = 30824 +a30825 = 30825 +a30826 = 30826 +a30827 = 30827 +a30828 = 30828 +a30829 = 30829 +a30830 = 30830 +a30831 = 30831 +a30832 = 30832 +a30833 = 30833 +a30834 = 30834 +a30835 = 30835 +a30836 = 30836 +a30837 = 30837 +a30838 = 30838 +a30839 = 30839 +a30840 = 30840 +a30841 = 30841 +a30842 = 30842 +a30843 = 30843 +a30844 = 30844 +a30845 = 30845 +a30846 = 30846 +a30847 = 30847 +a30848 = 30848 +a30849 = 30849 +a30850 = 30850 +a30851 = 30851 +a30852 = 30852 +a30853 = 30853 +a30854 = 30854 +a30855 = 30855 +a30856 = 30856 +a30857 = 30857 +a30858 = 30858 +a30859 = 30859 +a30860 = 30860 +a30861 = 30861 +a30862 = 30862 +a30863 = 30863 +a30864 = 30864 +a30865 = 30865 +a30866 = 30866 +a30867 = 30867 +a30868 = 30868 +a30869 = 30869 +a30870 = 30870 +a30871 = 30871 +a30872 = 30872 +a30873 = 30873 +a30874 = 30874 +a30875 = 30875 +a30876 = 30876 +a30877 = 30877 +a30878 = 30878 +a30879 = 30879 +a30880 = 30880 +a30881 = 30881 +a30882 = 30882 +a30883 = 30883 +a30884 = 30884 +a30885 = 30885 +a30886 = 30886 +a30887 = 30887 +a30888 = 30888 +a30889 = 30889 +a30890 = 30890 +a30891 = 30891 +a30892 = 30892 +a30893 = 30893 +a30894 = 30894 +a30895 = 30895 +a30896 = 30896 +a30897 = 30897 +a30898 = 30898 +a30899 = 30899 +a30900 = 30900 +a30901 = 30901 +a30902 = 30902 +a30903 = 30903 +a30904 = 30904 +a30905 = 30905 +a30906 = 30906 +a30907 = 30907 +a30908 = 30908 +a30909 = 30909 +a30910 = 30910 +a30911 = 30911 +a30912 = 30912 +a30913 = 30913 +a30914 = 30914 +a30915 = 30915 +a30916 = 30916 +a30917 = 30917 +a30918 = 30918 +a30919 = 30919 +a30920 = 30920 +a30921 = 30921 +a30922 = 30922 +a30923 = 30923 +a30924 = 30924 +a30925 = 30925 +a30926 = 30926 +a30927 = 30927 +a30928 = 30928 +a30929 = 30929 +a30930 = 30930 +a30931 = 30931 +a30932 = 30932 +a30933 = 30933 +a30934 = 30934 +a30935 = 30935 +a30936 = 30936 +a30937 = 30937 +a30938 = 30938 +a30939 = 30939 +a30940 = 30940 +a30941 = 30941 +a30942 = 30942 +a30943 = 30943 +a30944 = 30944 +a30945 = 30945 +a30946 = 30946 +a30947 = 30947 +a30948 = 30948 +a30949 = 30949 +a30950 = 30950 +a30951 = 30951 +a30952 = 30952 +a30953 = 30953 +a30954 = 30954 +a30955 = 30955 +a30956 = 30956 +a30957 = 30957 +a30958 = 30958 +a30959 = 30959 +a30960 = 30960 +a30961 = 30961 +a30962 = 30962 +a30963 = 30963 +a30964 = 30964 +a30965 = 30965 +a30966 = 30966 +a30967 = 30967 +a30968 = 30968 +a30969 = 30969 +a30970 = 30970 +a30971 = 30971 +a30972 = 30972 +a30973 = 30973 +a30974 = 30974 +a30975 = 30975 +a30976 = 30976 +a30977 = 30977 +a30978 = 30978 +a30979 = 30979 +a30980 = 30980 +a30981 = 30981 +a30982 = 30982 +a30983 = 30983 +a30984 = 30984 +a30985 = 30985 +a30986 = 30986 +a30987 = 30987 +a30988 = 30988 +a30989 = 30989 +a30990 = 30990 +a30991 = 30991 +a30992 = 30992 +a30993 = 30993 +a30994 = 30994 +a30995 = 30995 +a30996 = 30996 +a30997 = 30997 +a30998 = 30998 +a30999 = 30999 +a31000 = 31000 +a31001 = 31001 +a31002 = 31002 +a31003 = 31003 +a31004 = 31004 +a31005 = 31005 +a31006 = 31006 +a31007 = 31007 +a31008 = 31008 +a31009 = 31009 +a31010 = 31010 +a31011 = 31011 +a31012 = 31012 +a31013 = 31013 +a31014 = 31014 +a31015 = 31015 +a31016 = 31016 +a31017 = 31017 +a31018 = 31018 +a31019 = 31019 +a31020 = 31020 +a31021 = 31021 +a31022 = 31022 +a31023 = 31023 +a31024 = 31024 +a31025 = 31025 +a31026 = 31026 +a31027 = 31027 +a31028 = 31028 +a31029 = 31029 +a31030 = 31030 +a31031 = 31031 +a31032 = 31032 +a31033 = 31033 +a31034 = 31034 +a31035 = 31035 +a31036 = 31036 +a31037 = 31037 +a31038 = 31038 +a31039 = 31039 +a31040 = 31040 +a31041 = 31041 +a31042 = 31042 +a31043 = 31043 +a31044 = 31044 +a31045 = 31045 +a31046 = 31046 +a31047 = 31047 +a31048 = 31048 +a31049 = 31049 +a31050 = 31050 +a31051 = 31051 +a31052 = 31052 +a31053 = 31053 +a31054 = 31054 +a31055 = 31055 +a31056 = 31056 +a31057 = 31057 +a31058 = 31058 +a31059 = 31059 +a31060 = 31060 +a31061 = 31061 +a31062 = 31062 +a31063 = 31063 +a31064 = 31064 +a31065 = 31065 +a31066 = 31066 +a31067 = 31067 +a31068 = 31068 +a31069 = 31069 +a31070 = 31070 +a31071 = 31071 +a31072 = 31072 +a31073 = 31073 +a31074 = 31074 +a31075 = 31075 +a31076 = 31076 +a31077 = 31077 +a31078 = 31078 +a31079 = 31079 +a31080 = 31080 +a31081 = 31081 +a31082 = 31082 +a31083 = 31083 +a31084 = 31084 +a31085 = 31085 +a31086 = 31086 +a31087 = 31087 +a31088 = 31088 +a31089 = 31089 +a31090 = 31090 +a31091 = 31091 +a31092 = 31092 +a31093 = 31093 +a31094 = 31094 +a31095 = 31095 +a31096 = 31096 +a31097 = 31097 +a31098 = 31098 +a31099 = 31099 +a31100 = 31100 +a31101 = 31101 +a31102 = 31102 +a31103 = 31103 +a31104 = 31104 +a31105 = 31105 +a31106 = 31106 +a31107 = 31107 +a31108 = 31108 +a31109 = 31109 +a31110 = 31110 +a31111 = 31111 +a31112 = 31112 +a31113 = 31113 +a31114 = 31114 +a31115 = 31115 +a31116 = 31116 +a31117 = 31117 +a31118 = 31118 +a31119 = 31119 +a31120 = 31120 +a31121 = 31121 +a31122 = 31122 +a31123 = 31123 +a31124 = 31124 +a31125 = 31125 +a31126 = 31126 +a31127 = 31127 +a31128 = 31128 +a31129 = 31129 +a31130 = 31130 +a31131 = 31131 +a31132 = 31132 +a31133 = 31133 +a31134 = 31134 +a31135 = 31135 +a31136 = 31136 +a31137 = 31137 +a31138 = 31138 +a31139 = 31139 +a31140 = 31140 +a31141 = 31141 +a31142 = 31142 +a31143 = 31143 +a31144 = 31144 +a31145 = 31145 +a31146 = 31146 +a31147 = 31147 +a31148 = 31148 +a31149 = 31149 +a31150 = 31150 +a31151 = 31151 +a31152 = 31152 +a31153 = 31153 +a31154 = 31154 +a31155 = 31155 +a31156 = 31156 +a31157 = 31157 +a31158 = 31158 +a31159 = 31159 +a31160 = 31160 +a31161 = 31161 +a31162 = 31162 +a31163 = 31163 +a31164 = 31164 +a31165 = 31165 +a31166 = 31166 +a31167 = 31167 +a31168 = 31168 +a31169 = 31169 +a31170 = 31170 +a31171 = 31171 +a31172 = 31172 +a31173 = 31173 +a31174 = 31174 +a31175 = 31175 +a31176 = 31176 +a31177 = 31177 +a31178 = 31178 +a31179 = 31179 +a31180 = 31180 +a31181 = 31181 +a31182 = 31182 +a31183 = 31183 +a31184 = 31184 +a31185 = 31185 +a31186 = 31186 +a31187 = 31187 +a31188 = 31188 +a31189 = 31189 +a31190 = 31190 +a31191 = 31191 +a31192 = 31192 +a31193 = 31193 +a31194 = 31194 +a31195 = 31195 +a31196 = 31196 +a31197 = 31197 +a31198 = 31198 +a31199 = 31199 +a31200 = 31200 +a31201 = 31201 +a31202 = 31202 +a31203 = 31203 +a31204 = 31204 +a31205 = 31205 +a31206 = 31206 +a31207 = 31207 +a31208 = 31208 +a31209 = 31209 +a31210 = 31210 +a31211 = 31211 +a31212 = 31212 +a31213 = 31213 +a31214 = 31214 +a31215 = 31215 +a31216 = 31216 +a31217 = 31217 +a31218 = 31218 +a31219 = 31219 +a31220 = 31220 +a31221 = 31221 +a31222 = 31222 +a31223 = 31223 +a31224 = 31224 +a31225 = 31225 +a31226 = 31226 +a31227 = 31227 +a31228 = 31228 +a31229 = 31229 +a31230 = 31230 +a31231 = 31231 +a31232 = 31232 +a31233 = 31233 +a31234 = 31234 +a31235 = 31235 +a31236 = 31236 +a31237 = 31237 +a31238 = 31238 +a31239 = 31239 +a31240 = 31240 +a31241 = 31241 +a31242 = 31242 +a31243 = 31243 +a31244 = 31244 +a31245 = 31245 +a31246 = 31246 +a31247 = 31247 +a31248 = 31248 +a31249 = 31249 +a31250 = 31250 +a31251 = 31251 +a31252 = 31252 +a31253 = 31253 +a31254 = 31254 +a31255 = 31255 +a31256 = 31256 +a31257 = 31257 +a31258 = 31258 +a31259 = 31259 +a31260 = 31260 +a31261 = 31261 +a31262 = 31262 +a31263 = 31263 +a31264 = 31264 +a31265 = 31265 +a31266 = 31266 +a31267 = 31267 +a31268 = 31268 +a31269 = 31269 +a31270 = 31270 +a31271 = 31271 +a31272 = 31272 +a31273 = 31273 +a31274 = 31274 +a31275 = 31275 +a31276 = 31276 +a31277 = 31277 +a31278 = 31278 +a31279 = 31279 +a31280 = 31280 +a31281 = 31281 +a31282 = 31282 +a31283 = 31283 +a31284 = 31284 +a31285 = 31285 +a31286 = 31286 +a31287 = 31287 +a31288 = 31288 +a31289 = 31289 +a31290 = 31290 +a31291 = 31291 +a31292 = 31292 +a31293 = 31293 +a31294 = 31294 +a31295 = 31295 +a31296 = 31296 +a31297 = 31297 +a31298 = 31298 +a31299 = 31299 +a31300 = 31300 +a31301 = 31301 +a31302 = 31302 +a31303 = 31303 +a31304 = 31304 +a31305 = 31305 +a31306 = 31306 +a31307 = 31307 +a31308 = 31308 +a31309 = 31309 +a31310 = 31310 +a31311 = 31311 +a31312 = 31312 +a31313 = 31313 +a31314 = 31314 +a31315 = 31315 +a31316 = 31316 +a31317 = 31317 +a31318 = 31318 +a31319 = 31319 +a31320 = 31320 +a31321 = 31321 +a31322 = 31322 +a31323 = 31323 +a31324 = 31324 +a31325 = 31325 +a31326 = 31326 +a31327 = 31327 +a31328 = 31328 +a31329 = 31329 +a31330 = 31330 +a31331 = 31331 +a31332 = 31332 +a31333 = 31333 +a31334 = 31334 +a31335 = 31335 +a31336 = 31336 +a31337 = 31337 +a31338 = 31338 +a31339 = 31339 +a31340 = 31340 +a31341 = 31341 +a31342 = 31342 +a31343 = 31343 +a31344 = 31344 +a31345 = 31345 +a31346 = 31346 +a31347 = 31347 +a31348 = 31348 +a31349 = 31349 +a31350 = 31350 +a31351 = 31351 +a31352 = 31352 +a31353 = 31353 +a31354 = 31354 +a31355 = 31355 +a31356 = 31356 +a31357 = 31357 +a31358 = 31358 +a31359 = 31359 +a31360 = 31360 +a31361 = 31361 +a31362 = 31362 +a31363 = 31363 +a31364 = 31364 +a31365 = 31365 +a31366 = 31366 +a31367 = 31367 +a31368 = 31368 +a31369 = 31369 +a31370 = 31370 +a31371 = 31371 +a31372 = 31372 +a31373 = 31373 +a31374 = 31374 +a31375 = 31375 +a31376 = 31376 +a31377 = 31377 +a31378 = 31378 +a31379 = 31379 +a31380 = 31380 +a31381 = 31381 +a31382 = 31382 +a31383 = 31383 +a31384 = 31384 +a31385 = 31385 +a31386 = 31386 +a31387 = 31387 +a31388 = 31388 +a31389 = 31389 +a31390 = 31390 +a31391 = 31391 +a31392 = 31392 +a31393 = 31393 +a31394 = 31394 +a31395 = 31395 +a31396 = 31396 +a31397 = 31397 +a31398 = 31398 +a31399 = 31399 +a31400 = 31400 +a31401 = 31401 +a31402 = 31402 +a31403 = 31403 +a31404 = 31404 +a31405 = 31405 +a31406 = 31406 +a31407 = 31407 +a31408 = 31408 +a31409 = 31409 +a31410 = 31410 +a31411 = 31411 +a31412 = 31412 +a31413 = 31413 +a31414 = 31414 +a31415 = 31415 +a31416 = 31416 +a31417 = 31417 +a31418 = 31418 +a31419 = 31419 +a31420 = 31420 +a31421 = 31421 +a31422 = 31422 +a31423 = 31423 +a31424 = 31424 +a31425 = 31425 +a31426 = 31426 +a31427 = 31427 +a31428 = 31428 +a31429 = 31429 +a31430 = 31430 +a31431 = 31431 +a31432 = 31432 +a31433 = 31433 +a31434 = 31434 +a31435 = 31435 +a31436 = 31436 +a31437 = 31437 +a31438 = 31438 +a31439 = 31439 +a31440 = 31440 +a31441 = 31441 +a31442 = 31442 +a31443 = 31443 +a31444 = 31444 +a31445 = 31445 +a31446 = 31446 +a31447 = 31447 +a31448 = 31448 +a31449 = 31449 +a31450 = 31450 +a31451 = 31451 +a31452 = 31452 +a31453 = 31453 +a31454 = 31454 +a31455 = 31455 +a31456 = 31456 +a31457 = 31457 +a31458 = 31458 +a31459 = 31459 +a31460 = 31460 +a31461 = 31461 +a31462 = 31462 +a31463 = 31463 +a31464 = 31464 +a31465 = 31465 +a31466 = 31466 +a31467 = 31467 +a31468 = 31468 +a31469 = 31469 +a31470 = 31470 +a31471 = 31471 +a31472 = 31472 +a31473 = 31473 +a31474 = 31474 +a31475 = 31475 +a31476 = 31476 +a31477 = 31477 +a31478 = 31478 +a31479 = 31479 +a31480 = 31480 +a31481 = 31481 +a31482 = 31482 +a31483 = 31483 +a31484 = 31484 +a31485 = 31485 +a31486 = 31486 +a31487 = 31487 +a31488 = 31488 +a31489 = 31489 +a31490 = 31490 +a31491 = 31491 +a31492 = 31492 +a31493 = 31493 +a31494 = 31494 +a31495 = 31495 +a31496 = 31496 +a31497 = 31497 +a31498 = 31498 +a31499 = 31499 +a31500 = 31500 +a31501 = 31501 +a31502 = 31502 +a31503 = 31503 +a31504 = 31504 +a31505 = 31505 +a31506 = 31506 +a31507 = 31507 +a31508 = 31508 +a31509 = 31509 +a31510 = 31510 +a31511 = 31511 +a31512 = 31512 +a31513 = 31513 +a31514 = 31514 +a31515 = 31515 +a31516 = 31516 +a31517 = 31517 +a31518 = 31518 +a31519 = 31519 +a31520 = 31520 +a31521 = 31521 +a31522 = 31522 +a31523 = 31523 +a31524 = 31524 +a31525 = 31525 +a31526 = 31526 +a31527 = 31527 +a31528 = 31528 +a31529 = 31529 +a31530 = 31530 +a31531 = 31531 +a31532 = 31532 +a31533 = 31533 +a31534 = 31534 +a31535 = 31535 +a31536 = 31536 +a31537 = 31537 +a31538 = 31538 +a31539 = 31539 +a31540 = 31540 +a31541 = 31541 +a31542 = 31542 +a31543 = 31543 +a31544 = 31544 +a31545 = 31545 +a31546 = 31546 +a31547 = 31547 +a31548 = 31548 +a31549 = 31549 +a31550 = 31550 +a31551 = 31551 +a31552 = 31552 +a31553 = 31553 +a31554 = 31554 +a31555 = 31555 +a31556 = 31556 +a31557 = 31557 +a31558 = 31558 +a31559 = 31559 +a31560 = 31560 +a31561 = 31561 +a31562 = 31562 +a31563 = 31563 +a31564 = 31564 +a31565 = 31565 +a31566 = 31566 +a31567 = 31567 +a31568 = 31568 +a31569 = 31569 +a31570 = 31570 +a31571 = 31571 +a31572 = 31572 +a31573 = 31573 +a31574 = 31574 +a31575 = 31575 +a31576 = 31576 +a31577 = 31577 +a31578 = 31578 +a31579 = 31579 +a31580 = 31580 +a31581 = 31581 +a31582 = 31582 +a31583 = 31583 +a31584 = 31584 +a31585 = 31585 +a31586 = 31586 +a31587 = 31587 +a31588 = 31588 +a31589 = 31589 +a31590 = 31590 +a31591 = 31591 +a31592 = 31592 +a31593 = 31593 +a31594 = 31594 +a31595 = 31595 +a31596 = 31596 +a31597 = 31597 +a31598 = 31598 +a31599 = 31599 +a31600 = 31600 +a31601 = 31601 +a31602 = 31602 +a31603 = 31603 +a31604 = 31604 +a31605 = 31605 +a31606 = 31606 +a31607 = 31607 +a31608 = 31608 +a31609 = 31609 +a31610 = 31610 +a31611 = 31611 +a31612 = 31612 +a31613 = 31613 +a31614 = 31614 +a31615 = 31615 +a31616 = 31616 +a31617 = 31617 +a31618 = 31618 +a31619 = 31619 +a31620 = 31620 +a31621 = 31621 +a31622 = 31622 +a31623 = 31623 +a31624 = 31624 +a31625 = 31625 +a31626 = 31626 +a31627 = 31627 +a31628 = 31628 +a31629 = 31629 +a31630 = 31630 +a31631 = 31631 +a31632 = 31632 +a31633 = 31633 +a31634 = 31634 +a31635 = 31635 +a31636 = 31636 +a31637 = 31637 +a31638 = 31638 +a31639 = 31639 +a31640 = 31640 +a31641 = 31641 +a31642 = 31642 +a31643 = 31643 +a31644 = 31644 +a31645 = 31645 +a31646 = 31646 +a31647 = 31647 +a31648 = 31648 +a31649 = 31649 +a31650 = 31650 +a31651 = 31651 +a31652 = 31652 +a31653 = 31653 +a31654 = 31654 +a31655 = 31655 +a31656 = 31656 +a31657 = 31657 +a31658 = 31658 +a31659 = 31659 +a31660 = 31660 +a31661 = 31661 +a31662 = 31662 +a31663 = 31663 +a31664 = 31664 +a31665 = 31665 +a31666 = 31666 +a31667 = 31667 +a31668 = 31668 +a31669 = 31669 +a31670 = 31670 +a31671 = 31671 +a31672 = 31672 +a31673 = 31673 +a31674 = 31674 +a31675 = 31675 +a31676 = 31676 +a31677 = 31677 +a31678 = 31678 +a31679 = 31679 +a31680 = 31680 +a31681 = 31681 +a31682 = 31682 +a31683 = 31683 +a31684 = 31684 +a31685 = 31685 +a31686 = 31686 +a31687 = 31687 +a31688 = 31688 +a31689 = 31689 +a31690 = 31690 +a31691 = 31691 +a31692 = 31692 +a31693 = 31693 +a31694 = 31694 +a31695 = 31695 +a31696 = 31696 +a31697 = 31697 +a31698 = 31698 +a31699 = 31699 +a31700 = 31700 +a31701 = 31701 +a31702 = 31702 +a31703 = 31703 +a31704 = 31704 +a31705 = 31705 +a31706 = 31706 +a31707 = 31707 +a31708 = 31708 +a31709 = 31709 +a31710 = 31710 +a31711 = 31711 +a31712 = 31712 +a31713 = 31713 +a31714 = 31714 +a31715 = 31715 +a31716 = 31716 +a31717 = 31717 +a31718 = 31718 +a31719 = 31719 +a31720 = 31720 +a31721 = 31721 +a31722 = 31722 +a31723 = 31723 +a31724 = 31724 +a31725 = 31725 +a31726 = 31726 +a31727 = 31727 +a31728 = 31728 +a31729 = 31729 +a31730 = 31730 +a31731 = 31731 +a31732 = 31732 +a31733 = 31733 +a31734 = 31734 +a31735 = 31735 +a31736 = 31736 +a31737 = 31737 +a31738 = 31738 +a31739 = 31739 +a31740 = 31740 +a31741 = 31741 +a31742 = 31742 +a31743 = 31743 +a31744 = 31744 +a31745 = 31745 +a31746 = 31746 +a31747 = 31747 +a31748 = 31748 +a31749 = 31749 +a31750 = 31750 +a31751 = 31751 +a31752 = 31752 +a31753 = 31753 +a31754 = 31754 +a31755 = 31755 +a31756 = 31756 +a31757 = 31757 +a31758 = 31758 +a31759 = 31759 +a31760 = 31760 +a31761 = 31761 +a31762 = 31762 +a31763 = 31763 +a31764 = 31764 +a31765 = 31765 +a31766 = 31766 +a31767 = 31767 +a31768 = 31768 +a31769 = 31769 +a31770 = 31770 +a31771 = 31771 +a31772 = 31772 +a31773 = 31773 +a31774 = 31774 +a31775 = 31775 +a31776 = 31776 +a31777 = 31777 +a31778 = 31778 +a31779 = 31779 +a31780 = 31780 +a31781 = 31781 +a31782 = 31782 +a31783 = 31783 +a31784 = 31784 +a31785 = 31785 +a31786 = 31786 +a31787 = 31787 +a31788 = 31788 +a31789 = 31789 +a31790 = 31790 +a31791 = 31791 +a31792 = 31792 +a31793 = 31793 +a31794 = 31794 +a31795 = 31795 +a31796 = 31796 +a31797 = 31797 +a31798 = 31798 +a31799 = 31799 +a31800 = 31800 +a31801 = 31801 +a31802 = 31802 +a31803 = 31803 +a31804 = 31804 +a31805 = 31805 +a31806 = 31806 +a31807 = 31807 +a31808 = 31808 +a31809 = 31809 +a31810 = 31810 +a31811 = 31811 +a31812 = 31812 +a31813 = 31813 +a31814 = 31814 +a31815 = 31815 +a31816 = 31816 +a31817 = 31817 +a31818 = 31818 +a31819 = 31819 +a31820 = 31820 +a31821 = 31821 +a31822 = 31822 +a31823 = 31823 +a31824 = 31824 +a31825 = 31825 +a31826 = 31826 +a31827 = 31827 +a31828 = 31828 +a31829 = 31829 +a31830 = 31830 +a31831 = 31831 +a31832 = 31832 +a31833 = 31833 +a31834 = 31834 +a31835 = 31835 +a31836 = 31836 +a31837 = 31837 +a31838 = 31838 +a31839 = 31839 +a31840 = 31840 +a31841 = 31841 +a31842 = 31842 +a31843 = 31843 +a31844 = 31844 +a31845 = 31845 +a31846 = 31846 +a31847 = 31847 +a31848 = 31848 +a31849 = 31849 +a31850 = 31850 +a31851 = 31851 +a31852 = 31852 +a31853 = 31853 +a31854 = 31854 +a31855 = 31855 +a31856 = 31856 +a31857 = 31857 +a31858 = 31858 +a31859 = 31859 +a31860 = 31860 +a31861 = 31861 +a31862 = 31862 +a31863 = 31863 +a31864 = 31864 +a31865 = 31865 +a31866 = 31866 +a31867 = 31867 +a31868 = 31868 +a31869 = 31869 +a31870 = 31870 +a31871 = 31871 +a31872 = 31872 +a31873 = 31873 +a31874 = 31874 +a31875 = 31875 +a31876 = 31876 +a31877 = 31877 +a31878 = 31878 +a31879 = 31879 +a31880 = 31880 +a31881 = 31881 +a31882 = 31882 +a31883 = 31883 +a31884 = 31884 +a31885 = 31885 +a31886 = 31886 +a31887 = 31887 +a31888 = 31888 +a31889 = 31889 +a31890 = 31890 +a31891 = 31891 +a31892 = 31892 +a31893 = 31893 +a31894 = 31894 +a31895 = 31895 +a31896 = 31896 +a31897 = 31897 +a31898 = 31898 +a31899 = 31899 +a31900 = 31900 +a31901 = 31901 +a31902 = 31902 +a31903 = 31903 +a31904 = 31904 +a31905 = 31905 +a31906 = 31906 +a31907 = 31907 +a31908 = 31908 +a31909 = 31909 +a31910 = 31910 +a31911 = 31911 +a31912 = 31912 +a31913 = 31913 +a31914 = 31914 +a31915 = 31915 +a31916 = 31916 +a31917 = 31917 +a31918 = 31918 +a31919 = 31919 +a31920 = 31920 +a31921 = 31921 +a31922 = 31922 +a31923 = 31923 +a31924 = 31924 +a31925 = 31925 +a31926 = 31926 +a31927 = 31927 +a31928 = 31928 +a31929 = 31929 +a31930 = 31930 +a31931 = 31931 +a31932 = 31932 +a31933 = 31933 +a31934 = 31934 +a31935 = 31935 +a31936 = 31936 +a31937 = 31937 +a31938 = 31938 +a31939 = 31939 +a31940 = 31940 +a31941 = 31941 +a31942 = 31942 +a31943 = 31943 +a31944 = 31944 +a31945 = 31945 +a31946 = 31946 +a31947 = 31947 +a31948 = 31948 +a31949 = 31949 +a31950 = 31950 +a31951 = 31951 +a31952 = 31952 +a31953 = 31953 +a31954 = 31954 +a31955 = 31955 +a31956 = 31956 +a31957 = 31957 +a31958 = 31958 +a31959 = 31959 +a31960 = 31960 +a31961 = 31961 +a31962 = 31962 +a31963 = 31963 +a31964 = 31964 +a31965 = 31965 +a31966 = 31966 +a31967 = 31967 +a31968 = 31968 +a31969 = 31969 +a31970 = 31970 +a31971 = 31971 +a31972 = 31972 +a31973 = 31973 +a31974 = 31974 +a31975 = 31975 +a31976 = 31976 +a31977 = 31977 +a31978 = 31978 +a31979 = 31979 +a31980 = 31980 +a31981 = 31981 +a31982 = 31982 +a31983 = 31983 +a31984 = 31984 +a31985 = 31985 +a31986 = 31986 +a31987 = 31987 +a31988 = 31988 +a31989 = 31989 +a31990 = 31990 +a31991 = 31991 +a31992 = 31992 +a31993 = 31993 +a31994 = 31994 +a31995 = 31995 +a31996 = 31996 +a31997 = 31997 +a31998 = 31998 +a31999 = 31999 +a32000 = 32000 +a32001 = 32001 +a32002 = 32002 +a32003 = 32003 +a32004 = 32004 +a32005 = 32005 +a32006 = 32006 +a32007 = 32007 +a32008 = 32008 +a32009 = 32009 +a32010 = 32010 +a32011 = 32011 +a32012 = 32012 +a32013 = 32013 +a32014 = 32014 +a32015 = 32015 +a32016 = 32016 +a32017 = 32017 +a32018 = 32018 +a32019 = 32019 +a32020 = 32020 +a32021 = 32021 +a32022 = 32022 +a32023 = 32023 +a32024 = 32024 +a32025 = 32025 +a32026 = 32026 +a32027 = 32027 +a32028 = 32028 +a32029 = 32029 +a32030 = 32030 +a32031 = 32031 +a32032 = 32032 +a32033 = 32033 +a32034 = 32034 +a32035 = 32035 +a32036 = 32036 +a32037 = 32037 +a32038 = 32038 +a32039 = 32039 +a32040 = 32040 +a32041 = 32041 +a32042 = 32042 +a32043 = 32043 +a32044 = 32044 +a32045 = 32045 +a32046 = 32046 +a32047 = 32047 +a32048 = 32048 +a32049 = 32049 +a32050 = 32050 +a32051 = 32051 +a32052 = 32052 +a32053 = 32053 +a32054 = 32054 +a32055 = 32055 +a32056 = 32056 +a32057 = 32057 +a32058 = 32058 +a32059 = 32059 +a32060 = 32060 +a32061 = 32061 +a32062 = 32062 +a32063 = 32063 +a32064 = 32064 +a32065 = 32065 +a32066 = 32066 +a32067 = 32067 +a32068 = 32068 +a32069 = 32069 +a32070 = 32070 +a32071 = 32071 +a32072 = 32072 +a32073 = 32073 +a32074 = 32074 +a32075 = 32075 +a32076 = 32076 +a32077 = 32077 +a32078 = 32078 +a32079 = 32079 +a32080 = 32080 +a32081 = 32081 +a32082 = 32082 +a32083 = 32083 +a32084 = 32084 +a32085 = 32085 +a32086 = 32086 +a32087 = 32087 +a32088 = 32088 +a32089 = 32089 +a32090 = 32090 +a32091 = 32091 +a32092 = 32092 +a32093 = 32093 +a32094 = 32094 +a32095 = 32095 +a32096 = 32096 +a32097 = 32097 +a32098 = 32098 +a32099 = 32099 +a32100 = 32100 +a32101 = 32101 +a32102 = 32102 +a32103 = 32103 +a32104 = 32104 +a32105 = 32105 +a32106 = 32106 +a32107 = 32107 +a32108 = 32108 +a32109 = 32109 +a32110 = 32110 +a32111 = 32111 +a32112 = 32112 +a32113 = 32113 +a32114 = 32114 +a32115 = 32115 +a32116 = 32116 +a32117 = 32117 +a32118 = 32118 +a32119 = 32119 +a32120 = 32120 +a32121 = 32121 +a32122 = 32122 +a32123 = 32123 +a32124 = 32124 +a32125 = 32125 +a32126 = 32126 +a32127 = 32127 +a32128 = 32128 +a32129 = 32129 +a32130 = 32130 +a32131 = 32131 +a32132 = 32132 +a32133 = 32133 +a32134 = 32134 +a32135 = 32135 +a32136 = 32136 +a32137 = 32137 +a32138 = 32138 +a32139 = 32139 +a32140 = 32140 +a32141 = 32141 +a32142 = 32142 +a32143 = 32143 +a32144 = 32144 +a32145 = 32145 +a32146 = 32146 +a32147 = 32147 +a32148 = 32148 +a32149 = 32149 +a32150 = 32150 +a32151 = 32151 +a32152 = 32152 +a32153 = 32153 +a32154 = 32154 +a32155 = 32155 +a32156 = 32156 +a32157 = 32157 +a32158 = 32158 +a32159 = 32159 +a32160 = 32160 +a32161 = 32161 +a32162 = 32162 +a32163 = 32163 +a32164 = 32164 +a32165 = 32165 +a32166 = 32166 +a32167 = 32167 +a32168 = 32168 +a32169 = 32169 +a32170 = 32170 +a32171 = 32171 +a32172 = 32172 +a32173 = 32173 +a32174 = 32174 +a32175 = 32175 +a32176 = 32176 +a32177 = 32177 +a32178 = 32178 +a32179 = 32179 +a32180 = 32180 +a32181 = 32181 +a32182 = 32182 +a32183 = 32183 +a32184 = 32184 +a32185 = 32185 +a32186 = 32186 +a32187 = 32187 +a32188 = 32188 +a32189 = 32189 +a32190 = 32190 +a32191 = 32191 +a32192 = 32192 +a32193 = 32193 +a32194 = 32194 +a32195 = 32195 +a32196 = 32196 +a32197 = 32197 +a32198 = 32198 +a32199 = 32199 +a32200 = 32200 +a32201 = 32201 +a32202 = 32202 +a32203 = 32203 +a32204 = 32204 +a32205 = 32205 +a32206 = 32206 +a32207 = 32207 +a32208 = 32208 +a32209 = 32209 +a32210 = 32210 +a32211 = 32211 +a32212 = 32212 +a32213 = 32213 +a32214 = 32214 +a32215 = 32215 +a32216 = 32216 +a32217 = 32217 +a32218 = 32218 +a32219 = 32219 +a32220 = 32220 +a32221 = 32221 +a32222 = 32222 +a32223 = 32223 +a32224 = 32224 +a32225 = 32225 +a32226 = 32226 +a32227 = 32227 +a32228 = 32228 +a32229 = 32229 +a32230 = 32230 +a32231 = 32231 +a32232 = 32232 +a32233 = 32233 +a32234 = 32234 +a32235 = 32235 +a32236 = 32236 +a32237 = 32237 +a32238 = 32238 +a32239 = 32239 +a32240 = 32240 +a32241 = 32241 +a32242 = 32242 +a32243 = 32243 +a32244 = 32244 +a32245 = 32245 +a32246 = 32246 +a32247 = 32247 +a32248 = 32248 +a32249 = 32249 +a32250 = 32250 +a32251 = 32251 +a32252 = 32252 +a32253 = 32253 +a32254 = 32254 +a32255 = 32255 +a32256 = 32256 +a32257 = 32257 +a32258 = 32258 +a32259 = 32259 +a32260 = 32260 +a32261 = 32261 +a32262 = 32262 +a32263 = 32263 +a32264 = 32264 +a32265 = 32265 +a32266 = 32266 +a32267 = 32267 +a32268 = 32268 +a32269 = 32269 +a32270 = 32270 +a32271 = 32271 +a32272 = 32272 +a32273 = 32273 +a32274 = 32274 +a32275 = 32275 +a32276 = 32276 +a32277 = 32277 +a32278 = 32278 +a32279 = 32279 +a32280 = 32280 +a32281 = 32281 +a32282 = 32282 +a32283 = 32283 +a32284 = 32284 +a32285 = 32285 +a32286 = 32286 +a32287 = 32287 +a32288 = 32288 +a32289 = 32289 +a32290 = 32290 +a32291 = 32291 +a32292 = 32292 +a32293 = 32293 +a32294 = 32294 +a32295 = 32295 +a32296 = 32296 +a32297 = 32297 +a32298 = 32298 +a32299 = 32299 +a32300 = 32300 +a32301 = 32301 +a32302 = 32302 +a32303 = 32303 +a32304 = 32304 +a32305 = 32305 +a32306 = 32306 +a32307 = 32307 +a32308 = 32308 +a32309 = 32309 +a32310 = 32310 +a32311 = 32311 +a32312 = 32312 +a32313 = 32313 +a32314 = 32314 +a32315 = 32315 +a32316 = 32316 +a32317 = 32317 +a32318 = 32318 +a32319 = 32319 +a32320 = 32320 +a32321 = 32321 +a32322 = 32322 +a32323 = 32323 +a32324 = 32324 +a32325 = 32325 +a32326 = 32326 +a32327 = 32327 +a32328 = 32328 +a32329 = 32329 +a32330 = 32330 +a32331 = 32331 +a32332 = 32332 +a32333 = 32333 +a32334 = 32334 +a32335 = 32335 +a32336 = 32336 +a32337 = 32337 +a32338 = 32338 +a32339 = 32339 +a32340 = 32340 +a32341 = 32341 +a32342 = 32342 +a32343 = 32343 +a32344 = 32344 +a32345 = 32345 +a32346 = 32346 +a32347 = 32347 +a32348 = 32348 +a32349 = 32349 +a32350 = 32350 +a32351 = 32351 +a32352 = 32352 +a32353 = 32353 +a32354 = 32354 +a32355 = 32355 +a32356 = 32356 +a32357 = 32357 +a32358 = 32358 +a32359 = 32359 +a32360 = 32360 +a32361 = 32361 +a32362 = 32362 +a32363 = 32363 +a32364 = 32364 +a32365 = 32365 +a32366 = 32366 +a32367 = 32367 +a32368 = 32368 +a32369 = 32369 +a32370 = 32370 +a32371 = 32371 +a32372 = 32372 +a32373 = 32373 +a32374 = 32374 +a32375 = 32375 +a32376 = 32376 +a32377 = 32377 +a32378 = 32378 +a32379 = 32379 +a32380 = 32380 +a32381 = 32381 +a32382 = 32382 +a32383 = 32383 +a32384 = 32384 +a32385 = 32385 +a32386 = 32386 +a32387 = 32387 +a32388 = 32388 +a32389 = 32389 +a32390 = 32390 +a32391 = 32391 +a32392 = 32392 +a32393 = 32393 +a32394 = 32394 +a32395 = 32395 +a32396 = 32396 +a32397 = 32397 +a32398 = 32398 +a32399 = 32399 +a32400 = 32400 +a32401 = 32401 +a32402 = 32402 +a32403 = 32403 +a32404 = 32404 +a32405 = 32405 +a32406 = 32406 +a32407 = 32407 +a32408 = 32408 +a32409 = 32409 +a32410 = 32410 +a32411 = 32411 +a32412 = 32412 +a32413 = 32413 +a32414 = 32414 +a32415 = 32415 +a32416 = 32416 +a32417 = 32417 +a32418 = 32418 +a32419 = 32419 +a32420 = 32420 +a32421 = 32421 +a32422 = 32422 +a32423 = 32423 +a32424 = 32424 +a32425 = 32425 +a32426 = 32426 +a32427 = 32427 +a32428 = 32428 +a32429 = 32429 +a32430 = 32430 +a32431 = 32431 +a32432 = 32432 +a32433 = 32433 +a32434 = 32434 +a32435 = 32435 +a32436 = 32436 +a32437 = 32437 +a32438 = 32438 +a32439 = 32439 +a32440 = 32440 +a32441 = 32441 +a32442 = 32442 +a32443 = 32443 +a32444 = 32444 +a32445 = 32445 +a32446 = 32446 +a32447 = 32447 +a32448 = 32448 +a32449 = 32449 +a32450 = 32450 +a32451 = 32451 +a32452 = 32452 +a32453 = 32453 +a32454 = 32454 +a32455 = 32455 +a32456 = 32456 +a32457 = 32457 +a32458 = 32458 +a32459 = 32459 +a32460 = 32460 +a32461 = 32461 +a32462 = 32462 +a32463 = 32463 +a32464 = 32464 +a32465 = 32465 +a32466 = 32466 +a32467 = 32467 +a32468 = 32468 +a32469 = 32469 +a32470 = 32470 +a32471 = 32471 +a32472 = 32472 +a32473 = 32473 +a32474 = 32474 +a32475 = 32475 +a32476 = 32476 +a32477 = 32477 +a32478 = 32478 +a32479 = 32479 +a32480 = 32480 +a32481 = 32481 +a32482 = 32482 +a32483 = 32483 +a32484 = 32484 +a32485 = 32485 +a32486 = 32486 +a32487 = 32487 +a32488 = 32488 +a32489 = 32489 +a32490 = 32490 +a32491 = 32491 +a32492 = 32492 +a32493 = 32493 +a32494 = 32494 +a32495 = 32495 +a32496 = 32496 +a32497 = 32497 +a32498 = 32498 +a32499 = 32499 +a32500 = 32500 +a32501 = 32501 +a32502 = 32502 +a32503 = 32503 +a32504 = 32504 +a32505 = 32505 +a32506 = 32506 +a32507 = 32507 +a32508 = 32508 +a32509 = 32509 +a32510 = 32510 +a32511 = 32511 +a32512 = 32512 +a32513 = 32513 +a32514 = 32514 +a32515 = 32515 +a32516 = 32516 +a32517 = 32517 +a32518 = 32518 +a32519 = 32519 +a32520 = 32520 +a32521 = 32521 +a32522 = 32522 +a32523 = 32523 +a32524 = 32524 +a32525 = 32525 +a32526 = 32526 +a32527 = 32527 +a32528 = 32528 +a32529 = 32529 +a32530 = 32530 +a32531 = 32531 +a32532 = 32532 +a32533 = 32533 +a32534 = 32534 +a32535 = 32535 +a32536 = 32536 +a32537 = 32537 +a32538 = 32538 +a32539 = 32539 +a32540 = 32540 +a32541 = 32541 +a32542 = 32542 +a32543 = 32543 +a32544 = 32544 +a32545 = 32545 +a32546 = 32546 +a32547 = 32547 +a32548 = 32548 +a32549 = 32549 +a32550 = 32550 +a32551 = 32551 +a32552 = 32552 +a32553 = 32553 +a32554 = 32554 +a32555 = 32555 +a32556 = 32556 +a32557 = 32557 +a32558 = 32558 +a32559 = 32559 +a32560 = 32560 +a32561 = 32561 +a32562 = 32562 +a32563 = 32563 +a32564 = 32564 +a32565 = 32565 +a32566 = 32566 +a32567 = 32567 +a32568 = 32568 +a32569 = 32569 +a32570 = 32570 +a32571 = 32571 +a32572 = 32572 +a32573 = 32573 +a32574 = 32574 +a32575 = 32575 +a32576 = 32576 +a32577 = 32577 +a32578 = 32578 +a32579 = 32579 +a32580 = 32580 +a32581 = 32581 +a32582 = 32582 +a32583 = 32583 +a32584 = 32584 +a32585 = 32585 +a32586 = 32586 +a32587 = 32587 +a32588 = 32588 +a32589 = 32589 +a32590 = 32590 +a32591 = 32591 +a32592 = 32592 +a32593 = 32593 +a32594 = 32594 +a32595 = 32595 +a32596 = 32596 +a32597 = 32597 +a32598 = 32598 +a32599 = 32599 +a32600 = 32600 +a32601 = 32601 +a32602 = 32602 +a32603 = 32603 +a32604 = 32604 +a32605 = 32605 +a32606 = 32606 +a32607 = 32607 +a32608 = 32608 +a32609 = 32609 +a32610 = 32610 +a32611 = 32611 +a32612 = 32612 +a32613 = 32613 +a32614 = 32614 +a32615 = 32615 +a32616 = 32616 +a32617 = 32617 +a32618 = 32618 +a32619 = 32619 +a32620 = 32620 +a32621 = 32621 +a32622 = 32622 +a32623 = 32623 +a32624 = 32624 +a32625 = 32625 +a32626 = 32626 +a32627 = 32627 +a32628 = 32628 +a32629 = 32629 +a32630 = 32630 +a32631 = 32631 +a32632 = 32632 +a32633 = 32633 +a32634 = 32634 +a32635 = 32635 +a32636 = 32636 +a32637 = 32637 +a32638 = 32638 +a32639 = 32639 +a32640 = 32640 +a32641 = 32641 +a32642 = 32642 +a32643 = 32643 +a32644 = 32644 +a32645 = 32645 +a32646 = 32646 +a32647 = 32647 +a32648 = 32648 +a32649 = 32649 +a32650 = 32650 +a32651 = 32651 +a32652 = 32652 +a32653 = 32653 +a32654 = 32654 +a32655 = 32655 +a32656 = 32656 +a32657 = 32657 +a32658 = 32658 +a32659 = 32659 +a32660 = 32660 +a32661 = 32661 +a32662 = 32662 +a32663 = 32663 +a32664 = 32664 +a32665 = 32665 +a32666 = 32666 +a32667 = 32667 +a32668 = 32668 +a32669 = 32669 +a32670 = 32670 +a32671 = 32671 +a32672 = 32672 +a32673 = 32673 +a32674 = 32674 +a32675 = 32675 +a32676 = 32676 +a32677 = 32677 +a32678 = 32678 +a32679 = 32679 +a32680 = 32680 +a32681 = 32681 +a32682 = 32682 +a32683 = 32683 +a32684 = 32684 +a32685 = 32685 +a32686 = 32686 +a32687 = 32687 +a32688 = 32688 +a32689 = 32689 +a32690 = 32690 +a32691 = 32691 +a32692 = 32692 +a32693 = 32693 +a32694 = 32694 +a32695 = 32695 +a32696 = 32696 +a32697 = 32697 +a32698 = 32698 +a32699 = 32699 +a32700 = 32700 +a32701 = 32701 +a32702 = 32702 +a32703 = 32703 +a32704 = 32704 +a32705 = 32705 +a32706 = 32706 +a32707 = 32707 +a32708 = 32708 +a32709 = 32709 +a32710 = 32710 +a32711 = 32711 +a32712 = 32712 +a32713 = 32713 +a32714 = 32714 +a32715 = 32715 +a32716 = 32716 +a32717 = 32717 +a32718 = 32718 +a32719 = 32719 +a32720 = 32720 +a32721 = 32721 +a32722 = 32722 +a32723 = 32723 +a32724 = 32724 +a32725 = 32725 +a32726 = 32726 +a32727 = 32727 +a32728 = 32728 +a32729 = 32729 +a32730 = 32730 +a32731 = 32731 +a32732 = 32732 +a32733 = 32733 +a32734 = 32734 +a32735 = 32735 +a32736 = 32736 +a32737 = 32737 +a32738 = 32738 +a32739 = 32739 +a32740 = 32740 +a32741 = 32741 +a32742 = 32742 +a32743 = 32743 +a32744 = 32744 +a32745 = 32745 +a32746 = 32746 +a32747 = 32747 +a32748 = 32748 +a32749 = 32749 +a32750 = 32750 +a32751 = 32751 +a32752 = 32752 +a32753 = 32753 +a32754 = 32754 +a32755 = 32755 +a32756 = 32756 +a32757 = 32757 +a32758 = 32758 +a32759 = 32759 +a32760 = 32760 +a32761 = 32761 +a32762 = 32762 +a32763 = 32763 +a32764 = 32764 +a32765 = 32765 +a32766 = 32766 +a32767 = 32767 +a32768 = 32768 +a32769 = 32769 +a32770 = 32770 +a32771 = 32771 +a32772 = 32772 +a32773 = 32773 +a32774 = 32774 +a32775 = 32775 +a32776 = 32776 +a32777 = 32777 +a32778 = 32778 +a32779 = 32779 +a32780 = 32780 +a32781 = 32781 +a32782 = 32782 +a32783 = 32783 +a32784 = 32784 +a32785 = 32785 +a32786 = 32786 +a32787 = 32787 +a32788 = 32788 +a32789 = 32789 +a32790 = 32790 +a32791 = 32791 +a32792 = 32792 +a32793 = 32793 +a32794 = 32794 +a32795 = 32795 +a32796 = 32796 +a32797 = 32797 +a32798 = 32798 +a32799 = 32799 +a32800 = 32800 +a32801 = 32801 +a32802 = 32802 +a32803 = 32803 +a32804 = 32804 +a32805 = 32805 +a32806 = 32806 +a32807 = 32807 +a32808 = 32808 +a32809 = 32809 +a32810 = 32810 +a32811 = 32811 +a32812 = 32812 +a32813 = 32813 +a32814 = 32814 +a32815 = 32815 +a32816 = 32816 +a32817 = 32817 +a32818 = 32818 +a32819 = 32819 +a32820 = 32820 +a32821 = 32821 +a32822 = 32822 +a32823 = 32823 +a32824 = 32824 +a32825 = 32825 +a32826 = 32826 +a32827 = 32827 +a32828 = 32828 +a32829 = 32829 +a32830 = 32830 +a32831 = 32831 +a32832 = 32832 +a32833 = 32833 +a32834 = 32834 +a32835 = 32835 +a32836 = 32836 +a32837 = 32837 +a32838 = 32838 +a32839 = 32839 +a32840 = 32840 +a32841 = 32841 +a32842 = 32842 +a32843 = 32843 +a32844 = 32844 +a32845 = 32845 +a32846 = 32846 +a32847 = 32847 +a32848 = 32848 +a32849 = 32849 +a32850 = 32850 +a32851 = 32851 +a32852 = 32852 +a32853 = 32853 +a32854 = 32854 +a32855 = 32855 +a32856 = 32856 +a32857 = 32857 +a32858 = 32858 +a32859 = 32859 +a32860 = 32860 +a32861 = 32861 +a32862 = 32862 +a32863 = 32863 +a32864 = 32864 +a32865 = 32865 +a32866 = 32866 +a32867 = 32867 +a32868 = 32868 +a32869 = 32869 +a32870 = 32870 +a32871 = 32871 +a32872 = 32872 +a32873 = 32873 +a32874 = 32874 +a32875 = 32875 +a32876 = 32876 +a32877 = 32877 +a32878 = 32878 +a32879 = 32879 +a32880 = 32880 +a32881 = 32881 +a32882 = 32882 +a32883 = 32883 +a32884 = 32884 +a32885 = 32885 +a32886 = 32886 +a32887 = 32887 +a32888 = 32888 +a32889 = 32889 +a32890 = 32890 +a32891 = 32891 +a32892 = 32892 +a32893 = 32893 +a32894 = 32894 +a32895 = 32895 +a32896 = 32896 +a32897 = 32897 +a32898 = 32898 +a32899 = 32899 +a32900 = 32900 +a32901 = 32901 +a32902 = 32902 +a32903 = 32903 +a32904 = 32904 +a32905 = 32905 +a32906 = 32906 +a32907 = 32907 +a32908 = 32908 +a32909 = 32909 +a32910 = 32910 +a32911 = 32911 +a32912 = 32912 +a32913 = 32913 +a32914 = 32914 +a32915 = 32915 +a32916 = 32916 +a32917 = 32917 +a32918 = 32918 +a32919 = 32919 +a32920 = 32920 +a32921 = 32921 +a32922 = 32922 +a32923 = 32923 +a32924 = 32924 +a32925 = 32925 +a32926 = 32926 +a32927 = 32927 +a32928 = 32928 +a32929 = 32929 +a32930 = 32930 +a32931 = 32931 +a32932 = 32932 +a32933 = 32933 +a32934 = 32934 +a32935 = 32935 +a32936 = 32936 +a32937 = 32937 +a32938 = 32938 +a32939 = 32939 +a32940 = 32940 +a32941 = 32941 +a32942 = 32942 +a32943 = 32943 +a32944 = 32944 +a32945 = 32945 +a32946 = 32946 +a32947 = 32947 +a32948 = 32948 +a32949 = 32949 +a32950 = 32950 +a32951 = 32951 +a32952 = 32952 +a32953 = 32953 +a32954 = 32954 +a32955 = 32955 +a32956 = 32956 +a32957 = 32957 +a32958 = 32958 +a32959 = 32959 +a32960 = 32960 +a32961 = 32961 +a32962 = 32962 +a32963 = 32963 +a32964 = 32964 +a32965 = 32965 +a32966 = 32966 +a32967 = 32967 +a32968 = 32968 +a32969 = 32969 +a32970 = 32970 +a32971 = 32971 +a32972 = 32972 +a32973 = 32973 +a32974 = 32974 +a32975 = 32975 +a32976 = 32976 +a32977 = 32977 +a32978 = 32978 +a32979 = 32979 +a32980 = 32980 +a32981 = 32981 +a32982 = 32982 +a32983 = 32983 +a32984 = 32984 +a32985 = 32985 +a32986 = 32986 +a32987 = 32987 +a32988 = 32988 +a32989 = 32989 +a32990 = 32990 +a32991 = 32991 +a32992 = 32992 +a32993 = 32993 +a32994 = 32994 +a32995 = 32995 +a32996 = 32996 +a32997 = 32997 +a32998 = 32998 +a32999 = 32999 +a33000 = 33000 +a33001 = 33001 +a33002 = 33002 +a33003 = 33003 +a33004 = 33004 +a33005 = 33005 +a33006 = 33006 +a33007 = 33007 +a33008 = 33008 +a33009 = 33009 +a33010 = 33010 +a33011 = 33011 +a33012 = 33012 +a33013 = 33013 +a33014 = 33014 +a33015 = 33015 +a33016 = 33016 +a33017 = 33017 +a33018 = 33018 +a33019 = 33019 +a33020 = 33020 +a33021 = 33021 +a33022 = 33022 +a33023 = 33023 +a33024 = 33024 +a33025 = 33025 +a33026 = 33026 +a33027 = 33027 +a33028 = 33028 +a33029 = 33029 +a33030 = 33030 +a33031 = 33031 +a33032 = 33032 +a33033 = 33033 +a33034 = 33034 +a33035 = 33035 +a33036 = 33036 +a33037 = 33037 +a33038 = 33038 +a33039 = 33039 +a33040 = 33040 +a33041 = 33041 +a33042 = 33042 +a33043 = 33043 +a33044 = 33044 +a33045 = 33045 +a33046 = 33046 +a33047 = 33047 +a33048 = 33048 +a33049 = 33049 +a33050 = 33050 +a33051 = 33051 +a33052 = 33052 +a33053 = 33053 +a33054 = 33054 +a33055 = 33055 +a33056 = 33056 +a33057 = 33057 +a33058 = 33058 +a33059 = 33059 +a33060 = 33060 +a33061 = 33061 +a33062 = 33062 +a33063 = 33063 +a33064 = 33064 +a33065 = 33065 +a33066 = 33066 +a33067 = 33067 +a33068 = 33068 +a33069 = 33069 +a33070 = 33070 +a33071 = 33071 +a33072 = 33072 +a33073 = 33073 +a33074 = 33074 +a33075 = 33075 +a33076 = 33076 +a33077 = 33077 +a33078 = 33078 +a33079 = 33079 +a33080 = 33080 +a33081 = 33081 +a33082 = 33082 +a33083 = 33083 +a33084 = 33084 +a33085 = 33085 +a33086 = 33086 +a33087 = 33087 +a33088 = 33088 +a33089 = 33089 +a33090 = 33090 +a33091 = 33091 +a33092 = 33092 +a33093 = 33093 +a33094 = 33094 +a33095 = 33095 +a33096 = 33096 +a33097 = 33097 +a33098 = 33098 +a33099 = 33099 +a33100 = 33100 +a33101 = 33101 +a33102 = 33102 +a33103 = 33103 +a33104 = 33104 +a33105 = 33105 +a33106 = 33106 +a33107 = 33107 +a33108 = 33108 +a33109 = 33109 +a33110 = 33110 +a33111 = 33111 +a33112 = 33112 +a33113 = 33113 +a33114 = 33114 +a33115 = 33115 +a33116 = 33116 +a33117 = 33117 +a33118 = 33118 +a33119 = 33119 +a33120 = 33120 +a33121 = 33121 +a33122 = 33122 +a33123 = 33123 +a33124 = 33124 +a33125 = 33125 +a33126 = 33126 +a33127 = 33127 +a33128 = 33128 +a33129 = 33129 +a33130 = 33130 +a33131 = 33131 +a33132 = 33132 +a33133 = 33133 +a33134 = 33134 +a33135 = 33135 +a33136 = 33136 +a33137 = 33137 +a33138 = 33138 +a33139 = 33139 +a33140 = 33140 +a33141 = 33141 +a33142 = 33142 +a33143 = 33143 +a33144 = 33144 +a33145 = 33145 +a33146 = 33146 +a33147 = 33147 +a33148 = 33148 +a33149 = 33149 +a33150 = 33150 +a33151 = 33151 +a33152 = 33152 +a33153 = 33153 +a33154 = 33154 +a33155 = 33155 +a33156 = 33156 +a33157 = 33157 +a33158 = 33158 +a33159 = 33159 +a33160 = 33160 +a33161 = 33161 +a33162 = 33162 +a33163 = 33163 +a33164 = 33164 +a33165 = 33165 +a33166 = 33166 +a33167 = 33167 +a33168 = 33168 +a33169 = 33169 +a33170 = 33170 +a33171 = 33171 +a33172 = 33172 +a33173 = 33173 +a33174 = 33174 +a33175 = 33175 +a33176 = 33176 +a33177 = 33177 +a33178 = 33178 +a33179 = 33179 +a33180 = 33180 +a33181 = 33181 +a33182 = 33182 +a33183 = 33183 +a33184 = 33184 +a33185 = 33185 +a33186 = 33186 +a33187 = 33187 +a33188 = 33188 +a33189 = 33189 +a33190 = 33190 +a33191 = 33191 +a33192 = 33192 +a33193 = 33193 +a33194 = 33194 +a33195 = 33195 +a33196 = 33196 +a33197 = 33197 +a33198 = 33198 +a33199 = 33199 +a33200 = 33200 +a33201 = 33201 +a33202 = 33202 +a33203 = 33203 +a33204 = 33204 +a33205 = 33205 +a33206 = 33206 +a33207 = 33207 +a33208 = 33208 +a33209 = 33209 +a33210 = 33210 +a33211 = 33211 +a33212 = 33212 +a33213 = 33213 +a33214 = 33214 +a33215 = 33215 +a33216 = 33216 +a33217 = 33217 +a33218 = 33218 +a33219 = 33219 +a33220 = 33220 +a33221 = 33221 +a33222 = 33222 +a33223 = 33223 +a33224 = 33224 +a33225 = 33225 +a33226 = 33226 +a33227 = 33227 +a33228 = 33228 +a33229 = 33229 +a33230 = 33230 +a33231 = 33231 +a33232 = 33232 +a33233 = 33233 +a33234 = 33234 +a33235 = 33235 +a33236 = 33236 +a33237 = 33237 +a33238 = 33238 +a33239 = 33239 +a33240 = 33240 +a33241 = 33241 +a33242 = 33242 +a33243 = 33243 +a33244 = 33244 +a33245 = 33245 +a33246 = 33246 +a33247 = 33247 +a33248 = 33248 +a33249 = 33249 +a33250 = 33250 +a33251 = 33251 +a33252 = 33252 +a33253 = 33253 +a33254 = 33254 +a33255 = 33255 +a33256 = 33256 +a33257 = 33257 +a33258 = 33258 +a33259 = 33259 +a33260 = 33260 +a33261 = 33261 +a33262 = 33262 +a33263 = 33263 +a33264 = 33264 +a33265 = 33265 +a33266 = 33266 +a33267 = 33267 +a33268 = 33268 +a33269 = 33269 +a33270 = 33270 +a33271 = 33271 +a33272 = 33272 +a33273 = 33273 +a33274 = 33274 +a33275 = 33275 +a33276 = 33276 +a33277 = 33277 +a33278 = 33278 +a33279 = 33279 +a33280 = 33280 +a33281 = 33281 +a33282 = 33282 +a33283 = 33283 +a33284 = 33284 +a33285 = 33285 +a33286 = 33286 +a33287 = 33287 +a33288 = 33288 +a33289 = 33289 +a33290 = 33290 +a33291 = 33291 +a33292 = 33292 +a33293 = 33293 +a33294 = 33294 +a33295 = 33295 +a33296 = 33296 +a33297 = 33297 +a33298 = 33298 +a33299 = 33299 +a33300 = 33300 +a33301 = 33301 +a33302 = 33302 +a33303 = 33303 +a33304 = 33304 +a33305 = 33305 +a33306 = 33306 +a33307 = 33307 +a33308 = 33308 +a33309 = 33309 +a33310 = 33310 +a33311 = 33311 +a33312 = 33312 +a33313 = 33313 +a33314 = 33314 +a33315 = 33315 +a33316 = 33316 +a33317 = 33317 +a33318 = 33318 +a33319 = 33319 +a33320 = 33320 +a33321 = 33321 +a33322 = 33322 +a33323 = 33323 +a33324 = 33324 +a33325 = 33325 +a33326 = 33326 +a33327 = 33327 +a33328 = 33328 +a33329 = 33329 +a33330 = 33330 +a33331 = 33331 +a33332 = 33332 +a33333 = 33333 +a33334 = 33334 +a33335 = 33335 +a33336 = 33336 +a33337 = 33337 +a33338 = 33338 +a33339 = 33339 +a33340 = 33340 +a33341 = 33341 +a33342 = 33342 +a33343 = 33343 +a33344 = 33344 +a33345 = 33345 +a33346 = 33346 +a33347 = 33347 +a33348 = 33348 +a33349 = 33349 +a33350 = 33350 +a33351 = 33351 +a33352 = 33352 +a33353 = 33353 +a33354 = 33354 +a33355 = 33355 +a33356 = 33356 +a33357 = 33357 +a33358 = 33358 +a33359 = 33359 +a33360 = 33360 +a33361 = 33361 +a33362 = 33362 +a33363 = 33363 +a33364 = 33364 +a33365 = 33365 +a33366 = 33366 +a33367 = 33367 +a33368 = 33368 +a33369 = 33369 +a33370 = 33370 +a33371 = 33371 +a33372 = 33372 +a33373 = 33373 +a33374 = 33374 +a33375 = 33375 +a33376 = 33376 +a33377 = 33377 +a33378 = 33378 +a33379 = 33379 +a33380 = 33380 +a33381 = 33381 +a33382 = 33382 +a33383 = 33383 +a33384 = 33384 +a33385 = 33385 +a33386 = 33386 +a33387 = 33387 +a33388 = 33388 +a33389 = 33389 +a33390 = 33390 +a33391 = 33391 +a33392 = 33392 +a33393 = 33393 +a33394 = 33394 +a33395 = 33395 +a33396 = 33396 +a33397 = 33397 +a33398 = 33398 +a33399 = 33399 +a33400 = 33400 +a33401 = 33401 +a33402 = 33402 +a33403 = 33403 +a33404 = 33404 +a33405 = 33405 +a33406 = 33406 +a33407 = 33407 +a33408 = 33408 +a33409 = 33409 +a33410 = 33410 +a33411 = 33411 +a33412 = 33412 +a33413 = 33413 +a33414 = 33414 +a33415 = 33415 +a33416 = 33416 +a33417 = 33417 +a33418 = 33418 +a33419 = 33419 +a33420 = 33420 +a33421 = 33421 +a33422 = 33422 +a33423 = 33423 +a33424 = 33424 +a33425 = 33425 +a33426 = 33426 +a33427 = 33427 +a33428 = 33428 +a33429 = 33429 +a33430 = 33430 +a33431 = 33431 +a33432 = 33432 +a33433 = 33433 +a33434 = 33434 +a33435 = 33435 +a33436 = 33436 +a33437 = 33437 +a33438 = 33438 +a33439 = 33439 +a33440 = 33440 +a33441 = 33441 +a33442 = 33442 +a33443 = 33443 +a33444 = 33444 +a33445 = 33445 +a33446 = 33446 +a33447 = 33447 +a33448 = 33448 +a33449 = 33449 +a33450 = 33450 +a33451 = 33451 +a33452 = 33452 +a33453 = 33453 +a33454 = 33454 +a33455 = 33455 +a33456 = 33456 +a33457 = 33457 +a33458 = 33458 +a33459 = 33459 +a33460 = 33460 +a33461 = 33461 +a33462 = 33462 +a33463 = 33463 +a33464 = 33464 +a33465 = 33465 +a33466 = 33466 +a33467 = 33467 +a33468 = 33468 +a33469 = 33469 +a33470 = 33470 +a33471 = 33471 +a33472 = 33472 +a33473 = 33473 +a33474 = 33474 +a33475 = 33475 +a33476 = 33476 +a33477 = 33477 +a33478 = 33478 +a33479 = 33479 +a33480 = 33480 +a33481 = 33481 +a33482 = 33482 +a33483 = 33483 +a33484 = 33484 +a33485 = 33485 +a33486 = 33486 +a33487 = 33487 +a33488 = 33488 +a33489 = 33489 +a33490 = 33490 +a33491 = 33491 +a33492 = 33492 +a33493 = 33493 +a33494 = 33494 +a33495 = 33495 +a33496 = 33496 +a33497 = 33497 +a33498 = 33498 +a33499 = 33499 +a33500 = 33500 +a33501 = 33501 +a33502 = 33502 +a33503 = 33503 +a33504 = 33504 +a33505 = 33505 +a33506 = 33506 +a33507 = 33507 +a33508 = 33508 +a33509 = 33509 +a33510 = 33510 +a33511 = 33511 +a33512 = 33512 +a33513 = 33513 +a33514 = 33514 +a33515 = 33515 +a33516 = 33516 +a33517 = 33517 +a33518 = 33518 +a33519 = 33519 +a33520 = 33520 +a33521 = 33521 +a33522 = 33522 +a33523 = 33523 +a33524 = 33524 +a33525 = 33525 +a33526 = 33526 +a33527 = 33527 +a33528 = 33528 +a33529 = 33529 +a33530 = 33530 +a33531 = 33531 +a33532 = 33532 +a33533 = 33533 +a33534 = 33534 +a33535 = 33535 +a33536 = 33536 +a33537 = 33537 +a33538 = 33538 +a33539 = 33539 +a33540 = 33540 +a33541 = 33541 +a33542 = 33542 +a33543 = 33543 +a33544 = 33544 +a33545 = 33545 +a33546 = 33546 +a33547 = 33547 +a33548 = 33548 +a33549 = 33549 +a33550 = 33550 +a33551 = 33551 +a33552 = 33552 +a33553 = 33553 +a33554 = 33554 +a33555 = 33555 +a33556 = 33556 +a33557 = 33557 +a33558 = 33558 +a33559 = 33559 +a33560 = 33560 +a33561 = 33561 +a33562 = 33562 +a33563 = 33563 +a33564 = 33564 +a33565 = 33565 +a33566 = 33566 +a33567 = 33567 +a33568 = 33568 +a33569 = 33569 +a33570 = 33570 +a33571 = 33571 +a33572 = 33572 +a33573 = 33573 +a33574 = 33574 +a33575 = 33575 +a33576 = 33576 +a33577 = 33577 +a33578 = 33578 +a33579 = 33579 +a33580 = 33580 +a33581 = 33581 +a33582 = 33582 +a33583 = 33583 +a33584 = 33584 +a33585 = 33585 +a33586 = 33586 +a33587 = 33587 +a33588 = 33588 +a33589 = 33589 +a33590 = 33590 +a33591 = 33591 +a33592 = 33592 +a33593 = 33593 +a33594 = 33594 +a33595 = 33595 +a33596 = 33596 +a33597 = 33597 +a33598 = 33598 +a33599 = 33599 +a33600 = 33600 +a33601 = 33601 +a33602 = 33602 +a33603 = 33603 +a33604 = 33604 +a33605 = 33605 +a33606 = 33606 +a33607 = 33607 +a33608 = 33608 +a33609 = 33609 +a33610 = 33610 +a33611 = 33611 +a33612 = 33612 +a33613 = 33613 +a33614 = 33614 +a33615 = 33615 +a33616 = 33616 +a33617 = 33617 +a33618 = 33618 +a33619 = 33619 +a33620 = 33620 +a33621 = 33621 +a33622 = 33622 +a33623 = 33623 +a33624 = 33624 +a33625 = 33625 +a33626 = 33626 +a33627 = 33627 +a33628 = 33628 +a33629 = 33629 +a33630 = 33630 +a33631 = 33631 +a33632 = 33632 +a33633 = 33633 +a33634 = 33634 +a33635 = 33635 +a33636 = 33636 +a33637 = 33637 +a33638 = 33638 +a33639 = 33639 +a33640 = 33640 +a33641 = 33641 +a33642 = 33642 +a33643 = 33643 +a33644 = 33644 +a33645 = 33645 +a33646 = 33646 +a33647 = 33647 +a33648 = 33648 +a33649 = 33649 +a33650 = 33650 +a33651 = 33651 +a33652 = 33652 +a33653 = 33653 +a33654 = 33654 +a33655 = 33655 +a33656 = 33656 +a33657 = 33657 +a33658 = 33658 +a33659 = 33659 +a33660 = 33660 +a33661 = 33661 +a33662 = 33662 +a33663 = 33663 +a33664 = 33664 +a33665 = 33665 +a33666 = 33666 +a33667 = 33667 +a33668 = 33668 +a33669 = 33669 +a33670 = 33670 +a33671 = 33671 +a33672 = 33672 +a33673 = 33673 +a33674 = 33674 +a33675 = 33675 +a33676 = 33676 +a33677 = 33677 +a33678 = 33678 +a33679 = 33679 +a33680 = 33680 +a33681 = 33681 +a33682 = 33682 +a33683 = 33683 +a33684 = 33684 +a33685 = 33685 +a33686 = 33686 +a33687 = 33687 +a33688 = 33688 +a33689 = 33689 +a33690 = 33690 +a33691 = 33691 +a33692 = 33692 +a33693 = 33693 +a33694 = 33694 +a33695 = 33695 +a33696 = 33696 +a33697 = 33697 +a33698 = 33698 +a33699 = 33699 +a33700 = 33700 +a33701 = 33701 +a33702 = 33702 +a33703 = 33703 +a33704 = 33704 +a33705 = 33705 +a33706 = 33706 +a33707 = 33707 +a33708 = 33708 +a33709 = 33709 +a33710 = 33710 +a33711 = 33711 +a33712 = 33712 +a33713 = 33713 +a33714 = 33714 +a33715 = 33715 +a33716 = 33716 +a33717 = 33717 +a33718 = 33718 +a33719 = 33719 +a33720 = 33720 +a33721 = 33721 +a33722 = 33722 +a33723 = 33723 +a33724 = 33724 +a33725 = 33725 +a33726 = 33726 +a33727 = 33727 +a33728 = 33728 +a33729 = 33729 +a33730 = 33730 +a33731 = 33731 +a33732 = 33732 +a33733 = 33733 +a33734 = 33734 +a33735 = 33735 +a33736 = 33736 +a33737 = 33737 +a33738 = 33738 +a33739 = 33739 +a33740 = 33740 +a33741 = 33741 +a33742 = 33742 +a33743 = 33743 +a33744 = 33744 +a33745 = 33745 +a33746 = 33746 +a33747 = 33747 +a33748 = 33748 +a33749 = 33749 +a33750 = 33750 +a33751 = 33751 +a33752 = 33752 +a33753 = 33753 +a33754 = 33754 +a33755 = 33755 +a33756 = 33756 +a33757 = 33757 +a33758 = 33758 +a33759 = 33759 +a33760 = 33760 +a33761 = 33761 +a33762 = 33762 +a33763 = 33763 +a33764 = 33764 +a33765 = 33765 +a33766 = 33766 +a33767 = 33767 +a33768 = 33768 +a33769 = 33769 +a33770 = 33770 +a33771 = 33771 +a33772 = 33772 +a33773 = 33773 +a33774 = 33774 +a33775 = 33775 +a33776 = 33776 +a33777 = 33777 +a33778 = 33778 +a33779 = 33779 +a33780 = 33780 +a33781 = 33781 +a33782 = 33782 +a33783 = 33783 +a33784 = 33784 +a33785 = 33785 +a33786 = 33786 +a33787 = 33787 +a33788 = 33788 +a33789 = 33789 +a33790 = 33790 +a33791 = 33791 +a33792 = 33792 +a33793 = 33793 +a33794 = 33794 +a33795 = 33795 +a33796 = 33796 +a33797 = 33797 +a33798 = 33798 +a33799 = 33799 +a33800 = 33800 +a33801 = 33801 +a33802 = 33802 +a33803 = 33803 +a33804 = 33804 +a33805 = 33805 +a33806 = 33806 +a33807 = 33807 +a33808 = 33808 +a33809 = 33809 +a33810 = 33810 +a33811 = 33811 +a33812 = 33812 +a33813 = 33813 +a33814 = 33814 +a33815 = 33815 +a33816 = 33816 +a33817 = 33817 +a33818 = 33818 +a33819 = 33819 +a33820 = 33820 +a33821 = 33821 +a33822 = 33822 +a33823 = 33823 +a33824 = 33824 +a33825 = 33825 +a33826 = 33826 +a33827 = 33827 +a33828 = 33828 +a33829 = 33829 +a33830 = 33830 +a33831 = 33831 +a33832 = 33832 +a33833 = 33833 +a33834 = 33834 +a33835 = 33835 +a33836 = 33836 +a33837 = 33837 +a33838 = 33838 +a33839 = 33839 +a33840 = 33840 +a33841 = 33841 +a33842 = 33842 +a33843 = 33843 +a33844 = 33844 +a33845 = 33845 +a33846 = 33846 +a33847 = 33847 +a33848 = 33848 +a33849 = 33849 +a33850 = 33850 +a33851 = 33851 +a33852 = 33852 +a33853 = 33853 +a33854 = 33854 +a33855 = 33855 +a33856 = 33856 +a33857 = 33857 +a33858 = 33858 +a33859 = 33859 +a33860 = 33860 +a33861 = 33861 +a33862 = 33862 +a33863 = 33863 +a33864 = 33864 +a33865 = 33865 +a33866 = 33866 +a33867 = 33867 +a33868 = 33868 +a33869 = 33869 +a33870 = 33870 +a33871 = 33871 +a33872 = 33872 +a33873 = 33873 +a33874 = 33874 +a33875 = 33875 +a33876 = 33876 +a33877 = 33877 +a33878 = 33878 +a33879 = 33879 +a33880 = 33880 +a33881 = 33881 +a33882 = 33882 +a33883 = 33883 +a33884 = 33884 +a33885 = 33885 +a33886 = 33886 +a33887 = 33887 +a33888 = 33888 +a33889 = 33889 +a33890 = 33890 +a33891 = 33891 +a33892 = 33892 +a33893 = 33893 +a33894 = 33894 +a33895 = 33895 +a33896 = 33896 +a33897 = 33897 +a33898 = 33898 +a33899 = 33899 +a33900 = 33900 +a33901 = 33901 +a33902 = 33902 +a33903 = 33903 +a33904 = 33904 +a33905 = 33905 +a33906 = 33906 +a33907 = 33907 +a33908 = 33908 +a33909 = 33909 +a33910 = 33910 +a33911 = 33911 +a33912 = 33912 +a33913 = 33913 +a33914 = 33914 +a33915 = 33915 +a33916 = 33916 +a33917 = 33917 +a33918 = 33918 +a33919 = 33919 +a33920 = 33920 +a33921 = 33921 +a33922 = 33922 +a33923 = 33923 +a33924 = 33924 +a33925 = 33925 +a33926 = 33926 +a33927 = 33927 +a33928 = 33928 +a33929 = 33929 +a33930 = 33930 +a33931 = 33931 +a33932 = 33932 +a33933 = 33933 +a33934 = 33934 +a33935 = 33935 +a33936 = 33936 +a33937 = 33937 +a33938 = 33938 +a33939 = 33939 +a33940 = 33940 +a33941 = 33941 +a33942 = 33942 +a33943 = 33943 +a33944 = 33944 +a33945 = 33945 +a33946 = 33946 +a33947 = 33947 +a33948 = 33948 +a33949 = 33949 +a33950 = 33950 +a33951 = 33951 +a33952 = 33952 +a33953 = 33953 +a33954 = 33954 +a33955 = 33955 +a33956 = 33956 +a33957 = 33957 +a33958 = 33958 +a33959 = 33959 +a33960 = 33960 +a33961 = 33961 +a33962 = 33962 +a33963 = 33963 +a33964 = 33964 +a33965 = 33965 +a33966 = 33966 +a33967 = 33967 +a33968 = 33968 +a33969 = 33969 +a33970 = 33970 +a33971 = 33971 +a33972 = 33972 +a33973 = 33973 +a33974 = 33974 +a33975 = 33975 +a33976 = 33976 +a33977 = 33977 +a33978 = 33978 +a33979 = 33979 +a33980 = 33980 +a33981 = 33981 +a33982 = 33982 +a33983 = 33983 +a33984 = 33984 +a33985 = 33985 +a33986 = 33986 +a33987 = 33987 +a33988 = 33988 +a33989 = 33989 +a33990 = 33990 +a33991 = 33991 +a33992 = 33992 +a33993 = 33993 +a33994 = 33994 +a33995 = 33995 +a33996 = 33996 +a33997 = 33997 +a33998 = 33998 +a33999 = 33999 +a34000 = 34000 +a34001 = 34001 +a34002 = 34002 +a34003 = 34003 +a34004 = 34004 +a34005 = 34005 +a34006 = 34006 +a34007 = 34007 +a34008 = 34008 +a34009 = 34009 +a34010 = 34010 +a34011 = 34011 +a34012 = 34012 +a34013 = 34013 +a34014 = 34014 +a34015 = 34015 +a34016 = 34016 +a34017 = 34017 +a34018 = 34018 +a34019 = 34019 +a34020 = 34020 +a34021 = 34021 +a34022 = 34022 +a34023 = 34023 +a34024 = 34024 +a34025 = 34025 +a34026 = 34026 +a34027 = 34027 +a34028 = 34028 +a34029 = 34029 +a34030 = 34030 +a34031 = 34031 +a34032 = 34032 +a34033 = 34033 +a34034 = 34034 +a34035 = 34035 +a34036 = 34036 +a34037 = 34037 +a34038 = 34038 +a34039 = 34039 +a34040 = 34040 +a34041 = 34041 +a34042 = 34042 +a34043 = 34043 +a34044 = 34044 +a34045 = 34045 +a34046 = 34046 +a34047 = 34047 +a34048 = 34048 +a34049 = 34049 +a34050 = 34050 +a34051 = 34051 +a34052 = 34052 +a34053 = 34053 +a34054 = 34054 +a34055 = 34055 +a34056 = 34056 +a34057 = 34057 +a34058 = 34058 +a34059 = 34059 +a34060 = 34060 +a34061 = 34061 +a34062 = 34062 +a34063 = 34063 +a34064 = 34064 +a34065 = 34065 +a34066 = 34066 +a34067 = 34067 +a34068 = 34068 +a34069 = 34069 +a34070 = 34070 +a34071 = 34071 +a34072 = 34072 +a34073 = 34073 +a34074 = 34074 +a34075 = 34075 +a34076 = 34076 +a34077 = 34077 +a34078 = 34078 +a34079 = 34079 +a34080 = 34080 +a34081 = 34081 +a34082 = 34082 +a34083 = 34083 +a34084 = 34084 +a34085 = 34085 +a34086 = 34086 +a34087 = 34087 +a34088 = 34088 +a34089 = 34089 +a34090 = 34090 +a34091 = 34091 +a34092 = 34092 +a34093 = 34093 +a34094 = 34094 +a34095 = 34095 +a34096 = 34096 +a34097 = 34097 +a34098 = 34098 +a34099 = 34099 +a34100 = 34100 +a34101 = 34101 +a34102 = 34102 +a34103 = 34103 +a34104 = 34104 +a34105 = 34105 +a34106 = 34106 +a34107 = 34107 +a34108 = 34108 +a34109 = 34109 +a34110 = 34110 +a34111 = 34111 +a34112 = 34112 +a34113 = 34113 +a34114 = 34114 +a34115 = 34115 +a34116 = 34116 +a34117 = 34117 +a34118 = 34118 +a34119 = 34119 +a34120 = 34120 +a34121 = 34121 +a34122 = 34122 +a34123 = 34123 +a34124 = 34124 +a34125 = 34125 +a34126 = 34126 +a34127 = 34127 +a34128 = 34128 +a34129 = 34129 +a34130 = 34130 +a34131 = 34131 +a34132 = 34132 +a34133 = 34133 +a34134 = 34134 +a34135 = 34135 +a34136 = 34136 +a34137 = 34137 +a34138 = 34138 +a34139 = 34139 +a34140 = 34140 +a34141 = 34141 +a34142 = 34142 +a34143 = 34143 +a34144 = 34144 +a34145 = 34145 +a34146 = 34146 +a34147 = 34147 +a34148 = 34148 +a34149 = 34149 +a34150 = 34150 +a34151 = 34151 +a34152 = 34152 +a34153 = 34153 +a34154 = 34154 +a34155 = 34155 +a34156 = 34156 +a34157 = 34157 +a34158 = 34158 +a34159 = 34159 +a34160 = 34160 +a34161 = 34161 +a34162 = 34162 +a34163 = 34163 +a34164 = 34164 +a34165 = 34165 +a34166 = 34166 +a34167 = 34167 +a34168 = 34168 +a34169 = 34169 +a34170 = 34170 +a34171 = 34171 +a34172 = 34172 +a34173 = 34173 +a34174 = 34174 +a34175 = 34175 +a34176 = 34176 +a34177 = 34177 +a34178 = 34178 +a34179 = 34179 +a34180 = 34180 +a34181 = 34181 +a34182 = 34182 +a34183 = 34183 +a34184 = 34184 +a34185 = 34185 +a34186 = 34186 +a34187 = 34187 +a34188 = 34188 +a34189 = 34189 +a34190 = 34190 +a34191 = 34191 +a34192 = 34192 +a34193 = 34193 +a34194 = 34194 +a34195 = 34195 +a34196 = 34196 +a34197 = 34197 +a34198 = 34198 +a34199 = 34199 +a34200 = 34200 +a34201 = 34201 +a34202 = 34202 +a34203 = 34203 +a34204 = 34204 +a34205 = 34205 +a34206 = 34206 +a34207 = 34207 +a34208 = 34208 +a34209 = 34209 +a34210 = 34210 +a34211 = 34211 +a34212 = 34212 +a34213 = 34213 +a34214 = 34214 +a34215 = 34215 +a34216 = 34216 +a34217 = 34217 +a34218 = 34218 +a34219 = 34219 +a34220 = 34220 +a34221 = 34221 +a34222 = 34222 +a34223 = 34223 +a34224 = 34224 +a34225 = 34225 +a34226 = 34226 +a34227 = 34227 +a34228 = 34228 +a34229 = 34229 +a34230 = 34230 +a34231 = 34231 +a34232 = 34232 +a34233 = 34233 +a34234 = 34234 +a34235 = 34235 +a34236 = 34236 +a34237 = 34237 +a34238 = 34238 +a34239 = 34239 +a34240 = 34240 +a34241 = 34241 +a34242 = 34242 +a34243 = 34243 +a34244 = 34244 +a34245 = 34245 +a34246 = 34246 +a34247 = 34247 +a34248 = 34248 +a34249 = 34249 +a34250 = 34250 +a34251 = 34251 +a34252 = 34252 +a34253 = 34253 +a34254 = 34254 +a34255 = 34255 +a34256 = 34256 +a34257 = 34257 +a34258 = 34258 +a34259 = 34259 +a34260 = 34260 +a34261 = 34261 +a34262 = 34262 +a34263 = 34263 +a34264 = 34264 +a34265 = 34265 +a34266 = 34266 +a34267 = 34267 +a34268 = 34268 +a34269 = 34269 +a34270 = 34270 +a34271 = 34271 +a34272 = 34272 +a34273 = 34273 +a34274 = 34274 +a34275 = 34275 +a34276 = 34276 +a34277 = 34277 +a34278 = 34278 +a34279 = 34279 +a34280 = 34280 +a34281 = 34281 +a34282 = 34282 +a34283 = 34283 +a34284 = 34284 +a34285 = 34285 +a34286 = 34286 +a34287 = 34287 +a34288 = 34288 +a34289 = 34289 +a34290 = 34290 +a34291 = 34291 +a34292 = 34292 +a34293 = 34293 +a34294 = 34294 +a34295 = 34295 +a34296 = 34296 +a34297 = 34297 +a34298 = 34298 +a34299 = 34299 +a34300 = 34300 +a34301 = 34301 +a34302 = 34302 +a34303 = 34303 +a34304 = 34304 +a34305 = 34305 +a34306 = 34306 +a34307 = 34307 +a34308 = 34308 +a34309 = 34309 +a34310 = 34310 +a34311 = 34311 +a34312 = 34312 +a34313 = 34313 +a34314 = 34314 +a34315 = 34315 +a34316 = 34316 +a34317 = 34317 +a34318 = 34318 +a34319 = 34319 +a34320 = 34320 +a34321 = 34321 +a34322 = 34322 +a34323 = 34323 +a34324 = 34324 +a34325 = 34325 +a34326 = 34326 +a34327 = 34327 +a34328 = 34328 +a34329 = 34329 +a34330 = 34330 +a34331 = 34331 +a34332 = 34332 +a34333 = 34333 +a34334 = 34334 +a34335 = 34335 +a34336 = 34336 +a34337 = 34337 +a34338 = 34338 +a34339 = 34339 +a34340 = 34340 +a34341 = 34341 +a34342 = 34342 +a34343 = 34343 +a34344 = 34344 +a34345 = 34345 +a34346 = 34346 +a34347 = 34347 +a34348 = 34348 +a34349 = 34349 +a34350 = 34350 +a34351 = 34351 +a34352 = 34352 +a34353 = 34353 +a34354 = 34354 +a34355 = 34355 +a34356 = 34356 +a34357 = 34357 +a34358 = 34358 +a34359 = 34359 +a34360 = 34360 +a34361 = 34361 +a34362 = 34362 +a34363 = 34363 +a34364 = 34364 +a34365 = 34365 +a34366 = 34366 +a34367 = 34367 +a34368 = 34368 +a34369 = 34369 +a34370 = 34370 +a34371 = 34371 +a34372 = 34372 +a34373 = 34373 +a34374 = 34374 +a34375 = 34375 +a34376 = 34376 +a34377 = 34377 +a34378 = 34378 +a34379 = 34379 +a34380 = 34380 +a34381 = 34381 +a34382 = 34382 +a34383 = 34383 +a34384 = 34384 +a34385 = 34385 +a34386 = 34386 +a34387 = 34387 +a34388 = 34388 +a34389 = 34389 +a34390 = 34390 +a34391 = 34391 +a34392 = 34392 +a34393 = 34393 +a34394 = 34394 +a34395 = 34395 +a34396 = 34396 +a34397 = 34397 +a34398 = 34398 +a34399 = 34399 +a34400 = 34400 +a34401 = 34401 +a34402 = 34402 +a34403 = 34403 +a34404 = 34404 +a34405 = 34405 +a34406 = 34406 +a34407 = 34407 +a34408 = 34408 +a34409 = 34409 +a34410 = 34410 +a34411 = 34411 +a34412 = 34412 +a34413 = 34413 +a34414 = 34414 +a34415 = 34415 +a34416 = 34416 +a34417 = 34417 +a34418 = 34418 +a34419 = 34419 +a34420 = 34420 +a34421 = 34421 +a34422 = 34422 +a34423 = 34423 +a34424 = 34424 +a34425 = 34425 +a34426 = 34426 +a34427 = 34427 +a34428 = 34428 +a34429 = 34429 +a34430 = 34430 +a34431 = 34431 +a34432 = 34432 +a34433 = 34433 +a34434 = 34434 +a34435 = 34435 +a34436 = 34436 +a34437 = 34437 +a34438 = 34438 +a34439 = 34439 +a34440 = 34440 +a34441 = 34441 +a34442 = 34442 +a34443 = 34443 +a34444 = 34444 +a34445 = 34445 +a34446 = 34446 +a34447 = 34447 +a34448 = 34448 +a34449 = 34449 +a34450 = 34450 +a34451 = 34451 +a34452 = 34452 +a34453 = 34453 +a34454 = 34454 +a34455 = 34455 +a34456 = 34456 +a34457 = 34457 +a34458 = 34458 +a34459 = 34459 +a34460 = 34460 +a34461 = 34461 +a34462 = 34462 +a34463 = 34463 +a34464 = 34464 +a34465 = 34465 +a34466 = 34466 +a34467 = 34467 +a34468 = 34468 +a34469 = 34469 +a34470 = 34470 +a34471 = 34471 +a34472 = 34472 +a34473 = 34473 +a34474 = 34474 +a34475 = 34475 +a34476 = 34476 +a34477 = 34477 +a34478 = 34478 +a34479 = 34479 +a34480 = 34480 +a34481 = 34481 +a34482 = 34482 +a34483 = 34483 +a34484 = 34484 +a34485 = 34485 +a34486 = 34486 +a34487 = 34487 +a34488 = 34488 +a34489 = 34489 +a34490 = 34490 +a34491 = 34491 +a34492 = 34492 +a34493 = 34493 +a34494 = 34494 +a34495 = 34495 +a34496 = 34496 +a34497 = 34497 +a34498 = 34498 +a34499 = 34499 +a34500 = 34500 +a34501 = 34501 +a34502 = 34502 +a34503 = 34503 +a34504 = 34504 +a34505 = 34505 +a34506 = 34506 +a34507 = 34507 +a34508 = 34508 +a34509 = 34509 +a34510 = 34510 +a34511 = 34511 +a34512 = 34512 +a34513 = 34513 +a34514 = 34514 +a34515 = 34515 +a34516 = 34516 +a34517 = 34517 +a34518 = 34518 +a34519 = 34519 +a34520 = 34520 +a34521 = 34521 +a34522 = 34522 +a34523 = 34523 +a34524 = 34524 +a34525 = 34525 +a34526 = 34526 +a34527 = 34527 +a34528 = 34528 +a34529 = 34529 +a34530 = 34530 +a34531 = 34531 +a34532 = 34532 +a34533 = 34533 +a34534 = 34534 +a34535 = 34535 +a34536 = 34536 +a34537 = 34537 +a34538 = 34538 +a34539 = 34539 +a34540 = 34540 +a34541 = 34541 +a34542 = 34542 +a34543 = 34543 +a34544 = 34544 +a34545 = 34545 +a34546 = 34546 +a34547 = 34547 +a34548 = 34548 +a34549 = 34549 +a34550 = 34550 +a34551 = 34551 +a34552 = 34552 +a34553 = 34553 +a34554 = 34554 +a34555 = 34555 +a34556 = 34556 +a34557 = 34557 +a34558 = 34558 +a34559 = 34559 +a34560 = 34560 +a34561 = 34561 +a34562 = 34562 +a34563 = 34563 +a34564 = 34564 +a34565 = 34565 +a34566 = 34566 +a34567 = 34567 +a34568 = 34568 +a34569 = 34569 +a34570 = 34570 +a34571 = 34571 +a34572 = 34572 +a34573 = 34573 +a34574 = 34574 +a34575 = 34575 +a34576 = 34576 +a34577 = 34577 +a34578 = 34578 +a34579 = 34579 +a34580 = 34580 +a34581 = 34581 +a34582 = 34582 +a34583 = 34583 +a34584 = 34584 +a34585 = 34585 +a34586 = 34586 +a34587 = 34587 +a34588 = 34588 +a34589 = 34589 +a34590 = 34590 +a34591 = 34591 +a34592 = 34592 +a34593 = 34593 +a34594 = 34594 +a34595 = 34595 +a34596 = 34596 +a34597 = 34597 +a34598 = 34598 +a34599 = 34599 +a34600 = 34600 +a34601 = 34601 +a34602 = 34602 +a34603 = 34603 +a34604 = 34604 +a34605 = 34605 +a34606 = 34606 +a34607 = 34607 +a34608 = 34608 +a34609 = 34609 +a34610 = 34610 +a34611 = 34611 +a34612 = 34612 +a34613 = 34613 +a34614 = 34614 +a34615 = 34615 +a34616 = 34616 +a34617 = 34617 +a34618 = 34618 +a34619 = 34619 +a34620 = 34620 +a34621 = 34621 +a34622 = 34622 +a34623 = 34623 +a34624 = 34624 +a34625 = 34625 +a34626 = 34626 +a34627 = 34627 +a34628 = 34628 +a34629 = 34629 +a34630 = 34630 +a34631 = 34631 +a34632 = 34632 +a34633 = 34633 +a34634 = 34634 +a34635 = 34635 +a34636 = 34636 +a34637 = 34637 +a34638 = 34638 +a34639 = 34639 +a34640 = 34640 +a34641 = 34641 +a34642 = 34642 +a34643 = 34643 +a34644 = 34644 +a34645 = 34645 +a34646 = 34646 +a34647 = 34647 +a34648 = 34648 +a34649 = 34649 +a34650 = 34650 +a34651 = 34651 +a34652 = 34652 +a34653 = 34653 +a34654 = 34654 +a34655 = 34655 +a34656 = 34656 +a34657 = 34657 +a34658 = 34658 +a34659 = 34659 +a34660 = 34660 +a34661 = 34661 +a34662 = 34662 +a34663 = 34663 +a34664 = 34664 +a34665 = 34665 +a34666 = 34666 +a34667 = 34667 +a34668 = 34668 +a34669 = 34669 +a34670 = 34670 +a34671 = 34671 +a34672 = 34672 +a34673 = 34673 +a34674 = 34674 +a34675 = 34675 +a34676 = 34676 +a34677 = 34677 +a34678 = 34678 +a34679 = 34679 +a34680 = 34680 +a34681 = 34681 +a34682 = 34682 +a34683 = 34683 +a34684 = 34684 +a34685 = 34685 +a34686 = 34686 +a34687 = 34687 +a34688 = 34688 +a34689 = 34689 +a34690 = 34690 +a34691 = 34691 +a34692 = 34692 +a34693 = 34693 +a34694 = 34694 +a34695 = 34695 +a34696 = 34696 +a34697 = 34697 +a34698 = 34698 +a34699 = 34699 +a34700 = 34700 +a34701 = 34701 +a34702 = 34702 +a34703 = 34703 +a34704 = 34704 +a34705 = 34705 +a34706 = 34706 +a34707 = 34707 +a34708 = 34708 +a34709 = 34709 +a34710 = 34710 +a34711 = 34711 +a34712 = 34712 +a34713 = 34713 +a34714 = 34714 +a34715 = 34715 +a34716 = 34716 +a34717 = 34717 +a34718 = 34718 +a34719 = 34719 +a34720 = 34720 +a34721 = 34721 +a34722 = 34722 +a34723 = 34723 +a34724 = 34724 +a34725 = 34725 +a34726 = 34726 +a34727 = 34727 +a34728 = 34728 +a34729 = 34729 +a34730 = 34730 +a34731 = 34731 +a34732 = 34732 +a34733 = 34733 +a34734 = 34734 +a34735 = 34735 +a34736 = 34736 +a34737 = 34737 +a34738 = 34738 +a34739 = 34739 +a34740 = 34740 +a34741 = 34741 +a34742 = 34742 +a34743 = 34743 +a34744 = 34744 +a34745 = 34745 +a34746 = 34746 +a34747 = 34747 +a34748 = 34748 +a34749 = 34749 +a34750 = 34750 +a34751 = 34751 +a34752 = 34752 +a34753 = 34753 +a34754 = 34754 +a34755 = 34755 +a34756 = 34756 +a34757 = 34757 +a34758 = 34758 +a34759 = 34759 +a34760 = 34760 +a34761 = 34761 +a34762 = 34762 +a34763 = 34763 +a34764 = 34764 +a34765 = 34765 +a34766 = 34766 +a34767 = 34767 +a34768 = 34768 +a34769 = 34769 +a34770 = 34770 +a34771 = 34771 +a34772 = 34772 +a34773 = 34773 +a34774 = 34774 +a34775 = 34775 +a34776 = 34776 +a34777 = 34777 +a34778 = 34778 +a34779 = 34779 +a34780 = 34780 +a34781 = 34781 +a34782 = 34782 +a34783 = 34783 +a34784 = 34784 +a34785 = 34785 +a34786 = 34786 +a34787 = 34787 +a34788 = 34788 +a34789 = 34789 +a34790 = 34790 +a34791 = 34791 +a34792 = 34792 +a34793 = 34793 +a34794 = 34794 +a34795 = 34795 +a34796 = 34796 +a34797 = 34797 +a34798 = 34798 +a34799 = 34799 +a34800 = 34800 +a34801 = 34801 +a34802 = 34802 +a34803 = 34803 +a34804 = 34804 +a34805 = 34805 +a34806 = 34806 +a34807 = 34807 +a34808 = 34808 +a34809 = 34809 +a34810 = 34810 +a34811 = 34811 +a34812 = 34812 +a34813 = 34813 +a34814 = 34814 +a34815 = 34815 +a34816 = 34816 +a34817 = 34817 +a34818 = 34818 +a34819 = 34819 +a34820 = 34820 +a34821 = 34821 +a34822 = 34822 +a34823 = 34823 +a34824 = 34824 +a34825 = 34825 +a34826 = 34826 +a34827 = 34827 +a34828 = 34828 +a34829 = 34829 +a34830 = 34830 +a34831 = 34831 +a34832 = 34832 +a34833 = 34833 +a34834 = 34834 +a34835 = 34835 +a34836 = 34836 +a34837 = 34837 +a34838 = 34838 +a34839 = 34839 +a34840 = 34840 +a34841 = 34841 +a34842 = 34842 +a34843 = 34843 +a34844 = 34844 +a34845 = 34845 +a34846 = 34846 +a34847 = 34847 +a34848 = 34848 +a34849 = 34849 +a34850 = 34850 +a34851 = 34851 +a34852 = 34852 +a34853 = 34853 +a34854 = 34854 +a34855 = 34855 +a34856 = 34856 +a34857 = 34857 +a34858 = 34858 +a34859 = 34859 +a34860 = 34860 +a34861 = 34861 +a34862 = 34862 +a34863 = 34863 +a34864 = 34864 +a34865 = 34865 +a34866 = 34866 +a34867 = 34867 +a34868 = 34868 +a34869 = 34869 +a34870 = 34870 +a34871 = 34871 +a34872 = 34872 +a34873 = 34873 +a34874 = 34874 +a34875 = 34875 +a34876 = 34876 +a34877 = 34877 +a34878 = 34878 +a34879 = 34879 +a34880 = 34880 +a34881 = 34881 +a34882 = 34882 +a34883 = 34883 +a34884 = 34884 +a34885 = 34885 +a34886 = 34886 +a34887 = 34887 +a34888 = 34888 +a34889 = 34889 +a34890 = 34890 +a34891 = 34891 +a34892 = 34892 +a34893 = 34893 +a34894 = 34894 +a34895 = 34895 +a34896 = 34896 +a34897 = 34897 +a34898 = 34898 +a34899 = 34899 +a34900 = 34900 +a34901 = 34901 +a34902 = 34902 +a34903 = 34903 +a34904 = 34904 +a34905 = 34905 +a34906 = 34906 +a34907 = 34907 +a34908 = 34908 +a34909 = 34909 +a34910 = 34910 +a34911 = 34911 +a34912 = 34912 +a34913 = 34913 +a34914 = 34914 +a34915 = 34915 +a34916 = 34916 +a34917 = 34917 +a34918 = 34918 +a34919 = 34919 +a34920 = 34920 +a34921 = 34921 +a34922 = 34922 +a34923 = 34923 +a34924 = 34924 +a34925 = 34925 +a34926 = 34926 +a34927 = 34927 +a34928 = 34928 +a34929 = 34929 +a34930 = 34930 +a34931 = 34931 +a34932 = 34932 +a34933 = 34933 +a34934 = 34934 +a34935 = 34935 +a34936 = 34936 +a34937 = 34937 +a34938 = 34938 +a34939 = 34939 +a34940 = 34940 +a34941 = 34941 +a34942 = 34942 +a34943 = 34943 +a34944 = 34944 +a34945 = 34945 +a34946 = 34946 +a34947 = 34947 +a34948 = 34948 +a34949 = 34949 +a34950 = 34950 +a34951 = 34951 +a34952 = 34952 +a34953 = 34953 +a34954 = 34954 +a34955 = 34955 +a34956 = 34956 +a34957 = 34957 +a34958 = 34958 +a34959 = 34959 +a34960 = 34960 +a34961 = 34961 +a34962 = 34962 +a34963 = 34963 +a34964 = 34964 +a34965 = 34965 +a34966 = 34966 +a34967 = 34967 +a34968 = 34968 +a34969 = 34969 +a34970 = 34970 +a34971 = 34971 +a34972 = 34972 +a34973 = 34973 +a34974 = 34974 +a34975 = 34975 +a34976 = 34976 +a34977 = 34977 +a34978 = 34978 +a34979 = 34979 +a34980 = 34980 +a34981 = 34981 +a34982 = 34982 +a34983 = 34983 +a34984 = 34984 +a34985 = 34985 +a34986 = 34986 +a34987 = 34987 +a34988 = 34988 +a34989 = 34989 +a34990 = 34990 +a34991 = 34991 +a34992 = 34992 +a34993 = 34993 +a34994 = 34994 +a34995 = 34995 +a34996 = 34996 +a34997 = 34997 +a34998 = 34998 +a34999 = 34999 +a35000 = 35000 +a35001 = 35001 +a35002 = 35002 +a35003 = 35003 +a35004 = 35004 +a35005 = 35005 +a35006 = 35006 +a35007 = 35007 +a35008 = 35008 +a35009 = 35009 +a35010 = 35010 +a35011 = 35011 +a35012 = 35012 +a35013 = 35013 +a35014 = 35014 +a35015 = 35015 +a35016 = 35016 +a35017 = 35017 +a35018 = 35018 +a35019 = 35019 +a35020 = 35020 +a35021 = 35021 +a35022 = 35022 +a35023 = 35023 +a35024 = 35024 +a35025 = 35025 +a35026 = 35026 +a35027 = 35027 +a35028 = 35028 +a35029 = 35029 +a35030 = 35030 +a35031 = 35031 +a35032 = 35032 +a35033 = 35033 +a35034 = 35034 +a35035 = 35035 +a35036 = 35036 +a35037 = 35037 +a35038 = 35038 +a35039 = 35039 +a35040 = 35040 +a35041 = 35041 +a35042 = 35042 +a35043 = 35043 +a35044 = 35044 +a35045 = 35045 +a35046 = 35046 +a35047 = 35047 +a35048 = 35048 +a35049 = 35049 +a35050 = 35050 +a35051 = 35051 +a35052 = 35052 +a35053 = 35053 +a35054 = 35054 +a35055 = 35055 +a35056 = 35056 +a35057 = 35057 +a35058 = 35058 +a35059 = 35059 +a35060 = 35060 +a35061 = 35061 +a35062 = 35062 +a35063 = 35063 +a35064 = 35064 +a35065 = 35065 +a35066 = 35066 +a35067 = 35067 +a35068 = 35068 +a35069 = 35069 +a35070 = 35070 +a35071 = 35071 +a35072 = 35072 +a35073 = 35073 +a35074 = 35074 +a35075 = 35075 +a35076 = 35076 +a35077 = 35077 +a35078 = 35078 +a35079 = 35079 +a35080 = 35080 +a35081 = 35081 +a35082 = 35082 +a35083 = 35083 +a35084 = 35084 +a35085 = 35085 +a35086 = 35086 +a35087 = 35087 +a35088 = 35088 +a35089 = 35089 +a35090 = 35090 +a35091 = 35091 +a35092 = 35092 +a35093 = 35093 +a35094 = 35094 +a35095 = 35095 +a35096 = 35096 +a35097 = 35097 +a35098 = 35098 +a35099 = 35099 +a35100 = 35100 +a35101 = 35101 +a35102 = 35102 +a35103 = 35103 +a35104 = 35104 +a35105 = 35105 +a35106 = 35106 +a35107 = 35107 +a35108 = 35108 +a35109 = 35109 +a35110 = 35110 +a35111 = 35111 +a35112 = 35112 +a35113 = 35113 +a35114 = 35114 +a35115 = 35115 +a35116 = 35116 +a35117 = 35117 +a35118 = 35118 +a35119 = 35119 +a35120 = 35120 +a35121 = 35121 +a35122 = 35122 +a35123 = 35123 +a35124 = 35124 +a35125 = 35125 +a35126 = 35126 +a35127 = 35127 +a35128 = 35128 +a35129 = 35129 +a35130 = 35130 +a35131 = 35131 +a35132 = 35132 +a35133 = 35133 +a35134 = 35134 +a35135 = 35135 +a35136 = 35136 +a35137 = 35137 +a35138 = 35138 +a35139 = 35139 +a35140 = 35140 +a35141 = 35141 +a35142 = 35142 +a35143 = 35143 +a35144 = 35144 +a35145 = 35145 +a35146 = 35146 +a35147 = 35147 +a35148 = 35148 +a35149 = 35149 +a35150 = 35150 +a35151 = 35151 +a35152 = 35152 +a35153 = 35153 +a35154 = 35154 +a35155 = 35155 +a35156 = 35156 +a35157 = 35157 +a35158 = 35158 +a35159 = 35159 +a35160 = 35160 +a35161 = 35161 +a35162 = 35162 +a35163 = 35163 +a35164 = 35164 +a35165 = 35165 +a35166 = 35166 +a35167 = 35167 +a35168 = 35168 +a35169 = 35169 +a35170 = 35170 +a35171 = 35171 +a35172 = 35172 +a35173 = 35173 +a35174 = 35174 +a35175 = 35175 +a35176 = 35176 +a35177 = 35177 +a35178 = 35178 +a35179 = 35179 +a35180 = 35180 +a35181 = 35181 +a35182 = 35182 +a35183 = 35183 +a35184 = 35184 +a35185 = 35185 +a35186 = 35186 +a35187 = 35187 +a35188 = 35188 +a35189 = 35189 +a35190 = 35190 +a35191 = 35191 +a35192 = 35192 +a35193 = 35193 +a35194 = 35194 +a35195 = 35195 +a35196 = 35196 +a35197 = 35197 +a35198 = 35198 +a35199 = 35199 +a35200 = 35200 +a35201 = 35201 +a35202 = 35202 +a35203 = 35203 +a35204 = 35204 +a35205 = 35205 +a35206 = 35206 +a35207 = 35207 +a35208 = 35208 +a35209 = 35209 +a35210 = 35210 +a35211 = 35211 +a35212 = 35212 +a35213 = 35213 +a35214 = 35214 +a35215 = 35215 +a35216 = 35216 +a35217 = 35217 +a35218 = 35218 +a35219 = 35219 +a35220 = 35220 +a35221 = 35221 +a35222 = 35222 +a35223 = 35223 +a35224 = 35224 +a35225 = 35225 +a35226 = 35226 +a35227 = 35227 +a35228 = 35228 +a35229 = 35229 +a35230 = 35230 +a35231 = 35231 +a35232 = 35232 +a35233 = 35233 +a35234 = 35234 +a35235 = 35235 +a35236 = 35236 +a35237 = 35237 +a35238 = 35238 +a35239 = 35239 +a35240 = 35240 +a35241 = 35241 +a35242 = 35242 +a35243 = 35243 +a35244 = 35244 +a35245 = 35245 +a35246 = 35246 +a35247 = 35247 +a35248 = 35248 +a35249 = 35249 +a35250 = 35250 +a35251 = 35251 +a35252 = 35252 +a35253 = 35253 +a35254 = 35254 +a35255 = 35255 +a35256 = 35256 +a35257 = 35257 +a35258 = 35258 +a35259 = 35259 +a35260 = 35260 +a35261 = 35261 +a35262 = 35262 +a35263 = 35263 +a35264 = 35264 +a35265 = 35265 +a35266 = 35266 +a35267 = 35267 +a35268 = 35268 +a35269 = 35269 +a35270 = 35270 +a35271 = 35271 +a35272 = 35272 +a35273 = 35273 +a35274 = 35274 +a35275 = 35275 +a35276 = 35276 +a35277 = 35277 +a35278 = 35278 +a35279 = 35279 +a35280 = 35280 +a35281 = 35281 +a35282 = 35282 +a35283 = 35283 +a35284 = 35284 +a35285 = 35285 +a35286 = 35286 +a35287 = 35287 +a35288 = 35288 +a35289 = 35289 +a35290 = 35290 +a35291 = 35291 +a35292 = 35292 +a35293 = 35293 +a35294 = 35294 +a35295 = 35295 +a35296 = 35296 +a35297 = 35297 +a35298 = 35298 +a35299 = 35299 +a35300 = 35300 +a35301 = 35301 +a35302 = 35302 +a35303 = 35303 +a35304 = 35304 +a35305 = 35305 +a35306 = 35306 +a35307 = 35307 +a35308 = 35308 +a35309 = 35309 +a35310 = 35310 +a35311 = 35311 +a35312 = 35312 +a35313 = 35313 +a35314 = 35314 +a35315 = 35315 +a35316 = 35316 +a35317 = 35317 +a35318 = 35318 +a35319 = 35319 +a35320 = 35320 +a35321 = 35321 +a35322 = 35322 +a35323 = 35323 +a35324 = 35324 +a35325 = 35325 +a35326 = 35326 +a35327 = 35327 +a35328 = 35328 +a35329 = 35329 +a35330 = 35330 +a35331 = 35331 +a35332 = 35332 +a35333 = 35333 +a35334 = 35334 +a35335 = 35335 +a35336 = 35336 +a35337 = 35337 +a35338 = 35338 +a35339 = 35339 +a35340 = 35340 +a35341 = 35341 +a35342 = 35342 +a35343 = 35343 +a35344 = 35344 +a35345 = 35345 +a35346 = 35346 +a35347 = 35347 +a35348 = 35348 +a35349 = 35349 +a35350 = 35350 +a35351 = 35351 +a35352 = 35352 +a35353 = 35353 +a35354 = 35354 +a35355 = 35355 +a35356 = 35356 +a35357 = 35357 +a35358 = 35358 +a35359 = 35359 +a35360 = 35360 +a35361 = 35361 +a35362 = 35362 +a35363 = 35363 +a35364 = 35364 +a35365 = 35365 +a35366 = 35366 +a35367 = 35367 +a35368 = 35368 +a35369 = 35369 +a35370 = 35370 +a35371 = 35371 +a35372 = 35372 +a35373 = 35373 +a35374 = 35374 +a35375 = 35375 +a35376 = 35376 +a35377 = 35377 +a35378 = 35378 +a35379 = 35379 +a35380 = 35380 +a35381 = 35381 +a35382 = 35382 +a35383 = 35383 +a35384 = 35384 +a35385 = 35385 +a35386 = 35386 +a35387 = 35387 +a35388 = 35388 +a35389 = 35389 +a35390 = 35390 +a35391 = 35391 +a35392 = 35392 +a35393 = 35393 +a35394 = 35394 +a35395 = 35395 +a35396 = 35396 +a35397 = 35397 +a35398 = 35398 +a35399 = 35399 +a35400 = 35400 +a35401 = 35401 +a35402 = 35402 +a35403 = 35403 +a35404 = 35404 +a35405 = 35405 +a35406 = 35406 +a35407 = 35407 +a35408 = 35408 +a35409 = 35409 +a35410 = 35410 +a35411 = 35411 +a35412 = 35412 +a35413 = 35413 +a35414 = 35414 +a35415 = 35415 +a35416 = 35416 +a35417 = 35417 +a35418 = 35418 +a35419 = 35419 +a35420 = 35420 +a35421 = 35421 +a35422 = 35422 +a35423 = 35423 +a35424 = 35424 +a35425 = 35425 +a35426 = 35426 +a35427 = 35427 +a35428 = 35428 +a35429 = 35429 +a35430 = 35430 +a35431 = 35431 +a35432 = 35432 +a35433 = 35433 +a35434 = 35434 +a35435 = 35435 +a35436 = 35436 +a35437 = 35437 +a35438 = 35438 +a35439 = 35439 +a35440 = 35440 +a35441 = 35441 +a35442 = 35442 +a35443 = 35443 +a35444 = 35444 +a35445 = 35445 +a35446 = 35446 +a35447 = 35447 +a35448 = 35448 +a35449 = 35449 +a35450 = 35450 +a35451 = 35451 +a35452 = 35452 +a35453 = 35453 +a35454 = 35454 +a35455 = 35455 +a35456 = 35456 +a35457 = 35457 +a35458 = 35458 +a35459 = 35459 +a35460 = 35460 +a35461 = 35461 +a35462 = 35462 +a35463 = 35463 +a35464 = 35464 +a35465 = 35465 +a35466 = 35466 +a35467 = 35467 +a35468 = 35468 +a35469 = 35469 +a35470 = 35470 +a35471 = 35471 +a35472 = 35472 +a35473 = 35473 +a35474 = 35474 +a35475 = 35475 +a35476 = 35476 +a35477 = 35477 +a35478 = 35478 +a35479 = 35479 +a35480 = 35480 +a35481 = 35481 +a35482 = 35482 +a35483 = 35483 +a35484 = 35484 +a35485 = 35485 +a35486 = 35486 +a35487 = 35487 +a35488 = 35488 +a35489 = 35489 +a35490 = 35490 +a35491 = 35491 +a35492 = 35492 +a35493 = 35493 +a35494 = 35494 +a35495 = 35495 +a35496 = 35496 +a35497 = 35497 +a35498 = 35498 +a35499 = 35499 +a35500 = 35500 +a35501 = 35501 +a35502 = 35502 +a35503 = 35503 +a35504 = 35504 +a35505 = 35505 +a35506 = 35506 +a35507 = 35507 +a35508 = 35508 +a35509 = 35509 +a35510 = 35510 +a35511 = 35511 +a35512 = 35512 +a35513 = 35513 +a35514 = 35514 +a35515 = 35515 +a35516 = 35516 +a35517 = 35517 +a35518 = 35518 +a35519 = 35519 +a35520 = 35520 +a35521 = 35521 +a35522 = 35522 +a35523 = 35523 +a35524 = 35524 +a35525 = 35525 +a35526 = 35526 +a35527 = 35527 +a35528 = 35528 +a35529 = 35529 +a35530 = 35530 +a35531 = 35531 +a35532 = 35532 +a35533 = 35533 +a35534 = 35534 +a35535 = 35535 +a35536 = 35536 +a35537 = 35537 +a35538 = 35538 +a35539 = 35539 +a35540 = 35540 +a35541 = 35541 +a35542 = 35542 +a35543 = 35543 +a35544 = 35544 +a35545 = 35545 +a35546 = 35546 +a35547 = 35547 +a35548 = 35548 +a35549 = 35549 +a35550 = 35550 +a35551 = 35551 +a35552 = 35552 +a35553 = 35553 +a35554 = 35554 +a35555 = 35555 +a35556 = 35556 +a35557 = 35557 +a35558 = 35558 +a35559 = 35559 +a35560 = 35560 +a35561 = 35561 +a35562 = 35562 +a35563 = 35563 +a35564 = 35564 +a35565 = 35565 +a35566 = 35566 +a35567 = 35567 +a35568 = 35568 +a35569 = 35569 +a35570 = 35570 +a35571 = 35571 +a35572 = 35572 +a35573 = 35573 +a35574 = 35574 +a35575 = 35575 +a35576 = 35576 +a35577 = 35577 +a35578 = 35578 +a35579 = 35579 +a35580 = 35580 +a35581 = 35581 +a35582 = 35582 +a35583 = 35583 +a35584 = 35584 +a35585 = 35585 +a35586 = 35586 +a35587 = 35587 +a35588 = 35588 +a35589 = 35589 +a35590 = 35590 +a35591 = 35591 +a35592 = 35592 +a35593 = 35593 +a35594 = 35594 +a35595 = 35595 +a35596 = 35596 +a35597 = 35597 +a35598 = 35598 +a35599 = 35599 +a35600 = 35600 +a35601 = 35601 +a35602 = 35602 +a35603 = 35603 +a35604 = 35604 +a35605 = 35605 +a35606 = 35606 +a35607 = 35607 +a35608 = 35608 +a35609 = 35609 +a35610 = 35610 +a35611 = 35611 +a35612 = 35612 +a35613 = 35613 +a35614 = 35614 +a35615 = 35615 +a35616 = 35616 +a35617 = 35617 +a35618 = 35618 +a35619 = 35619 +a35620 = 35620 +a35621 = 35621 +a35622 = 35622 +a35623 = 35623 +a35624 = 35624 +a35625 = 35625 +a35626 = 35626 +a35627 = 35627 +a35628 = 35628 +a35629 = 35629 +a35630 = 35630 +a35631 = 35631 +a35632 = 35632 +a35633 = 35633 +a35634 = 35634 +a35635 = 35635 +a35636 = 35636 +a35637 = 35637 +a35638 = 35638 +a35639 = 35639 +a35640 = 35640 +a35641 = 35641 +a35642 = 35642 +a35643 = 35643 +a35644 = 35644 +a35645 = 35645 +a35646 = 35646 +a35647 = 35647 +a35648 = 35648 +a35649 = 35649 +a35650 = 35650 +a35651 = 35651 +a35652 = 35652 +a35653 = 35653 +a35654 = 35654 +a35655 = 35655 +a35656 = 35656 +a35657 = 35657 +a35658 = 35658 +a35659 = 35659 +a35660 = 35660 +a35661 = 35661 +a35662 = 35662 +a35663 = 35663 +a35664 = 35664 +a35665 = 35665 +a35666 = 35666 +a35667 = 35667 +a35668 = 35668 +a35669 = 35669 +a35670 = 35670 +a35671 = 35671 +a35672 = 35672 +a35673 = 35673 +a35674 = 35674 +a35675 = 35675 +a35676 = 35676 +a35677 = 35677 +a35678 = 35678 +a35679 = 35679 +a35680 = 35680 +a35681 = 35681 +a35682 = 35682 +a35683 = 35683 +a35684 = 35684 +a35685 = 35685 +a35686 = 35686 +a35687 = 35687 +a35688 = 35688 +a35689 = 35689 +a35690 = 35690 +a35691 = 35691 +a35692 = 35692 +a35693 = 35693 +a35694 = 35694 +a35695 = 35695 +a35696 = 35696 +a35697 = 35697 +a35698 = 35698 +a35699 = 35699 +a35700 = 35700 +a35701 = 35701 +a35702 = 35702 +a35703 = 35703 +a35704 = 35704 +a35705 = 35705 +a35706 = 35706 +a35707 = 35707 +a35708 = 35708 +a35709 = 35709 +a35710 = 35710 +a35711 = 35711 +a35712 = 35712 +a35713 = 35713 +a35714 = 35714 +a35715 = 35715 +a35716 = 35716 +a35717 = 35717 +a35718 = 35718 +a35719 = 35719 +a35720 = 35720 +a35721 = 35721 +a35722 = 35722 +a35723 = 35723 +a35724 = 35724 +a35725 = 35725 +a35726 = 35726 +a35727 = 35727 +a35728 = 35728 +a35729 = 35729 +a35730 = 35730 +a35731 = 35731 +a35732 = 35732 +a35733 = 35733 +a35734 = 35734 +a35735 = 35735 +a35736 = 35736 +a35737 = 35737 +a35738 = 35738 +a35739 = 35739 +a35740 = 35740 +a35741 = 35741 +a35742 = 35742 +a35743 = 35743 +a35744 = 35744 +a35745 = 35745 +a35746 = 35746 +a35747 = 35747 +a35748 = 35748 +a35749 = 35749 +a35750 = 35750 +a35751 = 35751 +a35752 = 35752 +a35753 = 35753 +a35754 = 35754 +a35755 = 35755 +a35756 = 35756 +a35757 = 35757 +a35758 = 35758 +a35759 = 35759 +a35760 = 35760 +a35761 = 35761 +a35762 = 35762 +a35763 = 35763 +a35764 = 35764 +a35765 = 35765 +a35766 = 35766 +a35767 = 35767 +a35768 = 35768 +a35769 = 35769 +a35770 = 35770 +a35771 = 35771 +a35772 = 35772 +a35773 = 35773 +a35774 = 35774 +a35775 = 35775 +a35776 = 35776 +a35777 = 35777 +a35778 = 35778 +a35779 = 35779 +a35780 = 35780 +a35781 = 35781 +a35782 = 35782 +a35783 = 35783 +a35784 = 35784 +a35785 = 35785 +a35786 = 35786 +a35787 = 35787 +a35788 = 35788 +a35789 = 35789 +a35790 = 35790 +a35791 = 35791 +a35792 = 35792 +a35793 = 35793 +a35794 = 35794 +a35795 = 35795 +a35796 = 35796 +a35797 = 35797 +a35798 = 35798 +a35799 = 35799 +a35800 = 35800 +a35801 = 35801 +a35802 = 35802 +a35803 = 35803 +a35804 = 35804 +a35805 = 35805 +a35806 = 35806 +a35807 = 35807 +a35808 = 35808 +a35809 = 35809 +a35810 = 35810 +a35811 = 35811 +a35812 = 35812 +a35813 = 35813 +a35814 = 35814 +a35815 = 35815 +a35816 = 35816 +a35817 = 35817 +a35818 = 35818 +a35819 = 35819 +a35820 = 35820 +a35821 = 35821 +a35822 = 35822 +a35823 = 35823 +a35824 = 35824 +a35825 = 35825 +a35826 = 35826 +a35827 = 35827 +a35828 = 35828 +a35829 = 35829 +a35830 = 35830 +a35831 = 35831 +a35832 = 35832 +a35833 = 35833 +a35834 = 35834 +a35835 = 35835 +a35836 = 35836 +a35837 = 35837 +a35838 = 35838 +a35839 = 35839 +a35840 = 35840 +a35841 = 35841 +a35842 = 35842 +a35843 = 35843 +a35844 = 35844 +a35845 = 35845 +a35846 = 35846 +a35847 = 35847 +a35848 = 35848 +a35849 = 35849 +a35850 = 35850 +a35851 = 35851 +a35852 = 35852 +a35853 = 35853 +a35854 = 35854 +a35855 = 35855 +a35856 = 35856 +a35857 = 35857 +a35858 = 35858 +a35859 = 35859 +a35860 = 35860 +a35861 = 35861 +a35862 = 35862 +a35863 = 35863 +a35864 = 35864 +a35865 = 35865 +a35866 = 35866 +a35867 = 35867 +a35868 = 35868 +a35869 = 35869 +a35870 = 35870 +a35871 = 35871 +a35872 = 35872 +a35873 = 35873 +a35874 = 35874 +a35875 = 35875 +a35876 = 35876 +a35877 = 35877 +a35878 = 35878 +a35879 = 35879 +a35880 = 35880 +a35881 = 35881 +a35882 = 35882 +a35883 = 35883 +a35884 = 35884 +a35885 = 35885 +a35886 = 35886 +a35887 = 35887 +a35888 = 35888 +a35889 = 35889 +a35890 = 35890 +a35891 = 35891 +a35892 = 35892 +a35893 = 35893 +a35894 = 35894 +a35895 = 35895 +a35896 = 35896 +a35897 = 35897 +a35898 = 35898 +a35899 = 35899 +a35900 = 35900 +a35901 = 35901 +a35902 = 35902 +a35903 = 35903 +a35904 = 35904 +a35905 = 35905 +a35906 = 35906 +a35907 = 35907 +a35908 = 35908 +a35909 = 35909 +a35910 = 35910 +a35911 = 35911 +a35912 = 35912 +a35913 = 35913 +a35914 = 35914 +a35915 = 35915 +a35916 = 35916 +a35917 = 35917 +a35918 = 35918 +a35919 = 35919 +a35920 = 35920 +a35921 = 35921 +a35922 = 35922 +a35923 = 35923 +a35924 = 35924 +a35925 = 35925 +a35926 = 35926 +a35927 = 35927 +a35928 = 35928 +a35929 = 35929 +a35930 = 35930 +a35931 = 35931 +a35932 = 35932 +a35933 = 35933 +a35934 = 35934 +a35935 = 35935 +a35936 = 35936 +a35937 = 35937 +a35938 = 35938 +a35939 = 35939 +a35940 = 35940 +a35941 = 35941 +a35942 = 35942 +a35943 = 35943 +a35944 = 35944 +a35945 = 35945 +a35946 = 35946 +a35947 = 35947 +a35948 = 35948 +a35949 = 35949 +a35950 = 35950 +a35951 = 35951 +a35952 = 35952 +a35953 = 35953 +a35954 = 35954 +a35955 = 35955 +a35956 = 35956 +a35957 = 35957 +a35958 = 35958 +a35959 = 35959 +a35960 = 35960 +a35961 = 35961 +a35962 = 35962 +a35963 = 35963 +a35964 = 35964 +a35965 = 35965 +a35966 = 35966 +a35967 = 35967 +a35968 = 35968 +a35969 = 35969 +a35970 = 35970 +a35971 = 35971 +a35972 = 35972 +a35973 = 35973 +a35974 = 35974 +a35975 = 35975 +a35976 = 35976 +a35977 = 35977 +a35978 = 35978 +a35979 = 35979 +a35980 = 35980 +a35981 = 35981 +a35982 = 35982 +a35983 = 35983 +a35984 = 35984 +a35985 = 35985 +a35986 = 35986 +a35987 = 35987 +a35988 = 35988 +a35989 = 35989 +a35990 = 35990 +a35991 = 35991 +a35992 = 35992 +a35993 = 35993 +a35994 = 35994 +a35995 = 35995 +a35996 = 35996 +a35997 = 35997 +a35998 = 35998 +a35999 = 35999 +a36000 = 36000 +a36001 = 36001 +a36002 = 36002 +a36003 = 36003 +a36004 = 36004 +a36005 = 36005 +a36006 = 36006 +a36007 = 36007 +a36008 = 36008 +a36009 = 36009 +a36010 = 36010 +a36011 = 36011 +a36012 = 36012 +a36013 = 36013 +a36014 = 36014 +a36015 = 36015 +a36016 = 36016 +a36017 = 36017 +a36018 = 36018 +a36019 = 36019 +a36020 = 36020 +a36021 = 36021 +a36022 = 36022 +a36023 = 36023 +a36024 = 36024 +a36025 = 36025 +a36026 = 36026 +a36027 = 36027 +a36028 = 36028 +a36029 = 36029 +a36030 = 36030 +a36031 = 36031 +a36032 = 36032 +a36033 = 36033 +a36034 = 36034 +a36035 = 36035 +a36036 = 36036 +a36037 = 36037 +a36038 = 36038 +a36039 = 36039 +a36040 = 36040 +a36041 = 36041 +a36042 = 36042 +a36043 = 36043 +a36044 = 36044 +a36045 = 36045 +a36046 = 36046 +a36047 = 36047 +a36048 = 36048 +a36049 = 36049 +a36050 = 36050 +a36051 = 36051 +a36052 = 36052 +a36053 = 36053 +a36054 = 36054 +a36055 = 36055 +a36056 = 36056 +a36057 = 36057 +a36058 = 36058 +a36059 = 36059 +a36060 = 36060 +a36061 = 36061 +a36062 = 36062 +a36063 = 36063 +a36064 = 36064 +a36065 = 36065 +a36066 = 36066 +a36067 = 36067 +a36068 = 36068 +a36069 = 36069 +a36070 = 36070 +a36071 = 36071 +a36072 = 36072 +a36073 = 36073 +a36074 = 36074 +a36075 = 36075 +a36076 = 36076 +a36077 = 36077 +a36078 = 36078 +a36079 = 36079 +a36080 = 36080 +a36081 = 36081 +a36082 = 36082 +a36083 = 36083 +a36084 = 36084 +a36085 = 36085 +a36086 = 36086 +a36087 = 36087 +a36088 = 36088 +a36089 = 36089 +a36090 = 36090 +a36091 = 36091 +a36092 = 36092 +a36093 = 36093 +a36094 = 36094 +a36095 = 36095 +a36096 = 36096 +a36097 = 36097 +a36098 = 36098 +a36099 = 36099 +a36100 = 36100 +a36101 = 36101 +a36102 = 36102 +a36103 = 36103 +a36104 = 36104 +a36105 = 36105 +a36106 = 36106 +a36107 = 36107 +a36108 = 36108 +a36109 = 36109 +a36110 = 36110 +a36111 = 36111 +a36112 = 36112 +a36113 = 36113 +a36114 = 36114 +a36115 = 36115 +a36116 = 36116 +a36117 = 36117 +a36118 = 36118 +a36119 = 36119 +a36120 = 36120 +a36121 = 36121 +a36122 = 36122 +a36123 = 36123 +a36124 = 36124 +a36125 = 36125 +a36126 = 36126 +a36127 = 36127 +a36128 = 36128 +a36129 = 36129 +a36130 = 36130 +a36131 = 36131 +a36132 = 36132 +a36133 = 36133 +a36134 = 36134 +a36135 = 36135 +a36136 = 36136 +a36137 = 36137 +a36138 = 36138 +a36139 = 36139 +a36140 = 36140 +a36141 = 36141 +a36142 = 36142 +a36143 = 36143 +a36144 = 36144 +a36145 = 36145 +a36146 = 36146 +a36147 = 36147 +a36148 = 36148 +a36149 = 36149 +a36150 = 36150 +a36151 = 36151 +a36152 = 36152 +a36153 = 36153 +a36154 = 36154 +a36155 = 36155 +a36156 = 36156 +a36157 = 36157 +a36158 = 36158 +a36159 = 36159 +a36160 = 36160 +a36161 = 36161 +a36162 = 36162 +a36163 = 36163 +a36164 = 36164 +a36165 = 36165 +a36166 = 36166 +a36167 = 36167 +a36168 = 36168 +a36169 = 36169 +a36170 = 36170 +a36171 = 36171 +a36172 = 36172 +a36173 = 36173 +a36174 = 36174 +a36175 = 36175 +a36176 = 36176 +a36177 = 36177 +a36178 = 36178 +a36179 = 36179 +a36180 = 36180 +a36181 = 36181 +a36182 = 36182 +a36183 = 36183 +a36184 = 36184 +a36185 = 36185 +a36186 = 36186 +a36187 = 36187 +a36188 = 36188 +a36189 = 36189 +a36190 = 36190 +a36191 = 36191 +a36192 = 36192 +a36193 = 36193 +a36194 = 36194 +a36195 = 36195 +a36196 = 36196 +a36197 = 36197 +a36198 = 36198 +a36199 = 36199 +a36200 = 36200 +a36201 = 36201 +a36202 = 36202 +a36203 = 36203 +a36204 = 36204 +a36205 = 36205 +a36206 = 36206 +a36207 = 36207 +a36208 = 36208 +a36209 = 36209 +a36210 = 36210 +a36211 = 36211 +a36212 = 36212 +a36213 = 36213 +a36214 = 36214 +a36215 = 36215 +a36216 = 36216 +a36217 = 36217 +a36218 = 36218 +a36219 = 36219 +a36220 = 36220 +a36221 = 36221 +a36222 = 36222 +a36223 = 36223 +a36224 = 36224 +a36225 = 36225 +a36226 = 36226 +a36227 = 36227 +a36228 = 36228 +a36229 = 36229 +a36230 = 36230 +a36231 = 36231 +a36232 = 36232 +a36233 = 36233 +a36234 = 36234 +a36235 = 36235 +a36236 = 36236 +a36237 = 36237 +a36238 = 36238 +a36239 = 36239 +a36240 = 36240 +a36241 = 36241 +a36242 = 36242 +a36243 = 36243 +a36244 = 36244 +a36245 = 36245 +a36246 = 36246 +a36247 = 36247 +a36248 = 36248 +a36249 = 36249 +a36250 = 36250 +a36251 = 36251 +a36252 = 36252 +a36253 = 36253 +a36254 = 36254 +a36255 = 36255 +a36256 = 36256 +a36257 = 36257 +a36258 = 36258 +a36259 = 36259 +a36260 = 36260 +a36261 = 36261 +a36262 = 36262 +a36263 = 36263 +a36264 = 36264 +a36265 = 36265 +a36266 = 36266 +a36267 = 36267 +a36268 = 36268 +a36269 = 36269 +a36270 = 36270 +a36271 = 36271 +a36272 = 36272 +a36273 = 36273 +a36274 = 36274 +a36275 = 36275 +a36276 = 36276 +a36277 = 36277 +a36278 = 36278 +a36279 = 36279 +a36280 = 36280 +a36281 = 36281 +a36282 = 36282 +a36283 = 36283 +a36284 = 36284 +a36285 = 36285 +a36286 = 36286 +a36287 = 36287 +a36288 = 36288 +a36289 = 36289 +a36290 = 36290 +a36291 = 36291 +a36292 = 36292 +a36293 = 36293 +a36294 = 36294 +a36295 = 36295 +a36296 = 36296 +a36297 = 36297 +a36298 = 36298 +a36299 = 36299 +a36300 = 36300 +a36301 = 36301 +a36302 = 36302 +a36303 = 36303 +a36304 = 36304 +a36305 = 36305 +a36306 = 36306 +a36307 = 36307 +a36308 = 36308 +a36309 = 36309 +a36310 = 36310 +a36311 = 36311 +a36312 = 36312 +a36313 = 36313 +a36314 = 36314 +a36315 = 36315 +a36316 = 36316 +a36317 = 36317 +a36318 = 36318 +a36319 = 36319 +a36320 = 36320 +a36321 = 36321 +a36322 = 36322 +a36323 = 36323 +a36324 = 36324 +a36325 = 36325 +a36326 = 36326 +a36327 = 36327 +a36328 = 36328 +a36329 = 36329 +a36330 = 36330 +a36331 = 36331 +a36332 = 36332 +a36333 = 36333 +a36334 = 36334 +a36335 = 36335 +a36336 = 36336 +a36337 = 36337 +a36338 = 36338 +a36339 = 36339 +a36340 = 36340 +a36341 = 36341 +a36342 = 36342 +a36343 = 36343 +a36344 = 36344 +a36345 = 36345 +a36346 = 36346 +a36347 = 36347 +a36348 = 36348 +a36349 = 36349 +a36350 = 36350 +a36351 = 36351 +a36352 = 36352 +a36353 = 36353 +a36354 = 36354 +a36355 = 36355 +a36356 = 36356 +a36357 = 36357 +a36358 = 36358 +a36359 = 36359 +a36360 = 36360 +a36361 = 36361 +a36362 = 36362 +a36363 = 36363 +a36364 = 36364 +a36365 = 36365 +a36366 = 36366 +a36367 = 36367 +a36368 = 36368 +a36369 = 36369 +a36370 = 36370 +a36371 = 36371 +a36372 = 36372 +a36373 = 36373 +a36374 = 36374 +a36375 = 36375 +a36376 = 36376 +a36377 = 36377 +a36378 = 36378 +a36379 = 36379 +a36380 = 36380 +a36381 = 36381 +a36382 = 36382 +a36383 = 36383 +a36384 = 36384 +a36385 = 36385 +a36386 = 36386 +a36387 = 36387 +a36388 = 36388 +a36389 = 36389 +a36390 = 36390 +a36391 = 36391 +a36392 = 36392 +a36393 = 36393 +a36394 = 36394 +a36395 = 36395 +a36396 = 36396 +a36397 = 36397 +a36398 = 36398 +a36399 = 36399 +a36400 = 36400 +a36401 = 36401 +a36402 = 36402 +a36403 = 36403 +a36404 = 36404 +a36405 = 36405 +a36406 = 36406 +a36407 = 36407 +a36408 = 36408 +a36409 = 36409 +a36410 = 36410 +a36411 = 36411 +a36412 = 36412 +a36413 = 36413 +a36414 = 36414 +a36415 = 36415 +a36416 = 36416 +a36417 = 36417 +a36418 = 36418 +a36419 = 36419 +a36420 = 36420 +a36421 = 36421 +a36422 = 36422 +a36423 = 36423 +a36424 = 36424 +a36425 = 36425 +a36426 = 36426 +a36427 = 36427 +a36428 = 36428 +a36429 = 36429 +a36430 = 36430 +a36431 = 36431 +a36432 = 36432 +a36433 = 36433 +a36434 = 36434 +a36435 = 36435 +a36436 = 36436 +a36437 = 36437 +a36438 = 36438 +a36439 = 36439 +a36440 = 36440 +a36441 = 36441 +a36442 = 36442 +a36443 = 36443 +a36444 = 36444 +a36445 = 36445 +a36446 = 36446 +a36447 = 36447 +a36448 = 36448 +a36449 = 36449 +a36450 = 36450 +a36451 = 36451 +a36452 = 36452 +a36453 = 36453 +a36454 = 36454 +a36455 = 36455 +a36456 = 36456 +a36457 = 36457 +a36458 = 36458 +a36459 = 36459 +a36460 = 36460 +a36461 = 36461 +a36462 = 36462 +a36463 = 36463 +a36464 = 36464 +a36465 = 36465 +a36466 = 36466 +a36467 = 36467 +a36468 = 36468 +a36469 = 36469 +a36470 = 36470 +a36471 = 36471 +a36472 = 36472 +a36473 = 36473 +a36474 = 36474 +a36475 = 36475 +a36476 = 36476 +a36477 = 36477 +a36478 = 36478 +a36479 = 36479 +a36480 = 36480 +a36481 = 36481 +a36482 = 36482 +a36483 = 36483 +a36484 = 36484 +a36485 = 36485 +a36486 = 36486 +a36487 = 36487 +a36488 = 36488 +a36489 = 36489 +a36490 = 36490 +a36491 = 36491 +a36492 = 36492 +a36493 = 36493 +a36494 = 36494 +a36495 = 36495 +a36496 = 36496 +a36497 = 36497 +a36498 = 36498 +a36499 = 36499 +a36500 = 36500 +a36501 = 36501 +a36502 = 36502 +a36503 = 36503 +a36504 = 36504 +a36505 = 36505 +a36506 = 36506 +a36507 = 36507 +a36508 = 36508 +a36509 = 36509 +a36510 = 36510 +a36511 = 36511 +a36512 = 36512 +a36513 = 36513 +a36514 = 36514 +a36515 = 36515 +a36516 = 36516 +a36517 = 36517 +a36518 = 36518 +a36519 = 36519 +a36520 = 36520 +a36521 = 36521 +a36522 = 36522 +a36523 = 36523 +a36524 = 36524 +a36525 = 36525 +a36526 = 36526 +a36527 = 36527 +a36528 = 36528 +a36529 = 36529 +a36530 = 36530 +a36531 = 36531 +a36532 = 36532 +a36533 = 36533 +a36534 = 36534 +a36535 = 36535 +a36536 = 36536 +a36537 = 36537 +a36538 = 36538 +a36539 = 36539 +a36540 = 36540 +a36541 = 36541 +a36542 = 36542 +a36543 = 36543 +a36544 = 36544 +a36545 = 36545 +a36546 = 36546 +a36547 = 36547 +a36548 = 36548 +a36549 = 36549 +a36550 = 36550 +a36551 = 36551 +a36552 = 36552 +a36553 = 36553 +a36554 = 36554 +a36555 = 36555 +a36556 = 36556 +a36557 = 36557 +a36558 = 36558 +a36559 = 36559 +a36560 = 36560 +a36561 = 36561 +a36562 = 36562 +a36563 = 36563 +a36564 = 36564 +a36565 = 36565 +a36566 = 36566 +a36567 = 36567 +a36568 = 36568 +a36569 = 36569 +a36570 = 36570 +a36571 = 36571 +a36572 = 36572 +a36573 = 36573 +a36574 = 36574 +a36575 = 36575 +a36576 = 36576 +a36577 = 36577 +a36578 = 36578 +a36579 = 36579 +a36580 = 36580 +a36581 = 36581 +a36582 = 36582 +a36583 = 36583 +a36584 = 36584 +a36585 = 36585 +a36586 = 36586 +a36587 = 36587 +a36588 = 36588 +a36589 = 36589 +a36590 = 36590 +a36591 = 36591 +a36592 = 36592 +a36593 = 36593 +a36594 = 36594 +a36595 = 36595 +a36596 = 36596 +a36597 = 36597 +a36598 = 36598 +a36599 = 36599 +a36600 = 36600 +a36601 = 36601 +a36602 = 36602 +a36603 = 36603 +a36604 = 36604 +a36605 = 36605 +a36606 = 36606 +a36607 = 36607 +a36608 = 36608 +a36609 = 36609 +a36610 = 36610 +a36611 = 36611 +a36612 = 36612 +a36613 = 36613 +a36614 = 36614 +a36615 = 36615 +a36616 = 36616 +a36617 = 36617 +a36618 = 36618 +a36619 = 36619 +a36620 = 36620 +a36621 = 36621 +a36622 = 36622 +a36623 = 36623 +a36624 = 36624 +a36625 = 36625 +a36626 = 36626 +a36627 = 36627 +a36628 = 36628 +a36629 = 36629 +a36630 = 36630 +a36631 = 36631 +a36632 = 36632 +a36633 = 36633 +a36634 = 36634 +a36635 = 36635 +a36636 = 36636 +a36637 = 36637 +a36638 = 36638 +a36639 = 36639 +a36640 = 36640 +a36641 = 36641 +a36642 = 36642 +a36643 = 36643 +a36644 = 36644 +a36645 = 36645 +a36646 = 36646 +a36647 = 36647 +a36648 = 36648 +a36649 = 36649 +a36650 = 36650 +a36651 = 36651 +a36652 = 36652 +a36653 = 36653 +a36654 = 36654 +a36655 = 36655 +a36656 = 36656 +a36657 = 36657 +a36658 = 36658 +a36659 = 36659 +a36660 = 36660 +a36661 = 36661 +a36662 = 36662 +a36663 = 36663 +a36664 = 36664 +a36665 = 36665 +a36666 = 36666 +a36667 = 36667 +a36668 = 36668 +a36669 = 36669 +a36670 = 36670 +a36671 = 36671 +a36672 = 36672 +a36673 = 36673 +a36674 = 36674 +a36675 = 36675 +a36676 = 36676 +a36677 = 36677 +a36678 = 36678 +a36679 = 36679 +a36680 = 36680 +a36681 = 36681 +a36682 = 36682 +a36683 = 36683 +a36684 = 36684 +a36685 = 36685 +a36686 = 36686 +a36687 = 36687 +a36688 = 36688 +a36689 = 36689 +a36690 = 36690 +a36691 = 36691 +a36692 = 36692 +a36693 = 36693 +a36694 = 36694 +a36695 = 36695 +a36696 = 36696 +a36697 = 36697 +a36698 = 36698 +a36699 = 36699 +a36700 = 36700 +a36701 = 36701 +a36702 = 36702 +a36703 = 36703 +a36704 = 36704 +a36705 = 36705 +a36706 = 36706 +a36707 = 36707 +a36708 = 36708 +a36709 = 36709 +a36710 = 36710 +a36711 = 36711 +a36712 = 36712 +a36713 = 36713 +a36714 = 36714 +a36715 = 36715 +a36716 = 36716 +a36717 = 36717 +a36718 = 36718 +a36719 = 36719 +a36720 = 36720 +a36721 = 36721 +a36722 = 36722 +a36723 = 36723 +a36724 = 36724 +a36725 = 36725 +a36726 = 36726 +a36727 = 36727 +a36728 = 36728 +a36729 = 36729 +a36730 = 36730 +a36731 = 36731 +a36732 = 36732 +a36733 = 36733 +a36734 = 36734 +a36735 = 36735 +a36736 = 36736 +a36737 = 36737 +a36738 = 36738 +a36739 = 36739 +a36740 = 36740 +a36741 = 36741 +a36742 = 36742 +a36743 = 36743 +a36744 = 36744 +a36745 = 36745 +a36746 = 36746 +a36747 = 36747 +a36748 = 36748 +a36749 = 36749 +a36750 = 36750 +a36751 = 36751 +a36752 = 36752 +a36753 = 36753 +a36754 = 36754 +a36755 = 36755 +a36756 = 36756 +a36757 = 36757 +a36758 = 36758 +a36759 = 36759 +a36760 = 36760 +a36761 = 36761 +a36762 = 36762 +a36763 = 36763 +a36764 = 36764 +a36765 = 36765 +a36766 = 36766 +a36767 = 36767 +a36768 = 36768 +a36769 = 36769 +a36770 = 36770 +a36771 = 36771 +a36772 = 36772 +a36773 = 36773 +a36774 = 36774 +a36775 = 36775 +a36776 = 36776 +a36777 = 36777 +a36778 = 36778 +a36779 = 36779 +a36780 = 36780 +a36781 = 36781 +a36782 = 36782 +a36783 = 36783 +a36784 = 36784 +a36785 = 36785 +a36786 = 36786 +a36787 = 36787 +a36788 = 36788 +a36789 = 36789 +a36790 = 36790 +a36791 = 36791 +a36792 = 36792 +a36793 = 36793 +a36794 = 36794 +a36795 = 36795 +a36796 = 36796 +a36797 = 36797 +a36798 = 36798 +a36799 = 36799 +a36800 = 36800 +a36801 = 36801 +a36802 = 36802 +a36803 = 36803 +a36804 = 36804 +a36805 = 36805 +a36806 = 36806 +a36807 = 36807 +a36808 = 36808 +a36809 = 36809 +a36810 = 36810 +a36811 = 36811 +a36812 = 36812 +a36813 = 36813 +a36814 = 36814 +a36815 = 36815 +a36816 = 36816 +a36817 = 36817 +a36818 = 36818 +a36819 = 36819 +a36820 = 36820 +a36821 = 36821 +a36822 = 36822 +a36823 = 36823 +a36824 = 36824 +a36825 = 36825 +a36826 = 36826 +a36827 = 36827 +a36828 = 36828 +a36829 = 36829 +a36830 = 36830 +a36831 = 36831 +a36832 = 36832 +a36833 = 36833 +a36834 = 36834 +a36835 = 36835 +a36836 = 36836 +a36837 = 36837 +a36838 = 36838 +a36839 = 36839 +a36840 = 36840 +a36841 = 36841 +a36842 = 36842 +a36843 = 36843 +a36844 = 36844 +a36845 = 36845 +a36846 = 36846 +a36847 = 36847 +a36848 = 36848 +a36849 = 36849 +a36850 = 36850 +a36851 = 36851 +a36852 = 36852 +a36853 = 36853 +a36854 = 36854 +a36855 = 36855 +a36856 = 36856 +a36857 = 36857 +a36858 = 36858 +a36859 = 36859 +a36860 = 36860 +a36861 = 36861 +a36862 = 36862 +a36863 = 36863 +a36864 = 36864 +a36865 = 36865 +a36866 = 36866 +a36867 = 36867 +a36868 = 36868 +a36869 = 36869 +a36870 = 36870 +a36871 = 36871 +a36872 = 36872 +a36873 = 36873 +a36874 = 36874 +a36875 = 36875 +a36876 = 36876 +a36877 = 36877 +a36878 = 36878 +a36879 = 36879 +a36880 = 36880 +a36881 = 36881 +a36882 = 36882 +a36883 = 36883 +a36884 = 36884 +a36885 = 36885 +a36886 = 36886 +a36887 = 36887 +a36888 = 36888 +a36889 = 36889 +a36890 = 36890 +a36891 = 36891 +a36892 = 36892 +a36893 = 36893 +a36894 = 36894 +a36895 = 36895 +a36896 = 36896 +a36897 = 36897 +a36898 = 36898 +a36899 = 36899 +a36900 = 36900 +a36901 = 36901 +a36902 = 36902 +a36903 = 36903 +a36904 = 36904 +a36905 = 36905 +a36906 = 36906 +a36907 = 36907 +a36908 = 36908 +a36909 = 36909 +a36910 = 36910 +a36911 = 36911 +a36912 = 36912 +a36913 = 36913 +a36914 = 36914 +a36915 = 36915 +a36916 = 36916 +a36917 = 36917 +a36918 = 36918 +a36919 = 36919 +a36920 = 36920 +a36921 = 36921 +a36922 = 36922 +a36923 = 36923 +a36924 = 36924 +a36925 = 36925 +a36926 = 36926 +a36927 = 36927 +a36928 = 36928 +a36929 = 36929 +a36930 = 36930 +a36931 = 36931 +a36932 = 36932 +a36933 = 36933 +a36934 = 36934 +a36935 = 36935 +a36936 = 36936 +a36937 = 36937 +a36938 = 36938 +a36939 = 36939 +a36940 = 36940 +a36941 = 36941 +a36942 = 36942 +a36943 = 36943 +a36944 = 36944 +a36945 = 36945 +a36946 = 36946 +a36947 = 36947 +a36948 = 36948 +a36949 = 36949 +a36950 = 36950 +a36951 = 36951 +a36952 = 36952 +a36953 = 36953 +a36954 = 36954 +a36955 = 36955 +a36956 = 36956 +a36957 = 36957 +a36958 = 36958 +a36959 = 36959 +a36960 = 36960 +a36961 = 36961 +a36962 = 36962 +a36963 = 36963 +a36964 = 36964 +a36965 = 36965 +a36966 = 36966 +a36967 = 36967 +a36968 = 36968 +a36969 = 36969 +a36970 = 36970 +a36971 = 36971 +a36972 = 36972 +a36973 = 36973 +a36974 = 36974 +a36975 = 36975 +a36976 = 36976 +a36977 = 36977 +a36978 = 36978 +a36979 = 36979 +a36980 = 36980 +a36981 = 36981 +a36982 = 36982 +a36983 = 36983 +a36984 = 36984 +a36985 = 36985 +a36986 = 36986 +a36987 = 36987 +a36988 = 36988 +a36989 = 36989 +a36990 = 36990 +a36991 = 36991 +a36992 = 36992 +a36993 = 36993 +a36994 = 36994 +a36995 = 36995 +a36996 = 36996 +a36997 = 36997 +a36998 = 36998 +a36999 = 36999 +a37000 = 37000 +a37001 = 37001 +a37002 = 37002 +a37003 = 37003 +a37004 = 37004 +a37005 = 37005 +a37006 = 37006 +a37007 = 37007 +a37008 = 37008 +a37009 = 37009 +a37010 = 37010 +a37011 = 37011 +a37012 = 37012 +a37013 = 37013 +a37014 = 37014 +a37015 = 37015 +a37016 = 37016 +a37017 = 37017 +a37018 = 37018 +a37019 = 37019 +a37020 = 37020 +a37021 = 37021 +a37022 = 37022 +a37023 = 37023 +a37024 = 37024 +a37025 = 37025 +a37026 = 37026 +a37027 = 37027 +a37028 = 37028 +a37029 = 37029 +a37030 = 37030 +a37031 = 37031 +a37032 = 37032 +a37033 = 37033 +a37034 = 37034 +a37035 = 37035 +a37036 = 37036 +a37037 = 37037 +a37038 = 37038 +a37039 = 37039 +a37040 = 37040 +a37041 = 37041 +a37042 = 37042 +a37043 = 37043 +a37044 = 37044 +a37045 = 37045 +a37046 = 37046 +a37047 = 37047 +a37048 = 37048 +a37049 = 37049 +a37050 = 37050 +a37051 = 37051 +a37052 = 37052 +a37053 = 37053 +a37054 = 37054 +a37055 = 37055 +a37056 = 37056 +a37057 = 37057 +a37058 = 37058 +a37059 = 37059 +a37060 = 37060 +a37061 = 37061 +a37062 = 37062 +a37063 = 37063 +a37064 = 37064 +a37065 = 37065 +a37066 = 37066 +a37067 = 37067 +a37068 = 37068 +a37069 = 37069 +a37070 = 37070 +a37071 = 37071 +a37072 = 37072 +a37073 = 37073 +a37074 = 37074 +a37075 = 37075 +a37076 = 37076 +a37077 = 37077 +a37078 = 37078 +a37079 = 37079 +a37080 = 37080 +a37081 = 37081 +a37082 = 37082 +a37083 = 37083 +a37084 = 37084 +a37085 = 37085 +a37086 = 37086 +a37087 = 37087 +a37088 = 37088 +a37089 = 37089 +a37090 = 37090 +a37091 = 37091 +a37092 = 37092 +a37093 = 37093 +a37094 = 37094 +a37095 = 37095 +a37096 = 37096 +a37097 = 37097 +a37098 = 37098 +a37099 = 37099 +a37100 = 37100 +a37101 = 37101 +a37102 = 37102 +a37103 = 37103 +a37104 = 37104 +a37105 = 37105 +a37106 = 37106 +a37107 = 37107 +a37108 = 37108 +a37109 = 37109 +a37110 = 37110 +a37111 = 37111 +a37112 = 37112 +a37113 = 37113 +a37114 = 37114 +a37115 = 37115 +a37116 = 37116 +a37117 = 37117 +a37118 = 37118 +a37119 = 37119 +a37120 = 37120 +a37121 = 37121 +a37122 = 37122 +a37123 = 37123 +a37124 = 37124 +a37125 = 37125 +a37126 = 37126 +a37127 = 37127 +a37128 = 37128 +a37129 = 37129 +a37130 = 37130 +a37131 = 37131 +a37132 = 37132 +a37133 = 37133 +a37134 = 37134 +a37135 = 37135 +a37136 = 37136 +a37137 = 37137 +a37138 = 37138 +a37139 = 37139 +a37140 = 37140 +a37141 = 37141 +a37142 = 37142 +a37143 = 37143 +a37144 = 37144 +a37145 = 37145 +a37146 = 37146 +a37147 = 37147 +a37148 = 37148 +a37149 = 37149 +a37150 = 37150 +a37151 = 37151 +a37152 = 37152 +a37153 = 37153 +a37154 = 37154 +a37155 = 37155 +a37156 = 37156 +a37157 = 37157 +a37158 = 37158 +a37159 = 37159 +a37160 = 37160 +a37161 = 37161 +a37162 = 37162 +a37163 = 37163 +a37164 = 37164 +a37165 = 37165 +a37166 = 37166 +a37167 = 37167 +a37168 = 37168 +a37169 = 37169 +a37170 = 37170 +a37171 = 37171 +a37172 = 37172 +a37173 = 37173 +a37174 = 37174 +a37175 = 37175 +a37176 = 37176 +a37177 = 37177 +a37178 = 37178 +a37179 = 37179 +a37180 = 37180 +a37181 = 37181 +a37182 = 37182 +a37183 = 37183 +a37184 = 37184 +a37185 = 37185 +a37186 = 37186 +a37187 = 37187 +a37188 = 37188 +a37189 = 37189 +a37190 = 37190 +a37191 = 37191 +a37192 = 37192 +a37193 = 37193 +a37194 = 37194 +a37195 = 37195 +a37196 = 37196 +a37197 = 37197 +a37198 = 37198 +a37199 = 37199 +a37200 = 37200 +a37201 = 37201 +a37202 = 37202 +a37203 = 37203 +a37204 = 37204 +a37205 = 37205 +a37206 = 37206 +a37207 = 37207 +a37208 = 37208 +a37209 = 37209 +a37210 = 37210 +a37211 = 37211 +a37212 = 37212 +a37213 = 37213 +a37214 = 37214 +a37215 = 37215 +a37216 = 37216 +a37217 = 37217 +a37218 = 37218 +a37219 = 37219 +a37220 = 37220 +a37221 = 37221 +a37222 = 37222 +a37223 = 37223 +a37224 = 37224 +a37225 = 37225 +a37226 = 37226 +a37227 = 37227 +a37228 = 37228 +a37229 = 37229 +a37230 = 37230 +a37231 = 37231 +a37232 = 37232 +a37233 = 37233 +a37234 = 37234 +a37235 = 37235 +a37236 = 37236 +a37237 = 37237 +a37238 = 37238 +a37239 = 37239 +a37240 = 37240 +a37241 = 37241 +a37242 = 37242 +a37243 = 37243 +a37244 = 37244 +a37245 = 37245 +a37246 = 37246 +a37247 = 37247 +a37248 = 37248 +a37249 = 37249 +a37250 = 37250 +a37251 = 37251 +a37252 = 37252 +a37253 = 37253 +a37254 = 37254 +a37255 = 37255 +a37256 = 37256 +a37257 = 37257 +a37258 = 37258 +a37259 = 37259 +a37260 = 37260 +a37261 = 37261 +a37262 = 37262 +a37263 = 37263 +a37264 = 37264 +a37265 = 37265 +a37266 = 37266 +a37267 = 37267 +a37268 = 37268 +a37269 = 37269 +a37270 = 37270 +a37271 = 37271 +a37272 = 37272 +a37273 = 37273 +a37274 = 37274 +a37275 = 37275 +a37276 = 37276 +a37277 = 37277 +a37278 = 37278 +a37279 = 37279 +a37280 = 37280 +a37281 = 37281 +a37282 = 37282 +a37283 = 37283 +a37284 = 37284 +a37285 = 37285 +a37286 = 37286 +a37287 = 37287 +a37288 = 37288 +a37289 = 37289 +a37290 = 37290 +a37291 = 37291 +a37292 = 37292 +a37293 = 37293 +a37294 = 37294 +a37295 = 37295 +a37296 = 37296 +a37297 = 37297 +a37298 = 37298 +a37299 = 37299 +a37300 = 37300 +a37301 = 37301 +a37302 = 37302 +a37303 = 37303 +a37304 = 37304 +a37305 = 37305 +a37306 = 37306 +a37307 = 37307 +a37308 = 37308 +a37309 = 37309 +a37310 = 37310 +a37311 = 37311 +a37312 = 37312 +a37313 = 37313 +a37314 = 37314 +a37315 = 37315 +a37316 = 37316 +a37317 = 37317 +a37318 = 37318 +a37319 = 37319 +a37320 = 37320 +a37321 = 37321 +a37322 = 37322 +a37323 = 37323 +a37324 = 37324 +a37325 = 37325 +a37326 = 37326 +a37327 = 37327 +a37328 = 37328 +a37329 = 37329 +a37330 = 37330 +a37331 = 37331 +a37332 = 37332 +a37333 = 37333 +a37334 = 37334 +a37335 = 37335 +a37336 = 37336 +a37337 = 37337 +a37338 = 37338 +a37339 = 37339 +a37340 = 37340 +a37341 = 37341 +a37342 = 37342 +a37343 = 37343 +a37344 = 37344 +a37345 = 37345 +a37346 = 37346 +a37347 = 37347 +a37348 = 37348 +a37349 = 37349 +a37350 = 37350 +a37351 = 37351 +a37352 = 37352 +a37353 = 37353 +a37354 = 37354 +a37355 = 37355 +a37356 = 37356 +a37357 = 37357 +a37358 = 37358 +a37359 = 37359 +a37360 = 37360 +a37361 = 37361 +a37362 = 37362 +a37363 = 37363 +a37364 = 37364 +a37365 = 37365 +a37366 = 37366 +a37367 = 37367 +a37368 = 37368 +a37369 = 37369 +a37370 = 37370 +a37371 = 37371 +a37372 = 37372 +a37373 = 37373 +a37374 = 37374 +a37375 = 37375 +a37376 = 37376 +a37377 = 37377 +a37378 = 37378 +a37379 = 37379 +a37380 = 37380 +a37381 = 37381 +a37382 = 37382 +a37383 = 37383 +a37384 = 37384 +a37385 = 37385 +a37386 = 37386 +a37387 = 37387 +a37388 = 37388 +a37389 = 37389 +a37390 = 37390 +a37391 = 37391 +a37392 = 37392 +a37393 = 37393 +a37394 = 37394 +a37395 = 37395 +a37396 = 37396 +a37397 = 37397 +a37398 = 37398 +a37399 = 37399 +a37400 = 37400 +a37401 = 37401 +a37402 = 37402 +a37403 = 37403 +a37404 = 37404 +a37405 = 37405 +a37406 = 37406 +a37407 = 37407 +a37408 = 37408 +a37409 = 37409 +a37410 = 37410 +a37411 = 37411 +a37412 = 37412 +a37413 = 37413 +a37414 = 37414 +a37415 = 37415 +a37416 = 37416 +a37417 = 37417 +a37418 = 37418 +a37419 = 37419 +a37420 = 37420 +a37421 = 37421 +a37422 = 37422 +a37423 = 37423 +a37424 = 37424 +a37425 = 37425 +a37426 = 37426 +a37427 = 37427 +a37428 = 37428 +a37429 = 37429 +a37430 = 37430 +a37431 = 37431 +a37432 = 37432 +a37433 = 37433 +a37434 = 37434 +a37435 = 37435 +a37436 = 37436 +a37437 = 37437 +a37438 = 37438 +a37439 = 37439 +a37440 = 37440 +a37441 = 37441 +a37442 = 37442 +a37443 = 37443 +a37444 = 37444 +a37445 = 37445 +a37446 = 37446 +a37447 = 37447 +a37448 = 37448 +a37449 = 37449 +a37450 = 37450 +a37451 = 37451 +a37452 = 37452 +a37453 = 37453 +a37454 = 37454 +a37455 = 37455 +a37456 = 37456 +a37457 = 37457 +a37458 = 37458 +a37459 = 37459 +a37460 = 37460 +a37461 = 37461 +a37462 = 37462 +a37463 = 37463 +a37464 = 37464 +a37465 = 37465 +a37466 = 37466 +a37467 = 37467 +a37468 = 37468 +a37469 = 37469 +a37470 = 37470 +a37471 = 37471 +a37472 = 37472 +a37473 = 37473 +a37474 = 37474 +a37475 = 37475 +a37476 = 37476 +a37477 = 37477 +a37478 = 37478 +a37479 = 37479 +a37480 = 37480 +a37481 = 37481 +a37482 = 37482 +a37483 = 37483 +a37484 = 37484 +a37485 = 37485 +a37486 = 37486 +a37487 = 37487 +a37488 = 37488 +a37489 = 37489 +a37490 = 37490 +a37491 = 37491 +a37492 = 37492 +a37493 = 37493 +a37494 = 37494 +a37495 = 37495 +a37496 = 37496 +a37497 = 37497 +a37498 = 37498 +a37499 = 37499 +a37500 = 37500 +a37501 = 37501 +a37502 = 37502 +a37503 = 37503 +a37504 = 37504 +a37505 = 37505 +a37506 = 37506 +a37507 = 37507 +a37508 = 37508 +a37509 = 37509 +a37510 = 37510 +a37511 = 37511 +a37512 = 37512 +a37513 = 37513 +a37514 = 37514 +a37515 = 37515 +a37516 = 37516 +a37517 = 37517 +a37518 = 37518 +a37519 = 37519 +a37520 = 37520 +a37521 = 37521 +a37522 = 37522 +a37523 = 37523 +a37524 = 37524 +a37525 = 37525 +a37526 = 37526 +a37527 = 37527 +a37528 = 37528 +a37529 = 37529 +a37530 = 37530 +a37531 = 37531 +a37532 = 37532 +a37533 = 37533 +a37534 = 37534 +a37535 = 37535 +a37536 = 37536 +a37537 = 37537 +a37538 = 37538 +a37539 = 37539 +a37540 = 37540 +a37541 = 37541 +a37542 = 37542 +a37543 = 37543 +a37544 = 37544 +a37545 = 37545 +a37546 = 37546 +a37547 = 37547 +a37548 = 37548 +a37549 = 37549 +a37550 = 37550 +a37551 = 37551 +a37552 = 37552 +a37553 = 37553 +a37554 = 37554 +a37555 = 37555 +a37556 = 37556 +a37557 = 37557 +a37558 = 37558 +a37559 = 37559 +a37560 = 37560 +a37561 = 37561 +a37562 = 37562 +a37563 = 37563 +a37564 = 37564 +a37565 = 37565 +a37566 = 37566 +a37567 = 37567 +a37568 = 37568 +a37569 = 37569 +a37570 = 37570 +a37571 = 37571 +a37572 = 37572 +a37573 = 37573 +a37574 = 37574 +a37575 = 37575 +a37576 = 37576 +a37577 = 37577 +a37578 = 37578 +a37579 = 37579 +a37580 = 37580 +a37581 = 37581 +a37582 = 37582 +a37583 = 37583 +a37584 = 37584 +a37585 = 37585 +a37586 = 37586 +a37587 = 37587 +a37588 = 37588 +a37589 = 37589 +a37590 = 37590 +a37591 = 37591 +a37592 = 37592 +a37593 = 37593 +a37594 = 37594 +a37595 = 37595 +a37596 = 37596 +a37597 = 37597 +a37598 = 37598 +a37599 = 37599 +a37600 = 37600 +a37601 = 37601 +a37602 = 37602 +a37603 = 37603 +a37604 = 37604 +a37605 = 37605 +a37606 = 37606 +a37607 = 37607 +a37608 = 37608 +a37609 = 37609 +a37610 = 37610 +a37611 = 37611 +a37612 = 37612 +a37613 = 37613 +a37614 = 37614 +a37615 = 37615 +a37616 = 37616 +a37617 = 37617 +a37618 = 37618 +a37619 = 37619 +a37620 = 37620 +a37621 = 37621 +a37622 = 37622 +a37623 = 37623 +a37624 = 37624 +a37625 = 37625 +a37626 = 37626 +a37627 = 37627 +a37628 = 37628 +a37629 = 37629 +a37630 = 37630 +a37631 = 37631 +a37632 = 37632 +a37633 = 37633 +a37634 = 37634 +a37635 = 37635 +a37636 = 37636 +a37637 = 37637 +a37638 = 37638 +a37639 = 37639 +a37640 = 37640 +a37641 = 37641 +a37642 = 37642 +a37643 = 37643 +a37644 = 37644 +a37645 = 37645 +a37646 = 37646 +a37647 = 37647 +a37648 = 37648 +a37649 = 37649 +a37650 = 37650 +a37651 = 37651 +a37652 = 37652 +a37653 = 37653 +a37654 = 37654 +a37655 = 37655 +a37656 = 37656 +a37657 = 37657 +a37658 = 37658 +a37659 = 37659 +a37660 = 37660 +a37661 = 37661 +a37662 = 37662 +a37663 = 37663 +a37664 = 37664 +a37665 = 37665 +a37666 = 37666 +a37667 = 37667 +a37668 = 37668 +a37669 = 37669 +a37670 = 37670 +a37671 = 37671 +a37672 = 37672 +a37673 = 37673 +a37674 = 37674 +a37675 = 37675 +a37676 = 37676 +a37677 = 37677 +a37678 = 37678 +a37679 = 37679 +a37680 = 37680 +a37681 = 37681 +a37682 = 37682 +a37683 = 37683 +a37684 = 37684 +a37685 = 37685 +a37686 = 37686 +a37687 = 37687 +a37688 = 37688 +a37689 = 37689 +a37690 = 37690 +a37691 = 37691 +a37692 = 37692 +a37693 = 37693 +a37694 = 37694 +a37695 = 37695 +a37696 = 37696 +a37697 = 37697 +a37698 = 37698 +a37699 = 37699 +a37700 = 37700 +a37701 = 37701 +a37702 = 37702 +a37703 = 37703 +a37704 = 37704 +a37705 = 37705 +a37706 = 37706 +a37707 = 37707 +a37708 = 37708 +a37709 = 37709 +a37710 = 37710 +a37711 = 37711 +a37712 = 37712 +a37713 = 37713 +a37714 = 37714 +a37715 = 37715 +a37716 = 37716 +a37717 = 37717 +a37718 = 37718 +a37719 = 37719 +a37720 = 37720 +a37721 = 37721 +a37722 = 37722 +a37723 = 37723 +a37724 = 37724 +a37725 = 37725 +a37726 = 37726 +a37727 = 37727 +a37728 = 37728 +a37729 = 37729 +a37730 = 37730 +a37731 = 37731 +a37732 = 37732 +a37733 = 37733 +a37734 = 37734 +a37735 = 37735 +a37736 = 37736 +a37737 = 37737 +a37738 = 37738 +a37739 = 37739 +a37740 = 37740 +a37741 = 37741 +a37742 = 37742 +a37743 = 37743 +a37744 = 37744 +a37745 = 37745 +a37746 = 37746 +a37747 = 37747 +a37748 = 37748 +a37749 = 37749 +a37750 = 37750 +a37751 = 37751 +a37752 = 37752 +a37753 = 37753 +a37754 = 37754 +a37755 = 37755 +a37756 = 37756 +a37757 = 37757 +a37758 = 37758 +a37759 = 37759 +a37760 = 37760 +a37761 = 37761 +a37762 = 37762 +a37763 = 37763 +a37764 = 37764 +a37765 = 37765 +a37766 = 37766 +a37767 = 37767 +a37768 = 37768 +a37769 = 37769 +a37770 = 37770 +a37771 = 37771 +a37772 = 37772 +a37773 = 37773 +a37774 = 37774 +a37775 = 37775 +a37776 = 37776 +a37777 = 37777 +a37778 = 37778 +a37779 = 37779 +a37780 = 37780 +a37781 = 37781 +a37782 = 37782 +a37783 = 37783 +a37784 = 37784 +a37785 = 37785 +a37786 = 37786 +a37787 = 37787 +a37788 = 37788 +a37789 = 37789 +a37790 = 37790 +a37791 = 37791 +a37792 = 37792 +a37793 = 37793 +a37794 = 37794 +a37795 = 37795 +a37796 = 37796 +a37797 = 37797 +a37798 = 37798 +a37799 = 37799 +a37800 = 37800 +a37801 = 37801 +a37802 = 37802 +a37803 = 37803 +a37804 = 37804 +a37805 = 37805 +a37806 = 37806 +a37807 = 37807 +a37808 = 37808 +a37809 = 37809 +a37810 = 37810 +a37811 = 37811 +a37812 = 37812 +a37813 = 37813 +a37814 = 37814 +a37815 = 37815 +a37816 = 37816 +a37817 = 37817 +a37818 = 37818 +a37819 = 37819 +a37820 = 37820 +a37821 = 37821 +a37822 = 37822 +a37823 = 37823 +a37824 = 37824 +a37825 = 37825 +a37826 = 37826 +a37827 = 37827 +a37828 = 37828 +a37829 = 37829 +a37830 = 37830 +a37831 = 37831 +a37832 = 37832 +a37833 = 37833 +a37834 = 37834 +a37835 = 37835 +a37836 = 37836 +a37837 = 37837 +a37838 = 37838 +a37839 = 37839 +a37840 = 37840 +a37841 = 37841 +a37842 = 37842 +a37843 = 37843 +a37844 = 37844 +a37845 = 37845 +a37846 = 37846 +a37847 = 37847 +a37848 = 37848 +a37849 = 37849 +a37850 = 37850 +a37851 = 37851 +a37852 = 37852 +a37853 = 37853 +a37854 = 37854 +a37855 = 37855 +a37856 = 37856 +a37857 = 37857 +a37858 = 37858 +a37859 = 37859 +a37860 = 37860 +a37861 = 37861 +a37862 = 37862 +a37863 = 37863 +a37864 = 37864 +a37865 = 37865 +a37866 = 37866 +a37867 = 37867 +a37868 = 37868 +a37869 = 37869 +a37870 = 37870 +a37871 = 37871 +a37872 = 37872 +a37873 = 37873 +a37874 = 37874 +a37875 = 37875 +a37876 = 37876 +a37877 = 37877 +a37878 = 37878 +a37879 = 37879 +a37880 = 37880 +a37881 = 37881 +a37882 = 37882 +a37883 = 37883 +a37884 = 37884 +a37885 = 37885 +a37886 = 37886 +a37887 = 37887 +a37888 = 37888 +a37889 = 37889 +a37890 = 37890 +a37891 = 37891 +a37892 = 37892 +a37893 = 37893 +a37894 = 37894 +a37895 = 37895 +a37896 = 37896 +a37897 = 37897 +a37898 = 37898 +a37899 = 37899 +a37900 = 37900 +a37901 = 37901 +a37902 = 37902 +a37903 = 37903 +a37904 = 37904 +a37905 = 37905 +a37906 = 37906 +a37907 = 37907 +a37908 = 37908 +a37909 = 37909 +a37910 = 37910 +a37911 = 37911 +a37912 = 37912 +a37913 = 37913 +a37914 = 37914 +a37915 = 37915 +a37916 = 37916 +a37917 = 37917 +a37918 = 37918 +a37919 = 37919 +a37920 = 37920 +a37921 = 37921 +a37922 = 37922 +a37923 = 37923 +a37924 = 37924 +a37925 = 37925 +a37926 = 37926 +a37927 = 37927 +a37928 = 37928 +a37929 = 37929 +a37930 = 37930 +a37931 = 37931 +a37932 = 37932 +a37933 = 37933 +a37934 = 37934 +a37935 = 37935 +a37936 = 37936 +a37937 = 37937 +a37938 = 37938 +a37939 = 37939 +a37940 = 37940 +a37941 = 37941 +a37942 = 37942 +a37943 = 37943 +a37944 = 37944 +a37945 = 37945 +a37946 = 37946 +a37947 = 37947 +a37948 = 37948 +a37949 = 37949 +a37950 = 37950 +a37951 = 37951 +a37952 = 37952 +a37953 = 37953 +a37954 = 37954 +a37955 = 37955 +a37956 = 37956 +a37957 = 37957 +a37958 = 37958 +a37959 = 37959 +a37960 = 37960 +a37961 = 37961 +a37962 = 37962 +a37963 = 37963 +a37964 = 37964 +a37965 = 37965 +a37966 = 37966 +a37967 = 37967 +a37968 = 37968 +a37969 = 37969 +a37970 = 37970 +a37971 = 37971 +a37972 = 37972 +a37973 = 37973 +a37974 = 37974 +a37975 = 37975 +a37976 = 37976 +a37977 = 37977 +a37978 = 37978 +a37979 = 37979 +a37980 = 37980 +a37981 = 37981 +a37982 = 37982 +a37983 = 37983 +a37984 = 37984 +a37985 = 37985 +a37986 = 37986 +a37987 = 37987 +a37988 = 37988 +a37989 = 37989 +a37990 = 37990 +a37991 = 37991 +a37992 = 37992 +a37993 = 37993 +a37994 = 37994 +a37995 = 37995 +a37996 = 37996 +a37997 = 37997 +a37998 = 37998 +a37999 = 37999 +a38000 = 38000 +a38001 = 38001 +a38002 = 38002 +a38003 = 38003 +a38004 = 38004 +a38005 = 38005 +a38006 = 38006 +a38007 = 38007 +a38008 = 38008 +a38009 = 38009 +a38010 = 38010 +a38011 = 38011 +a38012 = 38012 +a38013 = 38013 +a38014 = 38014 +a38015 = 38015 +a38016 = 38016 +a38017 = 38017 +a38018 = 38018 +a38019 = 38019 +a38020 = 38020 +a38021 = 38021 +a38022 = 38022 +a38023 = 38023 +a38024 = 38024 +a38025 = 38025 +a38026 = 38026 +a38027 = 38027 +a38028 = 38028 +a38029 = 38029 +a38030 = 38030 +a38031 = 38031 +a38032 = 38032 +a38033 = 38033 +a38034 = 38034 +a38035 = 38035 +a38036 = 38036 +a38037 = 38037 +a38038 = 38038 +a38039 = 38039 +a38040 = 38040 +a38041 = 38041 +a38042 = 38042 +a38043 = 38043 +a38044 = 38044 +a38045 = 38045 +a38046 = 38046 +a38047 = 38047 +a38048 = 38048 +a38049 = 38049 +a38050 = 38050 +a38051 = 38051 +a38052 = 38052 +a38053 = 38053 +a38054 = 38054 +a38055 = 38055 +a38056 = 38056 +a38057 = 38057 +a38058 = 38058 +a38059 = 38059 +a38060 = 38060 +a38061 = 38061 +a38062 = 38062 +a38063 = 38063 +a38064 = 38064 +a38065 = 38065 +a38066 = 38066 +a38067 = 38067 +a38068 = 38068 +a38069 = 38069 +a38070 = 38070 +a38071 = 38071 +a38072 = 38072 +a38073 = 38073 +a38074 = 38074 +a38075 = 38075 +a38076 = 38076 +a38077 = 38077 +a38078 = 38078 +a38079 = 38079 +a38080 = 38080 +a38081 = 38081 +a38082 = 38082 +a38083 = 38083 +a38084 = 38084 +a38085 = 38085 +a38086 = 38086 +a38087 = 38087 +a38088 = 38088 +a38089 = 38089 +a38090 = 38090 +a38091 = 38091 +a38092 = 38092 +a38093 = 38093 +a38094 = 38094 +a38095 = 38095 +a38096 = 38096 +a38097 = 38097 +a38098 = 38098 +a38099 = 38099 +a38100 = 38100 +a38101 = 38101 +a38102 = 38102 +a38103 = 38103 +a38104 = 38104 +a38105 = 38105 +a38106 = 38106 +a38107 = 38107 +a38108 = 38108 +a38109 = 38109 +a38110 = 38110 +a38111 = 38111 +a38112 = 38112 +a38113 = 38113 +a38114 = 38114 +a38115 = 38115 +a38116 = 38116 +a38117 = 38117 +a38118 = 38118 +a38119 = 38119 +a38120 = 38120 +a38121 = 38121 +a38122 = 38122 +a38123 = 38123 +a38124 = 38124 +a38125 = 38125 +a38126 = 38126 +a38127 = 38127 +a38128 = 38128 +a38129 = 38129 +a38130 = 38130 +a38131 = 38131 +a38132 = 38132 +a38133 = 38133 +a38134 = 38134 +a38135 = 38135 +a38136 = 38136 +a38137 = 38137 +a38138 = 38138 +a38139 = 38139 +a38140 = 38140 +a38141 = 38141 +a38142 = 38142 +a38143 = 38143 +a38144 = 38144 +a38145 = 38145 +a38146 = 38146 +a38147 = 38147 +a38148 = 38148 +a38149 = 38149 +a38150 = 38150 +a38151 = 38151 +a38152 = 38152 +a38153 = 38153 +a38154 = 38154 +a38155 = 38155 +a38156 = 38156 +a38157 = 38157 +a38158 = 38158 +a38159 = 38159 +a38160 = 38160 +a38161 = 38161 +a38162 = 38162 +a38163 = 38163 +a38164 = 38164 +a38165 = 38165 +a38166 = 38166 +a38167 = 38167 +a38168 = 38168 +a38169 = 38169 +a38170 = 38170 +a38171 = 38171 +a38172 = 38172 +a38173 = 38173 +a38174 = 38174 +a38175 = 38175 +a38176 = 38176 +a38177 = 38177 +a38178 = 38178 +a38179 = 38179 +a38180 = 38180 +a38181 = 38181 +a38182 = 38182 +a38183 = 38183 +a38184 = 38184 +a38185 = 38185 +a38186 = 38186 +a38187 = 38187 +a38188 = 38188 +a38189 = 38189 +a38190 = 38190 +a38191 = 38191 +a38192 = 38192 +a38193 = 38193 +a38194 = 38194 +a38195 = 38195 +a38196 = 38196 +a38197 = 38197 +a38198 = 38198 +a38199 = 38199 +a38200 = 38200 +a38201 = 38201 +a38202 = 38202 +a38203 = 38203 +a38204 = 38204 +a38205 = 38205 +a38206 = 38206 +a38207 = 38207 +a38208 = 38208 +a38209 = 38209 +a38210 = 38210 +a38211 = 38211 +a38212 = 38212 +a38213 = 38213 +a38214 = 38214 +a38215 = 38215 +a38216 = 38216 +a38217 = 38217 +a38218 = 38218 +a38219 = 38219 +a38220 = 38220 +a38221 = 38221 +a38222 = 38222 +a38223 = 38223 +a38224 = 38224 +a38225 = 38225 +a38226 = 38226 +a38227 = 38227 +a38228 = 38228 +a38229 = 38229 +a38230 = 38230 +a38231 = 38231 +a38232 = 38232 +a38233 = 38233 +a38234 = 38234 +a38235 = 38235 +a38236 = 38236 +a38237 = 38237 +a38238 = 38238 +a38239 = 38239 +a38240 = 38240 +a38241 = 38241 +a38242 = 38242 +a38243 = 38243 +a38244 = 38244 +a38245 = 38245 +a38246 = 38246 +a38247 = 38247 +a38248 = 38248 +a38249 = 38249 +a38250 = 38250 +a38251 = 38251 +a38252 = 38252 +a38253 = 38253 +a38254 = 38254 +a38255 = 38255 +a38256 = 38256 +a38257 = 38257 +a38258 = 38258 +a38259 = 38259 +a38260 = 38260 +a38261 = 38261 +a38262 = 38262 +a38263 = 38263 +a38264 = 38264 +a38265 = 38265 +a38266 = 38266 +a38267 = 38267 +a38268 = 38268 +a38269 = 38269 +a38270 = 38270 +a38271 = 38271 +a38272 = 38272 +a38273 = 38273 +a38274 = 38274 +a38275 = 38275 +a38276 = 38276 +a38277 = 38277 +a38278 = 38278 +a38279 = 38279 +a38280 = 38280 +a38281 = 38281 +a38282 = 38282 +a38283 = 38283 +a38284 = 38284 +a38285 = 38285 +a38286 = 38286 +a38287 = 38287 +a38288 = 38288 +a38289 = 38289 +a38290 = 38290 +a38291 = 38291 +a38292 = 38292 +a38293 = 38293 +a38294 = 38294 +a38295 = 38295 +a38296 = 38296 +a38297 = 38297 +a38298 = 38298 +a38299 = 38299 +a38300 = 38300 +a38301 = 38301 +a38302 = 38302 +a38303 = 38303 +a38304 = 38304 +a38305 = 38305 +a38306 = 38306 +a38307 = 38307 +a38308 = 38308 +a38309 = 38309 +a38310 = 38310 +a38311 = 38311 +a38312 = 38312 +a38313 = 38313 +a38314 = 38314 +a38315 = 38315 +a38316 = 38316 +a38317 = 38317 +a38318 = 38318 +a38319 = 38319 +a38320 = 38320 +a38321 = 38321 +a38322 = 38322 +a38323 = 38323 +a38324 = 38324 +a38325 = 38325 +a38326 = 38326 +a38327 = 38327 +a38328 = 38328 +a38329 = 38329 +a38330 = 38330 +a38331 = 38331 +a38332 = 38332 +a38333 = 38333 +a38334 = 38334 +a38335 = 38335 +a38336 = 38336 +a38337 = 38337 +a38338 = 38338 +a38339 = 38339 +a38340 = 38340 +a38341 = 38341 +a38342 = 38342 +a38343 = 38343 +a38344 = 38344 +a38345 = 38345 +a38346 = 38346 +a38347 = 38347 +a38348 = 38348 +a38349 = 38349 +a38350 = 38350 +a38351 = 38351 +a38352 = 38352 +a38353 = 38353 +a38354 = 38354 +a38355 = 38355 +a38356 = 38356 +a38357 = 38357 +a38358 = 38358 +a38359 = 38359 +a38360 = 38360 +a38361 = 38361 +a38362 = 38362 +a38363 = 38363 +a38364 = 38364 +a38365 = 38365 +a38366 = 38366 +a38367 = 38367 +a38368 = 38368 +a38369 = 38369 +a38370 = 38370 +a38371 = 38371 +a38372 = 38372 +a38373 = 38373 +a38374 = 38374 +a38375 = 38375 +a38376 = 38376 +a38377 = 38377 +a38378 = 38378 +a38379 = 38379 +a38380 = 38380 +a38381 = 38381 +a38382 = 38382 +a38383 = 38383 +a38384 = 38384 +a38385 = 38385 +a38386 = 38386 +a38387 = 38387 +a38388 = 38388 +a38389 = 38389 +a38390 = 38390 +a38391 = 38391 +a38392 = 38392 +a38393 = 38393 +a38394 = 38394 +a38395 = 38395 +a38396 = 38396 +a38397 = 38397 +a38398 = 38398 +a38399 = 38399 +a38400 = 38400 +a38401 = 38401 +a38402 = 38402 +a38403 = 38403 +a38404 = 38404 +a38405 = 38405 +a38406 = 38406 +a38407 = 38407 +a38408 = 38408 +a38409 = 38409 +a38410 = 38410 +a38411 = 38411 +a38412 = 38412 +a38413 = 38413 +a38414 = 38414 +a38415 = 38415 +a38416 = 38416 +a38417 = 38417 +a38418 = 38418 +a38419 = 38419 +a38420 = 38420 +a38421 = 38421 +a38422 = 38422 +a38423 = 38423 +a38424 = 38424 +a38425 = 38425 +a38426 = 38426 +a38427 = 38427 +a38428 = 38428 +a38429 = 38429 +a38430 = 38430 +a38431 = 38431 +a38432 = 38432 +a38433 = 38433 +a38434 = 38434 +a38435 = 38435 +a38436 = 38436 +a38437 = 38437 +a38438 = 38438 +a38439 = 38439 +a38440 = 38440 +a38441 = 38441 +a38442 = 38442 +a38443 = 38443 +a38444 = 38444 +a38445 = 38445 +a38446 = 38446 +a38447 = 38447 +a38448 = 38448 +a38449 = 38449 +a38450 = 38450 +a38451 = 38451 +a38452 = 38452 +a38453 = 38453 +a38454 = 38454 +a38455 = 38455 +a38456 = 38456 +a38457 = 38457 +a38458 = 38458 +a38459 = 38459 +a38460 = 38460 +a38461 = 38461 +a38462 = 38462 +a38463 = 38463 +a38464 = 38464 +a38465 = 38465 +a38466 = 38466 +a38467 = 38467 +a38468 = 38468 +a38469 = 38469 +a38470 = 38470 +a38471 = 38471 +a38472 = 38472 +a38473 = 38473 +a38474 = 38474 +a38475 = 38475 +a38476 = 38476 +a38477 = 38477 +a38478 = 38478 +a38479 = 38479 +a38480 = 38480 +a38481 = 38481 +a38482 = 38482 +a38483 = 38483 +a38484 = 38484 +a38485 = 38485 +a38486 = 38486 +a38487 = 38487 +a38488 = 38488 +a38489 = 38489 +a38490 = 38490 +a38491 = 38491 +a38492 = 38492 +a38493 = 38493 +a38494 = 38494 +a38495 = 38495 +a38496 = 38496 +a38497 = 38497 +a38498 = 38498 +a38499 = 38499 +a38500 = 38500 +a38501 = 38501 +a38502 = 38502 +a38503 = 38503 +a38504 = 38504 +a38505 = 38505 +a38506 = 38506 +a38507 = 38507 +a38508 = 38508 +a38509 = 38509 +a38510 = 38510 +a38511 = 38511 +a38512 = 38512 +a38513 = 38513 +a38514 = 38514 +a38515 = 38515 +a38516 = 38516 +a38517 = 38517 +a38518 = 38518 +a38519 = 38519 +a38520 = 38520 +a38521 = 38521 +a38522 = 38522 +a38523 = 38523 +a38524 = 38524 +a38525 = 38525 +a38526 = 38526 +a38527 = 38527 +a38528 = 38528 +a38529 = 38529 +a38530 = 38530 +a38531 = 38531 +a38532 = 38532 +a38533 = 38533 +a38534 = 38534 +a38535 = 38535 +a38536 = 38536 +a38537 = 38537 +a38538 = 38538 +a38539 = 38539 +a38540 = 38540 +a38541 = 38541 +a38542 = 38542 +a38543 = 38543 +a38544 = 38544 +a38545 = 38545 +a38546 = 38546 +a38547 = 38547 +a38548 = 38548 +a38549 = 38549 +a38550 = 38550 +a38551 = 38551 +a38552 = 38552 +a38553 = 38553 +a38554 = 38554 +a38555 = 38555 +a38556 = 38556 +a38557 = 38557 +a38558 = 38558 +a38559 = 38559 +a38560 = 38560 +a38561 = 38561 +a38562 = 38562 +a38563 = 38563 +a38564 = 38564 +a38565 = 38565 +a38566 = 38566 +a38567 = 38567 +a38568 = 38568 +a38569 = 38569 +a38570 = 38570 +a38571 = 38571 +a38572 = 38572 +a38573 = 38573 +a38574 = 38574 +a38575 = 38575 +a38576 = 38576 +a38577 = 38577 +a38578 = 38578 +a38579 = 38579 +a38580 = 38580 +a38581 = 38581 +a38582 = 38582 +a38583 = 38583 +a38584 = 38584 +a38585 = 38585 +a38586 = 38586 +a38587 = 38587 +a38588 = 38588 +a38589 = 38589 +a38590 = 38590 +a38591 = 38591 +a38592 = 38592 +a38593 = 38593 +a38594 = 38594 +a38595 = 38595 +a38596 = 38596 +a38597 = 38597 +a38598 = 38598 +a38599 = 38599 +a38600 = 38600 +a38601 = 38601 +a38602 = 38602 +a38603 = 38603 +a38604 = 38604 +a38605 = 38605 +a38606 = 38606 +a38607 = 38607 +a38608 = 38608 +a38609 = 38609 +a38610 = 38610 +a38611 = 38611 +a38612 = 38612 +a38613 = 38613 +a38614 = 38614 +a38615 = 38615 +a38616 = 38616 +a38617 = 38617 +a38618 = 38618 +a38619 = 38619 +a38620 = 38620 +a38621 = 38621 +a38622 = 38622 +a38623 = 38623 +a38624 = 38624 +a38625 = 38625 +a38626 = 38626 +a38627 = 38627 +a38628 = 38628 +a38629 = 38629 +a38630 = 38630 +a38631 = 38631 +a38632 = 38632 +a38633 = 38633 +a38634 = 38634 +a38635 = 38635 +a38636 = 38636 +a38637 = 38637 +a38638 = 38638 +a38639 = 38639 +a38640 = 38640 +a38641 = 38641 +a38642 = 38642 +a38643 = 38643 +a38644 = 38644 +a38645 = 38645 +a38646 = 38646 +a38647 = 38647 +a38648 = 38648 +a38649 = 38649 +a38650 = 38650 +a38651 = 38651 +a38652 = 38652 +a38653 = 38653 +a38654 = 38654 +a38655 = 38655 +a38656 = 38656 +a38657 = 38657 +a38658 = 38658 +a38659 = 38659 +a38660 = 38660 +a38661 = 38661 +a38662 = 38662 +a38663 = 38663 +a38664 = 38664 +a38665 = 38665 +a38666 = 38666 +a38667 = 38667 +a38668 = 38668 +a38669 = 38669 +a38670 = 38670 +a38671 = 38671 +a38672 = 38672 +a38673 = 38673 +a38674 = 38674 +a38675 = 38675 +a38676 = 38676 +a38677 = 38677 +a38678 = 38678 +a38679 = 38679 +a38680 = 38680 +a38681 = 38681 +a38682 = 38682 +a38683 = 38683 +a38684 = 38684 +a38685 = 38685 +a38686 = 38686 +a38687 = 38687 +a38688 = 38688 +a38689 = 38689 +a38690 = 38690 +a38691 = 38691 +a38692 = 38692 +a38693 = 38693 +a38694 = 38694 +a38695 = 38695 +a38696 = 38696 +a38697 = 38697 +a38698 = 38698 +a38699 = 38699 +a38700 = 38700 +a38701 = 38701 +a38702 = 38702 +a38703 = 38703 +a38704 = 38704 +a38705 = 38705 +a38706 = 38706 +a38707 = 38707 +a38708 = 38708 +a38709 = 38709 +a38710 = 38710 +a38711 = 38711 +a38712 = 38712 +a38713 = 38713 +a38714 = 38714 +a38715 = 38715 +a38716 = 38716 +a38717 = 38717 +a38718 = 38718 +a38719 = 38719 +a38720 = 38720 +a38721 = 38721 +a38722 = 38722 +a38723 = 38723 +a38724 = 38724 +a38725 = 38725 +a38726 = 38726 +a38727 = 38727 +a38728 = 38728 +a38729 = 38729 +a38730 = 38730 +a38731 = 38731 +a38732 = 38732 +a38733 = 38733 +a38734 = 38734 +a38735 = 38735 +a38736 = 38736 +a38737 = 38737 +a38738 = 38738 +a38739 = 38739 +a38740 = 38740 +a38741 = 38741 +a38742 = 38742 +a38743 = 38743 +a38744 = 38744 +a38745 = 38745 +a38746 = 38746 +a38747 = 38747 +a38748 = 38748 +a38749 = 38749 +a38750 = 38750 +a38751 = 38751 +a38752 = 38752 +a38753 = 38753 +a38754 = 38754 +a38755 = 38755 +a38756 = 38756 +a38757 = 38757 +a38758 = 38758 +a38759 = 38759 +a38760 = 38760 +a38761 = 38761 +a38762 = 38762 +a38763 = 38763 +a38764 = 38764 +a38765 = 38765 +a38766 = 38766 +a38767 = 38767 +a38768 = 38768 +a38769 = 38769 +a38770 = 38770 +a38771 = 38771 +a38772 = 38772 +a38773 = 38773 +a38774 = 38774 +a38775 = 38775 +a38776 = 38776 +a38777 = 38777 +a38778 = 38778 +a38779 = 38779 +a38780 = 38780 +a38781 = 38781 +a38782 = 38782 +a38783 = 38783 +a38784 = 38784 +a38785 = 38785 +a38786 = 38786 +a38787 = 38787 +a38788 = 38788 +a38789 = 38789 +a38790 = 38790 +a38791 = 38791 +a38792 = 38792 +a38793 = 38793 +a38794 = 38794 +a38795 = 38795 +a38796 = 38796 +a38797 = 38797 +a38798 = 38798 +a38799 = 38799 +a38800 = 38800 +a38801 = 38801 +a38802 = 38802 +a38803 = 38803 +a38804 = 38804 +a38805 = 38805 +a38806 = 38806 +a38807 = 38807 +a38808 = 38808 +a38809 = 38809 +a38810 = 38810 +a38811 = 38811 +a38812 = 38812 +a38813 = 38813 +a38814 = 38814 +a38815 = 38815 +a38816 = 38816 +a38817 = 38817 +a38818 = 38818 +a38819 = 38819 +a38820 = 38820 +a38821 = 38821 +a38822 = 38822 +a38823 = 38823 +a38824 = 38824 +a38825 = 38825 +a38826 = 38826 +a38827 = 38827 +a38828 = 38828 +a38829 = 38829 +a38830 = 38830 +a38831 = 38831 +a38832 = 38832 +a38833 = 38833 +a38834 = 38834 +a38835 = 38835 +a38836 = 38836 +a38837 = 38837 +a38838 = 38838 +a38839 = 38839 +a38840 = 38840 +a38841 = 38841 +a38842 = 38842 +a38843 = 38843 +a38844 = 38844 +a38845 = 38845 +a38846 = 38846 +a38847 = 38847 +a38848 = 38848 +a38849 = 38849 +a38850 = 38850 +a38851 = 38851 +a38852 = 38852 +a38853 = 38853 +a38854 = 38854 +a38855 = 38855 +a38856 = 38856 +a38857 = 38857 +a38858 = 38858 +a38859 = 38859 +a38860 = 38860 +a38861 = 38861 +a38862 = 38862 +a38863 = 38863 +a38864 = 38864 +a38865 = 38865 +a38866 = 38866 +a38867 = 38867 +a38868 = 38868 +a38869 = 38869 +a38870 = 38870 +a38871 = 38871 +a38872 = 38872 +a38873 = 38873 +a38874 = 38874 +a38875 = 38875 +a38876 = 38876 +a38877 = 38877 +a38878 = 38878 +a38879 = 38879 +a38880 = 38880 +a38881 = 38881 +a38882 = 38882 +a38883 = 38883 +a38884 = 38884 +a38885 = 38885 +a38886 = 38886 +a38887 = 38887 +a38888 = 38888 +a38889 = 38889 +a38890 = 38890 +a38891 = 38891 +a38892 = 38892 +a38893 = 38893 +a38894 = 38894 +a38895 = 38895 +a38896 = 38896 +a38897 = 38897 +a38898 = 38898 +a38899 = 38899 +a38900 = 38900 +a38901 = 38901 +a38902 = 38902 +a38903 = 38903 +a38904 = 38904 +a38905 = 38905 +a38906 = 38906 +a38907 = 38907 +a38908 = 38908 +a38909 = 38909 +a38910 = 38910 +a38911 = 38911 +a38912 = 38912 +a38913 = 38913 +a38914 = 38914 +a38915 = 38915 +a38916 = 38916 +a38917 = 38917 +a38918 = 38918 +a38919 = 38919 +a38920 = 38920 +a38921 = 38921 +a38922 = 38922 +a38923 = 38923 +a38924 = 38924 +a38925 = 38925 +a38926 = 38926 +a38927 = 38927 +a38928 = 38928 +a38929 = 38929 +a38930 = 38930 +a38931 = 38931 +a38932 = 38932 +a38933 = 38933 +a38934 = 38934 +a38935 = 38935 +a38936 = 38936 +a38937 = 38937 +a38938 = 38938 +a38939 = 38939 +a38940 = 38940 +a38941 = 38941 +a38942 = 38942 +a38943 = 38943 +a38944 = 38944 +a38945 = 38945 +a38946 = 38946 +a38947 = 38947 +a38948 = 38948 +a38949 = 38949 +a38950 = 38950 +a38951 = 38951 +a38952 = 38952 +a38953 = 38953 +a38954 = 38954 +a38955 = 38955 +a38956 = 38956 +a38957 = 38957 +a38958 = 38958 +a38959 = 38959 +a38960 = 38960 +a38961 = 38961 +a38962 = 38962 +a38963 = 38963 +a38964 = 38964 +a38965 = 38965 +a38966 = 38966 +a38967 = 38967 +a38968 = 38968 +a38969 = 38969 +a38970 = 38970 +a38971 = 38971 +a38972 = 38972 +a38973 = 38973 +a38974 = 38974 +a38975 = 38975 +a38976 = 38976 +a38977 = 38977 +a38978 = 38978 +a38979 = 38979 +a38980 = 38980 +a38981 = 38981 +a38982 = 38982 +a38983 = 38983 +a38984 = 38984 +a38985 = 38985 +a38986 = 38986 +a38987 = 38987 +a38988 = 38988 +a38989 = 38989 +a38990 = 38990 +a38991 = 38991 +a38992 = 38992 +a38993 = 38993 +a38994 = 38994 +a38995 = 38995 +a38996 = 38996 +a38997 = 38997 +a38998 = 38998 +a38999 = 38999 +a39000 = 39000 +a39001 = 39001 +a39002 = 39002 +a39003 = 39003 +a39004 = 39004 +a39005 = 39005 +a39006 = 39006 +a39007 = 39007 +a39008 = 39008 +a39009 = 39009 +a39010 = 39010 +a39011 = 39011 +a39012 = 39012 +a39013 = 39013 +a39014 = 39014 +a39015 = 39015 +a39016 = 39016 +a39017 = 39017 +a39018 = 39018 +a39019 = 39019 +a39020 = 39020 +a39021 = 39021 +a39022 = 39022 +a39023 = 39023 +a39024 = 39024 +a39025 = 39025 +a39026 = 39026 +a39027 = 39027 +a39028 = 39028 +a39029 = 39029 +a39030 = 39030 +a39031 = 39031 +a39032 = 39032 +a39033 = 39033 +a39034 = 39034 +a39035 = 39035 +a39036 = 39036 +a39037 = 39037 +a39038 = 39038 +a39039 = 39039 +a39040 = 39040 +a39041 = 39041 +a39042 = 39042 +a39043 = 39043 +a39044 = 39044 +a39045 = 39045 +a39046 = 39046 +a39047 = 39047 +a39048 = 39048 +a39049 = 39049 +a39050 = 39050 +a39051 = 39051 +a39052 = 39052 +a39053 = 39053 +a39054 = 39054 +a39055 = 39055 +a39056 = 39056 +a39057 = 39057 +a39058 = 39058 +a39059 = 39059 +a39060 = 39060 +a39061 = 39061 +a39062 = 39062 +a39063 = 39063 +a39064 = 39064 +a39065 = 39065 +a39066 = 39066 +a39067 = 39067 +a39068 = 39068 +a39069 = 39069 +a39070 = 39070 +a39071 = 39071 +a39072 = 39072 +a39073 = 39073 +a39074 = 39074 +a39075 = 39075 +a39076 = 39076 +a39077 = 39077 +a39078 = 39078 +a39079 = 39079 +a39080 = 39080 +a39081 = 39081 +a39082 = 39082 +a39083 = 39083 +a39084 = 39084 +a39085 = 39085 +a39086 = 39086 +a39087 = 39087 +a39088 = 39088 +a39089 = 39089 +a39090 = 39090 +a39091 = 39091 +a39092 = 39092 +a39093 = 39093 +a39094 = 39094 +a39095 = 39095 +a39096 = 39096 +a39097 = 39097 +a39098 = 39098 +a39099 = 39099 +a39100 = 39100 +a39101 = 39101 +a39102 = 39102 +a39103 = 39103 +a39104 = 39104 +a39105 = 39105 +a39106 = 39106 +a39107 = 39107 +a39108 = 39108 +a39109 = 39109 +a39110 = 39110 +a39111 = 39111 +a39112 = 39112 +a39113 = 39113 +a39114 = 39114 +a39115 = 39115 +a39116 = 39116 +a39117 = 39117 +a39118 = 39118 +a39119 = 39119 +a39120 = 39120 +a39121 = 39121 +a39122 = 39122 +a39123 = 39123 +a39124 = 39124 +a39125 = 39125 +a39126 = 39126 +a39127 = 39127 +a39128 = 39128 +a39129 = 39129 +a39130 = 39130 +a39131 = 39131 +a39132 = 39132 +a39133 = 39133 +a39134 = 39134 +a39135 = 39135 +a39136 = 39136 +a39137 = 39137 +a39138 = 39138 +a39139 = 39139 +a39140 = 39140 +a39141 = 39141 +a39142 = 39142 +a39143 = 39143 +a39144 = 39144 +a39145 = 39145 +a39146 = 39146 +a39147 = 39147 +a39148 = 39148 +a39149 = 39149 +a39150 = 39150 +a39151 = 39151 +a39152 = 39152 +a39153 = 39153 +a39154 = 39154 +a39155 = 39155 +a39156 = 39156 +a39157 = 39157 +a39158 = 39158 +a39159 = 39159 +a39160 = 39160 +a39161 = 39161 +a39162 = 39162 +a39163 = 39163 +a39164 = 39164 +a39165 = 39165 +a39166 = 39166 +a39167 = 39167 +a39168 = 39168 +a39169 = 39169 +a39170 = 39170 +a39171 = 39171 +a39172 = 39172 +a39173 = 39173 +a39174 = 39174 +a39175 = 39175 +a39176 = 39176 +a39177 = 39177 +a39178 = 39178 +a39179 = 39179 +a39180 = 39180 +a39181 = 39181 +a39182 = 39182 +a39183 = 39183 +a39184 = 39184 +a39185 = 39185 +a39186 = 39186 +a39187 = 39187 +a39188 = 39188 +a39189 = 39189 +a39190 = 39190 +a39191 = 39191 +a39192 = 39192 +a39193 = 39193 +a39194 = 39194 +a39195 = 39195 +a39196 = 39196 +a39197 = 39197 +a39198 = 39198 +a39199 = 39199 +a39200 = 39200 +a39201 = 39201 +a39202 = 39202 +a39203 = 39203 +a39204 = 39204 +a39205 = 39205 +a39206 = 39206 +a39207 = 39207 +a39208 = 39208 +a39209 = 39209 +a39210 = 39210 +a39211 = 39211 +a39212 = 39212 +a39213 = 39213 +a39214 = 39214 +a39215 = 39215 +a39216 = 39216 +a39217 = 39217 +a39218 = 39218 +a39219 = 39219 +a39220 = 39220 +a39221 = 39221 +a39222 = 39222 +a39223 = 39223 +a39224 = 39224 +a39225 = 39225 +a39226 = 39226 +a39227 = 39227 +a39228 = 39228 +a39229 = 39229 +a39230 = 39230 +a39231 = 39231 +a39232 = 39232 +a39233 = 39233 +a39234 = 39234 +a39235 = 39235 +a39236 = 39236 +a39237 = 39237 +a39238 = 39238 +a39239 = 39239 +a39240 = 39240 +a39241 = 39241 +a39242 = 39242 +a39243 = 39243 +a39244 = 39244 +a39245 = 39245 +a39246 = 39246 +a39247 = 39247 +a39248 = 39248 +a39249 = 39249 +a39250 = 39250 +a39251 = 39251 +a39252 = 39252 +a39253 = 39253 +a39254 = 39254 +a39255 = 39255 +a39256 = 39256 +a39257 = 39257 +a39258 = 39258 +a39259 = 39259 +a39260 = 39260 +a39261 = 39261 +a39262 = 39262 +a39263 = 39263 +a39264 = 39264 +a39265 = 39265 +a39266 = 39266 +a39267 = 39267 +a39268 = 39268 +a39269 = 39269 +a39270 = 39270 +a39271 = 39271 +a39272 = 39272 +a39273 = 39273 +a39274 = 39274 +a39275 = 39275 +a39276 = 39276 +a39277 = 39277 +a39278 = 39278 +a39279 = 39279 +a39280 = 39280 +a39281 = 39281 +a39282 = 39282 +a39283 = 39283 +a39284 = 39284 +a39285 = 39285 +a39286 = 39286 +a39287 = 39287 +a39288 = 39288 +a39289 = 39289 +a39290 = 39290 +a39291 = 39291 +a39292 = 39292 +a39293 = 39293 +a39294 = 39294 +a39295 = 39295 +a39296 = 39296 +a39297 = 39297 +a39298 = 39298 +a39299 = 39299 +a39300 = 39300 +a39301 = 39301 +a39302 = 39302 +a39303 = 39303 +a39304 = 39304 +a39305 = 39305 +a39306 = 39306 +a39307 = 39307 +a39308 = 39308 +a39309 = 39309 +a39310 = 39310 +a39311 = 39311 +a39312 = 39312 +a39313 = 39313 +a39314 = 39314 +a39315 = 39315 +a39316 = 39316 +a39317 = 39317 +a39318 = 39318 +a39319 = 39319 +a39320 = 39320 +a39321 = 39321 +a39322 = 39322 +a39323 = 39323 +a39324 = 39324 +a39325 = 39325 +a39326 = 39326 +a39327 = 39327 +a39328 = 39328 +a39329 = 39329 +a39330 = 39330 +a39331 = 39331 +a39332 = 39332 +a39333 = 39333 +a39334 = 39334 +a39335 = 39335 +a39336 = 39336 +a39337 = 39337 +a39338 = 39338 +a39339 = 39339 +a39340 = 39340 +a39341 = 39341 +a39342 = 39342 +a39343 = 39343 +a39344 = 39344 +a39345 = 39345 +a39346 = 39346 +a39347 = 39347 +a39348 = 39348 +a39349 = 39349 +a39350 = 39350 +a39351 = 39351 +a39352 = 39352 +a39353 = 39353 +a39354 = 39354 +a39355 = 39355 +a39356 = 39356 +a39357 = 39357 +a39358 = 39358 +a39359 = 39359 +a39360 = 39360 +a39361 = 39361 +a39362 = 39362 +a39363 = 39363 +a39364 = 39364 +a39365 = 39365 +a39366 = 39366 +a39367 = 39367 +a39368 = 39368 +a39369 = 39369 +a39370 = 39370 +a39371 = 39371 +a39372 = 39372 +a39373 = 39373 +a39374 = 39374 +a39375 = 39375 +a39376 = 39376 +a39377 = 39377 +a39378 = 39378 +a39379 = 39379 +a39380 = 39380 +a39381 = 39381 +a39382 = 39382 +a39383 = 39383 +a39384 = 39384 +a39385 = 39385 +a39386 = 39386 +a39387 = 39387 +a39388 = 39388 +a39389 = 39389 +a39390 = 39390 +a39391 = 39391 +a39392 = 39392 +a39393 = 39393 +a39394 = 39394 +a39395 = 39395 +a39396 = 39396 +a39397 = 39397 +a39398 = 39398 +a39399 = 39399 +a39400 = 39400 +a39401 = 39401 +a39402 = 39402 +a39403 = 39403 +a39404 = 39404 +a39405 = 39405 +a39406 = 39406 +a39407 = 39407 +a39408 = 39408 +a39409 = 39409 +a39410 = 39410 +a39411 = 39411 +a39412 = 39412 +a39413 = 39413 +a39414 = 39414 +a39415 = 39415 +a39416 = 39416 +a39417 = 39417 +a39418 = 39418 +a39419 = 39419 +a39420 = 39420 +a39421 = 39421 +a39422 = 39422 +a39423 = 39423 +a39424 = 39424 +a39425 = 39425 +a39426 = 39426 +a39427 = 39427 +a39428 = 39428 +a39429 = 39429 +a39430 = 39430 +a39431 = 39431 +a39432 = 39432 +a39433 = 39433 +a39434 = 39434 +a39435 = 39435 +a39436 = 39436 +a39437 = 39437 +a39438 = 39438 +a39439 = 39439 +a39440 = 39440 +a39441 = 39441 +a39442 = 39442 +a39443 = 39443 +a39444 = 39444 +a39445 = 39445 +a39446 = 39446 +a39447 = 39447 +a39448 = 39448 +a39449 = 39449 +a39450 = 39450 +a39451 = 39451 +a39452 = 39452 +a39453 = 39453 +a39454 = 39454 +a39455 = 39455 +a39456 = 39456 +a39457 = 39457 +a39458 = 39458 +a39459 = 39459 +a39460 = 39460 +a39461 = 39461 +a39462 = 39462 +a39463 = 39463 +a39464 = 39464 +a39465 = 39465 +a39466 = 39466 +a39467 = 39467 +a39468 = 39468 +a39469 = 39469 +a39470 = 39470 +a39471 = 39471 +a39472 = 39472 +a39473 = 39473 +a39474 = 39474 +a39475 = 39475 +a39476 = 39476 +a39477 = 39477 +a39478 = 39478 +a39479 = 39479 +a39480 = 39480 +a39481 = 39481 +a39482 = 39482 +a39483 = 39483 +a39484 = 39484 +a39485 = 39485 +a39486 = 39486 +a39487 = 39487 +a39488 = 39488 +a39489 = 39489 +a39490 = 39490 +a39491 = 39491 +a39492 = 39492 +a39493 = 39493 +a39494 = 39494 +a39495 = 39495 +a39496 = 39496 +a39497 = 39497 +a39498 = 39498 +a39499 = 39499 +a39500 = 39500 +a39501 = 39501 +a39502 = 39502 +a39503 = 39503 +a39504 = 39504 +a39505 = 39505 +a39506 = 39506 +a39507 = 39507 +a39508 = 39508 +a39509 = 39509 +a39510 = 39510 +a39511 = 39511 +a39512 = 39512 +a39513 = 39513 +a39514 = 39514 +a39515 = 39515 +a39516 = 39516 +a39517 = 39517 +a39518 = 39518 +a39519 = 39519 +a39520 = 39520 +a39521 = 39521 +a39522 = 39522 +a39523 = 39523 +a39524 = 39524 +a39525 = 39525 +a39526 = 39526 +a39527 = 39527 +a39528 = 39528 +a39529 = 39529 +a39530 = 39530 +a39531 = 39531 +a39532 = 39532 +a39533 = 39533 +a39534 = 39534 +a39535 = 39535 +a39536 = 39536 +a39537 = 39537 +a39538 = 39538 +a39539 = 39539 +a39540 = 39540 +a39541 = 39541 +a39542 = 39542 +a39543 = 39543 +a39544 = 39544 +a39545 = 39545 +a39546 = 39546 +a39547 = 39547 +a39548 = 39548 +a39549 = 39549 +a39550 = 39550 +a39551 = 39551 +a39552 = 39552 +a39553 = 39553 +a39554 = 39554 +a39555 = 39555 +a39556 = 39556 +a39557 = 39557 +a39558 = 39558 +a39559 = 39559 +a39560 = 39560 +a39561 = 39561 +a39562 = 39562 +a39563 = 39563 +a39564 = 39564 +a39565 = 39565 +a39566 = 39566 +a39567 = 39567 +a39568 = 39568 +a39569 = 39569 +a39570 = 39570 +a39571 = 39571 +a39572 = 39572 +a39573 = 39573 +a39574 = 39574 +a39575 = 39575 +a39576 = 39576 +a39577 = 39577 +a39578 = 39578 +a39579 = 39579 +a39580 = 39580 +a39581 = 39581 +a39582 = 39582 +a39583 = 39583 +a39584 = 39584 +a39585 = 39585 +a39586 = 39586 +a39587 = 39587 +a39588 = 39588 +a39589 = 39589 +a39590 = 39590 +a39591 = 39591 +a39592 = 39592 +a39593 = 39593 +a39594 = 39594 +a39595 = 39595 +a39596 = 39596 +a39597 = 39597 +a39598 = 39598 +a39599 = 39599 +a39600 = 39600 +a39601 = 39601 +a39602 = 39602 +a39603 = 39603 +a39604 = 39604 +a39605 = 39605 +a39606 = 39606 +a39607 = 39607 +a39608 = 39608 +a39609 = 39609 +a39610 = 39610 +a39611 = 39611 +a39612 = 39612 +a39613 = 39613 +a39614 = 39614 +a39615 = 39615 +a39616 = 39616 +a39617 = 39617 +a39618 = 39618 +a39619 = 39619 +a39620 = 39620 +a39621 = 39621 +a39622 = 39622 +a39623 = 39623 +a39624 = 39624 +a39625 = 39625 +a39626 = 39626 +a39627 = 39627 +a39628 = 39628 +a39629 = 39629 +a39630 = 39630 +a39631 = 39631 +a39632 = 39632 +a39633 = 39633 +a39634 = 39634 +a39635 = 39635 +a39636 = 39636 +a39637 = 39637 +a39638 = 39638 +a39639 = 39639 +a39640 = 39640 +a39641 = 39641 +a39642 = 39642 +a39643 = 39643 +a39644 = 39644 +a39645 = 39645 +a39646 = 39646 +a39647 = 39647 +a39648 = 39648 +a39649 = 39649 +a39650 = 39650 +a39651 = 39651 +a39652 = 39652 +a39653 = 39653 +a39654 = 39654 +a39655 = 39655 +a39656 = 39656 +a39657 = 39657 +a39658 = 39658 +a39659 = 39659 +a39660 = 39660 +a39661 = 39661 +a39662 = 39662 +a39663 = 39663 +a39664 = 39664 +a39665 = 39665 +a39666 = 39666 +a39667 = 39667 +a39668 = 39668 +a39669 = 39669 +a39670 = 39670 +a39671 = 39671 +a39672 = 39672 +a39673 = 39673 +a39674 = 39674 +a39675 = 39675 +a39676 = 39676 +a39677 = 39677 +a39678 = 39678 +a39679 = 39679 +a39680 = 39680 +a39681 = 39681 +a39682 = 39682 +a39683 = 39683 +a39684 = 39684 +a39685 = 39685 +a39686 = 39686 +a39687 = 39687 +a39688 = 39688 +a39689 = 39689 +a39690 = 39690 +a39691 = 39691 +a39692 = 39692 +a39693 = 39693 +a39694 = 39694 +a39695 = 39695 +a39696 = 39696 +a39697 = 39697 +a39698 = 39698 +a39699 = 39699 +a39700 = 39700 +a39701 = 39701 +a39702 = 39702 +a39703 = 39703 +a39704 = 39704 +a39705 = 39705 +a39706 = 39706 +a39707 = 39707 +a39708 = 39708 +a39709 = 39709 +a39710 = 39710 +a39711 = 39711 +a39712 = 39712 +a39713 = 39713 +a39714 = 39714 +a39715 = 39715 +a39716 = 39716 +a39717 = 39717 +a39718 = 39718 +a39719 = 39719 +a39720 = 39720 +a39721 = 39721 +a39722 = 39722 +a39723 = 39723 +a39724 = 39724 +a39725 = 39725 +a39726 = 39726 +a39727 = 39727 +a39728 = 39728 +a39729 = 39729 +a39730 = 39730 +a39731 = 39731 +a39732 = 39732 +a39733 = 39733 +a39734 = 39734 +a39735 = 39735 +a39736 = 39736 +a39737 = 39737 +a39738 = 39738 +a39739 = 39739 +a39740 = 39740 +a39741 = 39741 +a39742 = 39742 +a39743 = 39743 +a39744 = 39744 +a39745 = 39745 +a39746 = 39746 +a39747 = 39747 +a39748 = 39748 +a39749 = 39749 +a39750 = 39750 +a39751 = 39751 +a39752 = 39752 +a39753 = 39753 +a39754 = 39754 +a39755 = 39755 +a39756 = 39756 +a39757 = 39757 +a39758 = 39758 +a39759 = 39759 +a39760 = 39760 +a39761 = 39761 +a39762 = 39762 +a39763 = 39763 +a39764 = 39764 +a39765 = 39765 +a39766 = 39766 +a39767 = 39767 +a39768 = 39768 +a39769 = 39769 +a39770 = 39770 +a39771 = 39771 +a39772 = 39772 +a39773 = 39773 +a39774 = 39774 +a39775 = 39775 +a39776 = 39776 +a39777 = 39777 +a39778 = 39778 +a39779 = 39779 +a39780 = 39780 +a39781 = 39781 +a39782 = 39782 +a39783 = 39783 +a39784 = 39784 +a39785 = 39785 +a39786 = 39786 +a39787 = 39787 +a39788 = 39788 +a39789 = 39789 +a39790 = 39790 +a39791 = 39791 +a39792 = 39792 +a39793 = 39793 +a39794 = 39794 +a39795 = 39795 +a39796 = 39796 +a39797 = 39797 +a39798 = 39798 +a39799 = 39799 +a39800 = 39800 +a39801 = 39801 +a39802 = 39802 +a39803 = 39803 +a39804 = 39804 +a39805 = 39805 +a39806 = 39806 +a39807 = 39807 +a39808 = 39808 +a39809 = 39809 +a39810 = 39810 +a39811 = 39811 +a39812 = 39812 +a39813 = 39813 +a39814 = 39814 +a39815 = 39815 +a39816 = 39816 +a39817 = 39817 +a39818 = 39818 +a39819 = 39819 +a39820 = 39820 +a39821 = 39821 +a39822 = 39822 +a39823 = 39823 +a39824 = 39824 +a39825 = 39825 +a39826 = 39826 +a39827 = 39827 +a39828 = 39828 +a39829 = 39829 +a39830 = 39830 +a39831 = 39831 +a39832 = 39832 +a39833 = 39833 +a39834 = 39834 +a39835 = 39835 +a39836 = 39836 +a39837 = 39837 +a39838 = 39838 +a39839 = 39839 +a39840 = 39840 +a39841 = 39841 +a39842 = 39842 +a39843 = 39843 +a39844 = 39844 +a39845 = 39845 +a39846 = 39846 +a39847 = 39847 +a39848 = 39848 +a39849 = 39849 +a39850 = 39850 +a39851 = 39851 +a39852 = 39852 +a39853 = 39853 +a39854 = 39854 +a39855 = 39855 +a39856 = 39856 +a39857 = 39857 +a39858 = 39858 +a39859 = 39859 +a39860 = 39860 +a39861 = 39861 +a39862 = 39862 +a39863 = 39863 +a39864 = 39864 +a39865 = 39865 +a39866 = 39866 +a39867 = 39867 +a39868 = 39868 +a39869 = 39869 +a39870 = 39870 +a39871 = 39871 +a39872 = 39872 +a39873 = 39873 +a39874 = 39874 +a39875 = 39875 +a39876 = 39876 +a39877 = 39877 +a39878 = 39878 +a39879 = 39879 +a39880 = 39880 +a39881 = 39881 +a39882 = 39882 +a39883 = 39883 +a39884 = 39884 +a39885 = 39885 +a39886 = 39886 +a39887 = 39887 +a39888 = 39888 +a39889 = 39889 +a39890 = 39890 +a39891 = 39891 +a39892 = 39892 +a39893 = 39893 +a39894 = 39894 +a39895 = 39895 +a39896 = 39896 +a39897 = 39897 +a39898 = 39898 +a39899 = 39899 +a39900 = 39900 +a39901 = 39901 +a39902 = 39902 +a39903 = 39903 +a39904 = 39904 +a39905 = 39905 +a39906 = 39906 +a39907 = 39907 +a39908 = 39908 +a39909 = 39909 +a39910 = 39910 +a39911 = 39911 +a39912 = 39912 +a39913 = 39913 +a39914 = 39914 +a39915 = 39915 +a39916 = 39916 +a39917 = 39917 +a39918 = 39918 +a39919 = 39919 +a39920 = 39920 +a39921 = 39921 +a39922 = 39922 +a39923 = 39923 +a39924 = 39924 +a39925 = 39925 +a39926 = 39926 +a39927 = 39927 +a39928 = 39928 +a39929 = 39929 +a39930 = 39930 +a39931 = 39931 +a39932 = 39932 +a39933 = 39933 +a39934 = 39934 +a39935 = 39935 +a39936 = 39936 +a39937 = 39937 +a39938 = 39938 +a39939 = 39939 +a39940 = 39940 +a39941 = 39941 +a39942 = 39942 +a39943 = 39943 +a39944 = 39944 +a39945 = 39945 +a39946 = 39946 +a39947 = 39947 +a39948 = 39948 +a39949 = 39949 +a39950 = 39950 +a39951 = 39951 +a39952 = 39952 +a39953 = 39953 +a39954 = 39954 +a39955 = 39955 +a39956 = 39956 +a39957 = 39957 +a39958 = 39958 +a39959 = 39959 +a39960 = 39960 +a39961 = 39961 +a39962 = 39962 +a39963 = 39963 +a39964 = 39964 +a39965 = 39965 +a39966 = 39966 +a39967 = 39967 +a39968 = 39968 +a39969 = 39969 +a39970 = 39970 +a39971 = 39971 +a39972 = 39972 +a39973 = 39973 +a39974 = 39974 +a39975 = 39975 +a39976 = 39976 +a39977 = 39977 +a39978 = 39978 +a39979 = 39979 +a39980 = 39980 +a39981 = 39981 +a39982 = 39982 +a39983 = 39983 +a39984 = 39984 +a39985 = 39985 +a39986 = 39986 +a39987 = 39987 +a39988 = 39988 +a39989 = 39989 +a39990 = 39990 +a39991 = 39991 +a39992 = 39992 +a39993 = 39993 +a39994 = 39994 +a39995 = 39995 +a39996 = 39996 +a39997 = 39997 +a39998 = 39998 +a39999 = 39999 +a40000 = 40000 +a40001 = 40001 +a40002 = 40002 +a40003 = 40003 +a40004 = 40004 +a40005 = 40005 +a40006 = 40006 +a40007 = 40007 +a40008 = 40008 +a40009 = 40009 +a40010 = 40010 +a40011 = 40011 +a40012 = 40012 +a40013 = 40013 +a40014 = 40014 +a40015 = 40015 +a40016 = 40016 +a40017 = 40017 +a40018 = 40018 +a40019 = 40019 +a40020 = 40020 +a40021 = 40021 +a40022 = 40022 +a40023 = 40023 +a40024 = 40024 +a40025 = 40025 +a40026 = 40026 +a40027 = 40027 +a40028 = 40028 +a40029 = 40029 +a40030 = 40030 +a40031 = 40031 +a40032 = 40032 +a40033 = 40033 +a40034 = 40034 +a40035 = 40035 +a40036 = 40036 +a40037 = 40037 +a40038 = 40038 +a40039 = 40039 +a40040 = 40040 +a40041 = 40041 +a40042 = 40042 +a40043 = 40043 +a40044 = 40044 +a40045 = 40045 +a40046 = 40046 +a40047 = 40047 +a40048 = 40048 +a40049 = 40049 +a40050 = 40050 +a40051 = 40051 +a40052 = 40052 +a40053 = 40053 +a40054 = 40054 +a40055 = 40055 +a40056 = 40056 +a40057 = 40057 +a40058 = 40058 +a40059 = 40059 +a40060 = 40060 +a40061 = 40061 +a40062 = 40062 +a40063 = 40063 +a40064 = 40064 +a40065 = 40065 +a40066 = 40066 +a40067 = 40067 +a40068 = 40068 +a40069 = 40069 +a40070 = 40070 +a40071 = 40071 +a40072 = 40072 +a40073 = 40073 +a40074 = 40074 +a40075 = 40075 +a40076 = 40076 +a40077 = 40077 +a40078 = 40078 +a40079 = 40079 +a40080 = 40080 +a40081 = 40081 +a40082 = 40082 +a40083 = 40083 +a40084 = 40084 +a40085 = 40085 +a40086 = 40086 +a40087 = 40087 +a40088 = 40088 +a40089 = 40089 +a40090 = 40090 +a40091 = 40091 +a40092 = 40092 +a40093 = 40093 +a40094 = 40094 +a40095 = 40095 +a40096 = 40096 +a40097 = 40097 +a40098 = 40098 +a40099 = 40099 +a40100 = 40100 +a40101 = 40101 +a40102 = 40102 +a40103 = 40103 +a40104 = 40104 +a40105 = 40105 +a40106 = 40106 +a40107 = 40107 +a40108 = 40108 +a40109 = 40109 +a40110 = 40110 +a40111 = 40111 +a40112 = 40112 +a40113 = 40113 +a40114 = 40114 +a40115 = 40115 +a40116 = 40116 +a40117 = 40117 +a40118 = 40118 +a40119 = 40119 +a40120 = 40120 +a40121 = 40121 +a40122 = 40122 +a40123 = 40123 +a40124 = 40124 +a40125 = 40125 +a40126 = 40126 +a40127 = 40127 +a40128 = 40128 +a40129 = 40129 +a40130 = 40130 +a40131 = 40131 +a40132 = 40132 +a40133 = 40133 +a40134 = 40134 +a40135 = 40135 +a40136 = 40136 +a40137 = 40137 +a40138 = 40138 +a40139 = 40139 +a40140 = 40140 +a40141 = 40141 +a40142 = 40142 +a40143 = 40143 +a40144 = 40144 +a40145 = 40145 +a40146 = 40146 +a40147 = 40147 +a40148 = 40148 +a40149 = 40149 +a40150 = 40150 +a40151 = 40151 +a40152 = 40152 +a40153 = 40153 +a40154 = 40154 +a40155 = 40155 +a40156 = 40156 +a40157 = 40157 +a40158 = 40158 +a40159 = 40159 +a40160 = 40160 +a40161 = 40161 +a40162 = 40162 +a40163 = 40163 +a40164 = 40164 +a40165 = 40165 +a40166 = 40166 +a40167 = 40167 +a40168 = 40168 +a40169 = 40169 +a40170 = 40170 +a40171 = 40171 +a40172 = 40172 +a40173 = 40173 +a40174 = 40174 +a40175 = 40175 +a40176 = 40176 +a40177 = 40177 +a40178 = 40178 +a40179 = 40179 +a40180 = 40180 +a40181 = 40181 +a40182 = 40182 +a40183 = 40183 +a40184 = 40184 +a40185 = 40185 +a40186 = 40186 +a40187 = 40187 +a40188 = 40188 +a40189 = 40189 +a40190 = 40190 +a40191 = 40191 +a40192 = 40192 +a40193 = 40193 +a40194 = 40194 +a40195 = 40195 +a40196 = 40196 +a40197 = 40197 +a40198 = 40198 +a40199 = 40199 +a40200 = 40200 +a40201 = 40201 +a40202 = 40202 +a40203 = 40203 +a40204 = 40204 +a40205 = 40205 +a40206 = 40206 +a40207 = 40207 +a40208 = 40208 +a40209 = 40209 +a40210 = 40210 +a40211 = 40211 +a40212 = 40212 +a40213 = 40213 +a40214 = 40214 +a40215 = 40215 +a40216 = 40216 +a40217 = 40217 +a40218 = 40218 +a40219 = 40219 +a40220 = 40220 +a40221 = 40221 +a40222 = 40222 +a40223 = 40223 +a40224 = 40224 +a40225 = 40225 +a40226 = 40226 +a40227 = 40227 +a40228 = 40228 +a40229 = 40229 +a40230 = 40230 +a40231 = 40231 +a40232 = 40232 +a40233 = 40233 +a40234 = 40234 +a40235 = 40235 +a40236 = 40236 +a40237 = 40237 +a40238 = 40238 +a40239 = 40239 +a40240 = 40240 +a40241 = 40241 +a40242 = 40242 +a40243 = 40243 +a40244 = 40244 +a40245 = 40245 +a40246 = 40246 +a40247 = 40247 +a40248 = 40248 +a40249 = 40249 +a40250 = 40250 +a40251 = 40251 +a40252 = 40252 +a40253 = 40253 +a40254 = 40254 +a40255 = 40255 +a40256 = 40256 +a40257 = 40257 +a40258 = 40258 +a40259 = 40259 +a40260 = 40260 +a40261 = 40261 +a40262 = 40262 +a40263 = 40263 +a40264 = 40264 +a40265 = 40265 +a40266 = 40266 +a40267 = 40267 +a40268 = 40268 +a40269 = 40269 +a40270 = 40270 +a40271 = 40271 +a40272 = 40272 +a40273 = 40273 +a40274 = 40274 +a40275 = 40275 +a40276 = 40276 +a40277 = 40277 +a40278 = 40278 +a40279 = 40279 +a40280 = 40280 +a40281 = 40281 +a40282 = 40282 +a40283 = 40283 +a40284 = 40284 +a40285 = 40285 +a40286 = 40286 +a40287 = 40287 +a40288 = 40288 +a40289 = 40289 +a40290 = 40290 +a40291 = 40291 +a40292 = 40292 +a40293 = 40293 +a40294 = 40294 +a40295 = 40295 +a40296 = 40296 +a40297 = 40297 +a40298 = 40298 +a40299 = 40299 +a40300 = 40300 +a40301 = 40301 +a40302 = 40302 +a40303 = 40303 +a40304 = 40304 +a40305 = 40305 +a40306 = 40306 +a40307 = 40307 +a40308 = 40308 +a40309 = 40309 +a40310 = 40310 +a40311 = 40311 +a40312 = 40312 +a40313 = 40313 +a40314 = 40314 +a40315 = 40315 +a40316 = 40316 +a40317 = 40317 +a40318 = 40318 +a40319 = 40319 +a40320 = 40320 +a40321 = 40321 +a40322 = 40322 +a40323 = 40323 +a40324 = 40324 +a40325 = 40325 +a40326 = 40326 +a40327 = 40327 +a40328 = 40328 +a40329 = 40329 +a40330 = 40330 +a40331 = 40331 +a40332 = 40332 +a40333 = 40333 +a40334 = 40334 +a40335 = 40335 +a40336 = 40336 +a40337 = 40337 +a40338 = 40338 +a40339 = 40339 +a40340 = 40340 +a40341 = 40341 +a40342 = 40342 +a40343 = 40343 +a40344 = 40344 +a40345 = 40345 +a40346 = 40346 +a40347 = 40347 +a40348 = 40348 +a40349 = 40349 +a40350 = 40350 +a40351 = 40351 +a40352 = 40352 +a40353 = 40353 +a40354 = 40354 +a40355 = 40355 +a40356 = 40356 +a40357 = 40357 +a40358 = 40358 +a40359 = 40359 +a40360 = 40360 +a40361 = 40361 +a40362 = 40362 +a40363 = 40363 +a40364 = 40364 +a40365 = 40365 +a40366 = 40366 +a40367 = 40367 +a40368 = 40368 +a40369 = 40369 +a40370 = 40370 +a40371 = 40371 +a40372 = 40372 +a40373 = 40373 +a40374 = 40374 +a40375 = 40375 +a40376 = 40376 +a40377 = 40377 +a40378 = 40378 +a40379 = 40379 +a40380 = 40380 +a40381 = 40381 +a40382 = 40382 +a40383 = 40383 +a40384 = 40384 +a40385 = 40385 +a40386 = 40386 +a40387 = 40387 +a40388 = 40388 +a40389 = 40389 +a40390 = 40390 +a40391 = 40391 +a40392 = 40392 +a40393 = 40393 +a40394 = 40394 +a40395 = 40395 +a40396 = 40396 +a40397 = 40397 +a40398 = 40398 +a40399 = 40399 +a40400 = 40400 +a40401 = 40401 +a40402 = 40402 +a40403 = 40403 +a40404 = 40404 +a40405 = 40405 +a40406 = 40406 +a40407 = 40407 +a40408 = 40408 +a40409 = 40409 +a40410 = 40410 +a40411 = 40411 +a40412 = 40412 +a40413 = 40413 +a40414 = 40414 +a40415 = 40415 +a40416 = 40416 +a40417 = 40417 +a40418 = 40418 +a40419 = 40419 +a40420 = 40420 +a40421 = 40421 +a40422 = 40422 +a40423 = 40423 +a40424 = 40424 +a40425 = 40425 +a40426 = 40426 +a40427 = 40427 +a40428 = 40428 +a40429 = 40429 +a40430 = 40430 +a40431 = 40431 +a40432 = 40432 +a40433 = 40433 +a40434 = 40434 +a40435 = 40435 +a40436 = 40436 +a40437 = 40437 +a40438 = 40438 +a40439 = 40439 +a40440 = 40440 +a40441 = 40441 +a40442 = 40442 +a40443 = 40443 +a40444 = 40444 +a40445 = 40445 +a40446 = 40446 +a40447 = 40447 +a40448 = 40448 +a40449 = 40449 +a40450 = 40450 +a40451 = 40451 +a40452 = 40452 +a40453 = 40453 +a40454 = 40454 +a40455 = 40455 +a40456 = 40456 +a40457 = 40457 +a40458 = 40458 +a40459 = 40459 +a40460 = 40460 +a40461 = 40461 +a40462 = 40462 +a40463 = 40463 +a40464 = 40464 +a40465 = 40465 +a40466 = 40466 +a40467 = 40467 +a40468 = 40468 +a40469 = 40469 +a40470 = 40470 +a40471 = 40471 +a40472 = 40472 +a40473 = 40473 +a40474 = 40474 +a40475 = 40475 +a40476 = 40476 +a40477 = 40477 +a40478 = 40478 +a40479 = 40479 +a40480 = 40480 +a40481 = 40481 +a40482 = 40482 +a40483 = 40483 +a40484 = 40484 +a40485 = 40485 +a40486 = 40486 +a40487 = 40487 +a40488 = 40488 +a40489 = 40489 +a40490 = 40490 +a40491 = 40491 +a40492 = 40492 +a40493 = 40493 +a40494 = 40494 +a40495 = 40495 +a40496 = 40496 +a40497 = 40497 +a40498 = 40498 +a40499 = 40499 +a40500 = 40500 +a40501 = 40501 +a40502 = 40502 +a40503 = 40503 +a40504 = 40504 +a40505 = 40505 +a40506 = 40506 +a40507 = 40507 +a40508 = 40508 +a40509 = 40509 +a40510 = 40510 +a40511 = 40511 +a40512 = 40512 +a40513 = 40513 +a40514 = 40514 +a40515 = 40515 +a40516 = 40516 +a40517 = 40517 +a40518 = 40518 +a40519 = 40519 +a40520 = 40520 +a40521 = 40521 +a40522 = 40522 +a40523 = 40523 +a40524 = 40524 +a40525 = 40525 +a40526 = 40526 +a40527 = 40527 +a40528 = 40528 +a40529 = 40529 +a40530 = 40530 +a40531 = 40531 +a40532 = 40532 +a40533 = 40533 +a40534 = 40534 +a40535 = 40535 +a40536 = 40536 +a40537 = 40537 +a40538 = 40538 +a40539 = 40539 +a40540 = 40540 +a40541 = 40541 +a40542 = 40542 +a40543 = 40543 +a40544 = 40544 +a40545 = 40545 +a40546 = 40546 +a40547 = 40547 +a40548 = 40548 +a40549 = 40549 +a40550 = 40550 +a40551 = 40551 +a40552 = 40552 +a40553 = 40553 +a40554 = 40554 +a40555 = 40555 +a40556 = 40556 +a40557 = 40557 +a40558 = 40558 +a40559 = 40559 +a40560 = 40560 +a40561 = 40561 +a40562 = 40562 +a40563 = 40563 +a40564 = 40564 +a40565 = 40565 +a40566 = 40566 +a40567 = 40567 +a40568 = 40568 +a40569 = 40569 +a40570 = 40570 +a40571 = 40571 +a40572 = 40572 +a40573 = 40573 +a40574 = 40574 +a40575 = 40575 +a40576 = 40576 +a40577 = 40577 +a40578 = 40578 +a40579 = 40579 +a40580 = 40580 +a40581 = 40581 +a40582 = 40582 +a40583 = 40583 +a40584 = 40584 +a40585 = 40585 +a40586 = 40586 +a40587 = 40587 +a40588 = 40588 +a40589 = 40589 +a40590 = 40590 +a40591 = 40591 +a40592 = 40592 +a40593 = 40593 +a40594 = 40594 +a40595 = 40595 +a40596 = 40596 +a40597 = 40597 +a40598 = 40598 +a40599 = 40599 +a40600 = 40600 +a40601 = 40601 +a40602 = 40602 +a40603 = 40603 +a40604 = 40604 +a40605 = 40605 +a40606 = 40606 +a40607 = 40607 +a40608 = 40608 +a40609 = 40609 +a40610 = 40610 +a40611 = 40611 +a40612 = 40612 +a40613 = 40613 +a40614 = 40614 +a40615 = 40615 +a40616 = 40616 +a40617 = 40617 +a40618 = 40618 +a40619 = 40619 +a40620 = 40620 +a40621 = 40621 +a40622 = 40622 +a40623 = 40623 +a40624 = 40624 +a40625 = 40625 +a40626 = 40626 +a40627 = 40627 +a40628 = 40628 +a40629 = 40629 +a40630 = 40630 +a40631 = 40631 +a40632 = 40632 +a40633 = 40633 +a40634 = 40634 +a40635 = 40635 +a40636 = 40636 +a40637 = 40637 +a40638 = 40638 +a40639 = 40639 +a40640 = 40640 +a40641 = 40641 +a40642 = 40642 +a40643 = 40643 +a40644 = 40644 +a40645 = 40645 +a40646 = 40646 +a40647 = 40647 +a40648 = 40648 +a40649 = 40649 +a40650 = 40650 +a40651 = 40651 +a40652 = 40652 +a40653 = 40653 +a40654 = 40654 +a40655 = 40655 +a40656 = 40656 +a40657 = 40657 +a40658 = 40658 +a40659 = 40659 +a40660 = 40660 +a40661 = 40661 +a40662 = 40662 +a40663 = 40663 +a40664 = 40664 +a40665 = 40665 +a40666 = 40666 +a40667 = 40667 +a40668 = 40668 +a40669 = 40669 +a40670 = 40670 +a40671 = 40671 +a40672 = 40672 +a40673 = 40673 +a40674 = 40674 +a40675 = 40675 +a40676 = 40676 +a40677 = 40677 +a40678 = 40678 +a40679 = 40679 +a40680 = 40680 +a40681 = 40681 +a40682 = 40682 +a40683 = 40683 +a40684 = 40684 +a40685 = 40685 +a40686 = 40686 +a40687 = 40687 +a40688 = 40688 +a40689 = 40689 +a40690 = 40690 +a40691 = 40691 +a40692 = 40692 +a40693 = 40693 +a40694 = 40694 +a40695 = 40695 +a40696 = 40696 +a40697 = 40697 +a40698 = 40698 +a40699 = 40699 +a40700 = 40700 +a40701 = 40701 +a40702 = 40702 +a40703 = 40703 +a40704 = 40704 +a40705 = 40705 +a40706 = 40706 +a40707 = 40707 +a40708 = 40708 +a40709 = 40709 +a40710 = 40710 +a40711 = 40711 +a40712 = 40712 +a40713 = 40713 +a40714 = 40714 +a40715 = 40715 +a40716 = 40716 +a40717 = 40717 +a40718 = 40718 +a40719 = 40719 +a40720 = 40720 +a40721 = 40721 +a40722 = 40722 +a40723 = 40723 +a40724 = 40724 +a40725 = 40725 +a40726 = 40726 +a40727 = 40727 +a40728 = 40728 +a40729 = 40729 +a40730 = 40730 +a40731 = 40731 +a40732 = 40732 +a40733 = 40733 +a40734 = 40734 +a40735 = 40735 +a40736 = 40736 +a40737 = 40737 +a40738 = 40738 +a40739 = 40739 +a40740 = 40740 +a40741 = 40741 +a40742 = 40742 +a40743 = 40743 +a40744 = 40744 +a40745 = 40745 +a40746 = 40746 +a40747 = 40747 +a40748 = 40748 +a40749 = 40749 +a40750 = 40750 +a40751 = 40751 +a40752 = 40752 +a40753 = 40753 +a40754 = 40754 +a40755 = 40755 +a40756 = 40756 +a40757 = 40757 +a40758 = 40758 +a40759 = 40759 +a40760 = 40760 +a40761 = 40761 +a40762 = 40762 +a40763 = 40763 +a40764 = 40764 +a40765 = 40765 +a40766 = 40766 +a40767 = 40767 +a40768 = 40768 +a40769 = 40769 +a40770 = 40770 +a40771 = 40771 +a40772 = 40772 +a40773 = 40773 +a40774 = 40774 +a40775 = 40775 +a40776 = 40776 +a40777 = 40777 +a40778 = 40778 +a40779 = 40779 +a40780 = 40780 +a40781 = 40781 +a40782 = 40782 +a40783 = 40783 +a40784 = 40784 +a40785 = 40785 +a40786 = 40786 +a40787 = 40787 +a40788 = 40788 +a40789 = 40789 +a40790 = 40790 +a40791 = 40791 +a40792 = 40792 +a40793 = 40793 +a40794 = 40794 +a40795 = 40795 +a40796 = 40796 +a40797 = 40797 +a40798 = 40798 +a40799 = 40799 +a40800 = 40800 +a40801 = 40801 +a40802 = 40802 +a40803 = 40803 +a40804 = 40804 +a40805 = 40805 +a40806 = 40806 +a40807 = 40807 +a40808 = 40808 +a40809 = 40809 +a40810 = 40810 +a40811 = 40811 +a40812 = 40812 +a40813 = 40813 +a40814 = 40814 +a40815 = 40815 +a40816 = 40816 +a40817 = 40817 +a40818 = 40818 +a40819 = 40819 +a40820 = 40820 +a40821 = 40821 +a40822 = 40822 +a40823 = 40823 +a40824 = 40824 +a40825 = 40825 +a40826 = 40826 +a40827 = 40827 +a40828 = 40828 +a40829 = 40829 +a40830 = 40830 +a40831 = 40831 +a40832 = 40832 +a40833 = 40833 +a40834 = 40834 +a40835 = 40835 +a40836 = 40836 +a40837 = 40837 +a40838 = 40838 +a40839 = 40839 +a40840 = 40840 +a40841 = 40841 +a40842 = 40842 +a40843 = 40843 +a40844 = 40844 +a40845 = 40845 +a40846 = 40846 +a40847 = 40847 +a40848 = 40848 +a40849 = 40849 +a40850 = 40850 +a40851 = 40851 +a40852 = 40852 +a40853 = 40853 +a40854 = 40854 +a40855 = 40855 +a40856 = 40856 +a40857 = 40857 +a40858 = 40858 +a40859 = 40859 +a40860 = 40860 +a40861 = 40861 +a40862 = 40862 +a40863 = 40863 +a40864 = 40864 +a40865 = 40865 +a40866 = 40866 +a40867 = 40867 +a40868 = 40868 +a40869 = 40869 +a40870 = 40870 +a40871 = 40871 +a40872 = 40872 +a40873 = 40873 +a40874 = 40874 +a40875 = 40875 +a40876 = 40876 +a40877 = 40877 +a40878 = 40878 +a40879 = 40879 +a40880 = 40880 +a40881 = 40881 +a40882 = 40882 +a40883 = 40883 +a40884 = 40884 +a40885 = 40885 +a40886 = 40886 +a40887 = 40887 +a40888 = 40888 +a40889 = 40889 +a40890 = 40890 +a40891 = 40891 +a40892 = 40892 +a40893 = 40893 +a40894 = 40894 +a40895 = 40895 +a40896 = 40896 +a40897 = 40897 +a40898 = 40898 +a40899 = 40899 +a40900 = 40900 +a40901 = 40901 +a40902 = 40902 +a40903 = 40903 +a40904 = 40904 +a40905 = 40905 +a40906 = 40906 +a40907 = 40907 +a40908 = 40908 +a40909 = 40909 +a40910 = 40910 +a40911 = 40911 +a40912 = 40912 +a40913 = 40913 +a40914 = 40914 +a40915 = 40915 +a40916 = 40916 +a40917 = 40917 +a40918 = 40918 +a40919 = 40919 +a40920 = 40920 +a40921 = 40921 +a40922 = 40922 +a40923 = 40923 +a40924 = 40924 +a40925 = 40925 +a40926 = 40926 +a40927 = 40927 +a40928 = 40928 +a40929 = 40929 +a40930 = 40930 +a40931 = 40931 +a40932 = 40932 +a40933 = 40933 +a40934 = 40934 +a40935 = 40935 +a40936 = 40936 +a40937 = 40937 +a40938 = 40938 +a40939 = 40939 +a40940 = 40940 +a40941 = 40941 +a40942 = 40942 +a40943 = 40943 +a40944 = 40944 +a40945 = 40945 +a40946 = 40946 +a40947 = 40947 +a40948 = 40948 +a40949 = 40949 +a40950 = 40950 +a40951 = 40951 +a40952 = 40952 +a40953 = 40953 +a40954 = 40954 +a40955 = 40955 +a40956 = 40956 +a40957 = 40957 +a40958 = 40958 +a40959 = 40959 +a40960 = 40960 +a40961 = 40961 +a40962 = 40962 +a40963 = 40963 +a40964 = 40964 +a40965 = 40965 +a40966 = 40966 +a40967 = 40967 +a40968 = 40968 +a40969 = 40969 +a40970 = 40970 +a40971 = 40971 +a40972 = 40972 +a40973 = 40973 +a40974 = 40974 +a40975 = 40975 +a40976 = 40976 +a40977 = 40977 +a40978 = 40978 +a40979 = 40979 +a40980 = 40980 +a40981 = 40981 +a40982 = 40982 +a40983 = 40983 +a40984 = 40984 +a40985 = 40985 +a40986 = 40986 +a40987 = 40987 +a40988 = 40988 +a40989 = 40989 +a40990 = 40990 +a40991 = 40991 +a40992 = 40992 +a40993 = 40993 +a40994 = 40994 +a40995 = 40995 +a40996 = 40996 +a40997 = 40997 +a40998 = 40998 +a40999 = 40999 +a41000 = 41000 +a41001 = 41001 +a41002 = 41002 +a41003 = 41003 +a41004 = 41004 +a41005 = 41005 +a41006 = 41006 +a41007 = 41007 +a41008 = 41008 +a41009 = 41009 +a41010 = 41010 +a41011 = 41011 +a41012 = 41012 +a41013 = 41013 +a41014 = 41014 +a41015 = 41015 +a41016 = 41016 +a41017 = 41017 +a41018 = 41018 +a41019 = 41019 +a41020 = 41020 +a41021 = 41021 +a41022 = 41022 +a41023 = 41023 +a41024 = 41024 +a41025 = 41025 +a41026 = 41026 +a41027 = 41027 +a41028 = 41028 +a41029 = 41029 +a41030 = 41030 +a41031 = 41031 +a41032 = 41032 +a41033 = 41033 +a41034 = 41034 +a41035 = 41035 +a41036 = 41036 +a41037 = 41037 +a41038 = 41038 +a41039 = 41039 +a41040 = 41040 +a41041 = 41041 +a41042 = 41042 +a41043 = 41043 +a41044 = 41044 +a41045 = 41045 +a41046 = 41046 +a41047 = 41047 +a41048 = 41048 +a41049 = 41049 +a41050 = 41050 +a41051 = 41051 +a41052 = 41052 +a41053 = 41053 +a41054 = 41054 +a41055 = 41055 +a41056 = 41056 +a41057 = 41057 +a41058 = 41058 +a41059 = 41059 +a41060 = 41060 +a41061 = 41061 +a41062 = 41062 +a41063 = 41063 +a41064 = 41064 +a41065 = 41065 +a41066 = 41066 +a41067 = 41067 +a41068 = 41068 +a41069 = 41069 +a41070 = 41070 +a41071 = 41071 +a41072 = 41072 +a41073 = 41073 +a41074 = 41074 +a41075 = 41075 +a41076 = 41076 +a41077 = 41077 +a41078 = 41078 +a41079 = 41079 +a41080 = 41080 +a41081 = 41081 +a41082 = 41082 +a41083 = 41083 +a41084 = 41084 +a41085 = 41085 +a41086 = 41086 +a41087 = 41087 +a41088 = 41088 +a41089 = 41089 +a41090 = 41090 +a41091 = 41091 +a41092 = 41092 +a41093 = 41093 +a41094 = 41094 +a41095 = 41095 +a41096 = 41096 +a41097 = 41097 +a41098 = 41098 +a41099 = 41099 +a41100 = 41100 +a41101 = 41101 +a41102 = 41102 +a41103 = 41103 +a41104 = 41104 +a41105 = 41105 +a41106 = 41106 +a41107 = 41107 +a41108 = 41108 +a41109 = 41109 +a41110 = 41110 +a41111 = 41111 +a41112 = 41112 +a41113 = 41113 +a41114 = 41114 +a41115 = 41115 +a41116 = 41116 +a41117 = 41117 +a41118 = 41118 +a41119 = 41119 +a41120 = 41120 +a41121 = 41121 +a41122 = 41122 +a41123 = 41123 +a41124 = 41124 +a41125 = 41125 +a41126 = 41126 +a41127 = 41127 +a41128 = 41128 +a41129 = 41129 +a41130 = 41130 +a41131 = 41131 +a41132 = 41132 +a41133 = 41133 +a41134 = 41134 +a41135 = 41135 +a41136 = 41136 +a41137 = 41137 +a41138 = 41138 +a41139 = 41139 +a41140 = 41140 +a41141 = 41141 +a41142 = 41142 +a41143 = 41143 +a41144 = 41144 +a41145 = 41145 +a41146 = 41146 +a41147 = 41147 +a41148 = 41148 +a41149 = 41149 +a41150 = 41150 +a41151 = 41151 +a41152 = 41152 +a41153 = 41153 +a41154 = 41154 +a41155 = 41155 +a41156 = 41156 +a41157 = 41157 +a41158 = 41158 +a41159 = 41159 +a41160 = 41160 +a41161 = 41161 +a41162 = 41162 +a41163 = 41163 +a41164 = 41164 +a41165 = 41165 +a41166 = 41166 +a41167 = 41167 +a41168 = 41168 +a41169 = 41169 +a41170 = 41170 +a41171 = 41171 +a41172 = 41172 +a41173 = 41173 +a41174 = 41174 +a41175 = 41175 +a41176 = 41176 +a41177 = 41177 +a41178 = 41178 +a41179 = 41179 +a41180 = 41180 +a41181 = 41181 +a41182 = 41182 +a41183 = 41183 +a41184 = 41184 +a41185 = 41185 +a41186 = 41186 +a41187 = 41187 +a41188 = 41188 +a41189 = 41189 +a41190 = 41190 +a41191 = 41191 +a41192 = 41192 +a41193 = 41193 +a41194 = 41194 +a41195 = 41195 +a41196 = 41196 +a41197 = 41197 +a41198 = 41198 +a41199 = 41199 +a41200 = 41200 +a41201 = 41201 +a41202 = 41202 +a41203 = 41203 +a41204 = 41204 +a41205 = 41205 +a41206 = 41206 +a41207 = 41207 +a41208 = 41208 +a41209 = 41209 +a41210 = 41210 +a41211 = 41211 +a41212 = 41212 +a41213 = 41213 +a41214 = 41214 +a41215 = 41215 +a41216 = 41216 +a41217 = 41217 +a41218 = 41218 +a41219 = 41219 +a41220 = 41220 +a41221 = 41221 +a41222 = 41222 +a41223 = 41223 +a41224 = 41224 +a41225 = 41225 +a41226 = 41226 +a41227 = 41227 +a41228 = 41228 +a41229 = 41229 +a41230 = 41230 +a41231 = 41231 +a41232 = 41232 +a41233 = 41233 +a41234 = 41234 +a41235 = 41235 +a41236 = 41236 +a41237 = 41237 +a41238 = 41238 +a41239 = 41239 +a41240 = 41240 +a41241 = 41241 +a41242 = 41242 +a41243 = 41243 +a41244 = 41244 +a41245 = 41245 +a41246 = 41246 +a41247 = 41247 +a41248 = 41248 +a41249 = 41249 +a41250 = 41250 +a41251 = 41251 +a41252 = 41252 +a41253 = 41253 +a41254 = 41254 +a41255 = 41255 +a41256 = 41256 +a41257 = 41257 +a41258 = 41258 +a41259 = 41259 +a41260 = 41260 +a41261 = 41261 +a41262 = 41262 +a41263 = 41263 +a41264 = 41264 +a41265 = 41265 +a41266 = 41266 +a41267 = 41267 +a41268 = 41268 +a41269 = 41269 +a41270 = 41270 +a41271 = 41271 +a41272 = 41272 +a41273 = 41273 +a41274 = 41274 +a41275 = 41275 +a41276 = 41276 +a41277 = 41277 +a41278 = 41278 +a41279 = 41279 +a41280 = 41280 +a41281 = 41281 +a41282 = 41282 +a41283 = 41283 +a41284 = 41284 +a41285 = 41285 +a41286 = 41286 +a41287 = 41287 +a41288 = 41288 +a41289 = 41289 +a41290 = 41290 +a41291 = 41291 +a41292 = 41292 +a41293 = 41293 +a41294 = 41294 +a41295 = 41295 +a41296 = 41296 +a41297 = 41297 +a41298 = 41298 +a41299 = 41299 +a41300 = 41300 +a41301 = 41301 +a41302 = 41302 +a41303 = 41303 +a41304 = 41304 +a41305 = 41305 +a41306 = 41306 +a41307 = 41307 +a41308 = 41308 +a41309 = 41309 +a41310 = 41310 +a41311 = 41311 +a41312 = 41312 +a41313 = 41313 +a41314 = 41314 +a41315 = 41315 +a41316 = 41316 +a41317 = 41317 +a41318 = 41318 +a41319 = 41319 +a41320 = 41320 +a41321 = 41321 +a41322 = 41322 +a41323 = 41323 +a41324 = 41324 +a41325 = 41325 +a41326 = 41326 +a41327 = 41327 +a41328 = 41328 +a41329 = 41329 +a41330 = 41330 +a41331 = 41331 +a41332 = 41332 +a41333 = 41333 +a41334 = 41334 +a41335 = 41335 +a41336 = 41336 +a41337 = 41337 +a41338 = 41338 +a41339 = 41339 +a41340 = 41340 +a41341 = 41341 +a41342 = 41342 +a41343 = 41343 +a41344 = 41344 +a41345 = 41345 +a41346 = 41346 +a41347 = 41347 +a41348 = 41348 +a41349 = 41349 +a41350 = 41350 +a41351 = 41351 +a41352 = 41352 +a41353 = 41353 +a41354 = 41354 +a41355 = 41355 +a41356 = 41356 +a41357 = 41357 +a41358 = 41358 +a41359 = 41359 +a41360 = 41360 +a41361 = 41361 +a41362 = 41362 +a41363 = 41363 +a41364 = 41364 +a41365 = 41365 +a41366 = 41366 +a41367 = 41367 +a41368 = 41368 +a41369 = 41369 +a41370 = 41370 +a41371 = 41371 +a41372 = 41372 +a41373 = 41373 +a41374 = 41374 +a41375 = 41375 +a41376 = 41376 +a41377 = 41377 +a41378 = 41378 +a41379 = 41379 +a41380 = 41380 +a41381 = 41381 +a41382 = 41382 +a41383 = 41383 +a41384 = 41384 +a41385 = 41385 +a41386 = 41386 +a41387 = 41387 +a41388 = 41388 +a41389 = 41389 +a41390 = 41390 +a41391 = 41391 +a41392 = 41392 +a41393 = 41393 +a41394 = 41394 +a41395 = 41395 +a41396 = 41396 +a41397 = 41397 +a41398 = 41398 +a41399 = 41399 +a41400 = 41400 +a41401 = 41401 +a41402 = 41402 +a41403 = 41403 +a41404 = 41404 +a41405 = 41405 +a41406 = 41406 +a41407 = 41407 +a41408 = 41408 +a41409 = 41409 +a41410 = 41410 +a41411 = 41411 +a41412 = 41412 +a41413 = 41413 +a41414 = 41414 +a41415 = 41415 +a41416 = 41416 +a41417 = 41417 +a41418 = 41418 +a41419 = 41419 +a41420 = 41420 +a41421 = 41421 +a41422 = 41422 +a41423 = 41423 +a41424 = 41424 +a41425 = 41425 +a41426 = 41426 +a41427 = 41427 +a41428 = 41428 +a41429 = 41429 +a41430 = 41430 +a41431 = 41431 +a41432 = 41432 +a41433 = 41433 +a41434 = 41434 +a41435 = 41435 +a41436 = 41436 +a41437 = 41437 +a41438 = 41438 +a41439 = 41439 +a41440 = 41440 +a41441 = 41441 +a41442 = 41442 +a41443 = 41443 +a41444 = 41444 +a41445 = 41445 +a41446 = 41446 +a41447 = 41447 +a41448 = 41448 +a41449 = 41449 +a41450 = 41450 +a41451 = 41451 +a41452 = 41452 +a41453 = 41453 +a41454 = 41454 +a41455 = 41455 +a41456 = 41456 +a41457 = 41457 +a41458 = 41458 +a41459 = 41459 +a41460 = 41460 +a41461 = 41461 +a41462 = 41462 +a41463 = 41463 +a41464 = 41464 +a41465 = 41465 +a41466 = 41466 +a41467 = 41467 +a41468 = 41468 +a41469 = 41469 +a41470 = 41470 +a41471 = 41471 +a41472 = 41472 +a41473 = 41473 +a41474 = 41474 +a41475 = 41475 +a41476 = 41476 +a41477 = 41477 +a41478 = 41478 +a41479 = 41479 +a41480 = 41480 +a41481 = 41481 +a41482 = 41482 +a41483 = 41483 +a41484 = 41484 +a41485 = 41485 +a41486 = 41486 +a41487 = 41487 +a41488 = 41488 +a41489 = 41489 +a41490 = 41490 +a41491 = 41491 +a41492 = 41492 +a41493 = 41493 +a41494 = 41494 +a41495 = 41495 +a41496 = 41496 +a41497 = 41497 +a41498 = 41498 +a41499 = 41499 +a41500 = 41500 +a41501 = 41501 +a41502 = 41502 +a41503 = 41503 +a41504 = 41504 +a41505 = 41505 +a41506 = 41506 +a41507 = 41507 +a41508 = 41508 +a41509 = 41509 +a41510 = 41510 +a41511 = 41511 +a41512 = 41512 +a41513 = 41513 +a41514 = 41514 +a41515 = 41515 +a41516 = 41516 +a41517 = 41517 +a41518 = 41518 +a41519 = 41519 +a41520 = 41520 +a41521 = 41521 +a41522 = 41522 +a41523 = 41523 +a41524 = 41524 +a41525 = 41525 +a41526 = 41526 +a41527 = 41527 +a41528 = 41528 +a41529 = 41529 +a41530 = 41530 +a41531 = 41531 +a41532 = 41532 +a41533 = 41533 +a41534 = 41534 +a41535 = 41535 +a41536 = 41536 +a41537 = 41537 +a41538 = 41538 +a41539 = 41539 +a41540 = 41540 +a41541 = 41541 +a41542 = 41542 +a41543 = 41543 +a41544 = 41544 +a41545 = 41545 +a41546 = 41546 +a41547 = 41547 +a41548 = 41548 +a41549 = 41549 +a41550 = 41550 +a41551 = 41551 +a41552 = 41552 +a41553 = 41553 +a41554 = 41554 +a41555 = 41555 +a41556 = 41556 +a41557 = 41557 +a41558 = 41558 +a41559 = 41559 +a41560 = 41560 +a41561 = 41561 +a41562 = 41562 +a41563 = 41563 +a41564 = 41564 +a41565 = 41565 +a41566 = 41566 +a41567 = 41567 +a41568 = 41568 +a41569 = 41569 +a41570 = 41570 +a41571 = 41571 +a41572 = 41572 +a41573 = 41573 +a41574 = 41574 +a41575 = 41575 +a41576 = 41576 +a41577 = 41577 +a41578 = 41578 +a41579 = 41579 +a41580 = 41580 +a41581 = 41581 +a41582 = 41582 +a41583 = 41583 +a41584 = 41584 +a41585 = 41585 +a41586 = 41586 +a41587 = 41587 +a41588 = 41588 +a41589 = 41589 +a41590 = 41590 +a41591 = 41591 +a41592 = 41592 +a41593 = 41593 +a41594 = 41594 +a41595 = 41595 +a41596 = 41596 +a41597 = 41597 +a41598 = 41598 +a41599 = 41599 +a41600 = 41600 +a41601 = 41601 +a41602 = 41602 +a41603 = 41603 +a41604 = 41604 +a41605 = 41605 +a41606 = 41606 +a41607 = 41607 +a41608 = 41608 +a41609 = 41609 +a41610 = 41610 +a41611 = 41611 +a41612 = 41612 +a41613 = 41613 +a41614 = 41614 +a41615 = 41615 +a41616 = 41616 +a41617 = 41617 +a41618 = 41618 +a41619 = 41619 +a41620 = 41620 +a41621 = 41621 +a41622 = 41622 +a41623 = 41623 +a41624 = 41624 +a41625 = 41625 +a41626 = 41626 +a41627 = 41627 +a41628 = 41628 +a41629 = 41629 +a41630 = 41630 +a41631 = 41631 +a41632 = 41632 +a41633 = 41633 +a41634 = 41634 +a41635 = 41635 +a41636 = 41636 +a41637 = 41637 +a41638 = 41638 +a41639 = 41639 +a41640 = 41640 +a41641 = 41641 +a41642 = 41642 +a41643 = 41643 +a41644 = 41644 +a41645 = 41645 +a41646 = 41646 +a41647 = 41647 +a41648 = 41648 +a41649 = 41649 +a41650 = 41650 +a41651 = 41651 +a41652 = 41652 +a41653 = 41653 +a41654 = 41654 +a41655 = 41655 +a41656 = 41656 +a41657 = 41657 +a41658 = 41658 +a41659 = 41659 +a41660 = 41660 +a41661 = 41661 +a41662 = 41662 +a41663 = 41663 +a41664 = 41664 +a41665 = 41665 +a41666 = 41666 +a41667 = 41667 +a41668 = 41668 +a41669 = 41669 +a41670 = 41670 +a41671 = 41671 +a41672 = 41672 +a41673 = 41673 +a41674 = 41674 +a41675 = 41675 +a41676 = 41676 +a41677 = 41677 +a41678 = 41678 +a41679 = 41679 +a41680 = 41680 +a41681 = 41681 +a41682 = 41682 +a41683 = 41683 +a41684 = 41684 +a41685 = 41685 +a41686 = 41686 +a41687 = 41687 +a41688 = 41688 +a41689 = 41689 +a41690 = 41690 +a41691 = 41691 +a41692 = 41692 +a41693 = 41693 +a41694 = 41694 +a41695 = 41695 +a41696 = 41696 +a41697 = 41697 +a41698 = 41698 +a41699 = 41699 +a41700 = 41700 +a41701 = 41701 +a41702 = 41702 +a41703 = 41703 +a41704 = 41704 +a41705 = 41705 +a41706 = 41706 +a41707 = 41707 +a41708 = 41708 +a41709 = 41709 +a41710 = 41710 +a41711 = 41711 +a41712 = 41712 +a41713 = 41713 +a41714 = 41714 +a41715 = 41715 +a41716 = 41716 +a41717 = 41717 +a41718 = 41718 +a41719 = 41719 +a41720 = 41720 +a41721 = 41721 +a41722 = 41722 +a41723 = 41723 +a41724 = 41724 +a41725 = 41725 +a41726 = 41726 +a41727 = 41727 +a41728 = 41728 +a41729 = 41729 +a41730 = 41730 +a41731 = 41731 +a41732 = 41732 +a41733 = 41733 +a41734 = 41734 +a41735 = 41735 +a41736 = 41736 +a41737 = 41737 +a41738 = 41738 +a41739 = 41739 +a41740 = 41740 +a41741 = 41741 +a41742 = 41742 +a41743 = 41743 +a41744 = 41744 +a41745 = 41745 +a41746 = 41746 +a41747 = 41747 +a41748 = 41748 +a41749 = 41749 +a41750 = 41750 +a41751 = 41751 +a41752 = 41752 +a41753 = 41753 +a41754 = 41754 +a41755 = 41755 +a41756 = 41756 +a41757 = 41757 +a41758 = 41758 +a41759 = 41759 +a41760 = 41760 +a41761 = 41761 +a41762 = 41762 +a41763 = 41763 +a41764 = 41764 +a41765 = 41765 +a41766 = 41766 +a41767 = 41767 +a41768 = 41768 +a41769 = 41769 +a41770 = 41770 +a41771 = 41771 +a41772 = 41772 +a41773 = 41773 +a41774 = 41774 +a41775 = 41775 +a41776 = 41776 +a41777 = 41777 +a41778 = 41778 +a41779 = 41779 +a41780 = 41780 +a41781 = 41781 +a41782 = 41782 +a41783 = 41783 +a41784 = 41784 +a41785 = 41785 +a41786 = 41786 +a41787 = 41787 +a41788 = 41788 +a41789 = 41789 +a41790 = 41790 +a41791 = 41791 +a41792 = 41792 +a41793 = 41793 +a41794 = 41794 +a41795 = 41795 +a41796 = 41796 +a41797 = 41797 +a41798 = 41798 +a41799 = 41799 +a41800 = 41800 +a41801 = 41801 +a41802 = 41802 +a41803 = 41803 +a41804 = 41804 +a41805 = 41805 +a41806 = 41806 +a41807 = 41807 +a41808 = 41808 +a41809 = 41809 +a41810 = 41810 +a41811 = 41811 +a41812 = 41812 +a41813 = 41813 +a41814 = 41814 +a41815 = 41815 +a41816 = 41816 +a41817 = 41817 +a41818 = 41818 +a41819 = 41819 +a41820 = 41820 +a41821 = 41821 +a41822 = 41822 +a41823 = 41823 +a41824 = 41824 +a41825 = 41825 +a41826 = 41826 +a41827 = 41827 +a41828 = 41828 +a41829 = 41829 +a41830 = 41830 +a41831 = 41831 +a41832 = 41832 +a41833 = 41833 +a41834 = 41834 +a41835 = 41835 +a41836 = 41836 +a41837 = 41837 +a41838 = 41838 +a41839 = 41839 +a41840 = 41840 +a41841 = 41841 +a41842 = 41842 +a41843 = 41843 +a41844 = 41844 +a41845 = 41845 +a41846 = 41846 +a41847 = 41847 +a41848 = 41848 +a41849 = 41849 +a41850 = 41850 +a41851 = 41851 +a41852 = 41852 +a41853 = 41853 +a41854 = 41854 +a41855 = 41855 +a41856 = 41856 +a41857 = 41857 +a41858 = 41858 +a41859 = 41859 +a41860 = 41860 +a41861 = 41861 +a41862 = 41862 +a41863 = 41863 +a41864 = 41864 +a41865 = 41865 +a41866 = 41866 +a41867 = 41867 +a41868 = 41868 +a41869 = 41869 +a41870 = 41870 +a41871 = 41871 +a41872 = 41872 +a41873 = 41873 +a41874 = 41874 +a41875 = 41875 +a41876 = 41876 +a41877 = 41877 +a41878 = 41878 +a41879 = 41879 +a41880 = 41880 +a41881 = 41881 +a41882 = 41882 +a41883 = 41883 +a41884 = 41884 +a41885 = 41885 +a41886 = 41886 +a41887 = 41887 +a41888 = 41888 +a41889 = 41889 +a41890 = 41890 +a41891 = 41891 +a41892 = 41892 +a41893 = 41893 +a41894 = 41894 +a41895 = 41895 +a41896 = 41896 +a41897 = 41897 +a41898 = 41898 +a41899 = 41899 +a41900 = 41900 +a41901 = 41901 +a41902 = 41902 +a41903 = 41903 +a41904 = 41904 +a41905 = 41905 +a41906 = 41906 +a41907 = 41907 +a41908 = 41908 +a41909 = 41909 +a41910 = 41910 +a41911 = 41911 +a41912 = 41912 +a41913 = 41913 +a41914 = 41914 +a41915 = 41915 +a41916 = 41916 +a41917 = 41917 +a41918 = 41918 +a41919 = 41919 +a41920 = 41920 +a41921 = 41921 +a41922 = 41922 +a41923 = 41923 +a41924 = 41924 +a41925 = 41925 +a41926 = 41926 +a41927 = 41927 +a41928 = 41928 +a41929 = 41929 +a41930 = 41930 +a41931 = 41931 +a41932 = 41932 +a41933 = 41933 +a41934 = 41934 +a41935 = 41935 +a41936 = 41936 +a41937 = 41937 +a41938 = 41938 +a41939 = 41939 +a41940 = 41940 +a41941 = 41941 +a41942 = 41942 +a41943 = 41943 +a41944 = 41944 +a41945 = 41945 +a41946 = 41946 +a41947 = 41947 +a41948 = 41948 +a41949 = 41949 +a41950 = 41950 +a41951 = 41951 +a41952 = 41952 +a41953 = 41953 +a41954 = 41954 +a41955 = 41955 +a41956 = 41956 +a41957 = 41957 +a41958 = 41958 +a41959 = 41959 +a41960 = 41960 +a41961 = 41961 +a41962 = 41962 +a41963 = 41963 +a41964 = 41964 +a41965 = 41965 +a41966 = 41966 +a41967 = 41967 +a41968 = 41968 +a41969 = 41969 +a41970 = 41970 +a41971 = 41971 +a41972 = 41972 +a41973 = 41973 +a41974 = 41974 +a41975 = 41975 +a41976 = 41976 +a41977 = 41977 +a41978 = 41978 +a41979 = 41979 +a41980 = 41980 +a41981 = 41981 +a41982 = 41982 +a41983 = 41983 +a41984 = 41984 +a41985 = 41985 +a41986 = 41986 +a41987 = 41987 +a41988 = 41988 +a41989 = 41989 +a41990 = 41990 +a41991 = 41991 +a41992 = 41992 +a41993 = 41993 +a41994 = 41994 +a41995 = 41995 +a41996 = 41996 +a41997 = 41997 +a41998 = 41998 +a41999 = 41999 +a42000 = 42000 +a42001 = 42001 +a42002 = 42002 +a42003 = 42003 +a42004 = 42004 +a42005 = 42005 +a42006 = 42006 +a42007 = 42007 +a42008 = 42008 +a42009 = 42009 +a42010 = 42010 +a42011 = 42011 +a42012 = 42012 +a42013 = 42013 +a42014 = 42014 +a42015 = 42015 +a42016 = 42016 +a42017 = 42017 +a42018 = 42018 +a42019 = 42019 +a42020 = 42020 +a42021 = 42021 +a42022 = 42022 +a42023 = 42023 +a42024 = 42024 +a42025 = 42025 +a42026 = 42026 +a42027 = 42027 +a42028 = 42028 +a42029 = 42029 +a42030 = 42030 +a42031 = 42031 +a42032 = 42032 +a42033 = 42033 +a42034 = 42034 +a42035 = 42035 +a42036 = 42036 +a42037 = 42037 +a42038 = 42038 +a42039 = 42039 +a42040 = 42040 +a42041 = 42041 +a42042 = 42042 +a42043 = 42043 +a42044 = 42044 +a42045 = 42045 +a42046 = 42046 +a42047 = 42047 +a42048 = 42048 +a42049 = 42049 +a42050 = 42050 +a42051 = 42051 +a42052 = 42052 +a42053 = 42053 +a42054 = 42054 +a42055 = 42055 +a42056 = 42056 +a42057 = 42057 +a42058 = 42058 +a42059 = 42059 +a42060 = 42060 +a42061 = 42061 +a42062 = 42062 +a42063 = 42063 +a42064 = 42064 +a42065 = 42065 +a42066 = 42066 +a42067 = 42067 +a42068 = 42068 +a42069 = 42069 +a42070 = 42070 +a42071 = 42071 +a42072 = 42072 +a42073 = 42073 +a42074 = 42074 +a42075 = 42075 +a42076 = 42076 +a42077 = 42077 +a42078 = 42078 +a42079 = 42079 +a42080 = 42080 +a42081 = 42081 +a42082 = 42082 +a42083 = 42083 +a42084 = 42084 +a42085 = 42085 +a42086 = 42086 +a42087 = 42087 +a42088 = 42088 +a42089 = 42089 +a42090 = 42090 +a42091 = 42091 +a42092 = 42092 +a42093 = 42093 +a42094 = 42094 +a42095 = 42095 +a42096 = 42096 +a42097 = 42097 +a42098 = 42098 +a42099 = 42099 +a42100 = 42100 +a42101 = 42101 +a42102 = 42102 +a42103 = 42103 +a42104 = 42104 +a42105 = 42105 +a42106 = 42106 +a42107 = 42107 +a42108 = 42108 +a42109 = 42109 +a42110 = 42110 +a42111 = 42111 +a42112 = 42112 +a42113 = 42113 +a42114 = 42114 +a42115 = 42115 +a42116 = 42116 +a42117 = 42117 +a42118 = 42118 +a42119 = 42119 +a42120 = 42120 +a42121 = 42121 +a42122 = 42122 +a42123 = 42123 +a42124 = 42124 +a42125 = 42125 +a42126 = 42126 +a42127 = 42127 +a42128 = 42128 +a42129 = 42129 +a42130 = 42130 +a42131 = 42131 +a42132 = 42132 +a42133 = 42133 +a42134 = 42134 +a42135 = 42135 +a42136 = 42136 +a42137 = 42137 +a42138 = 42138 +a42139 = 42139 +a42140 = 42140 +a42141 = 42141 +a42142 = 42142 +a42143 = 42143 +a42144 = 42144 +a42145 = 42145 +a42146 = 42146 +a42147 = 42147 +a42148 = 42148 +a42149 = 42149 +a42150 = 42150 +a42151 = 42151 +a42152 = 42152 +a42153 = 42153 +a42154 = 42154 +a42155 = 42155 +a42156 = 42156 +a42157 = 42157 +a42158 = 42158 +a42159 = 42159 +a42160 = 42160 +a42161 = 42161 +a42162 = 42162 +a42163 = 42163 +a42164 = 42164 +a42165 = 42165 +a42166 = 42166 +a42167 = 42167 +a42168 = 42168 +a42169 = 42169 +a42170 = 42170 +a42171 = 42171 +a42172 = 42172 +a42173 = 42173 +a42174 = 42174 +a42175 = 42175 +a42176 = 42176 +a42177 = 42177 +a42178 = 42178 +a42179 = 42179 +a42180 = 42180 +a42181 = 42181 +a42182 = 42182 +a42183 = 42183 +a42184 = 42184 +a42185 = 42185 +a42186 = 42186 +a42187 = 42187 +a42188 = 42188 +a42189 = 42189 +a42190 = 42190 +a42191 = 42191 +a42192 = 42192 +a42193 = 42193 +a42194 = 42194 +a42195 = 42195 +a42196 = 42196 +a42197 = 42197 +a42198 = 42198 +a42199 = 42199 +a42200 = 42200 +a42201 = 42201 +a42202 = 42202 +a42203 = 42203 +a42204 = 42204 +a42205 = 42205 +a42206 = 42206 +a42207 = 42207 +a42208 = 42208 +a42209 = 42209 +a42210 = 42210 +a42211 = 42211 +a42212 = 42212 +a42213 = 42213 +a42214 = 42214 +a42215 = 42215 +a42216 = 42216 +a42217 = 42217 +a42218 = 42218 +a42219 = 42219 +a42220 = 42220 +a42221 = 42221 +a42222 = 42222 +a42223 = 42223 +a42224 = 42224 +a42225 = 42225 +a42226 = 42226 +a42227 = 42227 +a42228 = 42228 +a42229 = 42229 +a42230 = 42230 +a42231 = 42231 +a42232 = 42232 +a42233 = 42233 +a42234 = 42234 +a42235 = 42235 +a42236 = 42236 +a42237 = 42237 +a42238 = 42238 +a42239 = 42239 +a42240 = 42240 +a42241 = 42241 +a42242 = 42242 +a42243 = 42243 +a42244 = 42244 +a42245 = 42245 +a42246 = 42246 +a42247 = 42247 +a42248 = 42248 +a42249 = 42249 +a42250 = 42250 +a42251 = 42251 +a42252 = 42252 +a42253 = 42253 +a42254 = 42254 +a42255 = 42255 +a42256 = 42256 +a42257 = 42257 +a42258 = 42258 +a42259 = 42259 +a42260 = 42260 +a42261 = 42261 +a42262 = 42262 +a42263 = 42263 +a42264 = 42264 +a42265 = 42265 +a42266 = 42266 +a42267 = 42267 +a42268 = 42268 +a42269 = 42269 +a42270 = 42270 +a42271 = 42271 +a42272 = 42272 +a42273 = 42273 +a42274 = 42274 +a42275 = 42275 +a42276 = 42276 +a42277 = 42277 +a42278 = 42278 +a42279 = 42279 +a42280 = 42280 +a42281 = 42281 +a42282 = 42282 +a42283 = 42283 +a42284 = 42284 +a42285 = 42285 +a42286 = 42286 +a42287 = 42287 +a42288 = 42288 +a42289 = 42289 +a42290 = 42290 +a42291 = 42291 +a42292 = 42292 +a42293 = 42293 +a42294 = 42294 +a42295 = 42295 +a42296 = 42296 +a42297 = 42297 +a42298 = 42298 +a42299 = 42299 +a42300 = 42300 +a42301 = 42301 +a42302 = 42302 +a42303 = 42303 +a42304 = 42304 +a42305 = 42305 +a42306 = 42306 +a42307 = 42307 +a42308 = 42308 +a42309 = 42309 +a42310 = 42310 +a42311 = 42311 +a42312 = 42312 +a42313 = 42313 +a42314 = 42314 +a42315 = 42315 +a42316 = 42316 +a42317 = 42317 +a42318 = 42318 +a42319 = 42319 +a42320 = 42320 +a42321 = 42321 +a42322 = 42322 +a42323 = 42323 +a42324 = 42324 +a42325 = 42325 +a42326 = 42326 +a42327 = 42327 +a42328 = 42328 +a42329 = 42329 +a42330 = 42330 +a42331 = 42331 +a42332 = 42332 +a42333 = 42333 +a42334 = 42334 +a42335 = 42335 +a42336 = 42336 +a42337 = 42337 +a42338 = 42338 +a42339 = 42339 +a42340 = 42340 +a42341 = 42341 +a42342 = 42342 +a42343 = 42343 +a42344 = 42344 +a42345 = 42345 +a42346 = 42346 +a42347 = 42347 +a42348 = 42348 +a42349 = 42349 +a42350 = 42350 +a42351 = 42351 +a42352 = 42352 +a42353 = 42353 +a42354 = 42354 +a42355 = 42355 +a42356 = 42356 +a42357 = 42357 +a42358 = 42358 +a42359 = 42359 +a42360 = 42360 +a42361 = 42361 +a42362 = 42362 +a42363 = 42363 +a42364 = 42364 +a42365 = 42365 +a42366 = 42366 +a42367 = 42367 +a42368 = 42368 +a42369 = 42369 +a42370 = 42370 +a42371 = 42371 +a42372 = 42372 +a42373 = 42373 +a42374 = 42374 +a42375 = 42375 +a42376 = 42376 +a42377 = 42377 +a42378 = 42378 +a42379 = 42379 +a42380 = 42380 +a42381 = 42381 +a42382 = 42382 +a42383 = 42383 +a42384 = 42384 +a42385 = 42385 +a42386 = 42386 +a42387 = 42387 +a42388 = 42388 +a42389 = 42389 +a42390 = 42390 +a42391 = 42391 +a42392 = 42392 +a42393 = 42393 +a42394 = 42394 +a42395 = 42395 +a42396 = 42396 +a42397 = 42397 +a42398 = 42398 +a42399 = 42399 +a42400 = 42400 +a42401 = 42401 +a42402 = 42402 +a42403 = 42403 +a42404 = 42404 +a42405 = 42405 +a42406 = 42406 +a42407 = 42407 +a42408 = 42408 +a42409 = 42409 +a42410 = 42410 +a42411 = 42411 +a42412 = 42412 +a42413 = 42413 +a42414 = 42414 +a42415 = 42415 +a42416 = 42416 +a42417 = 42417 +a42418 = 42418 +a42419 = 42419 +a42420 = 42420 +a42421 = 42421 +a42422 = 42422 +a42423 = 42423 +a42424 = 42424 +a42425 = 42425 +a42426 = 42426 +a42427 = 42427 +a42428 = 42428 +a42429 = 42429 +a42430 = 42430 +a42431 = 42431 +a42432 = 42432 +a42433 = 42433 +a42434 = 42434 +a42435 = 42435 +a42436 = 42436 +a42437 = 42437 +a42438 = 42438 +a42439 = 42439 +a42440 = 42440 +a42441 = 42441 +a42442 = 42442 +a42443 = 42443 +a42444 = 42444 +a42445 = 42445 +a42446 = 42446 +a42447 = 42447 +a42448 = 42448 +a42449 = 42449 +a42450 = 42450 +a42451 = 42451 +a42452 = 42452 +a42453 = 42453 +a42454 = 42454 +a42455 = 42455 +a42456 = 42456 +a42457 = 42457 +a42458 = 42458 +a42459 = 42459 +a42460 = 42460 +a42461 = 42461 +a42462 = 42462 +a42463 = 42463 +a42464 = 42464 +a42465 = 42465 +a42466 = 42466 +a42467 = 42467 +a42468 = 42468 +a42469 = 42469 +a42470 = 42470 +a42471 = 42471 +a42472 = 42472 +a42473 = 42473 +a42474 = 42474 +a42475 = 42475 +a42476 = 42476 +a42477 = 42477 +a42478 = 42478 +a42479 = 42479 +a42480 = 42480 +a42481 = 42481 +a42482 = 42482 +a42483 = 42483 +a42484 = 42484 +a42485 = 42485 +a42486 = 42486 +a42487 = 42487 +a42488 = 42488 +a42489 = 42489 +a42490 = 42490 +a42491 = 42491 +a42492 = 42492 +a42493 = 42493 +a42494 = 42494 +a42495 = 42495 +a42496 = 42496 +a42497 = 42497 +a42498 = 42498 +a42499 = 42499 +a42500 = 42500 +a42501 = 42501 +a42502 = 42502 +a42503 = 42503 +a42504 = 42504 +a42505 = 42505 +a42506 = 42506 +a42507 = 42507 +a42508 = 42508 +a42509 = 42509 +a42510 = 42510 +a42511 = 42511 +a42512 = 42512 +a42513 = 42513 +a42514 = 42514 +a42515 = 42515 +a42516 = 42516 +a42517 = 42517 +a42518 = 42518 +a42519 = 42519 +a42520 = 42520 +a42521 = 42521 +a42522 = 42522 +a42523 = 42523 +a42524 = 42524 +a42525 = 42525 +a42526 = 42526 +a42527 = 42527 +a42528 = 42528 +a42529 = 42529 +a42530 = 42530 +a42531 = 42531 +a42532 = 42532 +a42533 = 42533 +a42534 = 42534 +a42535 = 42535 +a42536 = 42536 +a42537 = 42537 +a42538 = 42538 +a42539 = 42539 +a42540 = 42540 +a42541 = 42541 +a42542 = 42542 +a42543 = 42543 +a42544 = 42544 +a42545 = 42545 +a42546 = 42546 +a42547 = 42547 +a42548 = 42548 +a42549 = 42549 +a42550 = 42550 +a42551 = 42551 +a42552 = 42552 +a42553 = 42553 +a42554 = 42554 +a42555 = 42555 +a42556 = 42556 +a42557 = 42557 +a42558 = 42558 +a42559 = 42559 +a42560 = 42560 +a42561 = 42561 +a42562 = 42562 +a42563 = 42563 +a42564 = 42564 +a42565 = 42565 +a42566 = 42566 +a42567 = 42567 +a42568 = 42568 +a42569 = 42569 +a42570 = 42570 +a42571 = 42571 +a42572 = 42572 +a42573 = 42573 +a42574 = 42574 +a42575 = 42575 +a42576 = 42576 +a42577 = 42577 +a42578 = 42578 +a42579 = 42579 +a42580 = 42580 +a42581 = 42581 +a42582 = 42582 +a42583 = 42583 +a42584 = 42584 +a42585 = 42585 +a42586 = 42586 +a42587 = 42587 +a42588 = 42588 +a42589 = 42589 +a42590 = 42590 +a42591 = 42591 +a42592 = 42592 +a42593 = 42593 +a42594 = 42594 +a42595 = 42595 +a42596 = 42596 +a42597 = 42597 +a42598 = 42598 +a42599 = 42599 +a42600 = 42600 +a42601 = 42601 +a42602 = 42602 +a42603 = 42603 +a42604 = 42604 +a42605 = 42605 +a42606 = 42606 +a42607 = 42607 +a42608 = 42608 +a42609 = 42609 +a42610 = 42610 +a42611 = 42611 +a42612 = 42612 +a42613 = 42613 +a42614 = 42614 +a42615 = 42615 +a42616 = 42616 +a42617 = 42617 +a42618 = 42618 +a42619 = 42619 +a42620 = 42620 +a42621 = 42621 +a42622 = 42622 +a42623 = 42623 +a42624 = 42624 +a42625 = 42625 +a42626 = 42626 +a42627 = 42627 +a42628 = 42628 +a42629 = 42629 +a42630 = 42630 +a42631 = 42631 +a42632 = 42632 +a42633 = 42633 +a42634 = 42634 +a42635 = 42635 +a42636 = 42636 +a42637 = 42637 +a42638 = 42638 +a42639 = 42639 +a42640 = 42640 +a42641 = 42641 +a42642 = 42642 +a42643 = 42643 +a42644 = 42644 +a42645 = 42645 +a42646 = 42646 +a42647 = 42647 +a42648 = 42648 +a42649 = 42649 +a42650 = 42650 +a42651 = 42651 +a42652 = 42652 +a42653 = 42653 +a42654 = 42654 +a42655 = 42655 +a42656 = 42656 +a42657 = 42657 +a42658 = 42658 +a42659 = 42659 +a42660 = 42660 +a42661 = 42661 +a42662 = 42662 +a42663 = 42663 +a42664 = 42664 +a42665 = 42665 +a42666 = 42666 +a42667 = 42667 +a42668 = 42668 +a42669 = 42669 +a42670 = 42670 +a42671 = 42671 +a42672 = 42672 +a42673 = 42673 +a42674 = 42674 +a42675 = 42675 +a42676 = 42676 +a42677 = 42677 +a42678 = 42678 +a42679 = 42679 +a42680 = 42680 +a42681 = 42681 +a42682 = 42682 +a42683 = 42683 +a42684 = 42684 +a42685 = 42685 +a42686 = 42686 +a42687 = 42687 +a42688 = 42688 +a42689 = 42689 +a42690 = 42690 +a42691 = 42691 +a42692 = 42692 +a42693 = 42693 +a42694 = 42694 +a42695 = 42695 +a42696 = 42696 +a42697 = 42697 +a42698 = 42698 +a42699 = 42699 +a42700 = 42700 +a42701 = 42701 +a42702 = 42702 +a42703 = 42703 +a42704 = 42704 +a42705 = 42705 +a42706 = 42706 +a42707 = 42707 +a42708 = 42708 +a42709 = 42709 +a42710 = 42710 +a42711 = 42711 +a42712 = 42712 +a42713 = 42713 +a42714 = 42714 +a42715 = 42715 +a42716 = 42716 +a42717 = 42717 +a42718 = 42718 +a42719 = 42719 +a42720 = 42720 +a42721 = 42721 +a42722 = 42722 +a42723 = 42723 +a42724 = 42724 +a42725 = 42725 +a42726 = 42726 +a42727 = 42727 +a42728 = 42728 +a42729 = 42729 +a42730 = 42730 +a42731 = 42731 +a42732 = 42732 +a42733 = 42733 +a42734 = 42734 +a42735 = 42735 +a42736 = 42736 +a42737 = 42737 +a42738 = 42738 +a42739 = 42739 +a42740 = 42740 +a42741 = 42741 +a42742 = 42742 +a42743 = 42743 +a42744 = 42744 +a42745 = 42745 +a42746 = 42746 +a42747 = 42747 +a42748 = 42748 +a42749 = 42749 +a42750 = 42750 +a42751 = 42751 +a42752 = 42752 +a42753 = 42753 +a42754 = 42754 +a42755 = 42755 +a42756 = 42756 +a42757 = 42757 +a42758 = 42758 +a42759 = 42759 +a42760 = 42760 +a42761 = 42761 +a42762 = 42762 +a42763 = 42763 +a42764 = 42764 +a42765 = 42765 +a42766 = 42766 +a42767 = 42767 +a42768 = 42768 +a42769 = 42769 +a42770 = 42770 +a42771 = 42771 +a42772 = 42772 +a42773 = 42773 +a42774 = 42774 +a42775 = 42775 +a42776 = 42776 +a42777 = 42777 +a42778 = 42778 +a42779 = 42779 +a42780 = 42780 +a42781 = 42781 +a42782 = 42782 +a42783 = 42783 +a42784 = 42784 +a42785 = 42785 +a42786 = 42786 +a42787 = 42787 +a42788 = 42788 +a42789 = 42789 +a42790 = 42790 +a42791 = 42791 +a42792 = 42792 +a42793 = 42793 +a42794 = 42794 +a42795 = 42795 +a42796 = 42796 +a42797 = 42797 +a42798 = 42798 +a42799 = 42799 +a42800 = 42800 +a42801 = 42801 +a42802 = 42802 +a42803 = 42803 +a42804 = 42804 +a42805 = 42805 +a42806 = 42806 +a42807 = 42807 +a42808 = 42808 +a42809 = 42809 +a42810 = 42810 +a42811 = 42811 +a42812 = 42812 +a42813 = 42813 +a42814 = 42814 +a42815 = 42815 +a42816 = 42816 +a42817 = 42817 +a42818 = 42818 +a42819 = 42819 +a42820 = 42820 +a42821 = 42821 +a42822 = 42822 +a42823 = 42823 +a42824 = 42824 +a42825 = 42825 +a42826 = 42826 +a42827 = 42827 +a42828 = 42828 +a42829 = 42829 +a42830 = 42830 +a42831 = 42831 +a42832 = 42832 +a42833 = 42833 +a42834 = 42834 +a42835 = 42835 +a42836 = 42836 +a42837 = 42837 +a42838 = 42838 +a42839 = 42839 +a42840 = 42840 +a42841 = 42841 +a42842 = 42842 +a42843 = 42843 +a42844 = 42844 +a42845 = 42845 +a42846 = 42846 +a42847 = 42847 +a42848 = 42848 +a42849 = 42849 +a42850 = 42850 +a42851 = 42851 +a42852 = 42852 +a42853 = 42853 +a42854 = 42854 +a42855 = 42855 +a42856 = 42856 +a42857 = 42857 +a42858 = 42858 +a42859 = 42859 +a42860 = 42860 +a42861 = 42861 +a42862 = 42862 +a42863 = 42863 +a42864 = 42864 +a42865 = 42865 +a42866 = 42866 +a42867 = 42867 +a42868 = 42868 +a42869 = 42869 +a42870 = 42870 +a42871 = 42871 +a42872 = 42872 +a42873 = 42873 +a42874 = 42874 +a42875 = 42875 +a42876 = 42876 +a42877 = 42877 +a42878 = 42878 +a42879 = 42879 +a42880 = 42880 +a42881 = 42881 +a42882 = 42882 +a42883 = 42883 +a42884 = 42884 +a42885 = 42885 +a42886 = 42886 +a42887 = 42887 +a42888 = 42888 +a42889 = 42889 +a42890 = 42890 +a42891 = 42891 +a42892 = 42892 +a42893 = 42893 +a42894 = 42894 +a42895 = 42895 +a42896 = 42896 +a42897 = 42897 +a42898 = 42898 +a42899 = 42899 +a42900 = 42900 +a42901 = 42901 +a42902 = 42902 +a42903 = 42903 +a42904 = 42904 +a42905 = 42905 +a42906 = 42906 +a42907 = 42907 +a42908 = 42908 +a42909 = 42909 +a42910 = 42910 +a42911 = 42911 +a42912 = 42912 +a42913 = 42913 +a42914 = 42914 +a42915 = 42915 +a42916 = 42916 +a42917 = 42917 +a42918 = 42918 +a42919 = 42919 +a42920 = 42920 +a42921 = 42921 +a42922 = 42922 +a42923 = 42923 +a42924 = 42924 +a42925 = 42925 +a42926 = 42926 +a42927 = 42927 +a42928 = 42928 +a42929 = 42929 +a42930 = 42930 +a42931 = 42931 +a42932 = 42932 +a42933 = 42933 +a42934 = 42934 +a42935 = 42935 +a42936 = 42936 +a42937 = 42937 +a42938 = 42938 +a42939 = 42939 +a42940 = 42940 +a42941 = 42941 +a42942 = 42942 +a42943 = 42943 +a42944 = 42944 +a42945 = 42945 +a42946 = 42946 +a42947 = 42947 +a42948 = 42948 +a42949 = 42949 +a42950 = 42950 +a42951 = 42951 +a42952 = 42952 +a42953 = 42953 +a42954 = 42954 +a42955 = 42955 +a42956 = 42956 +a42957 = 42957 +a42958 = 42958 +a42959 = 42959 +a42960 = 42960 +a42961 = 42961 +a42962 = 42962 +a42963 = 42963 +a42964 = 42964 +a42965 = 42965 +a42966 = 42966 +a42967 = 42967 +a42968 = 42968 +a42969 = 42969 +a42970 = 42970 +a42971 = 42971 +a42972 = 42972 +a42973 = 42973 +a42974 = 42974 +a42975 = 42975 +a42976 = 42976 +a42977 = 42977 +a42978 = 42978 +a42979 = 42979 +a42980 = 42980 +a42981 = 42981 +a42982 = 42982 +a42983 = 42983 +a42984 = 42984 +a42985 = 42985 +a42986 = 42986 +a42987 = 42987 +a42988 = 42988 +a42989 = 42989 +a42990 = 42990 +a42991 = 42991 +a42992 = 42992 +a42993 = 42993 +a42994 = 42994 +a42995 = 42995 +a42996 = 42996 +a42997 = 42997 +a42998 = 42998 +a42999 = 42999 +a43000 = 43000 +a43001 = 43001 +a43002 = 43002 +a43003 = 43003 +a43004 = 43004 +a43005 = 43005 +a43006 = 43006 +a43007 = 43007 +a43008 = 43008 +a43009 = 43009 +a43010 = 43010 +a43011 = 43011 +a43012 = 43012 +a43013 = 43013 +a43014 = 43014 +a43015 = 43015 +a43016 = 43016 +a43017 = 43017 +a43018 = 43018 +a43019 = 43019 +a43020 = 43020 +a43021 = 43021 +a43022 = 43022 +a43023 = 43023 +a43024 = 43024 +a43025 = 43025 +a43026 = 43026 +a43027 = 43027 +a43028 = 43028 +a43029 = 43029 +a43030 = 43030 +a43031 = 43031 +a43032 = 43032 +a43033 = 43033 +a43034 = 43034 +a43035 = 43035 +a43036 = 43036 +a43037 = 43037 +a43038 = 43038 +a43039 = 43039 +a43040 = 43040 +a43041 = 43041 +a43042 = 43042 +a43043 = 43043 +a43044 = 43044 +a43045 = 43045 +a43046 = 43046 +a43047 = 43047 +a43048 = 43048 +a43049 = 43049 +a43050 = 43050 +a43051 = 43051 +a43052 = 43052 +a43053 = 43053 +a43054 = 43054 +a43055 = 43055 +a43056 = 43056 +a43057 = 43057 +a43058 = 43058 +a43059 = 43059 +a43060 = 43060 +a43061 = 43061 +a43062 = 43062 +a43063 = 43063 +a43064 = 43064 +a43065 = 43065 +a43066 = 43066 +a43067 = 43067 +a43068 = 43068 +a43069 = 43069 +a43070 = 43070 +a43071 = 43071 +a43072 = 43072 +a43073 = 43073 +a43074 = 43074 +a43075 = 43075 +a43076 = 43076 +a43077 = 43077 +a43078 = 43078 +a43079 = 43079 +a43080 = 43080 +a43081 = 43081 +a43082 = 43082 +a43083 = 43083 +a43084 = 43084 +a43085 = 43085 +a43086 = 43086 +a43087 = 43087 +a43088 = 43088 +a43089 = 43089 +a43090 = 43090 +a43091 = 43091 +a43092 = 43092 +a43093 = 43093 +a43094 = 43094 +a43095 = 43095 +a43096 = 43096 +a43097 = 43097 +a43098 = 43098 +a43099 = 43099 +a43100 = 43100 +a43101 = 43101 +a43102 = 43102 +a43103 = 43103 +a43104 = 43104 +a43105 = 43105 +a43106 = 43106 +a43107 = 43107 +a43108 = 43108 +a43109 = 43109 +a43110 = 43110 +a43111 = 43111 +a43112 = 43112 +a43113 = 43113 +a43114 = 43114 +a43115 = 43115 +a43116 = 43116 +a43117 = 43117 +a43118 = 43118 +a43119 = 43119 +a43120 = 43120 +a43121 = 43121 +a43122 = 43122 +a43123 = 43123 +a43124 = 43124 +a43125 = 43125 +a43126 = 43126 +a43127 = 43127 +a43128 = 43128 +a43129 = 43129 +a43130 = 43130 +a43131 = 43131 +a43132 = 43132 +a43133 = 43133 +a43134 = 43134 +a43135 = 43135 +a43136 = 43136 +a43137 = 43137 +a43138 = 43138 +a43139 = 43139 +a43140 = 43140 +a43141 = 43141 +a43142 = 43142 +a43143 = 43143 +a43144 = 43144 +a43145 = 43145 +a43146 = 43146 +a43147 = 43147 +a43148 = 43148 +a43149 = 43149 +a43150 = 43150 +a43151 = 43151 +a43152 = 43152 +a43153 = 43153 +a43154 = 43154 +a43155 = 43155 +a43156 = 43156 +a43157 = 43157 +a43158 = 43158 +a43159 = 43159 +a43160 = 43160 +a43161 = 43161 +a43162 = 43162 +a43163 = 43163 +a43164 = 43164 +a43165 = 43165 +a43166 = 43166 +a43167 = 43167 +a43168 = 43168 +a43169 = 43169 +a43170 = 43170 +a43171 = 43171 +a43172 = 43172 +a43173 = 43173 +a43174 = 43174 +a43175 = 43175 +a43176 = 43176 +a43177 = 43177 +a43178 = 43178 +a43179 = 43179 +a43180 = 43180 +a43181 = 43181 +a43182 = 43182 +a43183 = 43183 +a43184 = 43184 +a43185 = 43185 +a43186 = 43186 +a43187 = 43187 +a43188 = 43188 +a43189 = 43189 +a43190 = 43190 +a43191 = 43191 +a43192 = 43192 +a43193 = 43193 +a43194 = 43194 +a43195 = 43195 +a43196 = 43196 +a43197 = 43197 +a43198 = 43198 +a43199 = 43199 +a43200 = 43200 +a43201 = 43201 +a43202 = 43202 +a43203 = 43203 +a43204 = 43204 +a43205 = 43205 +a43206 = 43206 +a43207 = 43207 +a43208 = 43208 +a43209 = 43209 +a43210 = 43210 +a43211 = 43211 +a43212 = 43212 +a43213 = 43213 +a43214 = 43214 +a43215 = 43215 +a43216 = 43216 +a43217 = 43217 +a43218 = 43218 +a43219 = 43219 +a43220 = 43220 +a43221 = 43221 +a43222 = 43222 +a43223 = 43223 +a43224 = 43224 +a43225 = 43225 +a43226 = 43226 +a43227 = 43227 +a43228 = 43228 +a43229 = 43229 +a43230 = 43230 +a43231 = 43231 +a43232 = 43232 +a43233 = 43233 +a43234 = 43234 +a43235 = 43235 +a43236 = 43236 +a43237 = 43237 +a43238 = 43238 +a43239 = 43239 +a43240 = 43240 +a43241 = 43241 +a43242 = 43242 +a43243 = 43243 +a43244 = 43244 +a43245 = 43245 +a43246 = 43246 +a43247 = 43247 +a43248 = 43248 +a43249 = 43249 +a43250 = 43250 +a43251 = 43251 +a43252 = 43252 +a43253 = 43253 +a43254 = 43254 +a43255 = 43255 +a43256 = 43256 +a43257 = 43257 +a43258 = 43258 +a43259 = 43259 +a43260 = 43260 +a43261 = 43261 +a43262 = 43262 +a43263 = 43263 +a43264 = 43264 +a43265 = 43265 +a43266 = 43266 +a43267 = 43267 +a43268 = 43268 +a43269 = 43269 +a43270 = 43270 +a43271 = 43271 +a43272 = 43272 +a43273 = 43273 +a43274 = 43274 +a43275 = 43275 +a43276 = 43276 +a43277 = 43277 +a43278 = 43278 +a43279 = 43279 +a43280 = 43280 +a43281 = 43281 +a43282 = 43282 +a43283 = 43283 +a43284 = 43284 +a43285 = 43285 +a43286 = 43286 +a43287 = 43287 +a43288 = 43288 +a43289 = 43289 +a43290 = 43290 +a43291 = 43291 +a43292 = 43292 +a43293 = 43293 +a43294 = 43294 +a43295 = 43295 +a43296 = 43296 +a43297 = 43297 +a43298 = 43298 +a43299 = 43299 +a43300 = 43300 +a43301 = 43301 +a43302 = 43302 +a43303 = 43303 +a43304 = 43304 +a43305 = 43305 +a43306 = 43306 +a43307 = 43307 +a43308 = 43308 +a43309 = 43309 +a43310 = 43310 +a43311 = 43311 +a43312 = 43312 +a43313 = 43313 +a43314 = 43314 +a43315 = 43315 +a43316 = 43316 +a43317 = 43317 +a43318 = 43318 +a43319 = 43319 +a43320 = 43320 +a43321 = 43321 +a43322 = 43322 +a43323 = 43323 +a43324 = 43324 +a43325 = 43325 +a43326 = 43326 +a43327 = 43327 +a43328 = 43328 +a43329 = 43329 +a43330 = 43330 +a43331 = 43331 +a43332 = 43332 +a43333 = 43333 +a43334 = 43334 +a43335 = 43335 +a43336 = 43336 +a43337 = 43337 +a43338 = 43338 +a43339 = 43339 +a43340 = 43340 +a43341 = 43341 +a43342 = 43342 +a43343 = 43343 +a43344 = 43344 +a43345 = 43345 +a43346 = 43346 +a43347 = 43347 +a43348 = 43348 +a43349 = 43349 +a43350 = 43350 +a43351 = 43351 +a43352 = 43352 +a43353 = 43353 +a43354 = 43354 +a43355 = 43355 +a43356 = 43356 +a43357 = 43357 +a43358 = 43358 +a43359 = 43359 +a43360 = 43360 +a43361 = 43361 +a43362 = 43362 +a43363 = 43363 +a43364 = 43364 +a43365 = 43365 +a43366 = 43366 +a43367 = 43367 +a43368 = 43368 +a43369 = 43369 +a43370 = 43370 +a43371 = 43371 +a43372 = 43372 +a43373 = 43373 +a43374 = 43374 +a43375 = 43375 +a43376 = 43376 +a43377 = 43377 +a43378 = 43378 +a43379 = 43379 +a43380 = 43380 +a43381 = 43381 +a43382 = 43382 +a43383 = 43383 +a43384 = 43384 +a43385 = 43385 +a43386 = 43386 +a43387 = 43387 +a43388 = 43388 +a43389 = 43389 +a43390 = 43390 +a43391 = 43391 +a43392 = 43392 +a43393 = 43393 +a43394 = 43394 +a43395 = 43395 +a43396 = 43396 +a43397 = 43397 +a43398 = 43398 +a43399 = 43399 +a43400 = 43400 +a43401 = 43401 +a43402 = 43402 +a43403 = 43403 +a43404 = 43404 +a43405 = 43405 +a43406 = 43406 +a43407 = 43407 +a43408 = 43408 +a43409 = 43409 +a43410 = 43410 +a43411 = 43411 +a43412 = 43412 +a43413 = 43413 +a43414 = 43414 +a43415 = 43415 +a43416 = 43416 +a43417 = 43417 +a43418 = 43418 +a43419 = 43419 +a43420 = 43420 +a43421 = 43421 +a43422 = 43422 +a43423 = 43423 +a43424 = 43424 +a43425 = 43425 +a43426 = 43426 +a43427 = 43427 +a43428 = 43428 +a43429 = 43429 +a43430 = 43430 +a43431 = 43431 +a43432 = 43432 +a43433 = 43433 +a43434 = 43434 +a43435 = 43435 +a43436 = 43436 +a43437 = 43437 +a43438 = 43438 +a43439 = 43439 +a43440 = 43440 +a43441 = 43441 +a43442 = 43442 +a43443 = 43443 +a43444 = 43444 +a43445 = 43445 +a43446 = 43446 +a43447 = 43447 +a43448 = 43448 +a43449 = 43449 +a43450 = 43450 +a43451 = 43451 +a43452 = 43452 +a43453 = 43453 +a43454 = 43454 +a43455 = 43455 +a43456 = 43456 +a43457 = 43457 +a43458 = 43458 +a43459 = 43459 +a43460 = 43460 +a43461 = 43461 +a43462 = 43462 +a43463 = 43463 +a43464 = 43464 +a43465 = 43465 +a43466 = 43466 +a43467 = 43467 +a43468 = 43468 +a43469 = 43469 +a43470 = 43470 +a43471 = 43471 +a43472 = 43472 +a43473 = 43473 +a43474 = 43474 +a43475 = 43475 +a43476 = 43476 +a43477 = 43477 +a43478 = 43478 +a43479 = 43479 +a43480 = 43480 +a43481 = 43481 +a43482 = 43482 +a43483 = 43483 +a43484 = 43484 +a43485 = 43485 +a43486 = 43486 +a43487 = 43487 +a43488 = 43488 +a43489 = 43489 +a43490 = 43490 +a43491 = 43491 +a43492 = 43492 +a43493 = 43493 +a43494 = 43494 +a43495 = 43495 +a43496 = 43496 +a43497 = 43497 +a43498 = 43498 +a43499 = 43499 +a43500 = 43500 +a43501 = 43501 +a43502 = 43502 +a43503 = 43503 +a43504 = 43504 +a43505 = 43505 +a43506 = 43506 +a43507 = 43507 +a43508 = 43508 +a43509 = 43509 +a43510 = 43510 +a43511 = 43511 +a43512 = 43512 +a43513 = 43513 +a43514 = 43514 +a43515 = 43515 +a43516 = 43516 +a43517 = 43517 +a43518 = 43518 +a43519 = 43519 +a43520 = 43520 +a43521 = 43521 +a43522 = 43522 +a43523 = 43523 +a43524 = 43524 +a43525 = 43525 +a43526 = 43526 +a43527 = 43527 +a43528 = 43528 +a43529 = 43529 +a43530 = 43530 +a43531 = 43531 +a43532 = 43532 +a43533 = 43533 +a43534 = 43534 +a43535 = 43535 +a43536 = 43536 +a43537 = 43537 +a43538 = 43538 +a43539 = 43539 +a43540 = 43540 +a43541 = 43541 +a43542 = 43542 +a43543 = 43543 +a43544 = 43544 +a43545 = 43545 +a43546 = 43546 +a43547 = 43547 +a43548 = 43548 +a43549 = 43549 +a43550 = 43550 +a43551 = 43551 +a43552 = 43552 +a43553 = 43553 +a43554 = 43554 +a43555 = 43555 +a43556 = 43556 +a43557 = 43557 +a43558 = 43558 +a43559 = 43559 +a43560 = 43560 +a43561 = 43561 +a43562 = 43562 +a43563 = 43563 +a43564 = 43564 +a43565 = 43565 +a43566 = 43566 +a43567 = 43567 +a43568 = 43568 +a43569 = 43569 +a43570 = 43570 +a43571 = 43571 +a43572 = 43572 +a43573 = 43573 +a43574 = 43574 +a43575 = 43575 +a43576 = 43576 +a43577 = 43577 +a43578 = 43578 +a43579 = 43579 +a43580 = 43580 +a43581 = 43581 +a43582 = 43582 +a43583 = 43583 +a43584 = 43584 +a43585 = 43585 +a43586 = 43586 +a43587 = 43587 +a43588 = 43588 +a43589 = 43589 +a43590 = 43590 +a43591 = 43591 +a43592 = 43592 +a43593 = 43593 +a43594 = 43594 +a43595 = 43595 +a43596 = 43596 +a43597 = 43597 +a43598 = 43598 +a43599 = 43599 +a43600 = 43600 +a43601 = 43601 +a43602 = 43602 +a43603 = 43603 +a43604 = 43604 +a43605 = 43605 +a43606 = 43606 +a43607 = 43607 +a43608 = 43608 +a43609 = 43609 +a43610 = 43610 +a43611 = 43611 +a43612 = 43612 +a43613 = 43613 +a43614 = 43614 +a43615 = 43615 +a43616 = 43616 +a43617 = 43617 +a43618 = 43618 +a43619 = 43619 +a43620 = 43620 +a43621 = 43621 +a43622 = 43622 +a43623 = 43623 +a43624 = 43624 +a43625 = 43625 +a43626 = 43626 +a43627 = 43627 +a43628 = 43628 +a43629 = 43629 +a43630 = 43630 +a43631 = 43631 +a43632 = 43632 +a43633 = 43633 +a43634 = 43634 +a43635 = 43635 +a43636 = 43636 +a43637 = 43637 +a43638 = 43638 +a43639 = 43639 +a43640 = 43640 +a43641 = 43641 +a43642 = 43642 +a43643 = 43643 +a43644 = 43644 +a43645 = 43645 +a43646 = 43646 +a43647 = 43647 +a43648 = 43648 +a43649 = 43649 +a43650 = 43650 +a43651 = 43651 +a43652 = 43652 +a43653 = 43653 +a43654 = 43654 +a43655 = 43655 +a43656 = 43656 +a43657 = 43657 +a43658 = 43658 +a43659 = 43659 +a43660 = 43660 +a43661 = 43661 +a43662 = 43662 +a43663 = 43663 +a43664 = 43664 +a43665 = 43665 +a43666 = 43666 +a43667 = 43667 +a43668 = 43668 +a43669 = 43669 +a43670 = 43670 +a43671 = 43671 +a43672 = 43672 +a43673 = 43673 +a43674 = 43674 +a43675 = 43675 +a43676 = 43676 +a43677 = 43677 +a43678 = 43678 +a43679 = 43679 +a43680 = 43680 +a43681 = 43681 +a43682 = 43682 +a43683 = 43683 +a43684 = 43684 +a43685 = 43685 +a43686 = 43686 +a43687 = 43687 +a43688 = 43688 +a43689 = 43689 +a43690 = 43690 +a43691 = 43691 +a43692 = 43692 +a43693 = 43693 +a43694 = 43694 +a43695 = 43695 +a43696 = 43696 +a43697 = 43697 +a43698 = 43698 +a43699 = 43699 +a43700 = 43700 +a43701 = 43701 +a43702 = 43702 +a43703 = 43703 +a43704 = 43704 +a43705 = 43705 +a43706 = 43706 +a43707 = 43707 +a43708 = 43708 +a43709 = 43709 +a43710 = 43710 +a43711 = 43711 +a43712 = 43712 +a43713 = 43713 +a43714 = 43714 +a43715 = 43715 +a43716 = 43716 +a43717 = 43717 +a43718 = 43718 +a43719 = 43719 +a43720 = 43720 +a43721 = 43721 +a43722 = 43722 +a43723 = 43723 +a43724 = 43724 +a43725 = 43725 +a43726 = 43726 +a43727 = 43727 +a43728 = 43728 +a43729 = 43729 +a43730 = 43730 +a43731 = 43731 +a43732 = 43732 +a43733 = 43733 +a43734 = 43734 +a43735 = 43735 +a43736 = 43736 +a43737 = 43737 +a43738 = 43738 +a43739 = 43739 +a43740 = 43740 +a43741 = 43741 +a43742 = 43742 +a43743 = 43743 +a43744 = 43744 +a43745 = 43745 +a43746 = 43746 +a43747 = 43747 +a43748 = 43748 +a43749 = 43749 +a43750 = 43750 +a43751 = 43751 +a43752 = 43752 +a43753 = 43753 +a43754 = 43754 +a43755 = 43755 +a43756 = 43756 +a43757 = 43757 +a43758 = 43758 +a43759 = 43759 +a43760 = 43760 +a43761 = 43761 +a43762 = 43762 +a43763 = 43763 +a43764 = 43764 +a43765 = 43765 +a43766 = 43766 +a43767 = 43767 +a43768 = 43768 +a43769 = 43769 +a43770 = 43770 +a43771 = 43771 +a43772 = 43772 +a43773 = 43773 +a43774 = 43774 +a43775 = 43775 +a43776 = 43776 +a43777 = 43777 +a43778 = 43778 +a43779 = 43779 +a43780 = 43780 +a43781 = 43781 +a43782 = 43782 +a43783 = 43783 +a43784 = 43784 +a43785 = 43785 +a43786 = 43786 +a43787 = 43787 +a43788 = 43788 +a43789 = 43789 +a43790 = 43790 +a43791 = 43791 +a43792 = 43792 +a43793 = 43793 +a43794 = 43794 +a43795 = 43795 +a43796 = 43796 +a43797 = 43797 +a43798 = 43798 +a43799 = 43799 +a43800 = 43800 +a43801 = 43801 +a43802 = 43802 +a43803 = 43803 +a43804 = 43804 +a43805 = 43805 +a43806 = 43806 +a43807 = 43807 +a43808 = 43808 +a43809 = 43809 +a43810 = 43810 +a43811 = 43811 +a43812 = 43812 +a43813 = 43813 +a43814 = 43814 +a43815 = 43815 +a43816 = 43816 +a43817 = 43817 +a43818 = 43818 +a43819 = 43819 +a43820 = 43820 +a43821 = 43821 +a43822 = 43822 +a43823 = 43823 +a43824 = 43824 +a43825 = 43825 +a43826 = 43826 +a43827 = 43827 +a43828 = 43828 +a43829 = 43829 +a43830 = 43830 +a43831 = 43831 +a43832 = 43832 +a43833 = 43833 +a43834 = 43834 +a43835 = 43835 +a43836 = 43836 +a43837 = 43837 +a43838 = 43838 +a43839 = 43839 +a43840 = 43840 +a43841 = 43841 +a43842 = 43842 +a43843 = 43843 +a43844 = 43844 +a43845 = 43845 +a43846 = 43846 +a43847 = 43847 +a43848 = 43848 +a43849 = 43849 +a43850 = 43850 +a43851 = 43851 +a43852 = 43852 +a43853 = 43853 +a43854 = 43854 +a43855 = 43855 +a43856 = 43856 +a43857 = 43857 +a43858 = 43858 +a43859 = 43859 +a43860 = 43860 +a43861 = 43861 +a43862 = 43862 +a43863 = 43863 +a43864 = 43864 +a43865 = 43865 +a43866 = 43866 +a43867 = 43867 +a43868 = 43868 +a43869 = 43869 +a43870 = 43870 +a43871 = 43871 +a43872 = 43872 +a43873 = 43873 +a43874 = 43874 +a43875 = 43875 +a43876 = 43876 +a43877 = 43877 +a43878 = 43878 +a43879 = 43879 +a43880 = 43880 +a43881 = 43881 +a43882 = 43882 +a43883 = 43883 +a43884 = 43884 +a43885 = 43885 +a43886 = 43886 +a43887 = 43887 +a43888 = 43888 +a43889 = 43889 +a43890 = 43890 +a43891 = 43891 +a43892 = 43892 +a43893 = 43893 +a43894 = 43894 +a43895 = 43895 +a43896 = 43896 +a43897 = 43897 +a43898 = 43898 +a43899 = 43899 +a43900 = 43900 +a43901 = 43901 +a43902 = 43902 +a43903 = 43903 +a43904 = 43904 +a43905 = 43905 +a43906 = 43906 +a43907 = 43907 +a43908 = 43908 +a43909 = 43909 +a43910 = 43910 +a43911 = 43911 +a43912 = 43912 +a43913 = 43913 +a43914 = 43914 +a43915 = 43915 +a43916 = 43916 +a43917 = 43917 +a43918 = 43918 +a43919 = 43919 +a43920 = 43920 +a43921 = 43921 +a43922 = 43922 +a43923 = 43923 +a43924 = 43924 +a43925 = 43925 +a43926 = 43926 +a43927 = 43927 +a43928 = 43928 +a43929 = 43929 +a43930 = 43930 +a43931 = 43931 +a43932 = 43932 +a43933 = 43933 +a43934 = 43934 +a43935 = 43935 +a43936 = 43936 +a43937 = 43937 +a43938 = 43938 +a43939 = 43939 +a43940 = 43940 +a43941 = 43941 +a43942 = 43942 +a43943 = 43943 +a43944 = 43944 +a43945 = 43945 +a43946 = 43946 +a43947 = 43947 +a43948 = 43948 +a43949 = 43949 +a43950 = 43950 +a43951 = 43951 +a43952 = 43952 +a43953 = 43953 +a43954 = 43954 +a43955 = 43955 +a43956 = 43956 +a43957 = 43957 +a43958 = 43958 +a43959 = 43959 +a43960 = 43960 +a43961 = 43961 +a43962 = 43962 +a43963 = 43963 +a43964 = 43964 +a43965 = 43965 +a43966 = 43966 +a43967 = 43967 +a43968 = 43968 +a43969 = 43969 +a43970 = 43970 +a43971 = 43971 +a43972 = 43972 +a43973 = 43973 +a43974 = 43974 +a43975 = 43975 +a43976 = 43976 +a43977 = 43977 +a43978 = 43978 +a43979 = 43979 +a43980 = 43980 +a43981 = 43981 +a43982 = 43982 +a43983 = 43983 +a43984 = 43984 +a43985 = 43985 +a43986 = 43986 +a43987 = 43987 +a43988 = 43988 +a43989 = 43989 +a43990 = 43990 +a43991 = 43991 +a43992 = 43992 +a43993 = 43993 +a43994 = 43994 +a43995 = 43995 +a43996 = 43996 +a43997 = 43997 +a43998 = 43998 +a43999 = 43999 +a44000 = 44000 +a44001 = 44001 +a44002 = 44002 +a44003 = 44003 +a44004 = 44004 +a44005 = 44005 +a44006 = 44006 +a44007 = 44007 +a44008 = 44008 +a44009 = 44009 +a44010 = 44010 +a44011 = 44011 +a44012 = 44012 +a44013 = 44013 +a44014 = 44014 +a44015 = 44015 +a44016 = 44016 +a44017 = 44017 +a44018 = 44018 +a44019 = 44019 +a44020 = 44020 +a44021 = 44021 +a44022 = 44022 +a44023 = 44023 +a44024 = 44024 +a44025 = 44025 +a44026 = 44026 +a44027 = 44027 +a44028 = 44028 +a44029 = 44029 +a44030 = 44030 +a44031 = 44031 +a44032 = 44032 +a44033 = 44033 +a44034 = 44034 +a44035 = 44035 +a44036 = 44036 +a44037 = 44037 +a44038 = 44038 +a44039 = 44039 +a44040 = 44040 +a44041 = 44041 +a44042 = 44042 +a44043 = 44043 +a44044 = 44044 +a44045 = 44045 +a44046 = 44046 +a44047 = 44047 +a44048 = 44048 +a44049 = 44049 +a44050 = 44050 +a44051 = 44051 +a44052 = 44052 +a44053 = 44053 +a44054 = 44054 +a44055 = 44055 +a44056 = 44056 +a44057 = 44057 +a44058 = 44058 +a44059 = 44059 +a44060 = 44060 +a44061 = 44061 +a44062 = 44062 +a44063 = 44063 +a44064 = 44064 +a44065 = 44065 +a44066 = 44066 +a44067 = 44067 +a44068 = 44068 +a44069 = 44069 +a44070 = 44070 +a44071 = 44071 +a44072 = 44072 +a44073 = 44073 +a44074 = 44074 +a44075 = 44075 +a44076 = 44076 +a44077 = 44077 +a44078 = 44078 +a44079 = 44079 +a44080 = 44080 +a44081 = 44081 +a44082 = 44082 +a44083 = 44083 +a44084 = 44084 +a44085 = 44085 +a44086 = 44086 +a44087 = 44087 +a44088 = 44088 +a44089 = 44089 +a44090 = 44090 +a44091 = 44091 +a44092 = 44092 +a44093 = 44093 +a44094 = 44094 +a44095 = 44095 +a44096 = 44096 +a44097 = 44097 +a44098 = 44098 +a44099 = 44099 +a44100 = 44100 +a44101 = 44101 +a44102 = 44102 +a44103 = 44103 +a44104 = 44104 +a44105 = 44105 +a44106 = 44106 +a44107 = 44107 +a44108 = 44108 +a44109 = 44109 +a44110 = 44110 +a44111 = 44111 +a44112 = 44112 +a44113 = 44113 +a44114 = 44114 +a44115 = 44115 +a44116 = 44116 +a44117 = 44117 +a44118 = 44118 +a44119 = 44119 +a44120 = 44120 +a44121 = 44121 +a44122 = 44122 +a44123 = 44123 +a44124 = 44124 +a44125 = 44125 +a44126 = 44126 +a44127 = 44127 +a44128 = 44128 +a44129 = 44129 +a44130 = 44130 +a44131 = 44131 +a44132 = 44132 +a44133 = 44133 +a44134 = 44134 +a44135 = 44135 +a44136 = 44136 +a44137 = 44137 +a44138 = 44138 +a44139 = 44139 +a44140 = 44140 +a44141 = 44141 +a44142 = 44142 +a44143 = 44143 +a44144 = 44144 +a44145 = 44145 +a44146 = 44146 +a44147 = 44147 +a44148 = 44148 +a44149 = 44149 +a44150 = 44150 +a44151 = 44151 +a44152 = 44152 +a44153 = 44153 +a44154 = 44154 +a44155 = 44155 +a44156 = 44156 +a44157 = 44157 +a44158 = 44158 +a44159 = 44159 +a44160 = 44160 +a44161 = 44161 +a44162 = 44162 +a44163 = 44163 +a44164 = 44164 +a44165 = 44165 +a44166 = 44166 +a44167 = 44167 +a44168 = 44168 +a44169 = 44169 +a44170 = 44170 +a44171 = 44171 +a44172 = 44172 +a44173 = 44173 +a44174 = 44174 +a44175 = 44175 +a44176 = 44176 +a44177 = 44177 +a44178 = 44178 +a44179 = 44179 +a44180 = 44180 +a44181 = 44181 +a44182 = 44182 +a44183 = 44183 +a44184 = 44184 +a44185 = 44185 +a44186 = 44186 +a44187 = 44187 +a44188 = 44188 +a44189 = 44189 +a44190 = 44190 +a44191 = 44191 +a44192 = 44192 +a44193 = 44193 +a44194 = 44194 +a44195 = 44195 +a44196 = 44196 +a44197 = 44197 +a44198 = 44198 +a44199 = 44199 +a44200 = 44200 +a44201 = 44201 +a44202 = 44202 +a44203 = 44203 +a44204 = 44204 +a44205 = 44205 +a44206 = 44206 +a44207 = 44207 +a44208 = 44208 +a44209 = 44209 +a44210 = 44210 +a44211 = 44211 +a44212 = 44212 +a44213 = 44213 +a44214 = 44214 +a44215 = 44215 +a44216 = 44216 +a44217 = 44217 +a44218 = 44218 +a44219 = 44219 +a44220 = 44220 +a44221 = 44221 +a44222 = 44222 +a44223 = 44223 +a44224 = 44224 +a44225 = 44225 +a44226 = 44226 +a44227 = 44227 +a44228 = 44228 +a44229 = 44229 +a44230 = 44230 +a44231 = 44231 +a44232 = 44232 +a44233 = 44233 +a44234 = 44234 +a44235 = 44235 +a44236 = 44236 +a44237 = 44237 +a44238 = 44238 +a44239 = 44239 +a44240 = 44240 +a44241 = 44241 +a44242 = 44242 +a44243 = 44243 +a44244 = 44244 +a44245 = 44245 +a44246 = 44246 +a44247 = 44247 +a44248 = 44248 +a44249 = 44249 +a44250 = 44250 +a44251 = 44251 +a44252 = 44252 +a44253 = 44253 +a44254 = 44254 +a44255 = 44255 +a44256 = 44256 +a44257 = 44257 +a44258 = 44258 +a44259 = 44259 +a44260 = 44260 +a44261 = 44261 +a44262 = 44262 +a44263 = 44263 +a44264 = 44264 +a44265 = 44265 +a44266 = 44266 +a44267 = 44267 +a44268 = 44268 +a44269 = 44269 +a44270 = 44270 +a44271 = 44271 +a44272 = 44272 +a44273 = 44273 +a44274 = 44274 +a44275 = 44275 +a44276 = 44276 +a44277 = 44277 +a44278 = 44278 +a44279 = 44279 +a44280 = 44280 +a44281 = 44281 +a44282 = 44282 +a44283 = 44283 +a44284 = 44284 +a44285 = 44285 +a44286 = 44286 +a44287 = 44287 +a44288 = 44288 +a44289 = 44289 +a44290 = 44290 +a44291 = 44291 +a44292 = 44292 +a44293 = 44293 +a44294 = 44294 +a44295 = 44295 +a44296 = 44296 +a44297 = 44297 +a44298 = 44298 +a44299 = 44299 +a44300 = 44300 +a44301 = 44301 +a44302 = 44302 +a44303 = 44303 +a44304 = 44304 +a44305 = 44305 +a44306 = 44306 +a44307 = 44307 +a44308 = 44308 +a44309 = 44309 +a44310 = 44310 +a44311 = 44311 +a44312 = 44312 +a44313 = 44313 +a44314 = 44314 +a44315 = 44315 +a44316 = 44316 +a44317 = 44317 +a44318 = 44318 +a44319 = 44319 +a44320 = 44320 +a44321 = 44321 +a44322 = 44322 +a44323 = 44323 +a44324 = 44324 +a44325 = 44325 +a44326 = 44326 +a44327 = 44327 +a44328 = 44328 +a44329 = 44329 +a44330 = 44330 +a44331 = 44331 +a44332 = 44332 +a44333 = 44333 +a44334 = 44334 +a44335 = 44335 +a44336 = 44336 +a44337 = 44337 +a44338 = 44338 +a44339 = 44339 +a44340 = 44340 +a44341 = 44341 +a44342 = 44342 +a44343 = 44343 +a44344 = 44344 +a44345 = 44345 +a44346 = 44346 +a44347 = 44347 +a44348 = 44348 +a44349 = 44349 +a44350 = 44350 +a44351 = 44351 +a44352 = 44352 +a44353 = 44353 +a44354 = 44354 +a44355 = 44355 +a44356 = 44356 +a44357 = 44357 +a44358 = 44358 +a44359 = 44359 +a44360 = 44360 +a44361 = 44361 +a44362 = 44362 +a44363 = 44363 +a44364 = 44364 +a44365 = 44365 +a44366 = 44366 +a44367 = 44367 +a44368 = 44368 +a44369 = 44369 +a44370 = 44370 +a44371 = 44371 +a44372 = 44372 +a44373 = 44373 +a44374 = 44374 +a44375 = 44375 +a44376 = 44376 +a44377 = 44377 +a44378 = 44378 +a44379 = 44379 +a44380 = 44380 +a44381 = 44381 +a44382 = 44382 +a44383 = 44383 +a44384 = 44384 +a44385 = 44385 +a44386 = 44386 +a44387 = 44387 +a44388 = 44388 +a44389 = 44389 +a44390 = 44390 +a44391 = 44391 +a44392 = 44392 +a44393 = 44393 +a44394 = 44394 +a44395 = 44395 +a44396 = 44396 +a44397 = 44397 +a44398 = 44398 +a44399 = 44399 +a44400 = 44400 +a44401 = 44401 +a44402 = 44402 +a44403 = 44403 +a44404 = 44404 +a44405 = 44405 +a44406 = 44406 +a44407 = 44407 +a44408 = 44408 +a44409 = 44409 +a44410 = 44410 +a44411 = 44411 +a44412 = 44412 +a44413 = 44413 +a44414 = 44414 +a44415 = 44415 +a44416 = 44416 +a44417 = 44417 +a44418 = 44418 +a44419 = 44419 +a44420 = 44420 +a44421 = 44421 +a44422 = 44422 +a44423 = 44423 +a44424 = 44424 +a44425 = 44425 +a44426 = 44426 +a44427 = 44427 +a44428 = 44428 +a44429 = 44429 +a44430 = 44430 +a44431 = 44431 +a44432 = 44432 +a44433 = 44433 +a44434 = 44434 +a44435 = 44435 +a44436 = 44436 +a44437 = 44437 +a44438 = 44438 +a44439 = 44439 +a44440 = 44440 +a44441 = 44441 +a44442 = 44442 +a44443 = 44443 +a44444 = 44444 +a44445 = 44445 +a44446 = 44446 +a44447 = 44447 +a44448 = 44448 +a44449 = 44449 +a44450 = 44450 +a44451 = 44451 +a44452 = 44452 +a44453 = 44453 +a44454 = 44454 +a44455 = 44455 +a44456 = 44456 +a44457 = 44457 +a44458 = 44458 +a44459 = 44459 +a44460 = 44460 +a44461 = 44461 +a44462 = 44462 +a44463 = 44463 +a44464 = 44464 +a44465 = 44465 +a44466 = 44466 +a44467 = 44467 +a44468 = 44468 +a44469 = 44469 +a44470 = 44470 +a44471 = 44471 +a44472 = 44472 +a44473 = 44473 +a44474 = 44474 +a44475 = 44475 +a44476 = 44476 +a44477 = 44477 +a44478 = 44478 +a44479 = 44479 +a44480 = 44480 +a44481 = 44481 +a44482 = 44482 +a44483 = 44483 +a44484 = 44484 +a44485 = 44485 +a44486 = 44486 +a44487 = 44487 +a44488 = 44488 +a44489 = 44489 +a44490 = 44490 +a44491 = 44491 +a44492 = 44492 +a44493 = 44493 +a44494 = 44494 +a44495 = 44495 +a44496 = 44496 +a44497 = 44497 +a44498 = 44498 +a44499 = 44499 +a44500 = 44500 +a44501 = 44501 +a44502 = 44502 +a44503 = 44503 +a44504 = 44504 +a44505 = 44505 +a44506 = 44506 +a44507 = 44507 +a44508 = 44508 +a44509 = 44509 +a44510 = 44510 +a44511 = 44511 +a44512 = 44512 +a44513 = 44513 +a44514 = 44514 +a44515 = 44515 +a44516 = 44516 +a44517 = 44517 +a44518 = 44518 +a44519 = 44519 +a44520 = 44520 +a44521 = 44521 +a44522 = 44522 +a44523 = 44523 +a44524 = 44524 +a44525 = 44525 +a44526 = 44526 +a44527 = 44527 +a44528 = 44528 +a44529 = 44529 +a44530 = 44530 +a44531 = 44531 +a44532 = 44532 +a44533 = 44533 +a44534 = 44534 +a44535 = 44535 +a44536 = 44536 +a44537 = 44537 +a44538 = 44538 +a44539 = 44539 +a44540 = 44540 +a44541 = 44541 +a44542 = 44542 +a44543 = 44543 +a44544 = 44544 +a44545 = 44545 +a44546 = 44546 +a44547 = 44547 +a44548 = 44548 +a44549 = 44549 +a44550 = 44550 +a44551 = 44551 +a44552 = 44552 +a44553 = 44553 +a44554 = 44554 +a44555 = 44555 +a44556 = 44556 +a44557 = 44557 +a44558 = 44558 +a44559 = 44559 +a44560 = 44560 +a44561 = 44561 +a44562 = 44562 +a44563 = 44563 +a44564 = 44564 +a44565 = 44565 +a44566 = 44566 +a44567 = 44567 +a44568 = 44568 +a44569 = 44569 +a44570 = 44570 +a44571 = 44571 +a44572 = 44572 +a44573 = 44573 +a44574 = 44574 +a44575 = 44575 +a44576 = 44576 +a44577 = 44577 +a44578 = 44578 +a44579 = 44579 +a44580 = 44580 +a44581 = 44581 +a44582 = 44582 +a44583 = 44583 +a44584 = 44584 +a44585 = 44585 +a44586 = 44586 +a44587 = 44587 +a44588 = 44588 +a44589 = 44589 +a44590 = 44590 +a44591 = 44591 +a44592 = 44592 +a44593 = 44593 +a44594 = 44594 +a44595 = 44595 +a44596 = 44596 +a44597 = 44597 +a44598 = 44598 +a44599 = 44599 +a44600 = 44600 +a44601 = 44601 +a44602 = 44602 +a44603 = 44603 +a44604 = 44604 +a44605 = 44605 +a44606 = 44606 +a44607 = 44607 +a44608 = 44608 +a44609 = 44609 +a44610 = 44610 +a44611 = 44611 +a44612 = 44612 +a44613 = 44613 +a44614 = 44614 +a44615 = 44615 +a44616 = 44616 +a44617 = 44617 +a44618 = 44618 +a44619 = 44619 +a44620 = 44620 +a44621 = 44621 +a44622 = 44622 +a44623 = 44623 +a44624 = 44624 +a44625 = 44625 +a44626 = 44626 +a44627 = 44627 +a44628 = 44628 +a44629 = 44629 +a44630 = 44630 +a44631 = 44631 +a44632 = 44632 +a44633 = 44633 +a44634 = 44634 +a44635 = 44635 +a44636 = 44636 +a44637 = 44637 +a44638 = 44638 +a44639 = 44639 +a44640 = 44640 +a44641 = 44641 +a44642 = 44642 +a44643 = 44643 +a44644 = 44644 +a44645 = 44645 +a44646 = 44646 +a44647 = 44647 +a44648 = 44648 +a44649 = 44649 +a44650 = 44650 +a44651 = 44651 +a44652 = 44652 +a44653 = 44653 +a44654 = 44654 +a44655 = 44655 +a44656 = 44656 +a44657 = 44657 +a44658 = 44658 +a44659 = 44659 +a44660 = 44660 +a44661 = 44661 +a44662 = 44662 +a44663 = 44663 +a44664 = 44664 +a44665 = 44665 +a44666 = 44666 +a44667 = 44667 +a44668 = 44668 +a44669 = 44669 +a44670 = 44670 +a44671 = 44671 +a44672 = 44672 +a44673 = 44673 +a44674 = 44674 +a44675 = 44675 +a44676 = 44676 +a44677 = 44677 +a44678 = 44678 +a44679 = 44679 +a44680 = 44680 +a44681 = 44681 +a44682 = 44682 +a44683 = 44683 +a44684 = 44684 +a44685 = 44685 +a44686 = 44686 +a44687 = 44687 +a44688 = 44688 +a44689 = 44689 +a44690 = 44690 +a44691 = 44691 +a44692 = 44692 +a44693 = 44693 +a44694 = 44694 +a44695 = 44695 +a44696 = 44696 +a44697 = 44697 +a44698 = 44698 +a44699 = 44699 +a44700 = 44700 +a44701 = 44701 +a44702 = 44702 +a44703 = 44703 +a44704 = 44704 +a44705 = 44705 +a44706 = 44706 +a44707 = 44707 +a44708 = 44708 +a44709 = 44709 +a44710 = 44710 +a44711 = 44711 +a44712 = 44712 +a44713 = 44713 +a44714 = 44714 +a44715 = 44715 +a44716 = 44716 +a44717 = 44717 +a44718 = 44718 +a44719 = 44719 +a44720 = 44720 +a44721 = 44721 +a44722 = 44722 +a44723 = 44723 +a44724 = 44724 +a44725 = 44725 +a44726 = 44726 +a44727 = 44727 +a44728 = 44728 +a44729 = 44729 +a44730 = 44730 +a44731 = 44731 +a44732 = 44732 +a44733 = 44733 +a44734 = 44734 +a44735 = 44735 +a44736 = 44736 +a44737 = 44737 +a44738 = 44738 +a44739 = 44739 +a44740 = 44740 +a44741 = 44741 +a44742 = 44742 +a44743 = 44743 +a44744 = 44744 +a44745 = 44745 +a44746 = 44746 +a44747 = 44747 +a44748 = 44748 +a44749 = 44749 +a44750 = 44750 +a44751 = 44751 +a44752 = 44752 +a44753 = 44753 +a44754 = 44754 +a44755 = 44755 +a44756 = 44756 +a44757 = 44757 +a44758 = 44758 +a44759 = 44759 +a44760 = 44760 +a44761 = 44761 +a44762 = 44762 +a44763 = 44763 +a44764 = 44764 +a44765 = 44765 +a44766 = 44766 +a44767 = 44767 +a44768 = 44768 +a44769 = 44769 +a44770 = 44770 +a44771 = 44771 +a44772 = 44772 +a44773 = 44773 +a44774 = 44774 +a44775 = 44775 +a44776 = 44776 +a44777 = 44777 +a44778 = 44778 +a44779 = 44779 +a44780 = 44780 +a44781 = 44781 +a44782 = 44782 +a44783 = 44783 +a44784 = 44784 +a44785 = 44785 +a44786 = 44786 +a44787 = 44787 +a44788 = 44788 +a44789 = 44789 +a44790 = 44790 +a44791 = 44791 +a44792 = 44792 +a44793 = 44793 +a44794 = 44794 +a44795 = 44795 +a44796 = 44796 +a44797 = 44797 +a44798 = 44798 +a44799 = 44799 +a44800 = 44800 +a44801 = 44801 +a44802 = 44802 +a44803 = 44803 +a44804 = 44804 +a44805 = 44805 +a44806 = 44806 +a44807 = 44807 +a44808 = 44808 +a44809 = 44809 +a44810 = 44810 +a44811 = 44811 +a44812 = 44812 +a44813 = 44813 +a44814 = 44814 +a44815 = 44815 +a44816 = 44816 +a44817 = 44817 +a44818 = 44818 +a44819 = 44819 +a44820 = 44820 +a44821 = 44821 +a44822 = 44822 +a44823 = 44823 +a44824 = 44824 +a44825 = 44825 +a44826 = 44826 +a44827 = 44827 +a44828 = 44828 +a44829 = 44829 +a44830 = 44830 +a44831 = 44831 +a44832 = 44832 +a44833 = 44833 +a44834 = 44834 +a44835 = 44835 +a44836 = 44836 +a44837 = 44837 +a44838 = 44838 +a44839 = 44839 +a44840 = 44840 +a44841 = 44841 +a44842 = 44842 +a44843 = 44843 +a44844 = 44844 +a44845 = 44845 +a44846 = 44846 +a44847 = 44847 +a44848 = 44848 +a44849 = 44849 +a44850 = 44850 +a44851 = 44851 +a44852 = 44852 +a44853 = 44853 +a44854 = 44854 +a44855 = 44855 +a44856 = 44856 +a44857 = 44857 +a44858 = 44858 +a44859 = 44859 +a44860 = 44860 +a44861 = 44861 +a44862 = 44862 +a44863 = 44863 +a44864 = 44864 +a44865 = 44865 +a44866 = 44866 +a44867 = 44867 +a44868 = 44868 +a44869 = 44869 +a44870 = 44870 +a44871 = 44871 +a44872 = 44872 +a44873 = 44873 +a44874 = 44874 +a44875 = 44875 +a44876 = 44876 +a44877 = 44877 +a44878 = 44878 +a44879 = 44879 +a44880 = 44880 +a44881 = 44881 +a44882 = 44882 +a44883 = 44883 +a44884 = 44884 +a44885 = 44885 +a44886 = 44886 +a44887 = 44887 +a44888 = 44888 +a44889 = 44889 +a44890 = 44890 +a44891 = 44891 +a44892 = 44892 +a44893 = 44893 +a44894 = 44894 +a44895 = 44895 +a44896 = 44896 +a44897 = 44897 +a44898 = 44898 +a44899 = 44899 +a44900 = 44900 +a44901 = 44901 +a44902 = 44902 +a44903 = 44903 +a44904 = 44904 +a44905 = 44905 +a44906 = 44906 +a44907 = 44907 +a44908 = 44908 +a44909 = 44909 +a44910 = 44910 +a44911 = 44911 +a44912 = 44912 +a44913 = 44913 +a44914 = 44914 +a44915 = 44915 +a44916 = 44916 +a44917 = 44917 +a44918 = 44918 +a44919 = 44919 +a44920 = 44920 +a44921 = 44921 +a44922 = 44922 +a44923 = 44923 +a44924 = 44924 +a44925 = 44925 +a44926 = 44926 +a44927 = 44927 +a44928 = 44928 +a44929 = 44929 +a44930 = 44930 +a44931 = 44931 +a44932 = 44932 +a44933 = 44933 +a44934 = 44934 +a44935 = 44935 +a44936 = 44936 +a44937 = 44937 +a44938 = 44938 +a44939 = 44939 +a44940 = 44940 +a44941 = 44941 +a44942 = 44942 +a44943 = 44943 +a44944 = 44944 +a44945 = 44945 +a44946 = 44946 +a44947 = 44947 +a44948 = 44948 +a44949 = 44949 +a44950 = 44950 +a44951 = 44951 +a44952 = 44952 +a44953 = 44953 +a44954 = 44954 +a44955 = 44955 +a44956 = 44956 +a44957 = 44957 +a44958 = 44958 +a44959 = 44959 +a44960 = 44960 +a44961 = 44961 +a44962 = 44962 +a44963 = 44963 +a44964 = 44964 +a44965 = 44965 +a44966 = 44966 +a44967 = 44967 +a44968 = 44968 +a44969 = 44969 +a44970 = 44970 +a44971 = 44971 +a44972 = 44972 +a44973 = 44973 +a44974 = 44974 +a44975 = 44975 +a44976 = 44976 +a44977 = 44977 +a44978 = 44978 +a44979 = 44979 +a44980 = 44980 +a44981 = 44981 +a44982 = 44982 +a44983 = 44983 +a44984 = 44984 +a44985 = 44985 +a44986 = 44986 +a44987 = 44987 +a44988 = 44988 +a44989 = 44989 +a44990 = 44990 +a44991 = 44991 +a44992 = 44992 +a44993 = 44993 +a44994 = 44994 +a44995 = 44995 +a44996 = 44996 +a44997 = 44997 +a44998 = 44998 +a44999 = 44999 +a45000 = 45000 +a45001 = 45001 +a45002 = 45002 +a45003 = 45003 +a45004 = 45004 +a45005 = 45005 +a45006 = 45006 +a45007 = 45007 +a45008 = 45008 +a45009 = 45009 +a45010 = 45010 +a45011 = 45011 +a45012 = 45012 +a45013 = 45013 +a45014 = 45014 +a45015 = 45015 +a45016 = 45016 +a45017 = 45017 +a45018 = 45018 +a45019 = 45019 +a45020 = 45020 +a45021 = 45021 +a45022 = 45022 +a45023 = 45023 +a45024 = 45024 +a45025 = 45025 +a45026 = 45026 +a45027 = 45027 +a45028 = 45028 +a45029 = 45029 +a45030 = 45030 +a45031 = 45031 +a45032 = 45032 +a45033 = 45033 +a45034 = 45034 +a45035 = 45035 +a45036 = 45036 +a45037 = 45037 +a45038 = 45038 +a45039 = 45039 +a45040 = 45040 +a45041 = 45041 +a45042 = 45042 +a45043 = 45043 +a45044 = 45044 +a45045 = 45045 +a45046 = 45046 +a45047 = 45047 +a45048 = 45048 +a45049 = 45049 +a45050 = 45050 +a45051 = 45051 +a45052 = 45052 +a45053 = 45053 +a45054 = 45054 +a45055 = 45055 +a45056 = 45056 +a45057 = 45057 +a45058 = 45058 +a45059 = 45059 +a45060 = 45060 +a45061 = 45061 +a45062 = 45062 +a45063 = 45063 +a45064 = 45064 +a45065 = 45065 +a45066 = 45066 +a45067 = 45067 +a45068 = 45068 +a45069 = 45069 +a45070 = 45070 +a45071 = 45071 +a45072 = 45072 +a45073 = 45073 +a45074 = 45074 +a45075 = 45075 +a45076 = 45076 +a45077 = 45077 +a45078 = 45078 +a45079 = 45079 +a45080 = 45080 +a45081 = 45081 +a45082 = 45082 +a45083 = 45083 +a45084 = 45084 +a45085 = 45085 +a45086 = 45086 +a45087 = 45087 +a45088 = 45088 +a45089 = 45089 +a45090 = 45090 +a45091 = 45091 +a45092 = 45092 +a45093 = 45093 +a45094 = 45094 +a45095 = 45095 +a45096 = 45096 +a45097 = 45097 +a45098 = 45098 +a45099 = 45099 +a45100 = 45100 +a45101 = 45101 +a45102 = 45102 +a45103 = 45103 +a45104 = 45104 +a45105 = 45105 +a45106 = 45106 +a45107 = 45107 +a45108 = 45108 +a45109 = 45109 +a45110 = 45110 +a45111 = 45111 +a45112 = 45112 +a45113 = 45113 +a45114 = 45114 +a45115 = 45115 +a45116 = 45116 +a45117 = 45117 +a45118 = 45118 +a45119 = 45119 +a45120 = 45120 +a45121 = 45121 +a45122 = 45122 +a45123 = 45123 +a45124 = 45124 +a45125 = 45125 +a45126 = 45126 +a45127 = 45127 +a45128 = 45128 +a45129 = 45129 +a45130 = 45130 +a45131 = 45131 +a45132 = 45132 +a45133 = 45133 +a45134 = 45134 +a45135 = 45135 +a45136 = 45136 +a45137 = 45137 +a45138 = 45138 +a45139 = 45139 +a45140 = 45140 +a45141 = 45141 +a45142 = 45142 +a45143 = 45143 +a45144 = 45144 +a45145 = 45145 +a45146 = 45146 +a45147 = 45147 +a45148 = 45148 +a45149 = 45149 +a45150 = 45150 +a45151 = 45151 +a45152 = 45152 +a45153 = 45153 +a45154 = 45154 +a45155 = 45155 +a45156 = 45156 +a45157 = 45157 +a45158 = 45158 +a45159 = 45159 +a45160 = 45160 +a45161 = 45161 +a45162 = 45162 +a45163 = 45163 +a45164 = 45164 +a45165 = 45165 +a45166 = 45166 +a45167 = 45167 +a45168 = 45168 +a45169 = 45169 +a45170 = 45170 +a45171 = 45171 +a45172 = 45172 +a45173 = 45173 +a45174 = 45174 +a45175 = 45175 +a45176 = 45176 +a45177 = 45177 +a45178 = 45178 +a45179 = 45179 +a45180 = 45180 +a45181 = 45181 +a45182 = 45182 +a45183 = 45183 +a45184 = 45184 +a45185 = 45185 +a45186 = 45186 +a45187 = 45187 +a45188 = 45188 +a45189 = 45189 +a45190 = 45190 +a45191 = 45191 +a45192 = 45192 +a45193 = 45193 +a45194 = 45194 +a45195 = 45195 +a45196 = 45196 +a45197 = 45197 +a45198 = 45198 +a45199 = 45199 +a45200 = 45200 +a45201 = 45201 +a45202 = 45202 +a45203 = 45203 +a45204 = 45204 +a45205 = 45205 +a45206 = 45206 +a45207 = 45207 +a45208 = 45208 +a45209 = 45209 +a45210 = 45210 +a45211 = 45211 +a45212 = 45212 +a45213 = 45213 +a45214 = 45214 +a45215 = 45215 +a45216 = 45216 +a45217 = 45217 +a45218 = 45218 +a45219 = 45219 +a45220 = 45220 +a45221 = 45221 +a45222 = 45222 +a45223 = 45223 +a45224 = 45224 +a45225 = 45225 +a45226 = 45226 +a45227 = 45227 +a45228 = 45228 +a45229 = 45229 +a45230 = 45230 +a45231 = 45231 +a45232 = 45232 +a45233 = 45233 +a45234 = 45234 +a45235 = 45235 +a45236 = 45236 +a45237 = 45237 +a45238 = 45238 +a45239 = 45239 +a45240 = 45240 +a45241 = 45241 +a45242 = 45242 +a45243 = 45243 +a45244 = 45244 +a45245 = 45245 +a45246 = 45246 +a45247 = 45247 +a45248 = 45248 +a45249 = 45249 +a45250 = 45250 +a45251 = 45251 +a45252 = 45252 +a45253 = 45253 +a45254 = 45254 +a45255 = 45255 +a45256 = 45256 +a45257 = 45257 +a45258 = 45258 +a45259 = 45259 +a45260 = 45260 +a45261 = 45261 +a45262 = 45262 +a45263 = 45263 +a45264 = 45264 +a45265 = 45265 +a45266 = 45266 +a45267 = 45267 +a45268 = 45268 +a45269 = 45269 +a45270 = 45270 +a45271 = 45271 +a45272 = 45272 +a45273 = 45273 +a45274 = 45274 +a45275 = 45275 +a45276 = 45276 +a45277 = 45277 +a45278 = 45278 +a45279 = 45279 +a45280 = 45280 +a45281 = 45281 +a45282 = 45282 +a45283 = 45283 +a45284 = 45284 +a45285 = 45285 +a45286 = 45286 +a45287 = 45287 +a45288 = 45288 +a45289 = 45289 +a45290 = 45290 +a45291 = 45291 +a45292 = 45292 +a45293 = 45293 +a45294 = 45294 +a45295 = 45295 +a45296 = 45296 +a45297 = 45297 +a45298 = 45298 +a45299 = 45299 +a45300 = 45300 +a45301 = 45301 +a45302 = 45302 +a45303 = 45303 +a45304 = 45304 +a45305 = 45305 +a45306 = 45306 +a45307 = 45307 +a45308 = 45308 +a45309 = 45309 +a45310 = 45310 +a45311 = 45311 +a45312 = 45312 +a45313 = 45313 +a45314 = 45314 +a45315 = 45315 +a45316 = 45316 +a45317 = 45317 +a45318 = 45318 +a45319 = 45319 +a45320 = 45320 +a45321 = 45321 +a45322 = 45322 +a45323 = 45323 +a45324 = 45324 +a45325 = 45325 +a45326 = 45326 +a45327 = 45327 +a45328 = 45328 +a45329 = 45329 +a45330 = 45330 +a45331 = 45331 +a45332 = 45332 +a45333 = 45333 +a45334 = 45334 +a45335 = 45335 +a45336 = 45336 +a45337 = 45337 +a45338 = 45338 +a45339 = 45339 +a45340 = 45340 +a45341 = 45341 +a45342 = 45342 +a45343 = 45343 +a45344 = 45344 +a45345 = 45345 +a45346 = 45346 +a45347 = 45347 +a45348 = 45348 +a45349 = 45349 +a45350 = 45350 +a45351 = 45351 +a45352 = 45352 +a45353 = 45353 +a45354 = 45354 +a45355 = 45355 +a45356 = 45356 +a45357 = 45357 +a45358 = 45358 +a45359 = 45359 +a45360 = 45360 +a45361 = 45361 +a45362 = 45362 +a45363 = 45363 +a45364 = 45364 +a45365 = 45365 +a45366 = 45366 +a45367 = 45367 +a45368 = 45368 +a45369 = 45369 +a45370 = 45370 +a45371 = 45371 +a45372 = 45372 +a45373 = 45373 +a45374 = 45374 +a45375 = 45375 +a45376 = 45376 +a45377 = 45377 +a45378 = 45378 +a45379 = 45379 +a45380 = 45380 +a45381 = 45381 +a45382 = 45382 +a45383 = 45383 +a45384 = 45384 +a45385 = 45385 +a45386 = 45386 +a45387 = 45387 +a45388 = 45388 +a45389 = 45389 +a45390 = 45390 +a45391 = 45391 +a45392 = 45392 +a45393 = 45393 +a45394 = 45394 +a45395 = 45395 +a45396 = 45396 +a45397 = 45397 +a45398 = 45398 +a45399 = 45399 +a45400 = 45400 +a45401 = 45401 +a45402 = 45402 +a45403 = 45403 +a45404 = 45404 +a45405 = 45405 +a45406 = 45406 +a45407 = 45407 +a45408 = 45408 +a45409 = 45409 +a45410 = 45410 +a45411 = 45411 +a45412 = 45412 +a45413 = 45413 +a45414 = 45414 +a45415 = 45415 +a45416 = 45416 +a45417 = 45417 +a45418 = 45418 +a45419 = 45419 +a45420 = 45420 +a45421 = 45421 +a45422 = 45422 +a45423 = 45423 +a45424 = 45424 +a45425 = 45425 +a45426 = 45426 +a45427 = 45427 +a45428 = 45428 +a45429 = 45429 +a45430 = 45430 +a45431 = 45431 +a45432 = 45432 +a45433 = 45433 +a45434 = 45434 +a45435 = 45435 +a45436 = 45436 +a45437 = 45437 +a45438 = 45438 +a45439 = 45439 +a45440 = 45440 +a45441 = 45441 +a45442 = 45442 +a45443 = 45443 +a45444 = 45444 +a45445 = 45445 +a45446 = 45446 +a45447 = 45447 +a45448 = 45448 +a45449 = 45449 +a45450 = 45450 +a45451 = 45451 +a45452 = 45452 +a45453 = 45453 +a45454 = 45454 +a45455 = 45455 +a45456 = 45456 +a45457 = 45457 +a45458 = 45458 +a45459 = 45459 +a45460 = 45460 +a45461 = 45461 +a45462 = 45462 +a45463 = 45463 +a45464 = 45464 +a45465 = 45465 +a45466 = 45466 +a45467 = 45467 +a45468 = 45468 +a45469 = 45469 +a45470 = 45470 +a45471 = 45471 +a45472 = 45472 +a45473 = 45473 +a45474 = 45474 +a45475 = 45475 +a45476 = 45476 +a45477 = 45477 +a45478 = 45478 +a45479 = 45479 +a45480 = 45480 +a45481 = 45481 +a45482 = 45482 +a45483 = 45483 +a45484 = 45484 +a45485 = 45485 +a45486 = 45486 +a45487 = 45487 +a45488 = 45488 +a45489 = 45489 +a45490 = 45490 +a45491 = 45491 +a45492 = 45492 +a45493 = 45493 +a45494 = 45494 +a45495 = 45495 +a45496 = 45496 +a45497 = 45497 +a45498 = 45498 +a45499 = 45499 +a45500 = 45500 +a45501 = 45501 +a45502 = 45502 +a45503 = 45503 +a45504 = 45504 +a45505 = 45505 +a45506 = 45506 +a45507 = 45507 +a45508 = 45508 +a45509 = 45509 +a45510 = 45510 +a45511 = 45511 +a45512 = 45512 +a45513 = 45513 +a45514 = 45514 +a45515 = 45515 +a45516 = 45516 +a45517 = 45517 +a45518 = 45518 +a45519 = 45519 +a45520 = 45520 +a45521 = 45521 +a45522 = 45522 +a45523 = 45523 +a45524 = 45524 +a45525 = 45525 +a45526 = 45526 +a45527 = 45527 +a45528 = 45528 +a45529 = 45529 +a45530 = 45530 +a45531 = 45531 +a45532 = 45532 +a45533 = 45533 +a45534 = 45534 +a45535 = 45535 +a45536 = 45536 +a45537 = 45537 +a45538 = 45538 +a45539 = 45539 +a45540 = 45540 +a45541 = 45541 +a45542 = 45542 +a45543 = 45543 +a45544 = 45544 +a45545 = 45545 +a45546 = 45546 +a45547 = 45547 +a45548 = 45548 +a45549 = 45549 +a45550 = 45550 +a45551 = 45551 +a45552 = 45552 +a45553 = 45553 +a45554 = 45554 +a45555 = 45555 +a45556 = 45556 +a45557 = 45557 +a45558 = 45558 +a45559 = 45559 +a45560 = 45560 +a45561 = 45561 +a45562 = 45562 +a45563 = 45563 +a45564 = 45564 +a45565 = 45565 +a45566 = 45566 +a45567 = 45567 +a45568 = 45568 +a45569 = 45569 +a45570 = 45570 +a45571 = 45571 +a45572 = 45572 +a45573 = 45573 +a45574 = 45574 +a45575 = 45575 +a45576 = 45576 +a45577 = 45577 +a45578 = 45578 +a45579 = 45579 +a45580 = 45580 +a45581 = 45581 +a45582 = 45582 +a45583 = 45583 +a45584 = 45584 +a45585 = 45585 +a45586 = 45586 +a45587 = 45587 +a45588 = 45588 +a45589 = 45589 +a45590 = 45590 +a45591 = 45591 +a45592 = 45592 +a45593 = 45593 +a45594 = 45594 +a45595 = 45595 +a45596 = 45596 +a45597 = 45597 +a45598 = 45598 +a45599 = 45599 +a45600 = 45600 +a45601 = 45601 +a45602 = 45602 +a45603 = 45603 +a45604 = 45604 +a45605 = 45605 +a45606 = 45606 +a45607 = 45607 +a45608 = 45608 +a45609 = 45609 +a45610 = 45610 +a45611 = 45611 +a45612 = 45612 +a45613 = 45613 +a45614 = 45614 +a45615 = 45615 +a45616 = 45616 +a45617 = 45617 +a45618 = 45618 +a45619 = 45619 +a45620 = 45620 +a45621 = 45621 +a45622 = 45622 +a45623 = 45623 +a45624 = 45624 +a45625 = 45625 +a45626 = 45626 +a45627 = 45627 +a45628 = 45628 +a45629 = 45629 +a45630 = 45630 +a45631 = 45631 +a45632 = 45632 +a45633 = 45633 +a45634 = 45634 +a45635 = 45635 +a45636 = 45636 +a45637 = 45637 +a45638 = 45638 +a45639 = 45639 +a45640 = 45640 +a45641 = 45641 +a45642 = 45642 +a45643 = 45643 +a45644 = 45644 +a45645 = 45645 +a45646 = 45646 +a45647 = 45647 +a45648 = 45648 +a45649 = 45649 +a45650 = 45650 +a45651 = 45651 +a45652 = 45652 +a45653 = 45653 +a45654 = 45654 +a45655 = 45655 +a45656 = 45656 +a45657 = 45657 +a45658 = 45658 +a45659 = 45659 +a45660 = 45660 +a45661 = 45661 +a45662 = 45662 +a45663 = 45663 +a45664 = 45664 +a45665 = 45665 +a45666 = 45666 +a45667 = 45667 +a45668 = 45668 +a45669 = 45669 +a45670 = 45670 +a45671 = 45671 +a45672 = 45672 +a45673 = 45673 +a45674 = 45674 +a45675 = 45675 +a45676 = 45676 +a45677 = 45677 +a45678 = 45678 +a45679 = 45679 +a45680 = 45680 +a45681 = 45681 +a45682 = 45682 +a45683 = 45683 +a45684 = 45684 +a45685 = 45685 +a45686 = 45686 +a45687 = 45687 +a45688 = 45688 +a45689 = 45689 +a45690 = 45690 +a45691 = 45691 +a45692 = 45692 +a45693 = 45693 +a45694 = 45694 +a45695 = 45695 +a45696 = 45696 +a45697 = 45697 +a45698 = 45698 +a45699 = 45699 +a45700 = 45700 +a45701 = 45701 +a45702 = 45702 +a45703 = 45703 +a45704 = 45704 +a45705 = 45705 +a45706 = 45706 +a45707 = 45707 +a45708 = 45708 +a45709 = 45709 +a45710 = 45710 +a45711 = 45711 +a45712 = 45712 +a45713 = 45713 +a45714 = 45714 +a45715 = 45715 +a45716 = 45716 +a45717 = 45717 +a45718 = 45718 +a45719 = 45719 +a45720 = 45720 +a45721 = 45721 +a45722 = 45722 +a45723 = 45723 +a45724 = 45724 +a45725 = 45725 +a45726 = 45726 +a45727 = 45727 +a45728 = 45728 +a45729 = 45729 +a45730 = 45730 +a45731 = 45731 +a45732 = 45732 +a45733 = 45733 +a45734 = 45734 +a45735 = 45735 +a45736 = 45736 +a45737 = 45737 +a45738 = 45738 +a45739 = 45739 +a45740 = 45740 +a45741 = 45741 +a45742 = 45742 +a45743 = 45743 +a45744 = 45744 +a45745 = 45745 +a45746 = 45746 +a45747 = 45747 +a45748 = 45748 +a45749 = 45749 +a45750 = 45750 +a45751 = 45751 +a45752 = 45752 +a45753 = 45753 +a45754 = 45754 +a45755 = 45755 +a45756 = 45756 +a45757 = 45757 +a45758 = 45758 +a45759 = 45759 +a45760 = 45760 +a45761 = 45761 +a45762 = 45762 +a45763 = 45763 +a45764 = 45764 +a45765 = 45765 +a45766 = 45766 +a45767 = 45767 +a45768 = 45768 +a45769 = 45769 +a45770 = 45770 +a45771 = 45771 +a45772 = 45772 +a45773 = 45773 +a45774 = 45774 +a45775 = 45775 +a45776 = 45776 +a45777 = 45777 +a45778 = 45778 +a45779 = 45779 +a45780 = 45780 +a45781 = 45781 +a45782 = 45782 +a45783 = 45783 +a45784 = 45784 +a45785 = 45785 +a45786 = 45786 +a45787 = 45787 +a45788 = 45788 +a45789 = 45789 +a45790 = 45790 +a45791 = 45791 +a45792 = 45792 +a45793 = 45793 +a45794 = 45794 +a45795 = 45795 +a45796 = 45796 +a45797 = 45797 +a45798 = 45798 +a45799 = 45799 +a45800 = 45800 +a45801 = 45801 +a45802 = 45802 +a45803 = 45803 +a45804 = 45804 +a45805 = 45805 +a45806 = 45806 +a45807 = 45807 +a45808 = 45808 +a45809 = 45809 +a45810 = 45810 +a45811 = 45811 +a45812 = 45812 +a45813 = 45813 +a45814 = 45814 +a45815 = 45815 +a45816 = 45816 +a45817 = 45817 +a45818 = 45818 +a45819 = 45819 +a45820 = 45820 +a45821 = 45821 +a45822 = 45822 +a45823 = 45823 +a45824 = 45824 +a45825 = 45825 +a45826 = 45826 +a45827 = 45827 +a45828 = 45828 +a45829 = 45829 +a45830 = 45830 +a45831 = 45831 +a45832 = 45832 +a45833 = 45833 +a45834 = 45834 +a45835 = 45835 +a45836 = 45836 +a45837 = 45837 +a45838 = 45838 +a45839 = 45839 +a45840 = 45840 +a45841 = 45841 +a45842 = 45842 +a45843 = 45843 +a45844 = 45844 +a45845 = 45845 +a45846 = 45846 +a45847 = 45847 +a45848 = 45848 +a45849 = 45849 +a45850 = 45850 +a45851 = 45851 +a45852 = 45852 +a45853 = 45853 +a45854 = 45854 +a45855 = 45855 +a45856 = 45856 +a45857 = 45857 +a45858 = 45858 +a45859 = 45859 +a45860 = 45860 +a45861 = 45861 +a45862 = 45862 +a45863 = 45863 +a45864 = 45864 +a45865 = 45865 +a45866 = 45866 +a45867 = 45867 +a45868 = 45868 +a45869 = 45869 +a45870 = 45870 +a45871 = 45871 +a45872 = 45872 +a45873 = 45873 +a45874 = 45874 +a45875 = 45875 +a45876 = 45876 +a45877 = 45877 +a45878 = 45878 +a45879 = 45879 +a45880 = 45880 +a45881 = 45881 +a45882 = 45882 +a45883 = 45883 +a45884 = 45884 +a45885 = 45885 +a45886 = 45886 +a45887 = 45887 +a45888 = 45888 +a45889 = 45889 +a45890 = 45890 +a45891 = 45891 +a45892 = 45892 +a45893 = 45893 +a45894 = 45894 +a45895 = 45895 +a45896 = 45896 +a45897 = 45897 +a45898 = 45898 +a45899 = 45899 +a45900 = 45900 +a45901 = 45901 +a45902 = 45902 +a45903 = 45903 +a45904 = 45904 +a45905 = 45905 +a45906 = 45906 +a45907 = 45907 +a45908 = 45908 +a45909 = 45909 +a45910 = 45910 +a45911 = 45911 +a45912 = 45912 +a45913 = 45913 +a45914 = 45914 +a45915 = 45915 +a45916 = 45916 +a45917 = 45917 +a45918 = 45918 +a45919 = 45919 +a45920 = 45920 +a45921 = 45921 +a45922 = 45922 +a45923 = 45923 +a45924 = 45924 +a45925 = 45925 +a45926 = 45926 +a45927 = 45927 +a45928 = 45928 +a45929 = 45929 +a45930 = 45930 +a45931 = 45931 +a45932 = 45932 +a45933 = 45933 +a45934 = 45934 +a45935 = 45935 +a45936 = 45936 +a45937 = 45937 +a45938 = 45938 +a45939 = 45939 +a45940 = 45940 +a45941 = 45941 +a45942 = 45942 +a45943 = 45943 +a45944 = 45944 +a45945 = 45945 +a45946 = 45946 +a45947 = 45947 +a45948 = 45948 +a45949 = 45949 +a45950 = 45950 +a45951 = 45951 +a45952 = 45952 +a45953 = 45953 +a45954 = 45954 +a45955 = 45955 +a45956 = 45956 +a45957 = 45957 +a45958 = 45958 +a45959 = 45959 +a45960 = 45960 +a45961 = 45961 +a45962 = 45962 +a45963 = 45963 +a45964 = 45964 +a45965 = 45965 +a45966 = 45966 +a45967 = 45967 +a45968 = 45968 +a45969 = 45969 +a45970 = 45970 +a45971 = 45971 +a45972 = 45972 +a45973 = 45973 +a45974 = 45974 +a45975 = 45975 +a45976 = 45976 +a45977 = 45977 +a45978 = 45978 +a45979 = 45979 +a45980 = 45980 +a45981 = 45981 +a45982 = 45982 +a45983 = 45983 +a45984 = 45984 +a45985 = 45985 +a45986 = 45986 +a45987 = 45987 +a45988 = 45988 +a45989 = 45989 +a45990 = 45990 +a45991 = 45991 +a45992 = 45992 +a45993 = 45993 +a45994 = 45994 +a45995 = 45995 +a45996 = 45996 +a45997 = 45997 +a45998 = 45998 +a45999 = 45999 +a46000 = 46000 +a46001 = 46001 +a46002 = 46002 +a46003 = 46003 +a46004 = 46004 +a46005 = 46005 +a46006 = 46006 +a46007 = 46007 +a46008 = 46008 +a46009 = 46009 +a46010 = 46010 +a46011 = 46011 +a46012 = 46012 +a46013 = 46013 +a46014 = 46014 +a46015 = 46015 +a46016 = 46016 +a46017 = 46017 +a46018 = 46018 +a46019 = 46019 +a46020 = 46020 +a46021 = 46021 +a46022 = 46022 +a46023 = 46023 +a46024 = 46024 +a46025 = 46025 +a46026 = 46026 +a46027 = 46027 +a46028 = 46028 +a46029 = 46029 +a46030 = 46030 +a46031 = 46031 +a46032 = 46032 +a46033 = 46033 +a46034 = 46034 +a46035 = 46035 +a46036 = 46036 +a46037 = 46037 +a46038 = 46038 +a46039 = 46039 +a46040 = 46040 +a46041 = 46041 +a46042 = 46042 +a46043 = 46043 +a46044 = 46044 +a46045 = 46045 +a46046 = 46046 +a46047 = 46047 +a46048 = 46048 +a46049 = 46049 +a46050 = 46050 +a46051 = 46051 +a46052 = 46052 +a46053 = 46053 +a46054 = 46054 +a46055 = 46055 +a46056 = 46056 +a46057 = 46057 +a46058 = 46058 +a46059 = 46059 +a46060 = 46060 +a46061 = 46061 +a46062 = 46062 +a46063 = 46063 +a46064 = 46064 +a46065 = 46065 +a46066 = 46066 +a46067 = 46067 +a46068 = 46068 +a46069 = 46069 +a46070 = 46070 +a46071 = 46071 +a46072 = 46072 +a46073 = 46073 +a46074 = 46074 +a46075 = 46075 +a46076 = 46076 +a46077 = 46077 +a46078 = 46078 +a46079 = 46079 +a46080 = 46080 +a46081 = 46081 +a46082 = 46082 +a46083 = 46083 +a46084 = 46084 +a46085 = 46085 +a46086 = 46086 +a46087 = 46087 +a46088 = 46088 +a46089 = 46089 +a46090 = 46090 +a46091 = 46091 +a46092 = 46092 +a46093 = 46093 +a46094 = 46094 +a46095 = 46095 +a46096 = 46096 +a46097 = 46097 +a46098 = 46098 +a46099 = 46099 +a46100 = 46100 +a46101 = 46101 +a46102 = 46102 +a46103 = 46103 +a46104 = 46104 +a46105 = 46105 +a46106 = 46106 +a46107 = 46107 +a46108 = 46108 +a46109 = 46109 +a46110 = 46110 +a46111 = 46111 +a46112 = 46112 +a46113 = 46113 +a46114 = 46114 +a46115 = 46115 +a46116 = 46116 +a46117 = 46117 +a46118 = 46118 +a46119 = 46119 +a46120 = 46120 +a46121 = 46121 +a46122 = 46122 +a46123 = 46123 +a46124 = 46124 +a46125 = 46125 +a46126 = 46126 +a46127 = 46127 +a46128 = 46128 +a46129 = 46129 +a46130 = 46130 +a46131 = 46131 +a46132 = 46132 +a46133 = 46133 +a46134 = 46134 +a46135 = 46135 +a46136 = 46136 +a46137 = 46137 +a46138 = 46138 +a46139 = 46139 +a46140 = 46140 +a46141 = 46141 +a46142 = 46142 +a46143 = 46143 +a46144 = 46144 +a46145 = 46145 +a46146 = 46146 +a46147 = 46147 +a46148 = 46148 +a46149 = 46149 +a46150 = 46150 +a46151 = 46151 +a46152 = 46152 +a46153 = 46153 +a46154 = 46154 +a46155 = 46155 +a46156 = 46156 +a46157 = 46157 +a46158 = 46158 +a46159 = 46159 +a46160 = 46160 +a46161 = 46161 +a46162 = 46162 +a46163 = 46163 +a46164 = 46164 +a46165 = 46165 +a46166 = 46166 +a46167 = 46167 +a46168 = 46168 +a46169 = 46169 +a46170 = 46170 +a46171 = 46171 +a46172 = 46172 +a46173 = 46173 +a46174 = 46174 +a46175 = 46175 +a46176 = 46176 +a46177 = 46177 +a46178 = 46178 +a46179 = 46179 +a46180 = 46180 +a46181 = 46181 +a46182 = 46182 +a46183 = 46183 +a46184 = 46184 +a46185 = 46185 +a46186 = 46186 +a46187 = 46187 +a46188 = 46188 +a46189 = 46189 +a46190 = 46190 +a46191 = 46191 +a46192 = 46192 +a46193 = 46193 +a46194 = 46194 +a46195 = 46195 +a46196 = 46196 +a46197 = 46197 +a46198 = 46198 +a46199 = 46199 +a46200 = 46200 +a46201 = 46201 +a46202 = 46202 +a46203 = 46203 +a46204 = 46204 +a46205 = 46205 +a46206 = 46206 +a46207 = 46207 +a46208 = 46208 +a46209 = 46209 +a46210 = 46210 +a46211 = 46211 +a46212 = 46212 +a46213 = 46213 +a46214 = 46214 +a46215 = 46215 +a46216 = 46216 +a46217 = 46217 +a46218 = 46218 +a46219 = 46219 +a46220 = 46220 +a46221 = 46221 +a46222 = 46222 +a46223 = 46223 +a46224 = 46224 +a46225 = 46225 +a46226 = 46226 +a46227 = 46227 +a46228 = 46228 +a46229 = 46229 +a46230 = 46230 +a46231 = 46231 +a46232 = 46232 +a46233 = 46233 +a46234 = 46234 +a46235 = 46235 +a46236 = 46236 +a46237 = 46237 +a46238 = 46238 +a46239 = 46239 +a46240 = 46240 +a46241 = 46241 +a46242 = 46242 +a46243 = 46243 +a46244 = 46244 +a46245 = 46245 +a46246 = 46246 +a46247 = 46247 +a46248 = 46248 +a46249 = 46249 +a46250 = 46250 +a46251 = 46251 +a46252 = 46252 +a46253 = 46253 +a46254 = 46254 +a46255 = 46255 +a46256 = 46256 +a46257 = 46257 +a46258 = 46258 +a46259 = 46259 +a46260 = 46260 +a46261 = 46261 +a46262 = 46262 +a46263 = 46263 +a46264 = 46264 +a46265 = 46265 +a46266 = 46266 +a46267 = 46267 +a46268 = 46268 +a46269 = 46269 +a46270 = 46270 +a46271 = 46271 +a46272 = 46272 +a46273 = 46273 +a46274 = 46274 +a46275 = 46275 +a46276 = 46276 +a46277 = 46277 +a46278 = 46278 +a46279 = 46279 +a46280 = 46280 +a46281 = 46281 +a46282 = 46282 +a46283 = 46283 +a46284 = 46284 +a46285 = 46285 +a46286 = 46286 +a46287 = 46287 +a46288 = 46288 +a46289 = 46289 +a46290 = 46290 +a46291 = 46291 +a46292 = 46292 +a46293 = 46293 +a46294 = 46294 +a46295 = 46295 +a46296 = 46296 +a46297 = 46297 +a46298 = 46298 +a46299 = 46299 +a46300 = 46300 +a46301 = 46301 +a46302 = 46302 +a46303 = 46303 +a46304 = 46304 +a46305 = 46305 +a46306 = 46306 +a46307 = 46307 +a46308 = 46308 +a46309 = 46309 +a46310 = 46310 +a46311 = 46311 +a46312 = 46312 +a46313 = 46313 +a46314 = 46314 +a46315 = 46315 +a46316 = 46316 +a46317 = 46317 +a46318 = 46318 +a46319 = 46319 +a46320 = 46320 +a46321 = 46321 +a46322 = 46322 +a46323 = 46323 +a46324 = 46324 +a46325 = 46325 +a46326 = 46326 +a46327 = 46327 +a46328 = 46328 +a46329 = 46329 +a46330 = 46330 +a46331 = 46331 +a46332 = 46332 +a46333 = 46333 +a46334 = 46334 +a46335 = 46335 +a46336 = 46336 +a46337 = 46337 +a46338 = 46338 +a46339 = 46339 +a46340 = 46340 +a46341 = 46341 +a46342 = 46342 +a46343 = 46343 +a46344 = 46344 +a46345 = 46345 +a46346 = 46346 +a46347 = 46347 +a46348 = 46348 +a46349 = 46349 +a46350 = 46350 +a46351 = 46351 +a46352 = 46352 +a46353 = 46353 +a46354 = 46354 +a46355 = 46355 +a46356 = 46356 +a46357 = 46357 +a46358 = 46358 +a46359 = 46359 +a46360 = 46360 +a46361 = 46361 +a46362 = 46362 +a46363 = 46363 +a46364 = 46364 +a46365 = 46365 +a46366 = 46366 +a46367 = 46367 +a46368 = 46368 +a46369 = 46369 +a46370 = 46370 +a46371 = 46371 +a46372 = 46372 +a46373 = 46373 +a46374 = 46374 +a46375 = 46375 +a46376 = 46376 +a46377 = 46377 +a46378 = 46378 +a46379 = 46379 +a46380 = 46380 +a46381 = 46381 +a46382 = 46382 +a46383 = 46383 +a46384 = 46384 +a46385 = 46385 +a46386 = 46386 +a46387 = 46387 +a46388 = 46388 +a46389 = 46389 +a46390 = 46390 +a46391 = 46391 +a46392 = 46392 +a46393 = 46393 +a46394 = 46394 +a46395 = 46395 +a46396 = 46396 +a46397 = 46397 +a46398 = 46398 +a46399 = 46399 +a46400 = 46400 +a46401 = 46401 +a46402 = 46402 +a46403 = 46403 +a46404 = 46404 +a46405 = 46405 +a46406 = 46406 +a46407 = 46407 +a46408 = 46408 +a46409 = 46409 +a46410 = 46410 +a46411 = 46411 +a46412 = 46412 +a46413 = 46413 +a46414 = 46414 +a46415 = 46415 +a46416 = 46416 +a46417 = 46417 +a46418 = 46418 +a46419 = 46419 +a46420 = 46420 +a46421 = 46421 +a46422 = 46422 +a46423 = 46423 +a46424 = 46424 +a46425 = 46425 +a46426 = 46426 +a46427 = 46427 +a46428 = 46428 +a46429 = 46429 +a46430 = 46430 +a46431 = 46431 +a46432 = 46432 +a46433 = 46433 +a46434 = 46434 +a46435 = 46435 +a46436 = 46436 +a46437 = 46437 +a46438 = 46438 +a46439 = 46439 +a46440 = 46440 +a46441 = 46441 +a46442 = 46442 +a46443 = 46443 +a46444 = 46444 +a46445 = 46445 +a46446 = 46446 +a46447 = 46447 +a46448 = 46448 +a46449 = 46449 +a46450 = 46450 +a46451 = 46451 +a46452 = 46452 +a46453 = 46453 +a46454 = 46454 +a46455 = 46455 +a46456 = 46456 +a46457 = 46457 +a46458 = 46458 +a46459 = 46459 +a46460 = 46460 +a46461 = 46461 +a46462 = 46462 +a46463 = 46463 +a46464 = 46464 +a46465 = 46465 +a46466 = 46466 +a46467 = 46467 +a46468 = 46468 +a46469 = 46469 +a46470 = 46470 +a46471 = 46471 +a46472 = 46472 +a46473 = 46473 +a46474 = 46474 +a46475 = 46475 +a46476 = 46476 +a46477 = 46477 +a46478 = 46478 +a46479 = 46479 +a46480 = 46480 +a46481 = 46481 +a46482 = 46482 +a46483 = 46483 +a46484 = 46484 +a46485 = 46485 +a46486 = 46486 +a46487 = 46487 +a46488 = 46488 +a46489 = 46489 +a46490 = 46490 +a46491 = 46491 +a46492 = 46492 +a46493 = 46493 +a46494 = 46494 +a46495 = 46495 +a46496 = 46496 +a46497 = 46497 +a46498 = 46498 +a46499 = 46499 +a46500 = 46500 +a46501 = 46501 +a46502 = 46502 +a46503 = 46503 +a46504 = 46504 +a46505 = 46505 +a46506 = 46506 +a46507 = 46507 +a46508 = 46508 +a46509 = 46509 +a46510 = 46510 +a46511 = 46511 +a46512 = 46512 +a46513 = 46513 +a46514 = 46514 +a46515 = 46515 +a46516 = 46516 +a46517 = 46517 +a46518 = 46518 +a46519 = 46519 +a46520 = 46520 +a46521 = 46521 +a46522 = 46522 +a46523 = 46523 +a46524 = 46524 +a46525 = 46525 +a46526 = 46526 +a46527 = 46527 +a46528 = 46528 +a46529 = 46529 +a46530 = 46530 +a46531 = 46531 +a46532 = 46532 +a46533 = 46533 +a46534 = 46534 +a46535 = 46535 +a46536 = 46536 +a46537 = 46537 +a46538 = 46538 +a46539 = 46539 +a46540 = 46540 +a46541 = 46541 +a46542 = 46542 +a46543 = 46543 +a46544 = 46544 +a46545 = 46545 +a46546 = 46546 +a46547 = 46547 +a46548 = 46548 +a46549 = 46549 +a46550 = 46550 +a46551 = 46551 +a46552 = 46552 +a46553 = 46553 +a46554 = 46554 +a46555 = 46555 +a46556 = 46556 +a46557 = 46557 +a46558 = 46558 +a46559 = 46559 +a46560 = 46560 +a46561 = 46561 +a46562 = 46562 +a46563 = 46563 +a46564 = 46564 +a46565 = 46565 +a46566 = 46566 +a46567 = 46567 +a46568 = 46568 +a46569 = 46569 +a46570 = 46570 +a46571 = 46571 +a46572 = 46572 +a46573 = 46573 +a46574 = 46574 +a46575 = 46575 +a46576 = 46576 +a46577 = 46577 +a46578 = 46578 +a46579 = 46579 +a46580 = 46580 +a46581 = 46581 +a46582 = 46582 +a46583 = 46583 +a46584 = 46584 +a46585 = 46585 +a46586 = 46586 +a46587 = 46587 +a46588 = 46588 +a46589 = 46589 +a46590 = 46590 +a46591 = 46591 +a46592 = 46592 +a46593 = 46593 +a46594 = 46594 +a46595 = 46595 +a46596 = 46596 +a46597 = 46597 +a46598 = 46598 +a46599 = 46599 +a46600 = 46600 +a46601 = 46601 +a46602 = 46602 +a46603 = 46603 +a46604 = 46604 +a46605 = 46605 +a46606 = 46606 +a46607 = 46607 +a46608 = 46608 +a46609 = 46609 +a46610 = 46610 +a46611 = 46611 +a46612 = 46612 +a46613 = 46613 +a46614 = 46614 +a46615 = 46615 +a46616 = 46616 +a46617 = 46617 +a46618 = 46618 +a46619 = 46619 +a46620 = 46620 +a46621 = 46621 +a46622 = 46622 +a46623 = 46623 +a46624 = 46624 +a46625 = 46625 +a46626 = 46626 +a46627 = 46627 +a46628 = 46628 +a46629 = 46629 +a46630 = 46630 +a46631 = 46631 +a46632 = 46632 +a46633 = 46633 +a46634 = 46634 +a46635 = 46635 +a46636 = 46636 +a46637 = 46637 +a46638 = 46638 +a46639 = 46639 +a46640 = 46640 +a46641 = 46641 +a46642 = 46642 +a46643 = 46643 +a46644 = 46644 +a46645 = 46645 +a46646 = 46646 +a46647 = 46647 +a46648 = 46648 +a46649 = 46649 +a46650 = 46650 +a46651 = 46651 +a46652 = 46652 +a46653 = 46653 +a46654 = 46654 +a46655 = 46655 +a46656 = 46656 +a46657 = 46657 +a46658 = 46658 +a46659 = 46659 +a46660 = 46660 +a46661 = 46661 +a46662 = 46662 +a46663 = 46663 +a46664 = 46664 +a46665 = 46665 +a46666 = 46666 +a46667 = 46667 +a46668 = 46668 +a46669 = 46669 +a46670 = 46670 +a46671 = 46671 +a46672 = 46672 +a46673 = 46673 +a46674 = 46674 +a46675 = 46675 +a46676 = 46676 +a46677 = 46677 +a46678 = 46678 +a46679 = 46679 +a46680 = 46680 +a46681 = 46681 +a46682 = 46682 +a46683 = 46683 +a46684 = 46684 +a46685 = 46685 +a46686 = 46686 +a46687 = 46687 +a46688 = 46688 +a46689 = 46689 +a46690 = 46690 +a46691 = 46691 +a46692 = 46692 +a46693 = 46693 +a46694 = 46694 +a46695 = 46695 +a46696 = 46696 +a46697 = 46697 +a46698 = 46698 +a46699 = 46699 +a46700 = 46700 +a46701 = 46701 +a46702 = 46702 +a46703 = 46703 +a46704 = 46704 +a46705 = 46705 +a46706 = 46706 +a46707 = 46707 +a46708 = 46708 +a46709 = 46709 +a46710 = 46710 +a46711 = 46711 +a46712 = 46712 +a46713 = 46713 +a46714 = 46714 +a46715 = 46715 +a46716 = 46716 +a46717 = 46717 +a46718 = 46718 +a46719 = 46719 +a46720 = 46720 +a46721 = 46721 +a46722 = 46722 +a46723 = 46723 +a46724 = 46724 +a46725 = 46725 +a46726 = 46726 +a46727 = 46727 +a46728 = 46728 +a46729 = 46729 +a46730 = 46730 +a46731 = 46731 +a46732 = 46732 +a46733 = 46733 +a46734 = 46734 +a46735 = 46735 +a46736 = 46736 +a46737 = 46737 +a46738 = 46738 +a46739 = 46739 +a46740 = 46740 +a46741 = 46741 +a46742 = 46742 +a46743 = 46743 +a46744 = 46744 +a46745 = 46745 +a46746 = 46746 +a46747 = 46747 +a46748 = 46748 +a46749 = 46749 +a46750 = 46750 +a46751 = 46751 +a46752 = 46752 +a46753 = 46753 +a46754 = 46754 +a46755 = 46755 +a46756 = 46756 +a46757 = 46757 +a46758 = 46758 +a46759 = 46759 +a46760 = 46760 +a46761 = 46761 +a46762 = 46762 +a46763 = 46763 +a46764 = 46764 +a46765 = 46765 +a46766 = 46766 +a46767 = 46767 +a46768 = 46768 +a46769 = 46769 +a46770 = 46770 +a46771 = 46771 +a46772 = 46772 +a46773 = 46773 +a46774 = 46774 +a46775 = 46775 +a46776 = 46776 +a46777 = 46777 +a46778 = 46778 +a46779 = 46779 +a46780 = 46780 +a46781 = 46781 +a46782 = 46782 +a46783 = 46783 +a46784 = 46784 +a46785 = 46785 +a46786 = 46786 +a46787 = 46787 +a46788 = 46788 +a46789 = 46789 +a46790 = 46790 +a46791 = 46791 +a46792 = 46792 +a46793 = 46793 +a46794 = 46794 +a46795 = 46795 +a46796 = 46796 +a46797 = 46797 +a46798 = 46798 +a46799 = 46799 +a46800 = 46800 +a46801 = 46801 +a46802 = 46802 +a46803 = 46803 +a46804 = 46804 +a46805 = 46805 +a46806 = 46806 +a46807 = 46807 +a46808 = 46808 +a46809 = 46809 +a46810 = 46810 +a46811 = 46811 +a46812 = 46812 +a46813 = 46813 +a46814 = 46814 +a46815 = 46815 +a46816 = 46816 +a46817 = 46817 +a46818 = 46818 +a46819 = 46819 +a46820 = 46820 +a46821 = 46821 +a46822 = 46822 +a46823 = 46823 +a46824 = 46824 +a46825 = 46825 +a46826 = 46826 +a46827 = 46827 +a46828 = 46828 +a46829 = 46829 +a46830 = 46830 +a46831 = 46831 +a46832 = 46832 +a46833 = 46833 +a46834 = 46834 +a46835 = 46835 +a46836 = 46836 +a46837 = 46837 +a46838 = 46838 +a46839 = 46839 +a46840 = 46840 +a46841 = 46841 +a46842 = 46842 +a46843 = 46843 +a46844 = 46844 +a46845 = 46845 +a46846 = 46846 +a46847 = 46847 +a46848 = 46848 +a46849 = 46849 +a46850 = 46850 +a46851 = 46851 +a46852 = 46852 +a46853 = 46853 +a46854 = 46854 +a46855 = 46855 +a46856 = 46856 +a46857 = 46857 +a46858 = 46858 +a46859 = 46859 +a46860 = 46860 +a46861 = 46861 +a46862 = 46862 +a46863 = 46863 +a46864 = 46864 +a46865 = 46865 +a46866 = 46866 +a46867 = 46867 +a46868 = 46868 +a46869 = 46869 +a46870 = 46870 +a46871 = 46871 +a46872 = 46872 +a46873 = 46873 +a46874 = 46874 +a46875 = 46875 +a46876 = 46876 +a46877 = 46877 +a46878 = 46878 +a46879 = 46879 +a46880 = 46880 +a46881 = 46881 +a46882 = 46882 +a46883 = 46883 +a46884 = 46884 +a46885 = 46885 +a46886 = 46886 +a46887 = 46887 +a46888 = 46888 +a46889 = 46889 +a46890 = 46890 +a46891 = 46891 +a46892 = 46892 +a46893 = 46893 +a46894 = 46894 +a46895 = 46895 +a46896 = 46896 +a46897 = 46897 +a46898 = 46898 +a46899 = 46899 +a46900 = 46900 +a46901 = 46901 +a46902 = 46902 +a46903 = 46903 +a46904 = 46904 +a46905 = 46905 +a46906 = 46906 +a46907 = 46907 +a46908 = 46908 +a46909 = 46909 +a46910 = 46910 +a46911 = 46911 +a46912 = 46912 +a46913 = 46913 +a46914 = 46914 +a46915 = 46915 +a46916 = 46916 +a46917 = 46917 +a46918 = 46918 +a46919 = 46919 +a46920 = 46920 +a46921 = 46921 +a46922 = 46922 +a46923 = 46923 +a46924 = 46924 +a46925 = 46925 +a46926 = 46926 +a46927 = 46927 +a46928 = 46928 +a46929 = 46929 +a46930 = 46930 +a46931 = 46931 +a46932 = 46932 +a46933 = 46933 +a46934 = 46934 +a46935 = 46935 +a46936 = 46936 +a46937 = 46937 +a46938 = 46938 +a46939 = 46939 +a46940 = 46940 +a46941 = 46941 +a46942 = 46942 +a46943 = 46943 +a46944 = 46944 +a46945 = 46945 +a46946 = 46946 +a46947 = 46947 +a46948 = 46948 +a46949 = 46949 +a46950 = 46950 +a46951 = 46951 +a46952 = 46952 +a46953 = 46953 +a46954 = 46954 +a46955 = 46955 +a46956 = 46956 +a46957 = 46957 +a46958 = 46958 +a46959 = 46959 +a46960 = 46960 +a46961 = 46961 +a46962 = 46962 +a46963 = 46963 +a46964 = 46964 +a46965 = 46965 +a46966 = 46966 +a46967 = 46967 +a46968 = 46968 +a46969 = 46969 +a46970 = 46970 +a46971 = 46971 +a46972 = 46972 +a46973 = 46973 +a46974 = 46974 +a46975 = 46975 +a46976 = 46976 +a46977 = 46977 +a46978 = 46978 +a46979 = 46979 +a46980 = 46980 +a46981 = 46981 +a46982 = 46982 +a46983 = 46983 +a46984 = 46984 +a46985 = 46985 +a46986 = 46986 +a46987 = 46987 +a46988 = 46988 +a46989 = 46989 +a46990 = 46990 +a46991 = 46991 +a46992 = 46992 +a46993 = 46993 +a46994 = 46994 +a46995 = 46995 +a46996 = 46996 +a46997 = 46997 +a46998 = 46998 +a46999 = 46999 +a47000 = 47000 +a47001 = 47001 +a47002 = 47002 +a47003 = 47003 +a47004 = 47004 +a47005 = 47005 +a47006 = 47006 +a47007 = 47007 +a47008 = 47008 +a47009 = 47009 +a47010 = 47010 +a47011 = 47011 +a47012 = 47012 +a47013 = 47013 +a47014 = 47014 +a47015 = 47015 +a47016 = 47016 +a47017 = 47017 +a47018 = 47018 +a47019 = 47019 +a47020 = 47020 +a47021 = 47021 +a47022 = 47022 +a47023 = 47023 +a47024 = 47024 +a47025 = 47025 +a47026 = 47026 +a47027 = 47027 +a47028 = 47028 +a47029 = 47029 +a47030 = 47030 +a47031 = 47031 +a47032 = 47032 +a47033 = 47033 +a47034 = 47034 +a47035 = 47035 +a47036 = 47036 +a47037 = 47037 +a47038 = 47038 +a47039 = 47039 +a47040 = 47040 +a47041 = 47041 +a47042 = 47042 +a47043 = 47043 +a47044 = 47044 +a47045 = 47045 +a47046 = 47046 +a47047 = 47047 +a47048 = 47048 +a47049 = 47049 +a47050 = 47050 +a47051 = 47051 +a47052 = 47052 +a47053 = 47053 +a47054 = 47054 +a47055 = 47055 +a47056 = 47056 +a47057 = 47057 +a47058 = 47058 +a47059 = 47059 +a47060 = 47060 +a47061 = 47061 +a47062 = 47062 +a47063 = 47063 +a47064 = 47064 +a47065 = 47065 +a47066 = 47066 +a47067 = 47067 +a47068 = 47068 +a47069 = 47069 +a47070 = 47070 +a47071 = 47071 +a47072 = 47072 +a47073 = 47073 +a47074 = 47074 +a47075 = 47075 +a47076 = 47076 +a47077 = 47077 +a47078 = 47078 +a47079 = 47079 +a47080 = 47080 +a47081 = 47081 +a47082 = 47082 +a47083 = 47083 +a47084 = 47084 +a47085 = 47085 +a47086 = 47086 +a47087 = 47087 +a47088 = 47088 +a47089 = 47089 +a47090 = 47090 +a47091 = 47091 +a47092 = 47092 +a47093 = 47093 +a47094 = 47094 +a47095 = 47095 +a47096 = 47096 +a47097 = 47097 +a47098 = 47098 +a47099 = 47099 +a47100 = 47100 +a47101 = 47101 +a47102 = 47102 +a47103 = 47103 +a47104 = 47104 +a47105 = 47105 +a47106 = 47106 +a47107 = 47107 +a47108 = 47108 +a47109 = 47109 +a47110 = 47110 +a47111 = 47111 +a47112 = 47112 +a47113 = 47113 +a47114 = 47114 +a47115 = 47115 +a47116 = 47116 +a47117 = 47117 +a47118 = 47118 +a47119 = 47119 +a47120 = 47120 +a47121 = 47121 +a47122 = 47122 +a47123 = 47123 +a47124 = 47124 +a47125 = 47125 +a47126 = 47126 +a47127 = 47127 +a47128 = 47128 +a47129 = 47129 +a47130 = 47130 +a47131 = 47131 +a47132 = 47132 +a47133 = 47133 +a47134 = 47134 +a47135 = 47135 +a47136 = 47136 +a47137 = 47137 +a47138 = 47138 +a47139 = 47139 +a47140 = 47140 +a47141 = 47141 +a47142 = 47142 +a47143 = 47143 +a47144 = 47144 +a47145 = 47145 +a47146 = 47146 +a47147 = 47147 +a47148 = 47148 +a47149 = 47149 +a47150 = 47150 +a47151 = 47151 +a47152 = 47152 +a47153 = 47153 +a47154 = 47154 +a47155 = 47155 +a47156 = 47156 +a47157 = 47157 +a47158 = 47158 +a47159 = 47159 +a47160 = 47160 +a47161 = 47161 +a47162 = 47162 +a47163 = 47163 +a47164 = 47164 +a47165 = 47165 +a47166 = 47166 +a47167 = 47167 +a47168 = 47168 +a47169 = 47169 +a47170 = 47170 +a47171 = 47171 +a47172 = 47172 +a47173 = 47173 +a47174 = 47174 +a47175 = 47175 +a47176 = 47176 +a47177 = 47177 +a47178 = 47178 +a47179 = 47179 +a47180 = 47180 +a47181 = 47181 +a47182 = 47182 +a47183 = 47183 +a47184 = 47184 +a47185 = 47185 +a47186 = 47186 +a47187 = 47187 +a47188 = 47188 +a47189 = 47189 +a47190 = 47190 +a47191 = 47191 +a47192 = 47192 +a47193 = 47193 +a47194 = 47194 +a47195 = 47195 +a47196 = 47196 +a47197 = 47197 +a47198 = 47198 +a47199 = 47199 +a47200 = 47200 +a47201 = 47201 +a47202 = 47202 +a47203 = 47203 +a47204 = 47204 +a47205 = 47205 +a47206 = 47206 +a47207 = 47207 +a47208 = 47208 +a47209 = 47209 +a47210 = 47210 +a47211 = 47211 +a47212 = 47212 +a47213 = 47213 +a47214 = 47214 +a47215 = 47215 +a47216 = 47216 +a47217 = 47217 +a47218 = 47218 +a47219 = 47219 +a47220 = 47220 +a47221 = 47221 +a47222 = 47222 +a47223 = 47223 +a47224 = 47224 +a47225 = 47225 +a47226 = 47226 +a47227 = 47227 +a47228 = 47228 +a47229 = 47229 +a47230 = 47230 +a47231 = 47231 +a47232 = 47232 +a47233 = 47233 +a47234 = 47234 +a47235 = 47235 +a47236 = 47236 +a47237 = 47237 +a47238 = 47238 +a47239 = 47239 +a47240 = 47240 +a47241 = 47241 +a47242 = 47242 +a47243 = 47243 +a47244 = 47244 +a47245 = 47245 +a47246 = 47246 +a47247 = 47247 +a47248 = 47248 +a47249 = 47249 +a47250 = 47250 +a47251 = 47251 +a47252 = 47252 +a47253 = 47253 +a47254 = 47254 +a47255 = 47255 +a47256 = 47256 +a47257 = 47257 +a47258 = 47258 +a47259 = 47259 +a47260 = 47260 +a47261 = 47261 +a47262 = 47262 +a47263 = 47263 +a47264 = 47264 +a47265 = 47265 +a47266 = 47266 +a47267 = 47267 +a47268 = 47268 +a47269 = 47269 +a47270 = 47270 +a47271 = 47271 +a47272 = 47272 +a47273 = 47273 +a47274 = 47274 +a47275 = 47275 +a47276 = 47276 +a47277 = 47277 +a47278 = 47278 +a47279 = 47279 +a47280 = 47280 +a47281 = 47281 +a47282 = 47282 +a47283 = 47283 +a47284 = 47284 +a47285 = 47285 +a47286 = 47286 +a47287 = 47287 +a47288 = 47288 +a47289 = 47289 +a47290 = 47290 +a47291 = 47291 +a47292 = 47292 +a47293 = 47293 +a47294 = 47294 +a47295 = 47295 +a47296 = 47296 +a47297 = 47297 +a47298 = 47298 +a47299 = 47299 +a47300 = 47300 +a47301 = 47301 +a47302 = 47302 +a47303 = 47303 +a47304 = 47304 +a47305 = 47305 +a47306 = 47306 +a47307 = 47307 +a47308 = 47308 +a47309 = 47309 +a47310 = 47310 +a47311 = 47311 +a47312 = 47312 +a47313 = 47313 +a47314 = 47314 +a47315 = 47315 +a47316 = 47316 +a47317 = 47317 +a47318 = 47318 +a47319 = 47319 +a47320 = 47320 +a47321 = 47321 +a47322 = 47322 +a47323 = 47323 +a47324 = 47324 +a47325 = 47325 +a47326 = 47326 +a47327 = 47327 +a47328 = 47328 +a47329 = 47329 +a47330 = 47330 +a47331 = 47331 +a47332 = 47332 +a47333 = 47333 +a47334 = 47334 +a47335 = 47335 +a47336 = 47336 +a47337 = 47337 +a47338 = 47338 +a47339 = 47339 +a47340 = 47340 +a47341 = 47341 +a47342 = 47342 +a47343 = 47343 +a47344 = 47344 +a47345 = 47345 +a47346 = 47346 +a47347 = 47347 +a47348 = 47348 +a47349 = 47349 +a47350 = 47350 +a47351 = 47351 +a47352 = 47352 +a47353 = 47353 +a47354 = 47354 +a47355 = 47355 +a47356 = 47356 +a47357 = 47357 +a47358 = 47358 +a47359 = 47359 +a47360 = 47360 +a47361 = 47361 +a47362 = 47362 +a47363 = 47363 +a47364 = 47364 +a47365 = 47365 +a47366 = 47366 +a47367 = 47367 +a47368 = 47368 +a47369 = 47369 +a47370 = 47370 +a47371 = 47371 +a47372 = 47372 +a47373 = 47373 +a47374 = 47374 +a47375 = 47375 +a47376 = 47376 +a47377 = 47377 +a47378 = 47378 +a47379 = 47379 +a47380 = 47380 +a47381 = 47381 +a47382 = 47382 +a47383 = 47383 +a47384 = 47384 +a47385 = 47385 +a47386 = 47386 +a47387 = 47387 +a47388 = 47388 +a47389 = 47389 +a47390 = 47390 +a47391 = 47391 +a47392 = 47392 +a47393 = 47393 +a47394 = 47394 +a47395 = 47395 +a47396 = 47396 +a47397 = 47397 +a47398 = 47398 +a47399 = 47399 +a47400 = 47400 +a47401 = 47401 +a47402 = 47402 +a47403 = 47403 +a47404 = 47404 +a47405 = 47405 +a47406 = 47406 +a47407 = 47407 +a47408 = 47408 +a47409 = 47409 +a47410 = 47410 +a47411 = 47411 +a47412 = 47412 +a47413 = 47413 +a47414 = 47414 +a47415 = 47415 +a47416 = 47416 +a47417 = 47417 +a47418 = 47418 +a47419 = 47419 +a47420 = 47420 +a47421 = 47421 +a47422 = 47422 +a47423 = 47423 +a47424 = 47424 +a47425 = 47425 +a47426 = 47426 +a47427 = 47427 +a47428 = 47428 +a47429 = 47429 +a47430 = 47430 +a47431 = 47431 +a47432 = 47432 +a47433 = 47433 +a47434 = 47434 +a47435 = 47435 +a47436 = 47436 +a47437 = 47437 +a47438 = 47438 +a47439 = 47439 +a47440 = 47440 +a47441 = 47441 +a47442 = 47442 +a47443 = 47443 +a47444 = 47444 +a47445 = 47445 +a47446 = 47446 +a47447 = 47447 +a47448 = 47448 +a47449 = 47449 +a47450 = 47450 +a47451 = 47451 +a47452 = 47452 +a47453 = 47453 +a47454 = 47454 +a47455 = 47455 +a47456 = 47456 +a47457 = 47457 +a47458 = 47458 +a47459 = 47459 +a47460 = 47460 +a47461 = 47461 +a47462 = 47462 +a47463 = 47463 +a47464 = 47464 +a47465 = 47465 +a47466 = 47466 +a47467 = 47467 +a47468 = 47468 +a47469 = 47469 +a47470 = 47470 +a47471 = 47471 +a47472 = 47472 +a47473 = 47473 +a47474 = 47474 +a47475 = 47475 +a47476 = 47476 +a47477 = 47477 +a47478 = 47478 +a47479 = 47479 +a47480 = 47480 +a47481 = 47481 +a47482 = 47482 +a47483 = 47483 +a47484 = 47484 +a47485 = 47485 +a47486 = 47486 +a47487 = 47487 +a47488 = 47488 +a47489 = 47489 +a47490 = 47490 +a47491 = 47491 +a47492 = 47492 +a47493 = 47493 +a47494 = 47494 +a47495 = 47495 +a47496 = 47496 +a47497 = 47497 +a47498 = 47498 +a47499 = 47499 +a47500 = 47500 +a47501 = 47501 +a47502 = 47502 +a47503 = 47503 +a47504 = 47504 +a47505 = 47505 +a47506 = 47506 +a47507 = 47507 +a47508 = 47508 +a47509 = 47509 +a47510 = 47510 +a47511 = 47511 +a47512 = 47512 +a47513 = 47513 +a47514 = 47514 +a47515 = 47515 +a47516 = 47516 +a47517 = 47517 +a47518 = 47518 +a47519 = 47519 +a47520 = 47520 +a47521 = 47521 +a47522 = 47522 +a47523 = 47523 +a47524 = 47524 +a47525 = 47525 +a47526 = 47526 +a47527 = 47527 +a47528 = 47528 +a47529 = 47529 +a47530 = 47530 +a47531 = 47531 +a47532 = 47532 +a47533 = 47533 +a47534 = 47534 +a47535 = 47535 +a47536 = 47536 +a47537 = 47537 +a47538 = 47538 +a47539 = 47539 +a47540 = 47540 +a47541 = 47541 +a47542 = 47542 +a47543 = 47543 +a47544 = 47544 +a47545 = 47545 +a47546 = 47546 +a47547 = 47547 +a47548 = 47548 +a47549 = 47549 +a47550 = 47550 +a47551 = 47551 +a47552 = 47552 +a47553 = 47553 +a47554 = 47554 +a47555 = 47555 +a47556 = 47556 +a47557 = 47557 +a47558 = 47558 +a47559 = 47559 +a47560 = 47560 +a47561 = 47561 +a47562 = 47562 +a47563 = 47563 +a47564 = 47564 +a47565 = 47565 +a47566 = 47566 +a47567 = 47567 +a47568 = 47568 +a47569 = 47569 +a47570 = 47570 +a47571 = 47571 +a47572 = 47572 +a47573 = 47573 +a47574 = 47574 +a47575 = 47575 +a47576 = 47576 +a47577 = 47577 +a47578 = 47578 +a47579 = 47579 +a47580 = 47580 +a47581 = 47581 +a47582 = 47582 +a47583 = 47583 +a47584 = 47584 +a47585 = 47585 +a47586 = 47586 +a47587 = 47587 +a47588 = 47588 +a47589 = 47589 +a47590 = 47590 +a47591 = 47591 +a47592 = 47592 +a47593 = 47593 +a47594 = 47594 +a47595 = 47595 +a47596 = 47596 +a47597 = 47597 +a47598 = 47598 +a47599 = 47599 +a47600 = 47600 +a47601 = 47601 +a47602 = 47602 +a47603 = 47603 +a47604 = 47604 +a47605 = 47605 +a47606 = 47606 +a47607 = 47607 +a47608 = 47608 +a47609 = 47609 +a47610 = 47610 +a47611 = 47611 +a47612 = 47612 +a47613 = 47613 +a47614 = 47614 +a47615 = 47615 +a47616 = 47616 +a47617 = 47617 +a47618 = 47618 +a47619 = 47619 +a47620 = 47620 +a47621 = 47621 +a47622 = 47622 +a47623 = 47623 +a47624 = 47624 +a47625 = 47625 +a47626 = 47626 +a47627 = 47627 +a47628 = 47628 +a47629 = 47629 +a47630 = 47630 +a47631 = 47631 +a47632 = 47632 +a47633 = 47633 +a47634 = 47634 +a47635 = 47635 +a47636 = 47636 +a47637 = 47637 +a47638 = 47638 +a47639 = 47639 +a47640 = 47640 +a47641 = 47641 +a47642 = 47642 +a47643 = 47643 +a47644 = 47644 +a47645 = 47645 +a47646 = 47646 +a47647 = 47647 +a47648 = 47648 +a47649 = 47649 +a47650 = 47650 +a47651 = 47651 +a47652 = 47652 +a47653 = 47653 +a47654 = 47654 +a47655 = 47655 +a47656 = 47656 +a47657 = 47657 +a47658 = 47658 +a47659 = 47659 +a47660 = 47660 +a47661 = 47661 +a47662 = 47662 +a47663 = 47663 +a47664 = 47664 +a47665 = 47665 +a47666 = 47666 +a47667 = 47667 +a47668 = 47668 +a47669 = 47669 +a47670 = 47670 +a47671 = 47671 +a47672 = 47672 +a47673 = 47673 +a47674 = 47674 +a47675 = 47675 +a47676 = 47676 +a47677 = 47677 +a47678 = 47678 +a47679 = 47679 +a47680 = 47680 +a47681 = 47681 +a47682 = 47682 +a47683 = 47683 +a47684 = 47684 +a47685 = 47685 +a47686 = 47686 +a47687 = 47687 +a47688 = 47688 +a47689 = 47689 +a47690 = 47690 +a47691 = 47691 +a47692 = 47692 +a47693 = 47693 +a47694 = 47694 +a47695 = 47695 +a47696 = 47696 +a47697 = 47697 +a47698 = 47698 +a47699 = 47699 +a47700 = 47700 +a47701 = 47701 +a47702 = 47702 +a47703 = 47703 +a47704 = 47704 +a47705 = 47705 +a47706 = 47706 +a47707 = 47707 +a47708 = 47708 +a47709 = 47709 +a47710 = 47710 +a47711 = 47711 +a47712 = 47712 +a47713 = 47713 +a47714 = 47714 +a47715 = 47715 +a47716 = 47716 +a47717 = 47717 +a47718 = 47718 +a47719 = 47719 +a47720 = 47720 +a47721 = 47721 +a47722 = 47722 +a47723 = 47723 +a47724 = 47724 +a47725 = 47725 +a47726 = 47726 +a47727 = 47727 +a47728 = 47728 +a47729 = 47729 +a47730 = 47730 +a47731 = 47731 +a47732 = 47732 +a47733 = 47733 +a47734 = 47734 +a47735 = 47735 +a47736 = 47736 +a47737 = 47737 +a47738 = 47738 +a47739 = 47739 +a47740 = 47740 +a47741 = 47741 +a47742 = 47742 +a47743 = 47743 +a47744 = 47744 +a47745 = 47745 +a47746 = 47746 +a47747 = 47747 +a47748 = 47748 +a47749 = 47749 +a47750 = 47750 +a47751 = 47751 +a47752 = 47752 +a47753 = 47753 +a47754 = 47754 +a47755 = 47755 +a47756 = 47756 +a47757 = 47757 +a47758 = 47758 +a47759 = 47759 +a47760 = 47760 +a47761 = 47761 +a47762 = 47762 +a47763 = 47763 +a47764 = 47764 +a47765 = 47765 +a47766 = 47766 +a47767 = 47767 +a47768 = 47768 +a47769 = 47769 +a47770 = 47770 +a47771 = 47771 +a47772 = 47772 +a47773 = 47773 +a47774 = 47774 +a47775 = 47775 +a47776 = 47776 +a47777 = 47777 +a47778 = 47778 +a47779 = 47779 +a47780 = 47780 +a47781 = 47781 +a47782 = 47782 +a47783 = 47783 +a47784 = 47784 +a47785 = 47785 +a47786 = 47786 +a47787 = 47787 +a47788 = 47788 +a47789 = 47789 +a47790 = 47790 +a47791 = 47791 +a47792 = 47792 +a47793 = 47793 +a47794 = 47794 +a47795 = 47795 +a47796 = 47796 +a47797 = 47797 +a47798 = 47798 +a47799 = 47799 +a47800 = 47800 +a47801 = 47801 +a47802 = 47802 +a47803 = 47803 +a47804 = 47804 +a47805 = 47805 +a47806 = 47806 +a47807 = 47807 +a47808 = 47808 +a47809 = 47809 +a47810 = 47810 +a47811 = 47811 +a47812 = 47812 +a47813 = 47813 +a47814 = 47814 +a47815 = 47815 +a47816 = 47816 +a47817 = 47817 +a47818 = 47818 +a47819 = 47819 +a47820 = 47820 +a47821 = 47821 +a47822 = 47822 +a47823 = 47823 +a47824 = 47824 +a47825 = 47825 +a47826 = 47826 +a47827 = 47827 +a47828 = 47828 +a47829 = 47829 +a47830 = 47830 +a47831 = 47831 +a47832 = 47832 +a47833 = 47833 +a47834 = 47834 +a47835 = 47835 +a47836 = 47836 +a47837 = 47837 +a47838 = 47838 +a47839 = 47839 +a47840 = 47840 +a47841 = 47841 +a47842 = 47842 +a47843 = 47843 +a47844 = 47844 +a47845 = 47845 +a47846 = 47846 +a47847 = 47847 +a47848 = 47848 +a47849 = 47849 +a47850 = 47850 +a47851 = 47851 +a47852 = 47852 +a47853 = 47853 +a47854 = 47854 +a47855 = 47855 +a47856 = 47856 +a47857 = 47857 +a47858 = 47858 +a47859 = 47859 +a47860 = 47860 +a47861 = 47861 +a47862 = 47862 +a47863 = 47863 +a47864 = 47864 +a47865 = 47865 +a47866 = 47866 +a47867 = 47867 +a47868 = 47868 +a47869 = 47869 +a47870 = 47870 +a47871 = 47871 +a47872 = 47872 +a47873 = 47873 +a47874 = 47874 +a47875 = 47875 +a47876 = 47876 +a47877 = 47877 +a47878 = 47878 +a47879 = 47879 +a47880 = 47880 +a47881 = 47881 +a47882 = 47882 +a47883 = 47883 +a47884 = 47884 +a47885 = 47885 +a47886 = 47886 +a47887 = 47887 +a47888 = 47888 +a47889 = 47889 +a47890 = 47890 +a47891 = 47891 +a47892 = 47892 +a47893 = 47893 +a47894 = 47894 +a47895 = 47895 +a47896 = 47896 +a47897 = 47897 +a47898 = 47898 +a47899 = 47899 +a47900 = 47900 +a47901 = 47901 +a47902 = 47902 +a47903 = 47903 +a47904 = 47904 +a47905 = 47905 +a47906 = 47906 +a47907 = 47907 +a47908 = 47908 +a47909 = 47909 +a47910 = 47910 +a47911 = 47911 +a47912 = 47912 +a47913 = 47913 +a47914 = 47914 +a47915 = 47915 +a47916 = 47916 +a47917 = 47917 +a47918 = 47918 +a47919 = 47919 +a47920 = 47920 +a47921 = 47921 +a47922 = 47922 +a47923 = 47923 +a47924 = 47924 +a47925 = 47925 +a47926 = 47926 +a47927 = 47927 +a47928 = 47928 +a47929 = 47929 +a47930 = 47930 +a47931 = 47931 +a47932 = 47932 +a47933 = 47933 +a47934 = 47934 +a47935 = 47935 +a47936 = 47936 +a47937 = 47937 +a47938 = 47938 +a47939 = 47939 +a47940 = 47940 +a47941 = 47941 +a47942 = 47942 +a47943 = 47943 +a47944 = 47944 +a47945 = 47945 +a47946 = 47946 +a47947 = 47947 +a47948 = 47948 +a47949 = 47949 +a47950 = 47950 +a47951 = 47951 +a47952 = 47952 +a47953 = 47953 +a47954 = 47954 +a47955 = 47955 +a47956 = 47956 +a47957 = 47957 +a47958 = 47958 +a47959 = 47959 +a47960 = 47960 +a47961 = 47961 +a47962 = 47962 +a47963 = 47963 +a47964 = 47964 +a47965 = 47965 +a47966 = 47966 +a47967 = 47967 +a47968 = 47968 +a47969 = 47969 +a47970 = 47970 +a47971 = 47971 +a47972 = 47972 +a47973 = 47973 +a47974 = 47974 +a47975 = 47975 +a47976 = 47976 +a47977 = 47977 +a47978 = 47978 +a47979 = 47979 +a47980 = 47980 +a47981 = 47981 +a47982 = 47982 +a47983 = 47983 +a47984 = 47984 +a47985 = 47985 +a47986 = 47986 +a47987 = 47987 +a47988 = 47988 +a47989 = 47989 +a47990 = 47990 +a47991 = 47991 +a47992 = 47992 +a47993 = 47993 +a47994 = 47994 +a47995 = 47995 +a47996 = 47996 +a47997 = 47997 +a47998 = 47998 +a47999 = 47999 +a48000 = 48000 +a48001 = 48001 +a48002 = 48002 +a48003 = 48003 +a48004 = 48004 +a48005 = 48005 +a48006 = 48006 +a48007 = 48007 +a48008 = 48008 +a48009 = 48009 +a48010 = 48010 +a48011 = 48011 +a48012 = 48012 +a48013 = 48013 +a48014 = 48014 +a48015 = 48015 +a48016 = 48016 +a48017 = 48017 +a48018 = 48018 +a48019 = 48019 +a48020 = 48020 +a48021 = 48021 +a48022 = 48022 +a48023 = 48023 +a48024 = 48024 +a48025 = 48025 +a48026 = 48026 +a48027 = 48027 +a48028 = 48028 +a48029 = 48029 +a48030 = 48030 +a48031 = 48031 +a48032 = 48032 +a48033 = 48033 +a48034 = 48034 +a48035 = 48035 +a48036 = 48036 +a48037 = 48037 +a48038 = 48038 +a48039 = 48039 +a48040 = 48040 +a48041 = 48041 +a48042 = 48042 +a48043 = 48043 +a48044 = 48044 +a48045 = 48045 +a48046 = 48046 +a48047 = 48047 +a48048 = 48048 +a48049 = 48049 +a48050 = 48050 +a48051 = 48051 +a48052 = 48052 +a48053 = 48053 +a48054 = 48054 +a48055 = 48055 +a48056 = 48056 +a48057 = 48057 +a48058 = 48058 +a48059 = 48059 +a48060 = 48060 +a48061 = 48061 +a48062 = 48062 +a48063 = 48063 +a48064 = 48064 +a48065 = 48065 +a48066 = 48066 +a48067 = 48067 +a48068 = 48068 +a48069 = 48069 +a48070 = 48070 +a48071 = 48071 +a48072 = 48072 +a48073 = 48073 +a48074 = 48074 +a48075 = 48075 +a48076 = 48076 +a48077 = 48077 +a48078 = 48078 +a48079 = 48079 +a48080 = 48080 +a48081 = 48081 +a48082 = 48082 +a48083 = 48083 +a48084 = 48084 +a48085 = 48085 +a48086 = 48086 +a48087 = 48087 +a48088 = 48088 +a48089 = 48089 +a48090 = 48090 +a48091 = 48091 +a48092 = 48092 +a48093 = 48093 +a48094 = 48094 +a48095 = 48095 +a48096 = 48096 +a48097 = 48097 +a48098 = 48098 +a48099 = 48099 +a48100 = 48100 +a48101 = 48101 +a48102 = 48102 +a48103 = 48103 +a48104 = 48104 +a48105 = 48105 +a48106 = 48106 +a48107 = 48107 +a48108 = 48108 +a48109 = 48109 +a48110 = 48110 +a48111 = 48111 +a48112 = 48112 +a48113 = 48113 +a48114 = 48114 +a48115 = 48115 +a48116 = 48116 +a48117 = 48117 +a48118 = 48118 +a48119 = 48119 +a48120 = 48120 +a48121 = 48121 +a48122 = 48122 +a48123 = 48123 +a48124 = 48124 +a48125 = 48125 +a48126 = 48126 +a48127 = 48127 +a48128 = 48128 +a48129 = 48129 +a48130 = 48130 +a48131 = 48131 +a48132 = 48132 +a48133 = 48133 +a48134 = 48134 +a48135 = 48135 +a48136 = 48136 +a48137 = 48137 +a48138 = 48138 +a48139 = 48139 +a48140 = 48140 +a48141 = 48141 +a48142 = 48142 +a48143 = 48143 +a48144 = 48144 +a48145 = 48145 +a48146 = 48146 +a48147 = 48147 +a48148 = 48148 +a48149 = 48149 +a48150 = 48150 +a48151 = 48151 +a48152 = 48152 +a48153 = 48153 +a48154 = 48154 +a48155 = 48155 +a48156 = 48156 +a48157 = 48157 +a48158 = 48158 +a48159 = 48159 +a48160 = 48160 +a48161 = 48161 +a48162 = 48162 +a48163 = 48163 +a48164 = 48164 +a48165 = 48165 +a48166 = 48166 +a48167 = 48167 +a48168 = 48168 +a48169 = 48169 +a48170 = 48170 +a48171 = 48171 +a48172 = 48172 +a48173 = 48173 +a48174 = 48174 +a48175 = 48175 +a48176 = 48176 +a48177 = 48177 +a48178 = 48178 +a48179 = 48179 +a48180 = 48180 +a48181 = 48181 +a48182 = 48182 +a48183 = 48183 +a48184 = 48184 +a48185 = 48185 +a48186 = 48186 +a48187 = 48187 +a48188 = 48188 +a48189 = 48189 +a48190 = 48190 +a48191 = 48191 +a48192 = 48192 +a48193 = 48193 +a48194 = 48194 +a48195 = 48195 +a48196 = 48196 +a48197 = 48197 +a48198 = 48198 +a48199 = 48199 +a48200 = 48200 +a48201 = 48201 +a48202 = 48202 +a48203 = 48203 +a48204 = 48204 +a48205 = 48205 +a48206 = 48206 +a48207 = 48207 +a48208 = 48208 +a48209 = 48209 +a48210 = 48210 +a48211 = 48211 +a48212 = 48212 +a48213 = 48213 +a48214 = 48214 +a48215 = 48215 +a48216 = 48216 +a48217 = 48217 +a48218 = 48218 +a48219 = 48219 +a48220 = 48220 +a48221 = 48221 +a48222 = 48222 +a48223 = 48223 +a48224 = 48224 +a48225 = 48225 +a48226 = 48226 +a48227 = 48227 +a48228 = 48228 +a48229 = 48229 +a48230 = 48230 +a48231 = 48231 +a48232 = 48232 +a48233 = 48233 +a48234 = 48234 +a48235 = 48235 +a48236 = 48236 +a48237 = 48237 +a48238 = 48238 +a48239 = 48239 +a48240 = 48240 +a48241 = 48241 +a48242 = 48242 +a48243 = 48243 +a48244 = 48244 +a48245 = 48245 +a48246 = 48246 +a48247 = 48247 +a48248 = 48248 +a48249 = 48249 +a48250 = 48250 +a48251 = 48251 +a48252 = 48252 +a48253 = 48253 +a48254 = 48254 +a48255 = 48255 +a48256 = 48256 +a48257 = 48257 +a48258 = 48258 +a48259 = 48259 +a48260 = 48260 +a48261 = 48261 +a48262 = 48262 +a48263 = 48263 +a48264 = 48264 +a48265 = 48265 +a48266 = 48266 +a48267 = 48267 +a48268 = 48268 +a48269 = 48269 +a48270 = 48270 +a48271 = 48271 +a48272 = 48272 +a48273 = 48273 +a48274 = 48274 +a48275 = 48275 +a48276 = 48276 +a48277 = 48277 +a48278 = 48278 +a48279 = 48279 +a48280 = 48280 +a48281 = 48281 +a48282 = 48282 +a48283 = 48283 +a48284 = 48284 +a48285 = 48285 +a48286 = 48286 +a48287 = 48287 +a48288 = 48288 +a48289 = 48289 +a48290 = 48290 +a48291 = 48291 +a48292 = 48292 +a48293 = 48293 +a48294 = 48294 +a48295 = 48295 +a48296 = 48296 +a48297 = 48297 +a48298 = 48298 +a48299 = 48299 +a48300 = 48300 +a48301 = 48301 +a48302 = 48302 +a48303 = 48303 +a48304 = 48304 +a48305 = 48305 +a48306 = 48306 +a48307 = 48307 +a48308 = 48308 +a48309 = 48309 +a48310 = 48310 +a48311 = 48311 +a48312 = 48312 +a48313 = 48313 +a48314 = 48314 +a48315 = 48315 +a48316 = 48316 +a48317 = 48317 +a48318 = 48318 +a48319 = 48319 +a48320 = 48320 +a48321 = 48321 +a48322 = 48322 +a48323 = 48323 +a48324 = 48324 +a48325 = 48325 +a48326 = 48326 +a48327 = 48327 +a48328 = 48328 +a48329 = 48329 +a48330 = 48330 +a48331 = 48331 +a48332 = 48332 +a48333 = 48333 +a48334 = 48334 +a48335 = 48335 +a48336 = 48336 +a48337 = 48337 +a48338 = 48338 +a48339 = 48339 +a48340 = 48340 +a48341 = 48341 +a48342 = 48342 +a48343 = 48343 +a48344 = 48344 +a48345 = 48345 +a48346 = 48346 +a48347 = 48347 +a48348 = 48348 +a48349 = 48349 +a48350 = 48350 +a48351 = 48351 +a48352 = 48352 +a48353 = 48353 +a48354 = 48354 +a48355 = 48355 +a48356 = 48356 +a48357 = 48357 +a48358 = 48358 +a48359 = 48359 +a48360 = 48360 +a48361 = 48361 +a48362 = 48362 +a48363 = 48363 +a48364 = 48364 +a48365 = 48365 +a48366 = 48366 +a48367 = 48367 +a48368 = 48368 +a48369 = 48369 +a48370 = 48370 +a48371 = 48371 +a48372 = 48372 +a48373 = 48373 +a48374 = 48374 +a48375 = 48375 +a48376 = 48376 +a48377 = 48377 +a48378 = 48378 +a48379 = 48379 +a48380 = 48380 +a48381 = 48381 +a48382 = 48382 +a48383 = 48383 +a48384 = 48384 +a48385 = 48385 +a48386 = 48386 +a48387 = 48387 +a48388 = 48388 +a48389 = 48389 +a48390 = 48390 +a48391 = 48391 +a48392 = 48392 +a48393 = 48393 +a48394 = 48394 +a48395 = 48395 +a48396 = 48396 +a48397 = 48397 +a48398 = 48398 +a48399 = 48399 +a48400 = 48400 +a48401 = 48401 +a48402 = 48402 +a48403 = 48403 +a48404 = 48404 +a48405 = 48405 +a48406 = 48406 +a48407 = 48407 +a48408 = 48408 +a48409 = 48409 +a48410 = 48410 +a48411 = 48411 +a48412 = 48412 +a48413 = 48413 +a48414 = 48414 +a48415 = 48415 +a48416 = 48416 +a48417 = 48417 +a48418 = 48418 +a48419 = 48419 +a48420 = 48420 +a48421 = 48421 +a48422 = 48422 +a48423 = 48423 +a48424 = 48424 +a48425 = 48425 +a48426 = 48426 +a48427 = 48427 +a48428 = 48428 +a48429 = 48429 +a48430 = 48430 +a48431 = 48431 +a48432 = 48432 +a48433 = 48433 +a48434 = 48434 +a48435 = 48435 +a48436 = 48436 +a48437 = 48437 +a48438 = 48438 +a48439 = 48439 +a48440 = 48440 +a48441 = 48441 +a48442 = 48442 +a48443 = 48443 +a48444 = 48444 +a48445 = 48445 +a48446 = 48446 +a48447 = 48447 +a48448 = 48448 +a48449 = 48449 +a48450 = 48450 +a48451 = 48451 +a48452 = 48452 +a48453 = 48453 +a48454 = 48454 +a48455 = 48455 +a48456 = 48456 +a48457 = 48457 +a48458 = 48458 +a48459 = 48459 +a48460 = 48460 +a48461 = 48461 +a48462 = 48462 +a48463 = 48463 +a48464 = 48464 +a48465 = 48465 +a48466 = 48466 +a48467 = 48467 +a48468 = 48468 +a48469 = 48469 +a48470 = 48470 +a48471 = 48471 +a48472 = 48472 +a48473 = 48473 +a48474 = 48474 +a48475 = 48475 +a48476 = 48476 +a48477 = 48477 +a48478 = 48478 +a48479 = 48479 +a48480 = 48480 +a48481 = 48481 +a48482 = 48482 +a48483 = 48483 +a48484 = 48484 +a48485 = 48485 +a48486 = 48486 +a48487 = 48487 +a48488 = 48488 +a48489 = 48489 +a48490 = 48490 +a48491 = 48491 +a48492 = 48492 +a48493 = 48493 +a48494 = 48494 +a48495 = 48495 +a48496 = 48496 +a48497 = 48497 +a48498 = 48498 +a48499 = 48499 +a48500 = 48500 +a48501 = 48501 +a48502 = 48502 +a48503 = 48503 +a48504 = 48504 +a48505 = 48505 +a48506 = 48506 +a48507 = 48507 +a48508 = 48508 +a48509 = 48509 +a48510 = 48510 +a48511 = 48511 +a48512 = 48512 +a48513 = 48513 +a48514 = 48514 +a48515 = 48515 +a48516 = 48516 +a48517 = 48517 +a48518 = 48518 +a48519 = 48519 +a48520 = 48520 +a48521 = 48521 +a48522 = 48522 +a48523 = 48523 +a48524 = 48524 +a48525 = 48525 +a48526 = 48526 +a48527 = 48527 +a48528 = 48528 +a48529 = 48529 +a48530 = 48530 +a48531 = 48531 +a48532 = 48532 +a48533 = 48533 +a48534 = 48534 +a48535 = 48535 +a48536 = 48536 +a48537 = 48537 +a48538 = 48538 +a48539 = 48539 +a48540 = 48540 +a48541 = 48541 +a48542 = 48542 +a48543 = 48543 +a48544 = 48544 +a48545 = 48545 +a48546 = 48546 +a48547 = 48547 +a48548 = 48548 +a48549 = 48549 +a48550 = 48550 +a48551 = 48551 +a48552 = 48552 +a48553 = 48553 +a48554 = 48554 +a48555 = 48555 +a48556 = 48556 +a48557 = 48557 +a48558 = 48558 +a48559 = 48559 +a48560 = 48560 +a48561 = 48561 +a48562 = 48562 +a48563 = 48563 +a48564 = 48564 +a48565 = 48565 +a48566 = 48566 +a48567 = 48567 +a48568 = 48568 +a48569 = 48569 +a48570 = 48570 +a48571 = 48571 +a48572 = 48572 +a48573 = 48573 +a48574 = 48574 +a48575 = 48575 +a48576 = 48576 +a48577 = 48577 +a48578 = 48578 +a48579 = 48579 +a48580 = 48580 +a48581 = 48581 +a48582 = 48582 +a48583 = 48583 +a48584 = 48584 +a48585 = 48585 +a48586 = 48586 +a48587 = 48587 +a48588 = 48588 +a48589 = 48589 +a48590 = 48590 +a48591 = 48591 +a48592 = 48592 +a48593 = 48593 +a48594 = 48594 +a48595 = 48595 +a48596 = 48596 +a48597 = 48597 +a48598 = 48598 +a48599 = 48599 +a48600 = 48600 +a48601 = 48601 +a48602 = 48602 +a48603 = 48603 +a48604 = 48604 +a48605 = 48605 +a48606 = 48606 +a48607 = 48607 +a48608 = 48608 +a48609 = 48609 +a48610 = 48610 +a48611 = 48611 +a48612 = 48612 +a48613 = 48613 +a48614 = 48614 +a48615 = 48615 +a48616 = 48616 +a48617 = 48617 +a48618 = 48618 +a48619 = 48619 +a48620 = 48620 +a48621 = 48621 +a48622 = 48622 +a48623 = 48623 +a48624 = 48624 +a48625 = 48625 +a48626 = 48626 +a48627 = 48627 +a48628 = 48628 +a48629 = 48629 +a48630 = 48630 +a48631 = 48631 +a48632 = 48632 +a48633 = 48633 +a48634 = 48634 +a48635 = 48635 +a48636 = 48636 +a48637 = 48637 +a48638 = 48638 +a48639 = 48639 +a48640 = 48640 +a48641 = 48641 +a48642 = 48642 +a48643 = 48643 +a48644 = 48644 +a48645 = 48645 +a48646 = 48646 +a48647 = 48647 +a48648 = 48648 +a48649 = 48649 +a48650 = 48650 +a48651 = 48651 +a48652 = 48652 +a48653 = 48653 +a48654 = 48654 +a48655 = 48655 +a48656 = 48656 +a48657 = 48657 +a48658 = 48658 +a48659 = 48659 +a48660 = 48660 +a48661 = 48661 +a48662 = 48662 +a48663 = 48663 +a48664 = 48664 +a48665 = 48665 +a48666 = 48666 +a48667 = 48667 +a48668 = 48668 +a48669 = 48669 +a48670 = 48670 +a48671 = 48671 +a48672 = 48672 +a48673 = 48673 +a48674 = 48674 +a48675 = 48675 +a48676 = 48676 +a48677 = 48677 +a48678 = 48678 +a48679 = 48679 +a48680 = 48680 +a48681 = 48681 +a48682 = 48682 +a48683 = 48683 +a48684 = 48684 +a48685 = 48685 +a48686 = 48686 +a48687 = 48687 +a48688 = 48688 +a48689 = 48689 +a48690 = 48690 +a48691 = 48691 +a48692 = 48692 +a48693 = 48693 +a48694 = 48694 +a48695 = 48695 +a48696 = 48696 +a48697 = 48697 +a48698 = 48698 +a48699 = 48699 +a48700 = 48700 +a48701 = 48701 +a48702 = 48702 +a48703 = 48703 +a48704 = 48704 +a48705 = 48705 +a48706 = 48706 +a48707 = 48707 +a48708 = 48708 +a48709 = 48709 +a48710 = 48710 +a48711 = 48711 +a48712 = 48712 +a48713 = 48713 +a48714 = 48714 +a48715 = 48715 +a48716 = 48716 +a48717 = 48717 +a48718 = 48718 +a48719 = 48719 +a48720 = 48720 +a48721 = 48721 +a48722 = 48722 +a48723 = 48723 +a48724 = 48724 +a48725 = 48725 +a48726 = 48726 +a48727 = 48727 +a48728 = 48728 +a48729 = 48729 +a48730 = 48730 +a48731 = 48731 +a48732 = 48732 +a48733 = 48733 +a48734 = 48734 +a48735 = 48735 +a48736 = 48736 +a48737 = 48737 +a48738 = 48738 +a48739 = 48739 +a48740 = 48740 +a48741 = 48741 +a48742 = 48742 +a48743 = 48743 +a48744 = 48744 +a48745 = 48745 +a48746 = 48746 +a48747 = 48747 +a48748 = 48748 +a48749 = 48749 +a48750 = 48750 +a48751 = 48751 +a48752 = 48752 +a48753 = 48753 +a48754 = 48754 +a48755 = 48755 +a48756 = 48756 +a48757 = 48757 +a48758 = 48758 +a48759 = 48759 +a48760 = 48760 +a48761 = 48761 +a48762 = 48762 +a48763 = 48763 +a48764 = 48764 +a48765 = 48765 +a48766 = 48766 +a48767 = 48767 +a48768 = 48768 +a48769 = 48769 +a48770 = 48770 +a48771 = 48771 +a48772 = 48772 +a48773 = 48773 +a48774 = 48774 +a48775 = 48775 +a48776 = 48776 +a48777 = 48777 +a48778 = 48778 +a48779 = 48779 +a48780 = 48780 +a48781 = 48781 +a48782 = 48782 +a48783 = 48783 +a48784 = 48784 +a48785 = 48785 +a48786 = 48786 +a48787 = 48787 +a48788 = 48788 +a48789 = 48789 +a48790 = 48790 +a48791 = 48791 +a48792 = 48792 +a48793 = 48793 +a48794 = 48794 +a48795 = 48795 +a48796 = 48796 +a48797 = 48797 +a48798 = 48798 +a48799 = 48799 +a48800 = 48800 +a48801 = 48801 +a48802 = 48802 +a48803 = 48803 +a48804 = 48804 +a48805 = 48805 +a48806 = 48806 +a48807 = 48807 +a48808 = 48808 +a48809 = 48809 +a48810 = 48810 +a48811 = 48811 +a48812 = 48812 +a48813 = 48813 +a48814 = 48814 +a48815 = 48815 +a48816 = 48816 +a48817 = 48817 +a48818 = 48818 +a48819 = 48819 +a48820 = 48820 +a48821 = 48821 +a48822 = 48822 +a48823 = 48823 +a48824 = 48824 +a48825 = 48825 +a48826 = 48826 +a48827 = 48827 +a48828 = 48828 +a48829 = 48829 +a48830 = 48830 +a48831 = 48831 +a48832 = 48832 +a48833 = 48833 +a48834 = 48834 +a48835 = 48835 +a48836 = 48836 +a48837 = 48837 +a48838 = 48838 +a48839 = 48839 +a48840 = 48840 +a48841 = 48841 +a48842 = 48842 +a48843 = 48843 +a48844 = 48844 +a48845 = 48845 +a48846 = 48846 +a48847 = 48847 +a48848 = 48848 +a48849 = 48849 +a48850 = 48850 +a48851 = 48851 +a48852 = 48852 +a48853 = 48853 +a48854 = 48854 +a48855 = 48855 +a48856 = 48856 +a48857 = 48857 +a48858 = 48858 +a48859 = 48859 +a48860 = 48860 +a48861 = 48861 +a48862 = 48862 +a48863 = 48863 +a48864 = 48864 +a48865 = 48865 +a48866 = 48866 +a48867 = 48867 +a48868 = 48868 +a48869 = 48869 +a48870 = 48870 +a48871 = 48871 +a48872 = 48872 +a48873 = 48873 +a48874 = 48874 +a48875 = 48875 +a48876 = 48876 +a48877 = 48877 +a48878 = 48878 +a48879 = 48879 +a48880 = 48880 +a48881 = 48881 +a48882 = 48882 +a48883 = 48883 +a48884 = 48884 +a48885 = 48885 +a48886 = 48886 +a48887 = 48887 +a48888 = 48888 +a48889 = 48889 +a48890 = 48890 +a48891 = 48891 +a48892 = 48892 +a48893 = 48893 +a48894 = 48894 +a48895 = 48895 +a48896 = 48896 +a48897 = 48897 +a48898 = 48898 +a48899 = 48899 +a48900 = 48900 +a48901 = 48901 +a48902 = 48902 +a48903 = 48903 +a48904 = 48904 +a48905 = 48905 +a48906 = 48906 +a48907 = 48907 +a48908 = 48908 +a48909 = 48909 +a48910 = 48910 +a48911 = 48911 +a48912 = 48912 +a48913 = 48913 +a48914 = 48914 +a48915 = 48915 +a48916 = 48916 +a48917 = 48917 +a48918 = 48918 +a48919 = 48919 +a48920 = 48920 +a48921 = 48921 +a48922 = 48922 +a48923 = 48923 +a48924 = 48924 +a48925 = 48925 +a48926 = 48926 +a48927 = 48927 +a48928 = 48928 +a48929 = 48929 +a48930 = 48930 +a48931 = 48931 +a48932 = 48932 +a48933 = 48933 +a48934 = 48934 +a48935 = 48935 +a48936 = 48936 +a48937 = 48937 +a48938 = 48938 +a48939 = 48939 +a48940 = 48940 +a48941 = 48941 +a48942 = 48942 +a48943 = 48943 +a48944 = 48944 +a48945 = 48945 +a48946 = 48946 +a48947 = 48947 +a48948 = 48948 +a48949 = 48949 +a48950 = 48950 +a48951 = 48951 +a48952 = 48952 +a48953 = 48953 +a48954 = 48954 +a48955 = 48955 +a48956 = 48956 +a48957 = 48957 +a48958 = 48958 +a48959 = 48959 +a48960 = 48960 +a48961 = 48961 +a48962 = 48962 +a48963 = 48963 +a48964 = 48964 +a48965 = 48965 +a48966 = 48966 +a48967 = 48967 +a48968 = 48968 +a48969 = 48969 +a48970 = 48970 +a48971 = 48971 +a48972 = 48972 +a48973 = 48973 +a48974 = 48974 +a48975 = 48975 +a48976 = 48976 +a48977 = 48977 +a48978 = 48978 +a48979 = 48979 +a48980 = 48980 +a48981 = 48981 +a48982 = 48982 +a48983 = 48983 +a48984 = 48984 +a48985 = 48985 +a48986 = 48986 +a48987 = 48987 +a48988 = 48988 +a48989 = 48989 +a48990 = 48990 +a48991 = 48991 +a48992 = 48992 +a48993 = 48993 +a48994 = 48994 +a48995 = 48995 +a48996 = 48996 +a48997 = 48997 +a48998 = 48998 +a48999 = 48999 +a49000 = 49000 +a49001 = 49001 +a49002 = 49002 +a49003 = 49003 +a49004 = 49004 +a49005 = 49005 +a49006 = 49006 +a49007 = 49007 +a49008 = 49008 +a49009 = 49009 +a49010 = 49010 +a49011 = 49011 +a49012 = 49012 +a49013 = 49013 +a49014 = 49014 +a49015 = 49015 +a49016 = 49016 +a49017 = 49017 +a49018 = 49018 +a49019 = 49019 +a49020 = 49020 +a49021 = 49021 +a49022 = 49022 +a49023 = 49023 +a49024 = 49024 +a49025 = 49025 +a49026 = 49026 +a49027 = 49027 +a49028 = 49028 +a49029 = 49029 +a49030 = 49030 +a49031 = 49031 +a49032 = 49032 +a49033 = 49033 +a49034 = 49034 +a49035 = 49035 +a49036 = 49036 +a49037 = 49037 +a49038 = 49038 +a49039 = 49039 +a49040 = 49040 +a49041 = 49041 +a49042 = 49042 +a49043 = 49043 +a49044 = 49044 +a49045 = 49045 +a49046 = 49046 +a49047 = 49047 +a49048 = 49048 +a49049 = 49049 +a49050 = 49050 +a49051 = 49051 +a49052 = 49052 +a49053 = 49053 +a49054 = 49054 +a49055 = 49055 +a49056 = 49056 +a49057 = 49057 +a49058 = 49058 +a49059 = 49059 +a49060 = 49060 +a49061 = 49061 +a49062 = 49062 +a49063 = 49063 +a49064 = 49064 +a49065 = 49065 +a49066 = 49066 +a49067 = 49067 +a49068 = 49068 +a49069 = 49069 +a49070 = 49070 +a49071 = 49071 +a49072 = 49072 +a49073 = 49073 +a49074 = 49074 +a49075 = 49075 +a49076 = 49076 +a49077 = 49077 +a49078 = 49078 +a49079 = 49079 +a49080 = 49080 +a49081 = 49081 +a49082 = 49082 +a49083 = 49083 +a49084 = 49084 +a49085 = 49085 +a49086 = 49086 +a49087 = 49087 +a49088 = 49088 +a49089 = 49089 +a49090 = 49090 +a49091 = 49091 +a49092 = 49092 +a49093 = 49093 +a49094 = 49094 +a49095 = 49095 +a49096 = 49096 +a49097 = 49097 +a49098 = 49098 +a49099 = 49099 +a49100 = 49100 +a49101 = 49101 +a49102 = 49102 +a49103 = 49103 +a49104 = 49104 +a49105 = 49105 +a49106 = 49106 +a49107 = 49107 +a49108 = 49108 +a49109 = 49109 +a49110 = 49110 +a49111 = 49111 +a49112 = 49112 +a49113 = 49113 +a49114 = 49114 +a49115 = 49115 +a49116 = 49116 +a49117 = 49117 +a49118 = 49118 +a49119 = 49119 +a49120 = 49120 +a49121 = 49121 +a49122 = 49122 +a49123 = 49123 +a49124 = 49124 +a49125 = 49125 +a49126 = 49126 +a49127 = 49127 +a49128 = 49128 +a49129 = 49129 +a49130 = 49130 +a49131 = 49131 +a49132 = 49132 +a49133 = 49133 +a49134 = 49134 +a49135 = 49135 +a49136 = 49136 +a49137 = 49137 +a49138 = 49138 +a49139 = 49139 +a49140 = 49140 +a49141 = 49141 +a49142 = 49142 +a49143 = 49143 +a49144 = 49144 +a49145 = 49145 +a49146 = 49146 +a49147 = 49147 +a49148 = 49148 +a49149 = 49149 +a49150 = 49150 +a49151 = 49151 +a49152 = 49152 +a49153 = 49153 +a49154 = 49154 +a49155 = 49155 +a49156 = 49156 +a49157 = 49157 +a49158 = 49158 +a49159 = 49159 +a49160 = 49160 +a49161 = 49161 +a49162 = 49162 +a49163 = 49163 +a49164 = 49164 +a49165 = 49165 +a49166 = 49166 +a49167 = 49167 +a49168 = 49168 +a49169 = 49169 +a49170 = 49170 +a49171 = 49171 +a49172 = 49172 +a49173 = 49173 +a49174 = 49174 +a49175 = 49175 +a49176 = 49176 +a49177 = 49177 +a49178 = 49178 +a49179 = 49179 +a49180 = 49180 +a49181 = 49181 +a49182 = 49182 +a49183 = 49183 +a49184 = 49184 +a49185 = 49185 +a49186 = 49186 +a49187 = 49187 +a49188 = 49188 +a49189 = 49189 +a49190 = 49190 +a49191 = 49191 +a49192 = 49192 +a49193 = 49193 +a49194 = 49194 +a49195 = 49195 +a49196 = 49196 +a49197 = 49197 +a49198 = 49198 +a49199 = 49199 +a49200 = 49200 +a49201 = 49201 +a49202 = 49202 +a49203 = 49203 +a49204 = 49204 +a49205 = 49205 +a49206 = 49206 +a49207 = 49207 +a49208 = 49208 +a49209 = 49209 +a49210 = 49210 +a49211 = 49211 +a49212 = 49212 +a49213 = 49213 +a49214 = 49214 +a49215 = 49215 +a49216 = 49216 +a49217 = 49217 +a49218 = 49218 +a49219 = 49219 +a49220 = 49220 +a49221 = 49221 +a49222 = 49222 +a49223 = 49223 +a49224 = 49224 +a49225 = 49225 +a49226 = 49226 +a49227 = 49227 +a49228 = 49228 +a49229 = 49229 +a49230 = 49230 +a49231 = 49231 +a49232 = 49232 +a49233 = 49233 +a49234 = 49234 +a49235 = 49235 +a49236 = 49236 +a49237 = 49237 +a49238 = 49238 +a49239 = 49239 +a49240 = 49240 +a49241 = 49241 +a49242 = 49242 +a49243 = 49243 +a49244 = 49244 +a49245 = 49245 +a49246 = 49246 +a49247 = 49247 +a49248 = 49248 +a49249 = 49249 +a49250 = 49250 +a49251 = 49251 +a49252 = 49252 +a49253 = 49253 +a49254 = 49254 +a49255 = 49255 +a49256 = 49256 +a49257 = 49257 +a49258 = 49258 +a49259 = 49259 +a49260 = 49260 +a49261 = 49261 +a49262 = 49262 +a49263 = 49263 +a49264 = 49264 +a49265 = 49265 +a49266 = 49266 +a49267 = 49267 +a49268 = 49268 +a49269 = 49269 +a49270 = 49270 +a49271 = 49271 +a49272 = 49272 +a49273 = 49273 +a49274 = 49274 +a49275 = 49275 +a49276 = 49276 +a49277 = 49277 +a49278 = 49278 +a49279 = 49279 +a49280 = 49280 +a49281 = 49281 +a49282 = 49282 +a49283 = 49283 +a49284 = 49284 +a49285 = 49285 +a49286 = 49286 +a49287 = 49287 +a49288 = 49288 +a49289 = 49289 +a49290 = 49290 +a49291 = 49291 +a49292 = 49292 +a49293 = 49293 +a49294 = 49294 +a49295 = 49295 +a49296 = 49296 +a49297 = 49297 +a49298 = 49298 +a49299 = 49299 +a49300 = 49300 +a49301 = 49301 +a49302 = 49302 +a49303 = 49303 +a49304 = 49304 +a49305 = 49305 +a49306 = 49306 +a49307 = 49307 +a49308 = 49308 +a49309 = 49309 +a49310 = 49310 +a49311 = 49311 +a49312 = 49312 +a49313 = 49313 +a49314 = 49314 +a49315 = 49315 +a49316 = 49316 +a49317 = 49317 +a49318 = 49318 +a49319 = 49319 +a49320 = 49320 +a49321 = 49321 +a49322 = 49322 +a49323 = 49323 +a49324 = 49324 +a49325 = 49325 +a49326 = 49326 +a49327 = 49327 +a49328 = 49328 +a49329 = 49329 +a49330 = 49330 +a49331 = 49331 +a49332 = 49332 +a49333 = 49333 +a49334 = 49334 +a49335 = 49335 +a49336 = 49336 +a49337 = 49337 +a49338 = 49338 +a49339 = 49339 +a49340 = 49340 +a49341 = 49341 +a49342 = 49342 +a49343 = 49343 +a49344 = 49344 +a49345 = 49345 +a49346 = 49346 +a49347 = 49347 +a49348 = 49348 +a49349 = 49349 +a49350 = 49350 +a49351 = 49351 +a49352 = 49352 +a49353 = 49353 +a49354 = 49354 +a49355 = 49355 +a49356 = 49356 +a49357 = 49357 +a49358 = 49358 +a49359 = 49359 +a49360 = 49360 +a49361 = 49361 +a49362 = 49362 +a49363 = 49363 +a49364 = 49364 +a49365 = 49365 +a49366 = 49366 +a49367 = 49367 +a49368 = 49368 +a49369 = 49369 +a49370 = 49370 +a49371 = 49371 +a49372 = 49372 +a49373 = 49373 +a49374 = 49374 +a49375 = 49375 +a49376 = 49376 +a49377 = 49377 +a49378 = 49378 +a49379 = 49379 +a49380 = 49380 +a49381 = 49381 +a49382 = 49382 +a49383 = 49383 +a49384 = 49384 +a49385 = 49385 +a49386 = 49386 +a49387 = 49387 +a49388 = 49388 +a49389 = 49389 +a49390 = 49390 +a49391 = 49391 +a49392 = 49392 +a49393 = 49393 +a49394 = 49394 +a49395 = 49395 +a49396 = 49396 +a49397 = 49397 +a49398 = 49398 +a49399 = 49399 +a49400 = 49400 +a49401 = 49401 +a49402 = 49402 +a49403 = 49403 +a49404 = 49404 +a49405 = 49405 +a49406 = 49406 +a49407 = 49407 +a49408 = 49408 +a49409 = 49409 +a49410 = 49410 +a49411 = 49411 +a49412 = 49412 +a49413 = 49413 +a49414 = 49414 +a49415 = 49415 +a49416 = 49416 +a49417 = 49417 +a49418 = 49418 +a49419 = 49419 +a49420 = 49420 +a49421 = 49421 +a49422 = 49422 +a49423 = 49423 +a49424 = 49424 +a49425 = 49425 +a49426 = 49426 +a49427 = 49427 +a49428 = 49428 +a49429 = 49429 +a49430 = 49430 +a49431 = 49431 +a49432 = 49432 +a49433 = 49433 +a49434 = 49434 +a49435 = 49435 +a49436 = 49436 +a49437 = 49437 +a49438 = 49438 +a49439 = 49439 +a49440 = 49440 +a49441 = 49441 +a49442 = 49442 +a49443 = 49443 +a49444 = 49444 +a49445 = 49445 +a49446 = 49446 +a49447 = 49447 +a49448 = 49448 +a49449 = 49449 +a49450 = 49450 +a49451 = 49451 +a49452 = 49452 +a49453 = 49453 +a49454 = 49454 +a49455 = 49455 +a49456 = 49456 +a49457 = 49457 +a49458 = 49458 +a49459 = 49459 +a49460 = 49460 +a49461 = 49461 +a49462 = 49462 +a49463 = 49463 +a49464 = 49464 +a49465 = 49465 +a49466 = 49466 +a49467 = 49467 +a49468 = 49468 +a49469 = 49469 +a49470 = 49470 +a49471 = 49471 +a49472 = 49472 +a49473 = 49473 +a49474 = 49474 +a49475 = 49475 +a49476 = 49476 +a49477 = 49477 +a49478 = 49478 +a49479 = 49479 +a49480 = 49480 +a49481 = 49481 +a49482 = 49482 +a49483 = 49483 +a49484 = 49484 +a49485 = 49485 +a49486 = 49486 +a49487 = 49487 +a49488 = 49488 +a49489 = 49489 +a49490 = 49490 +a49491 = 49491 +a49492 = 49492 +a49493 = 49493 +a49494 = 49494 +a49495 = 49495 +a49496 = 49496 +a49497 = 49497 +a49498 = 49498 +a49499 = 49499 +a49500 = 49500 +a49501 = 49501 +a49502 = 49502 +a49503 = 49503 +a49504 = 49504 +a49505 = 49505 +a49506 = 49506 +a49507 = 49507 +a49508 = 49508 +a49509 = 49509 +a49510 = 49510 +a49511 = 49511 +a49512 = 49512 +a49513 = 49513 +a49514 = 49514 +a49515 = 49515 +a49516 = 49516 +a49517 = 49517 +a49518 = 49518 +a49519 = 49519 +a49520 = 49520 +a49521 = 49521 +a49522 = 49522 +a49523 = 49523 +a49524 = 49524 +a49525 = 49525 +a49526 = 49526 +a49527 = 49527 +a49528 = 49528 +a49529 = 49529 +a49530 = 49530 +a49531 = 49531 +a49532 = 49532 +a49533 = 49533 +a49534 = 49534 +a49535 = 49535 +a49536 = 49536 +a49537 = 49537 +a49538 = 49538 +a49539 = 49539 +a49540 = 49540 +a49541 = 49541 +a49542 = 49542 +a49543 = 49543 +a49544 = 49544 +a49545 = 49545 +a49546 = 49546 +a49547 = 49547 +a49548 = 49548 +a49549 = 49549 +a49550 = 49550 +a49551 = 49551 +a49552 = 49552 +a49553 = 49553 +a49554 = 49554 +a49555 = 49555 +a49556 = 49556 +a49557 = 49557 +a49558 = 49558 +a49559 = 49559 +a49560 = 49560 +a49561 = 49561 +a49562 = 49562 +a49563 = 49563 +a49564 = 49564 +a49565 = 49565 +a49566 = 49566 +a49567 = 49567 +a49568 = 49568 +a49569 = 49569 +a49570 = 49570 +a49571 = 49571 +a49572 = 49572 +a49573 = 49573 +a49574 = 49574 +a49575 = 49575 +a49576 = 49576 +a49577 = 49577 +a49578 = 49578 +a49579 = 49579 +a49580 = 49580 +a49581 = 49581 +a49582 = 49582 +a49583 = 49583 +a49584 = 49584 +a49585 = 49585 +a49586 = 49586 +a49587 = 49587 +a49588 = 49588 +a49589 = 49589 +a49590 = 49590 +a49591 = 49591 +a49592 = 49592 +a49593 = 49593 +a49594 = 49594 +a49595 = 49595 +a49596 = 49596 +a49597 = 49597 +a49598 = 49598 +a49599 = 49599 +a49600 = 49600 +a49601 = 49601 +a49602 = 49602 +a49603 = 49603 +a49604 = 49604 +a49605 = 49605 +a49606 = 49606 +a49607 = 49607 +a49608 = 49608 +a49609 = 49609 +a49610 = 49610 +a49611 = 49611 +a49612 = 49612 +a49613 = 49613 +a49614 = 49614 +a49615 = 49615 +a49616 = 49616 +a49617 = 49617 +a49618 = 49618 +a49619 = 49619 +a49620 = 49620 +a49621 = 49621 +a49622 = 49622 +a49623 = 49623 +a49624 = 49624 +a49625 = 49625 +a49626 = 49626 +a49627 = 49627 +a49628 = 49628 +a49629 = 49629 +a49630 = 49630 +a49631 = 49631 +a49632 = 49632 +a49633 = 49633 +a49634 = 49634 +a49635 = 49635 +a49636 = 49636 +a49637 = 49637 +a49638 = 49638 +a49639 = 49639 +a49640 = 49640 +a49641 = 49641 +a49642 = 49642 +a49643 = 49643 +a49644 = 49644 +a49645 = 49645 +a49646 = 49646 +a49647 = 49647 +a49648 = 49648 +a49649 = 49649 +a49650 = 49650 +a49651 = 49651 +a49652 = 49652 +a49653 = 49653 +a49654 = 49654 +a49655 = 49655 +a49656 = 49656 +a49657 = 49657 +a49658 = 49658 +a49659 = 49659 +a49660 = 49660 +a49661 = 49661 +a49662 = 49662 +a49663 = 49663 +a49664 = 49664 +a49665 = 49665 +a49666 = 49666 +a49667 = 49667 +a49668 = 49668 +a49669 = 49669 +a49670 = 49670 +a49671 = 49671 +a49672 = 49672 +a49673 = 49673 +a49674 = 49674 +a49675 = 49675 +a49676 = 49676 +a49677 = 49677 +a49678 = 49678 +a49679 = 49679 +a49680 = 49680 +a49681 = 49681 +a49682 = 49682 +a49683 = 49683 +a49684 = 49684 +a49685 = 49685 +a49686 = 49686 +a49687 = 49687 +a49688 = 49688 +a49689 = 49689 +a49690 = 49690 +a49691 = 49691 +a49692 = 49692 +a49693 = 49693 +a49694 = 49694 +a49695 = 49695 +a49696 = 49696 +a49697 = 49697 +a49698 = 49698 +a49699 = 49699 +a49700 = 49700 +a49701 = 49701 +a49702 = 49702 +a49703 = 49703 +a49704 = 49704 +a49705 = 49705 +a49706 = 49706 +a49707 = 49707 +a49708 = 49708 +a49709 = 49709 +a49710 = 49710 +a49711 = 49711 +a49712 = 49712 +a49713 = 49713 +a49714 = 49714 +a49715 = 49715 +a49716 = 49716 +a49717 = 49717 +a49718 = 49718 +a49719 = 49719 +a49720 = 49720 +a49721 = 49721 +a49722 = 49722 +a49723 = 49723 +a49724 = 49724 +a49725 = 49725 +a49726 = 49726 +a49727 = 49727 +a49728 = 49728 +a49729 = 49729 +a49730 = 49730 +a49731 = 49731 +a49732 = 49732 +a49733 = 49733 +a49734 = 49734 +a49735 = 49735 +a49736 = 49736 +a49737 = 49737 +a49738 = 49738 +a49739 = 49739 +a49740 = 49740 +a49741 = 49741 +a49742 = 49742 +a49743 = 49743 +a49744 = 49744 +a49745 = 49745 +a49746 = 49746 +a49747 = 49747 +a49748 = 49748 +a49749 = 49749 +a49750 = 49750 +a49751 = 49751 +a49752 = 49752 +a49753 = 49753 +a49754 = 49754 +a49755 = 49755 +a49756 = 49756 +a49757 = 49757 +a49758 = 49758 +a49759 = 49759 +a49760 = 49760 +a49761 = 49761 +a49762 = 49762 +a49763 = 49763 +a49764 = 49764 +a49765 = 49765 +a49766 = 49766 +a49767 = 49767 +a49768 = 49768 +a49769 = 49769 +a49770 = 49770 +a49771 = 49771 +a49772 = 49772 +a49773 = 49773 +a49774 = 49774 +a49775 = 49775 +a49776 = 49776 +a49777 = 49777 +a49778 = 49778 +a49779 = 49779 +a49780 = 49780 +a49781 = 49781 +a49782 = 49782 +a49783 = 49783 +a49784 = 49784 +a49785 = 49785 +a49786 = 49786 +a49787 = 49787 +a49788 = 49788 +a49789 = 49789 +a49790 = 49790 +a49791 = 49791 +a49792 = 49792 +a49793 = 49793 +a49794 = 49794 +a49795 = 49795 +a49796 = 49796 +a49797 = 49797 +a49798 = 49798 +a49799 = 49799 +a49800 = 49800 +a49801 = 49801 +a49802 = 49802 +a49803 = 49803 +a49804 = 49804 +a49805 = 49805 +a49806 = 49806 +a49807 = 49807 +a49808 = 49808 +a49809 = 49809 +a49810 = 49810 +a49811 = 49811 +a49812 = 49812 +a49813 = 49813 +a49814 = 49814 +a49815 = 49815 +a49816 = 49816 +a49817 = 49817 +a49818 = 49818 +a49819 = 49819 +a49820 = 49820 +a49821 = 49821 +a49822 = 49822 +a49823 = 49823 +a49824 = 49824 +a49825 = 49825 +a49826 = 49826 +a49827 = 49827 +a49828 = 49828 +a49829 = 49829 +a49830 = 49830 +a49831 = 49831 +a49832 = 49832 +a49833 = 49833 +a49834 = 49834 +a49835 = 49835 +a49836 = 49836 +a49837 = 49837 +a49838 = 49838 +a49839 = 49839 +a49840 = 49840 +a49841 = 49841 +a49842 = 49842 +a49843 = 49843 +a49844 = 49844 +a49845 = 49845 +a49846 = 49846 +a49847 = 49847 +a49848 = 49848 +a49849 = 49849 +a49850 = 49850 +a49851 = 49851 +a49852 = 49852 +a49853 = 49853 +a49854 = 49854 +a49855 = 49855 +a49856 = 49856 +a49857 = 49857 +a49858 = 49858 +a49859 = 49859 +a49860 = 49860 +a49861 = 49861 +a49862 = 49862 +a49863 = 49863 +a49864 = 49864 +a49865 = 49865 +a49866 = 49866 +a49867 = 49867 +a49868 = 49868 +a49869 = 49869 +a49870 = 49870 +a49871 = 49871 +a49872 = 49872 +a49873 = 49873 +a49874 = 49874 +a49875 = 49875 +a49876 = 49876 +a49877 = 49877 +a49878 = 49878 +a49879 = 49879 +a49880 = 49880 +a49881 = 49881 +a49882 = 49882 +a49883 = 49883 +a49884 = 49884 +a49885 = 49885 +a49886 = 49886 +a49887 = 49887 +a49888 = 49888 +a49889 = 49889 +a49890 = 49890 +a49891 = 49891 +a49892 = 49892 +a49893 = 49893 +a49894 = 49894 +a49895 = 49895 +a49896 = 49896 +a49897 = 49897 +a49898 = 49898 +a49899 = 49899 +a49900 = 49900 +a49901 = 49901 +a49902 = 49902 +a49903 = 49903 +a49904 = 49904 +a49905 = 49905 +a49906 = 49906 +a49907 = 49907 +a49908 = 49908 +a49909 = 49909 +a49910 = 49910 +a49911 = 49911 +a49912 = 49912 +a49913 = 49913 +a49914 = 49914 +a49915 = 49915 +a49916 = 49916 +a49917 = 49917 +a49918 = 49918 +a49919 = 49919 +a49920 = 49920 +a49921 = 49921 +a49922 = 49922 +a49923 = 49923 +a49924 = 49924 +a49925 = 49925 +a49926 = 49926 +a49927 = 49927 +a49928 = 49928 +a49929 = 49929 +a49930 = 49930 +a49931 = 49931 +a49932 = 49932 +a49933 = 49933 +a49934 = 49934 +a49935 = 49935 +a49936 = 49936 +a49937 = 49937 +a49938 = 49938 +a49939 = 49939 +a49940 = 49940 +a49941 = 49941 +a49942 = 49942 +a49943 = 49943 +a49944 = 49944 +a49945 = 49945 +a49946 = 49946 +a49947 = 49947 +a49948 = 49948 +a49949 = 49949 +a49950 = 49950 +a49951 = 49951 +a49952 = 49952 +a49953 = 49953 +a49954 = 49954 +a49955 = 49955 +a49956 = 49956 +a49957 = 49957 +a49958 = 49958 +a49959 = 49959 +a49960 = 49960 +a49961 = 49961 +a49962 = 49962 +a49963 = 49963 +a49964 = 49964 +a49965 = 49965 +a49966 = 49966 +a49967 = 49967 +a49968 = 49968 +a49969 = 49969 +a49970 = 49970 +a49971 = 49971 +a49972 = 49972 +a49973 = 49973 +a49974 = 49974 +a49975 = 49975 +a49976 = 49976 +a49977 = 49977 +a49978 = 49978 +a49979 = 49979 +a49980 = 49980 +a49981 = 49981 +a49982 = 49982 +a49983 = 49983 +a49984 = 49984 +a49985 = 49985 +a49986 = 49986 +a49987 = 49987 +a49988 = 49988 +a49989 = 49989 +a49990 = 49990 +a49991 = 49991 +a49992 = 49992 +a49993 = 49993 +a49994 = 49994 +a49995 = 49995 +a49996 = 49996 +a49997 = 49997 +a49998 = 49998 +a49999 = 49999 +a50000 = 50000 +a50001 = 50001 +a50002 = 50002 +a50003 = 50003 +a50004 = 50004 +a50005 = 50005 +a50006 = 50006 +a50007 = 50007 +a50008 = 50008 +a50009 = 50009 +a50010 = 50010 +a50011 = 50011 +a50012 = 50012 +a50013 = 50013 +a50014 = 50014 +a50015 = 50015 +a50016 = 50016 +a50017 = 50017 +a50018 = 50018 +a50019 = 50019 +a50020 = 50020 +a50021 = 50021 +a50022 = 50022 +a50023 = 50023 +a50024 = 50024 +a50025 = 50025 +a50026 = 50026 +a50027 = 50027 +a50028 = 50028 +a50029 = 50029 +a50030 = 50030 +a50031 = 50031 +a50032 = 50032 +a50033 = 50033 +a50034 = 50034 +a50035 = 50035 +a50036 = 50036 +a50037 = 50037 +a50038 = 50038 +a50039 = 50039 +a50040 = 50040 +a50041 = 50041 +a50042 = 50042 +a50043 = 50043 +a50044 = 50044 +a50045 = 50045 +a50046 = 50046 +a50047 = 50047 +a50048 = 50048 +a50049 = 50049 +a50050 = 50050 +a50051 = 50051 +a50052 = 50052 +a50053 = 50053 +a50054 = 50054 +a50055 = 50055 +a50056 = 50056 +a50057 = 50057 +a50058 = 50058 +a50059 = 50059 +a50060 = 50060 +a50061 = 50061 +a50062 = 50062 +a50063 = 50063 +a50064 = 50064 +a50065 = 50065 +a50066 = 50066 +a50067 = 50067 +a50068 = 50068 +a50069 = 50069 +a50070 = 50070 +a50071 = 50071 +a50072 = 50072 +a50073 = 50073 +a50074 = 50074 +a50075 = 50075 +a50076 = 50076 +a50077 = 50077 +a50078 = 50078 +a50079 = 50079 +a50080 = 50080 +a50081 = 50081 +a50082 = 50082 +a50083 = 50083 +a50084 = 50084 +a50085 = 50085 +a50086 = 50086 +a50087 = 50087 +a50088 = 50088 +a50089 = 50089 +a50090 = 50090 +a50091 = 50091 +a50092 = 50092 +a50093 = 50093 +a50094 = 50094 +a50095 = 50095 +a50096 = 50096 +a50097 = 50097 +a50098 = 50098 +a50099 = 50099 +a50100 = 50100 +a50101 = 50101 +a50102 = 50102 +a50103 = 50103 +a50104 = 50104 +a50105 = 50105 +a50106 = 50106 +a50107 = 50107 +a50108 = 50108 +a50109 = 50109 +a50110 = 50110 +a50111 = 50111 +a50112 = 50112 +a50113 = 50113 +a50114 = 50114 +a50115 = 50115 +a50116 = 50116 +a50117 = 50117 +a50118 = 50118 +a50119 = 50119 +a50120 = 50120 +a50121 = 50121 +a50122 = 50122 +a50123 = 50123 +a50124 = 50124 +a50125 = 50125 +a50126 = 50126 +a50127 = 50127 +a50128 = 50128 +a50129 = 50129 +a50130 = 50130 +a50131 = 50131 +a50132 = 50132 +a50133 = 50133 +a50134 = 50134 +a50135 = 50135 +a50136 = 50136 +a50137 = 50137 +a50138 = 50138 +a50139 = 50139 +a50140 = 50140 +a50141 = 50141 +a50142 = 50142 +a50143 = 50143 +a50144 = 50144 +a50145 = 50145 +a50146 = 50146 +a50147 = 50147 +a50148 = 50148 +a50149 = 50149 +a50150 = 50150 +a50151 = 50151 +a50152 = 50152 +a50153 = 50153 +a50154 = 50154 +a50155 = 50155 +a50156 = 50156 +a50157 = 50157 +a50158 = 50158 +a50159 = 50159 +a50160 = 50160 +a50161 = 50161 +a50162 = 50162 +a50163 = 50163 +a50164 = 50164 +a50165 = 50165 +a50166 = 50166 +a50167 = 50167 +a50168 = 50168 +a50169 = 50169 +a50170 = 50170 +a50171 = 50171 +a50172 = 50172 +a50173 = 50173 +a50174 = 50174 +a50175 = 50175 +a50176 = 50176 +a50177 = 50177 +a50178 = 50178 +a50179 = 50179 +a50180 = 50180 +a50181 = 50181 +a50182 = 50182 +a50183 = 50183 +a50184 = 50184 +a50185 = 50185 +a50186 = 50186 +a50187 = 50187 +a50188 = 50188 +a50189 = 50189 +a50190 = 50190 +a50191 = 50191 +a50192 = 50192 +a50193 = 50193 +a50194 = 50194 +a50195 = 50195 +a50196 = 50196 +a50197 = 50197 +a50198 = 50198 +a50199 = 50199 +a50200 = 50200 +a50201 = 50201 +a50202 = 50202 +a50203 = 50203 +a50204 = 50204 +a50205 = 50205 +a50206 = 50206 +a50207 = 50207 +a50208 = 50208 +a50209 = 50209 +a50210 = 50210 +a50211 = 50211 +a50212 = 50212 +a50213 = 50213 +a50214 = 50214 +a50215 = 50215 +a50216 = 50216 +a50217 = 50217 +a50218 = 50218 +a50219 = 50219 +a50220 = 50220 +a50221 = 50221 +a50222 = 50222 +a50223 = 50223 +a50224 = 50224 +a50225 = 50225 +a50226 = 50226 +a50227 = 50227 +a50228 = 50228 +a50229 = 50229 +a50230 = 50230 +a50231 = 50231 +a50232 = 50232 +a50233 = 50233 +a50234 = 50234 +a50235 = 50235 +a50236 = 50236 +a50237 = 50237 +a50238 = 50238 +a50239 = 50239 +a50240 = 50240 +a50241 = 50241 +a50242 = 50242 +a50243 = 50243 +a50244 = 50244 +a50245 = 50245 +a50246 = 50246 +a50247 = 50247 +a50248 = 50248 +a50249 = 50249 +a50250 = 50250 +a50251 = 50251 +a50252 = 50252 +a50253 = 50253 +a50254 = 50254 +a50255 = 50255 +a50256 = 50256 +a50257 = 50257 +a50258 = 50258 +a50259 = 50259 +a50260 = 50260 +a50261 = 50261 +a50262 = 50262 +a50263 = 50263 +a50264 = 50264 +a50265 = 50265 +a50266 = 50266 +a50267 = 50267 +a50268 = 50268 +a50269 = 50269 +a50270 = 50270 +a50271 = 50271 +a50272 = 50272 +a50273 = 50273 +a50274 = 50274 +a50275 = 50275 +a50276 = 50276 +a50277 = 50277 +a50278 = 50278 +a50279 = 50279 +a50280 = 50280 +a50281 = 50281 +a50282 = 50282 +a50283 = 50283 +a50284 = 50284 +a50285 = 50285 +a50286 = 50286 +a50287 = 50287 +a50288 = 50288 +a50289 = 50289 +a50290 = 50290 +a50291 = 50291 +a50292 = 50292 +a50293 = 50293 +a50294 = 50294 +a50295 = 50295 +a50296 = 50296 +a50297 = 50297 +a50298 = 50298 +a50299 = 50299 +a50300 = 50300 +a50301 = 50301 +a50302 = 50302 +a50303 = 50303 +a50304 = 50304 +a50305 = 50305 +a50306 = 50306 +a50307 = 50307 +a50308 = 50308 +a50309 = 50309 +a50310 = 50310 +a50311 = 50311 +a50312 = 50312 +a50313 = 50313 +a50314 = 50314 +a50315 = 50315 +a50316 = 50316 +a50317 = 50317 +a50318 = 50318 +a50319 = 50319 +a50320 = 50320 +a50321 = 50321 +a50322 = 50322 +a50323 = 50323 +a50324 = 50324 +a50325 = 50325 +a50326 = 50326 +a50327 = 50327 +a50328 = 50328 +a50329 = 50329 +a50330 = 50330 +a50331 = 50331 +a50332 = 50332 +a50333 = 50333 +a50334 = 50334 +a50335 = 50335 +a50336 = 50336 +a50337 = 50337 +a50338 = 50338 +a50339 = 50339 +a50340 = 50340 +a50341 = 50341 +a50342 = 50342 +a50343 = 50343 +a50344 = 50344 +a50345 = 50345 +a50346 = 50346 +a50347 = 50347 +a50348 = 50348 +a50349 = 50349 +a50350 = 50350 +a50351 = 50351 +a50352 = 50352 +a50353 = 50353 +a50354 = 50354 +a50355 = 50355 +a50356 = 50356 +a50357 = 50357 +a50358 = 50358 +a50359 = 50359 +a50360 = 50360 +a50361 = 50361 +a50362 = 50362 +a50363 = 50363 +a50364 = 50364 +a50365 = 50365 +a50366 = 50366 +a50367 = 50367 +a50368 = 50368 +a50369 = 50369 +a50370 = 50370 +a50371 = 50371 +a50372 = 50372 +a50373 = 50373 +a50374 = 50374 +a50375 = 50375 +a50376 = 50376 +a50377 = 50377 +a50378 = 50378 +a50379 = 50379 +a50380 = 50380 +a50381 = 50381 +a50382 = 50382 +a50383 = 50383 +a50384 = 50384 +a50385 = 50385 +a50386 = 50386 +a50387 = 50387 +a50388 = 50388 +a50389 = 50389 +a50390 = 50390 +a50391 = 50391 +a50392 = 50392 +a50393 = 50393 +a50394 = 50394 +a50395 = 50395 +a50396 = 50396 +a50397 = 50397 +a50398 = 50398 +a50399 = 50399 +a50400 = 50400 +a50401 = 50401 +a50402 = 50402 +a50403 = 50403 +a50404 = 50404 +a50405 = 50405 +a50406 = 50406 +a50407 = 50407 +a50408 = 50408 +a50409 = 50409 +a50410 = 50410 +a50411 = 50411 +a50412 = 50412 +a50413 = 50413 +a50414 = 50414 +a50415 = 50415 +a50416 = 50416 +a50417 = 50417 +a50418 = 50418 +a50419 = 50419 +a50420 = 50420 +a50421 = 50421 +a50422 = 50422 +a50423 = 50423 +a50424 = 50424 +a50425 = 50425 +a50426 = 50426 +a50427 = 50427 +a50428 = 50428 +a50429 = 50429 +a50430 = 50430 +a50431 = 50431 +a50432 = 50432 +a50433 = 50433 +a50434 = 50434 +a50435 = 50435 +a50436 = 50436 +a50437 = 50437 +a50438 = 50438 +a50439 = 50439 +a50440 = 50440 +a50441 = 50441 +a50442 = 50442 +a50443 = 50443 +a50444 = 50444 +a50445 = 50445 +a50446 = 50446 +a50447 = 50447 +a50448 = 50448 +a50449 = 50449 +a50450 = 50450 +a50451 = 50451 +a50452 = 50452 +a50453 = 50453 +a50454 = 50454 +a50455 = 50455 +a50456 = 50456 +a50457 = 50457 +a50458 = 50458 +a50459 = 50459 +a50460 = 50460 +a50461 = 50461 +a50462 = 50462 +a50463 = 50463 +a50464 = 50464 +a50465 = 50465 +a50466 = 50466 +a50467 = 50467 +a50468 = 50468 +a50469 = 50469 +a50470 = 50470 +a50471 = 50471 +a50472 = 50472 +a50473 = 50473 +a50474 = 50474 +a50475 = 50475 +a50476 = 50476 +a50477 = 50477 +a50478 = 50478 +a50479 = 50479 +a50480 = 50480 +a50481 = 50481 +a50482 = 50482 +a50483 = 50483 +a50484 = 50484 +a50485 = 50485 +a50486 = 50486 +a50487 = 50487 +a50488 = 50488 +a50489 = 50489 +a50490 = 50490 +a50491 = 50491 +a50492 = 50492 +a50493 = 50493 +a50494 = 50494 +a50495 = 50495 +a50496 = 50496 +a50497 = 50497 +a50498 = 50498 +a50499 = 50499 +a50500 = 50500 +a50501 = 50501 +a50502 = 50502 +a50503 = 50503 +a50504 = 50504 +a50505 = 50505 +a50506 = 50506 +a50507 = 50507 +a50508 = 50508 +a50509 = 50509 +a50510 = 50510 +a50511 = 50511 +a50512 = 50512 +a50513 = 50513 +a50514 = 50514 +a50515 = 50515 +a50516 = 50516 +a50517 = 50517 +a50518 = 50518 +a50519 = 50519 +a50520 = 50520 +a50521 = 50521 +a50522 = 50522 +a50523 = 50523 +a50524 = 50524 +a50525 = 50525 +a50526 = 50526 +a50527 = 50527 +a50528 = 50528 +a50529 = 50529 +a50530 = 50530 +a50531 = 50531 +a50532 = 50532 +a50533 = 50533 +a50534 = 50534 +a50535 = 50535 +a50536 = 50536 +a50537 = 50537 +a50538 = 50538 +a50539 = 50539 +a50540 = 50540 +a50541 = 50541 +a50542 = 50542 +a50543 = 50543 +a50544 = 50544 +a50545 = 50545 +a50546 = 50546 +a50547 = 50547 +a50548 = 50548 +a50549 = 50549 +a50550 = 50550 +a50551 = 50551 +a50552 = 50552 +a50553 = 50553 +a50554 = 50554 +a50555 = 50555 +a50556 = 50556 +a50557 = 50557 +a50558 = 50558 +a50559 = 50559 +a50560 = 50560 +a50561 = 50561 +a50562 = 50562 +a50563 = 50563 +a50564 = 50564 +a50565 = 50565 +a50566 = 50566 +a50567 = 50567 +a50568 = 50568 +a50569 = 50569 +a50570 = 50570 +a50571 = 50571 +a50572 = 50572 +a50573 = 50573 +a50574 = 50574 +a50575 = 50575 +a50576 = 50576 +a50577 = 50577 +a50578 = 50578 +a50579 = 50579 +a50580 = 50580 +a50581 = 50581 +a50582 = 50582 +a50583 = 50583 +a50584 = 50584 +a50585 = 50585 +a50586 = 50586 +a50587 = 50587 +a50588 = 50588 +a50589 = 50589 +a50590 = 50590 +a50591 = 50591 +a50592 = 50592 +a50593 = 50593 +a50594 = 50594 +a50595 = 50595 +a50596 = 50596 +a50597 = 50597 +a50598 = 50598 +a50599 = 50599 +a50600 = 50600 +a50601 = 50601 +a50602 = 50602 +a50603 = 50603 +a50604 = 50604 +a50605 = 50605 +a50606 = 50606 +a50607 = 50607 +a50608 = 50608 +a50609 = 50609 +a50610 = 50610 +a50611 = 50611 +a50612 = 50612 +a50613 = 50613 +a50614 = 50614 +a50615 = 50615 +a50616 = 50616 +a50617 = 50617 +a50618 = 50618 +a50619 = 50619 +a50620 = 50620 +a50621 = 50621 +a50622 = 50622 +a50623 = 50623 +a50624 = 50624 +a50625 = 50625 +a50626 = 50626 +a50627 = 50627 +a50628 = 50628 +a50629 = 50629 +a50630 = 50630 +a50631 = 50631 +a50632 = 50632 +a50633 = 50633 +a50634 = 50634 +a50635 = 50635 +a50636 = 50636 +a50637 = 50637 +a50638 = 50638 +a50639 = 50639 +a50640 = 50640 +a50641 = 50641 +a50642 = 50642 +a50643 = 50643 +a50644 = 50644 +a50645 = 50645 +a50646 = 50646 +a50647 = 50647 +a50648 = 50648 +a50649 = 50649 +a50650 = 50650 +a50651 = 50651 +a50652 = 50652 +a50653 = 50653 +a50654 = 50654 +a50655 = 50655 +a50656 = 50656 +a50657 = 50657 +a50658 = 50658 +a50659 = 50659 +a50660 = 50660 +a50661 = 50661 +a50662 = 50662 +a50663 = 50663 +a50664 = 50664 +a50665 = 50665 +a50666 = 50666 +a50667 = 50667 +a50668 = 50668 +a50669 = 50669 +a50670 = 50670 +a50671 = 50671 +a50672 = 50672 +a50673 = 50673 +a50674 = 50674 +a50675 = 50675 +a50676 = 50676 +a50677 = 50677 +a50678 = 50678 +a50679 = 50679 +a50680 = 50680 +a50681 = 50681 +a50682 = 50682 +a50683 = 50683 +a50684 = 50684 +a50685 = 50685 +a50686 = 50686 +a50687 = 50687 +a50688 = 50688 +a50689 = 50689 +a50690 = 50690 +a50691 = 50691 +a50692 = 50692 +a50693 = 50693 +a50694 = 50694 +a50695 = 50695 +a50696 = 50696 +a50697 = 50697 +a50698 = 50698 +a50699 = 50699 +a50700 = 50700 +a50701 = 50701 +a50702 = 50702 +a50703 = 50703 +a50704 = 50704 +a50705 = 50705 +a50706 = 50706 +a50707 = 50707 +a50708 = 50708 +a50709 = 50709 +a50710 = 50710 +a50711 = 50711 +a50712 = 50712 +a50713 = 50713 +a50714 = 50714 +a50715 = 50715 +a50716 = 50716 +a50717 = 50717 +a50718 = 50718 +a50719 = 50719 +a50720 = 50720 +a50721 = 50721 +a50722 = 50722 +a50723 = 50723 +a50724 = 50724 +a50725 = 50725 +a50726 = 50726 +a50727 = 50727 +a50728 = 50728 +a50729 = 50729 +a50730 = 50730 +a50731 = 50731 +a50732 = 50732 +a50733 = 50733 +a50734 = 50734 +a50735 = 50735 +a50736 = 50736 +a50737 = 50737 +a50738 = 50738 +a50739 = 50739 +a50740 = 50740 +a50741 = 50741 +a50742 = 50742 +a50743 = 50743 +a50744 = 50744 +a50745 = 50745 +a50746 = 50746 +a50747 = 50747 +a50748 = 50748 +a50749 = 50749 +a50750 = 50750 +a50751 = 50751 +a50752 = 50752 +a50753 = 50753 +a50754 = 50754 +a50755 = 50755 +a50756 = 50756 +a50757 = 50757 +a50758 = 50758 +a50759 = 50759 +a50760 = 50760 +a50761 = 50761 +a50762 = 50762 +a50763 = 50763 +a50764 = 50764 +a50765 = 50765 +a50766 = 50766 +a50767 = 50767 +a50768 = 50768 +a50769 = 50769 +a50770 = 50770 +a50771 = 50771 +a50772 = 50772 +a50773 = 50773 +a50774 = 50774 +a50775 = 50775 +a50776 = 50776 +a50777 = 50777 +a50778 = 50778 +a50779 = 50779 +a50780 = 50780 +a50781 = 50781 +a50782 = 50782 +a50783 = 50783 +a50784 = 50784 +a50785 = 50785 +a50786 = 50786 +a50787 = 50787 +a50788 = 50788 +a50789 = 50789 +a50790 = 50790 +a50791 = 50791 +a50792 = 50792 +a50793 = 50793 +a50794 = 50794 +a50795 = 50795 +a50796 = 50796 +a50797 = 50797 +a50798 = 50798 +a50799 = 50799 +a50800 = 50800 +a50801 = 50801 +a50802 = 50802 +a50803 = 50803 +a50804 = 50804 +a50805 = 50805 +a50806 = 50806 +a50807 = 50807 +a50808 = 50808 +a50809 = 50809 +a50810 = 50810 +a50811 = 50811 +a50812 = 50812 +a50813 = 50813 +a50814 = 50814 +a50815 = 50815 +a50816 = 50816 +a50817 = 50817 +a50818 = 50818 +a50819 = 50819 +a50820 = 50820 +a50821 = 50821 +a50822 = 50822 +a50823 = 50823 +a50824 = 50824 +a50825 = 50825 +a50826 = 50826 +a50827 = 50827 +a50828 = 50828 +a50829 = 50829 +a50830 = 50830 +a50831 = 50831 +a50832 = 50832 +a50833 = 50833 +a50834 = 50834 +a50835 = 50835 +a50836 = 50836 +a50837 = 50837 +a50838 = 50838 +a50839 = 50839 +a50840 = 50840 +a50841 = 50841 +a50842 = 50842 +a50843 = 50843 +a50844 = 50844 +a50845 = 50845 +a50846 = 50846 +a50847 = 50847 +a50848 = 50848 +a50849 = 50849 +a50850 = 50850 +a50851 = 50851 +a50852 = 50852 +a50853 = 50853 +a50854 = 50854 +a50855 = 50855 +a50856 = 50856 +a50857 = 50857 +a50858 = 50858 +a50859 = 50859 +a50860 = 50860 +a50861 = 50861 +a50862 = 50862 +a50863 = 50863 +a50864 = 50864 +a50865 = 50865 +a50866 = 50866 +a50867 = 50867 +a50868 = 50868 +a50869 = 50869 +a50870 = 50870 +a50871 = 50871 +a50872 = 50872 +a50873 = 50873 +a50874 = 50874 +a50875 = 50875 +a50876 = 50876 +a50877 = 50877 +a50878 = 50878 +a50879 = 50879 +a50880 = 50880 +a50881 = 50881 +a50882 = 50882 +a50883 = 50883 +a50884 = 50884 +a50885 = 50885 +a50886 = 50886 +a50887 = 50887 +a50888 = 50888 +a50889 = 50889 +a50890 = 50890 +a50891 = 50891 +a50892 = 50892 +a50893 = 50893 +a50894 = 50894 +a50895 = 50895 +a50896 = 50896 +a50897 = 50897 +a50898 = 50898 +a50899 = 50899 +a50900 = 50900 +a50901 = 50901 +a50902 = 50902 +a50903 = 50903 +a50904 = 50904 +a50905 = 50905 +a50906 = 50906 +a50907 = 50907 +a50908 = 50908 +a50909 = 50909 +a50910 = 50910 +a50911 = 50911 +a50912 = 50912 +a50913 = 50913 +a50914 = 50914 +a50915 = 50915 +a50916 = 50916 +a50917 = 50917 +a50918 = 50918 +a50919 = 50919 +a50920 = 50920 +a50921 = 50921 +a50922 = 50922 +a50923 = 50923 +a50924 = 50924 +a50925 = 50925 +a50926 = 50926 +a50927 = 50927 +a50928 = 50928 +a50929 = 50929 +a50930 = 50930 +a50931 = 50931 +a50932 = 50932 +a50933 = 50933 +a50934 = 50934 +a50935 = 50935 +a50936 = 50936 +a50937 = 50937 +a50938 = 50938 +a50939 = 50939 +a50940 = 50940 +a50941 = 50941 +a50942 = 50942 +a50943 = 50943 +a50944 = 50944 +a50945 = 50945 +a50946 = 50946 +a50947 = 50947 +a50948 = 50948 +a50949 = 50949 +a50950 = 50950 +a50951 = 50951 +a50952 = 50952 +a50953 = 50953 +a50954 = 50954 +a50955 = 50955 +a50956 = 50956 +a50957 = 50957 +a50958 = 50958 +a50959 = 50959 +a50960 = 50960 +a50961 = 50961 +a50962 = 50962 +a50963 = 50963 +a50964 = 50964 +a50965 = 50965 +a50966 = 50966 +a50967 = 50967 +a50968 = 50968 +a50969 = 50969 +a50970 = 50970 +a50971 = 50971 +a50972 = 50972 +a50973 = 50973 +a50974 = 50974 +a50975 = 50975 +a50976 = 50976 +a50977 = 50977 +a50978 = 50978 +a50979 = 50979 +a50980 = 50980 +a50981 = 50981 +a50982 = 50982 +a50983 = 50983 +a50984 = 50984 +a50985 = 50985 +a50986 = 50986 +a50987 = 50987 +a50988 = 50988 +a50989 = 50989 +a50990 = 50990 +a50991 = 50991 +a50992 = 50992 +a50993 = 50993 +a50994 = 50994 +a50995 = 50995 +a50996 = 50996 +a50997 = 50997 +a50998 = 50998 +a50999 = 50999 +a51000 = 51000 +a51001 = 51001 +a51002 = 51002 +a51003 = 51003 +a51004 = 51004 +a51005 = 51005 +a51006 = 51006 +a51007 = 51007 +a51008 = 51008 +a51009 = 51009 +a51010 = 51010 +a51011 = 51011 +a51012 = 51012 +a51013 = 51013 +a51014 = 51014 +a51015 = 51015 +a51016 = 51016 +a51017 = 51017 +a51018 = 51018 +a51019 = 51019 +a51020 = 51020 +a51021 = 51021 +a51022 = 51022 +a51023 = 51023 +a51024 = 51024 +a51025 = 51025 +a51026 = 51026 +a51027 = 51027 +a51028 = 51028 +a51029 = 51029 +a51030 = 51030 +a51031 = 51031 +a51032 = 51032 +a51033 = 51033 +a51034 = 51034 +a51035 = 51035 +a51036 = 51036 +a51037 = 51037 +a51038 = 51038 +a51039 = 51039 +a51040 = 51040 +a51041 = 51041 +a51042 = 51042 +a51043 = 51043 +a51044 = 51044 +a51045 = 51045 +a51046 = 51046 +a51047 = 51047 +a51048 = 51048 +a51049 = 51049 +a51050 = 51050 +a51051 = 51051 +a51052 = 51052 +a51053 = 51053 +a51054 = 51054 +a51055 = 51055 +a51056 = 51056 +a51057 = 51057 +a51058 = 51058 +a51059 = 51059 +a51060 = 51060 +a51061 = 51061 +a51062 = 51062 +a51063 = 51063 +a51064 = 51064 +a51065 = 51065 +a51066 = 51066 +a51067 = 51067 +a51068 = 51068 +a51069 = 51069 +a51070 = 51070 +a51071 = 51071 +a51072 = 51072 +a51073 = 51073 +a51074 = 51074 +a51075 = 51075 +a51076 = 51076 +a51077 = 51077 +a51078 = 51078 +a51079 = 51079 +a51080 = 51080 +a51081 = 51081 +a51082 = 51082 +a51083 = 51083 +a51084 = 51084 +a51085 = 51085 +a51086 = 51086 +a51087 = 51087 +a51088 = 51088 +a51089 = 51089 +a51090 = 51090 +a51091 = 51091 +a51092 = 51092 +a51093 = 51093 +a51094 = 51094 +a51095 = 51095 +a51096 = 51096 +a51097 = 51097 +a51098 = 51098 +a51099 = 51099 +a51100 = 51100 +a51101 = 51101 +a51102 = 51102 +a51103 = 51103 +a51104 = 51104 +a51105 = 51105 +a51106 = 51106 +a51107 = 51107 +a51108 = 51108 +a51109 = 51109 +a51110 = 51110 +a51111 = 51111 +a51112 = 51112 +a51113 = 51113 +a51114 = 51114 +a51115 = 51115 +a51116 = 51116 +a51117 = 51117 +a51118 = 51118 +a51119 = 51119 +a51120 = 51120 +a51121 = 51121 +a51122 = 51122 +a51123 = 51123 +a51124 = 51124 +a51125 = 51125 +a51126 = 51126 +a51127 = 51127 +a51128 = 51128 +a51129 = 51129 +a51130 = 51130 +a51131 = 51131 +a51132 = 51132 +a51133 = 51133 +a51134 = 51134 +a51135 = 51135 +a51136 = 51136 +a51137 = 51137 +a51138 = 51138 +a51139 = 51139 +a51140 = 51140 +a51141 = 51141 +a51142 = 51142 +a51143 = 51143 +a51144 = 51144 +a51145 = 51145 +a51146 = 51146 +a51147 = 51147 +a51148 = 51148 +a51149 = 51149 +a51150 = 51150 +a51151 = 51151 +a51152 = 51152 +a51153 = 51153 +a51154 = 51154 +a51155 = 51155 +a51156 = 51156 +a51157 = 51157 +a51158 = 51158 +a51159 = 51159 +a51160 = 51160 +a51161 = 51161 +a51162 = 51162 +a51163 = 51163 +a51164 = 51164 +a51165 = 51165 +a51166 = 51166 +a51167 = 51167 +a51168 = 51168 +a51169 = 51169 +a51170 = 51170 +a51171 = 51171 +a51172 = 51172 +a51173 = 51173 +a51174 = 51174 +a51175 = 51175 +a51176 = 51176 +a51177 = 51177 +a51178 = 51178 +a51179 = 51179 +a51180 = 51180 +a51181 = 51181 +a51182 = 51182 +a51183 = 51183 +a51184 = 51184 +a51185 = 51185 +a51186 = 51186 +a51187 = 51187 +a51188 = 51188 +a51189 = 51189 +a51190 = 51190 +a51191 = 51191 +a51192 = 51192 +a51193 = 51193 +a51194 = 51194 +a51195 = 51195 +a51196 = 51196 +a51197 = 51197 +a51198 = 51198 +a51199 = 51199 +a51200 = 51200 +a51201 = 51201 +a51202 = 51202 +a51203 = 51203 +a51204 = 51204 +a51205 = 51205 +a51206 = 51206 +a51207 = 51207 +a51208 = 51208 +a51209 = 51209 +a51210 = 51210 +a51211 = 51211 +a51212 = 51212 +a51213 = 51213 +a51214 = 51214 +a51215 = 51215 +a51216 = 51216 +a51217 = 51217 +a51218 = 51218 +a51219 = 51219 +a51220 = 51220 +a51221 = 51221 +a51222 = 51222 +a51223 = 51223 +a51224 = 51224 +a51225 = 51225 +a51226 = 51226 +a51227 = 51227 +a51228 = 51228 +a51229 = 51229 +a51230 = 51230 +a51231 = 51231 +a51232 = 51232 +a51233 = 51233 +a51234 = 51234 +a51235 = 51235 +a51236 = 51236 +a51237 = 51237 +a51238 = 51238 +a51239 = 51239 +a51240 = 51240 +a51241 = 51241 +a51242 = 51242 +a51243 = 51243 +a51244 = 51244 +a51245 = 51245 +a51246 = 51246 +a51247 = 51247 +a51248 = 51248 +a51249 = 51249 +a51250 = 51250 +a51251 = 51251 +a51252 = 51252 +a51253 = 51253 +a51254 = 51254 +a51255 = 51255 +a51256 = 51256 +a51257 = 51257 +a51258 = 51258 +a51259 = 51259 +a51260 = 51260 +a51261 = 51261 +a51262 = 51262 +a51263 = 51263 +a51264 = 51264 +a51265 = 51265 +a51266 = 51266 +a51267 = 51267 +a51268 = 51268 +a51269 = 51269 +a51270 = 51270 +a51271 = 51271 +a51272 = 51272 +a51273 = 51273 +a51274 = 51274 +a51275 = 51275 +a51276 = 51276 +a51277 = 51277 +a51278 = 51278 +a51279 = 51279 +a51280 = 51280 +a51281 = 51281 +a51282 = 51282 +a51283 = 51283 +a51284 = 51284 +a51285 = 51285 +a51286 = 51286 +a51287 = 51287 +a51288 = 51288 +a51289 = 51289 +a51290 = 51290 +a51291 = 51291 +a51292 = 51292 +a51293 = 51293 +a51294 = 51294 +a51295 = 51295 +a51296 = 51296 +a51297 = 51297 +a51298 = 51298 +a51299 = 51299 +a51300 = 51300 +a51301 = 51301 +a51302 = 51302 +a51303 = 51303 +a51304 = 51304 +a51305 = 51305 +a51306 = 51306 +a51307 = 51307 +a51308 = 51308 +a51309 = 51309 +a51310 = 51310 +a51311 = 51311 +a51312 = 51312 +a51313 = 51313 +a51314 = 51314 +a51315 = 51315 +a51316 = 51316 +a51317 = 51317 +a51318 = 51318 +a51319 = 51319 +a51320 = 51320 +a51321 = 51321 +a51322 = 51322 +a51323 = 51323 +a51324 = 51324 +a51325 = 51325 +a51326 = 51326 +a51327 = 51327 +a51328 = 51328 +a51329 = 51329 +a51330 = 51330 +a51331 = 51331 +a51332 = 51332 +a51333 = 51333 +a51334 = 51334 +a51335 = 51335 +a51336 = 51336 +a51337 = 51337 +a51338 = 51338 +a51339 = 51339 +a51340 = 51340 +a51341 = 51341 +a51342 = 51342 +a51343 = 51343 +a51344 = 51344 +a51345 = 51345 +a51346 = 51346 +a51347 = 51347 +a51348 = 51348 +a51349 = 51349 +a51350 = 51350 +a51351 = 51351 +a51352 = 51352 +a51353 = 51353 +a51354 = 51354 +a51355 = 51355 +a51356 = 51356 +a51357 = 51357 +a51358 = 51358 +a51359 = 51359 +a51360 = 51360 +a51361 = 51361 +a51362 = 51362 +a51363 = 51363 +a51364 = 51364 +a51365 = 51365 +a51366 = 51366 +a51367 = 51367 +a51368 = 51368 +a51369 = 51369 +a51370 = 51370 +a51371 = 51371 +a51372 = 51372 +a51373 = 51373 +a51374 = 51374 +a51375 = 51375 +a51376 = 51376 +a51377 = 51377 +a51378 = 51378 +a51379 = 51379 +a51380 = 51380 +a51381 = 51381 +a51382 = 51382 +a51383 = 51383 +a51384 = 51384 +a51385 = 51385 +a51386 = 51386 +a51387 = 51387 +a51388 = 51388 +a51389 = 51389 +a51390 = 51390 +a51391 = 51391 +a51392 = 51392 +a51393 = 51393 +a51394 = 51394 +a51395 = 51395 +a51396 = 51396 +a51397 = 51397 +a51398 = 51398 +a51399 = 51399 +a51400 = 51400 +a51401 = 51401 +a51402 = 51402 +a51403 = 51403 +a51404 = 51404 +a51405 = 51405 +a51406 = 51406 +a51407 = 51407 +a51408 = 51408 +a51409 = 51409 +a51410 = 51410 +a51411 = 51411 +a51412 = 51412 +a51413 = 51413 +a51414 = 51414 +a51415 = 51415 +a51416 = 51416 +a51417 = 51417 +a51418 = 51418 +a51419 = 51419 +a51420 = 51420 +a51421 = 51421 +a51422 = 51422 +a51423 = 51423 +a51424 = 51424 +a51425 = 51425 +a51426 = 51426 +a51427 = 51427 +a51428 = 51428 +a51429 = 51429 +a51430 = 51430 +a51431 = 51431 +a51432 = 51432 +a51433 = 51433 +a51434 = 51434 +a51435 = 51435 +a51436 = 51436 +a51437 = 51437 +a51438 = 51438 +a51439 = 51439 +a51440 = 51440 +a51441 = 51441 +a51442 = 51442 +a51443 = 51443 +a51444 = 51444 +a51445 = 51445 +a51446 = 51446 +a51447 = 51447 +a51448 = 51448 +a51449 = 51449 +a51450 = 51450 +a51451 = 51451 +a51452 = 51452 +a51453 = 51453 +a51454 = 51454 +a51455 = 51455 +a51456 = 51456 +a51457 = 51457 +a51458 = 51458 +a51459 = 51459 +a51460 = 51460 +a51461 = 51461 +a51462 = 51462 +a51463 = 51463 +a51464 = 51464 +a51465 = 51465 +a51466 = 51466 +a51467 = 51467 +a51468 = 51468 +a51469 = 51469 +a51470 = 51470 +a51471 = 51471 +a51472 = 51472 +a51473 = 51473 +a51474 = 51474 +a51475 = 51475 +a51476 = 51476 +a51477 = 51477 +a51478 = 51478 +a51479 = 51479 +a51480 = 51480 +a51481 = 51481 +a51482 = 51482 +a51483 = 51483 +a51484 = 51484 +a51485 = 51485 +a51486 = 51486 +a51487 = 51487 +a51488 = 51488 +a51489 = 51489 +a51490 = 51490 +a51491 = 51491 +a51492 = 51492 +a51493 = 51493 +a51494 = 51494 +a51495 = 51495 +a51496 = 51496 +a51497 = 51497 +a51498 = 51498 +a51499 = 51499 +a51500 = 51500 +a51501 = 51501 +a51502 = 51502 +a51503 = 51503 +a51504 = 51504 +a51505 = 51505 +a51506 = 51506 +a51507 = 51507 +a51508 = 51508 +a51509 = 51509 +a51510 = 51510 +a51511 = 51511 +a51512 = 51512 +a51513 = 51513 +a51514 = 51514 +a51515 = 51515 +a51516 = 51516 +a51517 = 51517 +a51518 = 51518 +a51519 = 51519 +a51520 = 51520 +a51521 = 51521 +a51522 = 51522 +a51523 = 51523 +a51524 = 51524 +a51525 = 51525 +a51526 = 51526 +a51527 = 51527 +a51528 = 51528 +a51529 = 51529 +a51530 = 51530 +a51531 = 51531 +a51532 = 51532 +a51533 = 51533 +a51534 = 51534 +a51535 = 51535 +a51536 = 51536 +a51537 = 51537 +a51538 = 51538 +a51539 = 51539 +a51540 = 51540 +a51541 = 51541 +a51542 = 51542 +a51543 = 51543 +a51544 = 51544 +a51545 = 51545 +a51546 = 51546 +a51547 = 51547 +a51548 = 51548 +a51549 = 51549 +a51550 = 51550 +a51551 = 51551 +a51552 = 51552 +a51553 = 51553 +a51554 = 51554 +a51555 = 51555 +a51556 = 51556 +a51557 = 51557 +a51558 = 51558 +a51559 = 51559 +a51560 = 51560 +a51561 = 51561 +a51562 = 51562 +a51563 = 51563 +a51564 = 51564 +a51565 = 51565 +a51566 = 51566 +a51567 = 51567 +a51568 = 51568 +a51569 = 51569 +a51570 = 51570 +a51571 = 51571 +a51572 = 51572 +a51573 = 51573 +a51574 = 51574 +a51575 = 51575 +a51576 = 51576 +a51577 = 51577 +a51578 = 51578 +a51579 = 51579 +a51580 = 51580 +a51581 = 51581 +a51582 = 51582 +a51583 = 51583 +a51584 = 51584 +a51585 = 51585 +a51586 = 51586 +a51587 = 51587 +a51588 = 51588 +a51589 = 51589 +a51590 = 51590 +a51591 = 51591 +a51592 = 51592 +a51593 = 51593 +a51594 = 51594 +a51595 = 51595 +a51596 = 51596 +a51597 = 51597 +a51598 = 51598 +a51599 = 51599 +a51600 = 51600 +a51601 = 51601 +a51602 = 51602 +a51603 = 51603 +a51604 = 51604 +a51605 = 51605 +a51606 = 51606 +a51607 = 51607 +a51608 = 51608 +a51609 = 51609 +a51610 = 51610 +a51611 = 51611 +a51612 = 51612 +a51613 = 51613 +a51614 = 51614 +a51615 = 51615 +a51616 = 51616 +a51617 = 51617 +a51618 = 51618 +a51619 = 51619 +a51620 = 51620 +a51621 = 51621 +a51622 = 51622 +a51623 = 51623 +a51624 = 51624 +a51625 = 51625 +a51626 = 51626 +a51627 = 51627 +a51628 = 51628 +a51629 = 51629 +a51630 = 51630 +a51631 = 51631 +a51632 = 51632 +a51633 = 51633 +a51634 = 51634 +a51635 = 51635 +a51636 = 51636 +a51637 = 51637 +a51638 = 51638 +a51639 = 51639 +a51640 = 51640 +a51641 = 51641 +a51642 = 51642 +a51643 = 51643 +a51644 = 51644 +a51645 = 51645 +a51646 = 51646 +a51647 = 51647 +a51648 = 51648 +a51649 = 51649 +a51650 = 51650 +a51651 = 51651 +a51652 = 51652 +a51653 = 51653 +a51654 = 51654 +a51655 = 51655 +a51656 = 51656 +a51657 = 51657 +a51658 = 51658 +a51659 = 51659 +a51660 = 51660 +a51661 = 51661 +a51662 = 51662 +a51663 = 51663 +a51664 = 51664 +a51665 = 51665 +a51666 = 51666 +a51667 = 51667 +a51668 = 51668 +a51669 = 51669 +a51670 = 51670 +a51671 = 51671 +a51672 = 51672 +a51673 = 51673 +a51674 = 51674 +a51675 = 51675 +a51676 = 51676 +a51677 = 51677 +a51678 = 51678 +a51679 = 51679 +a51680 = 51680 +a51681 = 51681 +a51682 = 51682 +a51683 = 51683 +a51684 = 51684 +a51685 = 51685 +a51686 = 51686 +a51687 = 51687 +a51688 = 51688 +a51689 = 51689 +a51690 = 51690 +a51691 = 51691 +a51692 = 51692 +a51693 = 51693 +a51694 = 51694 +a51695 = 51695 +a51696 = 51696 +a51697 = 51697 +a51698 = 51698 +a51699 = 51699 +a51700 = 51700 +a51701 = 51701 +a51702 = 51702 +a51703 = 51703 +a51704 = 51704 +a51705 = 51705 +a51706 = 51706 +a51707 = 51707 +a51708 = 51708 +a51709 = 51709 +a51710 = 51710 +a51711 = 51711 +a51712 = 51712 +a51713 = 51713 +a51714 = 51714 +a51715 = 51715 +a51716 = 51716 +a51717 = 51717 +a51718 = 51718 +a51719 = 51719 +a51720 = 51720 +a51721 = 51721 +a51722 = 51722 +a51723 = 51723 +a51724 = 51724 +a51725 = 51725 +a51726 = 51726 +a51727 = 51727 +a51728 = 51728 +a51729 = 51729 +a51730 = 51730 +a51731 = 51731 +a51732 = 51732 +a51733 = 51733 +a51734 = 51734 +a51735 = 51735 +a51736 = 51736 +a51737 = 51737 +a51738 = 51738 +a51739 = 51739 +a51740 = 51740 +a51741 = 51741 +a51742 = 51742 +a51743 = 51743 +a51744 = 51744 +a51745 = 51745 +a51746 = 51746 +a51747 = 51747 +a51748 = 51748 +a51749 = 51749 +a51750 = 51750 +a51751 = 51751 +a51752 = 51752 +a51753 = 51753 +a51754 = 51754 +a51755 = 51755 +a51756 = 51756 +a51757 = 51757 +a51758 = 51758 +a51759 = 51759 +a51760 = 51760 +a51761 = 51761 +a51762 = 51762 +a51763 = 51763 +a51764 = 51764 +a51765 = 51765 +a51766 = 51766 +a51767 = 51767 +a51768 = 51768 +a51769 = 51769 +a51770 = 51770 +a51771 = 51771 +a51772 = 51772 +a51773 = 51773 +a51774 = 51774 +a51775 = 51775 +a51776 = 51776 +a51777 = 51777 +a51778 = 51778 +a51779 = 51779 +a51780 = 51780 +a51781 = 51781 +a51782 = 51782 +a51783 = 51783 +a51784 = 51784 +a51785 = 51785 +a51786 = 51786 +a51787 = 51787 +a51788 = 51788 +a51789 = 51789 +a51790 = 51790 +a51791 = 51791 +a51792 = 51792 +a51793 = 51793 +a51794 = 51794 +a51795 = 51795 +a51796 = 51796 +a51797 = 51797 +a51798 = 51798 +a51799 = 51799 +a51800 = 51800 +a51801 = 51801 +a51802 = 51802 +a51803 = 51803 +a51804 = 51804 +a51805 = 51805 +a51806 = 51806 +a51807 = 51807 +a51808 = 51808 +a51809 = 51809 +a51810 = 51810 +a51811 = 51811 +a51812 = 51812 +a51813 = 51813 +a51814 = 51814 +a51815 = 51815 +a51816 = 51816 +a51817 = 51817 +a51818 = 51818 +a51819 = 51819 +a51820 = 51820 +a51821 = 51821 +a51822 = 51822 +a51823 = 51823 +a51824 = 51824 +a51825 = 51825 +a51826 = 51826 +a51827 = 51827 +a51828 = 51828 +a51829 = 51829 +a51830 = 51830 +a51831 = 51831 +a51832 = 51832 +a51833 = 51833 +a51834 = 51834 +a51835 = 51835 +a51836 = 51836 +a51837 = 51837 +a51838 = 51838 +a51839 = 51839 +a51840 = 51840 +a51841 = 51841 +a51842 = 51842 +a51843 = 51843 +a51844 = 51844 +a51845 = 51845 +a51846 = 51846 +a51847 = 51847 +a51848 = 51848 +a51849 = 51849 +a51850 = 51850 +a51851 = 51851 +a51852 = 51852 +a51853 = 51853 +a51854 = 51854 +a51855 = 51855 +a51856 = 51856 +a51857 = 51857 +a51858 = 51858 +a51859 = 51859 +a51860 = 51860 +a51861 = 51861 +a51862 = 51862 +a51863 = 51863 +a51864 = 51864 +a51865 = 51865 +a51866 = 51866 +a51867 = 51867 +a51868 = 51868 +a51869 = 51869 +a51870 = 51870 +a51871 = 51871 +a51872 = 51872 +a51873 = 51873 +a51874 = 51874 +a51875 = 51875 +a51876 = 51876 +a51877 = 51877 +a51878 = 51878 +a51879 = 51879 +a51880 = 51880 +a51881 = 51881 +a51882 = 51882 +a51883 = 51883 +a51884 = 51884 +a51885 = 51885 +a51886 = 51886 +a51887 = 51887 +a51888 = 51888 +a51889 = 51889 +a51890 = 51890 +a51891 = 51891 +a51892 = 51892 +a51893 = 51893 +a51894 = 51894 +a51895 = 51895 +a51896 = 51896 +a51897 = 51897 +a51898 = 51898 +a51899 = 51899 +a51900 = 51900 +a51901 = 51901 +a51902 = 51902 +a51903 = 51903 +a51904 = 51904 +a51905 = 51905 +a51906 = 51906 +a51907 = 51907 +a51908 = 51908 +a51909 = 51909 +a51910 = 51910 +a51911 = 51911 +a51912 = 51912 +a51913 = 51913 +a51914 = 51914 +a51915 = 51915 +a51916 = 51916 +a51917 = 51917 +a51918 = 51918 +a51919 = 51919 +a51920 = 51920 +a51921 = 51921 +a51922 = 51922 +a51923 = 51923 +a51924 = 51924 +a51925 = 51925 +a51926 = 51926 +a51927 = 51927 +a51928 = 51928 +a51929 = 51929 +a51930 = 51930 +a51931 = 51931 +a51932 = 51932 +a51933 = 51933 +a51934 = 51934 +a51935 = 51935 +a51936 = 51936 +a51937 = 51937 +a51938 = 51938 +a51939 = 51939 +a51940 = 51940 +a51941 = 51941 +a51942 = 51942 +a51943 = 51943 +a51944 = 51944 +a51945 = 51945 +a51946 = 51946 +a51947 = 51947 +a51948 = 51948 +a51949 = 51949 +a51950 = 51950 +a51951 = 51951 +a51952 = 51952 +a51953 = 51953 +a51954 = 51954 +a51955 = 51955 +a51956 = 51956 +a51957 = 51957 +a51958 = 51958 +a51959 = 51959 +a51960 = 51960 +a51961 = 51961 +a51962 = 51962 +a51963 = 51963 +a51964 = 51964 +a51965 = 51965 +a51966 = 51966 +a51967 = 51967 +a51968 = 51968 +a51969 = 51969 +a51970 = 51970 +a51971 = 51971 +a51972 = 51972 +a51973 = 51973 +a51974 = 51974 +a51975 = 51975 +a51976 = 51976 +a51977 = 51977 +a51978 = 51978 +a51979 = 51979 +a51980 = 51980 +a51981 = 51981 +a51982 = 51982 +a51983 = 51983 +a51984 = 51984 +a51985 = 51985 +a51986 = 51986 +a51987 = 51987 +a51988 = 51988 +a51989 = 51989 +a51990 = 51990 +a51991 = 51991 +a51992 = 51992 +a51993 = 51993 +a51994 = 51994 +a51995 = 51995 +a51996 = 51996 +a51997 = 51997 +a51998 = 51998 +a51999 = 51999 +a52000 = 52000 +a52001 = 52001 +a52002 = 52002 +a52003 = 52003 +a52004 = 52004 +a52005 = 52005 +a52006 = 52006 +a52007 = 52007 +a52008 = 52008 +a52009 = 52009 +a52010 = 52010 +a52011 = 52011 +a52012 = 52012 +a52013 = 52013 +a52014 = 52014 +a52015 = 52015 +a52016 = 52016 +a52017 = 52017 +a52018 = 52018 +a52019 = 52019 +a52020 = 52020 +a52021 = 52021 +a52022 = 52022 +a52023 = 52023 +a52024 = 52024 +a52025 = 52025 +a52026 = 52026 +a52027 = 52027 +a52028 = 52028 +a52029 = 52029 +a52030 = 52030 +a52031 = 52031 +a52032 = 52032 +a52033 = 52033 +a52034 = 52034 +a52035 = 52035 +a52036 = 52036 +a52037 = 52037 +a52038 = 52038 +a52039 = 52039 +a52040 = 52040 +a52041 = 52041 +a52042 = 52042 +a52043 = 52043 +a52044 = 52044 +a52045 = 52045 +a52046 = 52046 +a52047 = 52047 +a52048 = 52048 +a52049 = 52049 +a52050 = 52050 +a52051 = 52051 +a52052 = 52052 +a52053 = 52053 +a52054 = 52054 +a52055 = 52055 +a52056 = 52056 +a52057 = 52057 +a52058 = 52058 +a52059 = 52059 +a52060 = 52060 +a52061 = 52061 +a52062 = 52062 +a52063 = 52063 +a52064 = 52064 +a52065 = 52065 +a52066 = 52066 +a52067 = 52067 +a52068 = 52068 +a52069 = 52069 +a52070 = 52070 +a52071 = 52071 +a52072 = 52072 +a52073 = 52073 +a52074 = 52074 +a52075 = 52075 +a52076 = 52076 +a52077 = 52077 +a52078 = 52078 +a52079 = 52079 +a52080 = 52080 +a52081 = 52081 +a52082 = 52082 +a52083 = 52083 +a52084 = 52084 +a52085 = 52085 +a52086 = 52086 +a52087 = 52087 +a52088 = 52088 +a52089 = 52089 +a52090 = 52090 +a52091 = 52091 +a52092 = 52092 +a52093 = 52093 +a52094 = 52094 +a52095 = 52095 +a52096 = 52096 +a52097 = 52097 +a52098 = 52098 +a52099 = 52099 +a52100 = 52100 +a52101 = 52101 +a52102 = 52102 +a52103 = 52103 +a52104 = 52104 +a52105 = 52105 +a52106 = 52106 +a52107 = 52107 +a52108 = 52108 +a52109 = 52109 +a52110 = 52110 +a52111 = 52111 +a52112 = 52112 +a52113 = 52113 +a52114 = 52114 +a52115 = 52115 +a52116 = 52116 +a52117 = 52117 +a52118 = 52118 +a52119 = 52119 +a52120 = 52120 +a52121 = 52121 +a52122 = 52122 +a52123 = 52123 +a52124 = 52124 +a52125 = 52125 +a52126 = 52126 +a52127 = 52127 +a52128 = 52128 +a52129 = 52129 +a52130 = 52130 +a52131 = 52131 +a52132 = 52132 +a52133 = 52133 +a52134 = 52134 +a52135 = 52135 +a52136 = 52136 +a52137 = 52137 +a52138 = 52138 +a52139 = 52139 +a52140 = 52140 +a52141 = 52141 +a52142 = 52142 +a52143 = 52143 +a52144 = 52144 +a52145 = 52145 +a52146 = 52146 +a52147 = 52147 +a52148 = 52148 +a52149 = 52149 +a52150 = 52150 +a52151 = 52151 +a52152 = 52152 +a52153 = 52153 +a52154 = 52154 +a52155 = 52155 +a52156 = 52156 +a52157 = 52157 +a52158 = 52158 +a52159 = 52159 +a52160 = 52160 +a52161 = 52161 +a52162 = 52162 +a52163 = 52163 +a52164 = 52164 +a52165 = 52165 +a52166 = 52166 +a52167 = 52167 +a52168 = 52168 +a52169 = 52169 +a52170 = 52170 +a52171 = 52171 +a52172 = 52172 +a52173 = 52173 +a52174 = 52174 +a52175 = 52175 +a52176 = 52176 +a52177 = 52177 +a52178 = 52178 +a52179 = 52179 +a52180 = 52180 +a52181 = 52181 +a52182 = 52182 +a52183 = 52183 +a52184 = 52184 +a52185 = 52185 +a52186 = 52186 +a52187 = 52187 +a52188 = 52188 +a52189 = 52189 +a52190 = 52190 +a52191 = 52191 +a52192 = 52192 +a52193 = 52193 +a52194 = 52194 +a52195 = 52195 +a52196 = 52196 +a52197 = 52197 +a52198 = 52198 +a52199 = 52199 +a52200 = 52200 +a52201 = 52201 +a52202 = 52202 +a52203 = 52203 +a52204 = 52204 +a52205 = 52205 +a52206 = 52206 +a52207 = 52207 +a52208 = 52208 +a52209 = 52209 +a52210 = 52210 +a52211 = 52211 +a52212 = 52212 +a52213 = 52213 +a52214 = 52214 +a52215 = 52215 +a52216 = 52216 +a52217 = 52217 +a52218 = 52218 +a52219 = 52219 +a52220 = 52220 +a52221 = 52221 +a52222 = 52222 +a52223 = 52223 +a52224 = 52224 +a52225 = 52225 +a52226 = 52226 +a52227 = 52227 +a52228 = 52228 +a52229 = 52229 +a52230 = 52230 +a52231 = 52231 +a52232 = 52232 +a52233 = 52233 +a52234 = 52234 +a52235 = 52235 +a52236 = 52236 +a52237 = 52237 +a52238 = 52238 +a52239 = 52239 +a52240 = 52240 +a52241 = 52241 +a52242 = 52242 +a52243 = 52243 +a52244 = 52244 +a52245 = 52245 +a52246 = 52246 +a52247 = 52247 +a52248 = 52248 +a52249 = 52249 +a52250 = 52250 +a52251 = 52251 +a52252 = 52252 +a52253 = 52253 +a52254 = 52254 +a52255 = 52255 +a52256 = 52256 +a52257 = 52257 +a52258 = 52258 +a52259 = 52259 +a52260 = 52260 +a52261 = 52261 +a52262 = 52262 +a52263 = 52263 +a52264 = 52264 +a52265 = 52265 +a52266 = 52266 +a52267 = 52267 +a52268 = 52268 +a52269 = 52269 +a52270 = 52270 +a52271 = 52271 +a52272 = 52272 +a52273 = 52273 +a52274 = 52274 +a52275 = 52275 +a52276 = 52276 +a52277 = 52277 +a52278 = 52278 +a52279 = 52279 +a52280 = 52280 +a52281 = 52281 +a52282 = 52282 +a52283 = 52283 +a52284 = 52284 +a52285 = 52285 +a52286 = 52286 +a52287 = 52287 +a52288 = 52288 +a52289 = 52289 +a52290 = 52290 +a52291 = 52291 +a52292 = 52292 +a52293 = 52293 +a52294 = 52294 +a52295 = 52295 +a52296 = 52296 +a52297 = 52297 +a52298 = 52298 +a52299 = 52299 +a52300 = 52300 +a52301 = 52301 +a52302 = 52302 +a52303 = 52303 +a52304 = 52304 +a52305 = 52305 +a52306 = 52306 +a52307 = 52307 +a52308 = 52308 +a52309 = 52309 +a52310 = 52310 +a52311 = 52311 +a52312 = 52312 +a52313 = 52313 +a52314 = 52314 +a52315 = 52315 +a52316 = 52316 +a52317 = 52317 +a52318 = 52318 +a52319 = 52319 +a52320 = 52320 +a52321 = 52321 +a52322 = 52322 +a52323 = 52323 +a52324 = 52324 +a52325 = 52325 +a52326 = 52326 +a52327 = 52327 +a52328 = 52328 +a52329 = 52329 +a52330 = 52330 +a52331 = 52331 +a52332 = 52332 +a52333 = 52333 +a52334 = 52334 +a52335 = 52335 +a52336 = 52336 +a52337 = 52337 +a52338 = 52338 +a52339 = 52339 +a52340 = 52340 +a52341 = 52341 +a52342 = 52342 +a52343 = 52343 +a52344 = 52344 +a52345 = 52345 +a52346 = 52346 +a52347 = 52347 +a52348 = 52348 +a52349 = 52349 +a52350 = 52350 +a52351 = 52351 +a52352 = 52352 +a52353 = 52353 +a52354 = 52354 +a52355 = 52355 +a52356 = 52356 +a52357 = 52357 +a52358 = 52358 +a52359 = 52359 +a52360 = 52360 +a52361 = 52361 +a52362 = 52362 +a52363 = 52363 +a52364 = 52364 +a52365 = 52365 +a52366 = 52366 +a52367 = 52367 +a52368 = 52368 +a52369 = 52369 +a52370 = 52370 +a52371 = 52371 +a52372 = 52372 +a52373 = 52373 +a52374 = 52374 +a52375 = 52375 +a52376 = 52376 +a52377 = 52377 +a52378 = 52378 +a52379 = 52379 +a52380 = 52380 +a52381 = 52381 +a52382 = 52382 +a52383 = 52383 +a52384 = 52384 +a52385 = 52385 +a52386 = 52386 +a52387 = 52387 +a52388 = 52388 +a52389 = 52389 +a52390 = 52390 +a52391 = 52391 +a52392 = 52392 +a52393 = 52393 +a52394 = 52394 +a52395 = 52395 +a52396 = 52396 +a52397 = 52397 +a52398 = 52398 +a52399 = 52399 +a52400 = 52400 +a52401 = 52401 +a52402 = 52402 +a52403 = 52403 +a52404 = 52404 +a52405 = 52405 +a52406 = 52406 +a52407 = 52407 +a52408 = 52408 +a52409 = 52409 +a52410 = 52410 +a52411 = 52411 +a52412 = 52412 +a52413 = 52413 +a52414 = 52414 +a52415 = 52415 +a52416 = 52416 +a52417 = 52417 +a52418 = 52418 +a52419 = 52419 +a52420 = 52420 +a52421 = 52421 +a52422 = 52422 +a52423 = 52423 +a52424 = 52424 +a52425 = 52425 +a52426 = 52426 +a52427 = 52427 +a52428 = 52428 +a52429 = 52429 +a52430 = 52430 +a52431 = 52431 +a52432 = 52432 +a52433 = 52433 +a52434 = 52434 +a52435 = 52435 +a52436 = 52436 +a52437 = 52437 +a52438 = 52438 +a52439 = 52439 +a52440 = 52440 +a52441 = 52441 +a52442 = 52442 +a52443 = 52443 +a52444 = 52444 +a52445 = 52445 +a52446 = 52446 +a52447 = 52447 +a52448 = 52448 +a52449 = 52449 +a52450 = 52450 +a52451 = 52451 +a52452 = 52452 +a52453 = 52453 +a52454 = 52454 +a52455 = 52455 +a52456 = 52456 +a52457 = 52457 +a52458 = 52458 +a52459 = 52459 +a52460 = 52460 +a52461 = 52461 +a52462 = 52462 +a52463 = 52463 +a52464 = 52464 +a52465 = 52465 +a52466 = 52466 +a52467 = 52467 +a52468 = 52468 +a52469 = 52469 +a52470 = 52470 +a52471 = 52471 +a52472 = 52472 +a52473 = 52473 +a52474 = 52474 +a52475 = 52475 +a52476 = 52476 +a52477 = 52477 +a52478 = 52478 +a52479 = 52479 +a52480 = 52480 +a52481 = 52481 +a52482 = 52482 +a52483 = 52483 +a52484 = 52484 +a52485 = 52485 +a52486 = 52486 +a52487 = 52487 +a52488 = 52488 +a52489 = 52489 +a52490 = 52490 +a52491 = 52491 +a52492 = 52492 +a52493 = 52493 +a52494 = 52494 +a52495 = 52495 +a52496 = 52496 +a52497 = 52497 +a52498 = 52498 +a52499 = 52499 +a52500 = 52500 +a52501 = 52501 +a52502 = 52502 +a52503 = 52503 +a52504 = 52504 +a52505 = 52505 +a52506 = 52506 +a52507 = 52507 +a52508 = 52508 +a52509 = 52509 +a52510 = 52510 +a52511 = 52511 +a52512 = 52512 +a52513 = 52513 +a52514 = 52514 +a52515 = 52515 +a52516 = 52516 +a52517 = 52517 +a52518 = 52518 +a52519 = 52519 +a52520 = 52520 +a52521 = 52521 +a52522 = 52522 +a52523 = 52523 +a52524 = 52524 +a52525 = 52525 +a52526 = 52526 +a52527 = 52527 +a52528 = 52528 +a52529 = 52529 +a52530 = 52530 +a52531 = 52531 +a52532 = 52532 +a52533 = 52533 +a52534 = 52534 +a52535 = 52535 +a52536 = 52536 +a52537 = 52537 +a52538 = 52538 +a52539 = 52539 +a52540 = 52540 +a52541 = 52541 +a52542 = 52542 +a52543 = 52543 +a52544 = 52544 +a52545 = 52545 +a52546 = 52546 +a52547 = 52547 +a52548 = 52548 +a52549 = 52549 +a52550 = 52550 +a52551 = 52551 +a52552 = 52552 +a52553 = 52553 +a52554 = 52554 +a52555 = 52555 +a52556 = 52556 +a52557 = 52557 +a52558 = 52558 +a52559 = 52559 +a52560 = 52560 +a52561 = 52561 +a52562 = 52562 +a52563 = 52563 +a52564 = 52564 +a52565 = 52565 +a52566 = 52566 +a52567 = 52567 +a52568 = 52568 +a52569 = 52569 +a52570 = 52570 +a52571 = 52571 +a52572 = 52572 +a52573 = 52573 +a52574 = 52574 +a52575 = 52575 +a52576 = 52576 +a52577 = 52577 +a52578 = 52578 +a52579 = 52579 +a52580 = 52580 +a52581 = 52581 +a52582 = 52582 +a52583 = 52583 +a52584 = 52584 +a52585 = 52585 +a52586 = 52586 +a52587 = 52587 +a52588 = 52588 +a52589 = 52589 +a52590 = 52590 +a52591 = 52591 +a52592 = 52592 +a52593 = 52593 +a52594 = 52594 +a52595 = 52595 +a52596 = 52596 +a52597 = 52597 +a52598 = 52598 +a52599 = 52599 +a52600 = 52600 +a52601 = 52601 +a52602 = 52602 +a52603 = 52603 +a52604 = 52604 +a52605 = 52605 +a52606 = 52606 +a52607 = 52607 +a52608 = 52608 +a52609 = 52609 +a52610 = 52610 +a52611 = 52611 +a52612 = 52612 +a52613 = 52613 +a52614 = 52614 +a52615 = 52615 +a52616 = 52616 +a52617 = 52617 +a52618 = 52618 +a52619 = 52619 +a52620 = 52620 +a52621 = 52621 +a52622 = 52622 +a52623 = 52623 +a52624 = 52624 +a52625 = 52625 +a52626 = 52626 +a52627 = 52627 +a52628 = 52628 +a52629 = 52629 +a52630 = 52630 +a52631 = 52631 +a52632 = 52632 +a52633 = 52633 +a52634 = 52634 +a52635 = 52635 +a52636 = 52636 +a52637 = 52637 +a52638 = 52638 +a52639 = 52639 +a52640 = 52640 +a52641 = 52641 +a52642 = 52642 +a52643 = 52643 +a52644 = 52644 +a52645 = 52645 +a52646 = 52646 +a52647 = 52647 +a52648 = 52648 +a52649 = 52649 +a52650 = 52650 +a52651 = 52651 +a52652 = 52652 +a52653 = 52653 +a52654 = 52654 +a52655 = 52655 +a52656 = 52656 +a52657 = 52657 +a52658 = 52658 +a52659 = 52659 +a52660 = 52660 +a52661 = 52661 +a52662 = 52662 +a52663 = 52663 +a52664 = 52664 +a52665 = 52665 +a52666 = 52666 +a52667 = 52667 +a52668 = 52668 +a52669 = 52669 +a52670 = 52670 +a52671 = 52671 +a52672 = 52672 +a52673 = 52673 +a52674 = 52674 +a52675 = 52675 +a52676 = 52676 +a52677 = 52677 +a52678 = 52678 +a52679 = 52679 +a52680 = 52680 +a52681 = 52681 +a52682 = 52682 +a52683 = 52683 +a52684 = 52684 +a52685 = 52685 +a52686 = 52686 +a52687 = 52687 +a52688 = 52688 +a52689 = 52689 +a52690 = 52690 +a52691 = 52691 +a52692 = 52692 +a52693 = 52693 +a52694 = 52694 +a52695 = 52695 +a52696 = 52696 +a52697 = 52697 +a52698 = 52698 +a52699 = 52699 +a52700 = 52700 +a52701 = 52701 +a52702 = 52702 +a52703 = 52703 +a52704 = 52704 +a52705 = 52705 +a52706 = 52706 +a52707 = 52707 +a52708 = 52708 +a52709 = 52709 +a52710 = 52710 +a52711 = 52711 +a52712 = 52712 +a52713 = 52713 +a52714 = 52714 +a52715 = 52715 +a52716 = 52716 +a52717 = 52717 +a52718 = 52718 +a52719 = 52719 +a52720 = 52720 +a52721 = 52721 +a52722 = 52722 +a52723 = 52723 +a52724 = 52724 +a52725 = 52725 +a52726 = 52726 +a52727 = 52727 +a52728 = 52728 +a52729 = 52729 +a52730 = 52730 +a52731 = 52731 +a52732 = 52732 +a52733 = 52733 +a52734 = 52734 +a52735 = 52735 +a52736 = 52736 +a52737 = 52737 +a52738 = 52738 +a52739 = 52739 +a52740 = 52740 +a52741 = 52741 +a52742 = 52742 +a52743 = 52743 +a52744 = 52744 +a52745 = 52745 +a52746 = 52746 +a52747 = 52747 +a52748 = 52748 +a52749 = 52749 +a52750 = 52750 +a52751 = 52751 +a52752 = 52752 +a52753 = 52753 +a52754 = 52754 +a52755 = 52755 +a52756 = 52756 +a52757 = 52757 +a52758 = 52758 +a52759 = 52759 +a52760 = 52760 +a52761 = 52761 +a52762 = 52762 +a52763 = 52763 +a52764 = 52764 +a52765 = 52765 +a52766 = 52766 +a52767 = 52767 +a52768 = 52768 +a52769 = 52769 +a52770 = 52770 +a52771 = 52771 +a52772 = 52772 +a52773 = 52773 +a52774 = 52774 +a52775 = 52775 +a52776 = 52776 +a52777 = 52777 +a52778 = 52778 +a52779 = 52779 +a52780 = 52780 +a52781 = 52781 +a52782 = 52782 +a52783 = 52783 +a52784 = 52784 +a52785 = 52785 +a52786 = 52786 +a52787 = 52787 +a52788 = 52788 +a52789 = 52789 +a52790 = 52790 +a52791 = 52791 +a52792 = 52792 +a52793 = 52793 +a52794 = 52794 +a52795 = 52795 +a52796 = 52796 +a52797 = 52797 +a52798 = 52798 +a52799 = 52799 +a52800 = 52800 +a52801 = 52801 +a52802 = 52802 +a52803 = 52803 +a52804 = 52804 +a52805 = 52805 +a52806 = 52806 +a52807 = 52807 +a52808 = 52808 +a52809 = 52809 +a52810 = 52810 +a52811 = 52811 +a52812 = 52812 +a52813 = 52813 +a52814 = 52814 +a52815 = 52815 +a52816 = 52816 +a52817 = 52817 +a52818 = 52818 +a52819 = 52819 +a52820 = 52820 +a52821 = 52821 +a52822 = 52822 +a52823 = 52823 +a52824 = 52824 +a52825 = 52825 +a52826 = 52826 +a52827 = 52827 +a52828 = 52828 +a52829 = 52829 +a52830 = 52830 +a52831 = 52831 +a52832 = 52832 +a52833 = 52833 +a52834 = 52834 +a52835 = 52835 +a52836 = 52836 +a52837 = 52837 +a52838 = 52838 +a52839 = 52839 +a52840 = 52840 +a52841 = 52841 +a52842 = 52842 +a52843 = 52843 +a52844 = 52844 +a52845 = 52845 +a52846 = 52846 +a52847 = 52847 +a52848 = 52848 +a52849 = 52849 +a52850 = 52850 +a52851 = 52851 +a52852 = 52852 +a52853 = 52853 +a52854 = 52854 +a52855 = 52855 +a52856 = 52856 +a52857 = 52857 +a52858 = 52858 +a52859 = 52859 +a52860 = 52860 +a52861 = 52861 +a52862 = 52862 +a52863 = 52863 +a52864 = 52864 +a52865 = 52865 +a52866 = 52866 +a52867 = 52867 +a52868 = 52868 +a52869 = 52869 +a52870 = 52870 +a52871 = 52871 +a52872 = 52872 +a52873 = 52873 +a52874 = 52874 +a52875 = 52875 +a52876 = 52876 +a52877 = 52877 +a52878 = 52878 +a52879 = 52879 +a52880 = 52880 +a52881 = 52881 +a52882 = 52882 +a52883 = 52883 +a52884 = 52884 +a52885 = 52885 +a52886 = 52886 +a52887 = 52887 +a52888 = 52888 +a52889 = 52889 +a52890 = 52890 +a52891 = 52891 +a52892 = 52892 +a52893 = 52893 +a52894 = 52894 +a52895 = 52895 +a52896 = 52896 +a52897 = 52897 +a52898 = 52898 +a52899 = 52899 +a52900 = 52900 +a52901 = 52901 +a52902 = 52902 +a52903 = 52903 +a52904 = 52904 +a52905 = 52905 +a52906 = 52906 +a52907 = 52907 +a52908 = 52908 +a52909 = 52909 +a52910 = 52910 +a52911 = 52911 +a52912 = 52912 +a52913 = 52913 +a52914 = 52914 +a52915 = 52915 +a52916 = 52916 +a52917 = 52917 +a52918 = 52918 +a52919 = 52919 +a52920 = 52920 +a52921 = 52921 +a52922 = 52922 +a52923 = 52923 +a52924 = 52924 +a52925 = 52925 +a52926 = 52926 +a52927 = 52927 +a52928 = 52928 +a52929 = 52929 +a52930 = 52930 +a52931 = 52931 +a52932 = 52932 +a52933 = 52933 +a52934 = 52934 +a52935 = 52935 +a52936 = 52936 +a52937 = 52937 +a52938 = 52938 +a52939 = 52939 +a52940 = 52940 +a52941 = 52941 +a52942 = 52942 +a52943 = 52943 +a52944 = 52944 +a52945 = 52945 +a52946 = 52946 +a52947 = 52947 +a52948 = 52948 +a52949 = 52949 +a52950 = 52950 +a52951 = 52951 +a52952 = 52952 +a52953 = 52953 +a52954 = 52954 +a52955 = 52955 +a52956 = 52956 +a52957 = 52957 +a52958 = 52958 +a52959 = 52959 +a52960 = 52960 +a52961 = 52961 +a52962 = 52962 +a52963 = 52963 +a52964 = 52964 +a52965 = 52965 +a52966 = 52966 +a52967 = 52967 +a52968 = 52968 +a52969 = 52969 +a52970 = 52970 +a52971 = 52971 +a52972 = 52972 +a52973 = 52973 +a52974 = 52974 +a52975 = 52975 +a52976 = 52976 +a52977 = 52977 +a52978 = 52978 +a52979 = 52979 +a52980 = 52980 +a52981 = 52981 +a52982 = 52982 +a52983 = 52983 +a52984 = 52984 +a52985 = 52985 +a52986 = 52986 +a52987 = 52987 +a52988 = 52988 +a52989 = 52989 +a52990 = 52990 +a52991 = 52991 +a52992 = 52992 +a52993 = 52993 +a52994 = 52994 +a52995 = 52995 +a52996 = 52996 +a52997 = 52997 +a52998 = 52998 +a52999 = 52999 +a53000 = 53000 +a53001 = 53001 +a53002 = 53002 +a53003 = 53003 +a53004 = 53004 +a53005 = 53005 +a53006 = 53006 +a53007 = 53007 +a53008 = 53008 +a53009 = 53009 +a53010 = 53010 +a53011 = 53011 +a53012 = 53012 +a53013 = 53013 +a53014 = 53014 +a53015 = 53015 +a53016 = 53016 +a53017 = 53017 +a53018 = 53018 +a53019 = 53019 +a53020 = 53020 +a53021 = 53021 +a53022 = 53022 +a53023 = 53023 +a53024 = 53024 +a53025 = 53025 +a53026 = 53026 +a53027 = 53027 +a53028 = 53028 +a53029 = 53029 +a53030 = 53030 +a53031 = 53031 +a53032 = 53032 +a53033 = 53033 +a53034 = 53034 +a53035 = 53035 +a53036 = 53036 +a53037 = 53037 +a53038 = 53038 +a53039 = 53039 +a53040 = 53040 +a53041 = 53041 +a53042 = 53042 +a53043 = 53043 +a53044 = 53044 +a53045 = 53045 +a53046 = 53046 +a53047 = 53047 +a53048 = 53048 +a53049 = 53049 +a53050 = 53050 +a53051 = 53051 +a53052 = 53052 +a53053 = 53053 +a53054 = 53054 +a53055 = 53055 +a53056 = 53056 +a53057 = 53057 +a53058 = 53058 +a53059 = 53059 +a53060 = 53060 +a53061 = 53061 +a53062 = 53062 +a53063 = 53063 +a53064 = 53064 +a53065 = 53065 +a53066 = 53066 +a53067 = 53067 +a53068 = 53068 +a53069 = 53069 +a53070 = 53070 +a53071 = 53071 +a53072 = 53072 +a53073 = 53073 +a53074 = 53074 +a53075 = 53075 +a53076 = 53076 +a53077 = 53077 +a53078 = 53078 +a53079 = 53079 +a53080 = 53080 +a53081 = 53081 +a53082 = 53082 +a53083 = 53083 +a53084 = 53084 +a53085 = 53085 +a53086 = 53086 +a53087 = 53087 +a53088 = 53088 +a53089 = 53089 +a53090 = 53090 +a53091 = 53091 +a53092 = 53092 +a53093 = 53093 +a53094 = 53094 +a53095 = 53095 +a53096 = 53096 +a53097 = 53097 +a53098 = 53098 +a53099 = 53099 +a53100 = 53100 +a53101 = 53101 +a53102 = 53102 +a53103 = 53103 +a53104 = 53104 +a53105 = 53105 +a53106 = 53106 +a53107 = 53107 +a53108 = 53108 +a53109 = 53109 +a53110 = 53110 +a53111 = 53111 +a53112 = 53112 +a53113 = 53113 +a53114 = 53114 +a53115 = 53115 +a53116 = 53116 +a53117 = 53117 +a53118 = 53118 +a53119 = 53119 +a53120 = 53120 +a53121 = 53121 +a53122 = 53122 +a53123 = 53123 +a53124 = 53124 +a53125 = 53125 +a53126 = 53126 +a53127 = 53127 +a53128 = 53128 +a53129 = 53129 +a53130 = 53130 +a53131 = 53131 +a53132 = 53132 +a53133 = 53133 +a53134 = 53134 +a53135 = 53135 +a53136 = 53136 +a53137 = 53137 +a53138 = 53138 +a53139 = 53139 +a53140 = 53140 +a53141 = 53141 +a53142 = 53142 +a53143 = 53143 +a53144 = 53144 +a53145 = 53145 +a53146 = 53146 +a53147 = 53147 +a53148 = 53148 +a53149 = 53149 +a53150 = 53150 +a53151 = 53151 +a53152 = 53152 +a53153 = 53153 +a53154 = 53154 +a53155 = 53155 +a53156 = 53156 +a53157 = 53157 +a53158 = 53158 +a53159 = 53159 +a53160 = 53160 +a53161 = 53161 +a53162 = 53162 +a53163 = 53163 +a53164 = 53164 +a53165 = 53165 +a53166 = 53166 +a53167 = 53167 +a53168 = 53168 +a53169 = 53169 +a53170 = 53170 +a53171 = 53171 +a53172 = 53172 +a53173 = 53173 +a53174 = 53174 +a53175 = 53175 +a53176 = 53176 +a53177 = 53177 +a53178 = 53178 +a53179 = 53179 +a53180 = 53180 +a53181 = 53181 +a53182 = 53182 +a53183 = 53183 +a53184 = 53184 +a53185 = 53185 +a53186 = 53186 +a53187 = 53187 +a53188 = 53188 +a53189 = 53189 +a53190 = 53190 +a53191 = 53191 +a53192 = 53192 +a53193 = 53193 +a53194 = 53194 +a53195 = 53195 +a53196 = 53196 +a53197 = 53197 +a53198 = 53198 +a53199 = 53199 +a53200 = 53200 +a53201 = 53201 +a53202 = 53202 +a53203 = 53203 +a53204 = 53204 +a53205 = 53205 +a53206 = 53206 +a53207 = 53207 +a53208 = 53208 +a53209 = 53209 +a53210 = 53210 +a53211 = 53211 +a53212 = 53212 +a53213 = 53213 +a53214 = 53214 +a53215 = 53215 +a53216 = 53216 +a53217 = 53217 +a53218 = 53218 +a53219 = 53219 +a53220 = 53220 +a53221 = 53221 +a53222 = 53222 +a53223 = 53223 +a53224 = 53224 +a53225 = 53225 +a53226 = 53226 +a53227 = 53227 +a53228 = 53228 +a53229 = 53229 +a53230 = 53230 +a53231 = 53231 +a53232 = 53232 +a53233 = 53233 +a53234 = 53234 +a53235 = 53235 +a53236 = 53236 +a53237 = 53237 +a53238 = 53238 +a53239 = 53239 +a53240 = 53240 +a53241 = 53241 +a53242 = 53242 +a53243 = 53243 +a53244 = 53244 +a53245 = 53245 +a53246 = 53246 +a53247 = 53247 +a53248 = 53248 +a53249 = 53249 +a53250 = 53250 +a53251 = 53251 +a53252 = 53252 +a53253 = 53253 +a53254 = 53254 +a53255 = 53255 +a53256 = 53256 +a53257 = 53257 +a53258 = 53258 +a53259 = 53259 +a53260 = 53260 +a53261 = 53261 +a53262 = 53262 +a53263 = 53263 +a53264 = 53264 +a53265 = 53265 +a53266 = 53266 +a53267 = 53267 +a53268 = 53268 +a53269 = 53269 +a53270 = 53270 +a53271 = 53271 +a53272 = 53272 +a53273 = 53273 +a53274 = 53274 +a53275 = 53275 +a53276 = 53276 +a53277 = 53277 +a53278 = 53278 +a53279 = 53279 +a53280 = 53280 +a53281 = 53281 +a53282 = 53282 +a53283 = 53283 +a53284 = 53284 +a53285 = 53285 +a53286 = 53286 +a53287 = 53287 +a53288 = 53288 +a53289 = 53289 +a53290 = 53290 +a53291 = 53291 +a53292 = 53292 +a53293 = 53293 +a53294 = 53294 +a53295 = 53295 +a53296 = 53296 +a53297 = 53297 +a53298 = 53298 +a53299 = 53299 +a53300 = 53300 +a53301 = 53301 +a53302 = 53302 +a53303 = 53303 +a53304 = 53304 +a53305 = 53305 +a53306 = 53306 +a53307 = 53307 +a53308 = 53308 +a53309 = 53309 +a53310 = 53310 +a53311 = 53311 +a53312 = 53312 +a53313 = 53313 +a53314 = 53314 +a53315 = 53315 +a53316 = 53316 +a53317 = 53317 +a53318 = 53318 +a53319 = 53319 +a53320 = 53320 +a53321 = 53321 +a53322 = 53322 +a53323 = 53323 +a53324 = 53324 +a53325 = 53325 +a53326 = 53326 +a53327 = 53327 +a53328 = 53328 +a53329 = 53329 +a53330 = 53330 +a53331 = 53331 +a53332 = 53332 +a53333 = 53333 +a53334 = 53334 +a53335 = 53335 +a53336 = 53336 +a53337 = 53337 +a53338 = 53338 +a53339 = 53339 +a53340 = 53340 +a53341 = 53341 +a53342 = 53342 +a53343 = 53343 +a53344 = 53344 +a53345 = 53345 +a53346 = 53346 +a53347 = 53347 +a53348 = 53348 +a53349 = 53349 +a53350 = 53350 +a53351 = 53351 +a53352 = 53352 +a53353 = 53353 +a53354 = 53354 +a53355 = 53355 +a53356 = 53356 +a53357 = 53357 +a53358 = 53358 +a53359 = 53359 +a53360 = 53360 +a53361 = 53361 +a53362 = 53362 +a53363 = 53363 +a53364 = 53364 +a53365 = 53365 +a53366 = 53366 +a53367 = 53367 +a53368 = 53368 +a53369 = 53369 +a53370 = 53370 +a53371 = 53371 +a53372 = 53372 +a53373 = 53373 +a53374 = 53374 +a53375 = 53375 +a53376 = 53376 +a53377 = 53377 +a53378 = 53378 +a53379 = 53379 +a53380 = 53380 +a53381 = 53381 +a53382 = 53382 +a53383 = 53383 +a53384 = 53384 +a53385 = 53385 +a53386 = 53386 +a53387 = 53387 +a53388 = 53388 +a53389 = 53389 +a53390 = 53390 +a53391 = 53391 +a53392 = 53392 +a53393 = 53393 +a53394 = 53394 +a53395 = 53395 +a53396 = 53396 +a53397 = 53397 +a53398 = 53398 +a53399 = 53399 +a53400 = 53400 +a53401 = 53401 +a53402 = 53402 +a53403 = 53403 +a53404 = 53404 +a53405 = 53405 +a53406 = 53406 +a53407 = 53407 +a53408 = 53408 +a53409 = 53409 +a53410 = 53410 +a53411 = 53411 +a53412 = 53412 +a53413 = 53413 +a53414 = 53414 +a53415 = 53415 +a53416 = 53416 +a53417 = 53417 +a53418 = 53418 +a53419 = 53419 +a53420 = 53420 +a53421 = 53421 +a53422 = 53422 +a53423 = 53423 +a53424 = 53424 +a53425 = 53425 +a53426 = 53426 +a53427 = 53427 +a53428 = 53428 +a53429 = 53429 +a53430 = 53430 +a53431 = 53431 +a53432 = 53432 +a53433 = 53433 +a53434 = 53434 +a53435 = 53435 +a53436 = 53436 +a53437 = 53437 +a53438 = 53438 +a53439 = 53439 +a53440 = 53440 +a53441 = 53441 +a53442 = 53442 +a53443 = 53443 +a53444 = 53444 +a53445 = 53445 +a53446 = 53446 +a53447 = 53447 +a53448 = 53448 +a53449 = 53449 +a53450 = 53450 +a53451 = 53451 +a53452 = 53452 +a53453 = 53453 +a53454 = 53454 +a53455 = 53455 +a53456 = 53456 +a53457 = 53457 +a53458 = 53458 +a53459 = 53459 +a53460 = 53460 +a53461 = 53461 +a53462 = 53462 +a53463 = 53463 +a53464 = 53464 +a53465 = 53465 +a53466 = 53466 +a53467 = 53467 +a53468 = 53468 +a53469 = 53469 +a53470 = 53470 +a53471 = 53471 +a53472 = 53472 +a53473 = 53473 +a53474 = 53474 +a53475 = 53475 +a53476 = 53476 +a53477 = 53477 +a53478 = 53478 +a53479 = 53479 +a53480 = 53480 +a53481 = 53481 +a53482 = 53482 +a53483 = 53483 +a53484 = 53484 +a53485 = 53485 +a53486 = 53486 +a53487 = 53487 +a53488 = 53488 +a53489 = 53489 +a53490 = 53490 +a53491 = 53491 +a53492 = 53492 +a53493 = 53493 +a53494 = 53494 +a53495 = 53495 +a53496 = 53496 +a53497 = 53497 +a53498 = 53498 +a53499 = 53499 +a53500 = 53500 +a53501 = 53501 +a53502 = 53502 +a53503 = 53503 +a53504 = 53504 +a53505 = 53505 +a53506 = 53506 +a53507 = 53507 +a53508 = 53508 +a53509 = 53509 +a53510 = 53510 +a53511 = 53511 +a53512 = 53512 +a53513 = 53513 +a53514 = 53514 +a53515 = 53515 +a53516 = 53516 +a53517 = 53517 +a53518 = 53518 +a53519 = 53519 +a53520 = 53520 +a53521 = 53521 +a53522 = 53522 +a53523 = 53523 +a53524 = 53524 +a53525 = 53525 +a53526 = 53526 +a53527 = 53527 +a53528 = 53528 +a53529 = 53529 +a53530 = 53530 +a53531 = 53531 +a53532 = 53532 +a53533 = 53533 +a53534 = 53534 +a53535 = 53535 +a53536 = 53536 +a53537 = 53537 +a53538 = 53538 +a53539 = 53539 +a53540 = 53540 +a53541 = 53541 +a53542 = 53542 +a53543 = 53543 +a53544 = 53544 +a53545 = 53545 +a53546 = 53546 +a53547 = 53547 +a53548 = 53548 +a53549 = 53549 +a53550 = 53550 +a53551 = 53551 +a53552 = 53552 +a53553 = 53553 +a53554 = 53554 +a53555 = 53555 +a53556 = 53556 +a53557 = 53557 +a53558 = 53558 +a53559 = 53559 +a53560 = 53560 +a53561 = 53561 +a53562 = 53562 +a53563 = 53563 +a53564 = 53564 +a53565 = 53565 +a53566 = 53566 +a53567 = 53567 +a53568 = 53568 +a53569 = 53569 +a53570 = 53570 +a53571 = 53571 +a53572 = 53572 +a53573 = 53573 +a53574 = 53574 +a53575 = 53575 +a53576 = 53576 +a53577 = 53577 +a53578 = 53578 +a53579 = 53579 +a53580 = 53580 +a53581 = 53581 +a53582 = 53582 +a53583 = 53583 +a53584 = 53584 +a53585 = 53585 +a53586 = 53586 +a53587 = 53587 +a53588 = 53588 +a53589 = 53589 +a53590 = 53590 +a53591 = 53591 +a53592 = 53592 +a53593 = 53593 +a53594 = 53594 +a53595 = 53595 +a53596 = 53596 +a53597 = 53597 +a53598 = 53598 +a53599 = 53599 +a53600 = 53600 +a53601 = 53601 +a53602 = 53602 +a53603 = 53603 +a53604 = 53604 +a53605 = 53605 +a53606 = 53606 +a53607 = 53607 +a53608 = 53608 +a53609 = 53609 +a53610 = 53610 +a53611 = 53611 +a53612 = 53612 +a53613 = 53613 +a53614 = 53614 +a53615 = 53615 +a53616 = 53616 +a53617 = 53617 +a53618 = 53618 +a53619 = 53619 +a53620 = 53620 +a53621 = 53621 +a53622 = 53622 +a53623 = 53623 +a53624 = 53624 +a53625 = 53625 +a53626 = 53626 +a53627 = 53627 +a53628 = 53628 +a53629 = 53629 +a53630 = 53630 +a53631 = 53631 +a53632 = 53632 +a53633 = 53633 +a53634 = 53634 +a53635 = 53635 +a53636 = 53636 +a53637 = 53637 +a53638 = 53638 +a53639 = 53639 +a53640 = 53640 +a53641 = 53641 +a53642 = 53642 +a53643 = 53643 +a53644 = 53644 +a53645 = 53645 +a53646 = 53646 +a53647 = 53647 +a53648 = 53648 +a53649 = 53649 +a53650 = 53650 +a53651 = 53651 +a53652 = 53652 +a53653 = 53653 +a53654 = 53654 +a53655 = 53655 +a53656 = 53656 +a53657 = 53657 +a53658 = 53658 +a53659 = 53659 +a53660 = 53660 +a53661 = 53661 +a53662 = 53662 +a53663 = 53663 +a53664 = 53664 +a53665 = 53665 +a53666 = 53666 +a53667 = 53667 +a53668 = 53668 +a53669 = 53669 +a53670 = 53670 +a53671 = 53671 +a53672 = 53672 +a53673 = 53673 +a53674 = 53674 +a53675 = 53675 +a53676 = 53676 +a53677 = 53677 +a53678 = 53678 +a53679 = 53679 +a53680 = 53680 +a53681 = 53681 +a53682 = 53682 +a53683 = 53683 +a53684 = 53684 +a53685 = 53685 +a53686 = 53686 +a53687 = 53687 +a53688 = 53688 +a53689 = 53689 +a53690 = 53690 +a53691 = 53691 +a53692 = 53692 +a53693 = 53693 +a53694 = 53694 +a53695 = 53695 +a53696 = 53696 +a53697 = 53697 +a53698 = 53698 +a53699 = 53699 +a53700 = 53700 +a53701 = 53701 +a53702 = 53702 +a53703 = 53703 +a53704 = 53704 +a53705 = 53705 +a53706 = 53706 +a53707 = 53707 +a53708 = 53708 +a53709 = 53709 +a53710 = 53710 +a53711 = 53711 +a53712 = 53712 +a53713 = 53713 +a53714 = 53714 +a53715 = 53715 +a53716 = 53716 +a53717 = 53717 +a53718 = 53718 +a53719 = 53719 +a53720 = 53720 +a53721 = 53721 +a53722 = 53722 +a53723 = 53723 +a53724 = 53724 +a53725 = 53725 +a53726 = 53726 +a53727 = 53727 +a53728 = 53728 +a53729 = 53729 +a53730 = 53730 +a53731 = 53731 +a53732 = 53732 +a53733 = 53733 +a53734 = 53734 +a53735 = 53735 +a53736 = 53736 +a53737 = 53737 +a53738 = 53738 +a53739 = 53739 +a53740 = 53740 +a53741 = 53741 +a53742 = 53742 +a53743 = 53743 +a53744 = 53744 +a53745 = 53745 +a53746 = 53746 +a53747 = 53747 +a53748 = 53748 +a53749 = 53749 +a53750 = 53750 +a53751 = 53751 +a53752 = 53752 +a53753 = 53753 +a53754 = 53754 +a53755 = 53755 +a53756 = 53756 +a53757 = 53757 +a53758 = 53758 +a53759 = 53759 +a53760 = 53760 +a53761 = 53761 +a53762 = 53762 +a53763 = 53763 +a53764 = 53764 +a53765 = 53765 +a53766 = 53766 +a53767 = 53767 +a53768 = 53768 +a53769 = 53769 +a53770 = 53770 +a53771 = 53771 +a53772 = 53772 +a53773 = 53773 +a53774 = 53774 +a53775 = 53775 +a53776 = 53776 +a53777 = 53777 +a53778 = 53778 +a53779 = 53779 +a53780 = 53780 +a53781 = 53781 +a53782 = 53782 +a53783 = 53783 +a53784 = 53784 +a53785 = 53785 +a53786 = 53786 +a53787 = 53787 +a53788 = 53788 +a53789 = 53789 +a53790 = 53790 +a53791 = 53791 +a53792 = 53792 +a53793 = 53793 +a53794 = 53794 +a53795 = 53795 +a53796 = 53796 +a53797 = 53797 +a53798 = 53798 +a53799 = 53799 +a53800 = 53800 +a53801 = 53801 +a53802 = 53802 +a53803 = 53803 +a53804 = 53804 +a53805 = 53805 +a53806 = 53806 +a53807 = 53807 +a53808 = 53808 +a53809 = 53809 +a53810 = 53810 +a53811 = 53811 +a53812 = 53812 +a53813 = 53813 +a53814 = 53814 +a53815 = 53815 +a53816 = 53816 +a53817 = 53817 +a53818 = 53818 +a53819 = 53819 +a53820 = 53820 +a53821 = 53821 +a53822 = 53822 +a53823 = 53823 +a53824 = 53824 +a53825 = 53825 +a53826 = 53826 +a53827 = 53827 +a53828 = 53828 +a53829 = 53829 +a53830 = 53830 +a53831 = 53831 +a53832 = 53832 +a53833 = 53833 +a53834 = 53834 +a53835 = 53835 +a53836 = 53836 +a53837 = 53837 +a53838 = 53838 +a53839 = 53839 +a53840 = 53840 +a53841 = 53841 +a53842 = 53842 +a53843 = 53843 +a53844 = 53844 +a53845 = 53845 +a53846 = 53846 +a53847 = 53847 +a53848 = 53848 +a53849 = 53849 +a53850 = 53850 +a53851 = 53851 +a53852 = 53852 +a53853 = 53853 +a53854 = 53854 +a53855 = 53855 +a53856 = 53856 +a53857 = 53857 +a53858 = 53858 +a53859 = 53859 +a53860 = 53860 +a53861 = 53861 +a53862 = 53862 +a53863 = 53863 +a53864 = 53864 +a53865 = 53865 +a53866 = 53866 +a53867 = 53867 +a53868 = 53868 +a53869 = 53869 +a53870 = 53870 +a53871 = 53871 +a53872 = 53872 +a53873 = 53873 +a53874 = 53874 +a53875 = 53875 +a53876 = 53876 +a53877 = 53877 +a53878 = 53878 +a53879 = 53879 +a53880 = 53880 +a53881 = 53881 +a53882 = 53882 +a53883 = 53883 +a53884 = 53884 +a53885 = 53885 +a53886 = 53886 +a53887 = 53887 +a53888 = 53888 +a53889 = 53889 +a53890 = 53890 +a53891 = 53891 +a53892 = 53892 +a53893 = 53893 +a53894 = 53894 +a53895 = 53895 +a53896 = 53896 +a53897 = 53897 +a53898 = 53898 +a53899 = 53899 +a53900 = 53900 +a53901 = 53901 +a53902 = 53902 +a53903 = 53903 +a53904 = 53904 +a53905 = 53905 +a53906 = 53906 +a53907 = 53907 +a53908 = 53908 +a53909 = 53909 +a53910 = 53910 +a53911 = 53911 +a53912 = 53912 +a53913 = 53913 +a53914 = 53914 +a53915 = 53915 +a53916 = 53916 +a53917 = 53917 +a53918 = 53918 +a53919 = 53919 +a53920 = 53920 +a53921 = 53921 +a53922 = 53922 +a53923 = 53923 +a53924 = 53924 +a53925 = 53925 +a53926 = 53926 +a53927 = 53927 +a53928 = 53928 +a53929 = 53929 +a53930 = 53930 +a53931 = 53931 +a53932 = 53932 +a53933 = 53933 +a53934 = 53934 +a53935 = 53935 +a53936 = 53936 +a53937 = 53937 +a53938 = 53938 +a53939 = 53939 +a53940 = 53940 +a53941 = 53941 +a53942 = 53942 +a53943 = 53943 +a53944 = 53944 +a53945 = 53945 +a53946 = 53946 +a53947 = 53947 +a53948 = 53948 +a53949 = 53949 +a53950 = 53950 +a53951 = 53951 +a53952 = 53952 +a53953 = 53953 +a53954 = 53954 +a53955 = 53955 +a53956 = 53956 +a53957 = 53957 +a53958 = 53958 +a53959 = 53959 +a53960 = 53960 +a53961 = 53961 +a53962 = 53962 +a53963 = 53963 +a53964 = 53964 +a53965 = 53965 +a53966 = 53966 +a53967 = 53967 +a53968 = 53968 +a53969 = 53969 +a53970 = 53970 +a53971 = 53971 +a53972 = 53972 +a53973 = 53973 +a53974 = 53974 +a53975 = 53975 +a53976 = 53976 +a53977 = 53977 +a53978 = 53978 +a53979 = 53979 +a53980 = 53980 +a53981 = 53981 +a53982 = 53982 +a53983 = 53983 +a53984 = 53984 +a53985 = 53985 +a53986 = 53986 +a53987 = 53987 +a53988 = 53988 +a53989 = 53989 +a53990 = 53990 +a53991 = 53991 +a53992 = 53992 +a53993 = 53993 +a53994 = 53994 +a53995 = 53995 +a53996 = 53996 +a53997 = 53997 +a53998 = 53998 +a53999 = 53999 +a54000 = 54000 +a54001 = 54001 +a54002 = 54002 +a54003 = 54003 +a54004 = 54004 +a54005 = 54005 +a54006 = 54006 +a54007 = 54007 +a54008 = 54008 +a54009 = 54009 +a54010 = 54010 +a54011 = 54011 +a54012 = 54012 +a54013 = 54013 +a54014 = 54014 +a54015 = 54015 +a54016 = 54016 +a54017 = 54017 +a54018 = 54018 +a54019 = 54019 +a54020 = 54020 +a54021 = 54021 +a54022 = 54022 +a54023 = 54023 +a54024 = 54024 +a54025 = 54025 +a54026 = 54026 +a54027 = 54027 +a54028 = 54028 +a54029 = 54029 +a54030 = 54030 +a54031 = 54031 +a54032 = 54032 +a54033 = 54033 +a54034 = 54034 +a54035 = 54035 +a54036 = 54036 +a54037 = 54037 +a54038 = 54038 +a54039 = 54039 +a54040 = 54040 +a54041 = 54041 +a54042 = 54042 +a54043 = 54043 +a54044 = 54044 +a54045 = 54045 +a54046 = 54046 +a54047 = 54047 +a54048 = 54048 +a54049 = 54049 +a54050 = 54050 +a54051 = 54051 +a54052 = 54052 +a54053 = 54053 +a54054 = 54054 +a54055 = 54055 +a54056 = 54056 +a54057 = 54057 +a54058 = 54058 +a54059 = 54059 +a54060 = 54060 +a54061 = 54061 +a54062 = 54062 +a54063 = 54063 +a54064 = 54064 +a54065 = 54065 +a54066 = 54066 +a54067 = 54067 +a54068 = 54068 +a54069 = 54069 +a54070 = 54070 +a54071 = 54071 +a54072 = 54072 +a54073 = 54073 +a54074 = 54074 +a54075 = 54075 +a54076 = 54076 +a54077 = 54077 +a54078 = 54078 +a54079 = 54079 +a54080 = 54080 +a54081 = 54081 +a54082 = 54082 +a54083 = 54083 +a54084 = 54084 +a54085 = 54085 +a54086 = 54086 +a54087 = 54087 +a54088 = 54088 +a54089 = 54089 +a54090 = 54090 +a54091 = 54091 +a54092 = 54092 +a54093 = 54093 +a54094 = 54094 +a54095 = 54095 +a54096 = 54096 +a54097 = 54097 +a54098 = 54098 +a54099 = 54099 +a54100 = 54100 +a54101 = 54101 +a54102 = 54102 +a54103 = 54103 +a54104 = 54104 +a54105 = 54105 +a54106 = 54106 +a54107 = 54107 +a54108 = 54108 +a54109 = 54109 +a54110 = 54110 +a54111 = 54111 +a54112 = 54112 +a54113 = 54113 +a54114 = 54114 +a54115 = 54115 +a54116 = 54116 +a54117 = 54117 +a54118 = 54118 +a54119 = 54119 +a54120 = 54120 +a54121 = 54121 +a54122 = 54122 +a54123 = 54123 +a54124 = 54124 +a54125 = 54125 +a54126 = 54126 +a54127 = 54127 +a54128 = 54128 +a54129 = 54129 +a54130 = 54130 +a54131 = 54131 +a54132 = 54132 +a54133 = 54133 +a54134 = 54134 +a54135 = 54135 +a54136 = 54136 +a54137 = 54137 +a54138 = 54138 +a54139 = 54139 +a54140 = 54140 +a54141 = 54141 +a54142 = 54142 +a54143 = 54143 +a54144 = 54144 +a54145 = 54145 +a54146 = 54146 +a54147 = 54147 +a54148 = 54148 +a54149 = 54149 +a54150 = 54150 +a54151 = 54151 +a54152 = 54152 +a54153 = 54153 +a54154 = 54154 +a54155 = 54155 +a54156 = 54156 +a54157 = 54157 +a54158 = 54158 +a54159 = 54159 +a54160 = 54160 +a54161 = 54161 +a54162 = 54162 +a54163 = 54163 +a54164 = 54164 +a54165 = 54165 +a54166 = 54166 +a54167 = 54167 +a54168 = 54168 +a54169 = 54169 +a54170 = 54170 +a54171 = 54171 +a54172 = 54172 +a54173 = 54173 +a54174 = 54174 +a54175 = 54175 +a54176 = 54176 +a54177 = 54177 +a54178 = 54178 +a54179 = 54179 +a54180 = 54180 +a54181 = 54181 +a54182 = 54182 +a54183 = 54183 +a54184 = 54184 +a54185 = 54185 +a54186 = 54186 +a54187 = 54187 +a54188 = 54188 +a54189 = 54189 +a54190 = 54190 +a54191 = 54191 +a54192 = 54192 +a54193 = 54193 +a54194 = 54194 +a54195 = 54195 +a54196 = 54196 +a54197 = 54197 +a54198 = 54198 +a54199 = 54199 +a54200 = 54200 +a54201 = 54201 +a54202 = 54202 +a54203 = 54203 +a54204 = 54204 +a54205 = 54205 +a54206 = 54206 +a54207 = 54207 +a54208 = 54208 +a54209 = 54209 +a54210 = 54210 +a54211 = 54211 +a54212 = 54212 +a54213 = 54213 +a54214 = 54214 +a54215 = 54215 +a54216 = 54216 +a54217 = 54217 +a54218 = 54218 +a54219 = 54219 +a54220 = 54220 +a54221 = 54221 +a54222 = 54222 +a54223 = 54223 +a54224 = 54224 +a54225 = 54225 +a54226 = 54226 +a54227 = 54227 +a54228 = 54228 +a54229 = 54229 +a54230 = 54230 +a54231 = 54231 +a54232 = 54232 +a54233 = 54233 +a54234 = 54234 +a54235 = 54235 +a54236 = 54236 +a54237 = 54237 +a54238 = 54238 +a54239 = 54239 +a54240 = 54240 +a54241 = 54241 +a54242 = 54242 +a54243 = 54243 +a54244 = 54244 +a54245 = 54245 +a54246 = 54246 +a54247 = 54247 +a54248 = 54248 +a54249 = 54249 +a54250 = 54250 +a54251 = 54251 +a54252 = 54252 +a54253 = 54253 +a54254 = 54254 +a54255 = 54255 +a54256 = 54256 +a54257 = 54257 +a54258 = 54258 +a54259 = 54259 +a54260 = 54260 +a54261 = 54261 +a54262 = 54262 +a54263 = 54263 +a54264 = 54264 +a54265 = 54265 +a54266 = 54266 +a54267 = 54267 +a54268 = 54268 +a54269 = 54269 +a54270 = 54270 +a54271 = 54271 +a54272 = 54272 +a54273 = 54273 +a54274 = 54274 +a54275 = 54275 +a54276 = 54276 +a54277 = 54277 +a54278 = 54278 +a54279 = 54279 +a54280 = 54280 +a54281 = 54281 +a54282 = 54282 +a54283 = 54283 +a54284 = 54284 +a54285 = 54285 +a54286 = 54286 +a54287 = 54287 +a54288 = 54288 +a54289 = 54289 +a54290 = 54290 +a54291 = 54291 +a54292 = 54292 +a54293 = 54293 +a54294 = 54294 +a54295 = 54295 +a54296 = 54296 +a54297 = 54297 +a54298 = 54298 +a54299 = 54299 +a54300 = 54300 +a54301 = 54301 +a54302 = 54302 +a54303 = 54303 +a54304 = 54304 +a54305 = 54305 +a54306 = 54306 +a54307 = 54307 +a54308 = 54308 +a54309 = 54309 +a54310 = 54310 +a54311 = 54311 +a54312 = 54312 +a54313 = 54313 +a54314 = 54314 +a54315 = 54315 +a54316 = 54316 +a54317 = 54317 +a54318 = 54318 +a54319 = 54319 +a54320 = 54320 +a54321 = 54321 +a54322 = 54322 +a54323 = 54323 +a54324 = 54324 +a54325 = 54325 +a54326 = 54326 +a54327 = 54327 +a54328 = 54328 +a54329 = 54329 +a54330 = 54330 +a54331 = 54331 +a54332 = 54332 +a54333 = 54333 +a54334 = 54334 +a54335 = 54335 +a54336 = 54336 +a54337 = 54337 +a54338 = 54338 +a54339 = 54339 +a54340 = 54340 +a54341 = 54341 +a54342 = 54342 +a54343 = 54343 +a54344 = 54344 +a54345 = 54345 +a54346 = 54346 +a54347 = 54347 +a54348 = 54348 +a54349 = 54349 +a54350 = 54350 +a54351 = 54351 +a54352 = 54352 +a54353 = 54353 +a54354 = 54354 +a54355 = 54355 +a54356 = 54356 +a54357 = 54357 +a54358 = 54358 +a54359 = 54359 +a54360 = 54360 +a54361 = 54361 +a54362 = 54362 +a54363 = 54363 +a54364 = 54364 +a54365 = 54365 +a54366 = 54366 +a54367 = 54367 +a54368 = 54368 +a54369 = 54369 +a54370 = 54370 +a54371 = 54371 +a54372 = 54372 +a54373 = 54373 +a54374 = 54374 +a54375 = 54375 +a54376 = 54376 +a54377 = 54377 +a54378 = 54378 +a54379 = 54379 +a54380 = 54380 +a54381 = 54381 +a54382 = 54382 +a54383 = 54383 +a54384 = 54384 +a54385 = 54385 +a54386 = 54386 +a54387 = 54387 +a54388 = 54388 +a54389 = 54389 +a54390 = 54390 +a54391 = 54391 +a54392 = 54392 +a54393 = 54393 +a54394 = 54394 +a54395 = 54395 +a54396 = 54396 +a54397 = 54397 +a54398 = 54398 +a54399 = 54399 +a54400 = 54400 +a54401 = 54401 +a54402 = 54402 +a54403 = 54403 +a54404 = 54404 +a54405 = 54405 +a54406 = 54406 +a54407 = 54407 +a54408 = 54408 +a54409 = 54409 +a54410 = 54410 +a54411 = 54411 +a54412 = 54412 +a54413 = 54413 +a54414 = 54414 +a54415 = 54415 +a54416 = 54416 +a54417 = 54417 +a54418 = 54418 +a54419 = 54419 +a54420 = 54420 +a54421 = 54421 +a54422 = 54422 +a54423 = 54423 +a54424 = 54424 +a54425 = 54425 +a54426 = 54426 +a54427 = 54427 +a54428 = 54428 +a54429 = 54429 +a54430 = 54430 +a54431 = 54431 +a54432 = 54432 +a54433 = 54433 +a54434 = 54434 +a54435 = 54435 +a54436 = 54436 +a54437 = 54437 +a54438 = 54438 +a54439 = 54439 +a54440 = 54440 +a54441 = 54441 +a54442 = 54442 +a54443 = 54443 +a54444 = 54444 +a54445 = 54445 +a54446 = 54446 +a54447 = 54447 +a54448 = 54448 +a54449 = 54449 +a54450 = 54450 +a54451 = 54451 +a54452 = 54452 +a54453 = 54453 +a54454 = 54454 +a54455 = 54455 +a54456 = 54456 +a54457 = 54457 +a54458 = 54458 +a54459 = 54459 +a54460 = 54460 +a54461 = 54461 +a54462 = 54462 +a54463 = 54463 +a54464 = 54464 +a54465 = 54465 +a54466 = 54466 +a54467 = 54467 +a54468 = 54468 +a54469 = 54469 +a54470 = 54470 +a54471 = 54471 +a54472 = 54472 +a54473 = 54473 +a54474 = 54474 +a54475 = 54475 +a54476 = 54476 +a54477 = 54477 +a54478 = 54478 +a54479 = 54479 +a54480 = 54480 +a54481 = 54481 +a54482 = 54482 +a54483 = 54483 +a54484 = 54484 +a54485 = 54485 +a54486 = 54486 +a54487 = 54487 +a54488 = 54488 +a54489 = 54489 +a54490 = 54490 +a54491 = 54491 +a54492 = 54492 +a54493 = 54493 +a54494 = 54494 +a54495 = 54495 +a54496 = 54496 +a54497 = 54497 +a54498 = 54498 +a54499 = 54499 +a54500 = 54500 +a54501 = 54501 +a54502 = 54502 +a54503 = 54503 +a54504 = 54504 +a54505 = 54505 +a54506 = 54506 +a54507 = 54507 +a54508 = 54508 +a54509 = 54509 +a54510 = 54510 +a54511 = 54511 +a54512 = 54512 +a54513 = 54513 +a54514 = 54514 +a54515 = 54515 +a54516 = 54516 +a54517 = 54517 +a54518 = 54518 +a54519 = 54519 +a54520 = 54520 +a54521 = 54521 +a54522 = 54522 +a54523 = 54523 +a54524 = 54524 +a54525 = 54525 +a54526 = 54526 +a54527 = 54527 +a54528 = 54528 +a54529 = 54529 +a54530 = 54530 +a54531 = 54531 +a54532 = 54532 +a54533 = 54533 +a54534 = 54534 +a54535 = 54535 +a54536 = 54536 +a54537 = 54537 +a54538 = 54538 +a54539 = 54539 +a54540 = 54540 +a54541 = 54541 +a54542 = 54542 +a54543 = 54543 +a54544 = 54544 +a54545 = 54545 +a54546 = 54546 +a54547 = 54547 +a54548 = 54548 +a54549 = 54549 +a54550 = 54550 +a54551 = 54551 +a54552 = 54552 +a54553 = 54553 +a54554 = 54554 +a54555 = 54555 +a54556 = 54556 +a54557 = 54557 +a54558 = 54558 +a54559 = 54559 +a54560 = 54560 +a54561 = 54561 +a54562 = 54562 +a54563 = 54563 +a54564 = 54564 +a54565 = 54565 +a54566 = 54566 +a54567 = 54567 +a54568 = 54568 +a54569 = 54569 +a54570 = 54570 +a54571 = 54571 +a54572 = 54572 +a54573 = 54573 +a54574 = 54574 +a54575 = 54575 +a54576 = 54576 +a54577 = 54577 +a54578 = 54578 +a54579 = 54579 +a54580 = 54580 +a54581 = 54581 +a54582 = 54582 +a54583 = 54583 +a54584 = 54584 +a54585 = 54585 +a54586 = 54586 +a54587 = 54587 +a54588 = 54588 +a54589 = 54589 +a54590 = 54590 +a54591 = 54591 +a54592 = 54592 +a54593 = 54593 +a54594 = 54594 +a54595 = 54595 +a54596 = 54596 +a54597 = 54597 +a54598 = 54598 +a54599 = 54599 +a54600 = 54600 +a54601 = 54601 +a54602 = 54602 +a54603 = 54603 +a54604 = 54604 +a54605 = 54605 +a54606 = 54606 +a54607 = 54607 +a54608 = 54608 +a54609 = 54609 +a54610 = 54610 +a54611 = 54611 +a54612 = 54612 +a54613 = 54613 +a54614 = 54614 +a54615 = 54615 +a54616 = 54616 +a54617 = 54617 +a54618 = 54618 +a54619 = 54619 +a54620 = 54620 +a54621 = 54621 +a54622 = 54622 +a54623 = 54623 +a54624 = 54624 +a54625 = 54625 +a54626 = 54626 +a54627 = 54627 +a54628 = 54628 +a54629 = 54629 +a54630 = 54630 +a54631 = 54631 +a54632 = 54632 +a54633 = 54633 +a54634 = 54634 +a54635 = 54635 +a54636 = 54636 +a54637 = 54637 +a54638 = 54638 +a54639 = 54639 +a54640 = 54640 +a54641 = 54641 +a54642 = 54642 +a54643 = 54643 +a54644 = 54644 +a54645 = 54645 +a54646 = 54646 +a54647 = 54647 +a54648 = 54648 +a54649 = 54649 +a54650 = 54650 +a54651 = 54651 +a54652 = 54652 +a54653 = 54653 +a54654 = 54654 +a54655 = 54655 +a54656 = 54656 +a54657 = 54657 +a54658 = 54658 +a54659 = 54659 +a54660 = 54660 +a54661 = 54661 +a54662 = 54662 +a54663 = 54663 +a54664 = 54664 +a54665 = 54665 +a54666 = 54666 +a54667 = 54667 +a54668 = 54668 +a54669 = 54669 +a54670 = 54670 +a54671 = 54671 +a54672 = 54672 +a54673 = 54673 +a54674 = 54674 +a54675 = 54675 +a54676 = 54676 +a54677 = 54677 +a54678 = 54678 +a54679 = 54679 +a54680 = 54680 +a54681 = 54681 +a54682 = 54682 +a54683 = 54683 +a54684 = 54684 +a54685 = 54685 +a54686 = 54686 +a54687 = 54687 +a54688 = 54688 +a54689 = 54689 +a54690 = 54690 +a54691 = 54691 +a54692 = 54692 +a54693 = 54693 +a54694 = 54694 +a54695 = 54695 +a54696 = 54696 +a54697 = 54697 +a54698 = 54698 +a54699 = 54699 +a54700 = 54700 +a54701 = 54701 +a54702 = 54702 +a54703 = 54703 +a54704 = 54704 +a54705 = 54705 +a54706 = 54706 +a54707 = 54707 +a54708 = 54708 +a54709 = 54709 +a54710 = 54710 +a54711 = 54711 +a54712 = 54712 +a54713 = 54713 +a54714 = 54714 +a54715 = 54715 +a54716 = 54716 +a54717 = 54717 +a54718 = 54718 +a54719 = 54719 +a54720 = 54720 +a54721 = 54721 +a54722 = 54722 +a54723 = 54723 +a54724 = 54724 +a54725 = 54725 +a54726 = 54726 +a54727 = 54727 +a54728 = 54728 +a54729 = 54729 +a54730 = 54730 +a54731 = 54731 +a54732 = 54732 +a54733 = 54733 +a54734 = 54734 +a54735 = 54735 +a54736 = 54736 +a54737 = 54737 +a54738 = 54738 +a54739 = 54739 +a54740 = 54740 +a54741 = 54741 +a54742 = 54742 +a54743 = 54743 +a54744 = 54744 +a54745 = 54745 +a54746 = 54746 +a54747 = 54747 +a54748 = 54748 +a54749 = 54749 +a54750 = 54750 +a54751 = 54751 +a54752 = 54752 +a54753 = 54753 +a54754 = 54754 +a54755 = 54755 +a54756 = 54756 +a54757 = 54757 +a54758 = 54758 +a54759 = 54759 +a54760 = 54760 +a54761 = 54761 +a54762 = 54762 +a54763 = 54763 +a54764 = 54764 +a54765 = 54765 +a54766 = 54766 +a54767 = 54767 +a54768 = 54768 +a54769 = 54769 +a54770 = 54770 +a54771 = 54771 +a54772 = 54772 +a54773 = 54773 +a54774 = 54774 +a54775 = 54775 +a54776 = 54776 +a54777 = 54777 +a54778 = 54778 +a54779 = 54779 +a54780 = 54780 +a54781 = 54781 +a54782 = 54782 +a54783 = 54783 +a54784 = 54784 +a54785 = 54785 +a54786 = 54786 +a54787 = 54787 +a54788 = 54788 +a54789 = 54789 +a54790 = 54790 +a54791 = 54791 +a54792 = 54792 +a54793 = 54793 +a54794 = 54794 +a54795 = 54795 +a54796 = 54796 +a54797 = 54797 +a54798 = 54798 +a54799 = 54799 +a54800 = 54800 +a54801 = 54801 +a54802 = 54802 +a54803 = 54803 +a54804 = 54804 +a54805 = 54805 +a54806 = 54806 +a54807 = 54807 +a54808 = 54808 +a54809 = 54809 +a54810 = 54810 +a54811 = 54811 +a54812 = 54812 +a54813 = 54813 +a54814 = 54814 +a54815 = 54815 +a54816 = 54816 +a54817 = 54817 +a54818 = 54818 +a54819 = 54819 +a54820 = 54820 +a54821 = 54821 +a54822 = 54822 +a54823 = 54823 +a54824 = 54824 +a54825 = 54825 +a54826 = 54826 +a54827 = 54827 +a54828 = 54828 +a54829 = 54829 +a54830 = 54830 +a54831 = 54831 +a54832 = 54832 +a54833 = 54833 +a54834 = 54834 +a54835 = 54835 +a54836 = 54836 +a54837 = 54837 +a54838 = 54838 +a54839 = 54839 +a54840 = 54840 +a54841 = 54841 +a54842 = 54842 +a54843 = 54843 +a54844 = 54844 +a54845 = 54845 +a54846 = 54846 +a54847 = 54847 +a54848 = 54848 +a54849 = 54849 +a54850 = 54850 +a54851 = 54851 +a54852 = 54852 +a54853 = 54853 +a54854 = 54854 +a54855 = 54855 +a54856 = 54856 +a54857 = 54857 +a54858 = 54858 +a54859 = 54859 +a54860 = 54860 +a54861 = 54861 +a54862 = 54862 +a54863 = 54863 +a54864 = 54864 +a54865 = 54865 +a54866 = 54866 +a54867 = 54867 +a54868 = 54868 +a54869 = 54869 +a54870 = 54870 +a54871 = 54871 +a54872 = 54872 +a54873 = 54873 +a54874 = 54874 +a54875 = 54875 +a54876 = 54876 +a54877 = 54877 +a54878 = 54878 +a54879 = 54879 +a54880 = 54880 +a54881 = 54881 +a54882 = 54882 +a54883 = 54883 +a54884 = 54884 +a54885 = 54885 +a54886 = 54886 +a54887 = 54887 +a54888 = 54888 +a54889 = 54889 +a54890 = 54890 +a54891 = 54891 +a54892 = 54892 +a54893 = 54893 +a54894 = 54894 +a54895 = 54895 +a54896 = 54896 +a54897 = 54897 +a54898 = 54898 +a54899 = 54899 +a54900 = 54900 +a54901 = 54901 +a54902 = 54902 +a54903 = 54903 +a54904 = 54904 +a54905 = 54905 +a54906 = 54906 +a54907 = 54907 +a54908 = 54908 +a54909 = 54909 +a54910 = 54910 +a54911 = 54911 +a54912 = 54912 +a54913 = 54913 +a54914 = 54914 +a54915 = 54915 +a54916 = 54916 +a54917 = 54917 +a54918 = 54918 +a54919 = 54919 +a54920 = 54920 +a54921 = 54921 +a54922 = 54922 +a54923 = 54923 +a54924 = 54924 +a54925 = 54925 +a54926 = 54926 +a54927 = 54927 +a54928 = 54928 +a54929 = 54929 +a54930 = 54930 +a54931 = 54931 +a54932 = 54932 +a54933 = 54933 +a54934 = 54934 +a54935 = 54935 +a54936 = 54936 +a54937 = 54937 +a54938 = 54938 +a54939 = 54939 +a54940 = 54940 +a54941 = 54941 +a54942 = 54942 +a54943 = 54943 +a54944 = 54944 +a54945 = 54945 +a54946 = 54946 +a54947 = 54947 +a54948 = 54948 +a54949 = 54949 +a54950 = 54950 +a54951 = 54951 +a54952 = 54952 +a54953 = 54953 +a54954 = 54954 +a54955 = 54955 +a54956 = 54956 +a54957 = 54957 +a54958 = 54958 +a54959 = 54959 +a54960 = 54960 +a54961 = 54961 +a54962 = 54962 +a54963 = 54963 +a54964 = 54964 +a54965 = 54965 +a54966 = 54966 +a54967 = 54967 +a54968 = 54968 +a54969 = 54969 +a54970 = 54970 +a54971 = 54971 +a54972 = 54972 +a54973 = 54973 +a54974 = 54974 +a54975 = 54975 +a54976 = 54976 +a54977 = 54977 +a54978 = 54978 +a54979 = 54979 +a54980 = 54980 +a54981 = 54981 +a54982 = 54982 +a54983 = 54983 +a54984 = 54984 +a54985 = 54985 +a54986 = 54986 +a54987 = 54987 +a54988 = 54988 +a54989 = 54989 +a54990 = 54990 +a54991 = 54991 +a54992 = 54992 +a54993 = 54993 +a54994 = 54994 +a54995 = 54995 +a54996 = 54996 +a54997 = 54997 +a54998 = 54998 +a54999 = 54999 +a55000 = 55000 +a55001 = 55001 +a55002 = 55002 +a55003 = 55003 +a55004 = 55004 +a55005 = 55005 +a55006 = 55006 +a55007 = 55007 +a55008 = 55008 +a55009 = 55009 +a55010 = 55010 +a55011 = 55011 +a55012 = 55012 +a55013 = 55013 +a55014 = 55014 +a55015 = 55015 +a55016 = 55016 +a55017 = 55017 +a55018 = 55018 +a55019 = 55019 +a55020 = 55020 +a55021 = 55021 +a55022 = 55022 +a55023 = 55023 +a55024 = 55024 +a55025 = 55025 +a55026 = 55026 +a55027 = 55027 +a55028 = 55028 +a55029 = 55029 +a55030 = 55030 +a55031 = 55031 +a55032 = 55032 +a55033 = 55033 +a55034 = 55034 +a55035 = 55035 +a55036 = 55036 +a55037 = 55037 +a55038 = 55038 +a55039 = 55039 +a55040 = 55040 +a55041 = 55041 +a55042 = 55042 +a55043 = 55043 +a55044 = 55044 +a55045 = 55045 +a55046 = 55046 +a55047 = 55047 +a55048 = 55048 +a55049 = 55049 +a55050 = 55050 +a55051 = 55051 +a55052 = 55052 +a55053 = 55053 +a55054 = 55054 +a55055 = 55055 +a55056 = 55056 +a55057 = 55057 +a55058 = 55058 +a55059 = 55059 +a55060 = 55060 +a55061 = 55061 +a55062 = 55062 +a55063 = 55063 +a55064 = 55064 +a55065 = 55065 +a55066 = 55066 +a55067 = 55067 +a55068 = 55068 +a55069 = 55069 +a55070 = 55070 +a55071 = 55071 +a55072 = 55072 +a55073 = 55073 +a55074 = 55074 +a55075 = 55075 +a55076 = 55076 +a55077 = 55077 +a55078 = 55078 +a55079 = 55079 +a55080 = 55080 +a55081 = 55081 +a55082 = 55082 +a55083 = 55083 +a55084 = 55084 +a55085 = 55085 +a55086 = 55086 +a55087 = 55087 +a55088 = 55088 +a55089 = 55089 +a55090 = 55090 +a55091 = 55091 +a55092 = 55092 +a55093 = 55093 +a55094 = 55094 +a55095 = 55095 +a55096 = 55096 +a55097 = 55097 +a55098 = 55098 +a55099 = 55099 +a55100 = 55100 +a55101 = 55101 +a55102 = 55102 +a55103 = 55103 +a55104 = 55104 +a55105 = 55105 +a55106 = 55106 +a55107 = 55107 +a55108 = 55108 +a55109 = 55109 +a55110 = 55110 +a55111 = 55111 +a55112 = 55112 +a55113 = 55113 +a55114 = 55114 +a55115 = 55115 +a55116 = 55116 +a55117 = 55117 +a55118 = 55118 +a55119 = 55119 +a55120 = 55120 +a55121 = 55121 +a55122 = 55122 +a55123 = 55123 +a55124 = 55124 +a55125 = 55125 +a55126 = 55126 +a55127 = 55127 +a55128 = 55128 +a55129 = 55129 +a55130 = 55130 +a55131 = 55131 +a55132 = 55132 +a55133 = 55133 +a55134 = 55134 +a55135 = 55135 +a55136 = 55136 +a55137 = 55137 +a55138 = 55138 +a55139 = 55139 +a55140 = 55140 +a55141 = 55141 +a55142 = 55142 +a55143 = 55143 +a55144 = 55144 +a55145 = 55145 +a55146 = 55146 +a55147 = 55147 +a55148 = 55148 +a55149 = 55149 +a55150 = 55150 +a55151 = 55151 +a55152 = 55152 +a55153 = 55153 +a55154 = 55154 +a55155 = 55155 +a55156 = 55156 +a55157 = 55157 +a55158 = 55158 +a55159 = 55159 +a55160 = 55160 +a55161 = 55161 +a55162 = 55162 +a55163 = 55163 +a55164 = 55164 +a55165 = 55165 +a55166 = 55166 +a55167 = 55167 +a55168 = 55168 +a55169 = 55169 +a55170 = 55170 +a55171 = 55171 +a55172 = 55172 +a55173 = 55173 +a55174 = 55174 +a55175 = 55175 +a55176 = 55176 +a55177 = 55177 +a55178 = 55178 +a55179 = 55179 +a55180 = 55180 +a55181 = 55181 +a55182 = 55182 +a55183 = 55183 +a55184 = 55184 +a55185 = 55185 +a55186 = 55186 +a55187 = 55187 +a55188 = 55188 +a55189 = 55189 +a55190 = 55190 +a55191 = 55191 +a55192 = 55192 +a55193 = 55193 +a55194 = 55194 +a55195 = 55195 +a55196 = 55196 +a55197 = 55197 +a55198 = 55198 +a55199 = 55199 +a55200 = 55200 +a55201 = 55201 +a55202 = 55202 +a55203 = 55203 +a55204 = 55204 +a55205 = 55205 +a55206 = 55206 +a55207 = 55207 +a55208 = 55208 +a55209 = 55209 +a55210 = 55210 +a55211 = 55211 +a55212 = 55212 +a55213 = 55213 +a55214 = 55214 +a55215 = 55215 +a55216 = 55216 +a55217 = 55217 +a55218 = 55218 +a55219 = 55219 +a55220 = 55220 +a55221 = 55221 +a55222 = 55222 +a55223 = 55223 +a55224 = 55224 +a55225 = 55225 +a55226 = 55226 +a55227 = 55227 +a55228 = 55228 +a55229 = 55229 +a55230 = 55230 +a55231 = 55231 +a55232 = 55232 +a55233 = 55233 +a55234 = 55234 +a55235 = 55235 +a55236 = 55236 +a55237 = 55237 +a55238 = 55238 +a55239 = 55239 +a55240 = 55240 +a55241 = 55241 +a55242 = 55242 +a55243 = 55243 +a55244 = 55244 +a55245 = 55245 +a55246 = 55246 +a55247 = 55247 +a55248 = 55248 +a55249 = 55249 +a55250 = 55250 +a55251 = 55251 +a55252 = 55252 +a55253 = 55253 +a55254 = 55254 +a55255 = 55255 +a55256 = 55256 +a55257 = 55257 +a55258 = 55258 +a55259 = 55259 +a55260 = 55260 +a55261 = 55261 +a55262 = 55262 +a55263 = 55263 +a55264 = 55264 +a55265 = 55265 +a55266 = 55266 +a55267 = 55267 +a55268 = 55268 +a55269 = 55269 +a55270 = 55270 +a55271 = 55271 +a55272 = 55272 +a55273 = 55273 +a55274 = 55274 +a55275 = 55275 +a55276 = 55276 +a55277 = 55277 +a55278 = 55278 +a55279 = 55279 +a55280 = 55280 +a55281 = 55281 +a55282 = 55282 +a55283 = 55283 +a55284 = 55284 +a55285 = 55285 +a55286 = 55286 +a55287 = 55287 +a55288 = 55288 +a55289 = 55289 +a55290 = 55290 +a55291 = 55291 +a55292 = 55292 +a55293 = 55293 +a55294 = 55294 +a55295 = 55295 +a55296 = 55296 +a55297 = 55297 +a55298 = 55298 +a55299 = 55299 +a55300 = 55300 +a55301 = 55301 +a55302 = 55302 +a55303 = 55303 +a55304 = 55304 +a55305 = 55305 +a55306 = 55306 +a55307 = 55307 +a55308 = 55308 +a55309 = 55309 +a55310 = 55310 +a55311 = 55311 +a55312 = 55312 +a55313 = 55313 +a55314 = 55314 +a55315 = 55315 +a55316 = 55316 +a55317 = 55317 +a55318 = 55318 +a55319 = 55319 +a55320 = 55320 +a55321 = 55321 +a55322 = 55322 +a55323 = 55323 +a55324 = 55324 +a55325 = 55325 +a55326 = 55326 +a55327 = 55327 +a55328 = 55328 +a55329 = 55329 +a55330 = 55330 +a55331 = 55331 +a55332 = 55332 +a55333 = 55333 +a55334 = 55334 +a55335 = 55335 +a55336 = 55336 +a55337 = 55337 +a55338 = 55338 +a55339 = 55339 +a55340 = 55340 +a55341 = 55341 +a55342 = 55342 +a55343 = 55343 +a55344 = 55344 +a55345 = 55345 +a55346 = 55346 +a55347 = 55347 +a55348 = 55348 +a55349 = 55349 +a55350 = 55350 +a55351 = 55351 +a55352 = 55352 +a55353 = 55353 +a55354 = 55354 +a55355 = 55355 +a55356 = 55356 +a55357 = 55357 +a55358 = 55358 +a55359 = 55359 +a55360 = 55360 +a55361 = 55361 +a55362 = 55362 +a55363 = 55363 +a55364 = 55364 +a55365 = 55365 +a55366 = 55366 +a55367 = 55367 +a55368 = 55368 +a55369 = 55369 +a55370 = 55370 +a55371 = 55371 +a55372 = 55372 +a55373 = 55373 +a55374 = 55374 +a55375 = 55375 +a55376 = 55376 +a55377 = 55377 +a55378 = 55378 +a55379 = 55379 +a55380 = 55380 +a55381 = 55381 +a55382 = 55382 +a55383 = 55383 +a55384 = 55384 +a55385 = 55385 +a55386 = 55386 +a55387 = 55387 +a55388 = 55388 +a55389 = 55389 +a55390 = 55390 +a55391 = 55391 +a55392 = 55392 +a55393 = 55393 +a55394 = 55394 +a55395 = 55395 +a55396 = 55396 +a55397 = 55397 +a55398 = 55398 +a55399 = 55399 +a55400 = 55400 +a55401 = 55401 +a55402 = 55402 +a55403 = 55403 +a55404 = 55404 +a55405 = 55405 +a55406 = 55406 +a55407 = 55407 +a55408 = 55408 +a55409 = 55409 +a55410 = 55410 +a55411 = 55411 +a55412 = 55412 +a55413 = 55413 +a55414 = 55414 +a55415 = 55415 +a55416 = 55416 +a55417 = 55417 +a55418 = 55418 +a55419 = 55419 +a55420 = 55420 +a55421 = 55421 +a55422 = 55422 +a55423 = 55423 +a55424 = 55424 +a55425 = 55425 +a55426 = 55426 +a55427 = 55427 +a55428 = 55428 +a55429 = 55429 +a55430 = 55430 +a55431 = 55431 +a55432 = 55432 +a55433 = 55433 +a55434 = 55434 +a55435 = 55435 +a55436 = 55436 +a55437 = 55437 +a55438 = 55438 +a55439 = 55439 +a55440 = 55440 +a55441 = 55441 +a55442 = 55442 +a55443 = 55443 +a55444 = 55444 +a55445 = 55445 +a55446 = 55446 +a55447 = 55447 +a55448 = 55448 +a55449 = 55449 +a55450 = 55450 +a55451 = 55451 +a55452 = 55452 +a55453 = 55453 +a55454 = 55454 +a55455 = 55455 +a55456 = 55456 +a55457 = 55457 +a55458 = 55458 +a55459 = 55459 +a55460 = 55460 +a55461 = 55461 +a55462 = 55462 +a55463 = 55463 +a55464 = 55464 +a55465 = 55465 +a55466 = 55466 +a55467 = 55467 +a55468 = 55468 +a55469 = 55469 +a55470 = 55470 +a55471 = 55471 +a55472 = 55472 +a55473 = 55473 +a55474 = 55474 +a55475 = 55475 +a55476 = 55476 +a55477 = 55477 +a55478 = 55478 +a55479 = 55479 +a55480 = 55480 +a55481 = 55481 +a55482 = 55482 +a55483 = 55483 +a55484 = 55484 +a55485 = 55485 +a55486 = 55486 +a55487 = 55487 +a55488 = 55488 +a55489 = 55489 +a55490 = 55490 +a55491 = 55491 +a55492 = 55492 +a55493 = 55493 +a55494 = 55494 +a55495 = 55495 +a55496 = 55496 +a55497 = 55497 +a55498 = 55498 +a55499 = 55499 +a55500 = 55500 +a55501 = 55501 +a55502 = 55502 +a55503 = 55503 +a55504 = 55504 +a55505 = 55505 +a55506 = 55506 +a55507 = 55507 +a55508 = 55508 +a55509 = 55509 +a55510 = 55510 +a55511 = 55511 +a55512 = 55512 +a55513 = 55513 +a55514 = 55514 +a55515 = 55515 +a55516 = 55516 +a55517 = 55517 +a55518 = 55518 +a55519 = 55519 +a55520 = 55520 +a55521 = 55521 +a55522 = 55522 +a55523 = 55523 +a55524 = 55524 +a55525 = 55525 +a55526 = 55526 +a55527 = 55527 +a55528 = 55528 +a55529 = 55529 +a55530 = 55530 +a55531 = 55531 +a55532 = 55532 +a55533 = 55533 +a55534 = 55534 +a55535 = 55535 +a55536 = 55536 +a55537 = 55537 +a55538 = 55538 +a55539 = 55539 +a55540 = 55540 +a55541 = 55541 +a55542 = 55542 +a55543 = 55543 +a55544 = 55544 +a55545 = 55545 +a55546 = 55546 +a55547 = 55547 +a55548 = 55548 +a55549 = 55549 +a55550 = 55550 +a55551 = 55551 +a55552 = 55552 +a55553 = 55553 +a55554 = 55554 +a55555 = 55555 +a55556 = 55556 +a55557 = 55557 +a55558 = 55558 +a55559 = 55559 +a55560 = 55560 +a55561 = 55561 +a55562 = 55562 +a55563 = 55563 +a55564 = 55564 +a55565 = 55565 +a55566 = 55566 +a55567 = 55567 +a55568 = 55568 +a55569 = 55569 +a55570 = 55570 +a55571 = 55571 +a55572 = 55572 +a55573 = 55573 +a55574 = 55574 +a55575 = 55575 +a55576 = 55576 +a55577 = 55577 +a55578 = 55578 +a55579 = 55579 +a55580 = 55580 +a55581 = 55581 +a55582 = 55582 +a55583 = 55583 +a55584 = 55584 +a55585 = 55585 +a55586 = 55586 +a55587 = 55587 +a55588 = 55588 +a55589 = 55589 +a55590 = 55590 +a55591 = 55591 +a55592 = 55592 +a55593 = 55593 +a55594 = 55594 +a55595 = 55595 +a55596 = 55596 +a55597 = 55597 +a55598 = 55598 +a55599 = 55599 +a55600 = 55600 +a55601 = 55601 +a55602 = 55602 +a55603 = 55603 +a55604 = 55604 +a55605 = 55605 +a55606 = 55606 +a55607 = 55607 +a55608 = 55608 +a55609 = 55609 +a55610 = 55610 +a55611 = 55611 +a55612 = 55612 +a55613 = 55613 +a55614 = 55614 +a55615 = 55615 +a55616 = 55616 +a55617 = 55617 +a55618 = 55618 +a55619 = 55619 +a55620 = 55620 +a55621 = 55621 +a55622 = 55622 +a55623 = 55623 +a55624 = 55624 +a55625 = 55625 +a55626 = 55626 +a55627 = 55627 +a55628 = 55628 +a55629 = 55629 +a55630 = 55630 +a55631 = 55631 +a55632 = 55632 +a55633 = 55633 +a55634 = 55634 +a55635 = 55635 +a55636 = 55636 +a55637 = 55637 +a55638 = 55638 +a55639 = 55639 +a55640 = 55640 +a55641 = 55641 +a55642 = 55642 +a55643 = 55643 +a55644 = 55644 +a55645 = 55645 +a55646 = 55646 +a55647 = 55647 +a55648 = 55648 +a55649 = 55649 +a55650 = 55650 +a55651 = 55651 +a55652 = 55652 +a55653 = 55653 +a55654 = 55654 +a55655 = 55655 +a55656 = 55656 +a55657 = 55657 +a55658 = 55658 +a55659 = 55659 +a55660 = 55660 +a55661 = 55661 +a55662 = 55662 +a55663 = 55663 +a55664 = 55664 +a55665 = 55665 +a55666 = 55666 +a55667 = 55667 +a55668 = 55668 +a55669 = 55669 +a55670 = 55670 +a55671 = 55671 +a55672 = 55672 +a55673 = 55673 +a55674 = 55674 +a55675 = 55675 +a55676 = 55676 +a55677 = 55677 +a55678 = 55678 +a55679 = 55679 +a55680 = 55680 +a55681 = 55681 +a55682 = 55682 +a55683 = 55683 +a55684 = 55684 +a55685 = 55685 +a55686 = 55686 +a55687 = 55687 +a55688 = 55688 +a55689 = 55689 +a55690 = 55690 +a55691 = 55691 +a55692 = 55692 +a55693 = 55693 +a55694 = 55694 +a55695 = 55695 +a55696 = 55696 +a55697 = 55697 +a55698 = 55698 +a55699 = 55699 +a55700 = 55700 +a55701 = 55701 +a55702 = 55702 +a55703 = 55703 +a55704 = 55704 +a55705 = 55705 +a55706 = 55706 +a55707 = 55707 +a55708 = 55708 +a55709 = 55709 +a55710 = 55710 +a55711 = 55711 +a55712 = 55712 +a55713 = 55713 +a55714 = 55714 +a55715 = 55715 +a55716 = 55716 +a55717 = 55717 +a55718 = 55718 +a55719 = 55719 +a55720 = 55720 +a55721 = 55721 +a55722 = 55722 +a55723 = 55723 +a55724 = 55724 +a55725 = 55725 +a55726 = 55726 +a55727 = 55727 +a55728 = 55728 +a55729 = 55729 +a55730 = 55730 +a55731 = 55731 +a55732 = 55732 +a55733 = 55733 +a55734 = 55734 +a55735 = 55735 +a55736 = 55736 +a55737 = 55737 +a55738 = 55738 +a55739 = 55739 +a55740 = 55740 +a55741 = 55741 +a55742 = 55742 +a55743 = 55743 +a55744 = 55744 +a55745 = 55745 +a55746 = 55746 +a55747 = 55747 +a55748 = 55748 +a55749 = 55749 +a55750 = 55750 +a55751 = 55751 +a55752 = 55752 +a55753 = 55753 +a55754 = 55754 +a55755 = 55755 +a55756 = 55756 +a55757 = 55757 +a55758 = 55758 +a55759 = 55759 +a55760 = 55760 +a55761 = 55761 +a55762 = 55762 +a55763 = 55763 +a55764 = 55764 +a55765 = 55765 +a55766 = 55766 +a55767 = 55767 +a55768 = 55768 +a55769 = 55769 +a55770 = 55770 +a55771 = 55771 +a55772 = 55772 +a55773 = 55773 +a55774 = 55774 +a55775 = 55775 +a55776 = 55776 +a55777 = 55777 +a55778 = 55778 +a55779 = 55779 +a55780 = 55780 +a55781 = 55781 +a55782 = 55782 +a55783 = 55783 +a55784 = 55784 +a55785 = 55785 +a55786 = 55786 +a55787 = 55787 +a55788 = 55788 +a55789 = 55789 +a55790 = 55790 +a55791 = 55791 +a55792 = 55792 +a55793 = 55793 +a55794 = 55794 +a55795 = 55795 +a55796 = 55796 +a55797 = 55797 +a55798 = 55798 +a55799 = 55799 +a55800 = 55800 +a55801 = 55801 +a55802 = 55802 +a55803 = 55803 +a55804 = 55804 +a55805 = 55805 +a55806 = 55806 +a55807 = 55807 +a55808 = 55808 +a55809 = 55809 +a55810 = 55810 +a55811 = 55811 +a55812 = 55812 +a55813 = 55813 +a55814 = 55814 +a55815 = 55815 +a55816 = 55816 +a55817 = 55817 +a55818 = 55818 +a55819 = 55819 +a55820 = 55820 +a55821 = 55821 +a55822 = 55822 +a55823 = 55823 +a55824 = 55824 +a55825 = 55825 +a55826 = 55826 +a55827 = 55827 +a55828 = 55828 +a55829 = 55829 +a55830 = 55830 +a55831 = 55831 +a55832 = 55832 +a55833 = 55833 +a55834 = 55834 +a55835 = 55835 +a55836 = 55836 +a55837 = 55837 +a55838 = 55838 +a55839 = 55839 +a55840 = 55840 +a55841 = 55841 +a55842 = 55842 +a55843 = 55843 +a55844 = 55844 +a55845 = 55845 +a55846 = 55846 +a55847 = 55847 +a55848 = 55848 +a55849 = 55849 +a55850 = 55850 +a55851 = 55851 +a55852 = 55852 +a55853 = 55853 +a55854 = 55854 +a55855 = 55855 +a55856 = 55856 +a55857 = 55857 +a55858 = 55858 +a55859 = 55859 +a55860 = 55860 +a55861 = 55861 +a55862 = 55862 +a55863 = 55863 +a55864 = 55864 +a55865 = 55865 +a55866 = 55866 +a55867 = 55867 +a55868 = 55868 +a55869 = 55869 +a55870 = 55870 +a55871 = 55871 +a55872 = 55872 +a55873 = 55873 +a55874 = 55874 +a55875 = 55875 +a55876 = 55876 +a55877 = 55877 +a55878 = 55878 +a55879 = 55879 +a55880 = 55880 +a55881 = 55881 +a55882 = 55882 +a55883 = 55883 +a55884 = 55884 +a55885 = 55885 +a55886 = 55886 +a55887 = 55887 +a55888 = 55888 +a55889 = 55889 +a55890 = 55890 +a55891 = 55891 +a55892 = 55892 +a55893 = 55893 +a55894 = 55894 +a55895 = 55895 +a55896 = 55896 +a55897 = 55897 +a55898 = 55898 +a55899 = 55899 +a55900 = 55900 +a55901 = 55901 +a55902 = 55902 +a55903 = 55903 +a55904 = 55904 +a55905 = 55905 +a55906 = 55906 +a55907 = 55907 +a55908 = 55908 +a55909 = 55909 +a55910 = 55910 +a55911 = 55911 +a55912 = 55912 +a55913 = 55913 +a55914 = 55914 +a55915 = 55915 +a55916 = 55916 +a55917 = 55917 +a55918 = 55918 +a55919 = 55919 +a55920 = 55920 +a55921 = 55921 +a55922 = 55922 +a55923 = 55923 +a55924 = 55924 +a55925 = 55925 +a55926 = 55926 +a55927 = 55927 +a55928 = 55928 +a55929 = 55929 +a55930 = 55930 +a55931 = 55931 +a55932 = 55932 +a55933 = 55933 +a55934 = 55934 +a55935 = 55935 +a55936 = 55936 +a55937 = 55937 +a55938 = 55938 +a55939 = 55939 +a55940 = 55940 +a55941 = 55941 +a55942 = 55942 +a55943 = 55943 +a55944 = 55944 +a55945 = 55945 +a55946 = 55946 +a55947 = 55947 +a55948 = 55948 +a55949 = 55949 +a55950 = 55950 +a55951 = 55951 +a55952 = 55952 +a55953 = 55953 +a55954 = 55954 +a55955 = 55955 +a55956 = 55956 +a55957 = 55957 +a55958 = 55958 +a55959 = 55959 +a55960 = 55960 +a55961 = 55961 +a55962 = 55962 +a55963 = 55963 +a55964 = 55964 +a55965 = 55965 +a55966 = 55966 +a55967 = 55967 +a55968 = 55968 +a55969 = 55969 +a55970 = 55970 +a55971 = 55971 +a55972 = 55972 +a55973 = 55973 +a55974 = 55974 +a55975 = 55975 +a55976 = 55976 +a55977 = 55977 +a55978 = 55978 +a55979 = 55979 +a55980 = 55980 +a55981 = 55981 +a55982 = 55982 +a55983 = 55983 +a55984 = 55984 +a55985 = 55985 +a55986 = 55986 +a55987 = 55987 +a55988 = 55988 +a55989 = 55989 +a55990 = 55990 +a55991 = 55991 +a55992 = 55992 +a55993 = 55993 +a55994 = 55994 +a55995 = 55995 +a55996 = 55996 +a55997 = 55997 +a55998 = 55998 +a55999 = 55999 +a56000 = 56000 +a56001 = 56001 +a56002 = 56002 +a56003 = 56003 +a56004 = 56004 +a56005 = 56005 +a56006 = 56006 +a56007 = 56007 +a56008 = 56008 +a56009 = 56009 +a56010 = 56010 +a56011 = 56011 +a56012 = 56012 +a56013 = 56013 +a56014 = 56014 +a56015 = 56015 +a56016 = 56016 +a56017 = 56017 +a56018 = 56018 +a56019 = 56019 +a56020 = 56020 +a56021 = 56021 +a56022 = 56022 +a56023 = 56023 +a56024 = 56024 +a56025 = 56025 +a56026 = 56026 +a56027 = 56027 +a56028 = 56028 +a56029 = 56029 +a56030 = 56030 +a56031 = 56031 +a56032 = 56032 +a56033 = 56033 +a56034 = 56034 +a56035 = 56035 +a56036 = 56036 +a56037 = 56037 +a56038 = 56038 +a56039 = 56039 +a56040 = 56040 +a56041 = 56041 +a56042 = 56042 +a56043 = 56043 +a56044 = 56044 +a56045 = 56045 +a56046 = 56046 +a56047 = 56047 +a56048 = 56048 +a56049 = 56049 +a56050 = 56050 +a56051 = 56051 +a56052 = 56052 +a56053 = 56053 +a56054 = 56054 +a56055 = 56055 +a56056 = 56056 +a56057 = 56057 +a56058 = 56058 +a56059 = 56059 +a56060 = 56060 +a56061 = 56061 +a56062 = 56062 +a56063 = 56063 +a56064 = 56064 +a56065 = 56065 +a56066 = 56066 +a56067 = 56067 +a56068 = 56068 +a56069 = 56069 +a56070 = 56070 +a56071 = 56071 +a56072 = 56072 +a56073 = 56073 +a56074 = 56074 +a56075 = 56075 +a56076 = 56076 +a56077 = 56077 +a56078 = 56078 +a56079 = 56079 +a56080 = 56080 +a56081 = 56081 +a56082 = 56082 +a56083 = 56083 +a56084 = 56084 +a56085 = 56085 +a56086 = 56086 +a56087 = 56087 +a56088 = 56088 +a56089 = 56089 +a56090 = 56090 +a56091 = 56091 +a56092 = 56092 +a56093 = 56093 +a56094 = 56094 +a56095 = 56095 +a56096 = 56096 +a56097 = 56097 +a56098 = 56098 +a56099 = 56099 +a56100 = 56100 +a56101 = 56101 +a56102 = 56102 +a56103 = 56103 +a56104 = 56104 +a56105 = 56105 +a56106 = 56106 +a56107 = 56107 +a56108 = 56108 +a56109 = 56109 +a56110 = 56110 +a56111 = 56111 +a56112 = 56112 +a56113 = 56113 +a56114 = 56114 +a56115 = 56115 +a56116 = 56116 +a56117 = 56117 +a56118 = 56118 +a56119 = 56119 +a56120 = 56120 +a56121 = 56121 +a56122 = 56122 +a56123 = 56123 +a56124 = 56124 +a56125 = 56125 +a56126 = 56126 +a56127 = 56127 +a56128 = 56128 +a56129 = 56129 +a56130 = 56130 +a56131 = 56131 +a56132 = 56132 +a56133 = 56133 +a56134 = 56134 +a56135 = 56135 +a56136 = 56136 +a56137 = 56137 +a56138 = 56138 +a56139 = 56139 +a56140 = 56140 +a56141 = 56141 +a56142 = 56142 +a56143 = 56143 +a56144 = 56144 +a56145 = 56145 +a56146 = 56146 +a56147 = 56147 +a56148 = 56148 +a56149 = 56149 +a56150 = 56150 +a56151 = 56151 +a56152 = 56152 +a56153 = 56153 +a56154 = 56154 +a56155 = 56155 +a56156 = 56156 +a56157 = 56157 +a56158 = 56158 +a56159 = 56159 +a56160 = 56160 +a56161 = 56161 +a56162 = 56162 +a56163 = 56163 +a56164 = 56164 +a56165 = 56165 +a56166 = 56166 +a56167 = 56167 +a56168 = 56168 +a56169 = 56169 +a56170 = 56170 +a56171 = 56171 +a56172 = 56172 +a56173 = 56173 +a56174 = 56174 +a56175 = 56175 +a56176 = 56176 +a56177 = 56177 +a56178 = 56178 +a56179 = 56179 +a56180 = 56180 +a56181 = 56181 +a56182 = 56182 +a56183 = 56183 +a56184 = 56184 +a56185 = 56185 +a56186 = 56186 +a56187 = 56187 +a56188 = 56188 +a56189 = 56189 +a56190 = 56190 +a56191 = 56191 +a56192 = 56192 +a56193 = 56193 +a56194 = 56194 +a56195 = 56195 +a56196 = 56196 +a56197 = 56197 +a56198 = 56198 +a56199 = 56199 +a56200 = 56200 +a56201 = 56201 +a56202 = 56202 +a56203 = 56203 +a56204 = 56204 +a56205 = 56205 +a56206 = 56206 +a56207 = 56207 +a56208 = 56208 +a56209 = 56209 +a56210 = 56210 +a56211 = 56211 +a56212 = 56212 +a56213 = 56213 +a56214 = 56214 +a56215 = 56215 +a56216 = 56216 +a56217 = 56217 +a56218 = 56218 +a56219 = 56219 +a56220 = 56220 +a56221 = 56221 +a56222 = 56222 +a56223 = 56223 +a56224 = 56224 +a56225 = 56225 +a56226 = 56226 +a56227 = 56227 +a56228 = 56228 +a56229 = 56229 +a56230 = 56230 +a56231 = 56231 +a56232 = 56232 +a56233 = 56233 +a56234 = 56234 +a56235 = 56235 +a56236 = 56236 +a56237 = 56237 +a56238 = 56238 +a56239 = 56239 +a56240 = 56240 +a56241 = 56241 +a56242 = 56242 +a56243 = 56243 +a56244 = 56244 +a56245 = 56245 +a56246 = 56246 +a56247 = 56247 +a56248 = 56248 +a56249 = 56249 +a56250 = 56250 +a56251 = 56251 +a56252 = 56252 +a56253 = 56253 +a56254 = 56254 +a56255 = 56255 +a56256 = 56256 +a56257 = 56257 +a56258 = 56258 +a56259 = 56259 +a56260 = 56260 +a56261 = 56261 +a56262 = 56262 +a56263 = 56263 +a56264 = 56264 +a56265 = 56265 +a56266 = 56266 +a56267 = 56267 +a56268 = 56268 +a56269 = 56269 +a56270 = 56270 +a56271 = 56271 +a56272 = 56272 +a56273 = 56273 +a56274 = 56274 +a56275 = 56275 +a56276 = 56276 +a56277 = 56277 +a56278 = 56278 +a56279 = 56279 +a56280 = 56280 +a56281 = 56281 +a56282 = 56282 +a56283 = 56283 +a56284 = 56284 +a56285 = 56285 +a56286 = 56286 +a56287 = 56287 +a56288 = 56288 +a56289 = 56289 +a56290 = 56290 +a56291 = 56291 +a56292 = 56292 +a56293 = 56293 +a56294 = 56294 +a56295 = 56295 +a56296 = 56296 +a56297 = 56297 +a56298 = 56298 +a56299 = 56299 +a56300 = 56300 +a56301 = 56301 +a56302 = 56302 +a56303 = 56303 +a56304 = 56304 +a56305 = 56305 +a56306 = 56306 +a56307 = 56307 +a56308 = 56308 +a56309 = 56309 +a56310 = 56310 +a56311 = 56311 +a56312 = 56312 +a56313 = 56313 +a56314 = 56314 +a56315 = 56315 +a56316 = 56316 +a56317 = 56317 +a56318 = 56318 +a56319 = 56319 +a56320 = 56320 +a56321 = 56321 +a56322 = 56322 +a56323 = 56323 +a56324 = 56324 +a56325 = 56325 +a56326 = 56326 +a56327 = 56327 +a56328 = 56328 +a56329 = 56329 +a56330 = 56330 +a56331 = 56331 +a56332 = 56332 +a56333 = 56333 +a56334 = 56334 +a56335 = 56335 +a56336 = 56336 +a56337 = 56337 +a56338 = 56338 +a56339 = 56339 +a56340 = 56340 +a56341 = 56341 +a56342 = 56342 +a56343 = 56343 +a56344 = 56344 +a56345 = 56345 +a56346 = 56346 +a56347 = 56347 +a56348 = 56348 +a56349 = 56349 +a56350 = 56350 +a56351 = 56351 +a56352 = 56352 +a56353 = 56353 +a56354 = 56354 +a56355 = 56355 +a56356 = 56356 +a56357 = 56357 +a56358 = 56358 +a56359 = 56359 +a56360 = 56360 +a56361 = 56361 +a56362 = 56362 +a56363 = 56363 +a56364 = 56364 +a56365 = 56365 +a56366 = 56366 +a56367 = 56367 +a56368 = 56368 +a56369 = 56369 +a56370 = 56370 +a56371 = 56371 +a56372 = 56372 +a56373 = 56373 +a56374 = 56374 +a56375 = 56375 +a56376 = 56376 +a56377 = 56377 +a56378 = 56378 +a56379 = 56379 +a56380 = 56380 +a56381 = 56381 +a56382 = 56382 +a56383 = 56383 +a56384 = 56384 +a56385 = 56385 +a56386 = 56386 +a56387 = 56387 +a56388 = 56388 +a56389 = 56389 +a56390 = 56390 +a56391 = 56391 +a56392 = 56392 +a56393 = 56393 +a56394 = 56394 +a56395 = 56395 +a56396 = 56396 +a56397 = 56397 +a56398 = 56398 +a56399 = 56399 +a56400 = 56400 +a56401 = 56401 +a56402 = 56402 +a56403 = 56403 +a56404 = 56404 +a56405 = 56405 +a56406 = 56406 +a56407 = 56407 +a56408 = 56408 +a56409 = 56409 +a56410 = 56410 +a56411 = 56411 +a56412 = 56412 +a56413 = 56413 +a56414 = 56414 +a56415 = 56415 +a56416 = 56416 +a56417 = 56417 +a56418 = 56418 +a56419 = 56419 +a56420 = 56420 +a56421 = 56421 +a56422 = 56422 +a56423 = 56423 +a56424 = 56424 +a56425 = 56425 +a56426 = 56426 +a56427 = 56427 +a56428 = 56428 +a56429 = 56429 +a56430 = 56430 +a56431 = 56431 +a56432 = 56432 +a56433 = 56433 +a56434 = 56434 +a56435 = 56435 +a56436 = 56436 +a56437 = 56437 +a56438 = 56438 +a56439 = 56439 +a56440 = 56440 +a56441 = 56441 +a56442 = 56442 +a56443 = 56443 +a56444 = 56444 +a56445 = 56445 +a56446 = 56446 +a56447 = 56447 +a56448 = 56448 +a56449 = 56449 +a56450 = 56450 +a56451 = 56451 +a56452 = 56452 +a56453 = 56453 +a56454 = 56454 +a56455 = 56455 +a56456 = 56456 +a56457 = 56457 +a56458 = 56458 +a56459 = 56459 +a56460 = 56460 +a56461 = 56461 +a56462 = 56462 +a56463 = 56463 +a56464 = 56464 +a56465 = 56465 +a56466 = 56466 +a56467 = 56467 +a56468 = 56468 +a56469 = 56469 +a56470 = 56470 +a56471 = 56471 +a56472 = 56472 +a56473 = 56473 +a56474 = 56474 +a56475 = 56475 +a56476 = 56476 +a56477 = 56477 +a56478 = 56478 +a56479 = 56479 +a56480 = 56480 +a56481 = 56481 +a56482 = 56482 +a56483 = 56483 +a56484 = 56484 +a56485 = 56485 +a56486 = 56486 +a56487 = 56487 +a56488 = 56488 +a56489 = 56489 +a56490 = 56490 +a56491 = 56491 +a56492 = 56492 +a56493 = 56493 +a56494 = 56494 +a56495 = 56495 +a56496 = 56496 +a56497 = 56497 +a56498 = 56498 +a56499 = 56499 +a56500 = 56500 +a56501 = 56501 +a56502 = 56502 +a56503 = 56503 +a56504 = 56504 +a56505 = 56505 +a56506 = 56506 +a56507 = 56507 +a56508 = 56508 +a56509 = 56509 +a56510 = 56510 +a56511 = 56511 +a56512 = 56512 +a56513 = 56513 +a56514 = 56514 +a56515 = 56515 +a56516 = 56516 +a56517 = 56517 +a56518 = 56518 +a56519 = 56519 +a56520 = 56520 +a56521 = 56521 +a56522 = 56522 +a56523 = 56523 +a56524 = 56524 +a56525 = 56525 +a56526 = 56526 +a56527 = 56527 +a56528 = 56528 +a56529 = 56529 +a56530 = 56530 +a56531 = 56531 +a56532 = 56532 +a56533 = 56533 +a56534 = 56534 +a56535 = 56535 +a56536 = 56536 +a56537 = 56537 +a56538 = 56538 +a56539 = 56539 +a56540 = 56540 +a56541 = 56541 +a56542 = 56542 +a56543 = 56543 +a56544 = 56544 +a56545 = 56545 +a56546 = 56546 +a56547 = 56547 +a56548 = 56548 +a56549 = 56549 +a56550 = 56550 +a56551 = 56551 +a56552 = 56552 +a56553 = 56553 +a56554 = 56554 +a56555 = 56555 +a56556 = 56556 +a56557 = 56557 +a56558 = 56558 +a56559 = 56559 +a56560 = 56560 +a56561 = 56561 +a56562 = 56562 +a56563 = 56563 +a56564 = 56564 +a56565 = 56565 +a56566 = 56566 +a56567 = 56567 +a56568 = 56568 +a56569 = 56569 +a56570 = 56570 +a56571 = 56571 +a56572 = 56572 +a56573 = 56573 +a56574 = 56574 +a56575 = 56575 +a56576 = 56576 +a56577 = 56577 +a56578 = 56578 +a56579 = 56579 +a56580 = 56580 +a56581 = 56581 +a56582 = 56582 +a56583 = 56583 +a56584 = 56584 +a56585 = 56585 +a56586 = 56586 +a56587 = 56587 +a56588 = 56588 +a56589 = 56589 +a56590 = 56590 +a56591 = 56591 +a56592 = 56592 +a56593 = 56593 +a56594 = 56594 +a56595 = 56595 +a56596 = 56596 +a56597 = 56597 +a56598 = 56598 +a56599 = 56599 +a56600 = 56600 +a56601 = 56601 +a56602 = 56602 +a56603 = 56603 +a56604 = 56604 +a56605 = 56605 +a56606 = 56606 +a56607 = 56607 +a56608 = 56608 +a56609 = 56609 +a56610 = 56610 +a56611 = 56611 +a56612 = 56612 +a56613 = 56613 +a56614 = 56614 +a56615 = 56615 +a56616 = 56616 +a56617 = 56617 +a56618 = 56618 +a56619 = 56619 +a56620 = 56620 +a56621 = 56621 +a56622 = 56622 +a56623 = 56623 +a56624 = 56624 +a56625 = 56625 +a56626 = 56626 +a56627 = 56627 +a56628 = 56628 +a56629 = 56629 +a56630 = 56630 +a56631 = 56631 +a56632 = 56632 +a56633 = 56633 +a56634 = 56634 +a56635 = 56635 +a56636 = 56636 +a56637 = 56637 +a56638 = 56638 +a56639 = 56639 +a56640 = 56640 +a56641 = 56641 +a56642 = 56642 +a56643 = 56643 +a56644 = 56644 +a56645 = 56645 +a56646 = 56646 +a56647 = 56647 +a56648 = 56648 +a56649 = 56649 +a56650 = 56650 +a56651 = 56651 +a56652 = 56652 +a56653 = 56653 +a56654 = 56654 +a56655 = 56655 +a56656 = 56656 +a56657 = 56657 +a56658 = 56658 +a56659 = 56659 +a56660 = 56660 +a56661 = 56661 +a56662 = 56662 +a56663 = 56663 +a56664 = 56664 +a56665 = 56665 +a56666 = 56666 +a56667 = 56667 +a56668 = 56668 +a56669 = 56669 +a56670 = 56670 +a56671 = 56671 +a56672 = 56672 +a56673 = 56673 +a56674 = 56674 +a56675 = 56675 +a56676 = 56676 +a56677 = 56677 +a56678 = 56678 +a56679 = 56679 +a56680 = 56680 +a56681 = 56681 +a56682 = 56682 +a56683 = 56683 +a56684 = 56684 +a56685 = 56685 +a56686 = 56686 +a56687 = 56687 +a56688 = 56688 +a56689 = 56689 +a56690 = 56690 +a56691 = 56691 +a56692 = 56692 +a56693 = 56693 +a56694 = 56694 +a56695 = 56695 +a56696 = 56696 +a56697 = 56697 +a56698 = 56698 +a56699 = 56699 +a56700 = 56700 +a56701 = 56701 +a56702 = 56702 +a56703 = 56703 +a56704 = 56704 +a56705 = 56705 +a56706 = 56706 +a56707 = 56707 +a56708 = 56708 +a56709 = 56709 +a56710 = 56710 +a56711 = 56711 +a56712 = 56712 +a56713 = 56713 +a56714 = 56714 +a56715 = 56715 +a56716 = 56716 +a56717 = 56717 +a56718 = 56718 +a56719 = 56719 +a56720 = 56720 +a56721 = 56721 +a56722 = 56722 +a56723 = 56723 +a56724 = 56724 +a56725 = 56725 +a56726 = 56726 +a56727 = 56727 +a56728 = 56728 +a56729 = 56729 +a56730 = 56730 +a56731 = 56731 +a56732 = 56732 +a56733 = 56733 +a56734 = 56734 +a56735 = 56735 +a56736 = 56736 +a56737 = 56737 +a56738 = 56738 +a56739 = 56739 +a56740 = 56740 +a56741 = 56741 +a56742 = 56742 +a56743 = 56743 +a56744 = 56744 +a56745 = 56745 +a56746 = 56746 +a56747 = 56747 +a56748 = 56748 +a56749 = 56749 +a56750 = 56750 +a56751 = 56751 +a56752 = 56752 +a56753 = 56753 +a56754 = 56754 +a56755 = 56755 +a56756 = 56756 +a56757 = 56757 +a56758 = 56758 +a56759 = 56759 +a56760 = 56760 +a56761 = 56761 +a56762 = 56762 +a56763 = 56763 +a56764 = 56764 +a56765 = 56765 +a56766 = 56766 +a56767 = 56767 +a56768 = 56768 +a56769 = 56769 +a56770 = 56770 +a56771 = 56771 +a56772 = 56772 +a56773 = 56773 +a56774 = 56774 +a56775 = 56775 +a56776 = 56776 +a56777 = 56777 +a56778 = 56778 +a56779 = 56779 +a56780 = 56780 +a56781 = 56781 +a56782 = 56782 +a56783 = 56783 +a56784 = 56784 +a56785 = 56785 +a56786 = 56786 +a56787 = 56787 +a56788 = 56788 +a56789 = 56789 +a56790 = 56790 +a56791 = 56791 +a56792 = 56792 +a56793 = 56793 +a56794 = 56794 +a56795 = 56795 +a56796 = 56796 +a56797 = 56797 +a56798 = 56798 +a56799 = 56799 +a56800 = 56800 +a56801 = 56801 +a56802 = 56802 +a56803 = 56803 +a56804 = 56804 +a56805 = 56805 +a56806 = 56806 +a56807 = 56807 +a56808 = 56808 +a56809 = 56809 +a56810 = 56810 +a56811 = 56811 +a56812 = 56812 +a56813 = 56813 +a56814 = 56814 +a56815 = 56815 +a56816 = 56816 +a56817 = 56817 +a56818 = 56818 +a56819 = 56819 +a56820 = 56820 +a56821 = 56821 +a56822 = 56822 +a56823 = 56823 +a56824 = 56824 +a56825 = 56825 +a56826 = 56826 +a56827 = 56827 +a56828 = 56828 +a56829 = 56829 +a56830 = 56830 +a56831 = 56831 +a56832 = 56832 +a56833 = 56833 +a56834 = 56834 +a56835 = 56835 +a56836 = 56836 +a56837 = 56837 +a56838 = 56838 +a56839 = 56839 +a56840 = 56840 +a56841 = 56841 +a56842 = 56842 +a56843 = 56843 +a56844 = 56844 +a56845 = 56845 +a56846 = 56846 +a56847 = 56847 +a56848 = 56848 +a56849 = 56849 +a56850 = 56850 +a56851 = 56851 +a56852 = 56852 +a56853 = 56853 +a56854 = 56854 +a56855 = 56855 +a56856 = 56856 +a56857 = 56857 +a56858 = 56858 +a56859 = 56859 +a56860 = 56860 +a56861 = 56861 +a56862 = 56862 +a56863 = 56863 +a56864 = 56864 +a56865 = 56865 +a56866 = 56866 +a56867 = 56867 +a56868 = 56868 +a56869 = 56869 +a56870 = 56870 +a56871 = 56871 +a56872 = 56872 +a56873 = 56873 +a56874 = 56874 +a56875 = 56875 +a56876 = 56876 +a56877 = 56877 +a56878 = 56878 +a56879 = 56879 +a56880 = 56880 +a56881 = 56881 +a56882 = 56882 +a56883 = 56883 +a56884 = 56884 +a56885 = 56885 +a56886 = 56886 +a56887 = 56887 +a56888 = 56888 +a56889 = 56889 +a56890 = 56890 +a56891 = 56891 +a56892 = 56892 +a56893 = 56893 +a56894 = 56894 +a56895 = 56895 +a56896 = 56896 +a56897 = 56897 +a56898 = 56898 +a56899 = 56899 +a56900 = 56900 +a56901 = 56901 +a56902 = 56902 +a56903 = 56903 +a56904 = 56904 +a56905 = 56905 +a56906 = 56906 +a56907 = 56907 +a56908 = 56908 +a56909 = 56909 +a56910 = 56910 +a56911 = 56911 +a56912 = 56912 +a56913 = 56913 +a56914 = 56914 +a56915 = 56915 +a56916 = 56916 +a56917 = 56917 +a56918 = 56918 +a56919 = 56919 +a56920 = 56920 +a56921 = 56921 +a56922 = 56922 +a56923 = 56923 +a56924 = 56924 +a56925 = 56925 +a56926 = 56926 +a56927 = 56927 +a56928 = 56928 +a56929 = 56929 +a56930 = 56930 +a56931 = 56931 +a56932 = 56932 +a56933 = 56933 +a56934 = 56934 +a56935 = 56935 +a56936 = 56936 +a56937 = 56937 +a56938 = 56938 +a56939 = 56939 +a56940 = 56940 +a56941 = 56941 +a56942 = 56942 +a56943 = 56943 +a56944 = 56944 +a56945 = 56945 +a56946 = 56946 +a56947 = 56947 +a56948 = 56948 +a56949 = 56949 +a56950 = 56950 +a56951 = 56951 +a56952 = 56952 +a56953 = 56953 +a56954 = 56954 +a56955 = 56955 +a56956 = 56956 +a56957 = 56957 +a56958 = 56958 +a56959 = 56959 +a56960 = 56960 +a56961 = 56961 +a56962 = 56962 +a56963 = 56963 +a56964 = 56964 +a56965 = 56965 +a56966 = 56966 +a56967 = 56967 +a56968 = 56968 +a56969 = 56969 +a56970 = 56970 +a56971 = 56971 +a56972 = 56972 +a56973 = 56973 +a56974 = 56974 +a56975 = 56975 +a56976 = 56976 +a56977 = 56977 +a56978 = 56978 +a56979 = 56979 +a56980 = 56980 +a56981 = 56981 +a56982 = 56982 +a56983 = 56983 +a56984 = 56984 +a56985 = 56985 +a56986 = 56986 +a56987 = 56987 +a56988 = 56988 +a56989 = 56989 +a56990 = 56990 +a56991 = 56991 +a56992 = 56992 +a56993 = 56993 +a56994 = 56994 +a56995 = 56995 +a56996 = 56996 +a56997 = 56997 +a56998 = 56998 +a56999 = 56999 +a57000 = 57000 +a57001 = 57001 +a57002 = 57002 +a57003 = 57003 +a57004 = 57004 +a57005 = 57005 +a57006 = 57006 +a57007 = 57007 +a57008 = 57008 +a57009 = 57009 +a57010 = 57010 +a57011 = 57011 +a57012 = 57012 +a57013 = 57013 +a57014 = 57014 +a57015 = 57015 +a57016 = 57016 +a57017 = 57017 +a57018 = 57018 +a57019 = 57019 +a57020 = 57020 +a57021 = 57021 +a57022 = 57022 +a57023 = 57023 +a57024 = 57024 +a57025 = 57025 +a57026 = 57026 +a57027 = 57027 +a57028 = 57028 +a57029 = 57029 +a57030 = 57030 +a57031 = 57031 +a57032 = 57032 +a57033 = 57033 +a57034 = 57034 +a57035 = 57035 +a57036 = 57036 +a57037 = 57037 +a57038 = 57038 +a57039 = 57039 +a57040 = 57040 +a57041 = 57041 +a57042 = 57042 +a57043 = 57043 +a57044 = 57044 +a57045 = 57045 +a57046 = 57046 +a57047 = 57047 +a57048 = 57048 +a57049 = 57049 +a57050 = 57050 +a57051 = 57051 +a57052 = 57052 +a57053 = 57053 +a57054 = 57054 +a57055 = 57055 +a57056 = 57056 +a57057 = 57057 +a57058 = 57058 +a57059 = 57059 +a57060 = 57060 +a57061 = 57061 +a57062 = 57062 +a57063 = 57063 +a57064 = 57064 +a57065 = 57065 +a57066 = 57066 +a57067 = 57067 +a57068 = 57068 +a57069 = 57069 +a57070 = 57070 +a57071 = 57071 +a57072 = 57072 +a57073 = 57073 +a57074 = 57074 +a57075 = 57075 +a57076 = 57076 +a57077 = 57077 +a57078 = 57078 +a57079 = 57079 +a57080 = 57080 +a57081 = 57081 +a57082 = 57082 +a57083 = 57083 +a57084 = 57084 +a57085 = 57085 +a57086 = 57086 +a57087 = 57087 +a57088 = 57088 +a57089 = 57089 +a57090 = 57090 +a57091 = 57091 +a57092 = 57092 +a57093 = 57093 +a57094 = 57094 +a57095 = 57095 +a57096 = 57096 +a57097 = 57097 +a57098 = 57098 +a57099 = 57099 +a57100 = 57100 +a57101 = 57101 +a57102 = 57102 +a57103 = 57103 +a57104 = 57104 +a57105 = 57105 +a57106 = 57106 +a57107 = 57107 +a57108 = 57108 +a57109 = 57109 +a57110 = 57110 +a57111 = 57111 +a57112 = 57112 +a57113 = 57113 +a57114 = 57114 +a57115 = 57115 +a57116 = 57116 +a57117 = 57117 +a57118 = 57118 +a57119 = 57119 +a57120 = 57120 +a57121 = 57121 +a57122 = 57122 +a57123 = 57123 +a57124 = 57124 +a57125 = 57125 +a57126 = 57126 +a57127 = 57127 +a57128 = 57128 +a57129 = 57129 +a57130 = 57130 +a57131 = 57131 +a57132 = 57132 +a57133 = 57133 +a57134 = 57134 +a57135 = 57135 +a57136 = 57136 +a57137 = 57137 +a57138 = 57138 +a57139 = 57139 +a57140 = 57140 +a57141 = 57141 +a57142 = 57142 +a57143 = 57143 +a57144 = 57144 +a57145 = 57145 +a57146 = 57146 +a57147 = 57147 +a57148 = 57148 +a57149 = 57149 +a57150 = 57150 +a57151 = 57151 +a57152 = 57152 +a57153 = 57153 +a57154 = 57154 +a57155 = 57155 +a57156 = 57156 +a57157 = 57157 +a57158 = 57158 +a57159 = 57159 +a57160 = 57160 +a57161 = 57161 +a57162 = 57162 +a57163 = 57163 +a57164 = 57164 +a57165 = 57165 +a57166 = 57166 +a57167 = 57167 +a57168 = 57168 +a57169 = 57169 +a57170 = 57170 +a57171 = 57171 +a57172 = 57172 +a57173 = 57173 +a57174 = 57174 +a57175 = 57175 +a57176 = 57176 +a57177 = 57177 +a57178 = 57178 +a57179 = 57179 +a57180 = 57180 +a57181 = 57181 +a57182 = 57182 +a57183 = 57183 +a57184 = 57184 +a57185 = 57185 +a57186 = 57186 +a57187 = 57187 +a57188 = 57188 +a57189 = 57189 +a57190 = 57190 +a57191 = 57191 +a57192 = 57192 +a57193 = 57193 +a57194 = 57194 +a57195 = 57195 +a57196 = 57196 +a57197 = 57197 +a57198 = 57198 +a57199 = 57199 +a57200 = 57200 +a57201 = 57201 +a57202 = 57202 +a57203 = 57203 +a57204 = 57204 +a57205 = 57205 +a57206 = 57206 +a57207 = 57207 +a57208 = 57208 +a57209 = 57209 +a57210 = 57210 +a57211 = 57211 +a57212 = 57212 +a57213 = 57213 +a57214 = 57214 +a57215 = 57215 +a57216 = 57216 +a57217 = 57217 +a57218 = 57218 +a57219 = 57219 +a57220 = 57220 +a57221 = 57221 +a57222 = 57222 +a57223 = 57223 +a57224 = 57224 +a57225 = 57225 +a57226 = 57226 +a57227 = 57227 +a57228 = 57228 +a57229 = 57229 +a57230 = 57230 +a57231 = 57231 +a57232 = 57232 +a57233 = 57233 +a57234 = 57234 +a57235 = 57235 +a57236 = 57236 +a57237 = 57237 +a57238 = 57238 +a57239 = 57239 +a57240 = 57240 +a57241 = 57241 +a57242 = 57242 +a57243 = 57243 +a57244 = 57244 +a57245 = 57245 +a57246 = 57246 +a57247 = 57247 +a57248 = 57248 +a57249 = 57249 +a57250 = 57250 +a57251 = 57251 +a57252 = 57252 +a57253 = 57253 +a57254 = 57254 +a57255 = 57255 +a57256 = 57256 +a57257 = 57257 +a57258 = 57258 +a57259 = 57259 +a57260 = 57260 +a57261 = 57261 +a57262 = 57262 +a57263 = 57263 +a57264 = 57264 +a57265 = 57265 +a57266 = 57266 +a57267 = 57267 +a57268 = 57268 +a57269 = 57269 +a57270 = 57270 +a57271 = 57271 +a57272 = 57272 +a57273 = 57273 +a57274 = 57274 +a57275 = 57275 +a57276 = 57276 +a57277 = 57277 +a57278 = 57278 +a57279 = 57279 +a57280 = 57280 +a57281 = 57281 +a57282 = 57282 +a57283 = 57283 +a57284 = 57284 +a57285 = 57285 +a57286 = 57286 +a57287 = 57287 +a57288 = 57288 +a57289 = 57289 +a57290 = 57290 +a57291 = 57291 +a57292 = 57292 +a57293 = 57293 +a57294 = 57294 +a57295 = 57295 +a57296 = 57296 +a57297 = 57297 +a57298 = 57298 +a57299 = 57299 +a57300 = 57300 +a57301 = 57301 +a57302 = 57302 +a57303 = 57303 +a57304 = 57304 +a57305 = 57305 +a57306 = 57306 +a57307 = 57307 +a57308 = 57308 +a57309 = 57309 +a57310 = 57310 +a57311 = 57311 +a57312 = 57312 +a57313 = 57313 +a57314 = 57314 +a57315 = 57315 +a57316 = 57316 +a57317 = 57317 +a57318 = 57318 +a57319 = 57319 +a57320 = 57320 +a57321 = 57321 +a57322 = 57322 +a57323 = 57323 +a57324 = 57324 +a57325 = 57325 +a57326 = 57326 +a57327 = 57327 +a57328 = 57328 +a57329 = 57329 +a57330 = 57330 +a57331 = 57331 +a57332 = 57332 +a57333 = 57333 +a57334 = 57334 +a57335 = 57335 +a57336 = 57336 +a57337 = 57337 +a57338 = 57338 +a57339 = 57339 +a57340 = 57340 +a57341 = 57341 +a57342 = 57342 +a57343 = 57343 +a57344 = 57344 +a57345 = 57345 +a57346 = 57346 +a57347 = 57347 +a57348 = 57348 +a57349 = 57349 +a57350 = 57350 +a57351 = 57351 +a57352 = 57352 +a57353 = 57353 +a57354 = 57354 +a57355 = 57355 +a57356 = 57356 +a57357 = 57357 +a57358 = 57358 +a57359 = 57359 +a57360 = 57360 +a57361 = 57361 +a57362 = 57362 +a57363 = 57363 +a57364 = 57364 +a57365 = 57365 +a57366 = 57366 +a57367 = 57367 +a57368 = 57368 +a57369 = 57369 +a57370 = 57370 +a57371 = 57371 +a57372 = 57372 +a57373 = 57373 +a57374 = 57374 +a57375 = 57375 +a57376 = 57376 +a57377 = 57377 +a57378 = 57378 +a57379 = 57379 +a57380 = 57380 +a57381 = 57381 +a57382 = 57382 +a57383 = 57383 +a57384 = 57384 +a57385 = 57385 +a57386 = 57386 +a57387 = 57387 +a57388 = 57388 +a57389 = 57389 +a57390 = 57390 +a57391 = 57391 +a57392 = 57392 +a57393 = 57393 +a57394 = 57394 +a57395 = 57395 +a57396 = 57396 +a57397 = 57397 +a57398 = 57398 +a57399 = 57399 +a57400 = 57400 +a57401 = 57401 +a57402 = 57402 +a57403 = 57403 +a57404 = 57404 +a57405 = 57405 +a57406 = 57406 +a57407 = 57407 +a57408 = 57408 +a57409 = 57409 +a57410 = 57410 +a57411 = 57411 +a57412 = 57412 +a57413 = 57413 +a57414 = 57414 +a57415 = 57415 +a57416 = 57416 +a57417 = 57417 +a57418 = 57418 +a57419 = 57419 +a57420 = 57420 +a57421 = 57421 +a57422 = 57422 +a57423 = 57423 +a57424 = 57424 +a57425 = 57425 +a57426 = 57426 +a57427 = 57427 +a57428 = 57428 +a57429 = 57429 +a57430 = 57430 +a57431 = 57431 +a57432 = 57432 +a57433 = 57433 +a57434 = 57434 +a57435 = 57435 +a57436 = 57436 +a57437 = 57437 +a57438 = 57438 +a57439 = 57439 +a57440 = 57440 +a57441 = 57441 +a57442 = 57442 +a57443 = 57443 +a57444 = 57444 +a57445 = 57445 +a57446 = 57446 +a57447 = 57447 +a57448 = 57448 +a57449 = 57449 +a57450 = 57450 +a57451 = 57451 +a57452 = 57452 +a57453 = 57453 +a57454 = 57454 +a57455 = 57455 +a57456 = 57456 +a57457 = 57457 +a57458 = 57458 +a57459 = 57459 +a57460 = 57460 +a57461 = 57461 +a57462 = 57462 +a57463 = 57463 +a57464 = 57464 +a57465 = 57465 +a57466 = 57466 +a57467 = 57467 +a57468 = 57468 +a57469 = 57469 +a57470 = 57470 +a57471 = 57471 +a57472 = 57472 +a57473 = 57473 +a57474 = 57474 +a57475 = 57475 +a57476 = 57476 +a57477 = 57477 +a57478 = 57478 +a57479 = 57479 +a57480 = 57480 +a57481 = 57481 +a57482 = 57482 +a57483 = 57483 +a57484 = 57484 +a57485 = 57485 +a57486 = 57486 +a57487 = 57487 +a57488 = 57488 +a57489 = 57489 +a57490 = 57490 +a57491 = 57491 +a57492 = 57492 +a57493 = 57493 +a57494 = 57494 +a57495 = 57495 +a57496 = 57496 +a57497 = 57497 +a57498 = 57498 +a57499 = 57499 +a57500 = 57500 +a57501 = 57501 +a57502 = 57502 +a57503 = 57503 +a57504 = 57504 +a57505 = 57505 +a57506 = 57506 +a57507 = 57507 +a57508 = 57508 +a57509 = 57509 +a57510 = 57510 +a57511 = 57511 +a57512 = 57512 +a57513 = 57513 +a57514 = 57514 +a57515 = 57515 +a57516 = 57516 +a57517 = 57517 +a57518 = 57518 +a57519 = 57519 +a57520 = 57520 +a57521 = 57521 +a57522 = 57522 +a57523 = 57523 +a57524 = 57524 +a57525 = 57525 +a57526 = 57526 +a57527 = 57527 +a57528 = 57528 +a57529 = 57529 +a57530 = 57530 +a57531 = 57531 +a57532 = 57532 +a57533 = 57533 +a57534 = 57534 +a57535 = 57535 +a57536 = 57536 +a57537 = 57537 +a57538 = 57538 +a57539 = 57539 +a57540 = 57540 +a57541 = 57541 +a57542 = 57542 +a57543 = 57543 +a57544 = 57544 +a57545 = 57545 +a57546 = 57546 +a57547 = 57547 +a57548 = 57548 +a57549 = 57549 +a57550 = 57550 +a57551 = 57551 +a57552 = 57552 +a57553 = 57553 +a57554 = 57554 +a57555 = 57555 +a57556 = 57556 +a57557 = 57557 +a57558 = 57558 +a57559 = 57559 +a57560 = 57560 +a57561 = 57561 +a57562 = 57562 +a57563 = 57563 +a57564 = 57564 +a57565 = 57565 +a57566 = 57566 +a57567 = 57567 +a57568 = 57568 +a57569 = 57569 +a57570 = 57570 +a57571 = 57571 +a57572 = 57572 +a57573 = 57573 +a57574 = 57574 +a57575 = 57575 +a57576 = 57576 +a57577 = 57577 +a57578 = 57578 +a57579 = 57579 +a57580 = 57580 +a57581 = 57581 +a57582 = 57582 +a57583 = 57583 +a57584 = 57584 +a57585 = 57585 +a57586 = 57586 +a57587 = 57587 +a57588 = 57588 +a57589 = 57589 +a57590 = 57590 +a57591 = 57591 +a57592 = 57592 +a57593 = 57593 +a57594 = 57594 +a57595 = 57595 +a57596 = 57596 +a57597 = 57597 +a57598 = 57598 +a57599 = 57599 +a57600 = 57600 +a57601 = 57601 +a57602 = 57602 +a57603 = 57603 +a57604 = 57604 +a57605 = 57605 +a57606 = 57606 +a57607 = 57607 +a57608 = 57608 +a57609 = 57609 +a57610 = 57610 +a57611 = 57611 +a57612 = 57612 +a57613 = 57613 +a57614 = 57614 +a57615 = 57615 +a57616 = 57616 +a57617 = 57617 +a57618 = 57618 +a57619 = 57619 +a57620 = 57620 +a57621 = 57621 +a57622 = 57622 +a57623 = 57623 +a57624 = 57624 +a57625 = 57625 +a57626 = 57626 +a57627 = 57627 +a57628 = 57628 +a57629 = 57629 +a57630 = 57630 +a57631 = 57631 +a57632 = 57632 +a57633 = 57633 +a57634 = 57634 +a57635 = 57635 +a57636 = 57636 +a57637 = 57637 +a57638 = 57638 +a57639 = 57639 +a57640 = 57640 +a57641 = 57641 +a57642 = 57642 +a57643 = 57643 +a57644 = 57644 +a57645 = 57645 +a57646 = 57646 +a57647 = 57647 +a57648 = 57648 +a57649 = 57649 +a57650 = 57650 +a57651 = 57651 +a57652 = 57652 +a57653 = 57653 +a57654 = 57654 +a57655 = 57655 +a57656 = 57656 +a57657 = 57657 +a57658 = 57658 +a57659 = 57659 +a57660 = 57660 +a57661 = 57661 +a57662 = 57662 +a57663 = 57663 +a57664 = 57664 +a57665 = 57665 +a57666 = 57666 +a57667 = 57667 +a57668 = 57668 +a57669 = 57669 +a57670 = 57670 +a57671 = 57671 +a57672 = 57672 +a57673 = 57673 +a57674 = 57674 +a57675 = 57675 +a57676 = 57676 +a57677 = 57677 +a57678 = 57678 +a57679 = 57679 +a57680 = 57680 +a57681 = 57681 +a57682 = 57682 +a57683 = 57683 +a57684 = 57684 +a57685 = 57685 +a57686 = 57686 +a57687 = 57687 +a57688 = 57688 +a57689 = 57689 +a57690 = 57690 +a57691 = 57691 +a57692 = 57692 +a57693 = 57693 +a57694 = 57694 +a57695 = 57695 +a57696 = 57696 +a57697 = 57697 +a57698 = 57698 +a57699 = 57699 +a57700 = 57700 +a57701 = 57701 +a57702 = 57702 +a57703 = 57703 +a57704 = 57704 +a57705 = 57705 +a57706 = 57706 +a57707 = 57707 +a57708 = 57708 +a57709 = 57709 +a57710 = 57710 +a57711 = 57711 +a57712 = 57712 +a57713 = 57713 +a57714 = 57714 +a57715 = 57715 +a57716 = 57716 +a57717 = 57717 +a57718 = 57718 +a57719 = 57719 +a57720 = 57720 +a57721 = 57721 +a57722 = 57722 +a57723 = 57723 +a57724 = 57724 +a57725 = 57725 +a57726 = 57726 +a57727 = 57727 +a57728 = 57728 +a57729 = 57729 +a57730 = 57730 +a57731 = 57731 +a57732 = 57732 +a57733 = 57733 +a57734 = 57734 +a57735 = 57735 +a57736 = 57736 +a57737 = 57737 +a57738 = 57738 +a57739 = 57739 +a57740 = 57740 +a57741 = 57741 +a57742 = 57742 +a57743 = 57743 +a57744 = 57744 +a57745 = 57745 +a57746 = 57746 +a57747 = 57747 +a57748 = 57748 +a57749 = 57749 +a57750 = 57750 +a57751 = 57751 +a57752 = 57752 +a57753 = 57753 +a57754 = 57754 +a57755 = 57755 +a57756 = 57756 +a57757 = 57757 +a57758 = 57758 +a57759 = 57759 +a57760 = 57760 +a57761 = 57761 +a57762 = 57762 +a57763 = 57763 +a57764 = 57764 +a57765 = 57765 +a57766 = 57766 +a57767 = 57767 +a57768 = 57768 +a57769 = 57769 +a57770 = 57770 +a57771 = 57771 +a57772 = 57772 +a57773 = 57773 +a57774 = 57774 +a57775 = 57775 +a57776 = 57776 +a57777 = 57777 +a57778 = 57778 +a57779 = 57779 +a57780 = 57780 +a57781 = 57781 +a57782 = 57782 +a57783 = 57783 +a57784 = 57784 +a57785 = 57785 +a57786 = 57786 +a57787 = 57787 +a57788 = 57788 +a57789 = 57789 +a57790 = 57790 +a57791 = 57791 +a57792 = 57792 +a57793 = 57793 +a57794 = 57794 +a57795 = 57795 +a57796 = 57796 +a57797 = 57797 +a57798 = 57798 +a57799 = 57799 +a57800 = 57800 +a57801 = 57801 +a57802 = 57802 +a57803 = 57803 +a57804 = 57804 +a57805 = 57805 +a57806 = 57806 +a57807 = 57807 +a57808 = 57808 +a57809 = 57809 +a57810 = 57810 +a57811 = 57811 +a57812 = 57812 +a57813 = 57813 +a57814 = 57814 +a57815 = 57815 +a57816 = 57816 +a57817 = 57817 +a57818 = 57818 +a57819 = 57819 +a57820 = 57820 +a57821 = 57821 +a57822 = 57822 +a57823 = 57823 +a57824 = 57824 +a57825 = 57825 +a57826 = 57826 +a57827 = 57827 +a57828 = 57828 +a57829 = 57829 +a57830 = 57830 +a57831 = 57831 +a57832 = 57832 +a57833 = 57833 +a57834 = 57834 +a57835 = 57835 +a57836 = 57836 +a57837 = 57837 +a57838 = 57838 +a57839 = 57839 +a57840 = 57840 +a57841 = 57841 +a57842 = 57842 +a57843 = 57843 +a57844 = 57844 +a57845 = 57845 +a57846 = 57846 +a57847 = 57847 +a57848 = 57848 +a57849 = 57849 +a57850 = 57850 +a57851 = 57851 +a57852 = 57852 +a57853 = 57853 +a57854 = 57854 +a57855 = 57855 +a57856 = 57856 +a57857 = 57857 +a57858 = 57858 +a57859 = 57859 +a57860 = 57860 +a57861 = 57861 +a57862 = 57862 +a57863 = 57863 +a57864 = 57864 +a57865 = 57865 +a57866 = 57866 +a57867 = 57867 +a57868 = 57868 +a57869 = 57869 +a57870 = 57870 +a57871 = 57871 +a57872 = 57872 +a57873 = 57873 +a57874 = 57874 +a57875 = 57875 +a57876 = 57876 +a57877 = 57877 +a57878 = 57878 +a57879 = 57879 +a57880 = 57880 +a57881 = 57881 +a57882 = 57882 +a57883 = 57883 +a57884 = 57884 +a57885 = 57885 +a57886 = 57886 +a57887 = 57887 +a57888 = 57888 +a57889 = 57889 +a57890 = 57890 +a57891 = 57891 +a57892 = 57892 +a57893 = 57893 +a57894 = 57894 +a57895 = 57895 +a57896 = 57896 +a57897 = 57897 +a57898 = 57898 +a57899 = 57899 +a57900 = 57900 +a57901 = 57901 +a57902 = 57902 +a57903 = 57903 +a57904 = 57904 +a57905 = 57905 +a57906 = 57906 +a57907 = 57907 +a57908 = 57908 +a57909 = 57909 +a57910 = 57910 +a57911 = 57911 +a57912 = 57912 +a57913 = 57913 +a57914 = 57914 +a57915 = 57915 +a57916 = 57916 +a57917 = 57917 +a57918 = 57918 +a57919 = 57919 +a57920 = 57920 +a57921 = 57921 +a57922 = 57922 +a57923 = 57923 +a57924 = 57924 +a57925 = 57925 +a57926 = 57926 +a57927 = 57927 +a57928 = 57928 +a57929 = 57929 +a57930 = 57930 +a57931 = 57931 +a57932 = 57932 +a57933 = 57933 +a57934 = 57934 +a57935 = 57935 +a57936 = 57936 +a57937 = 57937 +a57938 = 57938 +a57939 = 57939 +a57940 = 57940 +a57941 = 57941 +a57942 = 57942 +a57943 = 57943 +a57944 = 57944 +a57945 = 57945 +a57946 = 57946 +a57947 = 57947 +a57948 = 57948 +a57949 = 57949 +a57950 = 57950 +a57951 = 57951 +a57952 = 57952 +a57953 = 57953 +a57954 = 57954 +a57955 = 57955 +a57956 = 57956 +a57957 = 57957 +a57958 = 57958 +a57959 = 57959 +a57960 = 57960 +a57961 = 57961 +a57962 = 57962 +a57963 = 57963 +a57964 = 57964 +a57965 = 57965 +a57966 = 57966 +a57967 = 57967 +a57968 = 57968 +a57969 = 57969 +a57970 = 57970 +a57971 = 57971 +a57972 = 57972 +a57973 = 57973 +a57974 = 57974 +a57975 = 57975 +a57976 = 57976 +a57977 = 57977 +a57978 = 57978 +a57979 = 57979 +a57980 = 57980 +a57981 = 57981 +a57982 = 57982 +a57983 = 57983 +a57984 = 57984 +a57985 = 57985 +a57986 = 57986 +a57987 = 57987 +a57988 = 57988 +a57989 = 57989 +a57990 = 57990 +a57991 = 57991 +a57992 = 57992 +a57993 = 57993 +a57994 = 57994 +a57995 = 57995 +a57996 = 57996 +a57997 = 57997 +a57998 = 57998 +a57999 = 57999 +a58000 = 58000 +a58001 = 58001 +a58002 = 58002 +a58003 = 58003 +a58004 = 58004 +a58005 = 58005 +a58006 = 58006 +a58007 = 58007 +a58008 = 58008 +a58009 = 58009 +a58010 = 58010 +a58011 = 58011 +a58012 = 58012 +a58013 = 58013 +a58014 = 58014 +a58015 = 58015 +a58016 = 58016 +a58017 = 58017 +a58018 = 58018 +a58019 = 58019 +a58020 = 58020 +a58021 = 58021 +a58022 = 58022 +a58023 = 58023 +a58024 = 58024 +a58025 = 58025 +a58026 = 58026 +a58027 = 58027 +a58028 = 58028 +a58029 = 58029 +a58030 = 58030 +a58031 = 58031 +a58032 = 58032 +a58033 = 58033 +a58034 = 58034 +a58035 = 58035 +a58036 = 58036 +a58037 = 58037 +a58038 = 58038 +a58039 = 58039 +a58040 = 58040 +a58041 = 58041 +a58042 = 58042 +a58043 = 58043 +a58044 = 58044 +a58045 = 58045 +a58046 = 58046 +a58047 = 58047 +a58048 = 58048 +a58049 = 58049 +a58050 = 58050 +a58051 = 58051 +a58052 = 58052 +a58053 = 58053 +a58054 = 58054 +a58055 = 58055 +a58056 = 58056 +a58057 = 58057 +a58058 = 58058 +a58059 = 58059 +a58060 = 58060 +a58061 = 58061 +a58062 = 58062 +a58063 = 58063 +a58064 = 58064 +a58065 = 58065 +a58066 = 58066 +a58067 = 58067 +a58068 = 58068 +a58069 = 58069 +a58070 = 58070 +a58071 = 58071 +a58072 = 58072 +a58073 = 58073 +a58074 = 58074 +a58075 = 58075 +a58076 = 58076 +a58077 = 58077 +a58078 = 58078 +a58079 = 58079 +a58080 = 58080 +a58081 = 58081 +a58082 = 58082 +a58083 = 58083 +a58084 = 58084 +a58085 = 58085 +a58086 = 58086 +a58087 = 58087 +a58088 = 58088 +a58089 = 58089 +a58090 = 58090 +a58091 = 58091 +a58092 = 58092 +a58093 = 58093 +a58094 = 58094 +a58095 = 58095 +a58096 = 58096 +a58097 = 58097 +a58098 = 58098 +a58099 = 58099 +a58100 = 58100 +a58101 = 58101 +a58102 = 58102 +a58103 = 58103 +a58104 = 58104 +a58105 = 58105 +a58106 = 58106 +a58107 = 58107 +a58108 = 58108 +a58109 = 58109 +a58110 = 58110 +a58111 = 58111 +a58112 = 58112 +a58113 = 58113 +a58114 = 58114 +a58115 = 58115 +a58116 = 58116 +a58117 = 58117 +a58118 = 58118 +a58119 = 58119 +a58120 = 58120 +a58121 = 58121 +a58122 = 58122 +a58123 = 58123 +a58124 = 58124 +a58125 = 58125 +a58126 = 58126 +a58127 = 58127 +a58128 = 58128 +a58129 = 58129 +a58130 = 58130 +a58131 = 58131 +a58132 = 58132 +a58133 = 58133 +a58134 = 58134 +a58135 = 58135 +a58136 = 58136 +a58137 = 58137 +a58138 = 58138 +a58139 = 58139 +a58140 = 58140 +a58141 = 58141 +a58142 = 58142 +a58143 = 58143 +a58144 = 58144 +a58145 = 58145 +a58146 = 58146 +a58147 = 58147 +a58148 = 58148 +a58149 = 58149 +a58150 = 58150 +a58151 = 58151 +a58152 = 58152 +a58153 = 58153 +a58154 = 58154 +a58155 = 58155 +a58156 = 58156 +a58157 = 58157 +a58158 = 58158 +a58159 = 58159 +a58160 = 58160 +a58161 = 58161 +a58162 = 58162 +a58163 = 58163 +a58164 = 58164 +a58165 = 58165 +a58166 = 58166 +a58167 = 58167 +a58168 = 58168 +a58169 = 58169 +a58170 = 58170 +a58171 = 58171 +a58172 = 58172 +a58173 = 58173 +a58174 = 58174 +a58175 = 58175 +a58176 = 58176 +a58177 = 58177 +a58178 = 58178 +a58179 = 58179 +a58180 = 58180 +a58181 = 58181 +a58182 = 58182 +a58183 = 58183 +a58184 = 58184 +a58185 = 58185 +a58186 = 58186 +a58187 = 58187 +a58188 = 58188 +a58189 = 58189 +a58190 = 58190 +a58191 = 58191 +a58192 = 58192 +a58193 = 58193 +a58194 = 58194 +a58195 = 58195 +a58196 = 58196 +a58197 = 58197 +a58198 = 58198 +a58199 = 58199 +a58200 = 58200 +a58201 = 58201 +a58202 = 58202 +a58203 = 58203 +a58204 = 58204 +a58205 = 58205 +a58206 = 58206 +a58207 = 58207 +a58208 = 58208 +a58209 = 58209 +a58210 = 58210 +a58211 = 58211 +a58212 = 58212 +a58213 = 58213 +a58214 = 58214 +a58215 = 58215 +a58216 = 58216 +a58217 = 58217 +a58218 = 58218 +a58219 = 58219 +a58220 = 58220 +a58221 = 58221 +a58222 = 58222 +a58223 = 58223 +a58224 = 58224 +a58225 = 58225 +a58226 = 58226 +a58227 = 58227 +a58228 = 58228 +a58229 = 58229 +a58230 = 58230 +a58231 = 58231 +a58232 = 58232 +a58233 = 58233 +a58234 = 58234 +a58235 = 58235 +a58236 = 58236 +a58237 = 58237 +a58238 = 58238 +a58239 = 58239 +a58240 = 58240 +a58241 = 58241 +a58242 = 58242 +a58243 = 58243 +a58244 = 58244 +a58245 = 58245 +a58246 = 58246 +a58247 = 58247 +a58248 = 58248 +a58249 = 58249 +a58250 = 58250 +a58251 = 58251 +a58252 = 58252 +a58253 = 58253 +a58254 = 58254 +a58255 = 58255 +a58256 = 58256 +a58257 = 58257 +a58258 = 58258 +a58259 = 58259 +a58260 = 58260 +a58261 = 58261 +a58262 = 58262 +a58263 = 58263 +a58264 = 58264 +a58265 = 58265 +a58266 = 58266 +a58267 = 58267 +a58268 = 58268 +a58269 = 58269 +a58270 = 58270 +a58271 = 58271 +a58272 = 58272 +a58273 = 58273 +a58274 = 58274 +a58275 = 58275 +a58276 = 58276 +a58277 = 58277 +a58278 = 58278 +a58279 = 58279 +a58280 = 58280 +a58281 = 58281 +a58282 = 58282 +a58283 = 58283 +a58284 = 58284 +a58285 = 58285 +a58286 = 58286 +a58287 = 58287 +a58288 = 58288 +a58289 = 58289 +a58290 = 58290 +a58291 = 58291 +a58292 = 58292 +a58293 = 58293 +a58294 = 58294 +a58295 = 58295 +a58296 = 58296 +a58297 = 58297 +a58298 = 58298 +a58299 = 58299 +a58300 = 58300 +a58301 = 58301 +a58302 = 58302 +a58303 = 58303 +a58304 = 58304 +a58305 = 58305 +a58306 = 58306 +a58307 = 58307 +a58308 = 58308 +a58309 = 58309 +a58310 = 58310 +a58311 = 58311 +a58312 = 58312 +a58313 = 58313 +a58314 = 58314 +a58315 = 58315 +a58316 = 58316 +a58317 = 58317 +a58318 = 58318 +a58319 = 58319 +a58320 = 58320 +a58321 = 58321 +a58322 = 58322 +a58323 = 58323 +a58324 = 58324 +a58325 = 58325 +a58326 = 58326 +a58327 = 58327 +a58328 = 58328 +a58329 = 58329 +a58330 = 58330 +a58331 = 58331 +a58332 = 58332 +a58333 = 58333 +a58334 = 58334 +a58335 = 58335 +a58336 = 58336 +a58337 = 58337 +a58338 = 58338 +a58339 = 58339 +a58340 = 58340 +a58341 = 58341 +a58342 = 58342 +a58343 = 58343 +a58344 = 58344 +a58345 = 58345 +a58346 = 58346 +a58347 = 58347 +a58348 = 58348 +a58349 = 58349 +a58350 = 58350 +a58351 = 58351 +a58352 = 58352 +a58353 = 58353 +a58354 = 58354 +a58355 = 58355 +a58356 = 58356 +a58357 = 58357 +a58358 = 58358 +a58359 = 58359 +a58360 = 58360 +a58361 = 58361 +a58362 = 58362 +a58363 = 58363 +a58364 = 58364 +a58365 = 58365 +a58366 = 58366 +a58367 = 58367 +a58368 = 58368 +a58369 = 58369 +a58370 = 58370 +a58371 = 58371 +a58372 = 58372 +a58373 = 58373 +a58374 = 58374 +a58375 = 58375 +a58376 = 58376 +a58377 = 58377 +a58378 = 58378 +a58379 = 58379 +a58380 = 58380 +a58381 = 58381 +a58382 = 58382 +a58383 = 58383 +a58384 = 58384 +a58385 = 58385 +a58386 = 58386 +a58387 = 58387 +a58388 = 58388 +a58389 = 58389 +a58390 = 58390 +a58391 = 58391 +a58392 = 58392 +a58393 = 58393 +a58394 = 58394 +a58395 = 58395 +a58396 = 58396 +a58397 = 58397 +a58398 = 58398 +a58399 = 58399 +a58400 = 58400 +a58401 = 58401 +a58402 = 58402 +a58403 = 58403 +a58404 = 58404 +a58405 = 58405 +a58406 = 58406 +a58407 = 58407 +a58408 = 58408 +a58409 = 58409 +a58410 = 58410 +a58411 = 58411 +a58412 = 58412 +a58413 = 58413 +a58414 = 58414 +a58415 = 58415 +a58416 = 58416 +a58417 = 58417 +a58418 = 58418 +a58419 = 58419 +a58420 = 58420 +a58421 = 58421 +a58422 = 58422 +a58423 = 58423 +a58424 = 58424 +a58425 = 58425 +a58426 = 58426 +a58427 = 58427 +a58428 = 58428 +a58429 = 58429 +a58430 = 58430 +a58431 = 58431 +a58432 = 58432 +a58433 = 58433 +a58434 = 58434 +a58435 = 58435 +a58436 = 58436 +a58437 = 58437 +a58438 = 58438 +a58439 = 58439 +a58440 = 58440 +a58441 = 58441 +a58442 = 58442 +a58443 = 58443 +a58444 = 58444 +a58445 = 58445 +a58446 = 58446 +a58447 = 58447 +a58448 = 58448 +a58449 = 58449 +a58450 = 58450 +a58451 = 58451 +a58452 = 58452 +a58453 = 58453 +a58454 = 58454 +a58455 = 58455 +a58456 = 58456 +a58457 = 58457 +a58458 = 58458 +a58459 = 58459 +a58460 = 58460 +a58461 = 58461 +a58462 = 58462 +a58463 = 58463 +a58464 = 58464 +a58465 = 58465 +a58466 = 58466 +a58467 = 58467 +a58468 = 58468 +a58469 = 58469 +a58470 = 58470 +a58471 = 58471 +a58472 = 58472 +a58473 = 58473 +a58474 = 58474 +a58475 = 58475 +a58476 = 58476 +a58477 = 58477 +a58478 = 58478 +a58479 = 58479 +a58480 = 58480 +a58481 = 58481 +a58482 = 58482 +a58483 = 58483 +a58484 = 58484 +a58485 = 58485 +a58486 = 58486 +a58487 = 58487 +a58488 = 58488 +a58489 = 58489 +a58490 = 58490 +a58491 = 58491 +a58492 = 58492 +a58493 = 58493 +a58494 = 58494 +a58495 = 58495 +a58496 = 58496 +a58497 = 58497 +a58498 = 58498 +a58499 = 58499 +a58500 = 58500 +a58501 = 58501 +a58502 = 58502 +a58503 = 58503 +a58504 = 58504 +a58505 = 58505 +a58506 = 58506 +a58507 = 58507 +a58508 = 58508 +a58509 = 58509 +a58510 = 58510 +a58511 = 58511 +a58512 = 58512 +a58513 = 58513 +a58514 = 58514 +a58515 = 58515 +a58516 = 58516 +a58517 = 58517 +a58518 = 58518 +a58519 = 58519 +a58520 = 58520 +a58521 = 58521 +a58522 = 58522 +a58523 = 58523 +a58524 = 58524 +a58525 = 58525 +a58526 = 58526 +a58527 = 58527 +a58528 = 58528 +a58529 = 58529 +a58530 = 58530 +a58531 = 58531 +a58532 = 58532 +a58533 = 58533 +a58534 = 58534 +a58535 = 58535 +a58536 = 58536 +a58537 = 58537 +a58538 = 58538 +a58539 = 58539 +a58540 = 58540 +a58541 = 58541 +a58542 = 58542 +a58543 = 58543 +a58544 = 58544 +a58545 = 58545 +a58546 = 58546 +a58547 = 58547 +a58548 = 58548 +a58549 = 58549 +a58550 = 58550 +a58551 = 58551 +a58552 = 58552 +a58553 = 58553 +a58554 = 58554 +a58555 = 58555 +a58556 = 58556 +a58557 = 58557 +a58558 = 58558 +a58559 = 58559 +a58560 = 58560 +a58561 = 58561 +a58562 = 58562 +a58563 = 58563 +a58564 = 58564 +a58565 = 58565 +a58566 = 58566 +a58567 = 58567 +a58568 = 58568 +a58569 = 58569 +a58570 = 58570 +a58571 = 58571 +a58572 = 58572 +a58573 = 58573 +a58574 = 58574 +a58575 = 58575 +a58576 = 58576 +a58577 = 58577 +a58578 = 58578 +a58579 = 58579 +a58580 = 58580 +a58581 = 58581 +a58582 = 58582 +a58583 = 58583 +a58584 = 58584 +a58585 = 58585 +a58586 = 58586 +a58587 = 58587 +a58588 = 58588 +a58589 = 58589 +a58590 = 58590 +a58591 = 58591 +a58592 = 58592 +a58593 = 58593 +a58594 = 58594 +a58595 = 58595 +a58596 = 58596 +a58597 = 58597 +a58598 = 58598 +a58599 = 58599 +a58600 = 58600 +a58601 = 58601 +a58602 = 58602 +a58603 = 58603 +a58604 = 58604 +a58605 = 58605 +a58606 = 58606 +a58607 = 58607 +a58608 = 58608 +a58609 = 58609 +a58610 = 58610 +a58611 = 58611 +a58612 = 58612 +a58613 = 58613 +a58614 = 58614 +a58615 = 58615 +a58616 = 58616 +a58617 = 58617 +a58618 = 58618 +a58619 = 58619 +a58620 = 58620 +a58621 = 58621 +a58622 = 58622 +a58623 = 58623 +a58624 = 58624 +a58625 = 58625 +a58626 = 58626 +a58627 = 58627 +a58628 = 58628 +a58629 = 58629 +a58630 = 58630 +a58631 = 58631 +a58632 = 58632 +a58633 = 58633 +a58634 = 58634 +a58635 = 58635 +a58636 = 58636 +a58637 = 58637 +a58638 = 58638 +a58639 = 58639 +a58640 = 58640 +a58641 = 58641 +a58642 = 58642 +a58643 = 58643 +a58644 = 58644 +a58645 = 58645 +a58646 = 58646 +a58647 = 58647 +a58648 = 58648 +a58649 = 58649 +a58650 = 58650 +a58651 = 58651 +a58652 = 58652 +a58653 = 58653 +a58654 = 58654 +a58655 = 58655 +a58656 = 58656 +a58657 = 58657 +a58658 = 58658 +a58659 = 58659 +a58660 = 58660 +a58661 = 58661 +a58662 = 58662 +a58663 = 58663 +a58664 = 58664 +a58665 = 58665 +a58666 = 58666 +a58667 = 58667 +a58668 = 58668 +a58669 = 58669 +a58670 = 58670 +a58671 = 58671 +a58672 = 58672 +a58673 = 58673 +a58674 = 58674 +a58675 = 58675 +a58676 = 58676 +a58677 = 58677 +a58678 = 58678 +a58679 = 58679 +a58680 = 58680 +a58681 = 58681 +a58682 = 58682 +a58683 = 58683 +a58684 = 58684 +a58685 = 58685 +a58686 = 58686 +a58687 = 58687 +a58688 = 58688 +a58689 = 58689 +a58690 = 58690 +a58691 = 58691 +a58692 = 58692 +a58693 = 58693 +a58694 = 58694 +a58695 = 58695 +a58696 = 58696 +a58697 = 58697 +a58698 = 58698 +a58699 = 58699 +a58700 = 58700 +a58701 = 58701 +a58702 = 58702 +a58703 = 58703 +a58704 = 58704 +a58705 = 58705 +a58706 = 58706 +a58707 = 58707 +a58708 = 58708 +a58709 = 58709 +a58710 = 58710 +a58711 = 58711 +a58712 = 58712 +a58713 = 58713 +a58714 = 58714 +a58715 = 58715 +a58716 = 58716 +a58717 = 58717 +a58718 = 58718 +a58719 = 58719 +a58720 = 58720 +a58721 = 58721 +a58722 = 58722 +a58723 = 58723 +a58724 = 58724 +a58725 = 58725 +a58726 = 58726 +a58727 = 58727 +a58728 = 58728 +a58729 = 58729 +a58730 = 58730 +a58731 = 58731 +a58732 = 58732 +a58733 = 58733 +a58734 = 58734 +a58735 = 58735 +a58736 = 58736 +a58737 = 58737 +a58738 = 58738 +a58739 = 58739 +a58740 = 58740 +a58741 = 58741 +a58742 = 58742 +a58743 = 58743 +a58744 = 58744 +a58745 = 58745 +a58746 = 58746 +a58747 = 58747 +a58748 = 58748 +a58749 = 58749 +a58750 = 58750 +a58751 = 58751 +a58752 = 58752 +a58753 = 58753 +a58754 = 58754 +a58755 = 58755 +a58756 = 58756 +a58757 = 58757 +a58758 = 58758 +a58759 = 58759 +a58760 = 58760 +a58761 = 58761 +a58762 = 58762 +a58763 = 58763 +a58764 = 58764 +a58765 = 58765 +a58766 = 58766 +a58767 = 58767 +a58768 = 58768 +a58769 = 58769 +a58770 = 58770 +a58771 = 58771 +a58772 = 58772 +a58773 = 58773 +a58774 = 58774 +a58775 = 58775 +a58776 = 58776 +a58777 = 58777 +a58778 = 58778 +a58779 = 58779 +a58780 = 58780 +a58781 = 58781 +a58782 = 58782 +a58783 = 58783 +a58784 = 58784 +a58785 = 58785 +a58786 = 58786 +a58787 = 58787 +a58788 = 58788 +a58789 = 58789 +a58790 = 58790 +a58791 = 58791 +a58792 = 58792 +a58793 = 58793 +a58794 = 58794 +a58795 = 58795 +a58796 = 58796 +a58797 = 58797 +a58798 = 58798 +a58799 = 58799 +a58800 = 58800 +a58801 = 58801 +a58802 = 58802 +a58803 = 58803 +a58804 = 58804 +a58805 = 58805 +a58806 = 58806 +a58807 = 58807 +a58808 = 58808 +a58809 = 58809 +a58810 = 58810 +a58811 = 58811 +a58812 = 58812 +a58813 = 58813 +a58814 = 58814 +a58815 = 58815 +a58816 = 58816 +a58817 = 58817 +a58818 = 58818 +a58819 = 58819 +a58820 = 58820 +a58821 = 58821 +a58822 = 58822 +a58823 = 58823 +a58824 = 58824 +a58825 = 58825 +a58826 = 58826 +a58827 = 58827 +a58828 = 58828 +a58829 = 58829 +a58830 = 58830 +a58831 = 58831 +a58832 = 58832 +a58833 = 58833 +a58834 = 58834 +a58835 = 58835 +a58836 = 58836 +a58837 = 58837 +a58838 = 58838 +a58839 = 58839 +a58840 = 58840 +a58841 = 58841 +a58842 = 58842 +a58843 = 58843 +a58844 = 58844 +a58845 = 58845 +a58846 = 58846 +a58847 = 58847 +a58848 = 58848 +a58849 = 58849 +a58850 = 58850 +a58851 = 58851 +a58852 = 58852 +a58853 = 58853 +a58854 = 58854 +a58855 = 58855 +a58856 = 58856 +a58857 = 58857 +a58858 = 58858 +a58859 = 58859 +a58860 = 58860 +a58861 = 58861 +a58862 = 58862 +a58863 = 58863 +a58864 = 58864 +a58865 = 58865 +a58866 = 58866 +a58867 = 58867 +a58868 = 58868 +a58869 = 58869 +a58870 = 58870 +a58871 = 58871 +a58872 = 58872 +a58873 = 58873 +a58874 = 58874 +a58875 = 58875 +a58876 = 58876 +a58877 = 58877 +a58878 = 58878 +a58879 = 58879 +a58880 = 58880 +a58881 = 58881 +a58882 = 58882 +a58883 = 58883 +a58884 = 58884 +a58885 = 58885 +a58886 = 58886 +a58887 = 58887 +a58888 = 58888 +a58889 = 58889 +a58890 = 58890 +a58891 = 58891 +a58892 = 58892 +a58893 = 58893 +a58894 = 58894 +a58895 = 58895 +a58896 = 58896 +a58897 = 58897 +a58898 = 58898 +a58899 = 58899 +a58900 = 58900 +a58901 = 58901 +a58902 = 58902 +a58903 = 58903 +a58904 = 58904 +a58905 = 58905 +a58906 = 58906 +a58907 = 58907 +a58908 = 58908 +a58909 = 58909 +a58910 = 58910 +a58911 = 58911 +a58912 = 58912 +a58913 = 58913 +a58914 = 58914 +a58915 = 58915 +a58916 = 58916 +a58917 = 58917 +a58918 = 58918 +a58919 = 58919 +a58920 = 58920 +a58921 = 58921 +a58922 = 58922 +a58923 = 58923 +a58924 = 58924 +a58925 = 58925 +a58926 = 58926 +a58927 = 58927 +a58928 = 58928 +a58929 = 58929 +a58930 = 58930 +a58931 = 58931 +a58932 = 58932 +a58933 = 58933 +a58934 = 58934 +a58935 = 58935 +a58936 = 58936 +a58937 = 58937 +a58938 = 58938 +a58939 = 58939 +a58940 = 58940 +a58941 = 58941 +a58942 = 58942 +a58943 = 58943 +a58944 = 58944 +a58945 = 58945 +a58946 = 58946 +a58947 = 58947 +a58948 = 58948 +a58949 = 58949 +a58950 = 58950 +a58951 = 58951 +a58952 = 58952 +a58953 = 58953 +a58954 = 58954 +a58955 = 58955 +a58956 = 58956 +a58957 = 58957 +a58958 = 58958 +a58959 = 58959 +a58960 = 58960 +a58961 = 58961 +a58962 = 58962 +a58963 = 58963 +a58964 = 58964 +a58965 = 58965 +a58966 = 58966 +a58967 = 58967 +a58968 = 58968 +a58969 = 58969 +a58970 = 58970 +a58971 = 58971 +a58972 = 58972 +a58973 = 58973 +a58974 = 58974 +a58975 = 58975 +a58976 = 58976 +a58977 = 58977 +a58978 = 58978 +a58979 = 58979 +a58980 = 58980 +a58981 = 58981 +a58982 = 58982 +a58983 = 58983 +a58984 = 58984 +a58985 = 58985 +a58986 = 58986 +a58987 = 58987 +a58988 = 58988 +a58989 = 58989 +a58990 = 58990 +a58991 = 58991 +a58992 = 58992 +a58993 = 58993 +a58994 = 58994 +a58995 = 58995 +a58996 = 58996 +a58997 = 58997 +a58998 = 58998 +a58999 = 58999 +a59000 = 59000 +a59001 = 59001 +a59002 = 59002 +a59003 = 59003 +a59004 = 59004 +a59005 = 59005 +a59006 = 59006 +a59007 = 59007 +a59008 = 59008 +a59009 = 59009 +a59010 = 59010 +a59011 = 59011 +a59012 = 59012 +a59013 = 59013 +a59014 = 59014 +a59015 = 59015 +a59016 = 59016 +a59017 = 59017 +a59018 = 59018 +a59019 = 59019 +a59020 = 59020 +a59021 = 59021 +a59022 = 59022 +a59023 = 59023 +a59024 = 59024 +a59025 = 59025 +a59026 = 59026 +a59027 = 59027 +a59028 = 59028 +a59029 = 59029 +a59030 = 59030 +a59031 = 59031 +a59032 = 59032 +a59033 = 59033 +a59034 = 59034 +a59035 = 59035 +a59036 = 59036 +a59037 = 59037 +a59038 = 59038 +a59039 = 59039 +a59040 = 59040 +a59041 = 59041 +a59042 = 59042 +a59043 = 59043 +a59044 = 59044 +a59045 = 59045 +a59046 = 59046 +a59047 = 59047 +a59048 = 59048 +a59049 = 59049 +a59050 = 59050 +a59051 = 59051 +a59052 = 59052 +a59053 = 59053 +a59054 = 59054 +a59055 = 59055 +a59056 = 59056 +a59057 = 59057 +a59058 = 59058 +a59059 = 59059 +a59060 = 59060 +a59061 = 59061 +a59062 = 59062 +a59063 = 59063 +a59064 = 59064 +a59065 = 59065 +a59066 = 59066 +a59067 = 59067 +a59068 = 59068 +a59069 = 59069 +a59070 = 59070 +a59071 = 59071 +a59072 = 59072 +a59073 = 59073 +a59074 = 59074 +a59075 = 59075 +a59076 = 59076 +a59077 = 59077 +a59078 = 59078 +a59079 = 59079 +a59080 = 59080 +a59081 = 59081 +a59082 = 59082 +a59083 = 59083 +a59084 = 59084 +a59085 = 59085 +a59086 = 59086 +a59087 = 59087 +a59088 = 59088 +a59089 = 59089 +a59090 = 59090 +a59091 = 59091 +a59092 = 59092 +a59093 = 59093 +a59094 = 59094 +a59095 = 59095 +a59096 = 59096 +a59097 = 59097 +a59098 = 59098 +a59099 = 59099 +a59100 = 59100 +a59101 = 59101 +a59102 = 59102 +a59103 = 59103 +a59104 = 59104 +a59105 = 59105 +a59106 = 59106 +a59107 = 59107 +a59108 = 59108 +a59109 = 59109 +a59110 = 59110 +a59111 = 59111 +a59112 = 59112 +a59113 = 59113 +a59114 = 59114 +a59115 = 59115 +a59116 = 59116 +a59117 = 59117 +a59118 = 59118 +a59119 = 59119 +a59120 = 59120 +a59121 = 59121 +a59122 = 59122 +a59123 = 59123 +a59124 = 59124 +a59125 = 59125 +a59126 = 59126 +a59127 = 59127 +a59128 = 59128 +a59129 = 59129 +a59130 = 59130 +a59131 = 59131 +a59132 = 59132 +a59133 = 59133 +a59134 = 59134 +a59135 = 59135 +a59136 = 59136 +a59137 = 59137 +a59138 = 59138 +a59139 = 59139 +a59140 = 59140 +a59141 = 59141 +a59142 = 59142 +a59143 = 59143 +a59144 = 59144 +a59145 = 59145 +a59146 = 59146 +a59147 = 59147 +a59148 = 59148 +a59149 = 59149 +a59150 = 59150 +a59151 = 59151 +a59152 = 59152 +a59153 = 59153 +a59154 = 59154 +a59155 = 59155 +a59156 = 59156 +a59157 = 59157 +a59158 = 59158 +a59159 = 59159 +a59160 = 59160 +a59161 = 59161 +a59162 = 59162 +a59163 = 59163 +a59164 = 59164 +a59165 = 59165 +a59166 = 59166 +a59167 = 59167 +a59168 = 59168 +a59169 = 59169 +a59170 = 59170 +a59171 = 59171 +a59172 = 59172 +a59173 = 59173 +a59174 = 59174 +a59175 = 59175 +a59176 = 59176 +a59177 = 59177 +a59178 = 59178 +a59179 = 59179 +a59180 = 59180 +a59181 = 59181 +a59182 = 59182 +a59183 = 59183 +a59184 = 59184 +a59185 = 59185 +a59186 = 59186 +a59187 = 59187 +a59188 = 59188 +a59189 = 59189 +a59190 = 59190 +a59191 = 59191 +a59192 = 59192 +a59193 = 59193 +a59194 = 59194 +a59195 = 59195 +a59196 = 59196 +a59197 = 59197 +a59198 = 59198 +a59199 = 59199 +a59200 = 59200 +a59201 = 59201 +a59202 = 59202 +a59203 = 59203 +a59204 = 59204 +a59205 = 59205 +a59206 = 59206 +a59207 = 59207 +a59208 = 59208 +a59209 = 59209 +a59210 = 59210 +a59211 = 59211 +a59212 = 59212 +a59213 = 59213 +a59214 = 59214 +a59215 = 59215 +a59216 = 59216 +a59217 = 59217 +a59218 = 59218 +a59219 = 59219 +a59220 = 59220 +a59221 = 59221 +a59222 = 59222 +a59223 = 59223 +a59224 = 59224 +a59225 = 59225 +a59226 = 59226 +a59227 = 59227 +a59228 = 59228 +a59229 = 59229 +a59230 = 59230 +a59231 = 59231 +a59232 = 59232 +a59233 = 59233 +a59234 = 59234 +a59235 = 59235 +a59236 = 59236 +a59237 = 59237 +a59238 = 59238 +a59239 = 59239 +a59240 = 59240 +a59241 = 59241 +a59242 = 59242 +a59243 = 59243 +a59244 = 59244 +a59245 = 59245 +a59246 = 59246 +a59247 = 59247 +a59248 = 59248 +a59249 = 59249 +a59250 = 59250 +a59251 = 59251 +a59252 = 59252 +a59253 = 59253 +a59254 = 59254 +a59255 = 59255 +a59256 = 59256 +a59257 = 59257 +a59258 = 59258 +a59259 = 59259 +a59260 = 59260 +a59261 = 59261 +a59262 = 59262 +a59263 = 59263 +a59264 = 59264 +a59265 = 59265 +a59266 = 59266 +a59267 = 59267 +a59268 = 59268 +a59269 = 59269 +a59270 = 59270 +a59271 = 59271 +a59272 = 59272 +a59273 = 59273 +a59274 = 59274 +a59275 = 59275 +a59276 = 59276 +a59277 = 59277 +a59278 = 59278 +a59279 = 59279 +a59280 = 59280 +a59281 = 59281 +a59282 = 59282 +a59283 = 59283 +a59284 = 59284 +a59285 = 59285 +a59286 = 59286 +a59287 = 59287 +a59288 = 59288 +a59289 = 59289 +a59290 = 59290 +a59291 = 59291 +a59292 = 59292 +a59293 = 59293 +a59294 = 59294 +a59295 = 59295 +a59296 = 59296 +a59297 = 59297 +a59298 = 59298 +a59299 = 59299 +a59300 = 59300 +a59301 = 59301 +a59302 = 59302 +a59303 = 59303 +a59304 = 59304 +a59305 = 59305 +a59306 = 59306 +a59307 = 59307 +a59308 = 59308 +a59309 = 59309 +a59310 = 59310 +a59311 = 59311 +a59312 = 59312 +a59313 = 59313 +a59314 = 59314 +a59315 = 59315 +a59316 = 59316 +a59317 = 59317 +a59318 = 59318 +a59319 = 59319 +a59320 = 59320 +a59321 = 59321 +a59322 = 59322 +a59323 = 59323 +a59324 = 59324 +a59325 = 59325 +a59326 = 59326 +a59327 = 59327 +a59328 = 59328 +a59329 = 59329 +a59330 = 59330 +a59331 = 59331 +a59332 = 59332 +a59333 = 59333 +a59334 = 59334 +a59335 = 59335 +a59336 = 59336 +a59337 = 59337 +a59338 = 59338 +a59339 = 59339 +a59340 = 59340 +a59341 = 59341 +a59342 = 59342 +a59343 = 59343 +a59344 = 59344 +a59345 = 59345 +a59346 = 59346 +a59347 = 59347 +a59348 = 59348 +a59349 = 59349 +a59350 = 59350 +a59351 = 59351 +a59352 = 59352 +a59353 = 59353 +a59354 = 59354 +a59355 = 59355 +a59356 = 59356 +a59357 = 59357 +a59358 = 59358 +a59359 = 59359 +a59360 = 59360 +a59361 = 59361 +a59362 = 59362 +a59363 = 59363 +a59364 = 59364 +a59365 = 59365 +a59366 = 59366 +a59367 = 59367 +a59368 = 59368 +a59369 = 59369 +a59370 = 59370 +a59371 = 59371 +a59372 = 59372 +a59373 = 59373 +a59374 = 59374 +a59375 = 59375 +a59376 = 59376 +a59377 = 59377 +a59378 = 59378 +a59379 = 59379 +a59380 = 59380 +a59381 = 59381 +a59382 = 59382 +a59383 = 59383 +a59384 = 59384 +a59385 = 59385 +a59386 = 59386 +a59387 = 59387 +a59388 = 59388 +a59389 = 59389 +a59390 = 59390 +a59391 = 59391 +a59392 = 59392 +a59393 = 59393 +a59394 = 59394 +a59395 = 59395 +a59396 = 59396 +a59397 = 59397 +a59398 = 59398 +a59399 = 59399 +a59400 = 59400 +a59401 = 59401 +a59402 = 59402 +a59403 = 59403 +a59404 = 59404 +a59405 = 59405 +a59406 = 59406 +a59407 = 59407 +a59408 = 59408 +a59409 = 59409 +a59410 = 59410 +a59411 = 59411 +a59412 = 59412 +a59413 = 59413 +a59414 = 59414 +a59415 = 59415 +a59416 = 59416 +a59417 = 59417 +a59418 = 59418 +a59419 = 59419 +a59420 = 59420 +a59421 = 59421 +a59422 = 59422 +a59423 = 59423 +a59424 = 59424 +a59425 = 59425 +a59426 = 59426 +a59427 = 59427 +a59428 = 59428 +a59429 = 59429 +a59430 = 59430 +a59431 = 59431 +a59432 = 59432 +a59433 = 59433 +a59434 = 59434 +a59435 = 59435 +a59436 = 59436 +a59437 = 59437 +a59438 = 59438 +a59439 = 59439 +a59440 = 59440 +a59441 = 59441 +a59442 = 59442 +a59443 = 59443 +a59444 = 59444 +a59445 = 59445 +a59446 = 59446 +a59447 = 59447 +a59448 = 59448 +a59449 = 59449 +a59450 = 59450 +a59451 = 59451 +a59452 = 59452 +a59453 = 59453 +a59454 = 59454 +a59455 = 59455 +a59456 = 59456 +a59457 = 59457 +a59458 = 59458 +a59459 = 59459 +a59460 = 59460 +a59461 = 59461 +a59462 = 59462 +a59463 = 59463 +a59464 = 59464 +a59465 = 59465 +a59466 = 59466 +a59467 = 59467 +a59468 = 59468 +a59469 = 59469 +a59470 = 59470 +a59471 = 59471 +a59472 = 59472 +a59473 = 59473 +a59474 = 59474 +a59475 = 59475 +a59476 = 59476 +a59477 = 59477 +a59478 = 59478 +a59479 = 59479 +a59480 = 59480 +a59481 = 59481 +a59482 = 59482 +a59483 = 59483 +a59484 = 59484 +a59485 = 59485 +a59486 = 59486 +a59487 = 59487 +a59488 = 59488 +a59489 = 59489 +a59490 = 59490 +a59491 = 59491 +a59492 = 59492 +a59493 = 59493 +a59494 = 59494 +a59495 = 59495 +a59496 = 59496 +a59497 = 59497 +a59498 = 59498 +a59499 = 59499 +a59500 = 59500 +a59501 = 59501 +a59502 = 59502 +a59503 = 59503 +a59504 = 59504 +a59505 = 59505 +a59506 = 59506 +a59507 = 59507 +a59508 = 59508 +a59509 = 59509 +a59510 = 59510 +a59511 = 59511 +a59512 = 59512 +a59513 = 59513 +a59514 = 59514 +a59515 = 59515 +a59516 = 59516 +a59517 = 59517 +a59518 = 59518 +a59519 = 59519 +a59520 = 59520 +a59521 = 59521 +a59522 = 59522 +a59523 = 59523 +a59524 = 59524 +a59525 = 59525 +a59526 = 59526 +a59527 = 59527 +a59528 = 59528 +a59529 = 59529 +a59530 = 59530 +a59531 = 59531 +a59532 = 59532 +a59533 = 59533 +a59534 = 59534 +a59535 = 59535 +a59536 = 59536 +a59537 = 59537 +a59538 = 59538 +a59539 = 59539 +a59540 = 59540 +a59541 = 59541 +a59542 = 59542 +a59543 = 59543 +a59544 = 59544 +a59545 = 59545 +a59546 = 59546 +a59547 = 59547 +a59548 = 59548 +a59549 = 59549 +a59550 = 59550 +a59551 = 59551 +a59552 = 59552 +a59553 = 59553 +a59554 = 59554 +a59555 = 59555 +a59556 = 59556 +a59557 = 59557 +a59558 = 59558 +a59559 = 59559 +a59560 = 59560 +a59561 = 59561 +a59562 = 59562 +a59563 = 59563 +a59564 = 59564 +a59565 = 59565 +a59566 = 59566 +a59567 = 59567 +a59568 = 59568 +a59569 = 59569 +a59570 = 59570 +a59571 = 59571 +a59572 = 59572 +a59573 = 59573 +a59574 = 59574 +a59575 = 59575 +a59576 = 59576 +a59577 = 59577 +a59578 = 59578 +a59579 = 59579 +a59580 = 59580 +a59581 = 59581 +a59582 = 59582 +a59583 = 59583 +a59584 = 59584 +a59585 = 59585 +a59586 = 59586 +a59587 = 59587 +a59588 = 59588 +a59589 = 59589 +a59590 = 59590 +a59591 = 59591 +a59592 = 59592 +a59593 = 59593 +a59594 = 59594 +a59595 = 59595 +a59596 = 59596 +a59597 = 59597 +a59598 = 59598 +a59599 = 59599 +a59600 = 59600 +a59601 = 59601 +a59602 = 59602 +a59603 = 59603 +a59604 = 59604 +a59605 = 59605 +a59606 = 59606 +a59607 = 59607 +a59608 = 59608 +a59609 = 59609 +a59610 = 59610 +a59611 = 59611 +a59612 = 59612 +a59613 = 59613 +a59614 = 59614 +a59615 = 59615 +a59616 = 59616 +a59617 = 59617 +a59618 = 59618 +a59619 = 59619 +a59620 = 59620 +a59621 = 59621 +a59622 = 59622 +a59623 = 59623 +a59624 = 59624 +a59625 = 59625 +a59626 = 59626 +a59627 = 59627 +a59628 = 59628 +a59629 = 59629 +a59630 = 59630 +a59631 = 59631 +a59632 = 59632 +a59633 = 59633 +a59634 = 59634 +a59635 = 59635 +a59636 = 59636 +a59637 = 59637 +a59638 = 59638 +a59639 = 59639 +a59640 = 59640 +a59641 = 59641 +a59642 = 59642 +a59643 = 59643 +a59644 = 59644 +a59645 = 59645 +a59646 = 59646 +a59647 = 59647 +a59648 = 59648 +a59649 = 59649 +a59650 = 59650 +a59651 = 59651 +a59652 = 59652 +a59653 = 59653 +a59654 = 59654 +a59655 = 59655 +a59656 = 59656 +a59657 = 59657 +a59658 = 59658 +a59659 = 59659 +a59660 = 59660 +a59661 = 59661 +a59662 = 59662 +a59663 = 59663 +a59664 = 59664 +a59665 = 59665 +a59666 = 59666 +a59667 = 59667 +a59668 = 59668 +a59669 = 59669 +a59670 = 59670 +a59671 = 59671 +a59672 = 59672 +a59673 = 59673 +a59674 = 59674 +a59675 = 59675 +a59676 = 59676 +a59677 = 59677 +a59678 = 59678 +a59679 = 59679 +a59680 = 59680 +a59681 = 59681 +a59682 = 59682 +a59683 = 59683 +a59684 = 59684 +a59685 = 59685 +a59686 = 59686 +a59687 = 59687 +a59688 = 59688 +a59689 = 59689 +a59690 = 59690 +a59691 = 59691 +a59692 = 59692 +a59693 = 59693 +a59694 = 59694 +a59695 = 59695 +a59696 = 59696 +a59697 = 59697 +a59698 = 59698 +a59699 = 59699 +a59700 = 59700 +a59701 = 59701 +a59702 = 59702 +a59703 = 59703 +a59704 = 59704 +a59705 = 59705 +a59706 = 59706 +a59707 = 59707 +a59708 = 59708 +a59709 = 59709 +a59710 = 59710 +a59711 = 59711 +a59712 = 59712 +a59713 = 59713 +a59714 = 59714 +a59715 = 59715 +a59716 = 59716 +a59717 = 59717 +a59718 = 59718 +a59719 = 59719 +a59720 = 59720 +a59721 = 59721 +a59722 = 59722 +a59723 = 59723 +a59724 = 59724 +a59725 = 59725 +a59726 = 59726 +a59727 = 59727 +a59728 = 59728 +a59729 = 59729 +a59730 = 59730 +a59731 = 59731 +a59732 = 59732 +a59733 = 59733 +a59734 = 59734 +a59735 = 59735 +a59736 = 59736 +a59737 = 59737 +a59738 = 59738 +a59739 = 59739 +a59740 = 59740 +a59741 = 59741 +a59742 = 59742 +a59743 = 59743 +a59744 = 59744 +a59745 = 59745 +a59746 = 59746 +a59747 = 59747 +a59748 = 59748 +a59749 = 59749 +a59750 = 59750 +a59751 = 59751 +a59752 = 59752 +a59753 = 59753 +a59754 = 59754 +a59755 = 59755 +a59756 = 59756 +a59757 = 59757 +a59758 = 59758 +a59759 = 59759 +a59760 = 59760 +a59761 = 59761 +a59762 = 59762 +a59763 = 59763 +a59764 = 59764 +a59765 = 59765 +a59766 = 59766 +a59767 = 59767 +a59768 = 59768 +a59769 = 59769 +a59770 = 59770 +a59771 = 59771 +a59772 = 59772 +a59773 = 59773 +a59774 = 59774 +a59775 = 59775 +a59776 = 59776 +a59777 = 59777 +a59778 = 59778 +a59779 = 59779 +a59780 = 59780 +a59781 = 59781 +a59782 = 59782 +a59783 = 59783 +a59784 = 59784 +a59785 = 59785 +a59786 = 59786 +a59787 = 59787 +a59788 = 59788 +a59789 = 59789 +a59790 = 59790 +a59791 = 59791 +a59792 = 59792 +a59793 = 59793 +a59794 = 59794 +a59795 = 59795 +a59796 = 59796 +a59797 = 59797 +a59798 = 59798 +a59799 = 59799 +a59800 = 59800 +a59801 = 59801 +a59802 = 59802 +a59803 = 59803 +a59804 = 59804 +a59805 = 59805 +a59806 = 59806 +a59807 = 59807 +a59808 = 59808 +a59809 = 59809 +a59810 = 59810 +a59811 = 59811 +a59812 = 59812 +a59813 = 59813 +a59814 = 59814 +a59815 = 59815 +a59816 = 59816 +a59817 = 59817 +a59818 = 59818 +a59819 = 59819 +a59820 = 59820 +a59821 = 59821 +a59822 = 59822 +a59823 = 59823 +a59824 = 59824 +a59825 = 59825 +a59826 = 59826 +a59827 = 59827 +a59828 = 59828 +a59829 = 59829 +a59830 = 59830 +a59831 = 59831 +a59832 = 59832 +a59833 = 59833 +a59834 = 59834 +a59835 = 59835 +a59836 = 59836 +a59837 = 59837 +a59838 = 59838 +a59839 = 59839 +a59840 = 59840 +a59841 = 59841 +a59842 = 59842 +a59843 = 59843 +a59844 = 59844 +a59845 = 59845 +a59846 = 59846 +a59847 = 59847 +a59848 = 59848 +a59849 = 59849 +a59850 = 59850 +a59851 = 59851 +a59852 = 59852 +a59853 = 59853 +a59854 = 59854 +a59855 = 59855 +a59856 = 59856 +a59857 = 59857 +a59858 = 59858 +a59859 = 59859 +a59860 = 59860 +a59861 = 59861 +a59862 = 59862 +a59863 = 59863 +a59864 = 59864 +a59865 = 59865 +a59866 = 59866 +a59867 = 59867 +a59868 = 59868 +a59869 = 59869 +a59870 = 59870 +a59871 = 59871 +a59872 = 59872 +a59873 = 59873 +a59874 = 59874 +a59875 = 59875 +a59876 = 59876 +a59877 = 59877 +a59878 = 59878 +a59879 = 59879 +a59880 = 59880 +a59881 = 59881 +a59882 = 59882 +a59883 = 59883 +a59884 = 59884 +a59885 = 59885 +a59886 = 59886 +a59887 = 59887 +a59888 = 59888 +a59889 = 59889 +a59890 = 59890 +a59891 = 59891 +a59892 = 59892 +a59893 = 59893 +a59894 = 59894 +a59895 = 59895 +a59896 = 59896 +a59897 = 59897 +a59898 = 59898 +a59899 = 59899 +a59900 = 59900 +a59901 = 59901 +a59902 = 59902 +a59903 = 59903 +a59904 = 59904 +a59905 = 59905 +a59906 = 59906 +a59907 = 59907 +a59908 = 59908 +a59909 = 59909 +a59910 = 59910 +a59911 = 59911 +a59912 = 59912 +a59913 = 59913 +a59914 = 59914 +a59915 = 59915 +a59916 = 59916 +a59917 = 59917 +a59918 = 59918 +a59919 = 59919 +a59920 = 59920 +a59921 = 59921 +a59922 = 59922 +a59923 = 59923 +a59924 = 59924 +a59925 = 59925 +a59926 = 59926 +a59927 = 59927 +a59928 = 59928 +a59929 = 59929 +a59930 = 59930 +a59931 = 59931 +a59932 = 59932 +a59933 = 59933 +a59934 = 59934 +a59935 = 59935 +a59936 = 59936 +a59937 = 59937 +a59938 = 59938 +a59939 = 59939 +a59940 = 59940 +a59941 = 59941 +a59942 = 59942 +a59943 = 59943 +a59944 = 59944 +a59945 = 59945 +a59946 = 59946 +a59947 = 59947 +a59948 = 59948 +a59949 = 59949 +a59950 = 59950 +a59951 = 59951 +a59952 = 59952 +a59953 = 59953 +a59954 = 59954 +a59955 = 59955 +a59956 = 59956 +a59957 = 59957 +a59958 = 59958 +a59959 = 59959 +a59960 = 59960 +a59961 = 59961 +a59962 = 59962 +a59963 = 59963 +a59964 = 59964 +a59965 = 59965 +a59966 = 59966 +a59967 = 59967 +a59968 = 59968 +a59969 = 59969 +a59970 = 59970 +a59971 = 59971 +a59972 = 59972 +a59973 = 59973 +a59974 = 59974 +a59975 = 59975 +a59976 = 59976 +a59977 = 59977 +a59978 = 59978 +a59979 = 59979 +a59980 = 59980 +a59981 = 59981 +a59982 = 59982 +a59983 = 59983 +a59984 = 59984 +a59985 = 59985 +a59986 = 59986 +a59987 = 59987 +a59988 = 59988 +a59989 = 59989 +a59990 = 59990 +a59991 = 59991 +a59992 = 59992 +a59993 = 59993 +a59994 = 59994 +a59995 = 59995 +a59996 = 59996 +a59997 = 59997 +a59998 = 59998 +a59999 = 59999 +a60000 = 60000 +a60001 = 60001 +a60002 = 60002 +a60003 = 60003 +a60004 = 60004 +a60005 = 60005 +a60006 = 60006 +a60007 = 60007 +a60008 = 60008 +a60009 = 60009 +a60010 = 60010 +a60011 = 60011 +a60012 = 60012 +a60013 = 60013 +a60014 = 60014 +a60015 = 60015 +a60016 = 60016 +a60017 = 60017 +a60018 = 60018 +a60019 = 60019 +a60020 = 60020 +a60021 = 60021 +a60022 = 60022 +a60023 = 60023 +a60024 = 60024 +a60025 = 60025 +a60026 = 60026 +a60027 = 60027 +a60028 = 60028 +a60029 = 60029 +a60030 = 60030 +a60031 = 60031 +a60032 = 60032 +a60033 = 60033 +a60034 = 60034 +a60035 = 60035 +a60036 = 60036 +a60037 = 60037 +a60038 = 60038 +a60039 = 60039 +a60040 = 60040 +a60041 = 60041 +a60042 = 60042 +a60043 = 60043 +a60044 = 60044 +a60045 = 60045 +a60046 = 60046 +a60047 = 60047 +a60048 = 60048 +a60049 = 60049 +a60050 = 60050 +a60051 = 60051 +a60052 = 60052 +a60053 = 60053 +a60054 = 60054 +a60055 = 60055 +a60056 = 60056 +a60057 = 60057 +a60058 = 60058 +a60059 = 60059 +a60060 = 60060 +a60061 = 60061 +a60062 = 60062 +a60063 = 60063 +a60064 = 60064 +a60065 = 60065 +a60066 = 60066 +a60067 = 60067 +a60068 = 60068 +a60069 = 60069 +a60070 = 60070 +a60071 = 60071 +a60072 = 60072 +a60073 = 60073 +a60074 = 60074 +a60075 = 60075 +a60076 = 60076 +a60077 = 60077 +a60078 = 60078 +a60079 = 60079 +a60080 = 60080 +a60081 = 60081 +a60082 = 60082 +a60083 = 60083 +a60084 = 60084 +a60085 = 60085 +a60086 = 60086 +a60087 = 60087 +a60088 = 60088 +a60089 = 60089 +a60090 = 60090 +a60091 = 60091 +a60092 = 60092 +a60093 = 60093 +a60094 = 60094 +a60095 = 60095 +a60096 = 60096 +a60097 = 60097 +a60098 = 60098 +a60099 = 60099 +a60100 = 60100 +a60101 = 60101 +a60102 = 60102 +a60103 = 60103 +a60104 = 60104 +a60105 = 60105 +a60106 = 60106 +a60107 = 60107 +a60108 = 60108 +a60109 = 60109 +a60110 = 60110 +a60111 = 60111 +a60112 = 60112 +a60113 = 60113 +a60114 = 60114 +a60115 = 60115 +a60116 = 60116 +a60117 = 60117 +a60118 = 60118 +a60119 = 60119 +a60120 = 60120 +a60121 = 60121 +a60122 = 60122 +a60123 = 60123 +a60124 = 60124 +a60125 = 60125 +a60126 = 60126 +a60127 = 60127 +a60128 = 60128 +a60129 = 60129 +a60130 = 60130 +a60131 = 60131 +a60132 = 60132 +a60133 = 60133 +a60134 = 60134 +a60135 = 60135 +a60136 = 60136 +a60137 = 60137 +a60138 = 60138 +a60139 = 60139 +a60140 = 60140 +a60141 = 60141 +a60142 = 60142 +a60143 = 60143 +a60144 = 60144 +a60145 = 60145 +a60146 = 60146 +a60147 = 60147 +a60148 = 60148 +a60149 = 60149 +a60150 = 60150 +a60151 = 60151 +a60152 = 60152 +a60153 = 60153 +a60154 = 60154 +a60155 = 60155 +a60156 = 60156 +a60157 = 60157 +a60158 = 60158 +a60159 = 60159 +a60160 = 60160 +a60161 = 60161 +a60162 = 60162 +a60163 = 60163 +a60164 = 60164 +a60165 = 60165 +a60166 = 60166 +a60167 = 60167 +a60168 = 60168 +a60169 = 60169 +a60170 = 60170 +a60171 = 60171 +a60172 = 60172 +a60173 = 60173 +a60174 = 60174 +a60175 = 60175 +a60176 = 60176 +a60177 = 60177 +a60178 = 60178 +a60179 = 60179 +a60180 = 60180 +a60181 = 60181 +a60182 = 60182 +a60183 = 60183 +a60184 = 60184 +a60185 = 60185 +a60186 = 60186 +a60187 = 60187 +a60188 = 60188 +a60189 = 60189 +a60190 = 60190 +a60191 = 60191 +a60192 = 60192 +a60193 = 60193 +a60194 = 60194 +a60195 = 60195 +a60196 = 60196 +a60197 = 60197 +a60198 = 60198 +a60199 = 60199 +a60200 = 60200 +a60201 = 60201 +a60202 = 60202 +a60203 = 60203 +a60204 = 60204 +a60205 = 60205 +a60206 = 60206 +a60207 = 60207 +a60208 = 60208 +a60209 = 60209 +a60210 = 60210 +a60211 = 60211 +a60212 = 60212 +a60213 = 60213 +a60214 = 60214 +a60215 = 60215 +a60216 = 60216 +a60217 = 60217 +a60218 = 60218 +a60219 = 60219 +a60220 = 60220 +a60221 = 60221 +a60222 = 60222 +a60223 = 60223 +a60224 = 60224 +a60225 = 60225 +a60226 = 60226 +a60227 = 60227 +a60228 = 60228 +a60229 = 60229 +a60230 = 60230 +a60231 = 60231 +a60232 = 60232 +a60233 = 60233 +a60234 = 60234 +a60235 = 60235 +a60236 = 60236 +a60237 = 60237 +a60238 = 60238 +a60239 = 60239 +a60240 = 60240 +a60241 = 60241 +a60242 = 60242 +a60243 = 60243 +a60244 = 60244 +a60245 = 60245 +a60246 = 60246 +a60247 = 60247 +a60248 = 60248 +a60249 = 60249 +a60250 = 60250 +a60251 = 60251 +a60252 = 60252 +a60253 = 60253 +a60254 = 60254 +a60255 = 60255 +a60256 = 60256 +a60257 = 60257 +a60258 = 60258 +a60259 = 60259 +a60260 = 60260 +a60261 = 60261 +a60262 = 60262 +a60263 = 60263 +a60264 = 60264 +a60265 = 60265 +a60266 = 60266 +a60267 = 60267 +a60268 = 60268 +a60269 = 60269 +a60270 = 60270 +a60271 = 60271 +a60272 = 60272 +a60273 = 60273 +a60274 = 60274 +a60275 = 60275 +a60276 = 60276 +a60277 = 60277 +a60278 = 60278 +a60279 = 60279 +a60280 = 60280 +a60281 = 60281 +a60282 = 60282 +a60283 = 60283 +a60284 = 60284 +a60285 = 60285 +a60286 = 60286 +a60287 = 60287 +a60288 = 60288 +a60289 = 60289 +a60290 = 60290 +a60291 = 60291 +a60292 = 60292 +a60293 = 60293 +a60294 = 60294 +a60295 = 60295 +a60296 = 60296 +a60297 = 60297 +a60298 = 60298 +a60299 = 60299 +a60300 = 60300 +a60301 = 60301 +a60302 = 60302 +a60303 = 60303 +a60304 = 60304 +a60305 = 60305 +a60306 = 60306 +a60307 = 60307 +a60308 = 60308 +a60309 = 60309 +a60310 = 60310 +a60311 = 60311 +a60312 = 60312 +a60313 = 60313 +a60314 = 60314 +a60315 = 60315 +a60316 = 60316 +a60317 = 60317 +a60318 = 60318 +a60319 = 60319 +a60320 = 60320 +a60321 = 60321 +a60322 = 60322 +a60323 = 60323 +a60324 = 60324 +a60325 = 60325 +a60326 = 60326 +a60327 = 60327 +a60328 = 60328 +a60329 = 60329 +a60330 = 60330 +a60331 = 60331 +a60332 = 60332 +a60333 = 60333 +a60334 = 60334 +a60335 = 60335 +a60336 = 60336 +a60337 = 60337 +a60338 = 60338 +a60339 = 60339 +a60340 = 60340 +a60341 = 60341 +a60342 = 60342 +a60343 = 60343 +a60344 = 60344 +a60345 = 60345 +a60346 = 60346 +a60347 = 60347 +a60348 = 60348 +a60349 = 60349 +a60350 = 60350 +a60351 = 60351 +a60352 = 60352 +a60353 = 60353 +a60354 = 60354 +a60355 = 60355 +a60356 = 60356 +a60357 = 60357 +a60358 = 60358 +a60359 = 60359 +a60360 = 60360 +a60361 = 60361 +a60362 = 60362 +a60363 = 60363 +a60364 = 60364 +a60365 = 60365 +a60366 = 60366 +a60367 = 60367 +a60368 = 60368 +a60369 = 60369 +a60370 = 60370 +a60371 = 60371 +a60372 = 60372 +a60373 = 60373 +a60374 = 60374 +a60375 = 60375 +a60376 = 60376 +a60377 = 60377 +a60378 = 60378 +a60379 = 60379 +a60380 = 60380 +a60381 = 60381 +a60382 = 60382 +a60383 = 60383 +a60384 = 60384 +a60385 = 60385 +a60386 = 60386 +a60387 = 60387 +a60388 = 60388 +a60389 = 60389 +a60390 = 60390 +a60391 = 60391 +a60392 = 60392 +a60393 = 60393 +a60394 = 60394 +a60395 = 60395 +a60396 = 60396 +a60397 = 60397 +a60398 = 60398 +a60399 = 60399 +a60400 = 60400 +a60401 = 60401 +a60402 = 60402 +a60403 = 60403 +a60404 = 60404 +a60405 = 60405 +a60406 = 60406 +a60407 = 60407 +a60408 = 60408 +a60409 = 60409 +a60410 = 60410 +a60411 = 60411 +a60412 = 60412 +a60413 = 60413 +a60414 = 60414 +a60415 = 60415 +a60416 = 60416 +a60417 = 60417 +a60418 = 60418 +a60419 = 60419 +a60420 = 60420 +a60421 = 60421 +a60422 = 60422 +a60423 = 60423 +a60424 = 60424 +a60425 = 60425 +a60426 = 60426 +a60427 = 60427 +a60428 = 60428 +a60429 = 60429 +a60430 = 60430 +a60431 = 60431 +a60432 = 60432 +a60433 = 60433 +a60434 = 60434 +a60435 = 60435 +a60436 = 60436 +a60437 = 60437 +a60438 = 60438 +a60439 = 60439 +a60440 = 60440 +a60441 = 60441 +a60442 = 60442 +a60443 = 60443 +a60444 = 60444 +a60445 = 60445 +a60446 = 60446 +a60447 = 60447 +a60448 = 60448 +a60449 = 60449 +a60450 = 60450 +a60451 = 60451 +a60452 = 60452 +a60453 = 60453 +a60454 = 60454 +a60455 = 60455 +a60456 = 60456 +a60457 = 60457 +a60458 = 60458 +a60459 = 60459 +a60460 = 60460 +a60461 = 60461 +a60462 = 60462 +a60463 = 60463 +a60464 = 60464 +a60465 = 60465 +a60466 = 60466 +a60467 = 60467 +a60468 = 60468 +a60469 = 60469 +a60470 = 60470 +a60471 = 60471 +a60472 = 60472 +a60473 = 60473 +a60474 = 60474 +a60475 = 60475 +a60476 = 60476 +a60477 = 60477 +a60478 = 60478 +a60479 = 60479 +a60480 = 60480 +a60481 = 60481 +a60482 = 60482 +a60483 = 60483 +a60484 = 60484 +a60485 = 60485 +a60486 = 60486 +a60487 = 60487 +a60488 = 60488 +a60489 = 60489 +a60490 = 60490 +a60491 = 60491 +a60492 = 60492 +a60493 = 60493 +a60494 = 60494 +a60495 = 60495 +a60496 = 60496 +a60497 = 60497 +a60498 = 60498 +a60499 = 60499 +a60500 = 60500 +a60501 = 60501 +a60502 = 60502 +a60503 = 60503 +a60504 = 60504 +a60505 = 60505 +a60506 = 60506 +a60507 = 60507 +a60508 = 60508 +a60509 = 60509 +a60510 = 60510 +a60511 = 60511 +a60512 = 60512 +a60513 = 60513 +a60514 = 60514 +a60515 = 60515 +a60516 = 60516 +a60517 = 60517 +a60518 = 60518 +a60519 = 60519 +a60520 = 60520 +a60521 = 60521 +a60522 = 60522 +a60523 = 60523 +a60524 = 60524 +a60525 = 60525 +a60526 = 60526 +a60527 = 60527 +a60528 = 60528 +a60529 = 60529 +a60530 = 60530 +a60531 = 60531 +a60532 = 60532 +a60533 = 60533 +a60534 = 60534 +a60535 = 60535 +a60536 = 60536 +a60537 = 60537 +a60538 = 60538 +a60539 = 60539 +a60540 = 60540 +a60541 = 60541 +a60542 = 60542 +a60543 = 60543 +a60544 = 60544 +a60545 = 60545 +a60546 = 60546 +a60547 = 60547 +a60548 = 60548 +a60549 = 60549 +a60550 = 60550 +a60551 = 60551 +a60552 = 60552 +a60553 = 60553 +a60554 = 60554 +a60555 = 60555 +a60556 = 60556 +a60557 = 60557 +a60558 = 60558 +a60559 = 60559 +a60560 = 60560 +a60561 = 60561 +a60562 = 60562 +a60563 = 60563 +a60564 = 60564 +a60565 = 60565 +a60566 = 60566 +a60567 = 60567 +a60568 = 60568 +a60569 = 60569 +a60570 = 60570 +a60571 = 60571 +a60572 = 60572 +a60573 = 60573 +a60574 = 60574 +a60575 = 60575 +a60576 = 60576 +a60577 = 60577 +a60578 = 60578 +a60579 = 60579 +a60580 = 60580 +a60581 = 60581 +a60582 = 60582 +a60583 = 60583 +a60584 = 60584 +a60585 = 60585 +a60586 = 60586 +a60587 = 60587 +a60588 = 60588 +a60589 = 60589 +a60590 = 60590 +a60591 = 60591 +a60592 = 60592 +a60593 = 60593 +a60594 = 60594 +a60595 = 60595 +a60596 = 60596 +a60597 = 60597 +a60598 = 60598 +a60599 = 60599 +a60600 = 60600 +a60601 = 60601 +a60602 = 60602 +a60603 = 60603 +a60604 = 60604 +a60605 = 60605 +a60606 = 60606 +a60607 = 60607 +a60608 = 60608 +a60609 = 60609 +a60610 = 60610 +a60611 = 60611 +a60612 = 60612 +a60613 = 60613 +a60614 = 60614 +a60615 = 60615 +a60616 = 60616 +a60617 = 60617 +a60618 = 60618 +a60619 = 60619 +a60620 = 60620 +a60621 = 60621 +a60622 = 60622 +a60623 = 60623 +a60624 = 60624 +a60625 = 60625 +a60626 = 60626 +a60627 = 60627 +a60628 = 60628 +a60629 = 60629 +a60630 = 60630 +a60631 = 60631 +a60632 = 60632 +a60633 = 60633 +a60634 = 60634 +a60635 = 60635 +a60636 = 60636 +a60637 = 60637 +a60638 = 60638 +a60639 = 60639 +a60640 = 60640 +a60641 = 60641 +a60642 = 60642 +a60643 = 60643 +a60644 = 60644 +a60645 = 60645 +a60646 = 60646 +a60647 = 60647 +a60648 = 60648 +a60649 = 60649 +a60650 = 60650 +a60651 = 60651 +a60652 = 60652 +a60653 = 60653 +a60654 = 60654 +a60655 = 60655 +a60656 = 60656 +a60657 = 60657 +a60658 = 60658 +a60659 = 60659 +a60660 = 60660 +a60661 = 60661 +a60662 = 60662 +a60663 = 60663 +a60664 = 60664 +a60665 = 60665 +a60666 = 60666 +a60667 = 60667 +a60668 = 60668 +a60669 = 60669 +a60670 = 60670 +a60671 = 60671 +a60672 = 60672 +a60673 = 60673 +a60674 = 60674 +a60675 = 60675 +a60676 = 60676 +a60677 = 60677 +a60678 = 60678 +a60679 = 60679 +a60680 = 60680 +a60681 = 60681 +a60682 = 60682 +a60683 = 60683 +a60684 = 60684 +a60685 = 60685 +a60686 = 60686 +a60687 = 60687 +a60688 = 60688 +a60689 = 60689 +a60690 = 60690 +a60691 = 60691 +a60692 = 60692 +a60693 = 60693 +a60694 = 60694 +a60695 = 60695 +a60696 = 60696 +a60697 = 60697 +a60698 = 60698 +a60699 = 60699 +a60700 = 60700 +a60701 = 60701 +a60702 = 60702 +a60703 = 60703 +a60704 = 60704 +a60705 = 60705 +a60706 = 60706 +a60707 = 60707 +a60708 = 60708 +a60709 = 60709 +a60710 = 60710 +a60711 = 60711 +a60712 = 60712 +a60713 = 60713 +a60714 = 60714 +a60715 = 60715 +a60716 = 60716 +a60717 = 60717 +a60718 = 60718 +a60719 = 60719 +a60720 = 60720 +a60721 = 60721 +a60722 = 60722 +a60723 = 60723 +a60724 = 60724 +a60725 = 60725 +a60726 = 60726 +a60727 = 60727 +a60728 = 60728 +a60729 = 60729 +a60730 = 60730 +a60731 = 60731 +a60732 = 60732 +a60733 = 60733 +a60734 = 60734 +a60735 = 60735 +a60736 = 60736 +a60737 = 60737 +a60738 = 60738 +a60739 = 60739 +a60740 = 60740 +a60741 = 60741 +a60742 = 60742 +a60743 = 60743 +a60744 = 60744 +a60745 = 60745 +a60746 = 60746 +a60747 = 60747 +a60748 = 60748 +a60749 = 60749 +a60750 = 60750 +a60751 = 60751 +a60752 = 60752 +a60753 = 60753 +a60754 = 60754 +a60755 = 60755 +a60756 = 60756 +a60757 = 60757 +a60758 = 60758 +a60759 = 60759 +a60760 = 60760 +a60761 = 60761 +a60762 = 60762 +a60763 = 60763 +a60764 = 60764 +a60765 = 60765 +a60766 = 60766 +a60767 = 60767 +a60768 = 60768 +a60769 = 60769 +a60770 = 60770 +a60771 = 60771 +a60772 = 60772 +a60773 = 60773 +a60774 = 60774 +a60775 = 60775 +a60776 = 60776 +a60777 = 60777 +a60778 = 60778 +a60779 = 60779 +a60780 = 60780 +a60781 = 60781 +a60782 = 60782 +a60783 = 60783 +a60784 = 60784 +a60785 = 60785 +a60786 = 60786 +a60787 = 60787 +a60788 = 60788 +a60789 = 60789 +a60790 = 60790 +a60791 = 60791 +a60792 = 60792 +a60793 = 60793 +a60794 = 60794 +a60795 = 60795 +a60796 = 60796 +a60797 = 60797 +a60798 = 60798 +a60799 = 60799 +a60800 = 60800 +a60801 = 60801 +a60802 = 60802 +a60803 = 60803 +a60804 = 60804 +a60805 = 60805 +a60806 = 60806 +a60807 = 60807 +a60808 = 60808 +a60809 = 60809 +a60810 = 60810 +a60811 = 60811 +a60812 = 60812 +a60813 = 60813 +a60814 = 60814 +a60815 = 60815 +a60816 = 60816 +a60817 = 60817 +a60818 = 60818 +a60819 = 60819 +a60820 = 60820 +a60821 = 60821 +a60822 = 60822 +a60823 = 60823 +a60824 = 60824 +a60825 = 60825 +a60826 = 60826 +a60827 = 60827 +a60828 = 60828 +a60829 = 60829 +a60830 = 60830 +a60831 = 60831 +a60832 = 60832 +a60833 = 60833 +a60834 = 60834 +a60835 = 60835 +a60836 = 60836 +a60837 = 60837 +a60838 = 60838 +a60839 = 60839 +a60840 = 60840 +a60841 = 60841 +a60842 = 60842 +a60843 = 60843 +a60844 = 60844 +a60845 = 60845 +a60846 = 60846 +a60847 = 60847 +a60848 = 60848 +a60849 = 60849 +a60850 = 60850 +a60851 = 60851 +a60852 = 60852 +a60853 = 60853 +a60854 = 60854 +a60855 = 60855 +a60856 = 60856 +a60857 = 60857 +a60858 = 60858 +a60859 = 60859 +a60860 = 60860 +a60861 = 60861 +a60862 = 60862 +a60863 = 60863 +a60864 = 60864 +a60865 = 60865 +a60866 = 60866 +a60867 = 60867 +a60868 = 60868 +a60869 = 60869 +a60870 = 60870 +a60871 = 60871 +a60872 = 60872 +a60873 = 60873 +a60874 = 60874 +a60875 = 60875 +a60876 = 60876 +a60877 = 60877 +a60878 = 60878 +a60879 = 60879 +a60880 = 60880 +a60881 = 60881 +a60882 = 60882 +a60883 = 60883 +a60884 = 60884 +a60885 = 60885 +a60886 = 60886 +a60887 = 60887 +a60888 = 60888 +a60889 = 60889 +a60890 = 60890 +a60891 = 60891 +a60892 = 60892 +a60893 = 60893 +a60894 = 60894 +a60895 = 60895 +a60896 = 60896 +a60897 = 60897 +a60898 = 60898 +a60899 = 60899 +a60900 = 60900 +a60901 = 60901 +a60902 = 60902 +a60903 = 60903 +a60904 = 60904 +a60905 = 60905 +a60906 = 60906 +a60907 = 60907 +a60908 = 60908 +a60909 = 60909 +a60910 = 60910 +a60911 = 60911 +a60912 = 60912 +a60913 = 60913 +a60914 = 60914 +a60915 = 60915 +a60916 = 60916 +a60917 = 60917 +a60918 = 60918 +a60919 = 60919 +a60920 = 60920 +a60921 = 60921 +a60922 = 60922 +a60923 = 60923 +a60924 = 60924 +a60925 = 60925 +a60926 = 60926 +a60927 = 60927 +a60928 = 60928 +a60929 = 60929 +a60930 = 60930 +a60931 = 60931 +a60932 = 60932 +a60933 = 60933 +a60934 = 60934 +a60935 = 60935 +a60936 = 60936 +a60937 = 60937 +a60938 = 60938 +a60939 = 60939 +a60940 = 60940 +a60941 = 60941 +a60942 = 60942 +a60943 = 60943 +a60944 = 60944 +a60945 = 60945 +a60946 = 60946 +a60947 = 60947 +a60948 = 60948 +a60949 = 60949 +a60950 = 60950 +a60951 = 60951 +a60952 = 60952 +a60953 = 60953 +a60954 = 60954 +a60955 = 60955 +a60956 = 60956 +a60957 = 60957 +a60958 = 60958 +a60959 = 60959 +a60960 = 60960 +a60961 = 60961 +a60962 = 60962 +a60963 = 60963 +a60964 = 60964 +a60965 = 60965 +a60966 = 60966 +a60967 = 60967 +a60968 = 60968 +a60969 = 60969 +a60970 = 60970 +a60971 = 60971 +a60972 = 60972 +a60973 = 60973 +a60974 = 60974 +a60975 = 60975 +a60976 = 60976 +a60977 = 60977 +a60978 = 60978 +a60979 = 60979 +a60980 = 60980 +a60981 = 60981 +a60982 = 60982 +a60983 = 60983 +a60984 = 60984 +a60985 = 60985 +a60986 = 60986 +a60987 = 60987 +a60988 = 60988 +a60989 = 60989 +a60990 = 60990 +a60991 = 60991 +a60992 = 60992 +a60993 = 60993 +a60994 = 60994 +a60995 = 60995 +a60996 = 60996 +a60997 = 60997 +a60998 = 60998 +a60999 = 60999 +a61000 = 61000 +a61001 = 61001 +a61002 = 61002 +a61003 = 61003 +a61004 = 61004 +a61005 = 61005 +a61006 = 61006 +a61007 = 61007 +a61008 = 61008 +a61009 = 61009 +a61010 = 61010 +a61011 = 61011 +a61012 = 61012 +a61013 = 61013 +a61014 = 61014 +a61015 = 61015 +a61016 = 61016 +a61017 = 61017 +a61018 = 61018 +a61019 = 61019 +a61020 = 61020 +a61021 = 61021 +a61022 = 61022 +a61023 = 61023 +a61024 = 61024 +a61025 = 61025 +a61026 = 61026 +a61027 = 61027 +a61028 = 61028 +a61029 = 61029 +a61030 = 61030 +a61031 = 61031 +a61032 = 61032 +a61033 = 61033 +a61034 = 61034 +a61035 = 61035 +a61036 = 61036 +a61037 = 61037 +a61038 = 61038 +a61039 = 61039 +a61040 = 61040 +a61041 = 61041 +a61042 = 61042 +a61043 = 61043 +a61044 = 61044 +a61045 = 61045 +a61046 = 61046 +a61047 = 61047 +a61048 = 61048 +a61049 = 61049 +a61050 = 61050 +a61051 = 61051 +a61052 = 61052 +a61053 = 61053 +a61054 = 61054 +a61055 = 61055 +a61056 = 61056 +a61057 = 61057 +a61058 = 61058 +a61059 = 61059 +a61060 = 61060 +a61061 = 61061 +a61062 = 61062 +a61063 = 61063 +a61064 = 61064 +a61065 = 61065 +a61066 = 61066 +a61067 = 61067 +a61068 = 61068 +a61069 = 61069 +a61070 = 61070 +a61071 = 61071 +a61072 = 61072 +a61073 = 61073 +a61074 = 61074 +a61075 = 61075 +a61076 = 61076 +a61077 = 61077 +a61078 = 61078 +a61079 = 61079 +a61080 = 61080 +a61081 = 61081 +a61082 = 61082 +a61083 = 61083 +a61084 = 61084 +a61085 = 61085 +a61086 = 61086 +a61087 = 61087 +a61088 = 61088 +a61089 = 61089 +a61090 = 61090 +a61091 = 61091 +a61092 = 61092 +a61093 = 61093 +a61094 = 61094 +a61095 = 61095 +a61096 = 61096 +a61097 = 61097 +a61098 = 61098 +a61099 = 61099 +a61100 = 61100 +a61101 = 61101 +a61102 = 61102 +a61103 = 61103 +a61104 = 61104 +a61105 = 61105 +a61106 = 61106 +a61107 = 61107 +a61108 = 61108 +a61109 = 61109 +a61110 = 61110 +a61111 = 61111 +a61112 = 61112 +a61113 = 61113 +a61114 = 61114 +a61115 = 61115 +a61116 = 61116 +a61117 = 61117 +a61118 = 61118 +a61119 = 61119 +a61120 = 61120 +a61121 = 61121 +a61122 = 61122 +a61123 = 61123 +a61124 = 61124 +a61125 = 61125 +a61126 = 61126 +a61127 = 61127 +a61128 = 61128 +a61129 = 61129 +a61130 = 61130 +a61131 = 61131 +a61132 = 61132 +a61133 = 61133 +a61134 = 61134 +a61135 = 61135 +a61136 = 61136 +a61137 = 61137 +a61138 = 61138 +a61139 = 61139 +a61140 = 61140 +a61141 = 61141 +a61142 = 61142 +a61143 = 61143 +a61144 = 61144 +a61145 = 61145 +a61146 = 61146 +a61147 = 61147 +a61148 = 61148 +a61149 = 61149 +a61150 = 61150 +a61151 = 61151 +a61152 = 61152 +a61153 = 61153 +a61154 = 61154 +a61155 = 61155 +a61156 = 61156 +a61157 = 61157 +a61158 = 61158 +a61159 = 61159 +a61160 = 61160 +a61161 = 61161 +a61162 = 61162 +a61163 = 61163 +a61164 = 61164 +a61165 = 61165 +a61166 = 61166 +a61167 = 61167 +a61168 = 61168 +a61169 = 61169 +a61170 = 61170 +a61171 = 61171 +a61172 = 61172 +a61173 = 61173 +a61174 = 61174 +a61175 = 61175 +a61176 = 61176 +a61177 = 61177 +a61178 = 61178 +a61179 = 61179 +a61180 = 61180 +a61181 = 61181 +a61182 = 61182 +a61183 = 61183 +a61184 = 61184 +a61185 = 61185 +a61186 = 61186 +a61187 = 61187 +a61188 = 61188 +a61189 = 61189 +a61190 = 61190 +a61191 = 61191 +a61192 = 61192 +a61193 = 61193 +a61194 = 61194 +a61195 = 61195 +a61196 = 61196 +a61197 = 61197 +a61198 = 61198 +a61199 = 61199 +a61200 = 61200 +a61201 = 61201 +a61202 = 61202 +a61203 = 61203 +a61204 = 61204 +a61205 = 61205 +a61206 = 61206 +a61207 = 61207 +a61208 = 61208 +a61209 = 61209 +a61210 = 61210 +a61211 = 61211 +a61212 = 61212 +a61213 = 61213 +a61214 = 61214 +a61215 = 61215 +a61216 = 61216 +a61217 = 61217 +a61218 = 61218 +a61219 = 61219 +a61220 = 61220 +a61221 = 61221 +a61222 = 61222 +a61223 = 61223 +a61224 = 61224 +a61225 = 61225 +a61226 = 61226 +a61227 = 61227 +a61228 = 61228 +a61229 = 61229 +a61230 = 61230 +a61231 = 61231 +a61232 = 61232 +a61233 = 61233 +a61234 = 61234 +a61235 = 61235 +a61236 = 61236 +a61237 = 61237 +a61238 = 61238 +a61239 = 61239 +a61240 = 61240 +a61241 = 61241 +a61242 = 61242 +a61243 = 61243 +a61244 = 61244 +a61245 = 61245 +a61246 = 61246 +a61247 = 61247 +a61248 = 61248 +a61249 = 61249 +a61250 = 61250 +a61251 = 61251 +a61252 = 61252 +a61253 = 61253 +a61254 = 61254 +a61255 = 61255 +a61256 = 61256 +a61257 = 61257 +a61258 = 61258 +a61259 = 61259 +a61260 = 61260 +a61261 = 61261 +a61262 = 61262 +a61263 = 61263 +a61264 = 61264 +a61265 = 61265 +a61266 = 61266 +a61267 = 61267 +a61268 = 61268 +a61269 = 61269 +a61270 = 61270 +a61271 = 61271 +a61272 = 61272 +a61273 = 61273 +a61274 = 61274 +a61275 = 61275 +a61276 = 61276 +a61277 = 61277 +a61278 = 61278 +a61279 = 61279 +a61280 = 61280 +a61281 = 61281 +a61282 = 61282 +a61283 = 61283 +a61284 = 61284 +a61285 = 61285 +a61286 = 61286 +a61287 = 61287 +a61288 = 61288 +a61289 = 61289 +a61290 = 61290 +a61291 = 61291 +a61292 = 61292 +a61293 = 61293 +a61294 = 61294 +a61295 = 61295 +a61296 = 61296 +a61297 = 61297 +a61298 = 61298 +a61299 = 61299 +a61300 = 61300 +a61301 = 61301 +a61302 = 61302 +a61303 = 61303 +a61304 = 61304 +a61305 = 61305 +a61306 = 61306 +a61307 = 61307 +a61308 = 61308 +a61309 = 61309 +a61310 = 61310 +a61311 = 61311 +a61312 = 61312 +a61313 = 61313 +a61314 = 61314 +a61315 = 61315 +a61316 = 61316 +a61317 = 61317 +a61318 = 61318 +a61319 = 61319 +a61320 = 61320 +a61321 = 61321 +a61322 = 61322 +a61323 = 61323 +a61324 = 61324 +a61325 = 61325 +a61326 = 61326 +a61327 = 61327 +a61328 = 61328 +a61329 = 61329 +a61330 = 61330 +a61331 = 61331 +a61332 = 61332 +a61333 = 61333 +a61334 = 61334 +a61335 = 61335 +a61336 = 61336 +a61337 = 61337 +a61338 = 61338 +a61339 = 61339 +a61340 = 61340 +a61341 = 61341 +a61342 = 61342 +a61343 = 61343 +a61344 = 61344 +a61345 = 61345 +a61346 = 61346 +a61347 = 61347 +a61348 = 61348 +a61349 = 61349 +a61350 = 61350 +a61351 = 61351 +a61352 = 61352 +a61353 = 61353 +a61354 = 61354 +a61355 = 61355 +a61356 = 61356 +a61357 = 61357 +a61358 = 61358 +a61359 = 61359 +a61360 = 61360 +a61361 = 61361 +a61362 = 61362 +a61363 = 61363 +a61364 = 61364 +a61365 = 61365 +a61366 = 61366 +a61367 = 61367 +a61368 = 61368 +a61369 = 61369 +a61370 = 61370 +a61371 = 61371 +a61372 = 61372 +a61373 = 61373 +a61374 = 61374 +a61375 = 61375 +a61376 = 61376 +a61377 = 61377 +a61378 = 61378 +a61379 = 61379 +a61380 = 61380 +a61381 = 61381 +a61382 = 61382 +a61383 = 61383 +a61384 = 61384 +a61385 = 61385 +a61386 = 61386 +a61387 = 61387 +a61388 = 61388 +a61389 = 61389 +a61390 = 61390 +a61391 = 61391 +a61392 = 61392 +a61393 = 61393 +a61394 = 61394 +a61395 = 61395 +a61396 = 61396 +a61397 = 61397 +a61398 = 61398 +a61399 = 61399 +a61400 = 61400 +a61401 = 61401 +a61402 = 61402 +a61403 = 61403 +a61404 = 61404 +a61405 = 61405 +a61406 = 61406 +a61407 = 61407 +a61408 = 61408 +a61409 = 61409 +a61410 = 61410 +a61411 = 61411 +a61412 = 61412 +a61413 = 61413 +a61414 = 61414 +a61415 = 61415 +a61416 = 61416 +a61417 = 61417 +a61418 = 61418 +a61419 = 61419 +a61420 = 61420 +a61421 = 61421 +a61422 = 61422 +a61423 = 61423 +a61424 = 61424 +a61425 = 61425 +a61426 = 61426 +a61427 = 61427 +a61428 = 61428 +a61429 = 61429 +a61430 = 61430 +a61431 = 61431 +a61432 = 61432 +a61433 = 61433 +a61434 = 61434 +a61435 = 61435 +a61436 = 61436 +a61437 = 61437 +a61438 = 61438 +a61439 = 61439 +a61440 = 61440 +a61441 = 61441 +a61442 = 61442 +a61443 = 61443 +a61444 = 61444 +a61445 = 61445 +a61446 = 61446 +a61447 = 61447 +a61448 = 61448 +a61449 = 61449 +a61450 = 61450 +a61451 = 61451 +a61452 = 61452 +a61453 = 61453 +a61454 = 61454 +a61455 = 61455 +a61456 = 61456 +a61457 = 61457 +a61458 = 61458 +a61459 = 61459 +a61460 = 61460 +a61461 = 61461 +a61462 = 61462 +a61463 = 61463 +a61464 = 61464 +a61465 = 61465 +a61466 = 61466 +a61467 = 61467 +a61468 = 61468 +a61469 = 61469 +a61470 = 61470 +a61471 = 61471 +a61472 = 61472 +a61473 = 61473 +a61474 = 61474 +a61475 = 61475 +a61476 = 61476 +a61477 = 61477 +a61478 = 61478 +a61479 = 61479 +a61480 = 61480 +a61481 = 61481 +a61482 = 61482 +a61483 = 61483 +a61484 = 61484 +a61485 = 61485 +a61486 = 61486 +a61487 = 61487 +a61488 = 61488 +a61489 = 61489 +a61490 = 61490 +a61491 = 61491 +a61492 = 61492 +a61493 = 61493 +a61494 = 61494 +a61495 = 61495 +a61496 = 61496 +a61497 = 61497 +a61498 = 61498 +a61499 = 61499 +a61500 = 61500 +a61501 = 61501 +a61502 = 61502 +a61503 = 61503 +a61504 = 61504 +a61505 = 61505 +a61506 = 61506 +a61507 = 61507 +a61508 = 61508 +a61509 = 61509 +a61510 = 61510 +a61511 = 61511 +a61512 = 61512 +a61513 = 61513 +a61514 = 61514 +a61515 = 61515 +a61516 = 61516 +a61517 = 61517 +a61518 = 61518 +a61519 = 61519 +a61520 = 61520 +a61521 = 61521 +a61522 = 61522 +a61523 = 61523 +a61524 = 61524 +a61525 = 61525 +a61526 = 61526 +a61527 = 61527 +a61528 = 61528 +a61529 = 61529 +a61530 = 61530 +a61531 = 61531 +a61532 = 61532 +a61533 = 61533 +a61534 = 61534 +a61535 = 61535 +a61536 = 61536 +a61537 = 61537 +a61538 = 61538 +a61539 = 61539 +a61540 = 61540 +a61541 = 61541 +a61542 = 61542 +a61543 = 61543 +a61544 = 61544 +a61545 = 61545 +a61546 = 61546 +a61547 = 61547 +a61548 = 61548 +a61549 = 61549 +a61550 = 61550 +a61551 = 61551 +a61552 = 61552 +a61553 = 61553 +a61554 = 61554 +a61555 = 61555 +a61556 = 61556 +a61557 = 61557 +a61558 = 61558 +a61559 = 61559 +a61560 = 61560 +a61561 = 61561 +a61562 = 61562 +a61563 = 61563 +a61564 = 61564 +a61565 = 61565 +a61566 = 61566 +a61567 = 61567 +a61568 = 61568 +a61569 = 61569 +a61570 = 61570 +a61571 = 61571 +a61572 = 61572 +a61573 = 61573 +a61574 = 61574 +a61575 = 61575 +a61576 = 61576 +a61577 = 61577 +a61578 = 61578 +a61579 = 61579 +a61580 = 61580 +a61581 = 61581 +a61582 = 61582 +a61583 = 61583 +a61584 = 61584 +a61585 = 61585 +a61586 = 61586 +a61587 = 61587 +a61588 = 61588 +a61589 = 61589 +a61590 = 61590 +a61591 = 61591 +a61592 = 61592 +a61593 = 61593 +a61594 = 61594 +a61595 = 61595 +a61596 = 61596 +a61597 = 61597 +a61598 = 61598 +a61599 = 61599 +a61600 = 61600 +a61601 = 61601 +a61602 = 61602 +a61603 = 61603 +a61604 = 61604 +a61605 = 61605 +a61606 = 61606 +a61607 = 61607 +a61608 = 61608 +a61609 = 61609 +a61610 = 61610 +a61611 = 61611 +a61612 = 61612 +a61613 = 61613 +a61614 = 61614 +a61615 = 61615 +a61616 = 61616 +a61617 = 61617 +a61618 = 61618 +a61619 = 61619 +a61620 = 61620 +a61621 = 61621 +a61622 = 61622 +a61623 = 61623 +a61624 = 61624 +a61625 = 61625 +a61626 = 61626 +a61627 = 61627 +a61628 = 61628 +a61629 = 61629 +a61630 = 61630 +a61631 = 61631 +a61632 = 61632 +a61633 = 61633 +a61634 = 61634 +a61635 = 61635 +a61636 = 61636 +a61637 = 61637 +a61638 = 61638 +a61639 = 61639 +a61640 = 61640 +a61641 = 61641 +a61642 = 61642 +a61643 = 61643 +a61644 = 61644 +a61645 = 61645 +a61646 = 61646 +a61647 = 61647 +a61648 = 61648 +a61649 = 61649 +a61650 = 61650 +a61651 = 61651 +a61652 = 61652 +a61653 = 61653 +a61654 = 61654 +a61655 = 61655 +a61656 = 61656 +a61657 = 61657 +a61658 = 61658 +a61659 = 61659 +a61660 = 61660 +a61661 = 61661 +a61662 = 61662 +a61663 = 61663 +a61664 = 61664 +a61665 = 61665 +a61666 = 61666 +a61667 = 61667 +a61668 = 61668 +a61669 = 61669 +a61670 = 61670 +a61671 = 61671 +a61672 = 61672 +a61673 = 61673 +a61674 = 61674 +a61675 = 61675 +a61676 = 61676 +a61677 = 61677 +a61678 = 61678 +a61679 = 61679 +a61680 = 61680 +a61681 = 61681 +a61682 = 61682 +a61683 = 61683 +a61684 = 61684 +a61685 = 61685 +a61686 = 61686 +a61687 = 61687 +a61688 = 61688 +a61689 = 61689 +a61690 = 61690 +a61691 = 61691 +a61692 = 61692 +a61693 = 61693 +a61694 = 61694 +a61695 = 61695 +a61696 = 61696 +a61697 = 61697 +a61698 = 61698 +a61699 = 61699 +a61700 = 61700 +a61701 = 61701 +a61702 = 61702 +a61703 = 61703 +a61704 = 61704 +a61705 = 61705 +a61706 = 61706 +a61707 = 61707 +a61708 = 61708 +a61709 = 61709 +a61710 = 61710 +a61711 = 61711 +a61712 = 61712 +a61713 = 61713 +a61714 = 61714 +a61715 = 61715 +a61716 = 61716 +a61717 = 61717 +a61718 = 61718 +a61719 = 61719 +a61720 = 61720 +a61721 = 61721 +a61722 = 61722 +a61723 = 61723 +a61724 = 61724 +a61725 = 61725 +a61726 = 61726 +a61727 = 61727 +a61728 = 61728 +a61729 = 61729 +a61730 = 61730 +a61731 = 61731 +a61732 = 61732 +a61733 = 61733 +a61734 = 61734 +a61735 = 61735 +a61736 = 61736 +a61737 = 61737 +a61738 = 61738 +a61739 = 61739 +a61740 = 61740 +a61741 = 61741 +a61742 = 61742 +a61743 = 61743 +a61744 = 61744 +a61745 = 61745 +a61746 = 61746 +a61747 = 61747 +a61748 = 61748 +a61749 = 61749 +a61750 = 61750 +a61751 = 61751 +a61752 = 61752 +a61753 = 61753 +a61754 = 61754 +a61755 = 61755 +a61756 = 61756 +a61757 = 61757 +a61758 = 61758 +a61759 = 61759 +a61760 = 61760 +a61761 = 61761 +a61762 = 61762 +a61763 = 61763 +a61764 = 61764 +a61765 = 61765 +a61766 = 61766 +a61767 = 61767 +a61768 = 61768 +a61769 = 61769 +a61770 = 61770 +a61771 = 61771 +a61772 = 61772 +a61773 = 61773 +a61774 = 61774 +a61775 = 61775 +a61776 = 61776 +a61777 = 61777 +a61778 = 61778 +a61779 = 61779 +a61780 = 61780 +a61781 = 61781 +a61782 = 61782 +a61783 = 61783 +a61784 = 61784 +a61785 = 61785 +a61786 = 61786 +a61787 = 61787 +a61788 = 61788 +a61789 = 61789 +a61790 = 61790 +a61791 = 61791 +a61792 = 61792 +a61793 = 61793 +a61794 = 61794 +a61795 = 61795 +a61796 = 61796 +a61797 = 61797 +a61798 = 61798 +a61799 = 61799 +a61800 = 61800 +a61801 = 61801 +a61802 = 61802 +a61803 = 61803 +a61804 = 61804 +a61805 = 61805 +a61806 = 61806 +a61807 = 61807 +a61808 = 61808 +a61809 = 61809 +a61810 = 61810 +a61811 = 61811 +a61812 = 61812 +a61813 = 61813 +a61814 = 61814 +a61815 = 61815 +a61816 = 61816 +a61817 = 61817 +a61818 = 61818 +a61819 = 61819 +a61820 = 61820 +a61821 = 61821 +a61822 = 61822 +a61823 = 61823 +a61824 = 61824 +a61825 = 61825 +a61826 = 61826 +a61827 = 61827 +a61828 = 61828 +a61829 = 61829 +a61830 = 61830 +a61831 = 61831 +a61832 = 61832 +a61833 = 61833 +a61834 = 61834 +a61835 = 61835 +a61836 = 61836 +a61837 = 61837 +a61838 = 61838 +a61839 = 61839 +a61840 = 61840 +a61841 = 61841 +a61842 = 61842 +a61843 = 61843 +a61844 = 61844 +a61845 = 61845 +a61846 = 61846 +a61847 = 61847 +a61848 = 61848 +a61849 = 61849 +a61850 = 61850 +a61851 = 61851 +a61852 = 61852 +a61853 = 61853 +a61854 = 61854 +a61855 = 61855 +a61856 = 61856 +a61857 = 61857 +a61858 = 61858 +a61859 = 61859 +a61860 = 61860 +a61861 = 61861 +a61862 = 61862 +a61863 = 61863 +a61864 = 61864 +a61865 = 61865 +a61866 = 61866 +a61867 = 61867 +a61868 = 61868 +a61869 = 61869 +a61870 = 61870 +a61871 = 61871 +a61872 = 61872 +a61873 = 61873 +a61874 = 61874 +a61875 = 61875 +a61876 = 61876 +a61877 = 61877 +a61878 = 61878 +a61879 = 61879 +a61880 = 61880 +a61881 = 61881 +a61882 = 61882 +a61883 = 61883 +a61884 = 61884 +a61885 = 61885 +a61886 = 61886 +a61887 = 61887 +a61888 = 61888 +a61889 = 61889 +a61890 = 61890 +a61891 = 61891 +a61892 = 61892 +a61893 = 61893 +a61894 = 61894 +a61895 = 61895 +a61896 = 61896 +a61897 = 61897 +a61898 = 61898 +a61899 = 61899 +a61900 = 61900 +a61901 = 61901 +a61902 = 61902 +a61903 = 61903 +a61904 = 61904 +a61905 = 61905 +a61906 = 61906 +a61907 = 61907 +a61908 = 61908 +a61909 = 61909 +a61910 = 61910 +a61911 = 61911 +a61912 = 61912 +a61913 = 61913 +a61914 = 61914 +a61915 = 61915 +a61916 = 61916 +a61917 = 61917 +a61918 = 61918 +a61919 = 61919 +a61920 = 61920 +a61921 = 61921 +a61922 = 61922 +a61923 = 61923 +a61924 = 61924 +a61925 = 61925 +a61926 = 61926 +a61927 = 61927 +a61928 = 61928 +a61929 = 61929 +a61930 = 61930 +a61931 = 61931 +a61932 = 61932 +a61933 = 61933 +a61934 = 61934 +a61935 = 61935 +a61936 = 61936 +a61937 = 61937 +a61938 = 61938 +a61939 = 61939 +a61940 = 61940 +a61941 = 61941 +a61942 = 61942 +a61943 = 61943 +a61944 = 61944 +a61945 = 61945 +a61946 = 61946 +a61947 = 61947 +a61948 = 61948 +a61949 = 61949 +a61950 = 61950 +a61951 = 61951 +a61952 = 61952 +a61953 = 61953 +a61954 = 61954 +a61955 = 61955 +a61956 = 61956 +a61957 = 61957 +a61958 = 61958 +a61959 = 61959 +a61960 = 61960 +a61961 = 61961 +a61962 = 61962 +a61963 = 61963 +a61964 = 61964 +a61965 = 61965 +a61966 = 61966 +a61967 = 61967 +a61968 = 61968 +a61969 = 61969 +a61970 = 61970 +a61971 = 61971 +a61972 = 61972 +a61973 = 61973 +a61974 = 61974 +a61975 = 61975 +a61976 = 61976 +a61977 = 61977 +a61978 = 61978 +a61979 = 61979 +a61980 = 61980 +a61981 = 61981 +a61982 = 61982 +a61983 = 61983 +a61984 = 61984 +a61985 = 61985 +a61986 = 61986 +a61987 = 61987 +a61988 = 61988 +a61989 = 61989 +a61990 = 61990 +a61991 = 61991 +a61992 = 61992 +a61993 = 61993 +a61994 = 61994 +a61995 = 61995 +a61996 = 61996 +a61997 = 61997 +a61998 = 61998 +a61999 = 61999 +a62000 = 62000 +a62001 = 62001 +a62002 = 62002 +a62003 = 62003 +a62004 = 62004 +a62005 = 62005 +a62006 = 62006 +a62007 = 62007 +a62008 = 62008 +a62009 = 62009 +a62010 = 62010 +a62011 = 62011 +a62012 = 62012 +a62013 = 62013 +a62014 = 62014 +a62015 = 62015 +a62016 = 62016 +a62017 = 62017 +a62018 = 62018 +a62019 = 62019 +a62020 = 62020 +a62021 = 62021 +a62022 = 62022 +a62023 = 62023 +a62024 = 62024 +a62025 = 62025 +a62026 = 62026 +a62027 = 62027 +a62028 = 62028 +a62029 = 62029 +a62030 = 62030 +a62031 = 62031 +a62032 = 62032 +a62033 = 62033 +a62034 = 62034 +a62035 = 62035 +a62036 = 62036 +a62037 = 62037 +a62038 = 62038 +a62039 = 62039 +a62040 = 62040 +a62041 = 62041 +a62042 = 62042 +a62043 = 62043 +a62044 = 62044 +a62045 = 62045 +a62046 = 62046 +a62047 = 62047 +a62048 = 62048 +a62049 = 62049 +a62050 = 62050 +a62051 = 62051 +a62052 = 62052 +a62053 = 62053 +a62054 = 62054 +a62055 = 62055 +a62056 = 62056 +a62057 = 62057 +a62058 = 62058 +a62059 = 62059 +a62060 = 62060 +a62061 = 62061 +a62062 = 62062 +a62063 = 62063 +a62064 = 62064 +a62065 = 62065 +a62066 = 62066 +a62067 = 62067 +a62068 = 62068 +a62069 = 62069 +a62070 = 62070 +a62071 = 62071 +a62072 = 62072 +a62073 = 62073 +a62074 = 62074 +a62075 = 62075 +a62076 = 62076 +a62077 = 62077 +a62078 = 62078 +a62079 = 62079 +a62080 = 62080 +a62081 = 62081 +a62082 = 62082 +a62083 = 62083 +a62084 = 62084 +a62085 = 62085 +a62086 = 62086 +a62087 = 62087 +a62088 = 62088 +a62089 = 62089 +a62090 = 62090 +a62091 = 62091 +a62092 = 62092 +a62093 = 62093 +a62094 = 62094 +a62095 = 62095 +a62096 = 62096 +a62097 = 62097 +a62098 = 62098 +a62099 = 62099 +a62100 = 62100 +a62101 = 62101 +a62102 = 62102 +a62103 = 62103 +a62104 = 62104 +a62105 = 62105 +a62106 = 62106 +a62107 = 62107 +a62108 = 62108 +a62109 = 62109 +a62110 = 62110 +a62111 = 62111 +a62112 = 62112 +a62113 = 62113 +a62114 = 62114 +a62115 = 62115 +a62116 = 62116 +a62117 = 62117 +a62118 = 62118 +a62119 = 62119 +a62120 = 62120 +a62121 = 62121 +a62122 = 62122 +a62123 = 62123 +a62124 = 62124 +a62125 = 62125 +a62126 = 62126 +a62127 = 62127 +a62128 = 62128 +a62129 = 62129 +a62130 = 62130 +a62131 = 62131 +a62132 = 62132 +a62133 = 62133 +a62134 = 62134 +a62135 = 62135 +a62136 = 62136 +a62137 = 62137 +a62138 = 62138 +a62139 = 62139 +a62140 = 62140 +a62141 = 62141 +a62142 = 62142 +a62143 = 62143 +a62144 = 62144 +a62145 = 62145 +a62146 = 62146 +a62147 = 62147 +a62148 = 62148 +a62149 = 62149 +a62150 = 62150 +a62151 = 62151 +a62152 = 62152 +a62153 = 62153 +a62154 = 62154 +a62155 = 62155 +a62156 = 62156 +a62157 = 62157 +a62158 = 62158 +a62159 = 62159 +a62160 = 62160 +a62161 = 62161 +a62162 = 62162 +a62163 = 62163 +a62164 = 62164 +a62165 = 62165 +a62166 = 62166 +a62167 = 62167 +a62168 = 62168 +a62169 = 62169 +a62170 = 62170 +a62171 = 62171 +a62172 = 62172 +a62173 = 62173 +a62174 = 62174 +a62175 = 62175 +a62176 = 62176 +a62177 = 62177 +a62178 = 62178 +a62179 = 62179 +a62180 = 62180 +a62181 = 62181 +a62182 = 62182 +a62183 = 62183 +a62184 = 62184 +a62185 = 62185 +a62186 = 62186 +a62187 = 62187 +a62188 = 62188 +a62189 = 62189 +a62190 = 62190 +a62191 = 62191 +a62192 = 62192 +a62193 = 62193 +a62194 = 62194 +a62195 = 62195 +a62196 = 62196 +a62197 = 62197 +a62198 = 62198 +a62199 = 62199 +a62200 = 62200 +a62201 = 62201 +a62202 = 62202 +a62203 = 62203 +a62204 = 62204 +a62205 = 62205 +a62206 = 62206 +a62207 = 62207 +a62208 = 62208 +a62209 = 62209 +a62210 = 62210 +a62211 = 62211 +a62212 = 62212 +a62213 = 62213 +a62214 = 62214 +a62215 = 62215 +a62216 = 62216 +a62217 = 62217 +a62218 = 62218 +a62219 = 62219 +a62220 = 62220 +a62221 = 62221 +a62222 = 62222 +a62223 = 62223 +a62224 = 62224 +a62225 = 62225 +a62226 = 62226 +a62227 = 62227 +a62228 = 62228 +a62229 = 62229 +a62230 = 62230 +a62231 = 62231 +a62232 = 62232 +a62233 = 62233 +a62234 = 62234 +a62235 = 62235 +a62236 = 62236 +a62237 = 62237 +a62238 = 62238 +a62239 = 62239 +a62240 = 62240 +a62241 = 62241 +a62242 = 62242 +a62243 = 62243 +a62244 = 62244 +a62245 = 62245 +a62246 = 62246 +a62247 = 62247 +a62248 = 62248 +a62249 = 62249 +a62250 = 62250 +a62251 = 62251 +a62252 = 62252 +a62253 = 62253 +a62254 = 62254 +a62255 = 62255 +a62256 = 62256 +a62257 = 62257 +a62258 = 62258 +a62259 = 62259 +a62260 = 62260 +a62261 = 62261 +a62262 = 62262 +a62263 = 62263 +a62264 = 62264 +a62265 = 62265 +a62266 = 62266 +a62267 = 62267 +a62268 = 62268 +a62269 = 62269 +a62270 = 62270 +a62271 = 62271 +a62272 = 62272 +a62273 = 62273 +a62274 = 62274 +a62275 = 62275 +a62276 = 62276 +a62277 = 62277 +a62278 = 62278 +a62279 = 62279 +a62280 = 62280 +a62281 = 62281 +a62282 = 62282 +a62283 = 62283 +a62284 = 62284 +a62285 = 62285 +a62286 = 62286 +a62287 = 62287 +a62288 = 62288 +a62289 = 62289 +a62290 = 62290 +a62291 = 62291 +a62292 = 62292 +a62293 = 62293 +a62294 = 62294 +a62295 = 62295 +a62296 = 62296 +a62297 = 62297 +a62298 = 62298 +a62299 = 62299 +a62300 = 62300 +a62301 = 62301 +a62302 = 62302 +a62303 = 62303 +a62304 = 62304 +a62305 = 62305 +a62306 = 62306 +a62307 = 62307 +a62308 = 62308 +a62309 = 62309 +a62310 = 62310 +a62311 = 62311 +a62312 = 62312 +a62313 = 62313 +a62314 = 62314 +a62315 = 62315 +a62316 = 62316 +a62317 = 62317 +a62318 = 62318 +a62319 = 62319 +a62320 = 62320 +a62321 = 62321 +a62322 = 62322 +a62323 = 62323 +a62324 = 62324 +a62325 = 62325 +a62326 = 62326 +a62327 = 62327 +a62328 = 62328 +a62329 = 62329 +a62330 = 62330 +a62331 = 62331 +a62332 = 62332 +a62333 = 62333 +a62334 = 62334 +a62335 = 62335 +a62336 = 62336 +a62337 = 62337 +a62338 = 62338 +a62339 = 62339 +a62340 = 62340 +a62341 = 62341 +a62342 = 62342 +a62343 = 62343 +a62344 = 62344 +a62345 = 62345 +a62346 = 62346 +a62347 = 62347 +a62348 = 62348 +a62349 = 62349 +a62350 = 62350 +a62351 = 62351 +a62352 = 62352 +a62353 = 62353 +a62354 = 62354 +a62355 = 62355 +a62356 = 62356 +a62357 = 62357 +a62358 = 62358 +a62359 = 62359 +a62360 = 62360 +a62361 = 62361 +a62362 = 62362 +a62363 = 62363 +a62364 = 62364 +a62365 = 62365 +a62366 = 62366 +a62367 = 62367 +a62368 = 62368 +a62369 = 62369 +a62370 = 62370 +a62371 = 62371 +a62372 = 62372 +a62373 = 62373 +a62374 = 62374 +a62375 = 62375 +a62376 = 62376 +a62377 = 62377 +a62378 = 62378 +a62379 = 62379 +a62380 = 62380 +a62381 = 62381 +a62382 = 62382 +a62383 = 62383 +a62384 = 62384 +a62385 = 62385 +a62386 = 62386 +a62387 = 62387 +a62388 = 62388 +a62389 = 62389 +a62390 = 62390 +a62391 = 62391 +a62392 = 62392 +a62393 = 62393 +a62394 = 62394 +a62395 = 62395 +a62396 = 62396 +a62397 = 62397 +a62398 = 62398 +a62399 = 62399 +a62400 = 62400 +a62401 = 62401 +a62402 = 62402 +a62403 = 62403 +a62404 = 62404 +a62405 = 62405 +a62406 = 62406 +a62407 = 62407 +a62408 = 62408 +a62409 = 62409 +a62410 = 62410 +a62411 = 62411 +a62412 = 62412 +a62413 = 62413 +a62414 = 62414 +a62415 = 62415 +a62416 = 62416 +a62417 = 62417 +a62418 = 62418 +a62419 = 62419 +a62420 = 62420 +a62421 = 62421 +a62422 = 62422 +a62423 = 62423 +a62424 = 62424 +a62425 = 62425 +a62426 = 62426 +a62427 = 62427 +a62428 = 62428 +a62429 = 62429 +a62430 = 62430 +a62431 = 62431 +a62432 = 62432 +a62433 = 62433 +a62434 = 62434 +a62435 = 62435 +a62436 = 62436 +a62437 = 62437 +a62438 = 62438 +a62439 = 62439 +a62440 = 62440 +a62441 = 62441 +a62442 = 62442 +a62443 = 62443 +a62444 = 62444 +a62445 = 62445 +a62446 = 62446 +a62447 = 62447 +a62448 = 62448 +a62449 = 62449 +a62450 = 62450 +a62451 = 62451 +a62452 = 62452 +a62453 = 62453 +a62454 = 62454 +a62455 = 62455 +a62456 = 62456 +a62457 = 62457 +a62458 = 62458 +a62459 = 62459 +a62460 = 62460 +a62461 = 62461 +a62462 = 62462 +a62463 = 62463 +a62464 = 62464 +a62465 = 62465 +a62466 = 62466 +a62467 = 62467 +a62468 = 62468 +a62469 = 62469 +a62470 = 62470 +a62471 = 62471 +a62472 = 62472 +a62473 = 62473 +a62474 = 62474 +a62475 = 62475 +a62476 = 62476 +a62477 = 62477 +a62478 = 62478 +a62479 = 62479 +a62480 = 62480 +a62481 = 62481 +a62482 = 62482 +a62483 = 62483 +a62484 = 62484 +a62485 = 62485 +a62486 = 62486 +a62487 = 62487 +a62488 = 62488 +a62489 = 62489 +a62490 = 62490 +a62491 = 62491 +a62492 = 62492 +a62493 = 62493 +a62494 = 62494 +a62495 = 62495 +a62496 = 62496 +a62497 = 62497 +a62498 = 62498 +a62499 = 62499 +a62500 = 62500 +a62501 = 62501 +a62502 = 62502 +a62503 = 62503 +a62504 = 62504 +a62505 = 62505 +a62506 = 62506 +a62507 = 62507 +a62508 = 62508 +a62509 = 62509 +a62510 = 62510 +a62511 = 62511 +a62512 = 62512 +a62513 = 62513 +a62514 = 62514 +a62515 = 62515 +a62516 = 62516 +a62517 = 62517 +a62518 = 62518 +a62519 = 62519 +a62520 = 62520 +a62521 = 62521 +a62522 = 62522 +a62523 = 62523 +a62524 = 62524 +a62525 = 62525 +a62526 = 62526 +a62527 = 62527 +a62528 = 62528 +a62529 = 62529 +a62530 = 62530 +a62531 = 62531 +a62532 = 62532 +a62533 = 62533 +a62534 = 62534 +a62535 = 62535 +a62536 = 62536 +a62537 = 62537 +a62538 = 62538 +a62539 = 62539 +a62540 = 62540 +a62541 = 62541 +a62542 = 62542 +a62543 = 62543 +a62544 = 62544 +a62545 = 62545 +a62546 = 62546 +a62547 = 62547 +a62548 = 62548 +a62549 = 62549 +a62550 = 62550 +a62551 = 62551 +a62552 = 62552 +a62553 = 62553 +a62554 = 62554 +a62555 = 62555 +a62556 = 62556 +a62557 = 62557 +a62558 = 62558 +a62559 = 62559 +a62560 = 62560 +a62561 = 62561 +a62562 = 62562 +a62563 = 62563 +a62564 = 62564 +a62565 = 62565 +a62566 = 62566 +a62567 = 62567 +a62568 = 62568 +a62569 = 62569 +a62570 = 62570 +a62571 = 62571 +a62572 = 62572 +a62573 = 62573 +a62574 = 62574 +a62575 = 62575 +a62576 = 62576 +a62577 = 62577 +a62578 = 62578 +a62579 = 62579 +a62580 = 62580 +a62581 = 62581 +a62582 = 62582 +a62583 = 62583 +a62584 = 62584 +a62585 = 62585 +a62586 = 62586 +a62587 = 62587 +a62588 = 62588 +a62589 = 62589 +a62590 = 62590 +a62591 = 62591 +a62592 = 62592 +a62593 = 62593 +a62594 = 62594 +a62595 = 62595 +a62596 = 62596 +a62597 = 62597 +a62598 = 62598 +a62599 = 62599 +a62600 = 62600 +a62601 = 62601 +a62602 = 62602 +a62603 = 62603 +a62604 = 62604 +a62605 = 62605 +a62606 = 62606 +a62607 = 62607 +a62608 = 62608 +a62609 = 62609 +a62610 = 62610 +a62611 = 62611 +a62612 = 62612 +a62613 = 62613 +a62614 = 62614 +a62615 = 62615 +a62616 = 62616 +a62617 = 62617 +a62618 = 62618 +a62619 = 62619 +a62620 = 62620 +a62621 = 62621 +a62622 = 62622 +a62623 = 62623 +a62624 = 62624 +a62625 = 62625 +a62626 = 62626 +a62627 = 62627 +a62628 = 62628 +a62629 = 62629 +a62630 = 62630 +a62631 = 62631 +a62632 = 62632 +a62633 = 62633 +a62634 = 62634 +a62635 = 62635 +a62636 = 62636 +a62637 = 62637 +a62638 = 62638 +a62639 = 62639 +a62640 = 62640 +a62641 = 62641 +a62642 = 62642 +a62643 = 62643 +a62644 = 62644 +a62645 = 62645 +a62646 = 62646 +a62647 = 62647 +a62648 = 62648 +a62649 = 62649 +a62650 = 62650 +a62651 = 62651 +a62652 = 62652 +a62653 = 62653 +a62654 = 62654 +a62655 = 62655 +a62656 = 62656 +a62657 = 62657 +a62658 = 62658 +a62659 = 62659 +a62660 = 62660 +a62661 = 62661 +a62662 = 62662 +a62663 = 62663 +a62664 = 62664 +a62665 = 62665 +a62666 = 62666 +a62667 = 62667 +a62668 = 62668 +a62669 = 62669 +a62670 = 62670 +a62671 = 62671 +a62672 = 62672 +a62673 = 62673 +a62674 = 62674 +a62675 = 62675 +a62676 = 62676 +a62677 = 62677 +a62678 = 62678 +a62679 = 62679 +a62680 = 62680 +a62681 = 62681 +a62682 = 62682 +a62683 = 62683 +a62684 = 62684 +a62685 = 62685 +a62686 = 62686 +a62687 = 62687 +a62688 = 62688 +a62689 = 62689 +a62690 = 62690 +a62691 = 62691 +a62692 = 62692 +a62693 = 62693 +a62694 = 62694 +a62695 = 62695 +a62696 = 62696 +a62697 = 62697 +a62698 = 62698 +a62699 = 62699 +a62700 = 62700 +a62701 = 62701 +a62702 = 62702 +a62703 = 62703 +a62704 = 62704 +a62705 = 62705 +a62706 = 62706 +a62707 = 62707 +a62708 = 62708 +a62709 = 62709 +a62710 = 62710 +a62711 = 62711 +a62712 = 62712 +a62713 = 62713 +a62714 = 62714 +a62715 = 62715 +a62716 = 62716 +a62717 = 62717 +a62718 = 62718 +a62719 = 62719 +a62720 = 62720 +a62721 = 62721 +a62722 = 62722 +a62723 = 62723 +a62724 = 62724 +a62725 = 62725 +a62726 = 62726 +a62727 = 62727 +a62728 = 62728 +a62729 = 62729 +a62730 = 62730 +a62731 = 62731 +a62732 = 62732 +a62733 = 62733 +a62734 = 62734 +a62735 = 62735 +a62736 = 62736 +a62737 = 62737 +a62738 = 62738 +a62739 = 62739 +a62740 = 62740 +a62741 = 62741 +a62742 = 62742 +a62743 = 62743 +a62744 = 62744 +a62745 = 62745 +a62746 = 62746 +a62747 = 62747 +a62748 = 62748 +a62749 = 62749 +a62750 = 62750 +a62751 = 62751 +a62752 = 62752 +a62753 = 62753 +a62754 = 62754 +a62755 = 62755 +a62756 = 62756 +a62757 = 62757 +a62758 = 62758 +a62759 = 62759 +a62760 = 62760 +a62761 = 62761 +a62762 = 62762 +a62763 = 62763 +a62764 = 62764 +a62765 = 62765 +a62766 = 62766 +a62767 = 62767 +a62768 = 62768 +a62769 = 62769 +a62770 = 62770 +a62771 = 62771 +a62772 = 62772 +a62773 = 62773 +a62774 = 62774 +a62775 = 62775 +a62776 = 62776 +a62777 = 62777 +a62778 = 62778 +a62779 = 62779 +a62780 = 62780 +a62781 = 62781 +a62782 = 62782 +a62783 = 62783 +a62784 = 62784 +a62785 = 62785 +a62786 = 62786 +a62787 = 62787 +a62788 = 62788 +a62789 = 62789 +a62790 = 62790 +a62791 = 62791 +a62792 = 62792 +a62793 = 62793 +a62794 = 62794 +a62795 = 62795 +a62796 = 62796 +a62797 = 62797 +a62798 = 62798 +a62799 = 62799 +a62800 = 62800 +a62801 = 62801 +a62802 = 62802 +a62803 = 62803 +a62804 = 62804 +a62805 = 62805 +a62806 = 62806 +a62807 = 62807 +a62808 = 62808 +a62809 = 62809 +a62810 = 62810 +a62811 = 62811 +a62812 = 62812 +a62813 = 62813 +a62814 = 62814 +a62815 = 62815 +a62816 = 62816 +a62817 = 62817 +a62818 = 62818 +a62819 = 62819 +a62820 = 62820 +a62821 = 62821 +a62822 = 62822 +a62823 = 62823 +a62824 = 62824 +a62825 = 62825 +a62826 = 62826 +a62827 = 62827 +a62828 = 62828 +a62829 = 62829 +a62830 = 62830 +a62831 = 62831 +a62832 = 62832 +a62833 = 62833 +a62834 = 62834 +a62835 = 62835 +a62836 = 62836 +a62837 = 62837 +a62838 = 62838 +a62839 = 62839 +a62840 = 62840 +a62841 = 62841 +a62842 = 62842 +a62843 = 62843 +a62844 = 62844 +a62845 = 62845 +a62846 = 62846 +a62847 = 62847 +a62848 = 62848 +a62849 = 62849 +a62850 = 62850 +a62851 = 62851 +a62852 = 62852 +a62853 = 62853 +a62854 = 62854 +a62855 = 62855 +a62856 = 62856 +a62857 = 62857 +a62858 = 62858 +a62859 = 62859 +a62860 = 62860 +a62861 = 62861 +a62862 = 62862 +a62863 = 62863 +a62864 = 62864 +a62865 = 62865 +a62866 = 62866 +a62867 = 62867 +a62868 = 62868 +a62869 = 62869 +a62870 = 62870 +a62871 = 62871 +a62872 = 62872 +a62873 = 62873 +a62874 = 62874 +a62875 = 62875 +a62876 = 62876 +a62877 = 62877 +a62878 = 62878 +a62879 = 62879 +a62880 = 62880 +a62881 = 62881 +a62882 = 62882 +a62883 = 62883 +a62884 = 62884 +a62885 = 62885 +a62886 = 62886 +a62887 = 62887 +a62888 = 62888 +a62889 = 62889 +a62890 = 62890 +a62891 = 62891 +a62892 = 62892 +a62893 = 62893 +a62894 = 62894 +a62895 = 62895 +a62896 = 62896 +a62897 = 62897 +a62898 = 62898 +a62899 = 62899 +a62900 = 62900 +a62901 = 62901 +a62902 = 62902 +a62903 = 62903 +a62904 = 62904 +a62905 = 62905 +a62906 = 62906 +a62907 = 62907 +a62908 = 62908 +a62909 = 62909 +a62910 = 62910 +a62911 = 62911 +a62912 = 62912 +a62913 = 62913 +a62914 = 62914 +a62915 = 62915 +a62916 = 62916 +a62917 = 62917 +a62918 = 62918 +a62919 = 62919 +a62920 = 62920 +a62921 = 62921 +a62922 = 62922 +a62923 = 62923 +a62924 = 62924 +a62925 = 62925 +a62926 = 62926 +a62927 = 62927 +a62928 = 62928 +a62929 = 62929 +a62930 = 62930 +a62931 = 62931 +a62932 = 62932 +a62933 = 62933 +a62934 = 62934 +a62935 = 62935 +a62936 = 62936 +a62937 = 62937 +a62938 = 62938 +a62939 = 62939 +a62940 = 62940 +a62941 = 62941 +a62942 = 62942 +a62943 = 62943 +a62944 = 62944 +a62945 = 62945 +a62946 = 62946 +a62947 = 62947 +a62948 = 62948 +a62949 = 62949 +a62950 = 62950 +a62951 = 62951 +a62952 = 62952 +a62953 = 62953 +a62954 = 62954 +a62955 = 62955 +a62956 = 62956 +a62957 = 62957 +a62958 = 62958 +a62959 = 62959 +a62960 = 62960 +a62961 = 62961 +a62962 = 62962 +a62963 = 62963 +a62964 = 62964 +a62965 = 62965 +a62966 = 62966 +a62967 = 62967 +a62968 = 62968 +a62969 = 62969 +a62970 = 62970 +a62971 = 62971 +a62972 = 62972 +a62973 = 62973 +a62974 = 62974 +a62975 = 62975 +a62976 = 62976 +a62977 = 62977 +a62978 = 62978 +a62979 = 62979 +a62980 = 62980 +a62981 = 62981 +a62982 = 62982 +a62983 = 62983 +a62984 = 62984 +a62985 = 62985 +a62986 = 62986 +a62987 = 62987 +a62988 = 62988 +a62989 = 62989 +a62990 = 62990 +a62991 = 62991 +a62992 = 62992 +a62993 = 62993 +a62994 = 62994 +a62995 = 62995 +a62996 = 62996 +a62997 = 62997 +a62998 = 62998 +a62999 = 62999 +a63000 = 63000 +a63001 = 63001 +a63002 = 63002 +a63003 = 63003 +a63004 = 63004 +a63005 = 63005 +a63006 = 63006 +a63007 = 63007 +a63008 = 63008 +a63009 = 63009 +a63010 = 63010 +a63011 = 63011 +a63012 = 63012 +a63013 = 63013 +a63014 = 63014 +a63015 = 63015 +a63016 = 63016 +a63017 = 63017 +a63018 = 63018 +a63019 = 63019 +a63020 = 63020 +a63021 = 63021 +a63022 = 63022 +a63023 = 63023 +a63024 = 63024 +a63025 = 63025 +a63026 = 63026 +a63027 = 63027 +a63028 = 63028 +a63029 = 63029 +a63030 = 63030 +a63031 = 63031 +a63032 = 63032 +a63033 = 63033 +a63034 = 63034 +a63035 = 63035 +a63036 = 63036 +a63037 = 63037 +a63038 = 63038 +a63039 = 63039 +a63040 = 63040 +a63041 = 63041 +a63042 = 63042 +a63043 = 63043 +a63044 = 63044 +a63045 = 63045 +a63046 = 63046 +a63047 = 63047 +a63048 = 63048 +a63049 = 63049 +a63050 = 63050 +a63051 = 63051 +a63052 = 63052 +a63053 = 63053 +a63054 = 63054 +a63055 = 63055 +a63056 = 63056 +a63057 = 63057 +a63058 = 63058 +a63059 = 63059 +a63060 = 63060 +a63061 = 63061 +a63062 = 63062 +a63063 = 63063 +a63064 = 63064 +a63065 = 63065 +a63066 = 63066 +a63067 = 63067 +a63068 = 63068 +a63069 = 63069 +a63070 = 63070 +a63071 = 63071 +a63072 = 63072 +a63073 = 63073 +a63074 = 63074 +a63075 = 63075 +a63076 = 63076 +a63077 = 63077 +a63078 = 63078 +a63079 = 63079 +a63080 = 63080 +a63081 = 63081 +a63082 = 63082 +a63083 = 63083 +a63084 = 63084 +a63085 = 63085 +a63086 = 63086 +a63087 = 63087 +a63088 = 63088 +a63089 = 63089 +a63090 = 63090 +a63091 = 63091 +a63092 = 63092 +a63093 = 63093 +a63094 = 63094 +a63095 = 63095 +a63096 = 63096 +a63097 = 63097 +a63098 = 63098 +a63099 = 63099 +a63100 = 63100 +a63101 = 63101 +a63102 = 63102 +a63103 = 63103 +a63104 = 63104 +a63105 = 63105 +a63106 = 63106 +a63107 = 63107 +a63108 = 63108 +a63109 = 63109 +a63110 = 63110 +a63111 = 63111 +a63112 = 63112 +a63113 = 63113 +a63114 = 63114 +a63115 = 63115 +a63116 = 63116 +a63117 = 63117 +a63118 = 63118 +a63119 = 63119 +a63120 = 63120 +a63121 = 63121 +a63122 = 63122 +a63123 = 63123 +a63124 = 63124 +a63125 = 63125 +a63126 = 63126 +a63127 = 63127 +a63128 = 63128 +a63129 = 63129 +a63130 = 63130 +a63131 = 63131 +a63132 = 63132 +a63133 = 63133 +a63134 = 63134 +a63135 = 63135 +a63136 = 63136 +a63137 = 63137 +a63138 = 63138 +a63139 = 63139 +a63140 = 63140 +a63141 = 63141 +a63142 = 63142 +a63143 = 63143 +a63144 = 63144 +a63145 = 63145 +a63146 = 63146 +a63147 = 63147 +a63148 = 63148 +a63149 = 63149 +a63150 = 63150 +a63151 = 63151 +a63152 = 63152 +a63153 = 63153 +a63154 = 63154 +a63155 = 63155 +a63156 = 63156 +a63157 = 63157 +a63158 = 63158 +a63159 = 63159 +a63160 = 63160 +a63161 = 63161 +a63162 = 63162 +a63163 = 63163 +a63164 = 63164 +a63165 = 63165 +a63166 = 63166 +a63167 = 63167 +a63168 = 63168 +a63169 = 63169 +a63170 = 63170 +a63171 = 63171 +a63172 = 63172 +a63173 = 63173 +a63174 = 63174 +a63175 = 63175 +a63176 = 63176 +a63177 = 63177 +a63178 = 63178 +a63179 = 63179 +a63180 = 63180 +a63181 = 63181 +a63182 = 63182 +a63183 = 63183 +a63184 = 63184 +a63185 = 63185 +a63186 = 63186 +a63187 = 63187 +a63188 = 63188 +a63189 = 63189 +a63190 = 63190 +a63191 = 63191 +a63192 = 63192 +a63193 = 63193 +a63194 = 63194 +a63195 = 63195 +a63196 = 63196 +a63197 = 63197 +a63198 = 63198 +a63199 = 63199 +a63200 = 63200 +a63201 = 63201 +a63202 = 63202 +a63203 = 63203 +a63204 = 63204 +a63205 = 63205 +a63206 = 63206 +a63207 = 63207 +a63208 = 63208 +a63209 = 63209 +a63210 = 63210 +a63211 = 63211 +a63212 = 63212 +a63213 = 63213 +a63214 = 63214 +a63215 = 63215 +a63216 = 63216 +a63217 = 63217 +a63218 = 63218 +a63219 = 63219 +a63220 = 63220 +a63221 = 63221 +a63222 = 63222 +a63223 = 63223 +a63224 = 63224 +a63225 = 63225 +a63226 = 63226 +a63227 = 63227 +a63228 = 63228 +a63229 = 63229 +a63230 = 63230 +a63231 = 63231 +a63232 = 63232 +a63233 = 63233 +a63234 = 63234 +a63235 = 63235 +a63236 = 63236 +a63237 = 63237 +a63238 = 63238 +a63239 = 63239 +a63240 = 63240 +a63241 = 63241 +a63242 = 63242 +a63243 = 63243 +a63244 = 63244 +a63245 = 63245 +a63246 = 63246 +a63247 = 63247 +a63248 = 63248 +a63249 = 63249 +a63250 = 63250 +a63251 = 63251 +a63252 = 63252 +a63253 = 63253 +a63254 = 63254 +a63255 = 63255 +a63256 = 63256 +a63257 = 63257 +a63258 = 63258 +a63259 = 63259 +a63260 = 63260 +a63261 = 63261 +a63262 = 63262 +a63263 = 63263 +a63264 = 63264 +a63265 = 63265 +a63266 = 63266 +a63267 = 63267 +a63268 = 63268 +a63269 = 63269 +a63270 = 63270 +a63271 = 63271 +a63272 = 63272 +a63273 = 63273 +a63274 = 63274 +a63275 = 63275 +a63276 = 63276 +a63277 = 63277 +a63278 = 63278 +a63279 = 63279 +a63280 = 63280 +a63281 = 63281 +a63282 = 63282 +a63283 = 63283 +a63284 = 63284 +a63285 = 63285 +a63286 = 63286 +a63287 = 63287 +a63288 = 63288 +a63289 = 63289 +a63290 = 63290 +a63291 = 63291 +a63292 = 63292 +a63293 = 63293 +a63294 = 63294 +a63295 = 63295 +a63296 = 63296 +a63297 = 63297 +a63298 = 63298 +a63299 = 63299 +a63300 = 63300 +a63301 = 63301 +a63302 = 63302 +a63303 = 63303 +a63304 = 63304 +a63305 = 63305 +a63306 = 63306 +a63307 = 63307 +a63308 = 63308 +a63309 = 63309 +a63310 = 63310 +a63311 = 63311 +a63312 = 63312 +a63313 = 63313 +a63314 = 63314 +a63315 = 63315 +a63316 = 63316 +a63317 = 63317 +a63318 = 63318 +a63319 = 63319 +a63320 = 63320 +a63321 = 63321 +a63322 = 63322 +a63323 = 63323 +a63324 = 63324 +a63325 = 63325 +a63326 = 63326 +a63327 = 63327 +a63328 = 63328 +a63329 = 63329 +a63330 = 63330 +a63331 = 63331 +a63332 = 63332 +a63333 = 63333 +a63334 = 63334 +a63335 = 63335 +a63336 = 63336 +a63337 = 63337 +a63338 = 63338 +a63339 = 63339 +a63340 = 63340 +a63341 = 63341 +a63342 = 63342 +a63343 = 63343 +a63344 = 63344 +a63345 = 63345 +a63346 = 63346 +a63347 = 63347 +a63348 = 63348 +a63349 = 63349 +a63350 = 63350 +a63351 = 63351 +a63352 = 63352 +a63353 = 63353 +a63354 = 63354 +a63355 = 63355 +a63356 = 63356 +a63357 = 63357 +a63358 = 63358 +a63359 = 63359 +a63360 = 63360 +a63361 = 63361 +a63362 = 63362 +a63363 = 63363 +a63364 = 63364 +a63365 = 63365 +a63366 = 63366 +a63367 = 63367 +a63368 = 63368 +a63369 = 63369 +a63370 = 63370 +a63371 = 63371 +a63372 = 63372 +a63373 = 63373 +a63374 = 63374 +a63375 = 63375 +a63376 = 63376 +a63377 = 63377 +a63378 = 63378 +a63379 = 63379 +a63380 = 63380 +a63381 = 63381 +a63382 = 63382 +a63383 = 63383 +a63384 = 63384 +a63385 = 63385 +a63386 = 63386 +a63387 = 63387 +a63388 = 63388 +a63389 = 63389 +a63390 = 63390 +a63391 = 63391 +a63392 = 63392 +a63393 = 63393 +a63394 = 63394 +a63395 = 63395 +a63396 = 63396 +a63397 = 63397 +a63398 = 63398 +a63399 = 63399 +a63400 = 63400 +a63401 = 63401 +a63402 = 63402 +a63403 = 63403 +a63404 = 63404 +a63405 = 63405 +a63406 = 63406 +a63407 = 63407 +a63408 = 63408 +a63409 = 63409 +a63410 = 63410 +a63411 = 63411 +a63412 = 63412 +a63413 = 63413 +a63414 = 63414 +a63415 = 63415 +a63416 = 63416 +a63417 = 63417 +a63418 = 63418 +a63419 = 63419 +a63420 = 63420 +a63421 = 63421 +a63422 = 63422 +a63423 = 63423 +a63424 = 63424 +a63425 = 63425 +a63426 = 63426 +a63427 = 63427 +a63428 = 63428 +a63429 = 63429 +a63430 = 63430 +a63431 = 63431 +a63432 = 63432 +a63433 = 63433 +a63434 = 63434 +a63435 = 63435 +a63436 = 63436 +a63437 = 63437 +a63438 = 63438 +a63439 = 63439 +a63440 = 63440 +a63441 = 63441 +a63442 = 63442 +a63443 = 63443 +a63444 = 63444 +a63445 = 63445 +a63446 = 63446 +a63447 = 63447 +a63448 = 63448 +a63449 = 63449 +a63450 = 63450 +a63451 = 63451 +a63452 = 63452 +a63453 = 63453 +a63454 = 63454 +a63455 = 63455 +a63456 = 63456 +a63457 = 63457 +a63458 = 63458 +a63459 = 63459 +a63460 = 63460 +a63461 = 63461 +a63462 = 63462 +a63463 = 63463 +a63464 = 63464 +a63465 = 63465 +a63466 = 63466 +a63467 = 63467 +a63468 = 63468 +a63469 = 63469 +a63470 = 63470 +a63471 = 63471 +a63472 = 63472 +a63473 = 63473 +a63474 = 63474 +a63475 = 63475 +a63476 = 63476 +a63477 = 63477 +a63478 = 63478 +a63479 = 63479 +a63480 = 63480 +a63481 = 63481 +a63482 = 63482 +a63483 = 63483 +a63484 = 63484 +a63485 = 63485 +a63486 = 63486 +a63487 = 63487 +a63488 = 63488 +a63489 = 63489 +a63490 = 63490 +a63491 = 63491 +a63492 = 63492 +a63493 = 63493 +a63494 = 63494 +a63495 = 63495 +a63496 = 63496 +a63497 = 63497 +a63498 = 63498 +a63499 = 63499 +a63500 = 63500 +a63501 = 63501 +a63502 = 63502 +a63503 = 63503 +a63504 = 63504 +a63505 = 63505 +a63506 = 63506 +a63507 = 63507 +a63508 = 63508 +a63509 = 63509 +a63510 = 63510 +a63511 = 63511 +a63512 = 63512 +a63513 = 63513 +a63514 = 63514 +a63515 = 63515 +a63516 = 63516 +a63517 = 63517 +a63518 = 63518 +a63519 = 63519 +a63520 = 63520 +a63521 = 63521 +a63522 = 63522 +a63523 = 63523 +a63524 = 63524 +a63525 = 63525 +a63526 = 63526 +a63527 = 63527 +a63528 = 63528 +a63529 = 63529 +a63530 = 63530 +a63531 = 63531 +a63532 = 63532 +a63533 = 63533 +a63534 = 63534 +a63535 = 63535 +a63536 = 63536 +a63537 = 63537 +a63538 = 63538 +a63539 = 63539 +a63540 = 63540 +a63541 = 63541 +a63542 = 63542 +a63543 = 63543 +a63544 = 63544 +a63545 = 63545 +a63546 = 63546 +a63547 = 63547 +a63548 = 63548 +a63549 = 63549 +a63550 = 63550 +a63551 = 63551 +a63552 = 63552 +a63553 = 63553 +a63554 = 63554 +a63555 = 63555 +a63556 = 63556 +a63557 = 63557 +a63558 = 63558 +a63559 = 63559 +a63560 = 63560 +a63561 = 63561 +a63562 = 63562 +a63563 = 63563 +a63564 = 63564 +a63565 = 63565 +a63566 = 63566 +a63567 = 63567 +a63568 = 63568 +a63569 = 63569 +a63570 = 63570 +a63571 = 63571 +a63572 = 63572 +a63573 = 63573 +a63574 = 63574 +a63575 = 63575 +a63576 = 63576 +a63577 = 63577 +a63578 = 63578 +a63579 = 63579 +a63580 = 63580 +a63581 = 63581 +a63582 = 63582 +a63583 = 63583 +a63584 = 63584 +a63585 = 63585 +a63586 = 63586 +a63587 = 63587 +a63588 = 63588 +a63589 = 63589 +a63590 = 63590 +a63591 = 63591 +a63592 = 63592 +a63593 = 63593 +a63594 = 63594 +a63595 = 63595 +a63596 = 63596 +a63597 = 63597 +a63598 = 63598 +a63599 = 63599 +a63600 = 63600 +a63601 = 63601 +a63602 = 63602 +a63603 = 63603 +a63604 = 63604 +a63605 = 63605 +a63606 = 63606 +a63607 = 63607 +a63608 = 63608 +a63609 = 63609 +a63610 = 63610 +a63611 = 63611 +a63612 = 63612 +a63613 = 63613 +a63614 = 63614 +a63615 = 63615 +a63616 = 63616 +a63617 = 63617 +a63618 = 63618 +a63619 = 63619 +a63620 = 63620 +a63621 = 63621 +a63622 = 63622 +a63623 = 63623 +a63624 = 63624 +a63625 = 63625 +a63626 = 63626 +a63627 = 63627 +a63628 = 63628 +a63629 = 63629 +a63630 = 63630 +a63631 = 63631 +a63632 = 63632 +a63633 = 63633 +a63634 = 63634 +a63635 = 63635 +a63636 = 63636 +a63637 = 63637 +a63638 = 63638 +a63639 = 63639 +a63640 = 63640 +a63641 = 63641 +a63642 = 63642 +a63643 = 63643 +a63644 = 63644 +a63645 = 63645 +a63646 = 63646 +a63647 = 63647 +a63648 = 63648 +a63649 = 63649 +a63650 = 63650 +a63651 = 63651 +a63652 = 63652 +a63653 = 63653 +a63654 = 63654 +a63655 = 63655 +a63656 = 63656 +a63657 = 63657 +a63658 = 63658 +a63659 = 63659 +a63660 = 63660 +a63661 = 63661 +a63662 = 63662 +a63663 = 63663 +a63664 = 63664 +a63665 = 63665 +a63666 = 63666 +a63667 = 63667 +a63668 = 63668 +a63669 = 63669 +a63670 = 63670 +a63671 = 63671 +a63672 = 63672 +a63673 = 63673 +a63674 = 63674 +a63675 = 63675 +a63676 = 63676 +a63677 = 63677 +a63678 = 63678 +a63679 = 63679 +a63680 = 63680 +a63681 = 63681 +a63682 = 63682 +a63683 = 63683 +a63684 = 63684 +a63685 = 63685 +a63686 = 63686 +a63687 = 63687 +a63688 = 63688 +a63689 = 63689 +a63690 = 63690 +a63691 = 63691 +a63692 = 63692 +a63693 = 63693 +a63694 = 63694 +a63695 = 63695 +a63696 = 63696 +a63697 = 63697 +a63698 = 63698 +a63699 = 63699 +a63700 = 63700 +a63701 = 63701 +a63702 = 63702 +a63703 = 63703 +a63704 = 63704 +a63705 = 63705 +a63706 = 63706 +a63707 = 63707 +a63708 = 63708 +a63709 = 63709 +a63710 = 63710 +a63711 = 63711 +a63712 = 63712 +a63713 = 63713 +a63714 = 63714 +a63715 = 63715 +a63716 = 63716 +a63717 = 63717 +a63718 = 63718 +a63719 = 63719 +a63720 = 63720 +a63721 = 63721 +a63722 = 63722 +a63723 = 63723 +a63724 = 63724 +a63725 = 63725 +a63726 = 63726 +a63727 = 63727 +a63728 = 63728 +a63729 = 63729 +a63730 = 63730 +a63731 = 63731 +a63732 = 63732 +a63733 = 63733 +a63734 = 63734 +a63735 = 63735 +a63736 = 63736 +a63737 = 63737 +a63738 = 63738 +a63739 = 63739 +a63740 = 63740 +a63741 = 63741 +a63742 = 63742 +a63743 = 63743 +a63744 = 63744 +a63745 = 63745 +a63746 = 63746 +a63747 = 63747 +a63748 = 63748 +a63749 = 63749 +a63750 = 63750 +a63751 = 63751 +a63752 = 63752 +a63753 = 63753 +a63754 = 63754 +a63755 = 63755 +a63756 = 63756 +a63757 = 63757 +a63758 = 63758 +a63759 = 63759 +a63760 = 63760 +a63761 = 63761 +a63762 = 63762 +a63763 = 63763 +a63764 = 63764 +a63765 = 63765 +a63766 = 63766 +a63767 = 63767 +a63768 = 63768 +a63769 = 63769 +a63770 = 63770 +a63771 = 63771 +a63772 = 63772 +a63773 = 63773 +a63774 = 63774 +a63775 = 63775 +a63776 = 63776 +a63777 = 63777 +a63778 = 63778 +a63779 = 63779 +a63780 = 63780 +a63781 = 63781 +a63782 = 63782 +a63783 = 63783 +a63784 = 63784 +a63785 = 63785 +a63786 = 63786 +a63787 = 63787 +a63788 = 63788 +a63789 = 63789 +a63790 = 63790 +a63791 = 63791 +a63792 = 63792 +a63793 = 63793 +a63794 = 63794 +a63795 = 63795 +a63796 = 63796 +a63797 = 63797 +a63798 = 63798 +a63799 = 63799 +a63800 = 63800 +a63801 = 63801 +a63802 = 63802 +a63803 = 63803 +a63804 = 63804 +a63805 = 63805 +a63806 = 63806 +a63807 = 63807 +a63808 = 63808 +a63809 = 63809 +a63810 = 63810 +a63811 = 63811 +a63812 = 63812 +a63813 = 63813 +a63814 = 63814 +a63815 = 63815 +a63816 = 63816 +a63817 = 63817 +a63818 = 63818 +a63819 = 63819 +a63820 = 63820 +a63821 = 63821 +a63822 = 63822 +a63823 = 63823 +a63824 = 63824 +a63825 = 63825 +a63826 = 63826 +a63827 = 63827 +a63828 = 63828 +a63829 = 63829 +a63830 = 63830 +a63831 = 63831 +a63832 = 63832 +a63833 = 63833 +a63834 = 63834 +a63835 = 63835 +a63836 = 63836 +a63837 = 63837 +a63838 = 63838 +a63839 = 63839 +a63840 = 63840 +a63841 = 63841 +a63842 = 63842 +a63843 = 63843 +a63844 = 63844 +a63845 = 63845 +a63846 = 63846 +a63847 = 63847 +a63848 = 63848 +a63849 = 63849 +a63850 = 63850 +a63851 = 63851 +a63852 = 63852 +a63853 = 63853 +a63854 = 63854 +a63855 = 63855 +a63856 = 63856 +a63857 = 63857 +a63858 = 63858 +a63859 = 63859 +a63860 = 63860 +a63861 = 63861 +a63862 = 63862 +a63863 = 63863 +a63864 = 63864 +a63865 = 63865 +a63866 = 63866 +a63867 = 63867 +a63868 = 63868 +a63869 = 63869 +a63870 = 63870 +a63871 = 63871 +a63872 = 63872 +a63873 = 63873 +a63874 = 63874 +a63875 = 63875 +a63876 = 63876 +a63877 = 63877 +a63878 = 63878 +a63879 = 63879 +a63880 = 63880 +a63881 = 63881 +a63882 = 63882 +a63883 = 63883 +a63884 = 63884 +a63885 = 63885 +a63886 = 63886 +a63887 = 63887 +a63888 = 63888 +a63889 = 63889 +a63890 = 63890 +a63891 = 63891 +a63892 = 63892 +a63893 = 63893 +a63894 = 63894 +a63895 = 63895 +a63896 = 63896 +a63897 = 63897 +a63898 = 63898 +a63899 = 63899 +a63900 = 63900 +a63901 = 63901 +a63902 = 63902 +a63903 = 63903 +a63904 = 63904 +a63905 = 63905 +a63906 = 63906 +a63907 = 63907 +a63908 = 63908 +a63909 = 63909 +a63910 = 63910 +a63911 = 63911 +a63912 = 63912 +a63913 = 63913 +a63914 = 63914 +a63915 = 63915 +a63916 = 63916 +a63917 = 63917 +a63918 = 63918 +a63919 = 63919 +a63920 = 63920 +a63921 = 63921 +a63922 = 63922 +a63923 = 63923 +a63924 = 63924 +a63925 = 63925 +a63926 = 63926 +a63927 = 63927 +a63928 = 63928 +a63929 = 63929 +a63930 = 63930 +a63931 = 63931 +a63932 = 63932 +a63933 = 63933 +a63934 = 63934 +a63935 = 63935 +a63936 = 63936 +a63937 = 63937 +a63938 = 63938 +a63939 = 63939 +a63940 = 63940 +a63941 = 63941 +a63942 = 63942 +a63943 = 63943 +a63944 = 63944 +a63945 = 63945 +a63946 = 63946 +a63947 = 63947 +a63948 = 63948 +a63949 = 63949 +a63950 = 63950 +a63951 = 63951 +a63952 = 63952 +a63953 = 63953 +a63954 = 63954 +a63955 = 63955 +a63956 = 63956 +a63957 = 63957 +a63958 = 63958 +a63959 = 63959 +a63960 = 63960 +a63961 = 63961 +a63962 = 63962 +a63963 = 63963 +a63964 = 63964 +a63965 = 63965 +a63966 = 63966 +a63967 = 63967 +a63968 = 63968 +a63969 = 63969 +a63970 = 63970 +a63971 = 63971 +a63972 = 63972 +a63973 = 63973 +a63974 = 63974 +a63975 = 63975 +a63976 = 63976 +a63977 = 63977 +a63978 = 63978 +a63979 = 63979 +a63980 = 63980 +a63981 = 63981 +a63982 = 63982 +a63983 = 63983 +a63984 = 63984 +a63985 = 63985 +a63986 = 63986 +a63987 = 63987 +a63988 = 63988 +a63989 = 63989 +a63990 = 63990 +a63991 = 63991 +a63992 = 63992 +a63993 = 63993 +a63994 = 63994 +a63995 = 63995 +a63996 = 63996 +a63997 = 63997 +a63998 = 63998 +a63999 = 63999 +a64000 = 64000 +a64001 = 64001 +a64002 = 64002 +a64003 = 64003 +a64004 = 64004 +a64005 = 64005 +a64006 = 64006 +a64007 = 64007 +a64008 = 64008 +a64009 = 64009 +a64010 = 64010 +a64011 = 64011 +a64012 = 64012 +a64013 = 64013 +a64014 = 64014 +a64015 = 64015 +a64016 = 64016 +a64017 = 64017 +a64018 = 64018 +a64019 = 64019 +a64020 = 64020 +a64021 = 64021 +a64022 = 64022 +a64023 = 64023 +a64024 = 64024 +a64025 = 64025 +a64026 = 64026 +a64027 = 64027 +a64028 = 64028 +a64029 = 64029 +a64030 = 64030 +a64031 = 64031 +a64032 = 64032 +a64033 = 64033 +a64034 = 64034 +a64035 = 64035 +a64036 = 64036 +a64037 = 64037 +a64038 = 64038 +a64039 = 64039 +a64040 = 64040 +a64041 = 64041 +a64042 = 64042 +a64043 = 64043 +a64044 = 64044 +a64045 = 64045 +a64046 = 64046 +a64047 = 64047 +a64048 = 64048 +a64049 = 64049 +a64050 = 64050 +a64051 = 64051 +a64052 = 64052 +a64053 = 64053 +a64054 = 64054 +a64055 = 64055 +a64056 = 64056 +a64057 = 64057 +a64058 = 64058 +a64059 = 64059 +a64060 = 64060 +a64061 = 64061 +a64062 = 64062 +a64063 = 64063 +a64064 = 64064 +a64065 = 64065 +a64066 = 64066 +a64067 = 64067 +a64068 = 64068 +a64069 = 64069 +a64070 = 64070 +a64071 = 64071 +a64072 = 64072 +a64073 = 64073 +a64074 = 64074 +a64075 = 64075 +a64076 = 64076 +a64077 = 64077 +a64078 = 64078 +a64079 = 64079 +a64080 = 64080 +a64081 = 64081 +a64082 = 64082 +a64083 = 64083 +a64084 = 64084 +a64085 = 64085 +a64086 = 64086 +a64087 = 64087 +a64088 = 64088 +a64089 = 64089 +a64090 = 64090 +a64091 = 64091 +a64092 = 64092 +a64093 = 64093 +a64094 = 64094 +a64095 = 64095 +a64096 = 64096 +a64097 = 64097 +a64098 = 64098 +a64099 = 64099 +a64100 = 64100 +a64101 = 64101 +a64102 = 64102 +a64103 = 64103 +a64104 = 64104 +a64105 = 64105 +a64106 = 64106 +a64107 = 64107 +a64108 = 64108 +a64109 = 64109 +a64110 = 64110 +a64111 = 64111 +a64112 = 64112 +a64113 = 64113 +a64114 = 64114 +a64115 = 64115 +a64116 = 64116 +a64117 = 64117 +a64118 = 64118 +a64119 = 64119 +a64120 = 64120 +a64121 = 64121 +a64122 = 64122 +a64123 = 64123 +a64124 = 64124 +a64125 = 64125 +a64126 = 64126 +a64127 = 64127 +a64128 = 64128 +a64129 = 64129 +a64130 = 64130 +a64131 = 64131 +a64132 = 64132 +a64133 = 64133 +a64134 = 64134 +a64135 = 64135 +a64136 = 64136 +a64137 = 64137 +a64138 = 64138 +a64139 = 64139 +a64140 = 64140 +a64141 = 64141 +a64142 = 64142 +a64143 = 64143 +a64144 = 64144 +a64145 = 64145 +a64146 = 64146 +a64147 = 64147 +a64148 = 64148 +a64149 = 64149 +a64150 = 64150 +a64151 = 64151 +a64152 = 64152 +a64153 = 64153 +a64154 = 64154 +a64155 = 64155 +a64156 = 64156 +a64157 = 64157 +a64158 = 64158 +a64159 = 64159 +a64160 = 64160 +a64161 = 64161 +a64162 = 64162 +a64163 = 64163 +a64164 = 64164 +a64165 = 64165 +a64166 = 64166 +a64167 = 64167 +a64168 = 64168 +a64169 = 64169 +a64170 = 64170 +a64171 = 64171 +a64172 = 64172 +a64173 = 64173 +a64174 = 64174 +a64175 = 64175 +a64176 = 64176 +a64177 = 64177 +a64178 = 64178 +a64179 = 64179 +a64180 = 64180 +a64181 = 64181 +a64182 = 64182 +a64183 = 64183 +a64184 = 64184 +a64185 = 64185 +a64186 = 64186 +a64187 = 64187 +a64188 = 64188 +a64189 = 64189 +a64190 = 64190 +a64191 = 64191 +a64192 = 64192 +a64193 = 64193 +a64194 = 64194 +a64195 = 64195 +a64196 = 64196 +a64197 = 64197 +a64198 = 64198 +a64199 = 64199 +a64200 = 64200 +a64201 = 64201 +a64202 = 64202 +a64203 = 64203 +a64204 = 64204 +a64205 = 64205 +a64206 = 64206 +a64207 = 64207 +a64208 = 64208 +a64209 = 64209 +a64210 = 64210 +a64211 = 64211 +a64212 = 64212 +a64213 = 64213 +a64214 = 64214 +a64215 = 64215 +a64216 = 64216 +a64217 = 64217 +a64218 = 64218 +a64219 = 64219 +a64220 = 64220 +a64221 = 64221 +a64222 = 64222 +a64223 = 64223 +a64224 = 64224 +a64225 = 64225 +a64226 = 64226 +a64227 = 64227 +a64228 = 64228 +a64229 = 64229 +a64230 = 64230 +a64231 = 64231 +a64232 = 64232 +a64233 = 64233 +a64234 = 64234 +a64235 = 64235 +a64236 = 64236 +a64237 = 64237 +a64238 = 64238 +a64239 = 64239 +a64240 = 64240 +a64241 = 64241 +a64242 = 64242 +a64243 = 64243 +a64244 = 64244 +a64245 = 64245 +a64246 = 64246 +a64247 = 64247 +a64248 = 64248 +a64249 = 64249 +a64250 = 64250 +a64251 = 64251 +a64252 = 64252 +a64253 = 64253 +a64254 = 64254 +a64255 = 64255 +a64256 = 64256 +a64257 = 64257 +a64258 = 64258 +a64259 = 64259 +a64260 = 64260 +a64261 = 64261 +a64262 = 64262 +a64263 = 64263 +a64264 = 64264 +a64265 = 64265 +a64266 = 64266 +a64267 = 64267 +a64268 = 64268 +a64269 = 64269 +a64270 = 64270 +a64271 = 64271 +a64272 = 64272 +a64273 = 64273 +a64274 = 64274 +a64275 = 64275 +a64276 = 64276 +a64277 = 64277 +a64278 = 64278 +a64279 = 64279 +a64280 = 64280 +a64281 = 64281 +a64282 = 64282 +a64283 = 64283 +a64284 = 64284 +a64285 = 64285 +a64286 = 64286 +a64287 = 64287 +a64288 = 64288 +a64289 = 64289 +a64290 = 64290 +a64291 = 64291 +a64292 = 64292 +a64293 = 64293 +a64294 = 64294 +a64295 = 64295 +a64296 = 64296 +a64297 = 64297 +a64298 = 64298 +a64299 = 64299 +a64300 = 64300 +a64301 = 64301 +a64302 = 64302 +a64303 = 64303 +a64304 = 64304 +a64305 = 64305 +a64306 = 64306 +a64307 = 64307 +a64308 = 64308 +a64309 = 64309 +a64310 = 64310 +a64311 = 64311 +a64312 = 64312 +a64313 = 64313 +a64314 = 64314 +a64315 = 64315 +a64316 = 64316 +a64317 = 64317 +a64318 = 64318 +a64319 = 64319 +a64320 = 64320 +a64321 = 64321 +a64322 = 64322 +a64323 = 64323 +a64324 = 64324 +a64325 = 64325 +a64326 = 64326 +a64327 = 64327 +a64328 = 64328 +a64329 = 64329 +a64330 = 64330 +a64331 = 64331 +a64332 = 64332 +a64333 = 64333 +a64334 = 64334 +a64335 = 64335 +a64336 = 64336 +a64337 = 64337 +a64338 = 64338 +a64339 = 64339 +a64340 = 64340 +a64341 = 64341 +a64342 = 64342 +a64343 = 64343 +a64344 = 64344 +a64345 = 64345 +a64346 = 64346 +a64347 = 64347 +a64348 = 64348 +a64349 = 64349 +a64350 = 64350 +a64351 = 64351 +a64352 = 64352 +a64353 = 64353 +a64354 = 64354 +a64355 = 64355 +a64356 = 64356 +a64357 = 64357 +a64358 = 64358 +a64359 = 64359 +a64360 = 64360 +a64361 = 64361 +a64362 = 64362 +a64363 = 64363 +a64364 = 64364 +a64365 = 64365 +a64366 = 64366 +a64367 = 64367 +a64368 = 64368 +a64369 = 64369 +a64370 = 64370 +a64371 = 64371 +a64372 = 64372 +a64373 = 64373 +a64374 = 64374 +a64375 = 64375 +a64376 = 64376 +a64377 = 64377 +a64378 = 64378 +a64379 = 64379 +a64380 = 64380 +a64381 = 64381 +a64382 = 64382 +a64383 = 64383 +a64384 = 64384 +a64385 = 64385 +a64386 = 64386 +a64387 = 64387 +a64388 = 64388 +a64389 = 64389 +a64390 = 64390 +a64391 = 64391 +a64392 = 64392 +a64393 = 64393 +a64394 = 64394 +a64395 = 64395 +a64396 = 64396 +a64397 = 64397 +a64398 = 64398 +a64399 = 64399 +a64400 = 64400 +a64401 = 64401 +a64402 = 64402 +a64403 = 64403 +a64404 = 64404 +a64405 = 64405 +a64406 = 64406 +a64407 = 64407 +a64408 = 64408 +a64409 = 64409 +a64410 = 64410 +a64411 = 64411 +a64412 = 64412 +a64413 = 64413 +a64414 = 64414 +a64415 = 64415 +a64416 = 64416 +a64417 = 64417 +a64418 = 64418 +a64419 = 64419 +a64420 = 64420 +a64421 = 64421 +a64422 = 64422 +a64423 = 64423 +a64424 = 64424 +a64425 = 64425 +a64426 = 64426 +a64427 = 64427 +a64428 = 64428 +a64429 = 64429 +a64430 = 64430 +a64431 = 64431 +a64432 = 64432 +a64433 = 64433 +a64434 = 64434 +a64435 = 64435 +a64436 = 64436 +a64437 = 64437 +a64438 = 64438 +a64439 = 64439 +a64440 = 64440 +a64441 = 64441 +a64442 = 64442 +a64443 = 64443 +a64444 = 64444 +a64445 = 64445 +a64446 = 64446 +a64447 = 64447 +a64448 = 64448 +a64449 = 64449 +a64450 = 64450 +a64451 = 64451 +a64452 = 64452 +a64453 = 64453 +a64454 = 64454 +a64455 = 64455 +a64456 = 64456 +a64457 = 64457 +a64458 = 64458 +a64459 = 64459 +a64460 = 64460 +a64461 = 64461 +a64462 = 64462 +a64463 = 64463 +a64464 = 64464 +a64465 = 64465 +a64466 = 64466 +a64467 = 64467 +a64468 = 64468 +a64469 = 64469 +a64470 = 64470 +a64471 = 64471 +a64472 = 64472 +a64473 = 64473 +a64474 = 64474 +a64475 = 64475 +a64476 = 64476 +a64477 = 64477 +a64478 = 64478 +a64479 = 64479 +a64480 = 64480 +a64481 = 64481 +a64482 = 64482 +a64483 = 64483 +a64484 = 64484 +a64485 = 64485 +a64486 = 64486 +a64487 = 64487 +a64488 = 64488 +a64489 = 64489 +a64490 = 64490 +a64491 = 64491 +a64492 = 64492 +a64493 = 64493 +a64494 = 64494 +a64495 = 64495 +a64496 = 64496 +a64497 = 64497 +a64498 = 64498 +a64499 = 64499 +a64500 = 64500 +a64501 = 64501 +a64502 = 64502 +a64503 = 64503 +a64504 = 64504 +a64505 = 64505 +a64506 = 64506 +a64507 = 64507 +a64508 = 64508 +a64509 = 64509 +a64510 = 64510 +a64511 = 64511 +a64512 = 64512 +a64513 = 64513 +a64514 = 64514 +a64515 = 64515 +a64516 = 64516 +a64517 = 64517 +a64518 = 64518 +a64519 = 64519 +a64520 = 64520 +a64521 = 64521 +a64522 = 64522 +a64523 = 64523 +a64524 = 64524 +a64525 = 64525 +a64526 = 64526 +a64527 = 64527 +a64528 = 64528 +a64529 = 64529 +a64530 = 64530 +a64531 = 64531 +a64532 = 64532 +a64533 = 64533 +a64534 = 64534 +a64535 = 64535 +a64536 = 64536 +a64537 = 64537 +a64538 = 64538 +a64539 = 64539 +a64540 = 64540 +a64541 = 64541 +a64542 = 64542 +a64543 = 64543 +a64544 = 64544 +a64545 = 64545 +a64546 = 64546 +a64547 = 64547 +a64548 = 64548 +a64549 = 64549 +a64550 = 64550 +a64551 = 64551 +a64552 = 64552 +a64553 = 64553 +a64554 = 64554 +a64555 = 64555 +a64556 = 64556 +a64557 = 64557 +a64558 = 64558 +a64559 = 64559 +a64560 = 64560 +a64561 = 64561 +a64562 = 64562 +a64563 = 64563 +a64564 = 64564 +a64565 = 64565 +a64566 = 64566 +a64567 = 64567 +a64568 = 64568 +a64569 = 64569 +a64570 = 64570 +a64571 = 64571 +a64572 = 64572 +a64573 = 64573 +a64574 = 64574 +a64575 = 64575 +a64576 = 64576 +a64577 = 64577 +a64578 = 64578 +a64579 = 64579 +a64580 = 64580 +a64581 = 64581 +a64582 = 64582 +a64583 = 64583 +a64584 = 64584 +a64585 = 64585 +a64586 = 64586 +a64587 = 64587 +a64588 = 64588 +a64589 = 64589 +a64590 = 64590 +a64591 = 64591 +a64592 = 64592 +a64593 = 64593 +a64594 = 64594 +a64595 = 64595 +a64596 = 64596 +a64597 = 64597 +a64598 = 64598 +a64599 = 64599 +a64600 = 64600 +a64601 = 64601 +a64602 = 64602 +a64603 = 64603 +a64604 = 64604 +a64605 = 64605 +a64606 = 64606 +a64607 = 64607 +a64608 = 64608 +a64609 = 64609 +a64610 = 64610 +a64611 = 64611 +a64612 = 64612 +a64613 = 64613 +a64614 = 64614 +a64615 = 64615 +a64616 = 64616 +a64617 = 64617 +a64618 = 64618 +a64619 = 64619 +a64620 = 64620 +a64621 = 64621 +a64622 = 64622 +a64623 = 64623 +a64624 = 64624 +a64625 = 64625 +a64626 = 64626 +a64627 = 64627 +a64628 = 64628 +a64629 = 64629 +a64630 = 64630 +a64631 = 64631 +a64632 = 64632 +a64633 = 64633 +a64634 = 64634 +a64635 = 64635 +a64636 = 64636 +a64637 = 64637 +a64638 = 64638 +a64639 = 64639 +a64640 = 64640 +a64641 = 64641 +a64642 = 64642 +a64643 = 64643 +a64644 = 64644 +a64645 = 64645 +a64646 = 64646 +a64647 = 64647 +a64648 = 64648 +a64649 = 64649 +a64650 = 64650 +a64651 = 64651 +a64652 = 64652 +a64653 = 64653 +a64654 = 64654 +a64655 = 64655 +a64656 = 64656 +a64657 = 64657 +a64658 = 64658 +a64659 = 64659 +a64660 = 64660 +a64661 = 64661 +a64662 = 64662 +a64663 = 64663 +a64664 = 64664 +a64665 = 64665 +a64666 = 64666 +a64667 = 64667 +a64668 = 64668 +a64669 = 64669 +a64670 = 64670 +a64671 = 64671 +a64672 = 64672 +a64673 = 64673 +a64674 = 64674 +a64675 = 64675 +a64676 = 64676 +a64677 = 64677 +a64678 = 64678 +a64679 = 64679 +a64680 = 64680 +a64681 = 64681 +a64682 = 64682 +a64683 = 64683 +a64684 = 64684 +a64685 = 64685 +a64686 = 64686 +a64687 = 64687 +a64688 = 64688 +a64689 = 64689 +a64690 = 64690 +a64691 = 64691 +a64692 = 64692 +a64693 = 64693 +a64694 = 64694 +a64695 = 64695 +a64696 = 64696 +a64697 = 64697 +a64698 = 64698 +a64699 = 64699 +a64700 = 64700 +a64701 = 64701 +a64702 = 64702 +a64703 = 64703 +a64704 = 64704 +a64705 = 64705 +a64706 = 64706 +a64707 = 64707 +a64708 = 64708 +a64709 = 64709 +a64710 = 64710 +a64711 = 64711 +a64712 = 64712 +a64713 = 64713 +a64714 = 64714 +a64715 = 64715 +a64716 = 64716 +a64717 = 64717 +a64718 = 64718 +a64719 = 64719 +a64720 = 64720 +a64721 = 64721 +a64722 = 64722 +a64723 = 64723 +a64724 = 64724 +a64725 = 64725 +a64726 = 64726 +a64727 = 64727 +a64728 = 64728 +a64729 = 64729 +a64730 = 64730 +a64731 = 64731 +a64732 = 64732 +a64733 = 64733 +a64734 = 64734 +a64735 = 64735 +a64736 = 64736 +a64737 = 64737 +a64738 = 64738 +a64739 = 64739 +a64740 = 64740 +a64741 = 64741 +a64742 = 64742 +a64743 = 64743 +a64744 = 64744 +a64745 = 64745 +a64746 = 64746 +a64747 = 64747 +a64748 = 64748 +a64749 = 64749 +a64750 = 64750 +a64751 = 64751 +a64752 = 64752 +a64753 = 64753 +a64754 = 64754 +a64755 = 64755 +a64756 = 64756 +a64757 = 64757 +a64758 = 64758 +a64759 = 64759 +a64760 = 64760 +a64761 = 64761 +a64762 = 64762 +a64763 = 64763 +a64764 = 64764 +a64765 = 64765 +a64766 = 64766 +a64767 = 64767 +a64768 = 64768 +a64769 = 64769 +a64770 = 64770 +a64771 = 64771 +a64772 = 64772 +a64773 = 64773 +a64774 = 64774 +a64775 = 64775 +a64776 = 64776 +a64777 = 64777 +a64778 = 64778 +a64779 = 64779 +a64780 = 64780 +a64781 = 64781 +a64782 = 64782 +a64783 = 64783 +a64784 = 64784 +a64785 = 64785 +a64786 = 64786 +a64787 = 64787 +a64788 = 64788 +a64789 = 64789 +a64790 = 64790 +a64791 = 64791 +a64792 = 64792 +a64793 = 64793 +a64794 = 64794 +a64795 = 64795 +a64796 = 64796 +a64797 = 64797 +a64798 = 64798 +a64799 = 64799 +a64800 = 64800 +a64801 = 64801 +a64802 = 64802 +a64803 = 64803 +a64804 = 64804 +a64805 = 64805 +a64806 = 64806 +a64807 = 64807 +a64808 = 64808 +a64809 = 64809 +a64810 = 64810 +a64811 = 64811 +a64812 = 64812 +a64813 = 64813 +a64814 = 64814 +a64815 = 64815 +a64816 = 64816 +a64817 = 64817 +a64818 = 64818 +a64819 = 64819 +a64820 = 64820 +a64821 = 64821 +a64822 = 64822 +a64823 = 64823 +a64824 = 64824 +a64825 = 64825 +a64826 = 64826 +a64827 = 64827 +a64828 = 64828 +a64829 = 64829 +a64830 = 64830 +a64831 = 64831 +a64832 = 64832 +a64833 = 64833 +a64834 = 64834 +a64835 = 64835 +a64836 = 64836 +a64837 = 64837 +a64838 = 64838 +a64839 = 64839 +a64840 = 64840 +a64841 = 64841 +a64842 = 64842 +a64843 = 64843 +a64844 = 64844 +a64845 = 64845 +a64846 = 64846 +a64847 = 64847 +a64848 = 64848 +a64849 = 64849 +a64850 = 64850 +a64851 = 64851 +a64852 = 64852 +a64853 = 64853 +a64854 = 64854 +a64855 = 64855 +a64856 = 64856 +a64857 = 64857 +a64858 = 64858 +a64859 = 64859 +a64860 = 64860 +a64861 = 64861 +a64862 = 64862 +a64863 = 64863 +a64864 = 64864 +a64865 = 64865 +a64866 = 64866 +a64867 = 64867 +a64868 = 64868 +a64869 = 64869 +a64870 = 64870 +a64871 = 64871 +a64872 = 64872 +a64873 = 64873 +a64874 = 64874 +a64875 = 64875 +a64876 = 64876 +a64877 = 64877 +a64878 = 64878 +a64879 = 64879 +a64880 = 64880 +a64881 = 64881 +a64882 = 64882 +a64883 = 64883 +a64884 = 64884 +a64885 = 64885 +a64886 = 64886 +a64887 = 64887 +a64888 = 64888 +a64889 = 64889 +a64890 = 64890 +a64891 = 64891 +a64892 = 64892 +a64893 = 64893 +a64894 = 64894 +a64895 = 64895 +a64896 = 64896 +a64897 = 64897 +a64898 = 64898 +a64899 = 64899 +a64900 = 64900 +a64901 = 64901 +a64902 = 64902 +a64903 = 64903 +a64904 = 64904 +a64905 = 64905 +a64906 = 64906 +a64907 = 64907 +a64908 = 64908 +a64909 = 64909 +a64910 = 64910 +a64911 = 64911 +a64912 = 64912 +a64913 = 64913 +a64914 = 64914 +a64915 = 64915 +a64916 = 64916 +a64917 = 64917 +a64918 = 64918 +a64919 = 64919 +a64920 = 64920 +a64921 = 64921 +a64922 = 64922 +a64923 = 64923 +a64924 = 64924 +a64925 = 64925 +a64926 = 64926 +a64927 = 64927 +a64928 = 64928 +a64929 = 64929 +a64930 = 64930 +a64931 = 64931 +a64932 = 64932 +a64933 = 64933 +a64934 = 64934 +a64935 = 64935 +a64936 = 64936 +a64937 = 64937 +a64938 = 64938 +a64939 = 64939 +a64940 = 64940 +a64941 = 64941 +a64942 = 64942 +a64943 = 64943 +a64944 = 64944 +a64945 = 64945 +a64946 = 64946 +a64947 = 64947 +a64948 = 64948 +a64949 = 64949 +a64950 = 64950 +a64951 = 64951 +a64952 = 64952 +a64953 = 64953 +a64954 = 64954 +a64955 = 64955 +a64956 = 64956 +a64957 = 64957 +a64958 = 64958 +a64959 = 64959 +a64960 = 64960 +a64961 = 64961 +a64962 = 64962 +a64963 = 64963 +a64964 = 64964 +a64965 = 64965 +a64966 = 64966 +a64967 = 64967 +a64968 = 64968 +a64969 = 64969 +a64970 = 64970 +a64971 = 64971 +a64972 = 64972 +a64973 = 64973 +a64974 = 64974 +a64975 = 64975 +a64976 = 64976 +a64977 = 64977 +a64978 = 64978 +a64979 = 64979 +a64980 = 64980 +a64981 = 64981 +a64982 = 64982 +a64983 = 64983 +a64984 = 64984 +a64985 = 64985 +a64986 = 64986 +a64987 = 64987 +a64988 = 64988 +a64989 = 64989 +a64990 = 64990 +a64991 = 64991 +a64992 = 64992 +a64993 = 64993 +a64994 = 64994 +a64995 = 64995 +a64996 = 64996 +a64997 = 64997 +a64998 = 64998 +a64999 = 64999 +a65000 = 65000 +a65001 = 65001 +a65002 = 65002 +a65003 = 65003 +a65004 = 65004 +a65005 = 65005 +a65006 = 65006 +a65007 = 65007 +a65008 = 65008 +a65009 = 65009 +a65010 = 65010 +a65011 = 65011 +a65012 = 65012 +a65013 = 65013 +a65014 = 65014 +a65015 = 65015 +a65016 = 65016 +a65017 = 65017 +a65018 = 65018 +a65019 = 65019 +a65020 = 65020 +a65021 = 65021 +a65022 = 65022 +a65023 = 65023 +a65024 = 65024 +a65025 = 65025 +a65026 = 65026 +a65027 = 65027 +a65028 = 65028 +a65029 = 65029 +a65030 = 65030 +a65031 = 65031 +a65032 = 65032 +a65033 = 65033 +a65034 = 65034 +a65035 = 65035 +a65036 = 65036 +a65037 = 65037 +a65038 = 65038 +a65039 = 65039 +a65040 = 65040 +a65041 = 65041 +a65042 = 65042 +a65043 = 65043 +a65044 = 65044 +a65045 = 65045 +a65046 = 65046 +a65047 = 65047 +a65048 = 65048 +a65049 = 65049 +a65050 = 65050 +a65051 = 65051 +a65052 = 65052 +a65053 = 65053 +a65054 = 65054 +a65055 = 65055 +a65056 = 65056 +a65057 = 65057 +a65058 = 65058 +a65059 = 65059 +a65060 = 65060 +a65061 = 65061 +a65062 = 65062 +a65063 = 65063 +a65064 = 65064 +a65065 = 65065 +a65066 = 65066 +a65067 = 65067 +a65068 = 65068 +a65069 = 65069 +a65070 = 65070 +a65071 = 65071 +a65072 = 65072 +a65073 = 65073 +a65074 = 65074 +a65075 = 65075 +a65076 = 65076 +a65077 = 65077 +a65078 = 65078 +a65079 = 65079 +a65080 = 65080 +a65081 = 65081 +a65082 = 65082 +a65083 = 65083 +a65084 = 65084 +a65085 = 65085 +a65086 = 65086 +a65087 = 65087 +a65088 = 65088 +a65089 = 65089 +a65090 = 65090 +a65091 = 65091 +a65092 = 65092 +a65093 = 65093 +a65094 = 65094 +a65095 = 65095 +a65096 = 65096 +a65097 = 65097 +a65098 = 65098 +a65099 = 65099 +a65100 = 65100 +a65101 = 65101 +a65102 = 65102 +a65103 = 65103 +a65104 = 65104 +a65105 = 65105 +a65106 = 65106 +a65107 = 65107 +a65108 = 65108 +a65109 = 65109 +a65110 = 65110 +a65111 = 65111 +a65112 = 65112 +a65113 = 65113 +a65114 = 65114 +a65115 = 65115 +a65116 = 65116 +a65117 = 65117 +a65118 = 65118 +a65119 = 65119 +a65120 = 65120 +a65121 = 65121 +a65122 = 65122 +a65123 = 65123 +a65124 = 65124 +a65125 = 65125 +a65126 = 65126 +a65127 = 65127 +a65128 = 65128 +a65129 = 65129 +a65130 = 65130 +a65131 = 65131 +a65132 = 65132 +a65133 = 65133 +a65134 = 65134 +a65135 = 65135 +a65136 = 65136 +a65137 = 65137 +a65138 = 65138 +a65139 = 65139 +a65140 = 65140 +a65141 = 65141 +a65142 = 65142 +a65143 = 65143 +a65144 = 65144 +a65145 = 65145 +a65146 = 65146 +a65147 = 65147 +a65148 = 65148 +a65149 = 65149 +a65150 = 65150 +a65151 = 65151 +a65152 = 65152 +a65153 = 65153 +a65154 = 65154 +a65155 = 65155 +a65156 = 65156 +a65157 = 65157 +a65158 = 65158 +a65159 = 65159 +a65160 = 65160 +a65161 = 65161 +a65162 = 65162 +a65163 = 65163 +a65164 = 65164 +a65165 = 65165 +a65166 = 65166 +a65167 = 65167 +a65168 = 65168 +a65169 = 65169 +a65170 = 65170 +a65171 = 65171 +a65172 = 65172 +a65173 = 65173 +a65174 = 65174 +a65175 = 65175 +a65176 = 65176 +a65177 = 65177 +a65178 = 65178 +a65179 = 65179 +a65180 = 65180 +a65181 = 65181 +a65182 = 65182 +a65183 = 65183 +a65184 = 65184 +a65185 = 65185 +a65186 = 65186 +a65187 = 65187 +a65188 = 65188 +a65189 = 65189 +a65190 = 65190 +a65191 = 65191 +a65192 = 65192 +a65193 = 65193 +a65194 = 65194 +a65195 = 65195 +a65196 = 65196 +a65197 = 65197 +a65198 = 65198 +a65199 = 65199 +a65200 = 65200 +a65201 = 65201 +a65202 = 65202 +a65203 = 65203 +a65204 = 65204 +a65205 = 65205 +a65206 = 65206 +a65207 = 65207 +a65208 = 65208 +a65209 = 65209 +a65210 = 65210 +a65211 = 65211 +a65212 = 65212 +a65213 = 65213 +a65214 = 65214 +a65215 = 65215 +a65216 = 65216 +a65217 = 65217 +a65218 = 65218 +a65219 = 65219 +a65220 = 65220 +a65221 = 65221 +a65222 = 65222 +a65223 = 65223 +a65224 = 65224 +a65225 = 65225 +a65226 = 65226 +a65227 = 65227 +a65228 = 65228 +a65229 = 65229 +a65230 = 65230 +a65231 = 65231 +a65232 = 65232 +a65233 = 65233 +a65234 = 65234 +a65235 = 65235 +a65236 = 65236 +a65237 = 65237 +a65238 = 65238 +a65239 = 65239 +a65240 = 65240 +a65241 = 65241 +a65242 = 65242 +a65243 = 65243 +a65244 = 65244 +a65245 = 65245 +a65246 = 65246 +a65247 = 65247 +a65248 = 65248 +a65249 = 65249 +a65250 = 65250 +a65251 = 65251 +a65252 = 65252 +a65253 = 65253 +a65254 = 65254 +a65255 = 65255 +a65256 = 65256 +a65257 = 65257 +a65258 = 65258 +a65259 = 65259 +a65260 = 65260 +a65261 = 65261 +a65262 = 65262 +a65263 = 65263 +a65264 = 65264 +a65265 = 65265 +a65266 = 65266 +a65267 = 65267 +a65268 = 65268 +a65269 = 65269 +a65270 = 65270 +a65271 = 65271 +a65272 = 65272 +a65273 = 65273 +a65274 = 65274 +a65275 = 65275 +a65276 = 65276 +a65277 = 65277 +a65278 = 65278 +a65279 = 65279 +a65280 = 65280 +a65281 = 65281 +a65282 = 65282 +a65283 = 65283 +a65284 = 65284 +a65285 = 65285 +a65286 = 65286 +a65287 = 65287 +a65288 = 65288 +a65289 = 65289 +a65290 = 65290 +a65291 = 65291 +a65292 = 65292 +a65293 = 65293 +a65294 = 65294 +a65295 = 65295 +a65296 = 65296 +a65297 = 65297 +a65298 = 65298 +a65299 = 65299 +a65300 = 65300 +a65301 = 65301 +a65302 = 65302 +a65303 = 65303 +a65304 = 65304 +a65305 = 65305 +a65306 = 65306 +a65307 = 65307 +a65308 = 65308 +a65309 = 65309 +a65310 = 65310 +a65311 = 65311 +a65312 = 65312 +a65313 = 65313 +a65314 = 65314 +a65315 = 65315 +a65316 = 65316 +a65317 = 65317 +a65318 = 65318 +a65319 = 65319 +a65320 = 65320 +a65321 = 65321 +a65322 = 65322 +a65323 = 65323 +a65324 = 65324 +a65325 = 65325 +a65326 = 65326 +a65327 = 65327 +a65328 = 65328 +a65329 = 65329 +a65330 = 65330 +a65331 = 65331 +a65332 = 65332 +a65333 = 65333 +a65334 = 65334 +a65335 = 65335 +a65336 = 65336 +a65337 = 65337 +a65338 = 65338 +a65339 = 65339 +a65340 = 65340 +a65341 = 65341 +a65342 = 65342 +a65343 = 65343 +a65344 = 65344 +a65345 = 65345 +a65346 = 65346 +a65347 = 65347 +a65348 = 65348 +a65349 = 65349 +a65350 = 65350 +a65351 = 65351 +a65352 = 65352 +a65353 = 65353 +a65354 = 65354 +a65355 = 65355 +a65356 = 65356 +a65357 = 65357 +a65358 = 65358 +a65359 = 65359 +a65360 = 65360 +a65361 = 65361 +a65362 = 65362 +a65363 = 65363 +a65364 = 65364 +a65365 = 65365 +a65366 = 65366 +a65367 = 65367 +a65368 = 65368 +a65369 = 65369 +a65370 = 65370 +a65371 = 65371 +a65372 = 65372 +a65373 = 65373 +a65374 = 65374 +a65375 = 65375 +a65376 = 65376 +a65377 = 65377 +a65378 = 65378 +a65379 = 65379 +a65380 = 65380 +a65381 = 65381 +a65382 = 65382 +a65383 = 65383 +a65384 = 65384 +a65385 = 65385 +a65386 = 65386 +a65387 = 65387 +a65388 = 65388 +a65389 = 65389 +a65390 = 65390 +a65391 = 65391 +a65392 = 65392 +a65393 = 65393 +a65394 = 65394 +a65395 = 65395 +a65396 = 65396 +a65397 = 65397 +a65398 = 65398 +a65399 = 65399 +a65400 = 65400 +a65401 = 65401 +a65402 = 65402 +a65403 = 65403 +a65404 = 65404 +a65405 = 65405 +a65406 = 65406 +a65407 = 65407 +a65408 = 65408 +a65409 = 65409 +a65410 = 65410 +a65411 = 65411 +a65412 = 65412 +a65413 = 65413 +a65414 = 65414 +a65415 = 65415 +a65416 = 65416 +a65417 = 65417 +a65418 = 65418 +a65419 = 65419 +a65420 = 65420 +a65421 = 65421 +a65422 = 65422 +a65423 = 65423 +a65424 = 65424 +a65425 = 65425 +a65426 = 65426 +a65427 = 65427 +a65428 = 65428 +a65429 = 65429 +a65430 = 65430 +a65431 = 65431 +a65432 = 65432 +a65433 = 65433 +a65434 = 65434 +a65435 = 65435 +a65436 = 65436 +a65437 = 65437 +a65438 = 65438 +a65439 = 65439 +a65440 = 65440 +a65441 = 65441 +a65442 = 65442 +a65443 = 65443 +a65444 = 65444 +a65445 = 65445 +a65446 = 65446 +a65447 = 65447 +a65448 = 65448 +a65449 = 65449 +a65450 = 65450 +a65451 = 65451 +a65452 = 65452 +a65453 = 65453 +a65454 = 65454 +a65455 = 65455 +a65456 = 65456 +a65457 = 65457 +a65458 = 65458 +a65459 = 65459 +a65460 = 65460 +a65461 = 65461 +a65462 = 65462 +a65463 = 65463 +a65464 = 65464 +a65465 = 65465 +a65466 = 65466 +a65467 = 65467 +a65468 = 65468 +a65469 = 65469 +a65470 = 65470 +a65471 = 65471 +a65472 = 65472 +a65473 = 65473 +a65474 = 65474 +a65475 = 65475 +a65476 = 65476 +a65477 = 65477 +a65478 = 65478 +a65479 = 65479 +a65480 = 65480 +a65481 = 65481 +a65482 = 65482 +a65483 = 65483 +a65484 = 65484 +a65485 = 65485 +a65486 = 65486 +a65487 = 65487 +a65488 = 65488 +a65489 = 65489 +a65490 = 65490 +a65491 = 65491 +a65492 = 65492 +a65493 = 65493 +a65494 = 65494 +a65495 = 65495 +a65496 = 65496 +a65497 = 65497 +a65498 = 65498 +a65499 = 65499 +a65500 = 65500 +a65501 = 65501 +a65502 = 65502 +a65503 = 65503 +a65504 = 65504 +a65505 = 65505 +a65506 = 65506 +a65507 = 65507 +a65508 = 65508 +a65509 = 65509 +a65510 = 65510 +a65511 = 65511 +a65512 = 65512 +a65513 = 65513 +a65514 = 65514 +a65515 = 65515 +a65516 = 65516 +a65517 = 65517 +a65518 = 65518 +a65519 = 65519 +a65520 = 65520 +a65521 = 65521 +a65522 = 65522 +a65523 = 65523 +a65524 = 65524 +a65525 = 65525 +a65526 = 65526 +a65527 = 65527 +a65528 = 65528 +a65529 = 65529 +a65530 = 65530 +a65531 = 65531 +a65532 = 65532 +a65533 = 65533 +a65534 = 65534 +a65535 = 65535 diff --git a/test/test_functions.py b/test/test_functions.py new file mode 100755 index 00000000..7b793e3c --- /dev/null +++ b/test/test_functions.py @@ -0,0 +1,58 @@ +# test_functions.py -- source test pattern for functions +# +# This source is part of the decompyle test suite. +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +def x0(): + pass + +def x1(arg1): + pass + +def x2(arg1,arg2): + pass + +def x3a(*args): + pass + +def x3b(**kwargs): + pass + +def x3c(*args, **kwargs): + pass + +def x4a(foo, bar=1, bla=2, *args): + pass + +def x4b(foo, bar=1, bla=2, **kwargs): + pass + +def x4c(foo, bar=1, bla=2, *args, **kwargs): + pass + +def func_with_tuple_args((a,b)): + print a + print b + +def func_with_tuple_args2((a,b), (c,d)): + print a + print c + +def func_with_tuple_args3((a,b), (c,d), *args): + print a + print c + +def func_with_tuple_args4((a,b), (c,d), **kwargs): + print a + print c + +def func_with_tuple_args5((a,b), (c,d), *args, **kwargs): + print a + print c + +def func_with_tuple_args6((a,b), (c,d)=(2,3), *args, **kwargs): + print a + print c diff --git a/test/test_global.py b/test/test_global.py new file mode 100755 index 00000000..c789eb84 --- /dev/null +++ b/test/test_global.py @@ -0,0 +1,26 @@ +""" +test_global.py -- source test pattern for 'global' statement + +This source is part of the decompyle test suite. + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" + +i = 1; j = 7 +def a(): + def b(): + def c(): + k = 34 + global i + i = i+k + l = 42 + c() + global j + j = j+l + b() + print i, j # should print 35, 49 + +a() +print i, j diff --git a/test/test_globals.py b/test/test_globals.py new file mode 100755 index 00000000..6e9cad01 --- /dev/null +++ b/test/test_globals.py @@ -0,0 +1,18 @@ +# globals.py -- test for global symbols +# +# This simple program is part of the decompyle test suite. +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +def f(): + print x # would result in a 'NameError' or 'UnboundLocalError' + x = x+1 + print x + +raise "This program can't be run" + +x = 1 +f() +print x diff --git a/test/test_import.py b/test/test_import.py new file mode 100755 index 00000000..73d1b1bb --- /dev/null +++ b/test/test_import.py @@ -0,0 +1,21 @@ +""" +test_import.py -- source test pattern for import statements + +This source is part of the decompyle test suite. + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" + +import sys +import os, sys, BaseHTTPServer + +import test.test_MimeWriter + +from rfc822 import Message +from mimetools import Message, decode, choose_boundary +from os import * + +for k, v in globals().items(): + print `k`, v diff --git a/test/test_import_as.py b/test/test_import_as.py new file mode 100755 index 00000000..5695c9c8 --- /dev/null +++ b/test/test_import_as.py @@ -0,0 +1,23 @@ +""" +test_import_as.py -- source test pattern for 'import .. as 'statements + +This source is part of the decompyle test suite. + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" + +import sys as SYS +import os as OS, sys as SYSTEM, BaseHTTPServer as HTTPServ + +import test.test_MimeWriter as Mime_Writer + +from rfc822 import Message as MSG +from mimetools import Message as mimeMsg, decode, \ + choose_boundary as mimeBoundry + +print '---' * 20 + +for k, v in globals().items(): + print k, repr(v) diff --git a/test/test_integers.py b/test/test_integers.py new file mode 100755 index 00000000..45ac600f --- /dev/null +++ b/test/test_integers.py @@ -0,0 +1,33 @@ +""" +test_integers.py -- source test pattern for integers + +This source is part of the decompyle test suite. +Snippet taken from python libs's test_class.py + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" + +import sys +#raise "This program can't be run" + +i = 1 +i = 42 +i = -1 +i = -42 +i = sys.maxint +minint = -sys.maxint-1 +print sys.maxint +print minint +print long(minint)-1 + +print +i = -2147483647 # == -maxint +print i, repr(i) +i = i-1 +print i, repr(i) +i = -2147483648L # == minint == -maxint-1 +print i, repr(i) +i = -2147483649L # == minint-1 == -maxint-2 +print i, repr(i) diff --git a/test/test_iterators.py b/test/test_iterators.py new file mode 100755 index 00000000..6be8a4fe --- /dev/null +++ b/test/test_iterators.py @@ -0,0 +1,11 @@ + +for i in range(20): + print i, + +print + +for i in range(10): + print i, + #if i == 10: break +else: + print 'The End' diff --git a/test/test_lambda.py b/test/test_lambda.py new file mode 100755 index 00000000..eb214bf2 --- /dev/null +++ b/test/test_lambda.py @@ -0,0 +1,16 @@ +# lambda.py -- source test pattern for lambda functions +# +# This simple program is part of the decompyle test suite. +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +palette = map(lambda a: (a,a,a), range(256)) +palette = map(lambda (r,g,b): chr(r)+chr(g)+chr(b), palette) +palette = map(lambda r: r, palette) + +palette = lambda (r,g,b,): r +palette = lambda (r): r +palette = lambda r: r +palette = lambda (r): r, palette diff --git a/test/test_listComprehensions.py b/test/test_listComprehensions.py new file mode 100755 index 00000000..9e0f11ed --- /dev/null +++ b/test/test_listComprehensions.py @@ -0,0 +1,36 @@ +# listComprehensions.py -- source test pattern for list comprehensions +# +# This simple program is part of the decompyle test suite. +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +XXX = range(4) + +print [i for i in XXX] +print +print [i for i in (1,2,3,4,)] +print +print [(i,1) for i in XXX] +print +print [i*2 for i in range(4)] +print +print [i*j for i in range(4) + for j in range(7)] +print [i*2 for i in range(4) if i == 0 ] +print [(i,i**2) for i in range(4) if (i % 2) == 0 ] +print [i*j for i in range(4) + if i == 2 + for j in range(7) + if (i+i % 2) == 0 ] + +seq1 = 'abc' +seq2 = (1,2,3) + +[ (x,y) for x in seq1 for y in seq2 ] + +def flatten(seq): + return [x for subseq in seq for x in subseq] + +print flatten([[0], [1,2,3], [4,5], [6,7,8,9], []]) diff --git a/test/test_loops.py b/test/test_loops.py new file mode 100755 index 00000000..c5e11b5b --- /dev/null +++ b/test/test_loops.py @@ -0,0 +1,48 @@ +""" +test_loops.py -- source test pattern for loops + +This source is part of the decompyle test suite. + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" + +for i in range(10): + if i == 3: + continue + if i == 5: + break + print i, +else: + print 'Else' +print + +for i in range(10): + if i == 3: + continue + print i, +else: + print 'Else' + + +i = 0 +while i < 10: + i = i+1 + if i == 3: + continue + if i == 5: + break + print i, +else: + print 'Else' +print + +i = 0 +while i < 10: + i = i+1 + if i == 3: + continue + print i, +else: + print 'Else' diff --git a/test/test_loops2.py b/test/test_loops2.py new file mode 100755 index 00000000..50c1188f --- /dev/null +++ b/test/test_loops2.py @@ -0,0 +1,20 @@ +""" +test_loops2.py -- source test pattern for loops (CONTINUE_LOOP) + +This source is part of the decompyle test suite. + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" + +# This is a seperate test pattern, since 'continue' within 'try' +# was not allowed till Python 2.1 + +for term in args: + try: + print + continue + print + except: + pass diff --git a/test/test_mine.py b/test/test_mine.py new file mode 100755 index 00000000..eed84e6a --- /dev/null +++ b/test/test_mine.py @@ -0,0 +1,5 @@ +sum(i*i for i in range(10)) + +sum(x*y for x,y in zip(xvec, yvec)) + + diff --git a/test/test_misc.py b/test/test_misc.py new file mode 100755 index 00000000..f7a74c80 --- /dev/null +++ b/test/test_misc.py @@ -0,0 +1,32 @@ +# slices.py -- source test pattern for slices +# +# This simple program is part of the decompyle test suite. +# Snippet taken from python libs's test_class.py +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +raise "This program can't be run" + +class A: + def __init__(self, num): + self.num = num + def __repr__(self): + return str(self.num) + +b = [] +for i in range(10): + b.append(A(i)) + +for i in ('CALL_FUNCTION', 'CALL_FUNCTION_VAR', + 'CALL_FUNCTION_VAR_KW', 'CALL_FUNCTION_KW'): + print i, '\t', len(i), len(i)-len('CALL_FUNCTION'), + print (len(i)-len('CALL_FUNCTION')) / 3, + print i[len('CALL_FUNCTION'):] + +p2 = (0, 0, None) +if p2[2]: + print 'has value' +else: + print ' no value' diff --git a/test/test_nested_elif.py b/test/test_nested_elif.py new file mode 100755 index 00000000..8aac6387 --- /dev/null +++ b/test/test_nested_elif.py @@ -0,0 +1,89 @@ +# nested_elif.py -- source test pattern for nested elif +# +# This simple program is part of the decompyle test suite. +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +a = None + +if a == 1: + print '1' +elif a == 2: + print '2' + +if a == 1: + print '1' +elif a == 2: + print '2' +else: + print 'other' + +if a == 1: + print '1' +elif a == 2: + print '2' +elif a == 3: + print '3' +else: + print 'other' + +if a == 1: + print '1' +elif a == 2: + print '2' +elif a == 3: + print '3' + +if a == 1: + print '1' +else: + if a == 2: + print '2' + else: + if a == 3: + print '3' + else: + print 'other' + +if a == 1: + print '1' +else: + if a == 2: + print '2' + else: + print 'more' + if a == 3: + print '3' + else: + print 'other' + +if a == 1: + print '1' +else: + print 'more' + if a == 2: + print '2' + else: + if a == 3: + print '3' + else: + print 'other' + +if a == 1: + print '1' +else: + print 'more' + if a == 2: + print '2' + else: + print 'more' + if a == 3: + print '3' + elif a == 4: + print '4' + elif a == 4: + print '4' + else: + print 'other' diff --git a/test/test_nested_scopes.py b/test/test_nested_scopes.py new file mode 100755 index 00000000..32646e1c --- /dev/null +++ b/test/test_nested_scopes.py @@ -0,0 +1,95 @@ +# test_nested_scopes.py -- source test pattern for nested scopes +# +# This source is part of the decompyle test suite. +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +from __future__ import nested_scopes + +blurb = 1 + +def k0(): + def l0(m=1): + print + l0() + +def x0(): + def y0(): + print + y0() + +def x1(): + def y1(): + print 'y-blurb =', blurb + y1() + +def x2(): + def y2(): + print + blurb = 2 + y2() + +def x3a(): + def y3a(x): + print 'y-blurb =', blurb, flurb + print + blurb = 3 + flurb = 7 + y3a(1) + print 'x3a-blurb =', blurb + +def x3(): + def y3(x): + def z(): + blurb = 25 + print 'z-blurb =', blurb, + z() + print 'y-blurb =', blurb, + print + blurb = 3 + y3(1) + print 'x3-blurb =', blurb + +def x3b(): + def y3b(x): + def z(): + print 'z-blurb =', blurb, + blurb = 25 + z() + print 'y-blurb =', blurb, + print + blurb = 3 + y3b(1) + print 'x3-blurb =', blurb + +def x4(): + def y4(x): + def z(): + print 'z-blurb =', blurb + z() + global blurb + blurb = 3 + y4(1) + +def x(): + def y(x): + print 'y-blurb =', blurb + blurb = 2 + y(1) + + +def func_with_tuple_args6((a,b), (c,d)=(2,3), *args, **kwargs): + def y(x): + print 'y-a =', a + print c + +def find(self, name): + # This is taken from 'What's new in Python 2.1' by amk + L = filter(lambda x, name: x == name, self.list_attribute) + +x0(); x1(); x2(); +x3(); x3a(); x3b(); +x4(); x() +print 'blurb =', blurb diff --git a/test/test_prettyprint.py b/test/test_prettyprint.py new file mode 100755 index 00000000..957d72eb --- /dev/null +++ b/test/test_prettyprint.py @@ -0,0 +1,139 @@ +""" +test_prettyprint.py -- source test pattern for tesing the prettyprint + funcionality of decompyle + +This source is part of the decompyle test suite. + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" + +import pprint + +aa = 'aa' + +dict0 = { + 'a': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + 'b': 1234, + 'd': aa, + aa: aa + } + + +dict = { + 'a': 'aaa', + 'b': 1234, + 'c': { 'ca': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + 'cb': 1234, + 'cc': None + }, + 'd': aa, + aa: aa, + 'eee': { 'ca': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + 'cb': 1234, + 'cc': None + }, + 'ff': aa, + } +list1 = [ '1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + aa, + '1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + '1ccccccccccccccccccccccccccccccccccccccccccc' ] +list2 = [ '2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + [ '22aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + aa, + '22bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + '22ccccccccccccccccccccccccccccccccccccccccccc' ], + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + 'ccccccccccccccccccccccccccccccccccccccccccc' ] +tuple1 = ( '1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + aa, + '1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + '1ccccccccccccccccccccccccccccccccccccccccccc' ) +tuple2 = ( '2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + ( '22aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + aa, + '22bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + '22ccccccccccccccccccccccccccccccccccccccccccc' ), + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + 'ccccccccccccccccccccccccccccccccccccccccccc' ) + +def funcA(): + dict = { + 'a': 'aaa', + 'b': 1234, + 'c': { 'ca': 'aaa', + 'cb': 1234, + 'cc': None + }, + 'd': aa, + aa: aa + } + list1 = [ '1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + '1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + aa, + '1ccccccccccccccccccccccccccccccccccccccccccc' ] + list2 = [ '2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + [ '22aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + aa, + '22bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + '22ccccccccccccccccccccccccccccccccccccccccccc' ], + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + 'ccccccccccccccccccccccccccccccccccccccccccc' ] + tuple1 = ( '1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + '1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + aa, + '1ccccccccccccccccccccccccccccccccccccccccccc' ) + tuple2 = ( '2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + ( '22aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + aa, + '22bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + '22ccccccccccccccccccccccccccccccccccccccccccc' ), + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + 'ccccccccccccccccccccccccccccccccccccccccccc' ) + + def funcAB(): + dict = { + 'a': 'aaa', + 'b': 1234, + 'c': { 'ca': 'aaa', + 'cb': 1234, + 'cc': None + }, + 'd': aa, + aa: aa + } + list1 = [ '1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + '1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + '1ccccccccccccccccccccccccccccccccccccccccccc' ] + list2 = [ '2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + [ '22aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + '22bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + '22ccccccccccccccccccccccccccccccccccccccccccc' ], + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + 'ccccccccccccccccccccccccccccccccccccccccccc' ] + tuple1 = ( '1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + '1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + '1ccccccccccccccccccccccccccccccccccccccccccc' ) + tuple2 = ( '2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + ( '22aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + '22bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + '22ccccccccccccccccccccccccccccccccccccccccccc' ), + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', + 'ccccccccccccccccccccccccccccccccccccccccccc' ) + +pprint.pprint(dict0) +print +pprint.pprint(dict) +print + +pprint = pprint.PrettyPrinter(indent=2) +pprint.pprint(dict0) +print +pprint.pprint(dict) +print + +pprint.pprint(list1) +print +pprint.pprint(list2) diff --git a/test/test_print.py b/test/test_print.py new file mode 100755 index 00000000..dd30661b --- /dev/null +++ b/test/test_print.py @@ -0,0 +1,16 @@ +# print.py -- source test pattern for print statements +# +# This simple program is part of the decompyle test suite. +# +# decompyle is a Python byte-code decompiler +# See http://www.goebel-consult.de/decompyle/ for download and +# for further information + +print 1,2,3,4,5 +a = b + 5 +print 1,2,3,4,5 +print 1,2,3,4,5 +print +print +print 1,2,3,4,5 +print diff --git a/test/test_print_to.py b/test/test_print_to.py new file mode 100755 index 00000000..a6901ad7 --- /dev/null +++ b/test/test_print_to.py @@ -0,0 +1,21 @@ +""" +print_to.py -- source test pattern for 'print >> ...' statements + +This source is part of the decompyle test suite. + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" +import sys + +print >>sys.stdout, 1,2,3,4,5 + +print >>sys.stdout, 1,2,3,4,5, +print >>sys.stdout + +print >>sys.stdout, 1,2,3,4,5, +print >>sys.stdout, 1,2,3,4,5, +print >>sys.stdout + +print >>sys.stdout diff --git a/test/test_single_stmt.py b/test/test_single_stmt.py new file mode 100755 index 00000000..79a07802 --- /dev/null +++ b/test/test_single_stmt.py @@ -0,0 +1 @@ +print 5 diff --git a/test/test_slices.py b/test/test_slices.py new file mode 100755 index 00000000..1580e5e4 --- /dev/null +++ b/test/test_slices.py @@ -0,0 +1,43 @@ +""" +test_slices.py -- source test pattern for slices + +This source is part of the decompyle test suite. +Snippet taken from python libs's test_class.py + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" + +raise "This program can't be run" + +testme[1] +testme[1] = 1 +del testme[1] + +testme[:42] +testme[:42] = "The Answer" +del testme[:42] + +testme[2:1024:] +testme[:1024:10] +testme[::] +testme[2:1024:10] +testme[2:1024:10] = "A lot" +del testme[2:1024:10] + +testme[:42, ..., :24:, 24, 100] +testme[:42, ..., :24:, 24, 100] = "Strange" +del testme[:42, ..., :24:, 24, 100] + +testme[:] +testme[:] = 'Take all' +del testme[:] + +testme[40:42] +testme[40:42] = 'Three' +del testme[40:42] + +testme[40,41,42] +testme[40,41,42] = 'Another Three' +del testme[40,41,42] diff --git a/test/test_tuple_params.py b/test/test_tuple_params.py new file mode 100755 index 00000000..7cab1b1e --- /dev/null +++ b/test/test_tuple_params.py @@ -0,0 +1,24 @@ +""" +test_tuple_params.py -- source test pattern for formal parameters of type tuple + +This source is part of the decompyle test suite. + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" + +def A(a,b,(x,y,z),c): + pass + +def B(a,b=42,(x,y,z)=(1,2,3),c=17): + pass + +def C((x,y,z)): + pass + +def D((x,)): + pass + +def E((x)): + pass diff --git a/test/test_tuples.py b/test/test_tuples.py new file mode 100755 index 00000000..57362bd5 --- /dev/null +++ b/test/test_tuples.py @@ -0,0 +1,25 @@ +""" +test_tuples.py -- source test pattern for tuples + +This source is part of the decompyle test suite. + +decompyle is a Python byte-code decompiler +See http://www.goebel-consult.de/decompyle/ for download and +for further information +""" + +a = (1,) +b = (2,3) +a,b = (1,2) +a,b = ( (1,2), (3,4,5) ) + +x = {} +try: + x[1,2,3] +except: + pass +x[1,2,3] = 42 +print x[1,2,3] +print x[(1,2,3)] +assert x[(1,2,3)] == x[1,2,3] +del x[1,2,3] diff --git a/test/test_yield.py b/test/test_yield.py new file mode 100755 index 00000000..41e2f9d9 --- /dev/null +++ b/test/test_yield.py @@ -0,0 +1,22 @@ +from __future__ import generators + +def inorder(t): + if t: + for x in inorder(t.left): + yield x + yield t.label + for x in inorder(t.right): + yield x + +def generate_ints(n): + for i in range(n): + yield i*2 + +for i in generate_ints(5): + print i, +print +gen = generate_ints(3) +print gen.next(), +print gen.next(), +print gen.next(), +print gen.next() diff --git a/test_one b/test_one new file mode 100755 index 00000000..6c62ff3e --- /dev/null +++ b/test_one @@ -0,0 +1,16 @@ +#!/bin/sh + +file=$1 +shift +options=$@ + +BASEDIR=test/bytecode_2.6 +#BASEDIR=test/bytecode_2.0 +#BASEDIR=test/bytecode_2.1 +#BASEDIR=test/bytecode_2.2 + +if [ `dirname $file` == '.' ] ; then + file=$BASEDIR/test_$file.pyc +fi + +python2.7 -u ./scripts/uncompyle $options $file 2>&1 |less diff --git a/test_pythonlib b/test_pythonlib new file mode 100755 index 00000000..367b16e3 --- /dev/null +++ b/test_pythonlib @@ -0,0 +1,118 @@ +#!/usr/bin/env python +# emacs-mode: -*-python-*- +""" +test_pythonlib -- uncompyle and verify Python libraries + +Usage-Examples: + + test_pythonlib --all # decompile all tests (suite + libs) + test_pythonlib --all --verify # decomyile all tests and verify results + test_pythonlib --test # decompile only the testsuite + test_pythonlib --2.2 --verify # decompile and verify python lib 2.2 + +Adding own test-trees: + +Step 1) Edit this file and add a new entry to 'test_options', eg. + test_options['mylib'] = ('/usr/lib/mylib', PYOC, 'mylib') +Step 2: Run the test: + test_pythonlib --mylib # decompile 'mylib' + test_pythonlib --mylib --verify # decompile verify 'mylib' +""" + +from uncompyle import main, verify +import os, time, shutil +from fnmatch import fnmatch + +#----- configure this for your needs + +target_base = '/tmp/py-dis/' +lib_prefix = '/usr/lib' + +PYC = ('*.pyc', ) +PYO = ('*.pyo', ) +PYOC = ('*.pyc', '*.pyo') + +test_options = { + # name: (src_basedir, pattern, output_base_suffix) + 'test': ('./test', PYOC, 'test'), + '1.5': (os.path.join(lib_prefix, 'python1.5'), PYC, 'python-lib1.5'), + '1.6': (os.path.join(lib_prefix, 'python1.6'), PYC, 'python-lib1.6'), + '2.0': (os.path.join(lib_prefix, 'python2.0'), PYC, 'python-lib2.0'), + '2.1': (os.path.join(lib_prefix, 'python2.1'), PYC, 'python-lib2.1'), + '2.2': (os.path.join(lib_prefix, 'python2.2'), PYC, 'python-lib2.2'), + '2.5': (os.path.join(lib_prefix, 'python2.5'), PYC, 'python-lib2.5'), + '2.6': (os.path.join(lib_prefix, 'python2.6'), PYC, 'python-lib2.6'), + '2.7': (os.path.join(lib_prefix, 'python2.7'), PYC, 'python-lib2.7') + } + +#----- + +def do_tests(src_dir, patterns, target_dir, start_with=None, do_verify=0): + + def visitor(files, dirname, names): + files.extend( + [os.path.normpath(os.path.join(dirname, n)) + for n in names + for pat in patterns + if fnmatch(n, pat)]) + + files = [] + cwd = os.getcwd() + os.chdir(src_dir) + os.path.walk(os.curdir, visitor, files) + os.chdir(cwd) + files.sort() + + if start_with: + try: + start_with = files.index(start_with) + files = files[start_with:] + print '>>> starting with file', files[0] + except ValueError: + pass + + print time.ctime() + main(src_dir, target_dir, files, [], do_verify=do_verify) + print time.ctime() + +if __name__ == '__main__': + import getopt, sys + + do_verify = 0 + test_dirs = [] + start_with = None + + test_options_keys = test_options.keys(); test_options_keys.sort() + opts, args = getopt.getopt(sys.argv[1:], '', + ['start-with=', 'verify', 'all', ] \ + + test_options_keys ) + for opt, val in opts: + if opt == '--verify': + do_verify = 1 + elif opt == '--start-with': + start_with = val + elif opt[2:] in test_options_keys: + test_dirs.append(test_options[opt[2:]]) + elif opt == '--all': + for val in test_options_keys: + test_dirs.append(test_options[val]) + + for src_dir, pattern, target_dir in test_dirs: + if os.path.exists(src_dir): + target_dir = os.path.join(target_base, target_dir) + if os.path.exists(target_dir): + shutil.rmtree(target_dir, ignore_errors=1) + do_tests(src_dir, pattern, target_dir, start_with, do_verify) + else: + print '### skipping', src_dir + +# python 1.5: + +# test/re_tests memory error +# test/test_b1 memory error + +# Verification notes: +# - xdrlib fails verification due the same lambda used twice +# (verification is successfull when using original .pyo as +# input) +# diff --git a/uncompyle2/Parser.py b/uncompyle2/Parser.py new file mode 100755 index 00000000..89fc675a --- /dev/null +++ b/uncompyle2/Parser.py @@ -0,0 +1,776 @@ +# Copyright (c) 1999 John Aycock +# Copyright (c) 2000-2002 by hartmut Goebel +# Copyright (c) 2005 by Dan Pascu +# +# See main module for license. +# + +__all__ = ['parse', 'AST', 'ParserError', 'Parser'] + +from spark import GenericASTBuilder +import string, exceptions, sys +from UserList import UserList + +from Scanner import Token + +class AST(UserList): + def __init__(self, type, kids=[]): + self.type = intern(type) + UserList.__init__(self, kids) + + def __getslice__(self, low, high): return self.data[low:high] + def __eq__(self, o): + if isinstance(o, AST): + return self.type == o.type \ + and UserList.__eq__(self, o) + else: + return self.type == o + + def __hash__(self): return hash(self.type) + + def __repr__(self, indent=''): + rv = str(self.type) + for k in self: + rv = rv + '\n' + string.replace(str(k), '\n', '\n ') + return rv + + +class ParserError(Exception): + def __init__(self, token, offset): + self.token = token + self.offset = offset + + def __str__(self): + return "Syntax error at or near `%r' token at offset %s" % \ + (self.token, self.offset) + + +class Parser(GenericASTBuilder): + def __init__(self): + GenericASTBuilder.__init__(self, AST, 'stmts') + self.customized = {} + + def cleanup(self): + """ + Remove recursive references to allow garbage + collector to collect this object. + """ + for dict in (self.rule2func, self.rules, self.rule2name): + for i in dict.keys(): + dict[i] = None + for i in dir(self): + setattr(self, i, None) + + def error(self, token): + raise ParserError(token, token.offset) + + def typestring(self, token): + return token.type + + def p_funcdef(self, args): + ''' + stmt ::= funcdef + funcdef ::= mkfunc designator + stmt ::= funcdefdeco + funcdefdeco ::= mkfuncdeco designator + mkfuncdeco ::= expr mkfuncdeco CALL_FUNCTION_1 + mkfuncdeco ::= expr mkfuncdeco0 CALL_FUNCTION_1 + mkfuncdeco0 ::= mkfunc + load_closure ::= load_closure LOAD_CLOSURE + load_closure ::= LOAD_CLOSURE + ''' + + def p_list_comprehension(self, args): + ''' + expr ::= list_compr + list_compr ::= BUILD_LIST_0 list_iter + + list_iter ::= list_for + list_iter ::= list_if + list_iter ::= list_if_not + list_iter ::= lc_body + + _come_from ::= COME_FROM + _come_from ::= + + list_for ::= expr _for designator list_iter JUMP_BACK + list_if ::= expr jmp_false list_iter + list_if_not ::= expr jmp_true list_iter + + lc_body ::= expr LIST_APPEND + ''' + + def p_setcomp(self, args): + ''' + expr ::= setcomp + + setcomp ::= LOAD_SETCOMP MAKE_FUNCTION_0 expr GET_ITER CALL_FUNCTION_1 + + stmt ::= setcomp_func + + setcomp_func ::= BUILD_SET_0 LOAD_FAST FOR_ITER designator comp_iter + JUMP_BACK RETURN_VALUE RETURN_LAST + + comp_iter ::= comp_if + comp_iter ::= comp_ifnot + comp_iter ::= comp_for + comp_iter ::= comp_body + comp_body ::= set_comp_body + comp_body ::= gen_comp_body + comp_body ::= dict_comp_body + set_comp_body ::= expr SET_ADD + gen_comp_body ::= expr YIELD_VALUE POP_TOP + dict_comp_body ::= expr expr MAP_ADD + + comp_if ::= expr jmp_false comp_iter + comp_ifnot ::= expr jmp_true comp_iter + comp_for ::= expr _for designator comp_iter JUMP_BACK + ''' + + def p_genexpr(self, args): + ''' + expr ::= genexpr + + genexpr ::= LOAD_GENEXPR MAKE_FUNCTION_0 expr GET_ITER CALL_FUNCTION_1 + + stmt ::= genexpr_func + + genexpr_func ::= LOAD_FAST FOR_ITER designator comp_iter JUMP_BACK + ''' + + + def p_dictcomp(self, args): + ''' + expr ::= dictcomp + dictcomp ::= LOAD_DICTCOMP MAKE_FUNCTION_0 expr GET_ITER CALL_FUNCTION_1 + stmt ::= dictcomp_func + + dictcomp_func ::= BUILD_MAP LOAD_FAST FOR_ITER designator + comp_iter JUMP_BACK RETURN_VALUE RETURN_LAST + + ''' + + + def p_augmented_assign(self, args): + ''' + stmt ::= augassign1 + stmt ::= augassign2 + augassign1 ::= expr expr inplace_op designator + augassign1 ::= expr expr inplace_op ROT_THREE STORE_SUBSCR + augassign1 ::= expr expr inplace_op ROT_TWO STORE_SLICE+0 + augassign1 ::= expr expr inplace_op ROT_THREE STORE_SLICE+1 + augassign1 ::= expr expr inplace_op ROT_THREE STORE_SLICE+2 + augassign1 ::= expr expr inplace_op ROT_FOUR STORE_SLICE+3 + augassign2 ::= expr DUP_TOP LOAD_ATTR expr + inplace_op ROT_TWO STORE_ATTR + + inplace_op ::= INPLACE_ADD + inplace_op ::= INPLACE_SUBTRACT + inplace_op ::= INPLACE_MULTIPLY + inplace_op ::= INPLACE_DIVIDE + inplace_op ::= INPLACE_TRUE_DIVIDE + inplace_op ::= INPLACE_FLOOR_DIVIDE + inplace_op ::= INPLACE_MODULO + inplace_op ::= INPLACE_POWER + inplace_op ::= INPLACE_LSHIFT + inplace_op ::= INPLACE_RSHIFT + inplace_op ::= INPLACE_AND + inplace_op ::= INPLACE_XOR + inplace_op ::= INPLACE_OR + ''' + + def p_assign(self, args): + ''' + stmt ::= assign + assign ::= expr DUP_TOP designList + assign ::= expr designator + + stmt ::= assign2 + stmt ::= assign3 + assign2 ::= expr expr ROT_TWO designator designator + assign3 ::= expr expr expr ROT_THREE ROT_TWO designator designator designator + ''' + + def p_print(self, args): + ''' + stmt ::= print_items_stmt + stmt ::= print_nl + stmt ::= print_items_nl_stmt + + print_items_stmt ::= expr PRINT_ITEM print_items_opt + print_items_nl_stmt ::= expr PRINT_ITEM print_items_opt PRINT_NEWLINE_CONT + print_items_opt ::= print_items + print_items_opt ::= + print_items ::= print_items print_item + print_items ::= print_item + print_item ::= expr PRINT_ITEM_CONT + print_nl ::= PRINT_NEWLINE + ''' + + def p_print_to(self, args): + ''' + stmt ::= print_to + stmt ::= print_to_nl + stmt ::= print_nl_to + print_to ::= expr print_to_items POP_TOP + print_to_nl ::= expr print_to_items PRINT_NEWLINE_TO + print_nl_to ::= expr PRINT_NEWLINE_TO + print_to_items ::= print_to_items print_to_item + print_to_items ::= print_to_item + print_to_item ::= DUP_TOP expr ROT_TWO PRINT_ITEM_TO + ''' + + def p_import20(self, args): + ''' + stmt ::= importstmt + stmt ::= importfrom + stmt ::= importstar + stmt ::= importmultiple + + importlist2 ::= importlist2 import_as + importlist2 ::= import_as + import_as ::= IMPORT_NAME designator + import_as ::= IMPORT_NAME LOAD_ATTR designator + import_as ::= IMPORT_NAME LOAD_ATTR LOAD_ATTR designator + import_as ::= IMPORT_NAME LOAD_ATTR LOAD_ATTR LOAD_ATTR designator + import_as ::= IMPORT_FROM designator + + importstmt ::= LOAD_CONST LOAD_CONST import_as + importstar ::= LOAD_CONST LOAD_CONST IMPORT_NAME IMPORT_STAR + importfrom ::= LOAD_CONST LOAD_CONST IMPORT_NAME importlist2 POP_TOP + importstar ::= LOAD_CONST LOAD_CONST IMPORT_NAME_CONT IMPORT_STAR + importfrom ::= LOAD_CONST LOAD_CONST IMPORT_NAME_CONT importlist2 POP_TOP + importmultiple ::= LOAD_CONST LOAD_CONST import_as imports_cont + + imports_cont ::= imports_cont import_cont + imports_cont ::= import_cont + import_cont ::= LOAD_CONST LOAD_CONST import_as_cont + import_as_cont ::= IMPORT_NAME_CONT designator + import_as_cont ::= IMPORT_NAME_CONT LOAD_ATTR designator + import_as_cont ::= IMPORT_NAME_CONT LOAD_ATTR LOAD_ATTR designator + import_as_cont ::= IMPORT_NAME_CONT LOAD_ATTR LOAD_ATTR LOAD_ATTR designator + import_as_cont ::= IMPORT_FROM designator + ''' + + def p_grammar(self, args): + ''' + stmts ::= stmts sstmt + stmts ::= sstmt + sstmt ::= stmt + sstmt ::= ifelsestmtr + sstmt ::= return_stmt RETURN_LAST + + stmts_opt ::= stmts + stmts_opt ::= passstmt + passstmt ::= + + _stmts ::= _stmts stmt + _stmts ::= stmt + + c_stmts ::= _stmts + c_stmts ::= _stmts lastc_stmt + c_stmts ::= lastc_stmt + c_stmts ::= continue_stmts + + lastc_stmt ::= iflaststmt + lastc_stmt ::= whileelselaststmt + lastc_stmt ::= forelselaststmt + lastc_stmt ::= ifelsestmtr + lastc_stmt ::= ifelsestmtc + lastc_stmt ::= tryelsestmtc + + c_stmts_opt ::= c_stmts + c_stmts_opt ::= passstmt + + l_stmts ::= _stmts + l_stmts ::= return_stmts + l_stmts ::= continue_stmts + l_stmts ::= _stmts lastl_stmt + l_stmts ::= lastl_stmt + + lastl_stmt ::= iflaststmtl + lastl_stmt ::= ifelsestmtl + lastl_stmt ::= forelselaststmtl + lastl_stmt ::= tryelsestmtl + + l_stmts_opt ::= l_stmts + l_stmts_opt ::= passstmt + + suite_stmts ::= _stmts + suite_stmts ::= return_stmts + suite_stmts ::= continue_stmts + + suite_stmts_opt ::= suite_stmts + suite_stmts_opt ::= passstmt + + else_suite ::= suite_stmts + else_suitel ::= l_stmts + else_suitec ::= c_stmts + else_suitec ::= return_stmts + + designList ::= designator designator + designList ::= designator DUP_TOP designList + + designator ::= STORE_FAST + designator ::= STORE_NAME + designator ::= STORE_GLOBAL + designator ::= STORE_DEREF + designator ::= expr STORE_ATTR + designator ::= expr STORE_SLICE+0 + designator ::= expr expr STORE_SLICE+1 + designator ::= expr expr STORE_SLICE+2 + designator ::= expr expr expr STORE_SLICE+3 + designator ::= store_subscr + store_subscr ::= expr expr STORE_SUBSCR + designator ::= unpack + designator ::= unpack_list + + stmt ::= classdef + stmt ::= call_stmt + call_stmt ::= expr POP_TOP + + stmt ::= return_stmt + return_stmt ::= expr RETURN_VALUE + return_stmts ::= return_stmt + return_stmts ::= _stmts return_stmt + + return_if_stmts ::= return_if_stmt + return_if_stmts ::= _stmts return_if_stmt + return_if_stmt ::= expr RETURN_END_IF + + stmt ::= break_stmt + break_stmt ::= BREAK_LOOP + + stmt ::= continue_stmt + continue_stmt ::= CONTINUE + continue_stmt ::= CONTINUE_LOOP + continue_stmts ::= _stmts lastl_stmt continue_stmt + continue_stmts ::= lastl_stmt continue_stmt + continue_stmts ::= continue_stmt + + stmt ::= raise_stmt + raise_stmt ::= exprlist RAISE_VARARGS + raise_stmt ::= nullexprlist RAISE_VARARGS + + stmt ::= exec_stmt + exec_stmt ::= expr exprlist DUP_TOP EXEC_STMT + exec_stmt ::= expr exprlist EXEC_STMT + + stmt ::= assert + stmt ::= assert2 + stmt ::= ifstmt + stmt ::= ifelsestmt + + stmt ::= whilestmt + stmt ::= whilenotstmt + stmt ::= while1stmt + stmt ::= whileelsestmt + stmt ::= while1elsestmt + stmt ::= forstmt + stmt ::= forelsestmt + stmt ::= trystmt + stmt ::= tryelsestmt + stmt ::= tryfinallystmt + stmt ::= withstmt + stmt ::= withasstmt + + stmt ::= del_stmt + del_stmt ::= DELETE_FAST + del_stmt ::= DELETE_NAME + del_stmt ::= DELETE_GLOBAL + del_stmt ::= expr DELETE_SLICE+0 + del_stmt ::= expr expr DELETE_SLICE+1 + del_stmt ::= expr expr DELETE_SLICE+2 + del_stmt ::= expr expr expr DELETE_SLICE+3 + del_stmt ::= delete_subscr + delete_subscr ::= expr expr DELETE_SUBSCR + del_stmt ::= expr DELETE_ATTR + + kwarg ::= LOAD_CONST expr + + classdef ::= LOAD_CONST expr mkfunc + CALL_FUNCTION_0 BUILD_CLASS designator + + stmt ::= classdefdeco + classdefdeco ::= classdefdeco1 designator + classdefdeco1 ::= expr classdefdeco1 CALL_FUNCTION_1 + classdefdeco1 ::= expr classdefdeco2 CALL_FUNCTION_1 + classdefdeco2 ::= LOAD_CONST expr mkfunc CALL_FUNCTION_0 BUILD_CLASS + + _jump ::= JUMP_ABSOLUTE + _jump ::= JUMP_FORWARD + _jump ::= JUMP_BACK + + jmp_false ::= POP_JUMP_IF_FALSE + jmp_false ::= JUMP_IF_FALSE + jmp_true ::= POP_JUMP_IF_TRUE + jmp_true ::= JUMP_IF_TRUE + + multi_come_from ::= multi_come_from COME_FROM + multi_come_from ::= + assert_end ::= multi_come_from POP_TOP + assert_end ::= + + assert ::= assert_expr jmp_true + LOAD_ASSERT RAISE_VARARGS assert_end + assert2 ::= assert_expr jmp_true + LOAD_ASSERT expr RAISE_VARARGS assert_end + assert ::= assert_expr jmp_true + LOAD_GLOBAL RAISE_VARARGS assert_end + assert2 ::= assert_expr jmp_true + LOAD_GLOBAL expr RAISE_VARARGS assert_end + + assert_expr ::= assert_expr_or + assert_expr ::= assert_expr_and + assert_expr ::= expr + assert_expr_or ::= assert_expr jmp_true expr + assert_expr_and ::= assert_expr jmp_false expr + + ifstmt ::= testexpr _ifstmts_jump + + testexpr ::= testfalse + testexpr ::= testtrue + testfalse ::= expr jmp_false + testtrue ::= expr jmp_true + + _ifstmts_jump ::= return_if_stmts + _ifstmts_jump ::= c_stmts_opt JUMP_FORWARD COME_FROM + + iflaststmt ::= testexpr c_stmts_opt JUMP_ABSOLUTE + + iflaststmtl ::= testexpr c_stmts_opt JUMP_BACK + + ifelsestmt ::= testexpr c_stmts_opt JUMP_FORWARD else_suite COME_FROM + + ifelsestmtc ::= testexpr c_stmts_opt JUMP_ABSOLUTE else_suitec + + ifelsestmtr ::= testexpr return_if_stmts return_stmts + + ifelsestmtl ::= testexpr c_stmts_opt JUMP_BACK else_suitel + + + trystmt ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK + try_middle COME_FROM + + tryelsestmt ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK + try_middle else_suite COME_FROM + + tryelsestmtc ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK + try_middle else_suitec COME_FROM + + tryelsestmtl ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK + try_middle else_suitel COME_FROM + + try_middle ::= jmp_abs COME_FROM except_stmts + END_FINALLY + try_middle ::= JUMP_FORWARD COME_FROM except_stmts + END_FINALLY COME_FROM + + except_stmts ::= except_stmts except_stmt + except_stmts ::= except_stmt + + except_stmt ::= except_cond1 except_suite + except_stmt ::= except_cond2 except_suite + except_stmt ::= except + + except_suite ::= c_stmts_opt JUMP_FORWARD + except_suite ::= c_stmts_opt jmp_abs + except_suite ::= return_stmts + + except_cond1 ::= DUP_TOP expr COMPARE_OP + jmp_false POP_TOP POP_TOP POP_TOP + + except_cond2 ::= DUP_TOP expr COMPARE_OP + jmp_false POP_TOP designator POP_TOP + + except ::= POP_TOP POP_TOP POP_TOP c_stmts_opt JUMP_FORWARD + except ::= POP_TOP POP_TOP POP_TOP c_stmts_opt jmp_abs + except ::= POP_TOP POP_TOP POP_TOP return_stmts + + jmp_abs ::= JUMP_ABSOLUTE + jmp_abs ::= JUMP_BACK + + tryfinallystmt ::= SETUP_FINALLY suite_stmts + POP_BLOCK LOAD_CONST + COME_FROM suite_stmts_opt END_FINALLY + + withstmt ::= expr SETUP_WITH POP_TOP suite_stmts_opt + POP_BLOCK LOAD_CONST COME_FROM + WITH_CLEANUP END_FINALLY + + withasstmt ::= expr SETUP_WITH designator suite_stmts_opt + POP_BLOCK LOAD_CONST COME_FROM + WITH_CLEANUP END_FINALLY + + whilestmt ::= SETUP_LOOP + testexpr + l_stmts_opt JUMP_BACK + POP_BLOCK COME_FROM + + whilestmt ::= SETUP_LOOP + testexpr + return_stmts + POP_BLOCK COME_FROM + + while1stmt ::= SETUP_LOOP l_stmts JUMP_BACK COME_FROM + while1stmt ::= SETUP_LOOP return_stmts COME_FROM + whileelsestmt ::= SETUP_LOOP testexpr + l_stmts_opt JUMP_BACK + POP_BLOCK + else_suite COME_FROM + + whileelselaststmt ::= SETUP_LOOP testexpr + l_stmts_opt JUMP_BACK + POP_BLOCK + else_suitec COME_FROM + + _for ::= GET_ITER FOR_ITER + _for ::= LOAD_CONST FOR_LOOP + + for_block ::= l_stmts_opt JUMP_BACK + for_block ::= return_stmts _come_from + + forstmt ::= SETUP_LOOP expr _for designator + for_block POP_BLOCK COME_FROM + + forelsestmt ::= SETUP_LOOP expr _for designator + for_block POP_BLOCK else_suite COME_FROM + + forelselaststmt ::= SETUP_LOOP expr _for designator + for_block POP_BLOCK else_suitec COME_FROM + + forelselaststmtl ::= SETUP_LOOP expr _for designator + for_block POP_BLOCK else_suitel COME_FROM + + ''' + + def p_expr(self, args): + ''' + expr ::= _mklambda + expr ::= SET_LINENO + expr ::= LOAD_FAST + expr ::= LOAD_NAME + expr ::= LOAD_CONST + expr ::= LOAD_ASSERT + expr ::= LOAD_GLOBAL + expr ::= LOAD_DEREF + expr ::= LOAD_LOCALS + expr ::= load_attr + expr ::= binary_expr + expr ::= binary_expr_na + expr ::= build_list + expr ::= cmp + expr ::= mapexpr + expr ::= and + expr ::= and2 + expr ::= or + expr ::= unary_expr + expr ::= call_function + expr ::= unary_not + expr ::= unary_convert + expr ::= binary_subscr + expr ::= binary_subscr2 + expr ::= load_attr + expr ::= get_iter + expr ::= slice0 + expr ::= slice1 + expr ::= slice2 + expr ::= slice3 + expr ::= buildslice2 + expr ::= buildslice3 + expr ::= yield + + binary_expr ::= expr expr binary_op + binary_op ::= BINARY_ADD + binary_op ::= BINARY_MULTIPLY + binary_op ::= BINARY_AND + binary_op ::= BINARY_OR + binary_op ::= BINARY_XOR + binary_op ::= BINARY_SUBTRACT + binary_op ::= BINARY_DIVIDE + binary_op ::= BINARY_TRUE_DIVIDE + binary_op ::= BINARY_FLOOR_DIVIDE + binary_op ::= BINARY_MODULO + binary_op ::= BINARY_LSHIFT + binary_op ::= BINARY_RSHIFT + binary_op ::= BINARY_POWER + + unary_expr ::= expr unary_op + unary_op ::= UNARY_POSITIVE + unary_op ::= UNARY_NEGATIVE + unary_op ::= UNARY_INVERT + + unary_not ::= expr UNARY_NOT + unary_convert ::= expr UNARY_CONVERT + + binary_subscr ::= expr expr BINARY_SUBSCR + binary_subscr2 ::= expr expr DUP_TOPX_2 BINARY_SUBSCR + + load_attr ::= expr LOAD_ATTR + get_iter ::= expr GET_ITER + slice0 ::= expr SLICE+0 + slice0 ::= expr DUP_TOP SLICE+0 + slice1 ::= expr expr SLICE+1 + slice1 ::= expr expr DUP_TOPX_2 SLICE+1 + slice2 ::= expr expr SLICE+2 + slice2 ::= expr expr DUP_TOPX_2 SLICE+2 + slice3 ::= expr expr expr SLICE+3 + slice3 ::= expr expr expr DUP_TOPX_3 SLICE+3 + buildslice3 ::= expr expr expr BUILD_SLICE_3 + buildslice2 ::= expr expr BUILD_SLICE_2 + + yield ::= expr YIELD_VALUE + + _mklambda ::= load_closure mklambda + _mklambda ::= mklambda + + or ::= expr jmp_true expr _come_from + or ::= expr JUMP_IF_TRUE_OR_POP expr COME_FROM + and ::= expr jmp_false expr _come_from + and ::= expr JUMP_IF_FALSE_OR_POP expr COME_FROM + and2 ::= _jump jmp_false COME_FROM expr COME_FROM + + expr ::= conditional + conditional ::= expr jmp_false expr JUMP_FORWARD expr COME_FROM + conditional ::= expr jmp_false expr JUMP_ABSOLUTE expr + expr ::= conditionalnot + conditionalnot ::= expr jmp_true expr _jump expr COME_FROM + + stmt ::= return_lambda + stmt ::= conditional_lambda + stmt ::= conditional_lambda2 + + return_lambda ::= expr RETURN_VALUE LAMBDA_MARKER + conditional_lambda ::= expr jmp_false return_if_stmt return_stmt LAMBDA_MARKER + + cmp ::= cmp_list + cmp ::= compare + compare ::= expr expr COMPARE_OP + cmp_list ::= expr cmp_list1 ROT_TWO POP_TOP + _come_from + cmp_list1 ::= expr DUP_TOP ROT_THREE + COMPARE_OP JUMP_IF_FALSE_OR_POP + cmp_list1 COME_FROM + cmp_list1 ::= expr DUP_TOP ROT_THREE + COMPARE_OP jmp_false + cmp_list1 _come_from + cmp_list1 ::= expr DUP_TOP ROT_THREE + COMPARE_OP JUMP_IF_FALSE_OR_POP + cmp_list2 COME_FROM + cmp_list1 ::= expr DUP_TOP ROT_THREE + COMPARE_OP jmp_false + cmp_list2 _come_from + cmp_list2 ::= expr COMPARE_OP JUMP_FORWARD + cmp_list2 ::= expr COMPARE_OP RETURN_VALUE + mapexpr ::= BUILD_MAP kvlist + + kvlist ::= kvlist kv + kvlist ::= kvlist kv2 + kvlist ::= kvlist kv3 + kvlist ::= + + kv ::= DUP_TOP expr ROT_TWO expr STORE_SUBSCR + kv2 ::= DUP_TOP expr expr ROT_THREE STORE_SUBSCR + kv3 ::= expr expr STORE_MAP + + exprlist ::= exprlist expr + exprlist ::= expr + + nullexprlist ::= + ''' + + def nonterminal(self, nt, args): + collect = ('stmts', 'exprlist', 'kvlist', '_stmts', 'print_items') + + if nt in collect and len(args) > 1: + # + # Collect iterated thingies together. + # + rv = args[0] + rv.append(args[1]) + else: + rv = GenericASTBuilder.nonterminal(self, nt, args) + return rv + + def __ambiguity(self, children): + # only for debugging! to be removed hG/2000-10-15 + print children + return GenericASTBuilder.ambiguity(self, children) + + def resolve(self, list): + if len(list) == 2 and 'funcdef' in list and 'assign' in list: + return 'funcdef' + if 'grammar' in list and 'expr' in list: + return 'expr' + #print >> sys.stderr, 'resolve', str(list) + return GenericASTBuilder.resolve(self, list) + +nop = lambda self, args: None + +p = Parser() + +def parse(tokens, customize): + # + # Special handling for opcodes that take a variable number + # of arguments -- we add a new rule for each: + # + # expr ::= {expr}^n BUILD_LIST_n + # expr ::= {expr}^n BUILD_TUPLE_n + # unpack_list ::= UNPACK_LIST {expr}^n + # unpack ::= UNPACK_TUPLE {expr}^n + # unpack ::= UNPACK_SEQEUENE {expr}^n + # mkfunc ::= {expr}^n LOAD_CONST MAKE_FUNCTION_n + # mkfunc ::= {expr}^n load_closure LOAD_CONST MAKE_FUNCTION_n + # expr ::= expr {expr}^n CALL_FUNCTION_n + # expr ::= expr {expr}^n CALL_FUNCTION_VAR_n POP_TOP + # expr ::= expr {expr}^n CALL_FUNCTION_VAR_KW_n POP_TOP + # expr ::= expr {expr}^n CALL_FUNCTION_KW_n POP_TOP + # + global p + for k, v in customize.items(): + # avoid adding the same rule twice to this parser + if p.customized.has_key(k): + continue + p.customized[k] = None + + #nop = lambda self, args: None + op = k[:string.rfind(k, '_')] + if op in ('BUILD_LIST', 'BUILD_TUPLE', 'BUILD_SET'): + rule = 'build_list ::= ' + 'expr '*v + k + elif op in ('UNPACK_TUPLE', 'UNPACK_SEQUENCE'): + rule = 'unpack ::= ' + k + ' designator'*v + elif op == 'UNPACK_LIST': + rule = 'unpack_list ::= ' + k + ' designator'*v + elif op == 'DUP_TOPX': + # no need to add a rule + continue + #rule = 'dup_topx ::= ' + 'expr '*v + k + elif op == 'MAKE_FUNCTION': + p.addRule('mklambda ::= %s LOAD_LAMBDA %s' % + ('expr '*v, k), nop) + rule = 'mkfunc ::= %s LOAD_CONST %s' % ('expr '*v, k) + elif op == 'MAKE_CLOSURE': + p.addRule('mklambda ::= %s load_closure LOAD_LAMBDA %s' % + ('expr '*v, k), nop) + p.addRule('genexpr ::= %s load_closure LOAD_GENEXPR %s expr GET_ITER CALL_FUNCTION_1' % + ('expr '*v, k), nop) + p.addRule('setcomp ::= %s load_closure LOAD_SETCOMP %s expr GET_ITER CALL_FUNCTION_1' % + ('expr '*v, k), nop) + p.addRule('dictcomp ::= %s load_closure LOAD_DICTCOMP %s expr GET_ITER CALL_FUNCTION_1' % + ('expr '*v, k), nop) + rule = 'mkfunc ::= %s load_closure LOAD_CONST %s' % ('expr '*v, k) +# rule = 'mkfunc ::= %s closure_list LOAD_CONST %s' % ('expr '*v, k) + elif op in ('CALL_FUNCTION', 'CALL_FUNCTION_VAR', + 'CALL_FUNCTION_VAR_KW', 'CALL_FUNCTION_KW'): + na = (v & 0xff) # positional parameters + nk = (v >> 8) & 0xff # keyword parameters + # number of apply equiv arguments: + nak = ( len(op)-len('CALL_FUNCTION') ) / 3 + rule = 'call_function ::= expr ' + 'expr '*na + 'kwarg '*nk \ + + 'expr ' * nak + k + else: + raise Exception('unknown customize token %s' % k) + p.addRule(rule, nop) + ast = p.parse(tokens) +# p.cleanup() + return ast diff --git a/uncompyle2/Scanner.py b/uncompyle2/Scanner.py new file mode 100755 index 00000000..83369d1d --- /dev/null +++ b/uncompyle2/Scanner.py @@ -0,0 +1,849 @@ +# Copyright (c) 1999 John Aycock +# Copyright (c) 2000-2002 by hartmut Goebel +# Copyright (c) 2005 by Dan Pascu +# +# See main module for license. +# + +__all__ = ['Token', 'Scanner', 'getscanner'] + +import types +import disas as dis +from collections import namedtuple +from array import array +from operator import itemgetter + +class Token: + """ + Class representing a byte-code token. + + A byte-code token is equivalent to the contents of one line + as output by dis.dis(). + """ + def __init__(self, type_, attr=None, pattr=None, offset=-1, linestart=False): + self.type = intern(type_) + self.attr = attr + self.pattr = pattr + self.offset = offset + self.linestart = linestart + + def __cmp__(self, o): + if isinstance(o, Token): + # both are tokens: compare type and pattr + return cmp(self.type, o.type) or cmp(self.pattr, o.pattr) + else: + return cmp(self.type, o) + + def __repr__(self): return str(self.type) + def __str__(self): + pattr = self.pattr + if self.linestart: + return '\n%s\t%-17s %r' % (self.offset, self.type, pattr) + else: + return '%s\t%-17s %r' % (self.offset, self.type, pattr) + + def __hash__(self): return hash(self.type) + def __getitem__(self, i): raise IndexError + + +class Code: + """ + Class for representing code-objects. + + This is similar to the original code object, but additionally + the diassembled code is stored in the attribute '_tokens'. + """ + def __init__(self, co, scanner, classname=None): + for i in dir(co): + if i.startswith('co_'): + setattr(self, i, getattr(co, i)) + self._tokens, self._customize = scanner.disassemble(co, classname) + +class Scanner: + def __init__(self, version): + self.version = version + self.resetTokenClass() + + dis.setVersion(version) + globals().update({'HAVE_ARGUMENT': dis.HAVE_ARGUMENT}) + globals().update({k.replace('+','_'):v for (k,v) in dis.opmap.items()}) + globals().update({'PJIF': dis.opmap['POP_JUMP_IF_FALSE']}) + globals().update({'PJIT': dis.opmap['POP_JUMP_IF_TRUE']}) + globals().update({'JA': dis.opmap['JUMP_ABSOLUTE']}) + globals().update({'JF': dis.opmap['JUMP_FORWARD']}) + + self.JUMP_OPs = map(lambda op: dis.opname[op], + dis.hasjrel + dis.hasjabs) + + def setShowAsm(self, showasm, out=None): + self.showasm = showasm + self.out = out + + def setTokenClass(self, tokenClass): + assert type(tokenClass) == types.ClassType + self.Token = tokenClass + + def resetTokenClass(self): + self.setTokenClass(Token) + + def disassemble(self, co, classname=None): + """ + Disassemble a code object, returning a list of 'Token'. + + The main part of this procedure is modelled after + dis.disassemble(). + """ + rv = [] + customize = {} + Token = self.Token # shortcut + self.code = code = array('B', co.co_code) + n = len(code) + self.prev = [0] + # mapping adresses of instru & arg + for i in self.op_range(0, n): + c = code[i] + op = code[i] + self.prev.append(i) + if op >= HAVE_ARGUMENT: + self.prev.append(i) + self.prev.append(i) + + self.lines = [] + linetuple = namedtuple('linetuple', ['l_no', 'next']) + j = 0 + # linestarts contains bloc code adresse (addr,block) + linestarts = list(dis.findlinestarts(co)) + linestartoffsets = {a for (a, _) in linestarts} + (prev_start_byte, prev_line_no) = linestarts[0] + for (start_byte, line_no) in linestarts[1:]: + while j < start_byte: + self.lines.append(linetuple(prev_line_no, start_byte)) + j += 1 + last_op = code[self.prev[start_byte]] + (prev_start_byte, prev_line_no) = (start_byte, line_no) + while j < n: + self.lines.append(linetuple(prev_line_no, n)) + j+=1 + # self.lines contains (block,addrLastInstr) + cf = self.find_jump_targets(code) + # contains (code, [addrRefToCode]) + if classname: + classname = '_' + classname.lstrip('_') + '__' + def unmangle(name): + if name.startswith(classname) and name[-2:] != '__': + return name[len(classname) - 2:] + return name + + free = [ unmangle(name) for name in (co.co_cellvars + co.co_freevars) ] + names = [ unmangle(name) for name in co.co_names ] + varnames = [ unmangle(name) for name in co.co_varnames ] + else: + free = co.co_cellvars + co.co_freevars + names = co.co_names + varnames = co.co_varnames + + last_stmt = self.next_stmt[0] + i = self.next_stmt[last_stmt] + replace = {} + while i < n-1: + if self.lines[last_stmt].next > i: + if code[last_stmt] == PRINT_ITEM: + if code[i] == PRINT_ITEM: + replace[i] = 'PRINT_ITEM_CONT' + elif code[i] == PRINT_NEWLINE: + replace[i] = 'PRINT_NEWLINE_CONT' + last_stmt = i + i = self.next_stmt[i] + + imports = self.all_instr(0, n, (IMPORT_NAME, IMPORT_FROM, IMPORT_STAR)) + if len(imports) > 1: + last_import = imports[0] + for i in imports[1:]: + if self.lines[last_import].next > i: + if code[last_import] == IMPORT_NAME == code[i]: + replace[i] = 'IMPORT_NAME_CONT' + last_import = i + + extended_arg = 0 + for offset in self.op_range(0, n): + + if offset in cf: + k = 0 + for j in cf[offset]: + rv.append(Token('COME_FROM', None, repr(j), + offset="%s_%d" % (offset, k) )) + k += 1 + + op = code[offset] + opname = dis.opname[op] + oparg = None; pattr = None + if op >= HAVE_ARGUMENT: + oparg = code[offset+1] + code[offset+2] * 256 + extended_arg + extended_arg = 0 + if op == dis.EXTENDED_ARG: + extended_arg = oparg * 65536L + continue + if op in dis.hasconst: + const = co.co_consts[oparg] + if type(const) == types.CodeType: + oparg = const + if const.co_name == '': + assert opname == 'LOAD_CONST' + opname = 'LOAD_LAMBDA' + elif const.co_name == '': + opname = 'LOAD_GENEXPR' + elif const.co_name == '': + opname = 'LOAD_DICTCOMP' + elif const.co_name == '': + opname = 'LOAD_SETCOMP' + # verify uses 'pattr' for comparism, since 'attr' + # now holds Code(const) and thus can not be used + # for comparism (todo: think about changing this) + #pattr = 'code_object @ 0x%x %s->%s' %\ + # (id(const), const.co_filename, const.co_name) + pattr = '' + else: + pattr = const + elif op in dis.hasname: + pattr = names[oparg] + elif op in dis.hasjrel: + pattr = repr(offset + 3 + oparg) + elif op in dis.hasjabs: + pattr = repr(oparg) + elif op in dis.haslocal: + pattr = varnames[oparg] + elif op in dis.hascompare: + pattr = dis.cmp_op[oparg] + elif op in dis.hasfree: + pattr = free[oparg] + + if op in (BUILD_LIST, BUILD_TUPLE, BUILD_SET, BUILD_SLICE, + UNPACK_SEQUENCE, + MAKE_FUNCTION, CALL_FUNCTION, MAKE_CLOSURE, + CALL_FUNCTION_VAR, CALL_FUNCTION_KW, + CALL_FUNCTION_VAR_KW, DUP_TOPX, + ): + # CE - Hack for >= 2.5 + # Now all values loaded via LOAD_CLOSURE are packed into + # a tuple before calling MAKE_CLOSURE. + if op == BUILD_TUPLE and \ + code[offset-3] == LOAD_CLOSURE: + continue + else: + opname = '%s_%d' % (opname, oparg) + if op != BUILD_SLICE: + customize[opname] = oparg + elif op == JA: + target = self.get_target(offset) + if target < offset: + if offset in self.stmts and code[offset+3] not in (END_FINALLY, POP_BLOCK) \ + and offset not in self.not_continue: + opname = 'CONTINUE' + else: + opname = 'JUMP_BACK' + + elif op == LOAD_GLOBAL: + try: + if pattr == 'AssertionError' and rv and rv[-1] == 'POP_JUMP_IF_TRUE': + opname = 'LOAD_ASSERT' + except AttributeError: + pass + elif op == RETURN_VALUE: + if offset in self.return_end_ifs: + opname = 'RETURN_END_IF' + + if offset not in replace: + rv.append(Token(opname, oparg, pattr, offset, linestart = offset in linestartoffsets)) + else: + rv.append(Token(replace[offset], oparg, pattr, offset, linestart = offset in linestartoffsets)) + + if self.showasm: + out = self.out # shortcut + for t in rv: + print >>out, t + print >>out + + return rv, customize + + def get_target(self, pos, op=None): + if op is None: + op = self.code[pos] + target = self.code[pos+1] + self.code[pos+2] * 256 + if op in dis.hasjrel: + target += pos + 3 + return target + + def first_instr(self, start, end, instr, target=None, exact=True): + """ + Find the first in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + return i + dest = self.get_target(i, op) + if dest == target: + return i + elif not exact: + _distance = abs(target - dest) + if _distance < distance: + distance = _distance + pos = i + return pos + + def last_instr(self, start, end, instr, target=None, exact=True): + """ + Find the last in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + + code = self.code + if not (start>=0 and end<=len(code)): + return None + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + pos = i + else: + dest = self.get_target(i, op) + if dest == target: + distance = 0 + pos = i + elif not exact: + _distance = abs(target - dest) + if _distance <= distance: + distance = _distance + pos = i + return pos + + def all_instr(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + return result + + def op_size(self, op): + if op < HAVE_ARGUMENT: + return 1 + else: + return 3 + + def op_range(self, start, end): + while start < end: + yield start + start += self.op_size(self.code[start]) + + def build_stmt_indices(self): + code = self.code + start = 0; + end = len(code) + + stmt_opcodes = { + SETUP_LOOP, BREAK_LOOP, CONTINUE_LOOP, + SETUP_FINALLY, END_FINALLY, SETUP_EXCEPT, SETUP_WITH, + POP_BLOCK, STORE_FAST, DELETE_FAST, STORE_DEREF, + STORE_GLOBAL, DELETE_GLOBAL, STORE_NAME, DELETE_NAME, + STORE_ATTR, DELETE_ATTR, STORE_SUBSCR, DELETE_SUBSCR, + RETURN_VALUE, RAISE_VARARGS, POP_TOP, + PRINT_EXPR, PRINT_ITEM, PRINT_NEWLINE, PRINT_ITEM_TO, PRINT_NEWLINE_TO, + STORE_SLICE_0, STORE_SLICE_1, STORE_SLICE_2, STORE_SLICE_3, + DELETE_SLICE_0, DELETE_SLICE_1, DELETE_SLICE_2, DELETE_SLICE_3, + JUMP_ABSOLUTE, EXEC_STMT, + } + + stmt_opcode_seqs = [(PJIF, JF), (PJIF, JA), (PJIT, JF), (PJIT, JA)] + + designator_ops = { + STORE_FAST, STORE_NAME, STORE_GLOBAL, STORE_DEREF, STORE_ATTR, + STORE_SLICE_0, STORE_SLICE_1, STORE_SLICE_2, STORE_SLICE_3, + STORE_SUBSCR, UNPACK_SEQUENCE, JA + } + + prelim = self.all_instr(start, end, stmt_opcodes) + + stmts = self.stmts = set(prelim) + + pass_stmts = set() + for seq in stmt_opcode_seqs: + for i in self.op_range(start, end-(len(seq)+1)): + match = True + for elem in seq: + if elem != code[i]: + match = False + break + i += self.op_size(code[i]) + + if match: + i = self.prev[i] + stmts.add(i) + pass_stmts.add(i) + + if pass_stmts: + stmt_list = list(stmts) + stmt_list.sort() + else: + stmt_list = prelim + last_stmt = -1 + self.next_stmt = [] + slist = self.next_stmt = [] + i = 0 + for s in stmt_list: + if code[s] == JA and s not in pass_stmts: + target = self.get_target(s) + if target > s or self.lines[last_stmt].l_no == self.lines[s].l_no: + stmts.remove(s) + continue + j = self.prev[s] + while code[j] == JA: + j = self.prev[j] + if code[j] == LIST_APPEND: #list comprehension + stmts.remove(s) + continue + elif code[s] == POP_TOP and code[self.prev[s]] == ROT_TWO: + stmts.remove(s) + continue + elif code[s] in designator_ops: + j = self.prev[s] + while code[j] in designator_ops: + j = self.prev[j] + if code[j] == FOR_ITER: + stmts.remove(s) + continue + last_stmt = s + slist += [s] * (s-i) + i = s + slist += [len(code)] * (len(code)-len(slist)) + + + def remove_mid_line_ifs(self, ifs): + filtered = [] + for i in ifs: + if self.lines[i].l_no == self.lines[i+3].l_no: + if self.code[self.prev[self.lines[i].next]] in (PJIT, PJIF): + continue + filtered.append(i) + return filtered + + + def rem_or(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + + pjits = self.all_instr(start, end, PJIT) + filtered = [] + for pjit in pjits: + tgt = self.get_target(pjit)-3 + for i in result: + if i <= pjit or i >= tgt: + filtered.append(i) + result = filtered + filtered = [] + return result + + def next_except_jump(self, start): + """ + Return the next jump that was generated by an except SomeException: + construct in a try...except...else clause or None if not found. + """ + + except_match = self.first_instr(start, self.lines[start].next, POP_JUMP_IF_FALSE) + if except_match: + jmp = self.prev[self.get_target(except_match)] + self.ignore_if.add(except_match) + return jmp + + count_END_FINALLY = 0 + count_SETUP_ = 0 + for i in self.op_range(start, len(self.code)): + op = self.code[i] + if op == END_FINALLY: + if count_END_FINALLY == count_SETUP_: + assert self.code[self.prev[i]] in (JA, JF, RETURN_VALUE) + return self.prev[i] + count_END_FINALLY += 1 + elif op in (SETUP_EXCEPT, SETUP_WITH, SETUP_FINALLY): + count_SETUP_ += 1 + + + def restrict_to_parent(self, target, parent): + """Restrict pos to parent boundaries.""" + if not (parent['start'] < target < parent['end']): + target = parent['end'] + return target + + + def detect_structure(self, pos, op=None): + """ + Detect type of block structures and their boundaries to fix optimizied jumps + in python2.3+ + """ + + # TODO: check the struct boundaries more precisely -Dan + + code = self.code + # Ev remove this test and make op a mandatory argument -Dan + if op is None: + op = code[pos] + + ## Detect parent structure + parent = self.structs[0] + start = parent['start'] + end = parent['end'] + for s in self.structs: + _start = s['start'] + _end = s['end'] + if (_start <= pos < _end) and (_start >= start and _end <= end): + start = _start + end = _end + parent = s + ## We need to know how many new structures were added in this run + origStructCount = len(self.structs) + + if op == SETUP_LOOP: + #import pdb; pdb.set_trace() + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + if target != end: + self.fixed_jumps[pos] = end + + (line_no, next_line_byte) = self.lines[pos] + jump_back = self.last_instr(start, end, JA, + next_line_byte, False) + if not jump_back: # loop suite ends in return. wtf right? + jump_back = self.last_instr(start, end, RETURN_VALUE) + 1 + if not jump_back: + return + if code[self.prev[next_line_byte]] not in (PJIF, PJIT): + loop_type = 'for' + else: + loop_type = 'while' + self.ignore_if.add(self.prev[next_line_byte]) + target = next_line_byte + end = jump_back + 3 + else: + if self.get_target(jump_back) >= next_line_byte: + jump_back = self.last_instr(start, end, JA, + start, False) + + if end > jump_back+4 and code[end] in (JF, JA): + if code[jump_back+4] in (JA, JF): + if self.get_target(jump_back+4) == self.get_target(end): + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + elif target < pos: + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + + target = self.get_target(jump_back, JA) + + if code[target] in (FOR_ITER, GET_ITER): + loop_type = 'for' + else: + loop_type = 'while' + test = self.prev[next_line_byte] + if test == pos: + loop_type = 'while 1' + else: + self.ignore_if.add(test) + test_target = self.get_target(test) + if test_target > (jump_back+3): + jump_back = test_target + + self.loops.append(target) + self.structs.append({'type': loop_type + '-loop', + 'start': target, + 'end': jump_back}) + if jump_back+3 != end: + self.structs.append({'type': loop_type + '-else', + 'start': jump_back+3, + 'end': end}) + elif op == SETUP_EXCEPT: + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + if target != end: + self.fixed_jumps[pos] = end + #print target, end, parent + ## Add the try block + self.structs.append({'type': 'try', + 'start': start, + 'end': end-4}) + ## Now isolate the except and else blocks + end_else = start_else = self.get_target(self.prev[end]) + + ## Add the except blocks + i = end + while self.code[i] != END_FINALLY: + jmp = self.next_except_jump(i) + if self.code[jmp] == RETURN_VALUE: + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp+1}) + i = jmp + 1 + else: + if self.get_target(jmp) != start_else: + end_else = self.get_target(jmp) + if self.code[jmp] == JF: + self.fixed_jumps[jmp] = -1 + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp}) + i = jmp + 3 + + ## Add the try-else block + if end_else != start_else: + r_end_else = self.restrict_to_parent(end_else, parent) + self.structs.append({'type': 'try-else', + 'start': i+1, + 'end': r_end_else}) + self.fixed_jumps[i] = r_end_else + else: + self.fixed_jumps[i] = i+1 + + + elif op in (PJIF, PJIT): + start = pos+3 + target = self.get_target(pos, op) + rtarget = self.restrict_to_parent(target, parent) + pre = self.prev + + if target != rtarget and parent['type'] == 'and/or': + self.fixed_jumps[pos] = rtarget + return + #does this jump to right after another cond jump? + # if so, it's part of a larger conditional + if (code[pre[target]] in (JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP, + PJIF, PJIT)) and (target > pos): + self.fixed_jumps[pos] = pre[target] + self.structs.append({'type': 'and/or', + 'start': start, + 'end': pre[target]}) + return + + # is this an if and + if op == PJIF: + match = self.rem_or(start, self.next_stmt[pos], PJIF, target) + match = self.remove_mid_line_ifs(match) + if match: + if code[pre[rtarget]] in (JF, JA) \ + and pre[rtarget] not in self.stmts \ + and self.restrict_to_parent(self.get_target(pre[rtarget]), parent) == rtarget: + if code[pre[pre[rtarget]]] == JA \ + and self.remove_mid_line_ifs([pos]) \ + and target == self.get_target(pre[pre[rtarget]]) \ + and (pre[pre[rtarget]] not in self.stmts or self.get_target(pre[pre[rtarget]]) > pre[pre[rtarget]])\ + and 1 == len(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], (PJIF, PJIT), target))): + pass + elif code[pre[pre[rtarget]]] == RETURN_VALUE \ + and self.remove_mid_line_ifs([pos]) \ + and 1 == (len(set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT), target))) \ + | set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT, JA), pre[rtarget], True))))): + pass + else: + fix = None + jump_ifs = self.all_instr(start, self.next_stmt[pos], PJIF) + last_jump_good = True + for j in jump_ifs: + if target == self.get_target(j): + if self.lines[j].next == j+3 and last_jump_good: + fix = j + break + else: + last_jump_good = False + self.fixed_jumps[pos] = fix or match[-1] + return + else: + self.fixed_jumps[pos] = match[-1] + return + else: # op == PJIT + next = self.next_stmt[pos] + if pre[next] == pos: + pass + elif code[next] in (JF, JA) and target == self.get_target(next): + if code[pre[next]] == PJIF: + if code[next] == JF or target != rtarget or code[pre[pre[rtarget]]] not in (JA, RETURN_VALUE): + self.fixed_jumps[pos] = pre[next] + return + elif code[next] == JA and code[target] in (JA, JF) \ + and self.get_target(target) == self.get_target(next): + self.fixed_jumps[pos] = pre[next] + return + + #don't add a struct for a while test, it's already taken care of + if pos in self.ignore_if: + return + + if code[pre[rtarget]] == JA and pre[rtarget] in self.stmts \ + and pre[rtarget] != pos and pre[pre[rtarget]] != pos \ + and not (code[rtarget] == JA and code[rtarget+3] == POP_BLOCK and code[pre[pre[rtarget]]] != JA): + rtarget = pre[rtarget] + + #does the if jump just beyond a jump op, then this is probably an if statement + if code[pre[rtarget]] in (JA, JF): + if_end = self.get_target(pre[rtarget]) + + #is this a loop not an if? + if (if_end < pre[rtarget]) and (code[pre[if_end]] == SETUP_LOOP): + if(if_end > start): + return + + end = self.restrict_to_parent(if_end, parent) + + self.structs.append({'type': 'if-then', + 'start': start, + 'end': pre[rtarget]}) + self.not_continue.add(pre[rtarget]) + + if rtarget < end: + self.structs.append({'type': 'if-else', + 'start': rtarget, + 'end': end}) + elif code[pre[rtarget]] == RETURN_VALUE: + self.structs.append({'type': 'if-then', + 'start': start, + 'end': rtarget}) + self.return_end_ifs.add(pre[rtarget]) + + elif op in (JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP): + target = self.get_target(pos, op) + if target > pos: + unop_target = self.last_instr(pos, target, JF, target) + if unop_target and code[unop_target+3] != ROT_TWO: + self.fixed_jumps[pos] = unop_target + else: + self.fixed_jumps[pos] = self.restrict_to_parent(target, parent) + + + + + def find_jump_targets(self, code): + """ + Detect all offsets in a byte code which are jump targets. + + Return the list of offsets. + + This procedure is modelled after dis.findlables(), but here + for each target the number of jumps are counted. + """ + + hasjrel = dis.hasjrel + hasjabs = dis.hasjabs + + n = len(code) + self.structs = [{'type': 'root', + 'start': 0, + 'end': n-1}] + self.loops = [] ## All loop entry points + self.fixed_jumps = {} ## Map fixed jumps to their real destination + self.ignore_if = set() + self.build_stmt_indices() + self.not_continue = set() + self.return_end_ifs = set() + + targets = {} + for i in self.op_range(0, n): + op = code[i] + + ## Determine structures and fix jumps for 2.3+ + self.detect_structure(i, op) + + if op >= HAVE_ARGUMENT: + label = self.fixed_jumps.get(i) + oparg = code[i+1] + code[i+2] * 256 + + + if label is None: + if op in hasjrel and op != FOR_ITER: + label = i + 3 + oparg + elif op in hasjabs: + if op in (JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP): + if (oparg > i): + label = oparg + + if label is not None and label != -1: + targets[label] = targets.get(label, []) + [i] + elif op == END_FINALLY and i in self.fixed_jumps: + label = self.fixed_jumps[i] + targets[label] = targets.get(label, []) + [i] + return targets diff --git a/uncompyle2/Scanner25.py b/uncompyle2/Scanner25.py new file mode 100755 index 00000000..f215f8b3 --- /dev/null +++ b/uncompyle2/Scanner25.py @@ -0,0 +1,945 @@ +# Copyright (c) 1999 John Aycock +# Copyright (c) 2000-2002 by hartmut Goebel +# Copyright (c) 2005 by Dan Pascu +# +# See main module for license. +# + +__all__ = ['Token', 'Scanner', 'getscanner'] + +import types +import disas as dis +from collections import namedtuple +from array import array +from operator import itemgetter +from struct import * +from Scanner import Token, Code + +class Scanner: + def __init__(self, version): + self.version = version + self.resetTokenClass() + + dis.setVersion(version) + globals().update({'HAVE_ARGUMENT': dis.HAVE_ARGUMENT}) + globals().update({k.replace('+','_'):v for (k,v) in dis.opmap.items()}) + globals().update({'PJIF': dis.opmap['JUMP_IF_FALSE']}) + globals().update({'PJIT': dis.opmap['JUMP_IF_TRUE']}) + globals().update({'JA': dis.opmap['JUMP_ABSOLUTE']}) + globals().update({'JF': dis.opmap['JUMP_FORWARD']}) + + self.JUMP_OPs = map(lambda op: dis.opname[op], + dis.hasjrel + dis.hasjabs) + + def setShowAsm(self, showasm, out=None): + self.showasm = showasm + self.out = out + + def setTokenClass(self, tokenClass): + assert type(tokenClass) == types.ClassType + self.Token = tokenClass + + def resetTokenClass(self): + self.setTokenClass(Token) + + def disassemble(self, co, classname=None): + """ + Disassemble a code object, returning a list of 'Token'. + + The main part of this procedure is modelled after + dis.disassemble(). + """ + rv = [] + customize = {} + Token = self.Token # shortcut + self.code = array('B', co.co_code) + n = len(self.code) + # linestarts contains bloc code adresse (addr,block) + self.linestarts = list(dis.findlinestarts(co)) + self.prev = [0] + pop_delet = 0 + i=0 + self.restructRelativeJump() + # class and names + if classname: + classname = '_' + classname.lstrip('_') + '__' + def unmangle(name): + if name.startswith(classname) and name[-2:] != '__': + return name[len(classname) - 2:] + return name + + free = [ unmangle(name) for name in (co.co_cellvars + co.co_freevars) ] + names = [ unmangle(name) for name in co.co_names ] + varnames = [ unmangle(name) for name in co.co_varnames ] + else: + free = co.co_cellvars + co.co_freevars + names = co.co_names + varnames = co.co_varnames + self.names = names + # add instruction to remonde in "toDel" list + toDel = [] + while i < n-pop_delet: + op = self.code[i] + ret = self.getOpcodeToDel(i) + if ret != None: + toDel += ret + if op >= dis.HAVE_ARGUMENT: + i += 2 + i += 1 + + if toDel: # degeu a revoir / repenser (tout faire d'un coup? chaud) + toDel = sorted(list(set(toDel))) + delta = 0 + for x in toDel: + if self.code[x-delta] >= dis.HAVE_ARGUMENT: + self.code.pop(x-delta) + self.restructCode(x-delta) + self.code.pop(x-delta) + self.restructCode(x-delta) + self.code.pop(x-delta) + self.restructCode(x-delta) + delta += 3 + else: + self.code.pop(x-delta) + self.restructCode(x-delta) + delta += 1 + # mapping adresses of prev instru + n = len(self.code) + for i in self.op_range(0, n): + op = self.code[i] + self.prev.append(i) + if op >= HAVE_ARGUMENT: + self.prev.append(i) + self.prev.append(i) + + j = 0 + linestarts = self.linestarts + self.lines = [] + linetuple = namedtuple('linetuple', ['l_no', 'next']) + linestartoffsets = {a for (a, _) in linestarts} + (prev_start_byte, prev_line_no) = linestarts[0] + for (start_byte, line_no) in linestarts[1:]: + while j < start_byte: + self.lines.append(linetuple(prev_line_no, start_byte)) + j += 1 + last_op = self.code[self.prev[start_byte]] + (prev_start_byte, prev_line_no) = (start_byte, line_no) + while j < n: + self.lines.append(linetuple(prev_line_no, n)) + j+=1 + # self.lines contains (block,addrLastInstr) + cf = self.find_jump_targets(self.code) + # contains (code, [addrRefToCode]) + + last_stmt = self.next_stmt[0] + i = self.next_stmt[last_stmt] + replace = {} + while i < n-1: + if self.lines[last_stmt].next > i: + if self.code[last_stmt] == PRINT_ITEM: + if self.code[i] == PRINT_ITEM: + replace[i] = 'PRINT_ITEM_CONT' + elif self.code[i] == PRINT_NEWLINE: + replace[i] = 'PRINT_NEWLINE_CONT' + last_stmt = i + i = self.next_stmt[i] + + imports = self.all_instr(0, n, (IMPORT_NAME, IMPORT_FROM, IMPORT_STAR)) + if len(imports) > 1: + last_import = imports[0] + for i in imports[1:]: + if self.lines[last_import].next > i: + if self.code[last_import] == IMPORT_NAME == self.code[i]: + replace[i] = 'IMPORT_NAME_CONT' + last_import = i + + extended_arg = 0 + for offset in self.op_range(0, n): + if offset in cf: + k = 0 + for j in cf[offset]: + rv.append(Token('COME_FROM', None, repr(j), + offset="%s_%d" % (offset, k) )) + k += 1 + + op = self.code[offset] + opname = dis.opname[op] + oparg = None; pattr = None + if op >= HAVE_ARGUMENT: + oparg = self.get_argument(offset) + extended_arg + extended_arg = 0 + if op == dis.EXTENDED_ARG: + extended_arg = oparg * 65536L + continue + if op in dis.hasconst: + const = co.co_consts[oparg] + if type(const) == types.CodeType: + oparg = const + if const.co_name == '': + assert opname == 'LOAD_CONST' + opname = 'LOAD_LAMBDA' + elif const.co_name == '': + opname = 'LOAD_GENEXPR' + elif const.co_name == '': + opname = 'LOAD_DICTCOMP' + elif const.co_name == '': + opname = 'LOAD_SETCOMP' + # verify uses 'pattr' for comparism, since 'attr' + # now holds Code(const) and thus can not be used + # for comparism (todo: think about changing this) + #pattr = 'code_object @ 0x%x %s->%s' %\ + # (id(const), const.co_filename, const.co_name) + pattr = '' + else: + pattr = const + elif op in dis.hasname: + pattr = names[oparg] + elif op in dis.hasjrel: + pattr = repr(offset + 3 + oparg) + elif op in dis.hasjabs: + pattr = repr(oparg) + elif op in dis.haslocal: + pattr = varnames[oparg] + elif op in dis.hascompare: + pattr = dis.cmp_op[oparg] + elif op in dis.hasfree: + pattr = free[oparg] + + if op in (BUILD_LIST, BUILD_TUPLE, BUILD_SLICE, + UNPACK_SEQUENCE, + MAKE_FUNCTION, CALL_FUNCTION, MAKE_CLOSURE, + CALL_FUNCTION_VAR, CALL_FUNCTION_KW, + CALL_FUNCTION_VAR_KW, DUP_TOPX, + ): + # CE - Hack for >= 2.5 + # Now all values loaded via LOAD_CLOSURE are packed into + # a tuple before calling MAKE_CLOSURE. + if op == BUILD_TUPLE and \ + self.code[offset-3] == LOAD_CLOSURE: + continue + else: + opname = '%s_%d' % (opname, oparg) + if op != BUILD_SLICE: + customize[opname] = oparg + elif op == JA: + target = self.get_target(offset) + if target < offset: + if offset in self.stmts and self.code[offset+3] not in (END_FINALLY, POP_BLOCK) \ + and offset not in self.not_continue: + opname = 'CONTINUE' + else: + opname = 'JUMP_BACK' + + elif op == LOAD_GLOBAL: + try: + if pattr == 'AssertionError' and rv and rv[-1] == 'JUMP_IF_TRUE': + opname = 'LOAD_ASSERT' + except AttributeError: + pass + elif op == RETURN_VALUE: + if offset in self.return_end_ifs: + opname = 'RETURN_END_IF' + + if offset not in replace: + rv.append(Token(opname, oparg, pattr, offset, linestart = offset in linestartoffsets)) + else: + rv.append(Token(replace[offset], oparg, pattr, offset, linestart = offset in linestartoffsets)) + + if self.showasm: + out = self.out # shortcut + for t in rv: + print >>out, t + print >>out + return rv, customize + + def getOpcodeToDel(self, i): + """ + check validity of the opcode at position I and return a list of opcode to delete + """ + opcode = self.code[i] + opsize = self.op_size(opcode) + if opcode == EXTENDED_ARG: + raise 'A faire' + if opcode in (PJIF,PJIT,JA,JF): + if self.code[i+opsize] == POP_TOP: + if self.code[i+opsize] == self.code[i+opsize+1] and self.code[i+opsize] == self.code[i+opsize+2] \ + and opcode in (JF,JA) and self.code[i+opsize] != self.code[i+opsize+3]: + pass + else: + return [i+opsize] + if opcode == RAISE_VARARGS: + if self.code[i+opsize] == POP_TOP: + return [i+opsize] + if opcode == BUILD_LIST: + if self.code[i+opsize] == DUP_TOP and self.code[i+opsize+1] in (STORE_NAME,STORE_FAST): + # del DUP/STORE_NAME x + toDel = [i+opsize,i+opsize+1] + nameDel = self.get_argument(i+opsize+1) + start = i+opsize+1 + end = start + # del LOAD_NAME x + while end < len(self.code): + end = self.first_instr(end, len(self.code), (LOAD_NAME,LOAD_FAST)) + if nameDel == self.get_argument(end): + toDel += [end] + break + if self.code[end] == LOAD_NAME: + end += self.op_size(LOAD_NAME) + else: + end += self.op_size(LOAD_FAST) + # log JA/POP_TOP to del and update PJIF + while start < end: + start = self.first_instr(start, len(self.code), (PJIF)) + if start == None: break + target = self.get_target(start) + if self.code[target] == POP_TOP and self.code[target-3] == JA: + toDel += [target, target-3] + # update PJIF + target = self.get_target(target-3) + if target > 0xFFFF: + raise 'A gerer' + self.code[start+1] = target & 0xFF + self.code[start+2] = (target >> 8) & 0xFF + start += self.op_size(PJIF) + # del DELETE_NAME x + while end < len(self.code): + end = self.first_instr(end, len(self.code), (DELETE_NAME,DELETE_FAST)) + if nameDel == self.get_argument(end): + toDel += [end] + break + if self.code[end] == DELETE_NAME: + end += self.op_size(DELETE_NAME) + else: + end += self.op_size(DELETE_FAST) + return toDel + return None + + def restructRelativeJump(self): + """ + change relative JUMP_IF_FALSE/TRUE to absolut jump + and remap the target of PJIF/PJIT + """ + for i in self.op_range(0, len(self.code)): + if(self.code[i] in (PJIF,PJIT)): + target = self.get_argument(i) + target += i + 3 + if target > 0xFFFF: + raise 'A gerer' + self.code[i+1] = target & 0xFF + self.code[i+2] = (target >> 8) & 0xFF + + for i in self.op_range(0, len(self.code)): + if(self.code[i] in (PJIF,PJIT)): + target = self.get_target(i) + if self.code[target] == JA: + target = self.get_target(target) + if target > 0xFFFF: + raise 'A gerer' + self.code[i+1] = target & 0xFF + self.code[i+2] = (target >> 8) & 0xFF + + def restructCode(self, i): + """ + restruct linestarts and jump destination after removing a POP_TOP + """ + result = list() + for item in self.linestarts: + if i < item[0]: + result.append((item[0]-1, item[1])) + else: + result.append((item[0], item[1])) + self.linestarts = result + + for x in self.op_range(0, len(self.code)): + op = self.code[x] + if op >= HAVE_ARGUMENT: + if op in dis.hasjrel: + if x < i and self.get_target(x) > i: + if self.code[x+1]-1 < 0: + self.code[x+2] -= 1 + self.code[x+1] = self.code[x+1]+255 + else: + self.code[x+1] -= 1 + elif op in dis.hasjabs: + if i < self.get_target(x): + if self.code[x+1]-1 < 0: + self.code[x+2] -= 1 + self.code[x+1] = self.code[x+1]+255 + else: + self.code[x+1] -= 1 + + def get_target(self, pos, op=None): + if op is None: + op = self.code[pos] + target = self.get_argument(pos) + if op in dis.hasjrel: + target += pos + 3 + return target + + def get_argument(self, pos): + target = self.code[pos+1] + self.code[pos+2] * 256 + return target + + def first_instr(self, start, end, instr, target=None, exact=True): + """ + Find the first in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + return i + dest = self.get_target(i, op) + if dest == target: + return i + elif not exact: + _distance = abs(target - dest) + if _distance < distance: + distance = _distance + pos = i + return pos + + def last_instr(self, start, end, instr, target=None, exact=True): + """ + Find the last in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + + code = self.code + if not (start>=0 and end<=len(code)): + return None + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + pos = i + else: + dest = self.get_target(i, op) + if dest == target: + distance = 0 + pos = i + elif not exact: + _distance = abs(target - dest) + if _distance <= distance: + distance = _distance + pos = i + return pos + + def all_instr(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + return result + + def op_size(self, op): + if op < HAVE_ARGUMENT: + return 1 + else: + return 3 + + def op_range(self, start, end): + while start < end: + yield start + start += self.op_size(self.code[start]) + + def build_stmt_indices(self): + code = self.code + start = 0; + end = len(code) + + stmt_opcodes = { + SETUP_LOOP, BREAK_LOOP, CONTINUE_LOOP, + SETUP_FINALLY, END_FINALLY, SETUP_EXCEPT, + POP_BLOCK, STORE_FAST, DELETE_FAST, STORE_DEREF, + STORE_GLOBAL, DELETE_GLOBAL, STORE_NAME, DELETE_NAME, + STORE_ATTR, DELETE_ATTR, STORE_SUBSCR, DELETE_SUBSCR, + RETURN_VALUE, RAISE_VARARGS, POP_TOP, + PRINT_EXPR, PRINT_ITEM, PRINT_NEWLINE, PRINT_ITEM_TO, PRINT_NEWLINE_TO, + JUMP_ABSOLUTE, EXEC_STMT, + } + + stmt_opcode_seqs = [(PJIF, JF), (PJIF, JA), (PJIT, JF), (PJIT, JA)] + + designator_ops = { + STORE_FAST, STORE_NAME, STORE_GLOBAL, STORE_DEREF, STORE_ATTR, + STORE_SLICE_0, STORE_SLICE_1, STORE_SLICE_2, STORE_SLICE_3, + STORE_SUBSCR, UNPACK_SEQUENCE, JA + } + + prelim = self.all_instr(start, end, stmt_opcodes) + + stmts = self.stmts = set(prelim) + pass_stmts = set() + for seq in stmt_opcode_seqs: + for i in self.op_range(start, end-(len(seq)+1)): + match = True + for elem in seq: + if elem != code[i]: + match = False + break + i += self.op_size(code[i]) + + if match: + i = self.prev[i] + stmts.add(i) + pass_stmts.add(i) + + if pass_stmts: + stmt_list = list(stmts) + stmt_list.sort() + else: + stmt_list = prelim + last_stmt = -1 + self.next_stmt = [] + slist = self.next_stmt = [] + i = 0 + for s in stmt_list: + if code[s] == JA and s not in pass_stmts: + target = self.get_target(s) + if target > s or self.lines[last_stmt].l_no == self.lines[s].l_no: + stmts.remove(s) + continue + j = self.prev[s] + while code[j] == JA: + j = self.prev[j] + if code[j] == LIST_APPEND: #list comprehension + stmts.remove(s) + continue + elif code[s] == POP_TOP and code[self.prev[s]] == ROT_TWO: + stmts.remove(s) + continue + elif code[s] in designator_ops: + j = self.prev[s] + while code[j] in designator_ops: + j = self.prev[j] + if code[j] == FOR_ITER: + stmts.remove(s) + continue + last_stmt = s + slist += [s] * (s-i) + i = s + slist += [len(code)] * (len(code)-len(slist)) + + def remove_mid_line_ifs(self, ifs): + filtered = [] + for i in ifs: + if self.lines[i].l_no == self.lines[i+3].l_no: + if self.code[self.prev[self.lines[i].next]] in (PJIT, PJIF): + continue + filtered.append(i) + return filtered + + + def rem_or(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + + pjits = self.all_instr(start, end, PJIT) + filtered = [] + for pjit in pjits: + tgt = self.get_target(pjit)-3 + for i in result: + if i <= pjit or i >= tgt: + filtered.append(i) + result = filtered + filtered = [] + return result + + def next_except_jump(self, start): + """ + Return the next jump that was generated by an except SomeException: + construct in a try...except...else clause or None if not found. + """ + except_match = self.first_instr(start, self.lines[start].next, (PJIF)) + if except_match: + jmp = self.prev[self.get_target(except_match)] + self.ignore_if.add(except_match) + return jmp + + count_END_FINALLY = 0 + count_SETUP_ = 0 + for i in self.op_range(start, len(self.code)): + op = self.code[i] + if op == END_FINALLY: + if count_END_FINALLY == count_SETUP_: + if self.code[self.prev[i]] == NOP: + i = self.prev[i] + assert self.code[self.prev[i]] in (JA, JF, RETURN_VALUE) + return self.prev[i] + count_END_FINALLY += 1 + elif op in (SETUP_EXCEPT, SETUP_FINALLY): + count_SETUP_ += 1 + #return self.lines[start].next + + def restrict_to_parent(self, target, parent): + """Restrict pos to parent boundaries.""" + if not (parent['start'] < target < parent['end']): + target = parent['end'] + return target + + def detect_structure(self, pos, op=None): + """ + Detect type of block structures and their boundaries to fix optimizied jumps + in python2.3+ + """ + + # TODO: check the struct boundaries more precisely -Dan + + code = self.code + # Ev remove this test and make op a mandatory argument -Dan + if op is None: + op = code[pos] + + ## Detect parent structure + parent = self.structs[0] + start = parent['start'] + end = parent['end'] + for s in self.structs: + _start = s['start'] + _end = s['end'] + if (_start <= pos < _end) and (_start >= start and _end <= end): + start = _start + end = _end + parent = s + ## We need to know how many new structures were added in this run + origStructCount = len(self.structs) + + if op == SETUP_LOOP: + #import pdb; pdb.set_trace() + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + + if target != end: + self.fixed_jumps[pos] = end + + (line_no, next_line_byte) = self.lines[pos] + jump_back = self.last_instr(start, end, JA, + next_line_byte, False) + if not jump_back: # loop suite ends in return. wtf right? + jump_back = self.last_instr(start, end, RETURN_VALUE) + 1 + if not jump_back: + return + if code[self.prev[next_line_byte]] not in (PJIF, PJIT): + loop_type = 'for' + else: + loop_type = 'while' + self.ignore_if.add(self.prev[next_line_byte]) + target = next_line_byte + end = jump_back + 3 + else: + if self.get_target(jump_back) >= next_line_byte: + jump_back = self.last_instr(start, end, JA, + start, False) + if end > jump_back+4 and code[end] in (JF, JA): + if code[jump_back+4] in (JA, JF): + if self.get_target(jump_back+4) == self.get_target(end): + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + elif target < pos: + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + + target = self.get_target(jump_back, JA) + + if code[target] in (FOR_ITER, GET_ITER): + loop_type = 'for' + else: + loop_type = 'while' + test = self.prev[next_line_byte] + if test == pos: + loop_type = 'while 1' + else: + self.ignore_if.add(test) + test_target = self.get_target(test) + if test_target > (jump_back+3): + jump_back = test_target + + self.loops.append(target) + self.structs.append({'type': loop_type + '-loop', + 'start': target, + 'end': jump_back}) + if jump_back+3 != end: + self.structs.append({'type': loop_type + '-else', + 'start': jump_back+3, + 'end': end}) + elif op == SETUP_EXCEPT: + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + if target != end: + self.fixed_jumps[pos] = end + #print target, end, parent + ## Add the try block + self.structs.append({'type': 'try', + 'start': start, + 'end': end-4}) + ## Now isolate the except and else blocks + end_else = start_else = self.get_target(self.prev[end]) + + ## Add the except blocks + i = end + while self.code[i] != END_FINALLY: + jmp = self.next_except_jump(i) + if jmp == None: # check + i = self.next_stmt[i] + continue + if self.code[jmp] == RETURN_VALUE: + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp+1}) + i = jmp + 1 + else: + if self.get_target(jmp) != start_else: + end_else = self.get_target(jmp) + if self.code[jmp] == JF: + #self.fixed_jumps[i] = jmp + self.fixed_jumps[jmp] = -1 + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp}) + i = jmp + 3 + + ## Add the try-else block + if end_else != start_else: + r_end_else = self.restrict_to_parent(end_else, parent) + self.structs.append({'type': 'try-else', + 'start': i+2, # check + 'end': r_end_else}) + self.fixed_jumps[i] = r_end_else + else: + self.fixed_jumps[i] = i+1 + + elif op in (PJIF, PJIT): + start = pos+3 + target = self.get_target(pos, op) + rtarget = self.restrict_to_parent(target, parent) + pre = self.prev + + if target != rtarget and parent['type'] == 'and/or': + self.fixed_jumps[pos] = rtarget + return + #does this jump to right after another cond jump? + # if so, it's part of a larger conditional + if (code[pre[target]] in (PJIF, PJIT)) and (target > pos): + self.fixed_jumps[pos] = pre[target] + self.structs.append({'type': 'and/or', + 'start': start, + 'end': pre[target]}) + return + + # is this an if and + if op == PJIF: + match = self.rem_or(start, self.next_stmt[pos], PJIF, target) + match = self.remove_mid_line_ifs(match) + if match: + if code[pre[rtarget]] in (JF, JA) \ + and pre[rtarget] not in self.stmts \ + and self.restrict_to_parent(self.get_target(pre[rtarget]), parent) == rtarget: + if code[pre[pre[rtarget]]] == JA \ + and self.remove_mid_line_ifs([pos]) \ + and target == self.get_target(pre[pre[rtarget]]) \ + and (pre[pre[rtarget]] not in self.stmts or self.get_target(pre[pre[rtarget]]) > pre[pre[rtarget]])\ + and 1 == len(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], (PJIF, PJIT), target))): + pass + elif code[pre[pre[rtarget]]] == RETURN_VALUE \ + and self.remove_mid_line_ifs([pos]) \ + and 1 == (len(set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT), target))) \ + | set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT, JA), pre[rtarget], True))))): + pass + else: + fix = None + jump_ifs = self.all_instr(start, self.next_stmt[pos], PJIF) + last_jump_good = True + for j in jump_ifs: + if target == self.get_target(j): + if self.lines[j].next == j+3 and last_jump_good: + fix = j + break + else: + last_jump_good = False + self.fixed_jumps[pos] = fix or match[-1] + return + else: + self.fixed_jumps[pos] = match[-1] + return + else: # op == PJIT + next = self.next_stmt[pos] + if pre[next] == pos: + pass + elif code[next] in (JF, JA) and target == self.get_target(next): + if code[pre[next]] == PJIF: + if code[next] == JF or target != rtarget or code[pre[pre[rtarget]]] not in (JA, RETURN_VALUE): + self.fixed_jumps[pos] = pre[next] + return + elif code[next] == JA and code[target] in (JA, JF) \ + and self.get_target(target) == self.get_target(next): + self.fixed_jumps[pos] = pre[next] + return + #don't add a struct for a while test, it's already taken care of + if pos in self.ignore_if: + return + + if code[pre[rtarget]] == JA and pre[rtarget] in self.stmts \ + and pre[rtarget] != pos and pre[pre[rtarget]] != pos \ + and not (code[rtarget] == JA and code[rtarget+3] == POP_BLOCK and code[pre[pre[rtarget]]] != JA): + rtarget = pre[rtarget] + #does the if jump just beyond a jump op, then this is probably an if statement + if code[pre[rtarget]] in (JA, JF): + if_end = self.get_target(pre[rtarget]) + + #is this a loop not an if? + if (if_end < pre[rtarget]) and (code[pre[if_end]] == SETUP_LOOP): + if(if_end > start): + return + + end = self.restrict_to_parent(if_end, parent) + + self.structs.append({'type': 'if-then', + 'start': start, + 'end': pre[rtarget]}) + self.not_continue.add(pre[rtarget]) + + if rtarget < end: + self.structs.append({'type': 'if-else', + 'start': rtarget, + 'end': end}) + elif code[pre[rtarget]] == RETURN_VALUE: + self.structs.append({'type': 'if-then', + 'start': start, + 'end': rtarget}) + self.return_end_ifs.add(pre[rtarget]) + # if it's an old JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP + #if target > pos: + # unop_target = self.last_instr(pos, target, JF, target) + # if unop_target and code[unop_target+3] != ROT_TWO: + # self.fixed_jumps[pos] = unop_target + # else: + # self.fixed_jumps[pos] = self.restrict_to_parent(target, parent) + + def find_jump_targets(self, code): + """ + Detect all offsets in a byte code which are jump targets. + + Return the list of offsets. + + This procedure is modelled after dis.findlables(), but here + for each target the number of jumps are counted. + """ + + hasjrel = dis.hasjrel + hasjabs = dis.hasjabs + + n = len(code) + self.structs = [{'type': 'root', + 'start': 0, + 'end': n-1}] + self.loops = [] ## All loop entry points + self.fixed_jumps = {} ## Map fixed jumps to their real destination + self.ignore_if = set() + self.build_stmt_indices() + self.not_continue = set() + self.return_end_ifs = set() + + targets = {} + for i in self.op_range(0, n): + op = code[i] + + ## Determine structures and fix jumps for 2.3+ + self.detect_structure(i, op) + + if op >= HAVE_ARGUMENT: + label = self.fixed_jumps.get(i) + oparg = self.get_argument(i) + if label is None: + if op in hasjrel and op != FOR_ITER: + label = i + 3 + oparg + #elif op in hasjabs: Pas de gestion des jump abslt + #if op in (PJIF, PJIT): Or pop a faire + #if (oparg > i): + #label = oparg + if label is not None and label != -1: + targets[label] = targets.get(label, []) + [i] + elif op == END_FINALLY and i in self.fixed_jumps: + label = self.fixed_jumps[i] + targets[label] = targets.get(label, []) + [i] + return targets + diff --git a/uncompyle2/Scanner26.py b/uncompyle2/Scanner26.py new file mode 100755 index 00000000..6c0b3376 --- /dev/null +++ b/uncompyle2/Scanner26.py @@ -0,0 +1,937 @@ +# Copyright (c) 1999 John Aycock +# Copyright (c) 2000-2002 by hartmut Goebel +# Copyright (c) 2005 by Dan Pascu +# +# See main module for license. +# + +__all__ = ['Token', 'Scanner', 'getscanner'] + +import types +import disas as dis +from collections import namedtuple +from array import array +from operator import itemgetter +from struct import * +from Scanner import Token, Code + +class Scanner: + def __init__(self, version): + self.version = version + self.resetTokenClass() + + dis.setVersion(version) + globals().update({'HAVE_ARGUMENT': dis.HAVE_ARGUMENT}) + globals().update({k.replace('+','_'):v for (k,v) in dis.opmap.items()}) + globals().update({'PJIF': dis.opmap['JUMP_IF_FALSE']}) + globals().update({'PJIT': dis.opmap['JUMP_IF_TRUE']}) + globals().update({'JA': dis.opmap['JUMP_ABSOLUTE']}) + globals().update({'JF': dis.opmap['JUMP_FORWARD']}) + + self.JUMP_OPs = map(lambda op: dis.opname[op], + dis.hasjrel + dis.hasjabs) + + def setShowAsm(self, showasm, out=None): + self.showasm = showasm + self.out = out + + def setTokenClass(self, tokenClass): + assert type(tokenClass) == types.ClassType + self.Token = tokenClass + + def resetTokenClass(self): + self.setTokenClass(Token) + + def disassemble(self, co, classname=None): + """ + Disassemble a code object, returning a list of 'Token'. + + The main part of this procedure is modelled after + dis.disassemble(). + """ + rv = [] + customize = {} + Token = self.Token # shortcut + self.code = array('B', co.co_code) + n = len(self.code) + # linestarts contains bloc code adresse (addr,block) + self.linestarts = list(dis.findlinestarts(co)) + self.prev = [0] + pop_delet = 0 + i=0 + self.restructRelativeJump() + # class and names + if classname: + classname = '_' + classname.lstrip('_') + '__' + def unmangle(name): + if name.startswith(classname) and name[-2:] != '__': + return name[len(classname) - 2:] + return name + + free = [ unmangle(name) for name in (co.co_cellvars + co.co_freevars) ] + names = [ unmangle(name) for name in co.co_names ] + varnames = [ unmangle(name) for name in co.co_varnames ] + else: + free = co.co_cellvars + co.co_freevars + names = co.co_names + varnames = co.co_varnames + self.names = names + # add instruction to remonde in "toDel" list + toDel = [] + while i < n-pop_delet: + op = self.code[i] + ret = self.getOpcodeToDel(i) + if ret != None: + toDel += ret + if op >= dis.HAVE_ARGUMENT: + i += 2 + i += 1 + + if toDel: # degeu a revoir / repenser (tout faire d'un coup? chaud) + toDel = sorted(list(set(toDel))) + delta = 0 + for x in toDel: + if self.code[x-delta] >= dis.HAVE_ARGUMENT: + self.code.pop(x-delta) + self.restructCode(x-delta) + self.code.pop(x-delta) + self.restructCode(x-delta) + self.code.pop(x-delta) + self.restructCode(x-delta) + delta += 3 + else: + self.code.pop(x-delta) + self.restructCode(x-delta) + delta += 1 + # mapping adresses of prev instru + n = len(self.code) + for i in self.op_range(0, n): + op = self.code[i] + self.prev.append(i) + if op >= HAVE_ARGUMENT: + self.prev.append(i) + self.prev.append(i) + + j = 0 + linestarts = self.linestarts + self.lines = [] + linetuple = namedtuple('linetuple', ['l_no', 'next']) + linestartoffsets = {a for (a, _) in linestarts} + (prev_start_byte, prev_line_no) = linestarts[0] + for (start_byte, line_no) in linestarts[1:]: + while j < start_byte: + self.lines.append(linetuple(prev_line_no, start_byte)) + j += 1 + last_op = self.code[self.prev[start_byte]] + (prev_start_byte, prev_line_no) = (start_byte, line_no) + while j < n: + self.lines.append(linetuple(prev_line_no, n)) + j+=1 + # self.lines contains (block,addrLastInstr) + cf = self.find_jump_targets(self.code) + # contains (code, [addrRefToCode]) + + last_stmt = self.next_stmt[0] + i = self.next_stmt[last_stmt] + replace = {} + while i < n-1: + if self.lines[last_stmt].next > i: + if self.code[last_stmt] == PRINT_ITEM: + if self.code[i] == PRINT_ITEM: + replace[i] = 'PRINT_ITEM_CONT' + elif self.code[i] == PRINT_NEWLINE: + replace[i] = 'PRINT_NEWLINE_CONT' + last_stmt = i + i = self.next_stmt[i] + + imports = self.all_instr(0, n, (IMPORT_NAME, IMPORT_FROM, IMPORT_STAR)) + if len(imports) > 1: + last_import = imports[0] + for i in imports[1:]: + if self.lines[last_import].next > i: + if self.code[last_import] == IMPORT_NAME == self.code[i]: + replace[i] = 'IMPORT_NAME_CONT' + last_import = i + + extended_arg = 0 + for offset in self.op_range(0, n): + if offset in cf: + k = 0 + for j in cf[offset]: + rv.append(Token('COME_FROM', None, repr(j), + offset="%s_%d" % (offset, k) )) + k += 1 + + op = self.code[offset] + opname = dis.opname[op] + oparg = None; pattr = None + if op >= HAVE_ARGUMENT: + oparg = self.get_argument(offset) + extended_arg + extended_arg = 0 + if op == dis.EXTENDED_ARG: + extended_arg = oparg * 65536L + continue + if op in dis.hasconst: + const = co.co_consts[oparg] + if type(const) == types.CodeType: + oparg = const + if const.co_name == '': + assert opname == 'LOAD_CONST' + opname = 'LOAD_LAMBDA' + elif const.co_name == '': + opname = 'LOAD_GENEXPR' + elif const.co_name == '': + opname = 'LOAD_DICTCOMP' + elif const.co_name == '': + opname = 'LOAD_SETCOMP' + # verify uses 'pattr' for comparism, since 'attr' + # now holds Code(const) and thus can not be used + # for comparism (todo: think about changing this) + #pattr = 'code_object @ 0x%x %s->%s' %\ + # (id(const), const.co_filename, const.co_name) + pattr = '' + else: + pattr = const + elif op in dis.hasname: + pattr = names[oparg] + elif op in dis.hasjrel: + pattr = repr(offset + 3 + oparg) + elif op in dis.hasjabs: + pattr = repr(oparg) + elif op in dis.haslocal: + pattr = varnames[oparg] + elif op in dis.hascompare: + pattr = dis.cmp_op[oparg] + elif op in dis.hasfree: + pattr = free[oparg] + + if op in (BUILD_LIST, BUILD_TUPLE, BUILD_SLICE, + UNPACK_SEQUENCE, + MAKE_FUNCTION, CALL_FUNCTION, MAKE_CLOSURE, + CALL_FUNCTION_VAR, CALL_FUNCTION_KW, + CALL_FUNCTION_VAR_KW, DUP_TOPX, + ): + # CE - Hack for >= 2.5 + # Now all values loaded via LOAD_CLOSURE are packed into + # a tuple before calling MAKE_CLOSURE. + if op == BUILD_TUPLE and \ + self.code[offset-3] == LOAD_CLOSURE: + continue + else: + opname = '%s_%d' % (opname, oparg) + if op != BUILD_SLICE: + customize[opname] = oparg + elif op == JA: + target = self.get_target(offset) + if target < offset: + if offset in self.stmts and self.code[offset+3] not in (END_FINALLY, POP_BLOCK) \ + and offset not in self.not_continue: + opname = 'CONTINUE' + else: + opname = 'JUMP_BACK' + + elif op == LOAD_GLOBAL: + try: + if pattr == 'AssertionError' and rv and rv[-1] == 'JUMP_IF_TRUE': + opname = 'LOAD_ASSERT' + except AttributeError: + pass + elif op == RETURN_VALUE: + if offset in self.return_end_ifs: + opname = 'RETURN_END_IF' + + if offset not in replace: + rv.append(Token(opname, oparg, pattr, offset, linestart = offset in linestartoffsets)) + else: + rv.append(Token(replace[offset], oparg, pattr, offset, linestart = offset in linestartoffsets)) + + if self.showasm: + out = self.out # shortcut + for t in rv: + print >>out, t + print >>out + return rv, customize + + def getOpcodeToDel(self, i): + """ + check validity of the opcode at position I and return a list of opcode to delete + """ + opcode = self.code[i] + opsize = self.op_size(opcode) + if opcode == EXTENDED_ARG: + raise 'A faire' + if opcode in (PJIF,PJIT,JA,JF): + if self.code[i+opsize] == POP_TOP: + if self.code[i+opsize] == self.code[i+opsize+1] and self.code[i+opsize] == self.code[i+opsize+2] \ + and opcode in (JF,JA) and self.code[i+opsize] != self.code[i+opsize+3]: + pass + else: + return [i+opsize] + if opcode == BUILD_LIST: + if self.code[i+opsize] == DUP_TOP and self.code[i+opsize+1] in (STORE_NAME,STORE_FAST): + # del DUP/STORE_NAME x + toDel = [i+opsize,i+opsize+1] + nameDel = self.get_argument(i+opsize+1) + start = i+opsize+1 + end = start + # del LOAD_NAME x + while end < len(self.code): + end = self.first_instr(end, len(self.code), (LOAD_NAME,LOAD_FAST)) + if nameDel == self.get_argument(end): + toDel += [end] + break + if self.code[end] == LOAD_NAME: + end += self.op_size(LOAD_NAME) + else: + end += self.op_size(LOAD_FAST) + # log JA/POP_TOP to del and update PJIF + while start < end: + start = self.first_instr(start, len(self.code), (PJIF)) + if start == None: break + target = self.get_target(start) + if self.code[target] == POP_TOP and self.code[target-3] == JA: + toDel += [target, target-3] + # update PJIF + target = self.get_target(target-3) + if target > 0xFFFF: + raise 'A gerer' + self.code[start+1] = target & 0xFF + self.code[start+2] = (target >> 8) & 0xFF + start += self.op_size(PJIF) + # del DELETE_NAME x + while end < len(self.code): + end = self.first_instr(end, len(self.code), (DELETE_NAME,DELETE_FAST)) + if nameDel == self.get_argument(end): + toDel += [end] + break + if self.code[end] == DELETE_NAME: + end += self.op_size(DELETE_NAME) + else: + end += self.op_size(DELETE_FAST) + return toDel + return None + + def restructRelativeJump(self): + """ + change relative JUMP_IF_FALSE/TRUE to absolut jump + """ + for i in self.op_range(0, len(self.code)): + if(self.code[i] in (PJIF,PJIT)): + target = self.get_argument(i) + target += i + 3 + if target > 0xFFFF: + raise 'A gerer' + self.code[i+1] = target & 0xFF + self.code[i+2] = (target >> 8) & 0xFF + + for i in self.op_range(0, len(self.code)): + if(self.code[i] in (PJIF,PJIT)): + target = self.get_target(i) + if self.code[target] == JA: + target = self.get_target(target) + if target > 0xFFFF: + raise 'A gerer' + self.code[i+1] = target & 0xFF + self.code[i+2] = (target >> 8) & 0xFF + + def restructCode(self, i): + """ + restruct linestarts and jump destination after removing a POP_TOP + """ + result = list() + for item in self.linestarts: + if i < item[0]: + result.append((item[0]-1, item[1])) + else: + result.append((item[0], item[1])) + self.linestarts = result + + for x in self.op_range(0, len(self.code)): + op = self.code[x] + if op >= HAVE_ARGUMENT: + if op in dis.hasjrel: + if x < i and self.get_target(x) > i: + if self.code[x+1]-1 < 0: + self.code[x+2] -= 1 + self.code[x+1] = self.code[x+1]+255 + else: + self.code[x+1] -= 1 + elif op in dis.hasjabs: + if i < self.get_target(x): + if self.code[x+1]-1 < 0: + self.code[x+2] -= 1 + self.code[x+1] = self.code[x+1]+255 + else: + self.code[x+1] -= 1 + + def get_target(self, pos, op=None): + if op is None: + op = self.code[pos] + target = self.get_argument(pos) + if op in dis.hasjrel: + target += pos + 3 + return target + + def get_argument(self, pos): + target = self.code[pos+1] + self.code[pos+2] * 256 + return target + + def first_instr(self, start, end, instr, target=None, exact=True): + """ + Find the first in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + return i + dest = self.get_target(i, op) + if dest == target: + return i + elif not exact: + _distance = abs(target - dest) + if _distance < distance: + distance = _distance + pos = i + return pos + + def last_instr(self, start, end, instr, target=None, exact=True): + """ + Find the last in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + + code = self.code + if not (start>=0 and end<=len(code)): + return None + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + pos = i + else: + dest = self.get_target(i, op) + if dest == target: + distance = 0 + pos = i + elif not exact: + _distance = abs(target - dest) + if _distance <= distance: + distance = _distance + pos = i + return pos + + def all_instr(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + return result + + def op_size(self, op): + if op < HAVE_ARGUMENT: + return 1 + else: + return 3 + + def op_range(self, start, end): + while start < end: + yield start + start += self.op_size(self.code[start]) + + def build_stmt_indices(self): + code = self.code + start = 0; + end = len(code) + + stmt_opcodes = { + SETUP_LOOP, BREAK_LOOP, CONTINUE_LOOP, + SETUP_FINALLY, END_FINALLY, SETUP_EXCEPT, + POP_BLOCK, STORE_FAST, DELETE_FAST, STORE_DEREF, + STORE_GLOBAL, DELETE_GLOBAL, STORE_NAME, DELETE_NAME, + STORE_ATTR, DELETE_ATTR, STORE_SUBSCR, DELETE_SUBSCR, + RETURN_VALUE, RAISE_VARARGS, POP_TOP, + PRINT_EXPR, PRINT_ITEM, PRINT_NEWLINE, PRINT_ITEM_TO, PRINT_NEWLINE_TO, + JUMP_ABSOLUTE, EXEC_STMT, + } + + stmt_opcode_seqs = [(PJIF, JF), (PJIF, JA), (PJIT, JF), (PJIT, JA)] + + designator_ops = { + STORE_FAST, STORE_NAME, STORE_GLOBAL, STORE_DEREF, STORE_ATTR, + STORE_SLICE_0, STORE_SLICE_1, STORE_SLICE_2, STORE_SLICE_3, + STORE_SUBSCR, UNPACK_SEQUENCE, JA + } + + prelim = self.all_instr(start, end, stmt_opcodes) + + stmts = self.stmts = set(prelim) + pass_stmts = set() + for seq in stmt_opcode_seqs: + for i in self.op_range(start, end-(len(seq)+1)): + match = True + for elem in seq: + if elem != code[i]: + match = False + break + i += self.op_size(code[i]) + + if match: + i = self.prev[i] + stmts.add(i) + pass_stmts.add(i) + + if pass_stmts: + stmt_list = list(stmts) + stmt_list.sort() + else: + stmt_list = prelim + last_stmt = -1 + self.next_stmt = [] + slist = self.next_stmt = [] + i = 0 + for s in stmt_list: + if code[s] == JA and s not in pass_stmts: + target = self.get_target(s) + if target > s or self.lines[last_stmt].l_no == self.lines[s].l_no: + stmts.remove(s) + continue + j = self.prev[s] + while code[j] == JA: + j = self.prev[j] + if code[j] == LIST_APPEND: #list comprehension + stmts.remove(s) + continue + elif code[s] == POP_TOP and code[self.prev[s]] == ROT_TWO: + stmts.remove(s) + continue + elif code[s] in designator_ops: + j = self.prev[s] + while code[j] in designator_ops: + j = self.prev[j] + if code[j] == FOR_ITER: + stmts.remove(s) + continue + last_stmt = s + slist += [s] * (s-i) + i = s + slist += [len(code)] * (len(code)-len(slist)) + + + def remove_mid_line_ifs(self, ifs): + filtered = [] + for i in ifs: + if self.lines[i].l_no == self.lines[i+3].l_no: + if self.code[self.prev[self.lines[i].next]] in (PJIT, PJIF): + continue + filtered.append(i) + return filtered + + + def rem_or(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + + pjits = self.all_instr(start, end, PJIT) + filtered = [] + for pjit in pjits: + tgt = self.get_target(pjit)-3 + for i in result: + if i <= pjit or i >= tgt: + filtered.append(i) + result = filtered + filtered = [] + return result + + def next_except_jump(self, start): + """ + Return the next jump that was generated by an except SomeException: + construct in a try...except...else clause or None if not found. + """ + except_match = self.first_instr(start, self.lines[start].next, (PJIF)) + if except_match: + jmp = self.prev[self.get_target(except_match)] + self.ignore_if.add(except_match) + return jmp + + count_END_FINALLY = 0 + count_SETUP_ = 0 + for i in self.op_range(start, len(self.code)): + op = self.code[i] + if op == END_FINALLY: + if count_END_FINALLY == count_SETUP_: + if self.code[self.prev[i]] == NOP: + i = self.prev[i] + assert self.code[self.prev[i]] in (JA, JF, RETURN_VALUE) + return self.prev[i] + count_END_FINALLY += 1 + elif op in (SETUP_EXCEPT, SETUP_FINALLY): + count_SETUP_ += 1 + #return self.lines[start].next + + def restrict_to_parent(self, target, parent): + """Restrict pos to parent boundaries.""" + if not (parent['start'] < target < parent['end']): + target = parent['end'] + return target + + def detect_structure(self, pos, op=None): + """ + Detect type of block structures and their boundaries to fix optimizied jumps + in python2.3+ + """ + + # TODO: check the struct boundaries more precisely -Dan + + code = self.code + # Ev remove this test and make op a mandatory argument -Dan + if op is None: + op = code[pos] + + ## Detect parent structure + parent = self.structs[0] + start = parent['start'] + end = parent['end'] + for s in self.structs: + _start = s['start'] + _end = s['end'] + if (_start <= pos < _end) and (_start >= start and _end <= end): + start = _start + end = _end + parent = s + ## We need to know how many new structures were added in this run + origStructCount = len(self.structs) + + if op == SETUP_LOOP: + #import pdb; pdb.set_trace() + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + + if target != end: + self.fixed_jumps[pos] = end + + (line_no, next_line_byte) = self.lines[pos] + jump_back = self.last_instr(start, end, JA, + next_line_byte, False) + if not jump_back: # loop suite ends in return. wtf right? + jump_back = self.last_instr(start, end, RETURN_VALUE) + 1 + if not jump_back: + return + if code[self.prev[next_line_byte]] not in (PJIF, PJIT): + loop_type = 'for' + else: + loop_type = 'while' + self.ignore_if.add(self.prev[next_line_byte]) + target = next_line_byte + end = jump_back + 3 + else: + if self.get_target(jump_back) >= next_line_byte: + jump_back = self.last_instr(start, end, JA, + start, False) + if end > jump_back+4 and code[end] in (JF, JA): + if code[jump_back+4] in (JA, JF): + if self.get_target(jump_back+4) == self.get_target(end): + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + elif target < pos: + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + + target = self.get_target(jump_back, JA) + + if code[target] in (FOR_ITER, GET_ITER): + loop_type = 'for' + else: + loop_type = 'while' + test = self.prev[next_line_byte] + if test == pos: + loop_type = 'while 1' + else: + self.ignore_if.add(test) + test_target = self.get_target(test) + if test_target > (jump_back+3): + jump_back = test_target + + self.loops.append(target) + self.structs.append({'type': loop_type + '-loop', + 'start': target, + 'end': jump_back}) + if jump_back+3 != end: + self.structs.append({'type': loop_type + '-else', + 'start': jump_back+3, + 'end': end}) + elif op == SETUP_EXCEPT: + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + if target != end: + self.fixed_jumps[pos] = end + #print target, end, parent + ## Add the try block + self.structs.append({'type': 'try', + 'start': start, + 'end': end-4}) + ## Now isolate the except and else blocks + end_else = start_else = self.get_target(self.prev[end]) + + ## Add the except blocks + i = end + while self.code[i] != END_FINALLY: + jmp = self.next_except_jump(i) + if jmp == None: # check + i = self.next_stmt[i] + continue + if self.code[jmp] == RETURN_VALUE: + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp+1}) + i = jmp + 1 + else: + if self.get_target(jmp) != start_else: + end_else = self.get_target(jmp) + if self.code[jmp] == JF: + #self.fixed_jumps[i] = jmp + self.fixed_jumps[jmp] = -1 + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp}) + i = jmp + 3 + + ## Add the try-else block + if end_else != start_else: + r_end_else = self.restrict_to_parent(end_else, parent) + self.structs.append({'type': 'try-else', + 'start': i+2, # check + 'end': r_end_else}) + self.fixed_jumps[i] = r_end_else + else: + self.fixed_jumps[i] = i+1 + + elif op in (PJIF, PJIT): + start = pos+3 + target = self.get_target(pos, op) + rtarget = self.restrict_to_parent(target, parent) + pre = self.prev + + if target != rtarget and parent['type'] == 'and/or': + self.fixed_jumps[pos] = rtarget + return + #does this jump to right after another cond jump? + # if so, it's part of a larger conditional + if (code[pre[target]] in (PJIF, PJIT)) and (target > pos): + self.fixed_jumps[pos] = pre[target] + self.structs.append({'type': 'and/or', + 'start': start, + 'end': pre[target]}) + return + + # is this an if and + if op == PJIF: + match = self.rem_or(start, self.next_stmt[pos], PJIF, target) + match = self.remove_mid_line_ifs(match) + if match: + if code[pre[rtarget]] in (JF, JA) \ + and pre[rtarget] not in self.stmts \ + and self.restrict_to_parent(self.get_target(pre[rtarget]), parent) == rtarget: + if code[pre[pre[rtarget]]] == JA \ + and self.remove_mid_line_ifs([pos]) \ + and target == self.get_target(pre[pre[rtarget]]) \ + and (pre[pre[rtarget]] not in self.stmts or self.get_target(pre[pre[rtarget]]) > pre[pre[rtarget]])\ + and 1 == len(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], (PJIF, PJIT), target))): + pass + elif code[pre[pre[rtarget]]] == RETURN_VALUE \ + and self.remove_mid_line_ifs([pos]) \ + and 1 == (len(set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT), target))) \ + | set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT, JA), pre[rtarget], True))))): + pass + else: + fix = None + jump_ifs = self.all_instr(start, self.next_stmt[pos], PJIF) + last_jump_good = True + for j in jump_ifs: + if target == self.get_target(j): + if self.lines[j].next == j+3 and last_jump_good: + fix = j + break + else: + last_jump_good = False + self.fixed_jumps[pos] = fix or match[-1] + return + else: + self.fixed_jumps[pos] = match[-1] + return + else: # op == PJIT + next = self.next_stmt[pos] + if pre[next] == pos: + pass + elif code[next] in (JF, JA) and target == self.get_target(next): + if code[pre[next]] == PJIF: + if code[next] == JF or target != rtarget or code[pre[pre[rtarget]]] not in (JA, RETURN_VALUE): + self.fixed_jumps[pos] = pre[next] + return + elif code[next] == JA and code[target] in (JA, JF) \ + and self.get_target(target) == self.get_target(next): + self.fixed_jumps[pos] = pre[next] + return + + #don't add a struct for a while test, it's already taken care of + if pos in self.ignore_if: + return + + if code[pre[rtarget]] == JA and pre[rtarget] in self.stmts \ + and pre[rtarget] != pos and pre[pre[rtarget]] != pos \ + and not (code[rtarget] == JA and code[rtarget+3] == POP_BLOCK and code[pre[pre[rtarget]]] != JA): + rtarget = pre[rtarget] + #does the if jump just beyond a jump op, then this is probably an if statement + if code[pre[rtarget]] in (JA, JF): + if_end = self.get_target(pre[rtarget]) + + #is this a loop not an if? + if (if_end < pre[rtarget]) and (code[pre[if_end]] == SETUP_LOOP): + if(if_end > start): + return + + end = self.restrict_to_parent(if_end, parent) + + self.structs.append({'type': 'if-then', + 'start': start, + 'end': pre[rtarget]}) + self.not_continue.add(pre[rtarget]) + + if rtarget < end: + self.structs.append({'type': 'if-else', + 'start': rtarget, + 'end': end}) + elif code[pre[rtarget]] == RETURN_VALUE: + self.structs.append({'type': 'if-then', + 'start': start, + 'end': rtarget}) + self.return_end_ifs.add(pre[rtarget]) + + + def find_jump_targets(self, code): + """ + Detect all offsets in a byte code which are jump targets. + + Return the list of offsets. + + This procedure is modelled after dis.findlables(), but here + for each target the number of jumps are counted. + """ + + hasjrel = dis.hasjrel + hasjabs = dis.hasjabs + + n = len(code) + self.structs = [{'type': 'root', + 'start': 0, + 'end': n-1}] + self.loops = [] ## All loop entry points + self.fixed_jumps = {} ## Map fixed jumps to their real destination + self.ignore_if = set() + self.build_stmt_indices() + self.not_continue = set() + self.return_end_ifs = set() + + targets = {} + for i in self.op_range(0, n): + op = code[i] + + ## Determine structures and fix jumps for 2.3+ + self.detect_structure(i, op) + + if op >= HAVE_ARGUMENT: + label = self.fixed_jumps.get(i) + oparg = self.get_argument(i) + if label is None: + if op in hasjrel and op != FOR_ITER: + label = i + 3 + oparg + #elif op in hasjabs: Pas de gestion des jump abslt + #if op in (PJIF, PJIT): Or pop a faire + #if (oparg > i): + #label = oparg + if label is not None and label != -1: + targets[label] = targets.get(label, []) + [i] + elif op == END_FINALLY and i in self.fixed_jumps: + label = self.fixed_jumps[i] + targets[label] = targets.get(label, []) + [i] + return targets + diff --git a/uncompyle2/Scanner27.py b/uncompyle2/Scanner27.py new file mode 100755 index 00000000..965f731b --- /dev/null +++ b/uncompyle2/Scanner27.py @@ -0,0 +1,796 @@ +# Copyright (c) 1999 John Aycock +# Copyright (c) 2000-2002 by hartmut Goebel +# Copyright (c) 2005 by Dan Pascu +# +# See main module for license. +# + +__all__ = ['Token', 'Scanner', 'getscanner'] + +import types +import disas as dis +from collections import namedtuple +from array import array +from operator import itemgetter +from Scanner import Token, Code + +class Scanner: + def __init__(self, version): + self.version = version + self.resetTokenClass() + + dis.setVersion(version) + globals().update({'HAVE_ARGUMENT': dis.HAVE_ARGUMENT}) + globals().update({k.replace('+','_'):v for (k,v) in dis.opmap.items()}) + globals().update({'PJIF': dis.opmap['POP_JUMP_IF_FALSE']}) + globals().update({'PJIT': dis.opmap['POP_JUMP_IF_TRUE']}) + globals().update({'JA': dis.opmap['JUMP_ABSOLUTE']}) + globals().update({'JF': dis.opmap['JUMP_FORWARD']}) + + self.JUMP_OPs = map(lambda op: dis.opname[op], + dis.hasjrel + dis.hasjabs) + + def setShowAsm(self, showasm, out=None): + self.showasm = showasm + self.out = out + + def setTokenClass(self, tokenClass): + assert type(tokenClass) == types.ClassType + self.Token = tokenClass + + def resetTokenClass(self): + self.setTokenClass(Token) + + def disassemble(self, co, classname=None): + """ + Disassemble a code object, returning a list of 'Token'. + + The main part of this procedure is modelled after + dis.disassemble(). + """ + rv = [] + customize = {} + Token = self.Token # shortcut + self.code = code = array('B', co.co_code) + n = len(code) + self.prev = [0] + # mapping adresses of instru & arg + for i in self.op_range(0, n): + op = code[i] + self.prev.append(i) + if op >= HAVE_ARGUMENT: + self.prev.append(i) + self.prev.append(i) + + self.lines = [] + linetuple = namedtuple('linetuple', ['l_no', 'next']) + j = 0 + # linestarts contains bloc code adresse (addr,block) + linestarts = list(dis.findlinestarts(co)) + linestartoffsets = {a for (a, _) in linestarts} + (prev_start_byte, prev_line_no) = linestarts[0] + for (start_byte, line_no) in linestarts[1:]: + while j < start_byte: + self.lines.append(linetuple(prev_line_no, start_byte)) + j += 1 + last_op = code[self.prev[start_byte]] + (prev_start_byte, prev_line_no) = (start_byte, line_no) + while j < n: + self.lines.append(linetuple(prev_line_no, n)) + j+=1 + # self.lines contains (block,addrLastInstr) + cf = self.find_jump_targets(code) + # contains (code, [addrRefToCode]) + if classname: + classname = '_' + classname.lstrip('_') + '__' + def unmangle(name): + if name.startswith(classname) and name[-2:] != '__': + return name[len(classname) - 2:] + return name + + free = [ unmangle(name) for name in (co.co_cellvars + co.co_freevars) ] + names = [ unmangle(name) for name in co.co_names ] + varnames = [ unmangle(name) for name in co.co_varnames ] + else: + free = co.co_cellvars + co.co_freevars + names = co.co_names + varnames = co.co_varnames + + last_stmt = self.next_stmt[0] + i = self.next_stmt[last_stmt] + replace = {} + while i < n-1: + if self.lines[last_stmt].next > i: + if code[last_stmt] == PRINT_ITEM: + if code[i] == PRINT_ITEM: + replace[i] = 'PRINT_ITEM_CONT' + elif code[i] == PRINT_NEWLINE: + replace[i] = 'PRINT_NEWLINE_CONT' + last_stmt = i + i = self.next_stmt[i] + + imports = self.all_instr(0, n, (IMPORT_NAME, IMPORT_FROM, IMPORT_STAR)) + if len(imports) > 1: + last_import = imports[0] + for i in imports[1:]: + if self.lines[last_import].next > i: + if code[last_import] == IMPORT_NAME == code[i]: + replace[i] = 'IMPORT_NAME_CONT' + last_import = i + + extended_arg = 0 + for offset in self.op_range(0, n): + + if offset in cf: + k = 0 + for j in cf[offset]: + rv.append(Token('COME_FROM', None, repr(j), + offset="%s_%d" % (offset, k) )) + k += 1 + + op = code[offset] + opname = dis.opname[op] + oparg = None; pattr = None + if op >= HAVE_ARGUMENT: + oparg = code[offset+1] + code[offset+2] * 256 + extended_arg + extended_arg = 0 + if op == dis.EXTENDED_ARG: + extended_arg = oparg * 65536L + continue + if op in dis.hasconst: + const = co.co_consts[oparg] + if type(const) == types.CodeType: + oparg = const + if const.co_name == '': + assert opname == 'LOAD_CONST' + opname = 'LOAD_LAMBDA' + elif const.co_name == '': + opname = 'LOAD_GENEXPR' + elif const.co_name == '': + opname = 'LOAD_DICTCOMP' + elif const.co_name == '': + opname = 'LOAD_SETCOMP' + # verify uses 'pattr' for comparism, since 'attr' + # now holds Code(const) and thus can not be used + # for comparism (todo: think about changing this) + #pattr = 'code_object @ 0x%x %s->%s' %\ + # (id(const), const.co_filename, const.co_name) + pattr = '' + else: + pattr = const + elif op in dis.hasname: + pattr = names[oparg] + elif op in dis.hasjrel: + pattr = repr(offset + 3 + oparg) + elif op in dis.hasjabs: + pattr = repr(oparg) + elif op in dis.haslocal: + pattr = varnames[oparg] + elif op in dis.hascompare: + pattr = dis.cmp_op[oparg] + elif op in dis.hasfree: + pattr = free[oparg] + + if op in (BUILD_LIST, BUILD_TUPLE, BUILD_SET, BUILD_SLICE, + UNPACK_SEQUENCE, + MAKE_FUNCTION, CALL_FUNCTION, MAKE_CLOSURE, + CALL_FUNCTION_VAR, CALL_FUNCTION_KW, + CALL_FUNCTION_VAR_KW, DUP_TOPX, + ): + # CE - Hack for >= 2.5 + # Now all values loaded via LOAD_CLOSURE are packed into + # a tuple before calling MAKE_CLOSURE. + if op == BUILD_TUPLE and \ + code[offset-3] == LOAD_CLOSURE: + continue + else: + opname = '%s_%d' % (opname, oparg) + if op != BUILD_SLICE: + customize[opname] = oparg + elif op == JA: + target = self.get_target(offset) + if target < offset: + if offset in self.stmts and code[offset+3] not in (END_FINALLY, POP_BLOCK) \ + and offset not in self.not_continue: + opname = 'CONTINUE' + else: + opname = 'JUMP_BACK' + + elif op == LOAD_GLOBAL: + try: + if pattr == 'AssertionError' and rv and rv[-1] == 'POP_JUMP_IF_TRUE': + opname = 'LOAD_ASSERT' + except AttributeError: + pass + elif op == RETURN_VALUE: + if offset in self.return_end_ifs: + opname = 'RETURN_END_IF' + + if offset not in replace: + rv.append(Token(opname, oparg, pattr, offset, linestart = offset in linestartoffsets)) + else: + rv.append(Token(replace[offset], oparg, pattr, offset, linestart = offset in linestartoffsets)) + + if self.showasm: + out = self.out # shortcut + for t in rv: + print >>out, t + print >>out + return rv, customize + + def get_target(self, pos, op=None): + if op is None: + op = self.code[pos] + target = self.code[pos+1] + self.code[pos+2] * 256 + if op in dis.hasjrel: + target += pos + 3 + return target + + def first_instr(self, start, end, instr, target=None, exact=True): + """ + Find the first in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + return i + dest = self.get_target(i, op) + if dest == target: + return i + elif not exact: + _distance = abs(target - dest) + if _distance < distance: + distance = _distance + pos = i + return pos + + def last_instr(self, start, end, instr, target=None, exact=True): + """ + Find the last in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely if exact + is True, or if exact is False, the instruction which has a target + closest to will be returned. + + Return index to it or None if not found. + """ + + code = self.code + if not (start>=0 and end<=len(code)): + return None + + try: None in instr + except: instr = [instr] + + pos = None + distance = len(code) + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + pos = i + else: + dest = self.get_target(i, op) + if dest == target: + distance = 0 + pos = i + elif not exact: + _distance = abs(target - dest) + if _distance <= distance: + distance = _distance + pos = i + return pos + + def all_instr(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + return result + + def op_size(self, op): + if op < HAVE_ARGUMENT: + return 1 + else: + return 3 + + def op_range(self, start, end): + while start < end: + yield start + start += self.op_size(self.code[start]) + + def build_stmt_indices(self): + code = self.code + start = 0; + end = len(code) + + stmt_opcodes = { + SETUP_LOOP, BREAK_LOOP, CONTINUE_LOOP, + SETUP_FINALLY, END_FINALLY, SETUP_EXCEPT, SETUP_WITH, + POP_BLOCK, STORE_FAST, DELETE_FAST, STORE_DEREF, + STORE_GLOBAL, DELETE_GLOBAL, STORE_NAME, DELETE_NAME, + STORE_ATTR, DELETE_ATTR, STORE_SUBSCR, DELETE_SUBSCR, + RETURN_VALUE, RAISE_VARARGS, POP_TOP, + PRINT_EXPR, PRINT_ITEM, PRINT_NEWLINE, PRINT_ITEM_TO, PRINT_NEWLINE_TO, + STORE_SLICE_0, STORE_SLICE_1, STORE_SLICE_2, STORE_SLICE_3, + DELETE_SLICE_0, DELETE_SLICE_1, DELETE_SLICE_2, DELETE_SLICE_3, + JUMP_ABSOLUTE, EXEC_STMT, + } + + stmt_opcode_seqs = [(PJIF, JF), (PJIF, JA), (PJIT, JF), (PJIT, JA)] + + designator_ops = { + STORE_FAST, STORE_NAME, STORE_GLOBAL, STORE_DEREF, STORE_ATTR, + STORE_SLICE_0, STORE_SLICE_1, STORE_SLICE_2, STORE_SLICE_3, + STORE_SUBSCR, UNPACK_SEQUENCE, JA + } + + prelim = self.all_instr(start, end, stmt_opcodes) + + stmts = self.stmts = set(prelim) + pass_stmts = set() + for seq in stmt_opcode_seqs: + for i in self.op_range(start, end-(len(seq)+1)): + match = True + for elem in seq: + if elem != code[i]: + match = False + break + i += self.op_size(code[i]) + + if match: + i = self.prev[i] + stmts.add(i) + pass_stmts.add(i) + + if pass_stmts: + stmt_list = list(stmts) + stmt_list.sort() + else: + stmt_list = prelim + last_stmt = -1 + self.next_stmt = [] + slist = self.next_stmt = [] + i = 0 + for s in stmt_list: + if code[s] == JA and s not in pass_stmts: + target = self.get_target(s) + if target > s or self.lines[last_stmt].l_no == self.lines[s].l_no: + stmts.remove(s) + continue + j = self.prev[s] + while code[j] == JA: + j = self.prev[j] + if code[j] == LIST_APPEND: #list comprehension + stmts.remove(s) + continue + elif code[s] == POP_TOP and code[self.prev[s]] == ROT_TWO: + stmts.remove(s) + continue + elif code[s] in designator_ops: + j = self.prev[s] + while code[j] in designator_ops: + j = self.prev[j] + if code[j] == FOR_ITER: + stmts.remove(s) + continue + last_stmt = s + slist += [s] * (s-i) + i = s + slist += [len(code)] * (len(code)-len(slist)) + + def remove_mid_line_ifs(self, ifs): + filtered = [] + for i in ifs: + if self.lines[i].l_no == self.lines[i+3].l_no: + if self.code[self.prev[self.lines[i].next]] in (PJIT, PJIF): + continue + filtered.append(i) + return filtered + + + def rem_or(self, start, end, instr, target=None, include_beyond_target=False): + """ + Find all in the block from start to end. + is any python bytecode instruction or a list of opcodes + If is an opcode with a target (like a jump), a target + destination can be specified which must match precisely. + + Return a list with indexes to them or [] if none found. + """ + + code = self.code + assert(start>=0 and end<=len(code)) + + try: None in instr + except: instr = [instr] + + result = [] + for i in self.op_range(start, end): + op = code[i] + if op in instr: + if target is None: + result.append(i) + else: + t = self.get_target(i, op) + if include_beyond_target and t >= target: + result.append(i) + elif t == target: + result.append(i) + + pjits = self.all_instr(start, end, PJIT) + filtered = [] + for pjit in pjits: + tgt = self.get_target(pjit)-3 + for i in result: + if i <= pjit or i >= tgt: + filtered.append(i) + result = filtered + filtered = [] + return result + + def next_except_jump(self, start): + """ + Return the next jump that was generated by an except SomeException: + construct in a try...except...else clause or None if not found. + """ + + except_match = self.first_instr(start, self.lines[start].next, POP_JUMP_IF_FALSE) + if except_match: + jmp = self.prev[self.get_target(except_match)] + self.ignore_if.add(except_match) + return jmp + + count_END_FINALLY = 0 + count_SETUP_ = 0 + for i in self.op_range(start, len(self.code)): + op = self.code[i] + if op == END_FINALLY: + if count_END_FINALLY == count_SETUP_: + assert self.code[self.prev[i]] in (JA, JF, RETURN_VALUE) + return self.prev[i] + count_END_FINALLY += 1 + elif op in (SETUP_EXCEPT, SETUP_WITH, SETUP_FINALLY): + count_SETUP_ += 1 + + def restrict_to_parent(self, target, parent): + """Restrict pos to parent boundaries.""" + if not (parent['start'] < target < parent['end']): + target = parent['end'] + return target + + def detect_structure(self, pos, op=None): + """ + Detect type of block structures and their boundaries to fix optimizied jumps + in python2.3+ + """ + + # TODO: check the struct boundaries more precisely -Dan + + code = self.code + # Ev remove this test and make op a mandatory argument -Dan + if op is None: + op = code[pos] + + ## Detect parent structure + parent = self.structs[0] + start = parent['start'] + end = parent['end'] + for s in self.structs: + _start = s['start'] + _end = s['end'] + if (_start <= pos < _end) and (_start >= start and _end <= end): + start = _start + end = _end + parent = s + ## We need to know how many new structures were added in this run + origStructCount = len(self.structs) + + if op == SETUP_LOOP: + #import pdb; pdb.set_trace() + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + + if target != end: + self.fixed_jumps[pos] = end + + (line_no, next_line_byte) = self.lines[pos] + jump_back = self.last_instr(start, end, JA, + next_line_byte, False) + if not jump_back: # loop suite ends in return. wtf right? + jump_back = self.last_instr(start, end, RETURN_VALUE) + 1 + if not jump_back: + return + if code[self.prev[next_line_byte]] not in (PJIF, PJIT): + loop_type = 'for' + else: + loop_type = 'while' + self.ignore_if.add(self.prev[next_line_byte]) + target = next_line_byte + end = jump_back + 3 + else: + if self.get_target(jump_back) >= next_line_byte: + jump_back = self.last_instr(start, end, JA, + start, False) + if end > jump_back+4 and code[end] in (JF, JA): + if code[jump_back+4] in (JA, JF): + if self.get_target(jump_back+4) == self.get_target(end): + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + elif target < pos: + self.fixed_jumps[pos] = jump_back+4 + end = jump_back+4 + + target = self.get_target(jump_back, JA) + + if code[target] in (FOR_ITER, GET_ITER): + loop_type = 'for' + else: + loop_type = 'while' + test = self.prev[next_line_byte] + if test == pos: + loop_type = 'while 1' + else: + self.ignore_if.add(test) + test_target = self.get_target(test) + if test_target > (jump_back+3): + jump_back = test_target + + self.loops.append(target) + self.structs.append({'type': loop_type + '-loop', + 'start': target, + 'end': jump_back}) + if jump_back+3 != end: + self.structs.append({'type': loop_type + '-else', + 'start': jump_back+3, + 'end': end}) + elif op == SETUP_EXCEPT: + start = pos+3 + target = self.get_target(pos, op) + end = self.restrict_to_parent(target, parent) + if target != end: + self.fixed_jumps[pos] = end + #print target, end, parent + ## Add the try block + self.structs.append({'type': 'try', + 'start': start, + 'end': end-4}) + ## Now isolate the except and else blocks + end_else = start_else = self.get_target(self.prev[end]) + + ## Add the except blocks + i = end + while self.code[i] != END_FINALLY: + jmp = self.next_except_jump(i) + if self.code[jmp] == RETURN_VALUE: + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp+1}) + i = jmp + 1 + else: + if self.get_target(jmp) != start_else: + end_else = self.get_target(jmp) + if self.code[jmp] == JF: + self.fixed_jumps[jmp] = -1 + self.structs.append({'type': 'except', + 'start': i, + 'end': jmp}) + i = jmp + 3 + + ## Add the try-else block + if end_else != start_else: + r_end_else = self.restrict_to_parent(end_else, parent) + self.structs.append({'type': 'try-else', + 'start': i+1, + 'end': r_end_else}) + self.fixed_jumps[i] = r_end_else + else: + self.fixed_jumps[i] = i+1 + + + elif op in (PJIF, PJIT): + start = pos+3 + target = self.get_target(pos, op) + rtarget = self.restrict_to_parent(target, parent) + pre = self.prev + + if target != rtarget and parent['type'] == 'and/or': + self.fixed_jumps[pos] = rtarget + return + #does this jump to right after another cond jump? + # if so, it's part of a larger conditional + if (code[pre[target]] in (JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP, + PJIF, PJIT)) and (target > pos): + self.fixed_jumps[pos] = pre[target] + self.structs.append({'type': 'and/or', + 'start': start, + 'end': pre[target]}) + return + + # is this an if and + if op == PJIF: + match = self.rem_or(start, self.next_stmt[pos], PJIF, target) + match = self.remove_mid_line_ifs(match) + + if match: + if code[pre[rtarget]] in (JF, JA) \ + and pre[rtarget] not in self.stmts \ + and self.restrict_to_parent(self.get_target(pre[rtarget]), parent) == rtarget: + if code[pre[pre[rtarget]]] == JA \ + and self.remove_mid_line_ifs([pos]) \ + and target == self.get_target(pre[pre[rtarget]]) \ + and (pre[pre[rtarget]] not in self.stmts or self.get_target(pre[pre[rtarget]]) > pre[pre[rtarget]])\ + and 1 == len(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], (PJIF, PJIT), target))): + pass + elif code[pre[pre[rtarget]]] == RETURN_VALUE \ + and self.remove_mid_line_ifs([pos]) \ + and 1 == (len(set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT), target))) \ + | set(self.remove_mid_line_ifs(self.rem_or(start, pre[pre[rtarget]], \ + (PJIF, PJIT, JA), pre[rtarget], True))))): + pass + else: + fix = None + jump_ifs = self.all_instr(start, self.next_stmt[pos], PJIF) + last_jump_good = True + for j in jump_ifs: + if target == self.get_target(j): + if self.lines[j].next == j+3 and last_jump_good: + fix = j + break + else: + last_jump_good = False + self.fixed_jumps[pos] = fix or match[-1] + return + else: + self.fixed_jumps[pos] = match[-1] + return + else: # op == PJIT + next = self.next_stmt[pos] + if pre[next] == pos: + pass + elif code[next] in (JF, JA) and target == self.get_target(next): + if code[pre[next]] == PJIF: + if code[next] == JF or target != rtarget or code[pre[pre[rtarget]]] not in (JA, RETURN_VALUE): + self.fixed_jumps[pos] = pre[next] + return + elif code[next] == JA and code[target] in (JA, JF) \ + and self.get_target(target) == self.get_target(next): + self.fixed_jumps[pos] = pre[next] + return + + #don't add a struct for a while test, it's already taken care of + if pos in self.ignore_if: + return + + if code[pre[rtarget]] == JA and pre[rtarget] in self.stmts \ + and pre[rtarget] != pos and pre[pre[rtarget]] != pos \ + and not (code[rtarget] == JA and code[rtarget+3] == POP_BLOCK and code[pre[pre[rtarget]]] != JA): + rtarget = pre[rtarget] + #does the if jump just beyond a jump op, then this is probably an if statement + if code[pre[rtarget]] in (JA, JF): + if_end = self.get_target(pre[rtarget]) + + #is this a loop not an if? + if (if_end < pre[rtarget]) and (code[pre[if_end]] == SETUP_LOOP): + if(if_end > start): + return + + end = self.restrict_to_parent(if_end, parent) + + self.structs.append({'type': 'if-then', + 'start': start, + 'end': pre[rtarget]}) + self.not_continue.add(pre[rtarget]) + + if rtarget < end: + self.structs.append({'type': 'if-else', + 'start': rtarget, + 'end': end}) + elif code[pre[rtarget]] == RETURN_VALUE: + self.structs.append({'type': 'if-then', + 'start': start, + 'end': rtarget}) + self.return_end_ifs.add(pre[rtarget]) + + elif op in (JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP): + target = self.get_target(pos, op) + if target > pos: + unop_target = self.last_instr(pos, target, JF, target) + if unop_target and code[unop_target+3] != ROT_TWO: + self.fixed_jumps[pos] = unop_target + else: + self.fixed_jumps[pos] = self.restrict_to_parent(target, parent) + + + + + def find_jump_targets(self, code): + """ + Detect all offsets in a byte code which are jump targets. + + Return the list of offsets. + + This procedure is modelled after dis.findlables(), but here + for each target the number of jumps are counted. + """ + + hasjrel = dis.hasjrel + hasjabs = dis.hasjabs + + n = len(code) + self.structs = [{'type': 'root', + 'start': 0, + 'end': n-1}] + self.loops = [] ## All loop entry points + self.fixed_jumps = {} ## Map fixed jumps to their real destination + self.ignore_if = set() + self.build_stmt_indices() + self.not_continue = set() + self.return_end_ifs = set() + + targets = {} + for i in self.op_range(0, n): + op = code[i] + + ## Determine structures and fix jumps for 2.3+ + self.detect_structure(i, op) + + if op >= HAVE_ARGUMENT: + label = self.fixed_jumps.get(i) + oparg = code[i+1] + code[i+2] * 256 + if label is None: + if op in hasjrel and op != FOR_ITER: + label = i + 3 + oparg + elif op in hasjabs: + if op in (JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP): + if (oparg > i): + label = oparg + + if label is not None and label != -1: + targets[label] = targets.get(label, []) + [i] + elif op == END_FINALLY and i in self.fixed_jumps: + label = self.fixed_jumps[i] + targets[label] = targets.get(label, []) + [i] + return targets diff --git a/uncompyle2/Walker.py b/uncompyle2/Walker.py new file mode 100755 index 00000000..98ec3d9a --- /dev/null +++ b/uncompyle2/Walker.py @@ -0,0 +1,1418 @@ +# Copyright (c) 1999 John Aycock +# Copyright (c) 2000-2002 by hartmut Goebel +# Copyright (c) 2005 by Dan Pascu +# +# See main module for license. +# +# +# Decompilation (walking AST) +# +# All table-driven. Step 1 determines a table (T) and a path to a +# table key (K) from the node type (N) (other nodes are shown as O): +# +# N N N&K +# / | ... \ / | ... \ / | ... \ +# O O O O O K O O O +# | +# K +# +# MAP_R0 (TABLE_R0) MAP_R (TABLE_R) MAP_DIRECT (TABLE_DIRECT) +# +# The default is a direct mapping. The key K is then extracted from the +# subtree and used to find a table entry T[K], if any. The result is a +# format string and arguments (a la printf()) for the formatting engine. +# Escapes in the format string are: +# +# %c evaluate N[A] recursively* +# %C evaluate N[A[0]]..N[A[1]-1] recursively, separate by A[2]* +# %, print ',' if last %C only printed one item (for tuples--unused) +# %| tab to current indentation level +# %+ increase current indentation level +# %- decrease current indentation level +# %{...} evaluate ... in context of N +# %% literal '%' +# +# * indicates an argument (A) required. +# +# The '%' may optionally be followed by a number (C) in square brackets, which +# makes the engine walk down to N[C] before evaluating the escape code. +# + +import sys, re, cStringIO +from types import ListType, TupleType, DictType, \ + EllipsisType, IntType, CodeType + +from spark import GenericASTTraversal +import Parser +from Parser import AST +from Scanner import Token, Code + +minint = -sys.maxint-1 + +# Some ASTs used for comparing code fragments (like 'return None' at +# the end of functions). + +RETURN_LOCALS = AST('return_stmt', + [ AST('expr', [ Token('LOAD_LOCALS') ]), + Token('RETURN_VALUE')]) + + +NONE = AST('expr', [ Token('LOAD_CONST', pattr=None) ] ) + +RETURN_NONE = AST('stmt', + [ AST('return_stmt', + [ NONE, Token('RETURN_VALUE')]) ]) + +PASS = AST('stmts', + [ AST('sstmt', + [ AST('stmt', + [ AST('passstmt', [])])])]) + +ASSIGN_DOC_STRING = lambda doc_string: \ + AST('stmt', + [ AST('assign', + [ AST('expr', [ Token('LOAD_CONST', pattr=doc_string) ]), + AST('designator', [ Token('STORE_NAME', pattr='__doc__')]) + ])]) + +BUILD_TUPLE_0 = AST('expr', + [ AST('build_list', + [ Token('BUILD_TUPLE_0') ])]) + +NAME_MODULE = AST('stmt', + [ AST('assign', + [ AST('expr', [Token('LOAD_NAME', pattr='__name__')]), + AST('designator', [ Token('STORE_NAME', pattr='__module__')]) + ])]) + +#TAB = '\t' # as God intended +TAB = ' ' *4 # is less spacy than "\t" +INDENT_PER_LEVEL = ' ' # additional intent per pretty-print level + +TABLE_R = { + 'POP_TOP': ( '%|%c\n', 0 ), + 'STORE_ATTR': ( '%c.%[1]{pattr}', 0), +# 'STORE_SUBSCR': ( '%c[%c]', 0, 1 ), + 'STORE_SLICE+0': ( '%c[:]', 0 ), + 'STORE_SLICE+1': ( '%c[%p:]', 0, (1,100) ), + 'STORE_SLICE+2': ( '%c[:%p]', 0, (1,100) ), + 'STORE_SLICE+3': ( '%c[%p:%p]', 0, (1,100), (2,100) ), + 'DELETE_SLICE+0': ( '%|del %c[:]\n', 0 ), + 'DELETE_SLICE+1': ( '%|del %c[%c:]\n', 0, 1 ), + 'DELETE_SLICE+2': ( '%|del %c[:%c]\n', 0, 1 ), + 'DELETE_SLICE+3': ( '%|del %c[%c:%c]\n', 0, 1, 2 ), + 'DELETE_ATTR': ( '%|del %c.%[-1]{pattr}\n', 0 ), +# 'EXEC_STMT': ( '%|exec %c in %[1]C\n', 0, (0,sys.maxint,', ') ), +} +TABLE_R0 = { +# 'BUILD_LIST': ( '[%C]', (0,-1,', ') ), +# 'BUILD_TUPLE': ( '(%C)', (0,-1,', ') ), +# 'CALL_FUNCTION': ( '%c(%C)', 0, (1,-1,', ') ), +} +TABLE_DIRECT = { + 'BINARY_ADD': ( '+' ,), + 'BINARY_SUBTRACT': ( '-' ,), + 'BINARY_MULTIPLY': ( '*' ,), + 'BINARY_DIVIDE': ( '/' ,), + 'BINARY_TRUE_DIVIDE': ( '/' ,), + 'BINARY_FLOOR_DIVIDE': ( '//' ,), + 'BINARY_MODULO': ( '%%',), + 'BINARY_POWER': ( '**',), + 'BINARY_LSHIFT': ( '<<',), + 'BINARY_RSHIFT': ( '>>',), + 'BINARY_AND': ( '&' ,), + 'BINARY_OR': ( '|' ,), + 'BINARY_XOR': ( '^' ,), + 'INPLACE_ADD': ( '+=' ,), + 'INPLACE_SUBTRACT': ( '-=' ,), + 'INPLACE_MULTIPLY': ( '*=' ,), + 'INPLACE_DIVIDE': ( '/=' ,), + 'INPLACE_TRUE_DIVIDE': ( '/=' ,), + 'INPLACE_FLOOR_DIVIDE': ( '//=' ,), + 'INPLACE_MODULO': ( '%%=',), + 'INPLACE_POWER': ( '**=',), + 'INPLACE_LSHIFT': ( '<<=',), + 'INPLACE_RSHIFT': ( '>>=',), + 'INPLACE_AND': ( '&=' ,), + 'INPLACE_OR': ( '|=' ,), + 'INPLACE_XOR': ( '^=' ,), + 'binary_expr': ( '%c %c %c', 0, -1, 1 ), + + 'UNARY_POSITIVE': ( '+',), + 'UNARY_NEGATIVE': ( '-',), + 'UNARY_INVERT': ( '~%c'), + 'unary_expr': ( '%c%c', 1, 0), + + 'unary_not': ( 'not %c', 0 ), + 'unary_convert': ( '`%c`', 0 ), + 'get_iter': ( 'iter(%c)', 0 ), + 'slice0': ( '%c[:]', 0 ), + 'slice1': ( '%c[%p:]', 0, (1,100) ), + 'slice2': ( '%c[:%p]', 0, (1,100) ), + 'slice3': ( '%c[%p:%p]', 0, (1,100), (2,100) ), + + 'IMPORT_FROM': ( '%{pattr}', ), + 'load_attr': ( '%c.%[1]{pattr}', 0), + 'LOAD_FAST': ( '%{pattr}', ), + 'LOAD_NAME': ( '%{pattr}', ), + 'LOAD_GLOBAL': ( '%{pattr}', ), + 'LOAD_DEREF': ( '%{pattr}', ), + 'LOAD_LOCALS': ( 'locals()', ), + 'LOAD_ASSERT': ( '%{pattr}', ), +# 'LOAD_CONST': ( '%{pattr}', ), # handled by n_LOAD_CONST + 'DELETE_FAST': ( '%|del %{pattr}\n', ), + 'DELETE_NAME': ( '%|del %{pattr}\n', ), + 'DELETE_GLOBAL': ( '%|del %{pattr}\n', ), + 'delete_subscr': ( '%|del %c[%c]\n', 0, 1,), + 'binary_subscr': ( '%c[%p]', 0, (1,100)), + 'binary_subscr2': ( '%c[%p]', 0, (1,100)), + 'store_subscr': ( '%c[%c]', 0, 1), + 'STORE_FAST': ( '%{pattr}', ), + 'STORE_NAME': ( '%{pattr}', ), + 'STORE_GLOBAL': ( '%{pattr}', ), + 'STORE_DEREF': ( '%{pattr}', ), + 'unpack': ( '%C%,', (1, sys.maxint, ', ') ), + 'unpack_w_parens': ( '(%C%,)', (1, sys.maxint, ', ') ), + 'unpack_list': ( '[%C]', (1, sys.maxint, ', ') ), + 'build_tuple2': ( '%P', (0,-1,', ', 100) ), + + #'list_compr': ( '[ %c ]', -2), # handled by n_list_compr + 'list_iter': ( '%c', 0), + 'list_for': ( ' for %c in %c%c', 2, 0, 3 ), + 'list_if': ( ' if %c%c', 0, 2 ), + 'list_if_not': ( ' if not %p%c', (0,22), 2 ), + 'lc_body': ( '', ), # ignore when recusing + + 'comp_iter': ( '%c', 0), + 'comp_for': ( ' for %c in %c%c', 2, 0, 3 ), + 'comp_if': ( ' if %c%c', 0, 2 ), + 'comp_ifnot': ( ' if not %p%c', (0,22), 2 ), + 'comp_body': ( '', ), # ignore when recusing + 'set_comp_body': ( '%c', 0 ), + 'gen_comp_body': ( '%c', 0 ), + 'dict_comp_body': ( '%c:%c', 1, 0 ), + + 'assign': ( '%|%c = %p\n', -1, (0,200) ), + 'augassign1': ( '%|%c %c %c\n', 0, 2, 1), + 'augassign2': ( '%|%c.%[2]{pattr} %c %c\n', 0, -3, -4), +# 'dup_topx': ( '%c', 0), + 'designList': ( '%c = %c', 0, -1 ), + 'and': ( '%c and %c', 0, 2 ), + 'and2': ( '%c', 3 ), + 'or': ( '%c or %c', 0, 2 ), + 'conditional': ( '%p if %p else %p', (2,27), (0,27), (4,27)), + 'conditionaland': ( '%p if %p and %p else %p', (4,27), (0,24), (2,24), (6,27)), + 'conditionalnot': ( '%p if not %p else %p', (2,27), (0,22), (4,27)), + 'conditional_lambda': ( '(%c if %c else %c)', 2, 0, 3), + 'conditional_lambda2': ( '(%c if %p and %p else %c)', 4, (0,24), (2,24), 5), + 'return_lambda': ('%c', 0), + 'compare': ( '%p %[-1]{pattr} %p', (0,19), (1,19) ), + 'cmp_list': ( '%p %p', (0,20), (1,19)), + 'cmp_list1': ( '%[3]{pattr} %p %p', (0,19), (-2,19)), + 'cmp_list2': ( '%[1]{pattr} %p', (0,19)), +# 'classdef': (), # handled by n_classdef() + 'funcdef': ( '\n\n%|def %c\n', -2), # -2 to handle closures + 'funcdefdeco': ( '\n\n%c', 0), + 'mkfuncdeco': ( '%|@%c\n%c', 0, 1), + 'mkfuncdeco0': ( '%|def %c\n', 0), + 'classdefdeco': ( '%c', 0), + 'classdefdeco1': ( '\n\n%|@%c%c', 0, 1), + 'kwarg': ( '%[0]{pattr}=%c', 1), + 'importlist2': ( '%C', (0, sys.maxint, ', ') ), + + 'assert': ( '%|assert %c\n' , 0 ), + 'assert2': ( '%|assert %c, %c\n' , 0, 3 ), + 'assert_expr_or': ( '%c or %c', 0, 2 ), + 'assert_expr_and': ( '%c and %c', 0, 2 ), + 'print_items_stmt': ( '%|print %c%c,\n', 0, 2), + 'print_items_nl_stmt': ( '%|print %c%c\n', 0, 2), + 'print_item': ( ', %c', 0), + 'print_nl': ( '%|print\n', ), + 'print_to': ( '%|print >> %c, %c,\n', 0, 1 ), + 'print_to_nl': ( '%|print >> %c, %c\n', 0, 1 ), + 'print_nl_to': ( '%|print >> %c\n', 0 ), + 'print_to_items': ( '%C', (0, 2, ', ') ), + + 'call_stmt': ( '%|%p\n', (0,200)), + 'break_stmt': ( '%|break\n', ), + 'continue_stmt': ( '%|continue\n', ), + 'jcontinue_stmt': ( '%|continue\n', ), + 'raise_stmt': ( '%|raise %[0]C\n', (0,sys.maxint,', ') ), +# 'yield': ( 'yield %c', 0), +# 'return_stmt': ( '%|return %c\n', 0), + + 'ifstmt': ( '%|if %c:\n%+%c%-', 0, 1 ), + 'iflaststmt': ( '%|if %c:\n%+%c%-', 0, 1 ), + 'iflaststmtl': ( '%|if %c:\n%+%c%-', 0, 1 ), + 'testtrue': ( 'not %p', (0,22) ), + + 'ifelsestmt': ( '%|if %c:\n%+%c%-%|else:\n%+%c%-', 0, 1, 3 ), + 'ifelsestmtc': ( '%|if %c:\n%+%c%-%|else:\n%+%c%-', 0, 1, 3 ), + 'ifelsestmtl': ( '%|if %c:\n%+%c%-%|else:\n%+%c%-', 0, 1, 3 ), + 'ifelifstmt': ( '%|if %c:\n%+%c%-%c', 0, 1, 3 ), + 'elifelifstmt': ( '%|elif %c:\n%+%c%-%c', 0, 1, 3 ), + 'elifstmt': ( '%|elif %c:\n%+%c%-', 0, 1 ), + 'elifelsestmt': ( '%|elif %c:\n%+%c%-%|else:\n%+%c%-', 0, 1, 3 ), + 'ifelsestmtr': ( '%|if %c:\n%+%c%-%|else:\n%+%c%-', 0, 1, 2 ), + 'elifelsestmtr': ( '%|elif %c:\n%+%c%-%|else:\n%+%c%-\n\n', 0, 1, 2 ), + + 'whilestmt': ( '%|while %c:\n%+%c%-\n\n', 1, 2 ), + 'while1stmt': ( '%|while 1:\n%+%c%-\n\n', 1 ), + 'whileelsestmt': ( '%|while %c:\n%+%c%-%|else:\n%+%c%-\n\n', 1, 2, -2 ), + 'whileelselaststmt': ( '%|while %c:\n%+%c%-%|else:\n%+%c%-', 1, 2, -2 ), + 'forstmt': ( '%|for %c in %c:\n%+%c%-\n\n', 3, 1, 4 ), + 'forelsestmt': ( + '%|for %c in %c:\n%+%c%-%|else:\n%+%c%-\n\n', 3, 1, 4, -2), + 'forelselaststmt': ( + '%|for %c in %c:\n%+%c%-%|else:\n%+%c%-', 3, 1, 4, -2), + 'forelselaststmtl': ( + '%|for %c in %c:\n%+%c%-%|else:\n%+%c%-\n\n', 3, 1, 4, -2), + 'trystmt': ( '%|try:\n%+%c%-%c\n\n', 1, 3 ), + 'tryelsestmt': ( '%|try:\n%+%c%-%c%|else:\n%+%c%-\n\n', 1, 3, 4 ), + 'tryelsestmtc': ( '%|try:\n%+%c%-%c%|else:\n%+%c%-', 1, 3, 4 ), + 'tryelsestmtl': ( '%|try:\n%+%c%-%c%|else:\n%+%c%-', 1, 3, 4 ), + 'tf_trystmt': ( '%c%-%c%+', 1, 3 ), + 'tf_tryelsestmt': ( '%c%-%c%|else:\n%+%c', 1, 3, 4 ), + 'except': ( '%|except:\n%+%c%-', 3 ), + 'except_cond1': ( '%|except %c:\n', 1 ), + 'except_cond2': ( '%|except %c as %c:\n', 1, 5 ), + 'except_suite': ( '%+%c%-%C', 0, (1, sys.maxint, '') ), + 'tryfinallystmt': ( '%|try:\n%+%c%-%|finally:\n%+%c%-\n\n', 1, 5 ), + 'withstmt': ( '%|with %c:\n%+%c%-', 0, 3), + 'withasstmt': ( '%|with %c as %c:\n%+%c%-', 0, 2, 3), + 'passstmt': ( '%|pass\n', ), + 'STORE_FAST': ( '%{pattr}', ), + 'kv': ( '%c: %c', 3, 1 ), + 'kv2': ( '%c: %c', 1, 2 ), + 'mapexpr': ( '{%[1]C}', (0,sys.maxint,', ') ), + + ## + ## Python 2.5 Additions + ## + + # Import style for 2.5 + 'importstmt': ( '%|import %c\n', 2), + 'importstar': ( '%|from %[2]{pattr} import *\n', ), + 'importfrom': ( '%|from %[2]{pattr} import %c\n', 3 ), + 'importmultiple': ( '%|import %c%c\n', 2, 3), + 'import_cont' : ( ', %c', 2), + + # CE - Fixes for tuples + 'assign2': ( '%|%c, %c = %c, %c\n', 3, 4, 0, 1 ), + 'assign3': ( '%|%c, %c, %c = %c, %c, %c\n', 5, 6, 7, 0, 1, 2 ), + +} + + +MAP_DIRECT = (TABLE_DIRECT, ) +MAP_R0 = (TABLE_R0, -1, 0) +MAP_R = (TABLE_R, -1) + +MAP = { + 'stmt': MAP_R, + 'call_function': MAP_R, + 'del_stmt': MAP_R, + 'designator': MAP_R, + 'exprlist': MAP_R0, +} + +PRECEDENCE = { + 'build_list': 0, + 'mapexpr': 0, + 'unary_convert': 0, + 'dictcomp': 0, + 'setcomp': 0, + 'list_compr': 0, + 'genexpr': 0, + + 'load_attr': 2, + 'binary_subscr': 2, + 'binary_subscr2': 2, + 'slice0': 2, + 'slice1': 2, + 'slice2': 2, + 'slice3': 2, + 'buildslice2': 2, + 'buildslice3': 2, + 'call_function': 2, + + 'BINARY_POWER': 4, + + 'unary_expr': 6, + + 'BINARY_MULTIPLY': 8, + 'BINARY_DIVIDE': 8, + 'BINARY_TRUE_DIVIDE': 8, + 'BINARY_FLOOR_DIVIDE': 8, + 'BINARY_MODULO': 8, + + 'BINARY_ADD': 10, + 'BINARY_SUBTRACT': 10, + + 'BINARY_LSHIFT': 12, + 'BINARY_RSHIFT': 12, + + 'BINARY_AND': 14, + + 'BINARY_XOR': 16, + + 'BINARY_OR': 18, + + 'cmp': 20, + + 'unary_not': 22, + + 'and': 24, + + 'or': 26, + + 'conditional': 28, + 'conditionaland': 28, + 'conditionalnot': 28, + + '_mklambda': 30, + 'yield': 101 +} + +ASSIGN_TUPLE_PARAM = lambda param_name: \ + AST('expr', [ Token('LOAD_FAST', pattr=param_name) ]) + +escape = re.compile(r''' + (?P [^%]* ) + % ( \[ (?P -? \d+ ) \] )? + ((?P [^{] ) | + ( [{] (?P [^}]* ) [}] )) + ''', re.VERBOSE) + +class ParserError(Parser.ParserError): + def __init__(self, error, tokens): + self.error = error # previous exception + self.tokens = tokens + + def __str__(self): + lines = ['--- This code section failed: ---'] + lines.extend( map(str, self.tokens) ) + lines.extend( ['', str(self.error)] ) + return '\n'.join(lines) + + +def find_globals(node, globs): + """Find globals in this statement.""" + for n in node: + if isinstance(n, AST): + globs = find_globals(n, globs) + elif n.type in ('STORE_GLOBAL', 'DELETE_GLOBAL'): + globs.add(n.pattr) + return globs + +def find_all_globals(node, globs): + """Find globals in this statement.""" + for n in node: + if isinstance(n, AST): + globs = find_all_globals(n, globs) + elif n.type in ('STORE_GLOBAL', 'DELETE_GLOBAL', 'LOAD_GLOBAL'): + globs.add(n.pattr) + return globs + +def find_none(node): + for n in node: + if isinstance(n, AST): + if not (n == 'return_stmt' or n == 'return_if_stmt'): + if find_none(n): + return True + elif n.type == 'LOAD_CONST' and n.pattr == None: + return True + return False + +class Walker(GenericASTTraversal, object): + stacked_params = ('f', 'indent', 'isLambda', '_globals') + + def __init__(self, out, scanner, showast=0): + GenericASTTraversal.__init__(self, ast=None) + self.scanner = scanner + params = { + 'f': out, + 'indent': '', + } + self.showast = showast + self.__params = params + self.__param_stack = [] + self.ERROR = None + self.prec = 100 + self.return_none = False + self.mod_globs = set() + self.currentclass = None + self.pending_newlines = 0 + + f = property(lambda s: s.__params['f'], + lambda s, x: s.__params.__setitem__('f', x), + lambda s: s.__params.__delitem__('f'), + None) + + indent = property(lambda s: s.__params['indent'], + lambda s, x: s.__params.__setitem__('indent', x), + lambda s: s.__params.__delitem__('indent'), + None) + + isLambda = property(lambda s: s.__params['isLambda'], + lambda s, x: s.__params.__setitem__('isLambda', x), + lambda s: s.__params.__delitem__('isLambda'), + None) + + _globals = property(lambda s: s.__params['_globals'], + lambda s, x: s.__params.__setitem__('_globals', x), + lambda s: s.__params.__delitem__('_globals'), + None) + + def indentMore(self, indent=TAB): + self.indent += indent + def indentLess(self, indent=TAB): + self.indent = self.indent[:-len(indent)] + + def traverse(self, node, indent=None, isLambda=0): + self.__param_stack.append(self.__params) + if indent is None: indent = self.indent + p = self.pending_newlines + self.pending_newlines = 0 + self.__params = { + '_globals': {}, + 'f': cStringIO.StringIO(), + 'indent': indent, + 'isLambda': isLambda, + } + self.preorder(node) + self.f.write('\n'*self.pending_newlines) + result = self.f.getvalue() + self.__params = self.__param_stack.pop() + self.pending_newlines = p + return result + + def write(self, *data): + if (len(data) == 0) or (len(data) == 1 and data[0] == ''): + return +# import pdb; pdb.set_trace() + out = ''.join((str(j) for j in data)) + n = 0 + for i in out: + if i == '\n': + n += 1 + if n == len(out): + self.pending_newlines = max(self.pending_newlines, n) + return + elif n: + self.pending_newlines = max(self.pending_newlines, n) + out = out[n:] + break + else: + break + + if self.pending_newlines > 0: + self.f.write('\n'*self.pending_newlines) + self.pending_newlines = 0 + + for i in out[::-1]: + if i == '\n': + self.pending_newlines += 1 + else: + break + + if self.pending_newlines: + out = out[:-self.pending_newlines] + self.f.write(out) + + def print_(self, *data): + if data and not(len(data) == 1 and data[0] ==''): + self.write(*data) + self.pending_newlines = max(self.pending_newlines, 1) + + def print_docstring(self, indent, docstring): + quote = '"""' + self.write(indent) + if type(docstring) == unicode: + self.write('u') + docstring = repr(docstring.expandtabs())[2:-1] + else: + docstring = repr(docstring.expandtabs())[1:-1] + + for (orig, replace) in (('\\\\', '\t'), + ('\\r\\n', '\n'), + ('\\n', '\n'), + ('\\r', '\n'), + ('\\"', '"'), + ("\\'", "'")): + docstring = docstring.replace(orig, replace) + + #Do a raw string if there are backslashes but no other escaped characters: + #also check some edge cases + if ('\t' in docstring + and '\\' not in docstring + and len(docstring) >= 2 + and docstring[-1] != '\t' + and (docstring[-1] != '"' + or docstring[-2] == '\t')): + self.write('r') #raw string + #restore backslashes unescaped since raw + docstring = docstring.replace('\t', '\\') + else: + #Escape '"' if it's the last character, so it doesn't ruin the ending triple quote + if len(docstring) and docstring[-1] == '"': + docstring = docstring[:-1] + '\\"' + #Escape triple quote anywhere + docstring = docstring.replace('"""', '\\"\\"\\"') + #Restore escaped backslashes + docstring = docstring.replace('\t', '\\\\') + lines = docstring.split('\n') + calculate_indent = sys.maxint + for line in lines[1:]: + stripped = line.lstrip() + if len(stripped) > 0: + calculate_indent = min(calculate_indent, len(line) - len(stripped)) + calculate_indent = min(calculate_indent, len(lines[-1]) - len(lines[-1].lstrip())) + # Remove indentation (first line is special): + trimmed = [lines[0]] + if calculate_indent < sys.maxint: + trimmed += [line[calculate_indent:] for line in lines[1:]] + + self.write(quote) + if len(trimmed) == 0: + self.print_(quote) + elif len(trimmed) == 1: + self.print_(trimmed[0], quote) + else: + self.print_(trimmed[0]) + for line in trimmed[1:-1]: + self.print_( indent, line ) + self.print_(indent, trimmed[-1],quote) + + + def n_return_stmt(self, node): + if self.__params['isLambda']: + self.preorder(node[0]) + self.prune() + else: + self.write(self.indent, 'return') + if self.return_none or node != AST('return_stmt', [NONE, Token('RETURN_VALUE')]): + self.write(' ') + self.preorder(node[0]) + self.print_() + self.prune() # stop recursing + + def n_return_if_stmt(self, node): + if self.__params['isLambda']: + self.preorder(node[0]) + self.prune() + else: + self.write(self.indent, 'return') + if self.return_none or node != AST('return_if_stmt', [NONE, Token('RETURN_END_IF')]): + self.write(' ') + self.preorder(node[0]) + self.print_() + self.prune() # stop recursing + + def n_yield(self, node): + self.write('yield') + if node != AST('yield', [NONE, Token('YIELD_VALUE')]): + self.write(' ') + self.preorder(node[0]) + self.prune() # stop recursing + + def n_buildslice3(self, node): + p = self.prec + self.prec = 100 + if node[0] != NONE: + self.preorder(node[0]) + self.write(':') + if node[1] != NONE: + self.preorder(node[1]) + self.write(':') + if node[2] != NONE: + self.preorder(node[2]) + self.prec = p + self.prune() # stop recursing + + def n_buildslice2(self, node): + p = self.prec + self.prec = 100 + if node[0] != NONE: + self.preorder(node[0]) + self.write(':') + if node[1] != NONE: + self.preorder(node[1]) + self.prec = p + self.prune() # stop recursing + +# def n_l_stmts(self, node): +# if node[0] == '_stmts': +# if len(node[0]) >= 2 and node[0][1] == 'stmt': +# if node[0][-1][0] == 'continue_stmt': +# del node[0][-1] +# self.default(node) + + def n_expr(self, node): + p = self.prec + if node[0].type.startswith('binary_expr'): + n = node[0][-1][0] + else: + n = node[0] + self.prec = PRECEDENCE.get(n,-2) + if n == 'LOAD_CONST' and repr(n.pattr)[0] == '-': + self.prec = 6 + if p < self.prec: + self.write('(') + self.preorder(node[0]) + self.write(')') + else: + self.preorder(node[0]) + self.prec = p + self.prune() + + def n_binary_expr(self, node): + self.preorder(node[0]) + self.write(' ') + self.preorder(node[-1]) + self.write(' ') + self.prec -= 1 + self.preorder(node[1]) + self.prec += 1 + self.prune() + + def n_LOAD_CONST(self, node): + data = node.pattr; datatype = type(data) + if datatype is IntType and data == minint: + # convert to hex, since decimal representation + # would result in 'LOAD_CONST; UNARY_NEGATIVE' + # change:hG/2002-02-07: this was done for all negative integers + # todo: check whether this is necessary in Python 2.1 + self.write( hex(data) ) + elif datatype is EllipsisType: + self.write('...') + elif data is None: + # LOAD_CONST 'None' only occurs, when None is + # implicit eg. in 'return' w/o params + # pass + self.write('None') + else: + self.write(repr(data)) + # LOAD_CONST is a terminal, so stop processing/recursing early + self.prune() + + + def n_delete_subscr(self, node): + if node[-2][0] == 'build_list' and node[-2][0][-1].type.startswith('BUILD_TUPLE'): + if node[-2][0][-1] != 'BUILD_TUPLE_0': + node[-2][0].type = 'build_tuple2' + self.default(node) +# maybe_tuple = node[-2][-1] +# if maybe_tuple.type.startswith('BUILD_TUPLE'): +# maybe_tuple.type = 'build_tuple2' +# self.default(node) + + n_store_subscr = n_binary_subscr = n_delete_subscr + +# 'tryfinallystmt': ( '%|try:\n%+%c%-%|finally:\n%+%c%-', 1, 5 ), + def n_tryfinallystmt(self, node): + if len(node[1][0]) == 1 and node[1][0][0] == 'stmt': + if node[1][0][0][0] == 'trystmt': + node[1][0][0][0].type = 'tf_trystmt' + if node[1][0][0][0] == 'tryelsestmt': + node[1][0][0][0].type = 'tf_tryelsestmt' + self.default(node) + + def n_exec_stmt(self, node): + """ + exec_stmt ::= expr exprlist DUP_TOP EXEC_STMT + exec_stmt ::= expr exprlist EXEC_STMT + """ + self.write(self.indent, 'exec ') + self.preorder(node[0]) + if node[1][0] != NONE: + sep = ' in ' + for subnode in node[1]: + self.write(sep); sep = ", " + self.preorder(subnode) + self.print_() + self.prune() # stop recursing + + def n_ifelsestmt(self, node, preprocess=0): + n = node[3][0] + if len(n) == 1 == len(n[0]) and n[0] == '_stmts': + n = n[0][0][0] + elif n[0].type in ('lastc_stmt', 'lastl_stmt'): + n = n[0][0] + else: + if not preprocess: + self.default(node) + return + + if n.type in ('ifstmt', 'iflaststmt', 'iflaststmtl'): + node.type = 'ifelifstmt' + n.type = 'elifstmt' + elif n.type in ('ifelsestmtr',): + node.type = 'ifelifstmt' + n.type = 'elifelsestmtr' + elif n.type in ('ifelsestmt', 'ifelsestmtc', 'ifelsestmtl'): + node.type = 'ifelifstmt' + self.n_ifelsestmt(n, preprocess=1) + if n == 'ifelifstmt': + n.type = 'elifelifstmt' + elif n.type in ('ifelsestmt', 'ifelsestmtc', 'ifelsestmtl'): + n.type = 'elifelsestmt' + if not preprocess: + self.default(node) + + n_ifelsestmtc = n_ifelsestmtl = n_ifelsestmt + + def n_ifelsestmtr(self, node): + if len(node[2]) != 2: + self.default(node) + + if not (node[2][0][0][0] == 'ifstmt' and node[2][0][0][0][1][0] == 'return_if_stmts') \ + and not (node[2][0][-1][0] == 'ifstmt' and node[2][0][-1][0][1][0] == 'return_if_stmts'): + self.default(node) + return + + self.write(self.indent, 'if ') + self.preorder(node[0]) + self.print_(':') + self.indentMore() + self.preorder(node[1]) + self.indentLess() + + if_ret_at_end = False + if len(node[2][0]) >= 3: + if node[2][0][-1][0] == 'ifstmt' and node[2][0][-1][0][1][0] == 'return_if_stmts': + if_ret_at_end = True + + past_else = False + prev_stmt_is_if_ret = True + for n in node[2][0]: + if (n[0] == 'ifstmt' and n[0][1][0] == 'return_if_stmts'): + if prev_stmt_is_if_ret: + n[0].type = 'elifstmt' + prev_stmt_is_if_ret = True + else: + prev_stmt_is_if_ret = False + if not past_else and not if_ret_at_end: + self.print_(self.indent, 'else:') + self.indentMore() + past_else = True + self.preorder(n) + if not past_else or if_ret_at_end: + self.print_(self.indent, 'else:') + self.indentMore() + self.preorder(node[2][1]) + self.indentLess() + self.prune() + + def n_elifelsestmtr(self, node): + if len(node[2]) != 2: + self.default(node) + + for n in node[2][0]: + if not (n[0] == 'ifstmt' and n[0][1][0] == 'return_if_stmts'): + self.default(node) + return + + self.write(self.indent, 'elif ') + self.preorder(node[0]) + self.print_(':') + self.indentMore() + self.preorder(node[1]) + self.indentLess() + + if_ret_at_end = False + if len(node[2][0]) >= 3: + if node[2][0][-1][0] == 'ifstmt' and node[2][0][-1][0][1][0] == 'return_if_stmts': + if_ret_at_end = True + + past_else = False + prev_stmt_is_if_ret = True + for n in node[2][0]: + n[0].type = 'elifstmt' + self.preorder(n) + self.print_(self.indent, 'else:') + self.indentMore() + self.preorder(node[2][1]) + self.indentLess() + self.prune() + + def n_import_as(self, node): + iname = node[0].pattr; + assert node[-1][-1].type.startswith('STORE_') + sname = node[-1][-1].pattr # assume one of STORE_.... here + if iname == sname or iname.startswith(sname + '.'): + self.write(iname) + else: + self.write(iname, ' as ', sname) + self.prune() # stop recursing + + n_import_as_cont = n_import_as + + def n_importfrom(self, node): + if node[0].pattr > 0: + node[2].pattr = '.'*node[0].pattr+node[2].pattr + self.default(node) + + n_importstar = n_importfrom + + def n_mkfunc(self, node): + self.write(node[-2].attr.co_name) # = code.co_name + self.indentMore() + self.make_function(node, isLambda=0) + if len(self.__param_stack) > 1: + self.write('\n\n') + else: + self.write('\n\n\n') + self.indentLess() + self.prune() # stop recursing + + def n_mklambda(self, node): + self.make_function(node, isLambda=1) + self.prune() # stop recursing + + def n_list_compr(self, node): + p = self.prec + self.prec = 27 + n = node[-1] + assert n == 'list_iter' + # find innerst node + while n == 'list_iter': + n = n[0] # recurse one step + if n == 'list_for': n = n[3] + elif n == 'list_if': n = n[2] + elif n == 'list_if_not': n= n[2] + assert n == 'lc_body' + self.write( '[ '); + self.preorder(n[0]) # lc_body + self.preorder(node[-1]) # for/if parts + self.write( ' ]') + self.prec = p + self.prune() # stop recursing + + def comprehension_walk(self, node, iter_index): + p = self.prec + self.prec = 27 + code = node[-5].attr + + assert type(code) == CodeType + code = Code(code, self.scanner, self.currentclass) + #assert isinstance(code, Code) + + ast = self.build_ast(code._tokens, code._customize) + ast = ast[0][0][0] + + n = ast[iter_index] + assert n == 'comp_iter' + # find innerst node + while n == 'comp_iter': + n = n[0] # recurse one step + if n == 'comp_for': n = n[3] + elif n == 'comp_if': n = n[2] + elif n == 'comp_ifnot': n = n[2] + assert n == 'comp_body', ast + + self.preorder(n[0]) + self.write(' for ') + self.preorder(ast[iter_index-1]) + self.write(' in ') + self.preorder(node[-3]) + self.preorder(ast[iter_index]) + self.prec = p + + def n_genexpr(self, node): + self.write('(') + self.comprehension_walk(node, 3) + self.write(')') + self.prune() + + + def n_setcomp(self, node): + self.write('{') + self.comprehension_walk(node, 4) + self.write('}') + self.prune() + + n_dictcomp = n_setcomp + + + def n_classdef(self, node): + # class definition ('class X(A,B,C):') + cclass = self.currentclass + self.currentclass = str(node[0].pattr) + + self.write('\n\n') + self.write(self.indent, 'class ', self.currentclass) + self.print_super_classes(node) + self.print_(':') + + # class body + self.indentMore() + self.build_class(node[2][-2].attr) + self.indentLess() + + self.currentclass = cclass + if len(self.__param_stack) > 1: + self.write('\n\n') + else: + self.write('\n\n\n') + + self.prune() + + + n_classdefdeco2 = n_classdef + + def print_super_classes(self, node): + node = node[1][0] + if not (node == 'build_list'): + return + + self.write('(') + line_separator = ', ' + sep = '' + for elem in node[:-1]: + value = self.traverse(elem) + self.write(sep, value) + sep = line_separator + + self.write(')') + + def n_mapexpr(self, node): + """ + prettyprint a mapexpr + 'mapexpr' is something like k = {'a': 1, 'b': 42 }" + """ + p = self.prec + self.prec = 100 + assert node[-1] == 'kvlist' + node = node[-1] # goto kvlist + + self.indentMore(INDENT_PER_LEVEL) + line_seperator = ',\n' + self.indent + sep = INDENT_PER_LEVEL[:-1] + self.write('{') + for kv in node: + assert kv in ('kv', 'kv2', 'kv3') + # kv ::= DUP_TOP expr ROT_TWO expr STORE_SUBSCR + # kv2 ::= DUP_TOP expr expr ROT_THREE STORE_SUBSCR + # kv3 ::= expr expr STORE_MAP + if kv == 'kv': + name = self.traverse(kv[-2], indent=''); + value = self.traverse(kv[1], indent=self.indent+(len(name)+2)*' ') + elif kv == 'kv2': + name = self.traverse(kv[1], indent=''); + value = self.traverse(kv[-3], indent=self.indent+(len(name)+2)*' ') + elif kv == 'kv3': + name = self.traverse(kv[-2], indent=''); + value = self.traverse(kv[0], indent=self.indent+(len(name)+2)*' ') + self.write(sep, name, ': ', value) + sep = line_seperator + self.write('}') + self.indentLess(INDENT_PER_LEVEL) + self.prec = p + self.prune() + + + def n_build_list(self, node): + """ + prettyprint a list or tuple + """ + p = self.prec + self.prec = 100 + lastnode = node.pop().type + if lastnode.startswith('BUILD_LIST'): + self.write('['); endchar = ']' + elif lastnode.startswith('BUILD_TUPLE'): + self.write('('); endchar = ')' + elif lastnode.startswith('BUILD_SET'): + self.write('{'); endchar = '}' + elif lastnode.startswith('ROT_TWO'): + self.write('('); endchar = ')' + else: + raise 'Internal Error: n_build_list expects list or tuple' + + self.indentMore(INDENT_PER_LEVEL) + if len(node) > 3: + line_separator = ',\n' + self.indent + else: + line_separator = ', ' + sep = INDENT_PER_LEVEL[:-1] + for elem in node: + if (elem == 'ROT_THREE'): + continue + + assert elem == 'expr' + value = self.traverse(elem) + self.write(sep, value) + sep = line_separator + if len(node) == 1 and lastnode.startswith('BUILD_TUPLE'): + self.write(',') + self.write(endchar) + self.indentLess(INDENT_PER_LEVEL) + self.prec = p + self.prune() + + def n_unpack(self, node): + for n in node[1:]: + if n[0].type == 'unpack': + n[0].type = 'unpack_w_parens' + self.default(node) + + n_unpack_w_parens = n_unpack + + def n_assign2(self, node): + for n in node[-2:]: + if n[0] == 'unpack': + n[0].type = 'unpack_w_parens' + self.default(node) + + def n_assign3(self, node): + for n in node[-3:]: + if n[0] == 'unpack': + n[0].type = 'unpack_w_parens' + self.default(node) + + def engine(self, entry, startnode): + #self.print_("-----") + #self.print_(str(startnode.__dict__)) + + fmt = entry[0] + ## no longer used, since BUILD_TUPLE_n is pretty printed: + ##lastC = 0 + arg = 1 + i = 0 + + m = escape.search(fmt) + while m: + i = m.end() + self.write(m.group('prefix')) + + typ = m.group('type') or '{' + node = startnode + try: + if m.group('child'): + node = node[int(m.group('child'))] + except: + print node.__dict__ + raise + + if typ == '%': self.write('%') + elif typ == '+': self.indentMore() + elif typ == '-': self.indentLess() + elif typ == '|': self.write(self.indent) + ## no longer used, since BUILD_TUPLE_n is pretty printed: + elif typ == ',': + if lastC == 1: + self.write(',') + elif typ == 'c': + self.preorder(node[entry[arg]]) + arg += 1 + elif typ == 'p': + p = self.prec + (index, self.prec) = entry[arg] + self.preorder(node[index]) + self.prec = p + arg += 1 + elif typ == 'C': + low, high, sep = entry[arg] + lastC = remaining = len(node[low:high]) + ## remaining = len(node[low:high]) + for subnode in node[low:high]: + self.preorder(subnode) + remaining -= 1 + if remaining > 0: + self.write(sep) + arg += 1 + elif typ == 'P': + p = self.prec + low, high, sep, self.prec = entry[arg] + lastC = remaining = len(node[low:high]) + ## remaining = len(node[low:high]) + for subnode in node[low:high]: + self.preorder(subnode) + remaining -= 1 + if remaining > 0: + self.write(sep) + self.prec = p + arg += 1 + elif typ == '{': + d = node.__dict__ + expr = m.group('expr') + try: + self.write(eval(expr, d, d)) + except: + print node + raise + m = escape.search(fmt, i) + self.write(fmt[i:]) + + def default(self, node): + mapping = MAP.get(node, MAP_DIRECT) + table = mapping[0] + key = node + + for i in mapping[1:]: + key = key[i] + + if table.has_key(key): + self.engine(table[key], node) + self.prune() + + def customize(self, customize): + """ + Special handling for opcodes that take a variable number + of arguments -- we add a new entry for each in TABLE_R. + """ + for k, v in customize.items(): + if TABLE_R.has_key(k): + continue + op = k[ :k.rfind('_') ] + if op == 'CALL_FUNCTION': TABLE_R[k] = ('%c(%P)', 0, (1,-1,', ',100)) + elif op in ('CALL_FUNCTION_VAR', + 'CALL_FUNCTION_VAR_KW', 'CALL_FUNCTION_KW'): + if v == 0: + str = '%c(%C' # '%C' is a dummy here ... + p2 = (0, 0, None) # .. because of this + else: + str = '%c(%C, ' + p2 = (1,-2, ', ') + if op == 'CALL_FUNCTION_VAR': + str += '*%c)' + entry = (str, 0, p2, -2) + elif op == 'CALL_FUNCTION_KW': + str += '**%c)' + entry = (str, 0, p2, -2) + else: + str += '*%c, **%c)' + if p2[2]: p2 = (1, -3, ', ') + entry = (str, 0, p2, -3, -2) + TABLE_R[k] = entry + ## handled by n_mapexpr: + ##if op == 'BUILD_SLICE': TABLE_R[k] = ('%C' , (0,-1,':')) + ## handled by n_build_list: + ##if op == 'BUILD_LIST': TABLE_R[k] = ('[%C]' , (0,-1,', ')) + ##elif op == 'BUILD_TUPLE': TABLE_R[k] = ('(%C%,)', (0,-1,', ')) + + def get_tuple_parameter(self, ast, name): + """ + If the name of the formal parameter starts with dot, + it's a tuple parameter, like this: + # def MyFunc(xx, (a,b,c), yy): + # print a, b*2, c*42 + In byte-code, the whole tuple is assigned to parameter '.1' and + then the tuple gets unpacked to 'a', 'b' and 'c'. + + Since identifiers starting with a dot are illegal in Python, + we can search for the byte-code equivalent to '(a,b,c) = .1' + """ + + assert ast == 'stmts' + for i in range(len(ast)): + # search for an assign-statement + assert ast[i][0] == 'stmt' + node = ast[i][0][0] + if node == 'assign' \ + and node[0] == ASSIGN_TUPLE_PARAM(name): + # okay, this assigns '.n' to something + del ast[i] + # walk lhs; this + # returns a tuple of identifiers as used + # within the function definition + assert node[1] == 'designator' + # if lhs is not a UNPACK_TUPLE (or equiv.), + # add parenteses to make this a tuple + #if node[1][0] not in ('unpack', 'unpack_list'): + return '(' + self.traverse(node[1]) + ')' + #return self.traverse(node[1]) + raise "Can't find tuple parameter" % name + + + def make_function(self, node, isLambda, nested=1): + """Dump function defintion, doc string, and function body.""" + + def build_param(ast, name, default): + """build parameters: + - handle defaults + - handle format tuple parameters + """ + # if formal parameter is a tuple, the paramater name + # starts with a dot (eg. '.1', '.2') + if name.startswith('.'): + # replace the name with the tuple-string + name = self.get_tuple_parameter(ast, name) + + if default: + if self.showast: + print '--', name + print default + print '--' + result = '%s = %s' % (name, self.traverse(default, indent='') ) + if result[-2:] == '= ': # default was 'LOAD_CONST None' + result += 'None' + return result + else: + return name + defparams = node[:node[-1].attr] # node[-1] == MAKE_xxx_n + code = node[-2].attr + + assert type(code) == CodeType + code = Code(code, self.scanner, self.currentclass) + #assert isinstance(code, Code) + + # add defaults values to parameter names + argc = code.co_argcount + paramnames = list(code.co_varnames[:argc]) + + # defaults are for last n parameters, thus reverse + paramnames.reverse(); defparams.reverse() + + try: + ast = self.build_ast(code._tokens, + code._customize, + isLambda = isLambda, + noneInNames = ('None' in code.co_names)) + except ParserError as p: + self.write( str(p)) + self.ERROR = p + return + + # build parameters + + ##This would be a nicer piece of code, but I can't get this to work + ## now, have to find a usable lambda constuct hG/2000-09-05 + ##params = map(lambda name, default: build_param(ast, name, default), + ## paramnames, defparams) + params = [] + for name, default in map(lambda a,b: (a,b), paramnames, defparams): + params.append( build_param(ast, name, default) ) + + params.reverse() # back to correct order + + if 4 & code.co_flags: # flag 2 -> variable number of args + params.append('*%s' % code.co_varnames[argc]) + argc += 1 + if 8 & code.co_flags: # flag 3 -> keyword args + params.append('**%s' % code.co_varnames[argc]) + argc += 1 + + # dump parameter list (with default values) + indent = self.indent + if isLambda: + self.write("lambda ", ", ".join(params), ": ") + else: + self.print_("(", ", ".join(params), "):") + #self.print_(indent, '#flags:\t', int(code.co_flags)) + + if len(code.co_consts)>0 and code.co_consts[0] != None and not isLambda: # ugly + # docstring exists, dump it + self.print_docstring(indent, code.co_consts[0]) + + + code._tokens = None # save memory + assert ast == 'stmts' + #if isLambda: + # convert 'return' statement to expression + #assert len(ast[0]) == 1 wrong, see 'lambda (r,b): r,b,g' + #assert ast[-1] == 'stmt' + #assert len(ast[-1]) == 1 +# assert ast[-1][0] == 'return_stmt' +# ast[-1][0].type = 'return_lambda' + #else: + # if ast[-1] == RETURN_NONE: + # Python adds a 'return None' to the + # end of any function; remove it + # ast.pop() # remove last node + + all_globals = find_all_globals(ast, set()) + for g in ((all_globals & self.mod_globs) | find_globals(ast, set())): + self.print_(self.indent, 'global ', g) + self.mod_globs -= all_globals + rn = ('None' in code.co_names) and not find_none(ast) + self.gen_source(ast, code._customize, isLambda=isLambda, returnNone=rn) + code._tokens = None; code._customize = None # save memory + + def build_class(self, code): + """Dump class definition, doc string and class body.""" + + assert type(code) == CodeType + code = Code(code, self.scanner, self.currentclass) + #assert isinstance(code, Code) + + indent = self.indent + #self.print_(indent, '#flags:\t', int(code.co_flags)) + ast = self.build_ast(code._tokens, code._customize) + code._tokens = None # save memory + assert ast == 'stmts' + + if ast[0][0] == NAME_MODULE: + del ast[0] + + # if docstring exists, dump it + if code.co_consts and code.co_consts[0] != None and ast[0][0] == ASSIGN_DOC_STRING(code.co_consts[0]): + self.print_docstring(indent, code.co_consts[0]) + self.print_() + del ast[0] + + + # the function defining a class normally returns locals(); we + # don't want this to show up in the source, thus remove the node + if ast[-1][0] == RETURN_LOCALS: + del ast[-1] # remove last node + #else: + # print ast[-1][-1] + + for g in find_globals(ast, {}).keys(): + self.print_(indent, 'global ', g) + + self.gen_source(ast, code._customize) + code._tokens = None; code._customize = None # save memory + + + def gen_source(self, ast, customize, isLambda=0, returnNone=False): + """convert AST to source code""" + + rn = self.return_none + self.return_none = returnNone + # if code would be empty, append 'pass' + if len(ast) == 0: + self.print_(self.indent, 'pass') + else: + self.customize(customize) + if isLambda: + self.write(self.traverse(ast, isLambda=isLambda)) + else: + self.print_(self.traverse(ast, isLambda=isLambda)) + self.return_none = rn + + def build_ast(self, tokens, customize, isLambda=0, noneInNames=False): + assert type(tokens) == ListType + #assert isinstance(tokens[0], Token) + + if isLambda: + tokens.append(Token('LAMBDA_MARKER')) + try: + ast = Parser.parse(tokens, customize) + except Parser.ParserError, e: + raise ParserError(e, tokens) + if self.showast: + self.print_(repr(ast)) + return ast + + if len(tokens) > 2 or len(tokens) == 2 and not noneInNames: + if tokens[-1] == Token('RETURN_VALUE'): + if tokens[-2] == Token('LOAD_CONST'): + del tokens[-2:] + else: + tokens.append(Token('RETURN_LAST')) + if len(tokens) == 0: + return PASS + + # Build AST from disassembly. + try: + ast = Parser.parse(tokens, customize) + except Parser.ParserError, e: + raise ParserError(e, tokens) + + if self.showast: + self.print_(repr(ast)) + + return ast diff --git a/uncompyle2/__init__.py b/uncompyle2/__init__.py new file mode 100755 index 00000000..6d94b492 --- /dev/null +++ b/uncompyle2/__init__.py @@ -0,0 +1,232 @@ +# Copyright (c) 1999 John Aycock +# Copyright (c) 2000 by hartmut Goebel +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# See the file 'CHANGES' for a list of changes +# +# NB. This is not a masterpiece of software, but became more like a hack. +# Probably a complete rewrite would be sensefull. hG/2000-12-27 +# + +import sys, types, os +import Walker, verify, magics + +sys.setrecursionlimit(5000) +__all__ = ['uncompyle_file', 'uncompyle_file', 'main'] + +def _load_file(filename): + """ + load a Python source file and compile it to byte-code + + _load_module(filename: string): code_object + + filename: name of file containing Python source code + (normally a .py) + code_object: code_object compiled from this source code + + This function does NOT write any file! + """ + fp = open(filename, 'rb') + source = fp.read()+'\n' + try: + co = compile(source, filename, 'exec') + except SyntaxError: + print >> sys.stderr, '>>Syntax error in', filename + raise + fp.close() + return co + +def _load_module(filename): + """ + load a module without importing it + _load_module(filename: string): code_object + + filename: name of file containing Python byte-code object + (normally a .pyc) + code_object: code_object from this file + """ + import magics, marshal + fp = open(filename, 'rb') + magic = fp.read(4) + try: + version = float(magics.versions[magic]) + except KeyError: + raise ImportError, "Unknown magic number %s in %s" % (ord(magic[0])+256*ord(magic[1]), filename) + if (version > 2.7) or (version < 2.5): + raise ImportError, "This is a Python %s file! Only Python 2.5 to 2.7 files are supported." % version + #print version + fp.read(4) # timestamp + co = marshal.load(fp) + fp.close() + return version, co + +def uncompyle(version, co, out=None, showasm=0, showast=0): + """ + diassembles a given code block 'co' + """ + assert type(co) == types.CodeType + + # store final output stream for case of error + __real_out = out or sys.stdout + if co.co_filename: + print >>__real_out, '#Embedded file name: %s' % co.co_filename + # diff scanner + if version == 2.7: + import Scanner27 as scan + elif version == 2.6: + import Scanner26 as scan + elif version == 2.5: + import Scanner25 as scan + + scanner = scan.Scanner(version) + scanner.setShowAsm(showasm, out) + tokens, customize = scanner.disassemble(co) + + #sys.exit(0) + # Build AST from disassembly. + walker = Walker.Walker(out, scanner, showast=showast) + try: + ast = walker.build_ast(tokens, customize) + except Walker.ParserError, e : # parser failed, dump disassembly + print >>__real_out, e + raise + + del tokens # save memory + + # convert leading '__doc__ = "..." into doc string + assert ast == 'stmts' + try: + if ast[0][0] == Walker.ASSIGN_DOC_STRING(co.co_consts[0]): + walker.print_docstring('', co.co_consts[0]) + del ast[0] + if ast[-1] == Walker.RETURN_NONE: + ast.pop() # remove last node + #todo: if empty, add 'pass' + except: + pass + walker.mod_globs = Walker.find_globals(ast, set()) + walker.gen_source(ast, customize) + for g in walker.mod_globs: + walker.write('global %s ## Warning: Unused global\n' % g) + if walker.ERROR: + raise walker.ERROR + +def uncompyle_file(filename, outstream=None, showasm=0, showast=0): + """ + decompile Python byte-code file (.pyc) + """ + version, co = _load_module(filename) + uncompyle(version, co, outstream, showasm, showast) + co = None + +#---- main ------- + +if sys.platform.startswith('linux') and os.uname()[2][:2] == '2.': + def __memUsage(): + mi = open('/proc/self/stat', 'r') + mu = mi.readline().split()[22] + mi.close() + return int(mu) / 1000000 +else: + def __memUsage(): + return '' + +def main(in_base, out_base, files, codes, outfile=None, + showasm=0, showast=0, do_verify=0): + """ + in_base base directory for input files + out_base base directory for output files (ignored when + files list of filenames to be uncompyled (relative to src_base) + outfile write output to this filename (overwrites out_base) + + For redirecting output to + - outfile= (out_base is ignored) + - files below out_base out_base=... + - stdout out_base=None, outfile=None + """ + def _get_outstream(outfile): + dir = os.path.dirname(outfile) + failed_file = outfile + '_failed' + if os.path.exists(failed_file): os.remove(failed_file) + try: + os.makedirs(dir) + except OSError: + pass + return open(outfile, 'w') + + of = outfile + + tot_files = okay_files = failed_files = verify_failed_files = 0 + + for code in codes: + version = sys.version[:3] # "2.5" + with open(code, "r") as f: + co = compile(f.read(), "", "exec") + uncompyle(sys.version[:3], co, sys.stdout, showasm=showasm, showast=showast) + + for file in files: + infile = os.path.join(in_base, file) + #print >>sys.stderr, infile + + if of: # outfile was given as parameter + outstream = _get_outstream(outfile) + elif out_base is None: + outstream = sys.stdout + else: + outfile = os.path.join(out_base, file) + '_dis' + outstream = _get_outstream(outfile) + #print >>sys.stderr, outfile + + # try to decomyple the input file + try: + uncompyle_file(infile, outstream, showasm, showast) + tot_files += 1 + except KeyboardInterrupt: + if outfile: + outstream.close() + os.remove(outfile) + raise + except: + failed_files += 1 + sys.stderr.write("### Can't uncompyle %s\n" % infile) + if outfile: + outstream.close() + os.rename(outfile, outfile + '_failed') + import traceback + traceback.print_exc() + #raise + else: # uncompyle successfull + if outfile: + outstream.close() + if do_verify: + try: + verify.compare_code_with_srcfile(infile, outfile) + print "+++ okay decompyling", infile, __memUsage() + okay_files += 1 + except verify.VerifyCmpError, e: + verify_failed_files += 1 + os.rename(outfile, outfile + '_unverified') + print >>sys.stderr, "### Error Verifiying", file + print >>sys.stderr, e + else: + okay_files += 1 + print "+++ okay decompyling", infile, __memUsage() + return (tot_files, okay_files, failed_files, verify_failed_files) diff --git a/uncompyle2/disas.py b/uncompyle2/disas.py new file mode 100755 index 00000000..e732f6d3 --- /dev/null +++ b/uncompyle2/disas.py @@ -0,0 +1,238 @@ +"""Disassembler of Python byte code into mnemonics.""" + +import sys +import types + +_have_code = (types.MethodType, types.FunctionType, types.CodeType, types.ClassType, type) + +def dis(x=None): + """Disassemble classes, methods, functions, or code. + + With no argument, disassemble the last traceback. + + """ + if x is None: + distb() + return + if isinstance(x, types.InstanceType): + x = x.__class__ + if hasattr(x, 'im_func'): + x = x.im_func + if hasattr(x, 'func_code'): + x = x.func_code + if hasattr(x, '__dict__'): + items = x.__dict__.items() + items.sort() + for name, x1 in items: + if isinstance(x1, _have_code): + print "Disassembly of %s:" % name + try: + dis(x1) + except TypeError, msg: + print "Sorry:", msg + print + elif hasattr(x, 'co_code'): + disassemble(x) + elif isinstance(x, str): + disassemble_string(x) + else: + raise TypeError, \ + "don't know how to disassemble %s objects" % \ + type(x).__name__ + +def distb(tb=None): + """Disassemble a traceback (default: last traceback).""" + if tb is None: + try: + tb = sys.last_traceback + except AttributeError: + raise RuntimeError, "no last traceback to disassemble" + while tb.tb_next: tb = tb.tb_next + disassemble(tb.tb_frame.f_code, tb.tb_lasti) + +def disassemble(co, lasti=-1): + """Disassemble a code object.""" + code = co.co_code + labels = findlabels(code) + linestarts = dict(findlinestarts(co)) + n = len(code) + i = 0 + extended_arg = 0 + free = None + while i < n: + c = code[i] + op = ord(c) + if i in linestarts: + if i > 0: + print + print "%3d" % linestarts[i], + else: + print ' ', + + if i == lasti: print '-->', + else: print ' ', + if i in labels: print '>>', + else: print ' ', + print repr(i).rjust(4), + print opname[op].ljust(20), + i = i+1 + if op >= HAVE_ARGUMENT: + oparg = ord(code[i]) + ord(code[i+1])*256 + extended_arg + extended_arg = 0 + i = i+2 + if op == EXTENDED_ARG: + extended_arg = oparg*65536L + print repr(oparg).rjust(5), + if op in hasconst: + print '(' + repr(co.co_consts[oparg]) + ')', + elif op in hasname: + print '(' + co.co_names[oparg] + ')', + elif op in hasjrel: + print '(to ' + repr(i + oparg) + ')', + elif op in haslocal: + print '(' + co.co_varnames[oparg] + ')', + elif op in hascompare: + print '(' + cmp_op[oparg] + ')', + elif op in hasfree: + if free is None: + free = co.co_cellvars + co.co_freevars + print '(' + free[oparg] + ')', + print + +def disassemble_string(code, lasti=-1, varnames=None, names=None, + constants=None): + labels = findlabels(code) + n = len(code) + i = 0 + while i < n: + c = code[i] + op = ord(c) + if i == lasti: print '-->', + else: print ' ', + if i in labels: print '>>', + else: print ' ', + print repr(i).rjust(4), + print opname[op].ljust(15), + i = i+1 + if op >= HAVE_ARGUMENT: + oparg = ord(code[i]) + ord(code[i+1])*256 + i = i+2 + print repr(oparg).rjust(5), + if op in hasconst: + if constants: + print '(' + repr(constants[oparg]) + ')', + else: + print '(%d)'%oparg, + elif op in hasname: + if names is not None: + print '(' + names[oparg] + ')', + else: + print '(%d)'%oparg, + elif op in hasjrel: + print '(to ' + repr(i + oparg) + ')', + elif op in haslocal: + if varnames: + print '(' + varnames[oparg] + ')', + else: + print '(%d)' % oparg, + elif op in hascompare: + print '(' + cmp_op[oparg] + ')', + print + +disco = disassemble # XXX For backwards compatibility + +def findlabels(code): + """Detect all offsets in a byte code which are jump targets. + + Return the list of offsets. + + """ + labels = [] + n = len(code) + i = 0 + while i < n: + c = code[i] + op = ord(c) + i = i+1 + if op >= HAVE_ARGUMENT: + oparg = ord(code[i]) + ord(code[i+1])*256 + i = i+2 + label = -1 + if op in hasjrel: + label = i+oparg + elif op in hasjabs: + label = oparg + if label >= 0: + if label not in labels: + labels.append(label) + return labels + +def findlinestarts(code): + """Find the offsets in a byte code which are start of lines in the source. + + Generate pairs (offset, lineno) as described in Python/compile.c. + + """ + byte_increments = [ord(c) for c in code.co_lnotab[0::2]] + line_increments = [ord(c) for c in code.co_lnotab[1::2]] + + lastlineno = None + lineno = code.co_firstlineno + addr = 0 + for byte_incr, line_incr in zip(byte_increments, line_increments): + if byte_incr: + if lineno != lastlineno: + yield (addr, lineno) + lastlineno = lineno + addr += byte_incr + lineno += line_incr + if lineno != lastlineno: + yield (addr, lineno) + +def setVersion(version): + if version == 2.7: + import uncompyle2.opcode.opcode_27 as opcodyn + elif version == 2.6: + import uncompyle2.opcode.opcode_26 as opcodyn + elif version == 2.5: + import uncompyle2.opcode.opcode_25 as opcodyn + + globals().update({'cmp_op': opcodyn.cmp_op}) + globals().update({'hasconst': opcodyn.hasconst}) + globals().update({'hasname': opcodyn.hasname}) + globals().update({'hasjrel': opcodyn.hasjrel}) + globals().update({'hasjabs': opcodyn.hasjabs}) + globals().update({'haslocal': opcodyn.haslocal}) + globals().update({'hascompare': opcodyn.hascompare}) + globals().update({'hasfree': opcodyn.hasfree}) + globals().update({'opname': opcodyn.opname}) + globals().update({'opmap': opcodyn.opmap}) + globals().update({'HAVE_ARGUMENT': opcodyn.HAVE_ARGUMENT}) + globals().update({'EXTENDED_ARG': opcodyn.EXTENDED_ARG}) + + +def _test(): + """Simple test program to disassemble a file.""" + if sys.argv[1:]: + if sys.argv[2:]: + sys.stderr.write("usage: python dis.py [-|file]\n") + sys.exit(2) + fn = sys.argv[1] + if not fn or fn == "-": + fn = None + else: + fn = None + if fn is None: + f = sys.stdin + else: + f = open(fn) + source = f.read() + if fn is not None: + f.close() + else: + fn = "" + code = compile(source, fn, "exec") + dis(code) + +if __name__ == "__main__": + _test() diff --git a/uncompyle2/magics.py b/uncompyle2/magics.py new file mode 100755 index 00000000..74177b7a --- /dev/null +++ b/uncompyle2/magics.py @@ -0,0 +1,66 @@ +import struct + +__all__ = ['magics', 'versions'] + +def __build_magic(magic): + return struct.pack('Hcc', magic, '\r', '\n') + +def __by_version(magics): + by_version = {} + for m, v in magics.items(): + by_version[v] = m + return by_version + +versions = { + # taken from from Python/import.c + # magic, version + __build_magic(20121): '1.5', #1.5, 1.5.1, 1.5.2 + __build_magic(50428): '1.6', #1.6 + __build_magic(50823): '2.0', #2.0, 2.0.1 + __build_magic(60202): '2.1', #2.1, 2.1.1, 2.1.2 + __build_magic(60717): '2.2', #2.2 + __build_magic(62011): '2.3', #2.3a0 + __build_magic(62021): '2.3', #2.3a0 + __build_magic(62041): '2.4', #2.4a0 + __build_magic(62051): '2.4', #2.4a3 + __build_magic(62061): '2.4', #2.4b1 + __build_magic(62071): '2.5', #2.5a0 + __build_magic(62081): '2.5', #2.5a0 (ast-branch) + __build_magic(62091): '2.5', #2.5a0 (with) + __build_magic(62092): '2.5', #2.5a0 (changed WITH_CLEANUP opcode) + __build_magic(62101): '2.5', #2.5b3 (fix wrong code: for x, in ...) + __build_magic(62111): '2.5', #2.5b3 (fix wrong code: x += yield) + __build_magic(62121): '2.5', #2.5c1 (fix wrong lnotab with for loops and + # storing constants that should have been removed + __build_magic(62131): '2.5', #2.5c2 (fix wrong code: for x, in ... in listcomp/genexp) + __build_magic(62151): '2.6', #2.6a0 (peephole optimizations & STORE_MAP) + __build_magic(62161): '2.6', #2.6a1 (WITH_CLEANUP optimization) + __build_magic(62171): '2.7', #2.7a0 (optimize list comprehensions/change LIST_APPEND) + __build_magic(62181): '2.7', #2.7a0 (optimize conditional branches: + # introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE) + __build_magic(62191): '2.7', #2.7a0 (introduce SETUP_WITH) + __build_magic(62201): '2.7', #2.7a0 (introduce BUILD_SET) + __build_magic(62211): '2.7' #2.7a0 (introduce MAP_ADD and SET_ADD) +} + +magics = __by_version(versions) + +def __show(text, magic): + print text, struct.unpack('BBBB', magic), \ + struct.unpack('HBB', magic) + +def test(): + import imp + magic_20 = by_version['2.0'] + current = imp.get_magic() + current_version = magics[current] + magic_current = by_version[ current_version ] + print type(magic_20), len(magic_20), repr(magic_20) + print + print 'This Python interpreter has version', current_version + __show('imp.get_magic():\t', current), + __show('magic[current_version]:\t', magic_current) + __show('magic_20:\t\t', magic_20) + +if __name__ == '__main__': + test() diff --git a/uncompyle2/opcode/__init__.py b/uncompyle2/opcode/__init__.py new file mode 100755 index 00000000..e69de29b diff --git a/uncompyle2/opcode/opcode_23.py b/uncompyle2/opcode/opcode_23.py new file mode 100755 index 00000000..cfde5f80 --- /dev/null +++ b/uncompyle2/opcode/opcode_23.py @@ -0,0 +1,188 @@ + +""" +opcode module - potentially shared between dis and other modules which +operate on bytecodes (e.g. peephole optimizers). +""" + +__all__ = ["cmp_op", "hasconst", "hasname", "hasjrel", "hasjabs", + "haslocal", "hascompare", "hasfree", "opname", "opmap", + "HAVE_ARGUMENT", "EXTENDED_ARG"] + +cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is', + 'is not', 'exception match', 'BAD') + +hasconst = [] +hasname = [] +hasjrel = [] +hasjabs = [] +haslocal = [] +hascompare = [] +hasfree = [] + +opmap = {} +opname = [''] * 256 +for op in range(256): opname[op] = '<' + `op` + '>' +del op + +def def_op(name, op): + opname[op] = name + opmap[name] = op + +def name_op(name, op): + def_op(name, op) + hasname.append(op) + +def jrel_op(name, op): + def_op(name, op) + hasjrel.append(op) + +def jabs_op(name, op): + def_op(name, op) + hasjabs.append(op) + +# Instruction opcodes for compiled code + +def_op('STOP_CODE', 0) +def_op('POP_TOP', 1) +def_op('ROT_TWO', 2) +def_op('ROT_THREE', 3) +def_op('DUP_TOP', 4) +def_op('ROT_FOUR', 5) + +def_op('UNARY_POSITIVE', 10) +def_op('UNARY_NEGATIVE', 11) +def_op('UNARY_NOT', 12) +def_op('UNARY_CONVERT', 13) + +def_op('UNARY_INVERT', 15) + +def_op('BINARY_POWER', 19) + +def_op('BINARY_MULTIPLY', 20) +def_op('BINARY_DIVIDE', 21) +def_op('BINARY_MODULO', 22) +def_op('BINARY_ADD', 23) +def_op('BINARY_SUBTRACT', 24) +def_op('BINARY_SUBSCR', 25) +def_op('BINARY_FLOOR_DIVIDE', 26) +def_op('BINARY_TRUE_DIVIDE', 27) +def_op('INPLACE_FLOOR_DIVIDE', 28) +def_op('INPLACE_TRUE_DIVIDE', 29) + +def_op('SLICE+0', 30) +def_op('SLICE+1', 31) +def_op('SLICE+2', 32) +def_op('SLICE+3', 33) + +def_op('STORE_SLICE+0', 40) +def_op('STORE_SLICE+1', 41) +def_op('STORE_SLICE+2', 42) +def_op('STORE_SLICE+3', 43) + +def_op('DELETE_SLICE+0', 50) +def_op('DELETE_SLICE+1', 51) +def_op('DELETE_SLICE+2', 52) +def_op('DELETE_SLICE+3', 53) + +def_op('INPLACE_ADD', 55) +def_op('INPLACE_SUBTRACT', 56) +def_op('INPLACE_MULTIPLY', 57) +def_op('INPLACE_DIVIDE', 58) +def_op('INPLACE_MODULO', 59) +def_op('STORE_SUBSCR', 60) +def_op('DELETE_SUBSCR', 61) + +def_op('BINARY_LSHIFT', 62) +def_op('BINARY_RSHIFT', 63) +def_op('BINARY_AND', 64) +def_op('BINARY_XOR', 65) +def_op('BINARY_OR', 66) +def_op('INPLACE_POWER', 67) +def_op('GET_ITER', 68) + +def_op('PRINT_EXPR', 70) +def_op('PRINT_ITEM', 71) +def_op('PRINT_NEWLINE', 72) +def_op('PRINT_ITEM_TO', 73) +def_op('PRINT_NEWLINE_TO', 74) +def_op('INPLACE_LSHIFT', 75) +def_op('INPLACE_RSHIFT', 76) +def_op('INPLACE_AND', 77) +def_op('INPLACE_XOR', 78) +def_op('INPLACE_OR', 79) +def_op('BREAK_LOOP', 80) + +def_op('LOAD_LOCALS', 82) +def_op('RETURN_VALUE', 83) +def_op('IMPORT_STAR', 84) +def_op('EXEC_STMT', 85) +def_op('YIELD_VALUE', 86) + +def_op('POP_BLOCK', 87) +def_op('END_FINALLY', 88) +def_op('BUILD_CLASS', 89) + +HAVE_ARGUMENT = 90 # Opcodes from here have an argument: + +name_op('STORE_NAME', 90) # Index in name list +name_op('DELETE_NAME', 91) # "" +def_op('UNPACK_SEQUENCE', 92) # Number of tuple items +jrel_op('FOR_ITER', 93) + +name_op('STORE_ATTR', 95) # Index in name list +name_op('DELETE_ATTR', 96) # "" +name_op('STORE_GLOBAL', 97) # "" +name_op('DELETE_GLOBAL', 98) # "" +def_op('DUP_TOPX', 99) # number of items to duplicate +def_op('LOAD_CONST', 100) # Index in const list +hasconst.append(100) +name_op('LOAD_NAME', 101) # Index in name list +def_op('BUILD_TUPLE', 102) # Number of tuple items +def_op('BUILD_LIST', 103) # Number of list items +def_op('BUILD_MAP', 104) # Always zero for now +name_op('LOAD_ATTR', 105) # Index in name list +def_op('COMPARE_OP', 106) # Comparison operator +hascompare.append(106) +name_op('IMPORT_NAME', 107) # Index in name list +name_op('IMPORT_FROM', 108) # Index in name list + +jrel_op('JUMP_FORWARD', 110) # Number of bytes to skip +jrel_op('JUMP_IF_FALSE', 111) # "" +jrel_op('JUMP_IF_TRUE', 112) # "" +jabs_op('JUMP_ABSOLUTE', 113) # Target byte offset from beginning of code + +name_op('LOAD_GLOBAL', 116) # Index in name list + +jabs_op('CONTINUE_LOOP', 119) # Target address +jrel_op('SETUP_LOOP', 120) # Distance to target address +jrel_op('SETUP_EXCEPT', 121) # "" +jrel_op('SETUP_FINALLY', 122) # "" + +def_op('LOAD_FAST', 124) # Local variable number +haslocal.append(124) +def_op('STORE_FAST', 125) # Local variable number +haslocal.append(125) +def_op('DELETE_FAST', 126) # Local variable number +haslocal.append(126) + +def_op('RAISE_VARARGS', 130) # Number of raise arguments (1, 2, or 3) +def_op('CALL_FUNCTION', 131) # #args + (#kwargs << 8) +def_op('MAKE_FUNCTION', 132) # Number of args with default values +def_op('BUILD_SLICE', 133) # Number of items + +def_op('MAKE_CLOSURE', 134) +def_op('LOAD_CLOSURE', 135) +hasfree.append(135) +def_op('LOAD_DEREF', 136) +hasfree.append(136) +def_op('STORE_DEREF', 137) +hasfree.append(137) + +def_op('CALL_FUNCTION_VAR', 140) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_KW', 141) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_VAR_KW', 142) # #args + (#kwargs << 8) + +def_op('EXTENDED_ARG', 143) +EXTENDED_ARG = 143 + +del def_op, name_op, jrel_op, jabs_op diff --git a/uncompyle2/opcode/opcode_24.py b/uncompyle2/opcode/opcode_24.py new file mode 100755 index 00000000..9517c431 --- /dev/null +++ b/uncompyle2/opcode/opcode_24.py @@ -0,0 +1,190 @@ + +""" +opcode module - potentially shared between dis and other modules which +operate on bytecodes (e.g. peephole optimizers). +""" + +__all__ = ["cmp_op", "hasconst", "hasname", "hasjrel", "hasjabs", + "haslocal", "hascompare", "hasfree", "opname", "opmap", + "HAVE_ARGUMENT", "EXTENDED_ARG"] + +cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is', + 'is not', 'exception match', 'BAD') + +hasconst = [] +hasname = [] +hasjrel = [] +hasjabs = [] +haslocal = [] +hascompare = [] +hasfree = [] + +opmap = {} +opname = [''] * 256 +for op in range(256): opname[op] = '<%r>' % (op,) +del op + +def def_op(name, op): + opname[op] = name + opmap[name] = op + +def name_op(name, op): + def_op(name, op) + hasname.append(op) + +def jrel_op(name, op): + def_op(name, op) + hasjrel.append(op) + +def jabs_op(name, op): + def_op(name, op) + hasjabs.append(op) + +# Instruction opcodes for compiled code + +def_op('STOP_CODE', 0) +def_op('POP_TOP', 1) +def_op('ROT_TWO', 2) +def_op('ROT_THREE', 3) +def_op('DUP_TOP', 4) +def_op('ROT_FOUR', 5) + +def_op('NOP', 9) +def_op('UNARY_POSITIVE', 10) +def_op('UNARY_NEGATIVE', 11) +def_op('UNARY_NOT', 12) +def_op('UNARY_CONVERT', 13) + +def_op('UNARY_INVERT', 15) + +def_op('LIST_APPEND', 18) +def_op('BINARY_POWER', 19) + +def_op('BINARY_MULTIPLY', 20) +def_op('BINARY_DIVIDE', 21) +def_op('BINARY_MODULO', 22) +def_op('BINARY_ADD', 23) +def_op('BINARY_SUBTRACT', 24) +def_op('BINARY_SUBSCR', 25) +def_op('BINARY_FLOOR_DIVIDE', 26) +def_op('BINARY_TRUE_DIVIDE', 27) +def_op('INPLACE_FLOOR_DIVIDE', 28) +def_op('INPLACE_TRUE_DIVIDE', 29) + +def_op('SLICE+0', 30) +def_op('SLICE+1', 31) +def_op('SLICE+2', 32) +def_op('SLICE+3', 33) + +def_op('STORE_SLICE+0', 40) +def_op('STORE_SLICE+1', 41) +def_op('STORE_SLICE+2', 42) +def_op('STORE_SLICE+3', 43) + +def_op('DELETE_SLICE+0', 50) +def_op('DELETE_SLICE+1', 51) +def_op('DELETE_SLICE+2', 52) +def_op('DELETE_SLICE+3', 53) + +def_op('INPLACE_ADD', 55) +def_op('INPLACE_SUBTRACT', 56) +def_op('INPLACE_MULTIPLY', 57) +def_op('INPLACE_DIVIDE', 58) +def_op('INPLACE_MODULO', 59) +def_op('STORE_SUBSCR', 60) +def_op('DELETE_SUBSCR', 61) + +def_op('BINARY_LSHIFT', 62) +def_op('BINARY_RSHIFT', 63) +def_op('BINARY_AND', 64) +def_op('BINARY_XOR', 65) +def_op('BINARY_OR', 66) +def_op('INPLACE_POWER', 67) +def_op('GET_ITER', 68) + +def_op('PRINT_EXPR', 70) +def_op('PRINT_ITEM', 71) +def_op('PRINT_NEWLINE', 72) +def_op('PRINT_ITEM_TO', 73) +def_op('PRINT_NEWLINE_TO', 74) +def_op('INPLACE_LSHIFT', 75) +def_op('INPLACE_RSHIFT', 76) +def_op('INPLACE_AND', 77) +def_op('INPLACE_XOR', 78) +def_op('INPLACE_OR', 79) +def_op('BREAK_LOOP', 80) + +def_op('LOAD_LOCALS', 82) +def_op('RETURN_VALUE', 83) +def_op('IMPORT_STAR', 84) +def_op('EXEC_STMT', 85) +def_op('YIELD_VALUE', 86) + +def_op('POP_BLOCK', 87) +def_op('END_FINALLY', 88) +def_op('BUILD_CLASS', 89) + +HAVE_ARGUMENT = 90 # Opcodes from here have an argument: + +name_op('STORE_NAME', 90) # Index in name list +name_op('DELETE_NAME', 91) # "" +def_op('UNPACK_SEQUENCE', 92) # Number of tuple items +jrel_op('FOR_ITER', 93) + +name_op('STORE_ATTR', 95) # Index in name list +name_op('DELETE_ATTR', 96) # "" +name_op('STORE_GLOBAL', 97) # "" +name_op('DELETE_GLOBAL', 98) # "" +def_op('DUP_TOPX', 99) # number of items to duplicate +def_op('LOAD_CONST', 100) # Index in const list +hasconst.append(100) +name_op('LOAD_NAME', 101) # Index in name list +def_op('BUILD_TUPLE', 102) # Number of tuple items +def_op('BUILD_LIST', 103) # Number of list items +def_op('BUILD_MAP', 104) # Always zero for now +name_op('LOAD_ATTR', 105) # Index in name list +def_op('COMPARE_OP', 106) # Comparison operator +hascompare.append(106) +name_op('IMPORT_NAME', 107) # Index in name list +name_op('IMPORT_FROM', 108) # Index in name list + +jrel_op('JUMP_FORWARD', 110) # Number of bytes to skip +jrel_op('JUMP_IF_FALSE', 111) # "" +jrel_op('JUMP_IF_TRUE', 112) # "" +jabs_op('JUMP_ABSOLUTE', 113) # Target byte offset from beginning of code + +name_op('LOAD_GLOBAL', 116) # Index in name list + +jabs_op('CONTINUE_LOOP', 119) # Target address +jrel_op('SETUP_LOOP', 120) # Distance to target address +jrel_op('SETUP_EXCEPT', 121) # "" +jrel_op('SETUP_FINALLY', 122) # "" + +def_op('LOAD_FAST', 124) # Local variable number +haslocal.append(124) +def_op('STORE_FAST', 125) # Local variable number +haslocal.append(125) +def_op('DELETE_FAST', 126) # Local variable number +haslocal.append(126) + +def_op('RAISE_VARARGS', 130) # Number of raise arguments (1, 2, or 3) +def_op('CALL_FUNCTION', 131) # #args + (#kwargs << 8) +def_op('MAKE_FUNCTION', 132) # Number of args with default values +def_op('BUILD_SLICE', 133) # Number of items + +def_op('MAKE_CLOSURE', 134) +def_op('LOAD_CLOSURE', 135) +hasfree.append(135) +def_op('LOAD_DEREF', 136) +hasfree.append(136) +def_op('STORE_DEREF', 137) +hasfree.append(137) + +def_op('CALL_FUNCTION_VAR', 140) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_KW', 141) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_VAR_KW', 142) # #args + (#kwargs << 8) + +def_op('EXTENDED_ARG', 143) +EXTENDED_ARG = 143 + +del def_op, name_op, jrel_op, jabs_op diff --git a/uncompyle2/opcode/opcode_25.py b/uncompyle2/opcode/opcode_25.py new file mode 100755 index 00000000..699ecd91 --- /dev/null +++ b/uncompyle2/opcode/opcode_25.py @@ -0,0 +1,185 @@ + +""" +opcode module - potentially shared between dis and other modules which +operate on bytecodes (e.g. peephole optimizers). +""" + +__all__ = ["cmp_op", "hasconst", "hasname", "hasjrel", "hasjabs", + "haslocal", "hascompare", "hasfree", "opname", "opmap", + "HAVE_ARGUMENT", "EXTENDED_ARG"] + +cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is', + 'is not', 'exception match', 'BAD') + +hasconst = [] +hasname = [] +hasjrel = [] +hasjabs = [] +haslocal = [] +hascompare = [] +hasfree = [] + +opmap = {} +opname = [''] * 256 +for op in range(256): opname[op] = '<%r>' % (op,) +del op + +def def_op(name, op): + opname[op] = name + opmap[name] = op + +def name_op(name, op): + def_op(name, op) + hasname.append(op) + +def jrel_op(name, op): + def_op(name, op) + hasjrel.append(op) + +def jabs_op(name, op): + def_op(name, op) + hasjabs.append(op) + +# Instruction opcodes for compiled code +# Blank lines correspond to available opcodes + +def_op('STOP_CODE', 0) # 0 +def_op('POP_TOP', 1) # 15 +def_op('ROT_TWO', 2) # 59 +def_op('ROT_THREE', 3) # 60 +def_op('DUP_TOP', 4) # 13 +def_op('ROT_FOUR', 5) # 49 + +def_op('NOP', 9) # 53 +def_op('UNARY_POSITIVE', 10) # 48 +def_op('UNARY_NEGATIVE', 11) # 54 +def_op('UNARY_NOT', 12) # 38 +def_op('UNARY_CONVERT', 13) # 25 + +def_op('UNARY_INVERT', 15) # 34 + +def_op('LIST_APPEND', 18) # 68 +def_op('BINARY_POWER', 19) # 28 +def_op('BINARY_MULTIPLY', 20) # 36 +def_op('BINARY_DIVIDE', 21) # 12 +def_op('BINARY_MODULO', 22) # 41 +def_op('BINARY_ADD', 23) # 52 +def_op('BINARY_SUBTRACT', 24) # 55 +def_op('BINARY_SUBSCR', 25) # 4 +def_op('BINARY_FLOOR_DIVIDE', 26) # 43 +def_op('BINARY_TRUE_DIVIDE', 27) # 5 +def_op('INPLACE_FLOOR_DIVIDE', 28) # 32 +def_op('INPLACE_TRUE_DIVIDE', 29) # 30 +def_op('SLICE+0', 30) # 16 +def_op('SLICE+1', 31) # 17 +def_op('SLICE+2', 32) # 18 +def_op('SLICE+3', 33) # 19 + +def_op('STORE_SLICE+0', 40) # 61 +def_op('STORE_SLICE+1', 41) # 62 +def_op('STORE_SLICE+2', 42) # 63 +def_op('STORE_SLICE+3', 43) # 64 + +def_op('DELETE_SLICE+0', 50) # 44 +def_op('DELETE_SLICE+1', 51) # 45 +def_op('DELETE_SLICE+2', 52) # 46 +def_op('DELETE_SLICE+3', 53) # 47 + +def_op('INPLACE_ADD', 55) # 6 +def_op('INPLACE_SUBTRACT', 56) # 29 +def_op('INPLACE_MULTIPLY', 57) # 8 +def_op('INPLACE_DIVIDE', 58) # 27 +def_op('INPLACE_MODULO', 59) # 3 +def_op('STORE_SUBSCR', 60) # 31 +def_op('DELETE_SUBSCR', 61) # 69 +def_op('BINARY_LSHIFT', 62) # 7 +def_op('BINARY_RSHIFT', 63) # 22 +def_op('BINARY_AND', 64) # 50 +def_op('BINARY_XOR', 65) # 21 +def_op('BINARY_OR', 66) # 2 +def_op('INPLACE_POWER', 67) # 57 +def_op('GET_ITER', 68) # 39 + +def_op('PRINT_EXPR', 70) # 20 +def_op('PRINT_ITEM', 71) # 9 +def_op('PRINT_NEWLINE', 72) # 14 +def_op('PRINT_ITEM_TO', 73) # 33 +def_op('PRINT_NEWLINE_TO', 74) # 35 +def_op('INPLACE_LSHIFT', 75) # 11 +def_op('INPLACE_RSHIFT', 76) # 58 +def_op('INPLACE_AND', 77) # 24 +def_op('INPLACE_XOR', 78) # 23 +def_op('INPLACE_OR', 79) # 10 +def_op('BREAK_LOOP', 80) # 40 +def_op('WITH_CLEANUP', 81) # 37 +def_op('LOAD_LOCALS', 82) # 51 +def_op('RETURN_VALUE', 83) # 66 +def_op('IMPORT_STAR', 84) # 56 +def_op('EXEC_STMT', 85) # 65 +def_op('YIELD_VALUE', 86) # 26 +def_op('POP_BLOCK', 87) # 1 +def_op('END_FINALLY', 88) # 67 +def_op('BUILD_CLASS', 89) # 42 + +HAVE_ARGUMENT = 90 # 70 # Opcodes from here have an argument: + +name_op('STORE_NAME', 90) # 95 # Index in name list +name_op('DELETE_NAME', 91) # 94 # "" +def_op('UNPACK_SEQUENCE', 92) # 93 # Number of tuple items +jrel_op('FOR_ITER', 93) # 81 + +name_op('STORE_ATTR', 95) # 84 # Index in name list +name_op('DELETE_ATTR', 96) # 87 # "" +name_op('STORE_GLOBAL', 97) # 105 # "" +name_op('DELETE_GLOBAL', 98) # 98 # "" +def_op('DUP_TOPX', 99) # 104 # number of items to duplicate +def_op('LOAD_CONST', 100) # 72 # Index in const list +hasconst.append(100) # 72 +name_op('LOAD_NAME', 101) # 79 # Index in name list +def_op('BUILD_TUPLE', 102) # 80 # Number of tuple items +def_op('BUILD_LIST', 103) # 107 # Number of list items +def_op('BUILD_MAP', 104) # 78 # Always zero for now +name_op('LOAD_ATTR', 105) # 86 # Index in name list +def_op('COMPARE_OP', 106) # 101 # Comparison operator +hascompare.append(106) # 101 +name_op('IMPORT_NAME', 107) # 88 # Index in name list +name_op('IMPORT_FROM', 108) # 89 # Index in name list + +jrel_op('JUMP_FORWARD', 110) # 73 # Number of bytes to skip +jabs_op('JUMP_IF_FALSE', 111) # 83 # "" +jabs_op('JUMP_IF_TRUE', 112) # 90 # "" +jabs_op('JUMP_ABSOLUTE', 113) # 103 # Target byte offset from beginning of code + +name_op('LOAD_GLOBAL', 116) # 70 # Index in name list + +jabs_op('CONTINUE_LOOP', 119) # 96 # Target address +jrel_op('SETUP_LOOP', 120) # 74 # Distance to target address +jrel_op('SETUP_EXCEPT', 121) # 75 # "" +jrel_op('SETUP_FINALLY', 122) # 106 # "" + +def_op('LOAD_FAST', 124) # 92 # Local variable number +haslocal.append(124) # 92 +def_op('STORE_FAST', 125) # 82 # Local variable number +haslocal.append(125) # 82 +def_op('DELETE_FAST', 126) # 71 # Local variable number +haslocal.append(126) # 71 + +def_op('RAISE_VARARGS', 130) # 91 # Number of raise arguments (1, 2, or 3) +def_op('CALL_FUNCTION', 131) # 102 # #args + (#kwargs << 8) +def_op('MAKE_FUNCTION', 132) # 76 # Number of args with default values +def_op('BUILD_SLICE', 133) # 77 # Number of items +def_op('MAKE_CLOSURE', 134) # 85 +def_op('LOAD_CLOSURE', 135) # 97 +hasfree.append(135) # 97 +def_op('LOAD_DEREF', 136) # 99 +hasfree.append(136) # 99 +def_op('STORE_DEREF', 137) # 100 +hasfree.append(137) # 100 + +def_op('CALL_FUNCTION_VAR', 140) # 111 # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_KW', 141) # 112 # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_VAR_KW', 142) # 113 # #args + (#kwargs << 8) +def_op('EXTENDED_ARG', 143) # 114 +EXTENDED_ARG = 143 # 114 + +del def_op, name_op, jrel_op, jabs_op diff --git a/uncompyle2/opcode/opcode_26.py b/uncompyle2/opcode/opcode_26.py new file mode 100755 index 00000000..99856f43 --- /dev/null +++ b/uncompyle2/opcode/opcode_26.py @@ -0,0 +1,186 @@ + +""" +opcode module - potentially shared between dis and other modules which +operate on bytecodes (e.g. peephole optimizers). +""" + +__all__ = ["cmp_op", "hasconst", "hasname", "hasjrel", "hasjabs", + "haslocal", "hascompare", "hasfree", "opname", "opmap", + "HAVE_ARGUMENT", "EXTENDED_ARG"] + +cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is', + 'is not', 'exception match', 'BAD') + +hasconst = [] +hasname = [] +hasjrel = [] +hasjabs = [] +haslocal = [] +hascompare = [] +hasfree = [] + +opmap = {} +opname = [''] * 256 +for op in range(256): opname[op] = '<%r>' % (op,) +del op + +def def_op(name, op): + opname[op] = name + opmap[name] = op + +def name_op(name, op): + def_op(name, op) + hasname.append(op) + +def jrel_op(name, op): + def_op(name, op) + hasjrel.append(op) + +def jabs_op(name, op): + def_op(name, op) + hasjabs.append(op) + +# Instruction opcodes for compiled code +# Blank lines correspond to available opcodes + +def_op('STOP_CODE', 0) +def_op('POP_TOP', 1) +def_op('ROT_TWO', 2) +def_op('ROT_THREE', 3) +def_op('DUP_TOP', 4) +def_op('ROT_FOUR', 5) + +def_op('NOP', 9) +def_op('UNARY_POSITIVE', 10) +def_op('UNARY_NEGATIVE', 11) +def_op('UNARY_NOT', 12) +def_op('UNARY_CONVERT', 13) + +def_op('UNARY_INVERT', 15) + +def_op('LIST_APPEND', 18) +def_op('BINARY_POWER', 19) +def_op('BINARY_MULTIPLY', 20) +def_op('BINARY_DIVIDE', 21) +def_op('BINARY_MODULO', 22) +def_op('BINARY_ADD', 23) +def_op('BINARY_SUBTRACT', 24) +def_op('BINARY_SUBSCR', 25) +def_op('BINARY_FLOOR_DIVIDE', 26) +def_op('BINARY_TRUE_DIVIDE', 27) +def_op('INPLACE_FLOOR_DIVIDE', 28) +def_op('INPLACE_TRUE_DIVIDE', 29) +def_op('SLICE+0', 30) +def_op('SLICE+1', 31) +def_op('SLICE+2', 32) +def_op('SLICE+3', 33) + +def_op('STORE_SLICE+0', 40) +def_op('STORE_SLICE+1', 41) +def_op('STORE_SLICE+2', 42) +def_op('STORE_SLICE+3', 43) + +def_op('DELETE_SLICE+0', 50) +def_op('DELETE_SLICE+1', 51) +def_op('DELETE_SLICE+2', 52) +def_op('DELETE_SLICE+3', 53) + +def_op('STORE_MAP', 54) +def_op('INPLACE_ADD', 55) +def_op('INPLACE_SUBTRACT', 56) +def_op('INPLACE_MULTIPLY', 57) +def_op('INPLACE_DIVIDE', 58) +def_op('INPLACE_MODULO', 59) +def_op('STORE_SUBSCR', 60) +def_op('DELETE_SUBSCR', 61) +def_op('BINARY_LSHIFT', 62) +def_op('BINARY_RSHIFT', 63) +def_op('BINARY_AND', 64) +def_op('BINARY_XOR', 65) +def_op('BINARY_OR', 66) +def_op('INPLACE_POWER', 67) +def_op('GET_ITER', 68) + +def_op('PRINT_EXPR', 70) +def_op('PRINT_ITEM', 71) +def_op('PRINT_NEWLINE', 72) +def_op('PRINT_ITEM_TO', 73) +def_op('PRINT_NEWLINE_TO', 74) +def_op('INPLACE_LSHIFT', 75) +def_op('INPLACE_RSHIFT', 76) +def_op('INPLACE_AND', 77) +def_op('INPLACE_XOR', 78) +def_op('INPLACE_OR', 79) +def_op('BREAK_LOOP', 80) +def_op('WITH_CLEANUP', 81) +def_op('LOAD_LOCALS', 82) +def_op('RETURN_VALUE', 83) +def_op('IMPORT_STAR', 84) +def_op('EXEC_STMT', 85) +def_op('YIELD_VALUE', 86) +def_op('POP_BLOCK', 87) +def_op('END_FINALLY', 88) +def_op('BUILD_CLASS', 89) + +HAVE_ARGUMENT = 90 # Opcodes from here have an argument: + +name_op('STORE_NAME', 90) # Index in name list +name_op('DELETE_NAME', 91) # "" +def_op('UNPACK_SEQUENCE', 92) # Number of tuple items +jrel_op('FOR_ITER', 93) + +name_op('STORE_ATTR', 95) # Index in name list +name_op('DELETE_ATTR', 96) # "" +name_op('STORE_GLOBAL', 97) # "" +name_op('DELETE_GLOBAL', 98) # "" +def_op('DUP_TOPX', 99) # number of items to duplicate +def_op('LOAD_CONST', 100) # Index in const list +hasconst.append(100) +name_op('LOAD_NAME', 101) # Index in name list +def_op('BUILD_TUPLE', 102) # Number of tuple items +def_op('BUILD_LIST', 103) # Number of list items +def_op('BUILD_MAP', 104) # Number of dict entries (upto 255) +name_op('LOAD_ATTR', 105) # Index in name list +def_op('COMPARE_OP', 106) # Comparison operator +hascompare.append(106) +name_op('IMPORT_NAME', 107) # Index in name list +name_op('IMPORT_FROM', 108) # Index in name list + +jrel_op('JUMP_FORWARD', 110) # Number of bytes to skip +jabs_op('JUMP_IF_FALSE', 111) # "" +jabs_op('JUMP_IF_TRUE', 112) # "" +jabs_op('JUMP_ABSOLUTE', 113) # Target byte offset from beginning of code + +name_op('LOAD_GLOBAL', 116) # Index in name list + +jabs_op('CONTINUE_LOOP', 119) # Target address +jrel_op('SETUP_LOOP', 120) # Distance to target address +jrel_op('SETUP_EXCEPT', 121) # "" +jrel_op('SETUP_FINALLY', 122) # "" + +def_op('LOAD_FAST', 124) # Local variable number +haslocal.append(124) +def_op('STORE_FAST', 125) # Local variable number +haslocal.append(125) +def_op('DELETE_FAST', 126) # Local variable number +haslocal.append(126) + +def_op('RAISE_VARARGS', 130) # Number of raise arguments (1, 2, or 3) +def_op('CALL_FUNCTION', 131) # #args + (#kwargs << 8) +def_op('MAKE_FUNCTION', 132) # Number of args with default values +def_op('BUILD_SLICE', 133) # Number of items +def_op('MAKE_CLOSURE', 134) +def_op('LOAD_CLOSURE', 135) +hasfree.append(135) +def_op('LOAD_DEREF', 136) +hasfree.append(136) +def_op('STORE_DEREF', 137) +hasfree.append(137) + +def_op('CALL_FUNCTION_VAR', 140) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_KW', 141) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_VAR_KW', 142) # #args + (#kwargs << 8) +def_op('EXTENDED_ARG', 143) +EXTENDED_ARG = 143 + +del def_op, name_op, jrel_op, jabs_op diff --git a/uncompyle2/opcode/opcode_27.py b/uncompyle2/opcode/opcode_27.py new file mode 100755 index 00000000..e403365b --- /dev/null +++ b/uncompyle2/opcode/opcode_27.py @@ -0,0 +1,192 @@ + +""" +opcode module - potentially shared between dis and other modules which +operate on bytecodes (e.g. peephole optimizers). +""" + +__all__ = ["cmp_op", "hasconst", "hasname", "hasjrel", "hasjabs", + "haslocal", "hascompare", "hasfree", "opname", "opmap", + "HAVE_ARGUMENT", "EXTENDED_ARG"] + +cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is', + 'is not', 'exception match', 'BAD') + +hasconst = [] +hasname = [] +hasjrel = [] +hasjabs = [] +haslocal = [] +hascompare = [] +hasfree = [] + +opmap = {} +opname = [''] * 256 +for op in range(256): opname[op] = '<%r>' % (op,) +del op + +def def_op(name, op): + opname[op] = name + opmap[name] = op + +def name_op(name, op): + def_op(name, op) + hasname.append(op) + +def jrel_op(name, op): + def_op(name, op) + hasjrel.append(op) + +def jabs_op(name, op): + def_op(name, op) + hasjabs.append(op) + +# Instruction opcodes for compiled code +# Blank lines correspond to available opcodes + +def_op('STOP_CODE', 0) +def_op('POP_TOP', 1) +def_op('ROT_TWO', 2) +def_op('ROT_THREE', 3) +def_op('DUP_TOP', 4) +def_op('ROT_FOUR', 5) + +def_op('NOP', 9) +def_op('UNARY_POSITIVE', 10) +def_op('UNARY_NEGATIVE', 11) +def_op('UNARY_NOT', 12) +def_op('UNARY_CONVERT', 13) + +def_op('UNARY_INVERT', 15) + +def_op('BINARY_POWER', 19) +def_op('BINARY_MULTIPLY', 20) +def_op('BINARY_DIVIDE', 21) +def_op('BINARY_MODULO', 22) +def_op('BINARY_ADD', 23) +def_op('BINARY_SUBTRACT', 24) +def_op('BINARY_SUBSCR', 25) +def_op('BINARY_FLOOR_DIVIDE', 26) +def_op('BINARY_TRUE_DIVIDE', 27) +def_op('INPLACE_FLOOR_DIVIDE', 28) +def_op('INPLACE_TRUE_DIVIDE', 29) +def_op('SLICE+0', 30) +def_op('SLICE+1', 31) +def_op('SLICE+2', 32) +def_op('SLICE+3', 33) + +def_op('STORE_SLICE+0', 40) +def_op('STORE_SLICE+1', 41) +def_op('STORE_SLICE+2', 42) +def_op('STORE_SLICE+3', 43) + +def_op('DELETE_SLICE+0', 50) +def_op('DELETE_SLICE+1', 51) +def_op('DELETE_SLICE+2', 52) +def_op('DELETE_SLICE+3', 53) + +def_op('STORE_MAP', 54) +def_op('INPLACE_ADD', 55) +def_op('INPLACE_SUBTRACT', 56) +def_op('INPLACE_MULTIPLY', 57) +def_op('INPLACE_DIVIDE', 58) +def_op('INPLACE_MODULO', 59) +def_op('STORE_SUBSCR', 60) +def_op('DELETE_SUBSCR', 61) +def_op('BINARY_LSHIFT', 62) +def_op('BINARY_RSHIFT', 63) +def_op('BINARY_AND', 64) +def_op('BINARY_XOR', 65) +def_op('BINARY_OR', 66) +def_op('INPLACE_POWER', 67) +def_op('GET_ITER', 68) + +def_op('PRINT_EXPR', 70) +def_op('PRINT_ITEM', 71) +def_op('PRINT_NEWLINE', 72) +def_op('PRINT_ITEM_TO', 73) +def_op('PRINT_NEWLINE_TO', 74) +def_op('INPLACE_LSHIFT', 75) +def_op('INPLACE_RSHIFT', 76) +def_op('INPLACE_AND', 77) +def_op('INPLACE_XOR', 78) +def_op('INPLACE_OR', 79) +def_op('BREAK_LOOP', 80) +def_op('WITH_CLEANUP', 81) +def_op('LOAD_LOCALS', 82) +def_op('RETURN_VALUE', 83) +def_op('IMPORT_STAR', 84) +def_op('EXEC_STMT', 85) +def_op('YIELD_VALUE', 86) +def_op('POP_BLOCK', 87) +def_op('END_FINALLY', 88) +def_op('BUILD_CLASS', 89) + +HAVE_ARGUMENT = 90 # Opcodes from here have an argument: + +name_op('STORE_NAME', 90) # Index in name list +name_op('DELETE_NAME', 91) # "" +def_op('UNPACK_SEQUENCE', 92) # Number of tuple items +jrel_op('FOR_ITER', 93) +def_op('LIST_APPEND', 94) +name_op('STORE_ATTR', 95) # Index in name list +name_op('DELETE_ATTR', 96) # "" +name_op('STORE_GLOBAL', 97) # "" +name_op('DELETE_GLOBAL', 98) # "" +def_op('DUP_TOPX', 99) # number of items to duplicate +def_op('LOAD_CONST', 100) # Index in const list +hasconst.append(100) +name_op('LOAD_NAME', 101) # Index in name list +def_op('BUILD_TUPLE', 102) # Number of tuple items +def_op('BUILD_LIST', 103) # Number of list items +def_op('BUILD_SET', 104) # Number of set items +def_op('BUILD_MAP', 105) # Number of dict entries (upto 255) +name_op('LOAD_ATTR', 106) # Index in name list +def_op('COMPARE_OP', 107) # Comparison operator +hascompare.append(107) +name_op('IMPORT_NAME', 108) # Index in name list +name_op('IMPORT_FROM', 109) # Index in name list +jrel_op('JUMP_FORWARD', 110) # Number of bytes to skip +jabs_op('JUMP_IF_FALSE_OR_POP', 111) # Target byte offset from beginning of code +jabs_op('JUMP_IF_TRUE_OR_POP', 112) # "" +jabs_op('JUMP_ABSOLUTE', 113) # "" +jabs_op('POP_JUMP_IF_FALSE', 114) # "" +jabs_op('POP_JUMP_IF_TRUE', 115) # "" + +name_op('LOAD_GLOBAL', 116) # Index in name list + +jabs_op('CONTINUE_LOOP', 119) # Target address +jrel_op('SETUP_LOOP', 120) # Distance to target address +jrel_op('SETUP_EXCEPT', 121) # "" +jrel_op('SETUP_FINALLY', 122) # "" + +def_op('LOAD_FAST', 124) # Local variable number +haslocal.append(124) +def_op('STORE_FAST', 125) # Local variable number +haslocal.append(125) +def_op('DELETE_FAST', 126) # Local variable number +haslocal.append(126) + +def_op('RAISE_VARARGS', 130) # Number of raise arguments (1, 2, or 3) +def_op('CALL_FUNCTION', 131) # #args + (#kwargs << 8) +def_op('MAKE_FUNCTION', 132) # Number of args with default values +def_op('BUILD_SLICE', 133) # Number of items +def_op('MAKE_CLOSURE', 134) +def_op('LOAD_CLOSURE', 135) +hasfree.append(135) +def_op('LOAD_DEREF', 136) +hasfree.append(136) +def_op('STORE_DEREF', 137) +hasfree.append(137) + +def_op('CALL_FUNCTION_VAR', 140) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_KW', 141) # #args + (#kwargs << 8) +def_op('CALL_FUNCTION_VAR_KW', 142) # #args + (#kwargs << 8) + +jrel_op('SETUP_WITH', 143) + +def_op('EXTENDED_ARG', 145) +EXTENDED_ARG = 145 +def_op('SET_ADD', 146) +def_op('MAP_ADD', 147) + +del def_op, name_op, jrel_op, jabs_op diff --git a/uncompyle2/spark.py b/uncompyle2/spark.py new file mode 100755 index 00000000..ac630f71 --- /dev/null +++ b/uncompyle2/spark.py @@ -0,0 +1,700 @@ +# Copyright (c) 1998-2002 John Aycock +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +__version__ = 'SPARK-0.7 (pre-alpha-7) uncompyle trim' + +def _namelist(instance): + namelist, namedict, classlist = [], {}, [instance.__class__] + for c in classlist: + for b in c.__bases__: + classlist.append(b) + for name in c.__dict__.keys(): + if not namedict.has_key(name): + namelist.append(name) + namedict[name] = 1 + return namelist + +# +# Extracted from GenericParser and made global so that [un]picking works. +# +class _State: + def __init__(self, stateno, items): + self.T, self.complete, self.items = [], [], items + self.stateno = stateno + +class GenericParser: + # + # An Earley parser, as per J. Earley, "An Efficient Context-Free + # Parsing Algorithm", CACM 13(2), pp. 94-102. Also J. C. Earley, + # "An Efficient Context-Free Parsing Algorithm", Ph.D. thesis, + # Carnegie-Mellon University, August 1968. New formulation of + # the parser according to J. Aycock, "Practical Earley Parsing + # and the SPARK Toolkit", Ph.D. thesis, University of Victoria, + # 2001, and J. Aycock and R. N. Horspool, "Practical Earley + # Parsing", unpublished paper, 2001. + # + + def __init__(self, start): + self.rules = {} + self.rule2func = {} + self.rule2name = {} + self.collectRules() + self.augment(start) + self.ruleschanged = 1 + + _NULLABLE = '\e_' + _START = 'START' + _BOF = '|-' + + # + # When pickling, take the time to generate the full state machine; + # some information is then extraneous, too. Unfortunately we + # can't save the rule2func map. + # + def __getstate__(self): + if self.ruleschanged: + # + # XXX - duplicated from parse() + # + self.computeNull() + self.newrules = {} + self.new2old = {} + self.makeNewRules() + self.ruleschanged = 0 + self.edges, self.cores = {}, {} + self.states = { 0: self.makeState0() } + self.makeState(0, self._BOF) + # + # XXX - should find a better way to do this.. + # + changes = 1 + while changes: + changes = 0 + for k, v in self.edges.items(): + if v is None: + state, sym = k + if self.states.has_key(state): + self.goto(state, sym) + changes = 1 + rv = self.__dict__.copy() + for s in self.states.values(): + del s.items + del rv['rule2func'] + del rv['nullable'] + del rv['cores'] + return rv + + def __setstate__(self, D): + self.rules = {} + self.rule2func = {} + self.rule2name = {} + self.collectRules() + start = D['rules'][self._START][0][1][1] # Blech. + self.augment(start) + D['rule2func'] = self.rule2func + D['makeSet'] = self.makeSet_fast + self.__dict__ = D + + # + # A hook for GenericASTBuilder and GenericASTMatcher. Mess + # thee not with this; nor shall thee toucheth the _preprocess + # argument to addRule. + # + def preprocess(self, rule, func): return rule, func + + def addRule(self, doc, func, _preprocess=1): + fn = func + rules = doc.split() + + index = [] + for i in xrange(len(rules)): + if rules[i] == '::=': + index.append(i-1) + index.append(len(rules)) + + for i in xrange(len(index)-1): + lhs = rules[index[i]] + rhs = rules[index[i]+2:index[i+1]] + rule = (lhs, tuple(rhs)) + + if _preprocess: + rule, fn = self.preprocess(rule, func) + + if self.rules.has_key(lhs): + self.rules[lhs].append(rule) + else: + self.rules[lhs] = [ rule ] + self.rule2func[rule] = fn + self.rule2name[rule] = func.__name__[2:] + self.ruleschanged = 1 + + def collectRules(self): + for name in _namelist(self): + if name[:2] == 'p_': + func = getattr(self, name) + doc = func.__doc__ + self.addRule(doc, func) + + def augment(self, start): + rule = '%s ::= %s %s' % (self._START, self._BOF, start) + self.addRule(rule, lambda args: args[1], 0) + + def computeNull(self): + self.nullable = {} + tbd = [] + + for rulelist in self.rules.values(): + lhs = rulelist[0][0] + self.nullable[lhs] = 0 + for rule in rulelist: + rhs = rule[1] + if len(rhs) == 0: + self.nullable[lhs] = 1 + continue + # + # We only need to consider rules which + # consist entirely of nonterminal symbols. + # This should be a savings on typical + # grammars. + # + for sym in rhs: + if not self.rules.has_key(sym): + break + else: + tbd.append(rule) + changes = 1 + while changes: + changes = 0 + for lhs, rhs in tbd: + if self.nullable[lhs]: + continue + for sym in rhs: + if not self.nullable[sym]: + break + else: + self.nullable[lhs] = 1 + changes = 1 + + def makeState0(self): + s0 = _State(0, []) + for rule in self.newrules[self._START]: + s0.items.append((rule, 0)) + return s0 + + def finalState(self, tokens): + # + # Yuck. + # + if len(self.newrules[self._START]) == 2 and len(tokens) == 0: + return 1 + start = self.rules[self._START][0][1][1] + return self.goto(1, start) + + def makeNewRules(self): + worklist = [] + for rulelist in self.rules.values(): + for rule in rulelist: + worklist.append((rule, 0, 1, rule)) + + for rule, i, candidate, oldrule in worklist: + lhs, rhs = rule + n = len(rhs) + while i < n: + sym = rhs[i] + if not self.rules.has_key(sym) or \ + not self.nullable[sym]: + candidate = 0 + i = i + 1 + continue + + newrhs = list(rhs) + newrhs[i] = self._NULLABLE+sym + newrule = (lhs, tuple(newrhs)) + worklist.append((newrule, i+1, + candidate, oldrule)) + candidate = 0 + i = i + 1 + else: + if candidate: + lhs = self._NULLABLE+lhs + rule = (lhs, rhs) + if self.newrules.has_key(lhs): + self.newrules[lhs].append(rule) + else: + self.newrules[lhs] = [ rule ] + self.new2old[rule] = oldrule + + def typestring(self, token): + return None + + def error(self, token): + print "Syntax error at or near `%s' token" % token + raise SystemExit + + def parse(self, tokens): + sets = [ [(1,0), (2,0)] ] + self.links = {} + + if self.ruleschanged: + self.computeNull() + self.newrules = {} + self.new2old = {} + self.makeNewRules() + self.ruleschanged = 0 + self.edges, self.cores = {}, {} + self.states = { 0: self.makeState0() } + self.makeState(0, self._BOF) + + for i in xrange(len(tokens)): + sets.append([]) + + if sets[i] == []: + break + self.makeSet(tokens[i], sets, i) + else: + sets.append([]) + self.makeSet(None, sets, len(tokens)) + + finalitem = (self.finalState(tokens), 0) + if finalitem not in sets[-2]: + if len(tokens) > 0: + self.error(tokens[i-1]) + else: + self.error(None) + + return self.buildTree(self._START, finalitem, + tokens, len(sets)-2) + + def isnullable(self, sym): + # + # For symbols in G_e only. If we weren't supporting 1.5, + # could just use sym.startswith(). + # + return self._NULLABLE == sym[0:len(self._NULLABLE)] + + def skip(self, (lhs, rhs), pos=0): + n = len(rhs) + while pos < n: + if not self.isnullable(rhs[pos]): + break + pos = pos + 1 + return pos + + def makeState(self, state, sym): + assert sym is not None + # + # Compute \epsilon-kernel state's core and see if + # it exists already. + # + kitems = [] + for rule, pos in self.states[state].items: + lhs, rhs = rule + if rhs[pos:pos+1] == (sym,): + kitems.append((rule, self.skip(rule, pos+1))) + + tcore = tuple(sorted(kitems)) + if self.cores.has_key(tcore): + return self.cores[tcore] + # + # Nope, doesn't exist. Compute it and the associated + # \epsilon-nonkernel state together; we'll need it right away. + # + k = self.cores[tcore] = len(self.states) + K, NK = _State(k, kitems), _State(k+1, []) + self.states[k] = K + predicted = {} + + edges = self.edges + rules = self.newrules + for X in K, NK: + worklist = X.items + for item in worklist: + rule, pos = item + lhs, rhs = rule + if pos == len(rhs): + X.complete.append(rule) + continue + + nextSym = rhs[pos] + key = (X.stateno, nextSym) + if not rules.has_key(nextSym): + if not edges.has_key(key): + edges[key] = None + X.T.append(nextSym) + else: + edges[key] = None + if not predicted.has_key(nextSym): + predicted[nextSym] = 1 + for prule in rules[nextSym]: + ppos = self.skip(prule) + new = (prule, ppos) + NK.items.append(new) + # + # Problem: we know K needs generating, but we + # don't yet know about NK. Can't commit anything + # regarding NK to self.edges until we're sure. Should + # we delay committing on both K and NK to avoid this + # hacky code? This creates other problems.. + # + if X is K: + edges = {} + + if NK.items == []: + return k + + # + # Check for \epsilon-nonkernel's core. Unfortunately we + # need to know the entire set of predicted nonterminals + # to do this without accidentally duplicating states. + # + tcore = tuple(sorted(predicted.keys())) + if self.cores.has_key(tcore): + self.edges[(k, None)] = self.cores[tcore] + return k + + nk = self.cores[tcore] = self.edges[(k, None)] = NK.stateno + self.edges.update(edges) + self.states[nk] = NK + return k + + def goto(self, state, sym): + key = (state, sym) + if not self.edges.has_key(key): + # + # No transitions from state on sym. + # + return None + + rv = self.edges[key] + if rv is None: + # + # Target state isn't generated yet. Remedy this. + # + rv = self.makeState(state, sym) + self.edges[key] = rv + return rv + + def gotoT(self, state, t): + return [self.goto(state, t)] + + def gotoST(self, state, st): + rv = [] + for t in self.states[state].T: + if st == t: + rv.append(self.goto(state, t)) + return rv + + def add(self, set, item, i=None, predecessor=None, causal=None): + if predecessor is None: + if item not in set: + set.append(item) + else: + key = (item, i) + if item not in set: + self.links[key] = [] + set.append(item) + self.links[key].append((predecessor, causal)) + + def makeSet(self, token, sets, i): + cur, next = sets[i], sets[i+1] + + ttype = token is not None and self.typestring(token) or None + if ttype is not None: + fn, arg = self.gotoT, ttype + else: + fn, arg = self.gotoST, token + + for item in cur: + ptr = (item, i) + state, parent = item + add = fn(state, arg) + for k in add: + if k is not None: + self.add(next, (k, parent), i+1, ptr) + nk = self.goto(k, None) + if nk is not None: + self.add(next, (nk, i+1)) + + if parent == i: + continue + + for rule in self.states[state].complete: + lhs, rhs = rule + for pitem in sets[parent]: + pstate, pparent = pitem + k = self.goto(pstate, lhs) + if k is not None: + why = (item, i, rule) + pptr = (pitem, parent) + self.add(cur, (k, pparent), + i, pptr, why) + nk = self.goto(k, None) + if nk is not None: + self.add(cur, (nk, i)) + + def makeSet_fast(self, token, sets, i): + # + # Call *only* when the entire state machine has been built! + # It relies on self.edges being filled in completely, and + # then duplicates and inlines code to boost speed at the + # cost of extreme ugliness. + # + cur, next = sets[i], sets[i+1] + ttype = token is not None and self.typestring(token) or None + + for item in cur: + ptr = (item, i) + state, parent = item + if ttype is not None: + k = self.edges.get((state, ttype), None) + if k is not None: + #self.add(next, (k, parent), i+1, ptr) + #INLINED --v + new = (k, parent) + key = (new, i+1) + if new not in next: + self.links[key] = [] + next.append(new) + self.links[key].append((ptr, None)) + #INLINED --^ + #nk = self.goto(k, None) + nk = self.edges.get((k, None), None) + if nk is not None: + #self.add(next, (nk, i+1)) + #INLINED --v + new = (nk, i+1) + if new not in next: + next.append(new) + #INLINED --^ + else: + add = self.gotoST(state, token) + for k in add: + if k is not None: + self.add(next, (k, parent), i+1, ptr) + #nk = self.goto(k, None) + nk = self.edges.get((k, None), None) + if nk is not None: + self.add(next, (nk, i+1)) + + if parent == i: + continue + + for rule in self.states[state].complete: + lhs, rhs = rule + for pitem in sets[parent]: + pstate, pparent = pitem + #k = self.goto(pstate, lhs) + k = self.edges.get((pstate, lhs), None) + if k is not None: + why = (item, i, rule) + pptr = (pitem, parent) + #self.add(cur, (k, pparent), + # i, pptr, why) + #INLINED --v + new = (k, pparent) + key = (new, i) + if new not in cur: + self.links[key] = [] + cur.append(new) + self.links[key].append((pptr, why)) + #INLINED --^ + #nk = self.goto(k, None) + nk = self.edges.get((k, None), None) + if nk is not None: + #self.add(cur, (nk, i)) + #INLINED --v + new = (nk, i) + if new not in cur: + cur.append(new) + #INLINED --^ + + def predecessor(self, key, causal): + for p, c in self.links[key]: + if c == causal: + return p + assert 0 + + def causal(self, key): + links = self.links[key] + if len(links) == 1: + return links[0][1] + choices = [] + rule2cause = {} + for p, c in links: + rule = c[2] + choices.append(rule) + rule2cause[rule] = c + return rule2cause[self.ambiguity(choices)] + + def deriveEpsilon(self, nt): + if len(self.newrules[nt]) > 1: + rule = self.ambiguity(self.newrules[nt]) + else: + rule = self.newrules[nt][0] + #print rule + + rhs = rule[1] + attr = [None] * len(rhs) + + for i in xrange(len(rhs)-1, -1, -1): + attr[i] = self.deriveEpsilon(rhs[i]) + return self.rule2func[self.new2old[rule]](attr) + + def buildTree(self, nt, item, tokens, k): + state, parent = item + + choices = [] + for rule in self.states[state].complete: + if rule[0] == nt: + choices.append(rule) + rule = choices[0] + if len(choices) > 1: + rule = self.ambiguity(choices) + #print rule + + rhs = rule[1] + attr = [None] * len(rhs) + + for i in xrange(len(rhs)-1, -1, -1): + sym = rhs[i] + if not self.newrules.has_key(sym): + if sym != self._BOF: + attr[i] = tokens[k-1] + key = (item, k) + item, k = self.predecessor(key, None) + #elif self.isnullable(sym): + elif self._NULLABLE == sym[0:len(self._NULLABLE)]: + attr[i] = self.deriveEpsilon(sym) + else: + key = (item, k) + why = self.causal(key) + attr[i] = self.buildTree(sym, why[0], + tokens, why[1]) + item, k = self.predecessor(key, why) + return self.rule2func[self.new2old[rule]](attr) + + def ambiguity(self, rules): + # + # XXX - problem here and in collectRules() if the same rule + # appears in >1 method. Also undefined results if rules + # causing the ambiguity appear in the same method. + # + + sortlist = [] + name2index = {} + for i in xrange(len(rules)): + lhs, rhs = rule = rules[i] + name = self.rule2name[self.new2old[rule]] + sortlist.append((len(rhs), name)) + name2index[name] = i + sortlist.sort() + list = map(lambda (a,b): b, sortlist) + return rules[name2index[self.resolve(list)]] + + def resolve(self, list): + # + # Resolve ambiguity in favor of the shortest RHS. + # Since we walk the tree from the top down, this + # should effectively resolve in favor of a "shift". + # + return list[0] + +# +# GenericASTBuilder automagically constructs a concrete/abstract syntax tree +# for a given input. The extra argument is a class (not an instance!) +# which supports the "__setslice__" and "__len__" methods. +# +# XXX - silently overrides any user code in methods. +# + +class GenericASTBuilder(GenericParser): + def __init__(self, AST, start): + GenericParser.__init__(self, start) + self.AST = AST + + def preprocess(self, rule, func): + rebind = lambda lhs, self=self: \ + lambda args, lhs=lhs, self=self: \ + self.buildASTNode(args, lhs) + lhs, rhs = rule + return rule, rebind(lhs) + + def buildASTNode(self, args, lhs): + children = [] + for arg in args: + if isinstance(arg, self.AST): + children.append(arg) + else: + children.append(arg) + return self.nonterminal(lhs, children) + + def nonterminal(self, type, args): + rv = self.AST(type) + rv[:len(args)] = args + return rv + +# +# GenericASTTraversal is a Visitor pattern according to Design Patterns. For +# each node it attempts to invoke the method n_, falling +# back onto the default() method if the n_* can't be found. The preorder +# traversal also looks for an exit hook named n__exit (no default +# routine is called if it's not found). To prematurely halt traversal +# of a subtree, call the prune() method -- this only makes sense for a +# preorder traversal. Node type is determined via the typestring() method. +# + +class GenericASTTraversalPruningException: + pass + +class GenericASTTraversal: + def __init__(self, ast): + self.ast = ast + + def typestring(self, node): + return node.type + + def prune(self): + raise GenericASTTraversalPruningException + + def preorder(self, node=None): + if node is None: + node = self.ast + + try: + name = 'n_' + self.typestring(node) + if hasattr(self, name): + func = getattr(self, name) + func(node) + else: + self.default(node) + except GenericASTTraversalPruningException: + return + + for kid in node: + self.preorder(kid) + + name = name + '_exit' + if hasattr(self, name): + func = getattr(self, name) + func(node) + + def default(self, node): + pass diff --git a/uncompyle2/verify.py b/uncompyle2/verify.py new file mode 100755 index 00000000..44bef997 --- /dev/null +++ b/uncompyle2/verify.py @@ -0,0 +1,335 @@ +# +# (C) Copyright 2000-2002 by hartmut Goebel +# +# byte-code verifier for uncompyle +# + +import types +import operator +import dis +import uncompyle2, Scanner + +BIN_OP_FUNCS = { +'BINARY_POWER': operator.pow, +'BINARY_MULTIPLY': operator.mul, +'BINARY_DIVIDE': operator.div, +'BINARY_FLOOR_DIVIDE': operator.floordiv, +'BINARY_TRUE_DIVIDE': operator.truediv, +'BINARY_MODULO' : operator.mod, +'BINARY_ADD': operator.add, +'BINARY_SUBRACT': operator.sub, +'BINARY_LSHIFT': operator.lshift, +'BINARY_RSHIFT': operator.rshift, +'BINARY_AND': operator.and_, +'BINARY_XOR': operator.xor, +'BINARY_OR': operator.or_, +} + +JUMP_OPs = None + +#--- exceptions --- + +class VerifyCmpError(Exception): + pass + +class CmpErrorConsts(VerifyCmpError): + """Exception to be raised when consts differ.""" + def __init__(self, name, index): + self.name = name + self.index = index + + def __str__(self): + return 'Compare Error within Consts of %s at index %i' % \ + (repr(self.name), self.index) + +class CmpErrorConstsType(VerifyCmpError): + """Exception to be raised when consts differ.""" + def __init__(self, name, index): + self.name = name + self.index = index + + def __str__(self): + return 'Consts type differ in %s at index %i' % \ + (repr(self.name), self.index) + +class CmpErrorConstsLen(VerifyCmpError): + """Exception to be raised when length of co_consts differs.""" + def __init__(self, name, consts1, consts2): + self.name = name + self.consts = (consts1, consts2) + + def __str__(self): + return 'Consts length differs in %s:\n\n%i:\t%s\n\n%i:\t%s\n\n' % \ + (repr(self.name), + len(self.consts[0]), `self.consts[0]`, + len(self.consts[1]), `self.consts[1]`) + +class CmpErrorCode(VerifyCmpError): + """Exception to be raised when code differs.""" + def __init__(self, name, index, token1, token2, tokens1, tokens2): + self.name = name + self.index = index + self.token1 = token1 + self.token2 = token2 + self.tokens = [tokens1, tokens2] + + def __str__(self): + s = reduce(lambda s,t: "%s%-37s\t%-37s\n" % (s, t[0], t[1]), + map(lambda a,b: (a,b), + self.tokens[0], + self.tokens[1]), + 'Code differs in %s\n' % str(self.name)) + return ('Code differs in %s at offset %s [%s] != [%s]\n\n' % \ + (repr(self.name), self.index, + repr(self.token1), repr(self.token2))) + s + +class CmpErrorCodeLen(VerifyCmpError): + """Exception to be raised when code length differs.""" + def __init__(self, name, tokens1, tokens2): + self.name = name + self.tokens = [tokens1, tokens2] + + def __str__(self): + return reduce(lambda s,t: "%s%-37s\t%-37s\n" % (s, t[0], t[1]), + map(lambda a,b: (a,b), + self.tokens[0], + self.tokens[1]), + 'Code len differs in %s\n' % str(self.name)) + +class CmpErrorMember(VerifyCmpError): + """Exception to be raised when other members differ.""" + def __init__(self, name, member, data1, data2): + self.name = name + self.member = member + self.data = (data1, data2) + + def __str__(self): + return 'Member %s differs in %s:\n\t%s\n\t%s\n' % \ + (repr(self.member), repr(self.name), + repr(self.data[0]), repr(self.data[1])) + +#--- compare --- + +# these members are ignored +__IGNORE_CODE_MEMBERS__ = ['co_filename', 'co_firstlineno', 'co_lnotab', 'co_stacksize', 'co_names'] + +def cmp_code_objects(version, code_obj1, code_obj2, name=''): + """ + Compare two code-objects. + + This is the main part of this module. + """ + #print code_obj1, type(code_obj2) + assert type(code_obj1) == types.CodeType + assert type(code_obj2) == types.CodeType + #print dir(code_obj1) + if isinstance(code_obj1, object): + # new style classes (Python 2.2) + # assume _both_ code objects to be new stle classes + assert dir(code_obj1) == dir(code_obj2) + else: + # old style classes + assert dir(code_obj1) == code_obj1.__members__ + assert dir(code_obj2) == code_obj2.__members__ + assert code_obj1.__members__ == code_obj2.__members__ + + if name == '__main__': + name = code_obj1.co_name + else: + name = '%s.%s' % (name, code_obj1.co_name) + if name == '.?': name = '__main__' + + if isinstance(code_obj1, object) and cmp(code_obj1, code_obj2): + # use the new style code-classes' __cmp__ method, which + # should be faster and more sophisticated + # if this compare fails, we use the old routine to + # find out, what exactly is nor equal + # if this compare succeds, simply return + #return + pass + + if isinstance(code_obj1, object): + members = filter(lambda x: x.startswith('co_'), dir(code_obj1)) + else: + members = dir(code_obj1); + members.sort(); #members.reverse() + + tokens1 = None + for member in members: + if member in __IGNORE_CODE_MEMBERS__: + pass + elif member == 'co_code': + scanner = Scanner.getscanner(version) + scanner.setShowAsm( showasm=0 ) + global JUMP_OPs + JUMP_OPs = scanner.JUMP_OPs + ['JUMP_BACK'] + + # use changed Token class + # we (re)set this here to save exception handling, + # which would get 'unubersichtlich' + scanner.setTokenClass(Token) + try: + # disassemble both code-objects + tokens1,customize = scanner.disassemble(code_obj1) + del customize # save memory + tokens2,customize = scanner.disassemble(code_obj2) + del customize # save memory + finally: + scanner.resetTokenClass() # restore Token class + + targets1 = dis.findlabels(code_obj1.co_code) + tokens1 = [t for t in tokens1 if t.type != 'COME_FROM'] + tokens2 = [t for t in tokens2 if t.type != 'COME_FROM'] + + i1 = 0; i2 = 0 + offset_map = {}; check_jumps = {} + while i1 < len(tokens1): + if i2 >= len(tokens2): + if len(tokens1) == len(tokens2) + 2 \ + and tokens1[-1].type == 'RETURN_VALUE' \ + and tokens1[-2].type == 'LOAD_CONST' \ + and tokens1[-2].pattr == None \ + and tokens1[-3].type == 'RETURN_VALUE': + break + else: + raise CmpErrorCodeLen(name, tokens1, tokens2) + + offset_map[tokens1[i1].offset] = tokens2[i2].offset + + for idx1, idx2, offset2 in check_jumps.get(tokens1[i1].offset, []): + if offset2 != tokens2[i2].offset: + raise CmpErrorCode(name, tokens1[idx1].offset, tokens1[idx1], + tokens2[idx2], tokens1, tokens2) + + if tokens1[i1] != tokens2[i2]: + if tokens1[i1].type == 'LOAD_CONST' == tokens2[i2].type: + i = 1 + while tokens1[i1+i].type == 'LOAD_CONST': + i += 1 + if tokens1[i1+i].type.startswith(('BUILD_TUPLE', 'BUILD_LIST')) \ + and i == int(tokens1[i1+i].type.split('_')[-1]): + t = tuple([ elem.pattr for elem in tokens1[i1:i1+i] ]) + if t != tokens2[i2].pattr: + raise CmpErrorCode(name, tokens1[i1].offset, tokens1[i1], + tokens2[i2], tokens1, tokens2) + i1 += i + 1 + i2 += 1 + continue + elif i == 2 and tokens1[i1+i].type == 'ROT_TWO' and tokens2[i2+1].type == 'UNPACK_SEQUENCE_2': + i1 += 3 + i2 += 2 + continue + elif i == 2 and tokens1[i1+i].type in BIN_OP_FUNCS: + f = BIN_OP_FUNCS[tokens1[i1+i].type] + if f(tokens1[i1].pattr, tokens1[i1+1].pattr) == tokens2[i2].pattr: + i1 += 3 + i2 += 1 + continue + elif tokens1[i1].type == 'UNARY_NOT': + if tokens2[i2].type == 'POP_JUMP_IF_TRUE': + if tokens1[i1+1].type == 'POP_JUMP_IF_FALSE': + i1 += 2 + i2 += 1 + continue + elif tokens2[i2].type == 'POP_JUMP_IF_FALSE': + if tokens1[i1+1].type == 'POP_JUMP_IF_TRUE': + i1 += 2 + i2 += 1 + continue + elif tokens1[i1].type in ('JUMP_FORWARD', 'JUMP_BACK') \ + and tokens1[i1-1].type == 'RETURN_VALUE' \ + and tokens2[i2-1].type in ('RETURN_VALUE', 'RETURN_END_IF') \ + and int(tokens1[i1].offset) not in targets1: + i1 += 1 + continue + elif tokens1[i1].type == 'JUMP_FORWARD' and tokens2[i2].type == 'JUMP_BACK' \ + and tokens1[i1+1].type == 'JUMP_BACK' and tokens2[i2+1].type == 'JUMP_BACK' \ + and int(tokens1[i1].pattr) == int(tokens1[i1].offset) + 3: + if int(tokens1[i1].pattr) == int(tokens1[i1+1].offset): + i1 += 2 + i2 += 2 + continue + + raise CmpErrorCode(name, tokens1[i1].offset, tokens1[i1], + tokens2[i2], tokens1, tokens2) + elif tokens1[i1].type in JUMP_OPs and tokens1[i1].pattr != tokens2[i2].pattr: + dest1 = int(tokens1[i1].pattr) + dest2 = int(tokens2[i2].pattr) + if tokens1[i1].type == 'JUMP_BACK': + if offset_map[dest1] != dest2: + raise CmpErrorCode(name, tokens1[i1].offset, tokens1[i1], + tokens2[i2], tokens1, tokens2) + else: + #import pdb; pdb.set_trace() + if dest1 in check_jumps: + check_jumps[dest1].append((i1,i2,dest2)) + else: + check_jumps[dest1] = [(i1,i2,dest2)] + + i1 += 1 + i2 += 1 + del tokens1, tokens2 # save memory + elif member == 'co_consts': + # partial optimization can make the co_consts look different, + # so we'll just compare the code consts + codes1 = ( c for c in code_obj1.co_consts if type(c) == types.CodeType ) + codes2 = ( c for c in code_obj2.co_consts if type(c) == types.CodeType ) + + for c1, c2 in zip(codes1, codes2): + cmp_code_objects(version, c1, c2, name=name) + else: + # all other members must be equal + if getattr(code_obj1, member) != getattr(code_obj2, member): + raise CmpErrorMember(name, member, + getattr(code_obj1,member), + getattr(code_obj2,member)) + +class Token(Scanner.Token): + """Token class with changed semantics for 'cmp()'.""" + + def __cmp__(self, o): + t = self.type # shortcut + loads = ('LOAD_NAME', 'LOAD_GLOBAL', 'LOAD_CONST') + if t in loads and o.type in loads: + if self.pattr == 'None' and o.pattr == None: + return 0 + if t == 'BUILD_TUPLE_0' and o.type == 'LOAD_CONST' and o.pattr == (): + return 0 + if t == 'COME_FROM' == o.type: + return 0 + if t == 'PRINT_ITEM_CONT' and o.type == 'PRINT_ITEM': + return 0 + if t == 'RETURN_VALUE' and o.type == 'RETURN_END_IF': + return 0 + if t == 'JUMP_IF_FALSE_OR_POP' and o.type == 'POP_JUMP_IF_FALSE': + return 0 + if t in JUMP_OPs: + # ignore offset + return cmp(t, o.type) + return cmp(t, o.type) or cmp(self.pattr, o.pattr) + + def __repr__(self): + return '%s %s (%s)' % (str(self.type), str(self.attr), + repr(self.pattr)) + + def __str__(self): + return '%s\t%-17s %r' % (self.offset, self.type, self.pattr) + +def compare_code_with_srcfile(pyc_filename, src_filename): + """Compare a .pyc with a source code file.""" + version, code_obj1 = uncompyle2._load_module(pyc_filename) + code_obj2 = uncompyle2._load_file(src_filename) + cmp_code_objects(version, code_obj1, code_obj2) + +def compare_files(pyc_filename1, pyc_filename2): + """Compare two .pyc files.""" + version, code_obj1 = uncompyle2._load_module(pyc_filename1) + version, code_obj2 = uncompyle2._load_module(pyc_filename2) + cmp_code_objects(version, code_obj1, code_obj2) + +if __name__ == '__main__': + t1 = Token('LOAD_CONST', None, 'code_object _expandLang', 52) + t2 = Token('LOAD_CONST', -421, 'code_object _expandLang', 55) + print `t1` + print `t2` + print cmp(t1, t2), cmp(t1.type, t2.type), cmp(t1.attr, t2.attr)